From f83d179ea97256baf0962d57dabc912e82753b97 Mon Sep 17 00:00:00 2001 From: petrie911 <69443847+petrie911@users.noreply.github.com> Date: Wed, 14 Feb 2024 12:33:21 -0600 Subject: [PATCH] improve match on i3, add scratches, some linker cleanup (#127) * stuff * fixes * addrs --- include/i6.h | 1 + include/variables.h | 2 +- linker_scripts/us/symbol_addrs_engine.txt | 2 + linker_scripts/us/undefined_syms.ld | 271 ---------------------- src/main/fox_demo.c | 19 +- src/main/fox_enmy2.c | 4 +- src/overlays/ovl_i3/fox_a6.c | 221 +++++++++--------- src/overlays/ovl_i3/fox_aq.c | 19 +- src/overlays/ovl_i3/fox_zo.c | 222 ++++++++---------- src/overlays/ovl_i6/fox_andross.c | 6 +- tools/permuter_settings.toml | 12 +- 11 files changed, 248 insertions(+), 531 deletions(-) diff --git a/include/i6.h b/include/i6.h index 36804b40..cf8b1b5b 100644 --- a/include/i6.h +++ b/include/i6.h @@ -25,6 +25,7 @@ extern f32 D_i6_801A7F74; extern f32 D_i6_801A7F78; extern f32 D_i6_801A7F7C; +void func_i6_80187530(Actor*); void func_i6_80193C4C(Player*); void func_i6_80195E44(Actor*); void func_i6_80196BF8(Player*); diff --git a/include/variables.h b/include/variables.h index 09f5629a..44aa6598 100644 --- a/include/variables.h +++ b/include/variables.h @@ -392,8 +392,8 @@ extern GameState gGameState; extern s32 D_80177838; extern s32 D_Timer_8017783C; extern s32 D_80177840; // Stage clear time -extern s32 gBossHealthBar; extern s32 D_80177844; +extern s32 gBossHealthBar; extern OptionState gOptionMenuStatus; extern s32 D_80177850; extern s32 D_80177854; diff --git a/linker_scripts/us/symbol_addrs_engine.txt b/linker_scripts/us/symbol_addrs_engine.txt index 1caea4cf..76d8d2b0 100644 --- a/linker_scripts/us/symbol_addrs_engine.txt +++ b/linker_scripts/us/symbol_addrs_engine.txt @@ -379,6 +379,8 @@ D_Timer_80161A60 = 0x80161A60; D_80161A62 = 0x80161A62; D_80161A64 = 0x80161A64; sEnvSettings = 0x80161A68; + +// fox_context D_80161A70 = 0x80161A70; D_80161A74 = 0x80161A74; D_80161A78 = 0x80161A78; diff --git a/linker_scripts/us/undefined_syms.ld b/linker_scripts/us/undefined_syms.ld index c44562ec..a0aa934a 100644 --- a/linker_scripts/us/undefined_syms.ld +++ b/linker_scripts/us/undefined_syms.ld @@ -1,272 +1,3 @@ - -func_80187530 = 0x80187530; -func_8018753C = 0x8018753C; -func_8018756C = 0x8018756C; -func_801875A4 = 0x801875A4; -func_80187650 = 0x80187650; -func_801877C4 = 0x801877C4; -func_80187944 = 0x80187944; -func_8018795C = 0x8018795C; -func_801880E4 = 0x801880E4; -func_80188344 = 0x80188344; -func_80188448 = 0x80188448; -func_80188528 = 0x80188528; -func_80188660 = 0x80188660; -func_801887D0 = 0x801887D0; -func_80188AD0 = 0x80188AD0; -func_80188CAC = 0x80188CAC; -func_80188F60 = 0x80188F60; -func_80188FA8 = 0x80188FA8; -func_80188FAC = 0x80188FAC; -func_80188FE4 = 0x80188FE4; -func_80189058 = 0x80189058; -func_80189114 = 0x80189114; -func_80189194 = 0x80189194; -func_8018933C = 0x8018933C; -func_801893B8 = 0x801893B8; -func_80189470 = 0x80189470; -func_801895B8 = 0x801895B8; -func_80189724 = 0x80189724; -func_8018978C = 0x8018978C; -func_80189AFC = 0x80189AFC; -func_80189B70 = 0x80189B70; -func_80189CC8 = 0x80189CC8; -func_8018A1C0 = 0x8018A1C0; -func_8018A544 = 0x8018A544; -func_8018AA74 = 0x8018AA74; -func_8018AABC = 0x8018AABC; -func_8018AB44 = 0x8018AB44; -func_8018AED0 = 0x8018AED0; -func_8018B15C = 0x8018B15C; -func_8018B268 = 0x8018B268; -func_8018B418 = 0x8018B418; -func_8018B58C = 0x8018B58C; -func_8018B6AC = 0x8018B6AC; -func_8018B8C0 = 0x8018B8C0; -func_8018B9D0 = 0x8018B9D0; -func_8018BAAC = 0x8018BAAC; -func_8018BACC = 0x8018BACC; -func_8018BBA4 = 0x8018BBA4; -func_8018BBF8 = 0x8018BBF8; -func_8018BD7C = 0x8018BD7C; -func_8018BE84 = 0x8018BE84; -func_8018C19C = 0x8018C19C; -func_8018C54C = 0x8018C54C; -func_8018C8A8 = 0x8018C8A8; -func_8018CAD4 = 0x8018CAD4; -func_8018CF98 = 0x8018CF98; -func_8018D9EC = 0x8018D9EC; -func_8018DA6C = 0x8018DA6C; -func_8018DAEC = 0x8018DAEC; -func_8018DB6C = 0x8018DB6C; -func_8018DBEC = 0x8018DBEC; -func_8018DBF0 = 0x8018DBF0; -func_8018DCE4 = 0x8018DCE4; -func_8018DDAC = 0x8018DDAC; -func_8018DE14 = 0x8018DE14; -func_8018E290 = 0x8018E290; -func_8018E2D8 = 0x8018E2D8; -func_8018E54C = 0x8018E54C; -func_8018E5B4 = 0x8018E5B4; -func_8018E5F8 = 0x8018E5F8; -func_8018E76C = 0x8018E76C; -func_8018ECAC = 0x8018ECAC; -func_8018ED78 = 0x8018ED78; -func_8018EE84 = 0x8018EE84; -func_8018EF14 = 0x8018EF14; -func_8018EF90 = 0x8018EF90; -func_8018F038 = 0x8018F038; -func_8018F044 = 0x8018F044; -func_8018F31C = 0x8018F31C; -func_8018F330 = 0x8018F330; -func_8018F4D8 = 0x8018F4D8; -func_8018F884 = 0x8018F884; -func_8018F8B8 = 0x8018F8B8; -func_8018FE38 = 0x8018FE38; -func_8018FF20 = 0x8018FF20; -func_8018FF84 = 0x8018FF84; -func_80190020 = 0x80190020; -func_80190078 = 0x80190078; -func_80190430 = 0x80190430; -func_801904CC = 0x801904CC; -func_80190A00 = 0x80190A00; -func_80190F08 = 0x80190F08; -func_80191010 = 0x80191010; -func_80191054 = 0x80191054; -func_80191180 = 0x80191180; -func_801912FC = 0x801912FC; -func_801914C4 = 0x801914C4; -func_80191680 = 0x80191680; -func_80191AFC = 0x80191AFC; -func_80191B4C = 0x80191B4C; -func_80191BC4 = 0x80191BC4; -func_80191DB0 = 0x80191DB0; -func_80191FFC = 0x80191FFC; -func_80192094 = 0x80192094; -func_801922DC = 0x801922DC; -func_80192358 = 0x80192358; -func_801923C0 = 0x801923C0; -func_8019243C = 0x8019243C; -func_801924A8 = 0x801924A8; -func_80192518 = 0x80192518; -func_80192834 = 0x80192834; -func_801928C8 = 0x801928C8; -func_80192984 = 0x80192984; -func_80192A68 = 0x80192A68; -func_80192C18 = 0x80192C18; -func_80192CD4 = 0x80192CD4; -func_80192E2C = 0x80192E2C; -func_80192E64 = 0x80192E64; -func_80192E94 = 0x80192E94; -func_80192EB0 = 0x80192EB0; -func_80193240 = 0x80193240; -func_80193244 = 0x80193244; -func_80193380 = 0x80193380; -func_801933DC = 0x801933DC; -func_80193434 = 0x80193434; -func_801934D0 = 0x801934D0; -func_8019350C = 0x8019350C; -func_80193540 = 0x80193540; -func_8019356C = 0x8019356C; -func_801935D4 = 0x801935D4; -func_80193718 = 0x80193718; -func_80193B1C = 0x80193B1C; -func_80194398 = 0x80194398; -func_801946C4 = 0x801946C4; -func_801949DC = 0x801949DC; -func_80194A84 = 0x80194A84; -func_80196210 = 0x80196210; -func_80196288 = 0x80196288; -func_801968F4 = 0x801968F4; -func_80197A94 = 0x80197A94; -func_80197C64 = 0x80197C64; -func_80197CB8 = 0x80197CB8; -func_801982A8 = 0x801982A8; -func_801985E4 = 0x801985E4; -func_80198968 = 0x80198968; -func_8019969C = 0x8019969C; -func_8019983C = 0x8019983C; -func_80199A28 = 0x80199A28; -func_80199E24 = 0x80199E24; -func_80199F10 = 0x80199F10; -func_8019A1FC = 0x8019A1FC; -func_8019A5D4 = 0x8019A5D4; -func_8019ACCC = 0x8019ACCC; -func_8019B548 = 0x8019B548; -func_8019B7DC = 0x8019B7DC; -func_8019B854 = 0x8019B854; -func_8019BDE0 = 0x8019BDE0; -func_8019BE48 = 0x8019BE48; -func_8019C1CC = 0x8019C1CC; -func_8019C454 = 0x8019C454; -func_8019C778 = 0x8019C778; -func_8019C83C = 0x8019C83C; -func_8019C888 = 0x8019C888; -func_8019CBEC = 0x8019CBEC; -func_8019CE58 = 0x8019CE58; -func_8019CE88 = 0x8019CE88; -func_8019D15C = 0x8019D15C; -func_8019D3C4 = 0x8019D3C4; -func_8019D700 = 0x8019D700; -func_8019E234 = 0x8019E234; -func_8019E2C4 = 0x8019E2C4; -func_8019E3A8 = 0x8019E3A8; -func_8019E410 = 0x8019E410; -func_8019E454 = 0x8019E454; -func_8019E98C = 0x8019E98C; -func_8019EA60 = 0x8019EA60; -func_8019EA7C = 0x8019EA7C; -func_8019EE68 = 0x8019EE68; -func_8019F20C = 0x8019F20C; -func_8019F7AC = 0x8019F7AC; -func_8019FF9C = 0x8019FF9C; -func_801A003C = 0x801A003C; -func_801A0120 = 0x801A0120; -func_801A0AF0 = 0x801A0AF0; -func_801A0BD8 = 0x801A0BD8; -func_801A12C4 = 0x801A12C4; -func_801A23AC = 0x801A23AC; -func_801A2A78 = 0x801A2A78; -func_801A2B24 = 0x801A2B24; -func_801A2DD8 = 0x801A2DD8; -func_801A3240 = 0x801A3240; -func_801A3BD4 = 0x801A3BD4; -func_801A3E98 = 0x801A3E98; -func_801A43BC = 0x801A43BC; -func_801A46A0 = 0x801A46A0; -func_801A4A64 = 0x801A4A64; -func_801A4B24 = 0x801A4B24; -func_801A4CB0 = 0x801A4CB0; -func_801A4E44 = 0x801A4E44; -func_801A52B8 = 0x801A52B8; -func_801A54E8 = 0x801A54E8; -func_801A57D0 = 0x801A57D0; -func_801A5AF0 = 0x801A5AF0; -func_801A5B3C = 0x801A5B3C; -func_801A5B4C = 0x801A5B4C; -func_801A5D68 = 0x801A5D68; -func_801A5E54 = 0x801A5E54; -func_801A5F90 = 0x801A5F90; -func_801A5FD0 = 0x801A5FD0; -func_801A6100 = 0x801A6100; -func_801A6144 = 0x801A6144; -func_801A6540 = 0x801A6540; -func_801A6608 = 0x801A6608; -func_801A67C8 = 0x801A67C8; -func_801A68EC = 0x801A68EC; -func_801A71B8 = 0x801A71B8; -func_801A7E7C = 0x801A7E7C; -func_801AC294 = 0x801AC294; -func_801AC438 = 0x801AC438; -func_801AC918 = 0x801AC918; -func_801AD6C0 = 0x801AD6C0; -func_801AD6F0 = 0x801AD6F0; -func_801ADAC8 = 0x801ADAC8; -func_801ADD68 = 0x801ADD68; -func_801AE168 = 0x801AE168; -func_801AE2C0 = 0x801AE2C0; -func_801AE3D8 = 0x801AE3D8; -func_801AE87C = 0x801AE87C; -func_801AEAA0 = 0x801AEAA0; -func_801AEB44 = 0x801AEB44; -func_801AEC04 = 0x801AEC04; -func_801AEEFC = 0x801AEEFC; -func_801AFA5C = 0x801AFA5C; -func_801B099C = 0x801B099C; -func_801B0B60 = 0x801B0B60; -func_801B0EC0 = 0x801B0EC0; -func_801B134C = 0x801B134C; -func_801B4D84 = 0x801B4D84; -func_801B504C = 0x801B504C; -func_801B50E8 = 0x801B50E8; -func_801B619C = 0x801B619C; -func_801B638C = 0x801B638C; -func_801B6FF8 = 0x801B6FF8; -func_801B7A24 = 0x801B7A24; -func_801B7C78 = 0x801B7C78; -func_801B90DC = 0x801B90DC; -func_801B91A4 = 0x801B91A4; -func_801BA108 = 0x801BA108; -func_801BA26C = 0x801BA26C; -func_801BA4E4 = 0x801BA4E4; -func_801BA6A4 = 0x801BA6A4; -func_801BAD7C = 0x801BAD7C; -func_801BADF8 = 0x801BADF8; -func_801BB204 = 0x801BB204; -func_801BB79C = 0x801BB79C; -func_801BC930 = 0x801BC930; -func_801BC9A0 = 0x801BC9A0; -func_801BD264 = 0x801BD264; -func_801BD54C = 0x801BD54C; -func_801BDE6C = 0x801BDE6C; -func_801BE1FC = 0x801BE1FC; -func_801BE3F8 = 0x801BE3F8; -func_801BEB1C = 0x801BEB1C; -func_801BEC50 = 0x801BEC50; -func_801BEC5C = 0x801BEC5C; -func_801BEC68 = 0x801BEC68; -func_801BEC74 = 0x801BEC74; - // rsp_boot func_84001008 = 0x84001008; func_84001064 = 0x84001064; @@ -998,8 +729,6 @@ D_C03876C = 0x0C03876C; D_C038860 = 0x0C038860; D_C038954 = 0x0C038954; -D_fake_i6_80196D00 = 0x80196D00; - // fox_end2 D_3016CC0 = 0x03016CC0; D_50054B0 = 0x050054B0; diff --git a/src/main/fox_demo.c b/src/main/fox_demo.c index 79843739..2d50c177 100644 --- a/src/main/fox_demo.c +++ b/src/main/fox_demo.c @@ -21,13 +21,6 @@ extern Animation D_602A2CC[]; extern Animation D_602CEB4[]; extern Animation D_602B778[]; -extern f32 D_80178454; -extern f32 D_80178458; -extern f32 D_80178464; -extern f32 D_80178468; -extern f32 D_80178474; -extern f32 D_80178478; - extern Gfx D_400AAE0[]; extern Gfx D_6000D80[]; extern Gfx D_600BAA0[]; @@ -1216,9 +1209,9 @@ void func_8004B368(Player* player) { Matrix_MultVec3f(gCalcMatrix, &sp78, &sp6C); - D_80178454 = player->pos.x + sp6C.x; - D_80178464 = player->pos.y + sp6C.y; - D_80178474 = player->unk_138 + sp6C.z; + D_80178450[1] = player->pos.x + sp6C.x; + D_80178460[1] = player->pos.y + sp6C.y; + D_80178470[1] = player->unk_138 + sp6C.z; sp78.x = gActors[2].fwork[0] * gActors[2].fwork[3]; sp78.y = gActors[2].fwork[1] * gActors[2].fwork[3]; @@ -1226,9 +1219,9 @@ void func_8004B368(Player* player) { Matrix_MultVec3f(gCalcMatrix, &sp78, &sp6C); - D_80178458 = player->pos.x + sp6C.x; - D_80178468 = player->pos.y + sp6C.y; - D_80178478 = player->unk_138 + sp6C.z; + D_80178450[2] = player->pos.x + sp6C.x; + D_80178460[2] = player->pos.y + sp6C.y; + D_80178470[2] = player->unk_138 + sp6C.z; switch (gCsFrameCount) { case 330: diff --git a/src/main/fox_enmy2.c b/src/main/fox_enmy2.c index 07e09767..88979745 100644 --- a/src/main/fox_enmy2.c +++ b/src/main/fox_enmy2.c @@ -6,8 +6,6 @@ s32 D_80161690; #include "fox_enmy2_assets.h" -void func_80187530(Actor*); // figure out which one later - void func_8006A7B0(u16* msg, s32 character) { PRINTF("Enm->obj.pos.y + tmp_xyz.y=<%10.3f>\n"); if ((gRadioState == 0) || (D_80177D68 != character)) { @@ -3659,7 +3657,7 @@ void func_80072594(Actor* actor) { case 103: case 104: - func_80187530(actor); + func_i6_80187530(actor); // might be i5 or i2 break; case 106: diff --git a/src/overlays/ovl_i3/fox_a6.c b/src/overlays/ovl_i3/fox_a6.c index 6d09d92d..91dc683b 100644 --- a/src/overlays/ovl_i3/fox_a6.c +++ b/src/overlays/ovl_i3/fox_a6.c @@ -425,7 +425,7 @@ f32 D_i3_801BF3F4[12] = { f32 D_i3_801BF424[12] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, }; -Color_RGBAF32 D_i3_801BF454[4] = { +f32 D_i3_801BF454[4][4] = { { 255.0f, 0.0f, 0.0f, 0.0f }, { 255.0f, 255.0f, 0.0f, 0.0f }, { 0.0f, 255.0f, 255.0f, 0.0f }, @@ -529,26 +529,27 @@ void func_i3_80187754(Boss* bossA6) { } #ifdef NON_MATCHING +// var_s0 = D_i3_801C2250[A6_BSS_9]; is using the wrong variable, but unclear what correct one is. +// https://decomp.me/scratch/P3kGr void func_i3_80187944(Boss* bossA6) { s32 i; - f32 var_fv1; + s32 pad; s32 var_s0; s32 sp128; - Color_RGBAF32* sp68; + s32 spf124; f32 sp120; - f32 sp11C; - f32 sp118; - f32 sp114; - f32 sp110; - f32 sp10C; - Effect* temp_s0_3; + f32 dx_11C; + f32 dy_118; + f32 dz_114; + f32 pitch_110; + f32 yaw_10C; + f32 temp2; f32 sp104; Vec3f spC8[5]; Vec3f spA4[3]; Vec3f sp98; Vec3f sp8C; - s32 temp_1; - f32 temp2; + Effect* temp_s0_3; gBossFrameCount++; if ((bossA6->state < 6) || ((bossA6->state >= 8) && (bossA6->state < 12))) { @@ -565,8 +566,9 @@ void func_i3_80187944(Boss* bossA6) { bossA6->dmgType = DMG_NONE; if (bossA6->fwork[A6_FWK_0] > 5.0f) { if ((bossA6->dmgPart == 0) && (bossA6->swork[A6_SWK_25] == 0) && (bossA6->fwork[A6_FWK_29] < 30.0f)) { - bossA6->health -= bossA6->damage; bossA6->timer_05C = 15; + bossA6->health -= bossA6->damage; + if (bossA6->health < 390) { Audio_PlaySfx(0x2943500F, bossA6->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } else { @@ -629,17 +631,17 @@ void func_i3_80187944(Boss* bossA6) { func_8007C120(bossA6->obj.pos.x, bossA6->obj.pos.y, bossA6->obj.pos.z + 200.0f, bossA6->vel.x, bossA6->vel.y, bossA6->vel.z, 0.3f, 1); } - temp2 = 0.5f; - if ((gBosses)[0].swork[A6_SWK_25] == 1) { - temp2 = 2.0f; + sp120 = 0.5f; + if (gBosses[0].swork[A6_SWK_25] == 1) { + sp120 = 2.0f; } if (D_i3_801C2250[A6_BSS_10] != 0) { - D_i3_801C22F0.unk_34 += temp2; + D_i3_801C22F0.unk_34 += sp120; if (D_i3_801C22F0.unk_34 > 360.0f) { D_i3_801C22F0.unk_34 -= 360.0f; } } else { - D_i3_801C22F0.unk_34 -= temp2; + D_i3_801C22F0.unk_34 -= sp120; if (D_i3_801C22F0.unk_34 < 0.0f) { D_i3_801C22F0.unk_34 += 360.0f; } @@ -649,25 +651,25 @@ void func_i3_80187944(Boss* bossA6) { Math_SmoothStepToAngle(&bossA6->obj.rot.z, bossA6->fwork[A6_FWK_8], 0.05f, bossA6->fwork[A6_FWK_9], 0.00001f); if (bossA6->swork[A6_SWK_25] >= 2) { if (!(gGameFrameCount & 0x3F) && (Rand_ZeroOne() < 0.5f)) { - bossA6->fwork[A6_FWK_6] = gPlayer[0].camEye.x + RAND_FLOAT_CENTERED(500.0f); + bossA6->fwork[A6_FWK_6] = RAND_FLOAT_CENTERED(500.0f) + gPlayer[0].camEye.x; } if (!(gGameFrameCount & 0x3F) && (Rand_ZeroOne() < 0.5f)) { - bossA6->fwork[A6_FWK_7] = gPlayer[0].camEye.y + RAND_FLOAT_CENTERED(500.0f); + bossA6->fwork[A6_FWK_7] = RAND_FLOAT_CENTERED(500.0f) + gPlayer[0].camEye.y; } } else { if (!(gGameFrameCount & 0x1F) && (Rand_ZeroOne() < 0.7f)) { - bossA6->fwork[A6_FWK_6] = gPlayer[0].camEye.x + RAND_FLOAT_CENTERED(1000.0f); + bossA6->fwork[A6_FWK_6] = RAND_FLOAT_CENTERED(1000.0f) + gPlayer[0].camEye.x; bossA6->fwork[A6_FWK_30] = 0.0f; } if (!(gGameFrameCount & 0x1F) && (Rand_ZeroOne() < 0.7f)) { - bossA6->fwork[A6_FWK_7] = gPlayer[0].camEye.y + RAND_FLOAT_CENTERED(1000.0f); + bossA6->fwork[A6_FWK_7] = RAND_FLOAT_CENTERED(1000.0f) + gPlayer[0].camEye.y; bossA6->fwork[A6_FWK_31] = 0.0f; } } } if (bossA6->state != 0) { Math_SmoothStepToF(&bossA6->fwork[A6_FWK_4], bossA6->fwork[A6_FWK_5], 0.1f, 2.0f, 0.00001f); - Math_SmoothStepToF(&bossA6->obj.pos.z, bossA6->fwork[A6_FWK_3] + (gPlayer[0].camEye.z - D_80177D20), 0.1f, + Math_SmoothStepToF(&bossA6->obj.pos.z, gPlayer[0].camEye.z - D_80177D20 + bossA6->fwork[A6_FWK_3], 0.1f, bossA6->fwork[A6_FWK_4], 0.00001f); if (bossA6->state < 5) { sp120 = 2.0f; @@ -724,41 +726,41 @@ void func_i3_80187944(Boss* bossA6) { } } if (!(gGameFrameCount & 0xF)) { - sp114 = fabsf(bossA6->fwork[A6_FWK_3] / -1700.0f); - if (sp114 < 1.0f) { - sp114 = 1.0f; + dz_114 = fabsf(bossA6->fwork[A6_FWK_3] / -1700.0f); + if (dz_114 < 1.0f) { + dz_114 = 1.0f; } - if (sp114 > 3.0f) { - sp114 = 3.0f; + if (dz_114 > 3.0f) { + dz_114 = 3.0f; } for (i = 0; i < 3; i++) { - var_fv1 = sp114; + sp120 = dz_114; if (bossA6->swork[A6_SWK_18 + i] != 0) { - var_fv1 = 1.0f; + sp120 = 1.0f; } - A6_HIT_1_2(bossA6, i)->z.size = 195.0f * var_fv1; - A6_HIT_1_2(bossA6, i)->y.size = 147.0f * var_fv1; - A6_HIT_1_2(bossA6, i)->x.size = 153.0f * var_fv1; + A6_HIT_1_2(bossA6, i)->z.size = 195.0f * sp120; + A6_HIT_1_2(bossA6, i)->y.size = 147.0f * sp120; + A6_HIT_1_2(bossA6, i)->x.size = 153.0f * sp120; } } switch (bossA6->state) { case 0: bossA6->info.hitbox[0] = 0; - sp11C = gPlayer[0].pos.x - bossA6->obj.pos.x; - sp118 = gPlayer[0].pos.y - bossA6->obj.pos.y; - sp114 = gPlayer[0].pos.z - 700.0f - bossA6->obj.pos.z; + dx_11C = gPlayer[0].pos.x - bossA6->obj.pos.x; + dy_118 = gPlayer[0].pos.y - bossA6->obj.pos.y; + dz_114 = gPlayer[0].pos.z - 700.0f - bossA6->obj.pos.z; sp104 = 10.0f; if ((bossA6->timer_050 != 0) && (bossA6->timer_050 < 200)) { - sp11C = gPlayer[0].camEye.x - bossA6->obj.pos.x; - sp118 = gPlayer[0].camEye.y - bossA6->obj.pos.y; - sp114 = gPlayer[0].camEye.z - D_80177D20 + bossA6->fwork[A6_FWK_3] - bossA6->obj.pos.z; + dx_11C = gPlayer[0].camEye.x - bossA6->obj.pos.x; + dy_118 = gPlayer[0].camEye.y - bossA6->obj.pos.y; + dz_114 = gPlayer[0].camEye.z - D_80177D20 + bossA6->fwork[A6_FWK_3] - bossA6->obj.pos.z; sp104 = 100.0f; } - sp10C = Math_RadToDeg(Math_Atan2F(sp11C, sp114)); - sp110 = Math_RadToDeg(-Math_Atan2F(sp118, sqrtf(SQ(sp11C) + SQ(sp114)))); - Math_SmoothStepToAngle(&bossA6->unk_078.y, sp10C, 1.0f, sp104, 0.00001f); - Math_SmoothStepToAngle(&bossA6->unk_078.x, sp110, 1.0f, sp104, 0.00001f); + yaw_10C = Math_RadToDeg(Math_Atan2F(dx_11C, dz_114)); + pitch_110 = Math_RadToDeg(-Math_Atan2F(dy_118, sqrtf(SQ(dx_11C) + SQ(dz_114)))); + Math_SmoothStepToAngle(&bossA6->unk_078.y, yaw_10C, 1.0f, sp104, 0.00001f); + Math_SmoothStepToAngle(&bossA6->unk_078.x, pitch_110, 1.0f, sp104, 0.00001f); Matrix_RotateY(gCalcMatrix, bossA6->unk_078.y * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, bossA6->unk_078.x * M_DTOR, 1); sp98.x = sp98.y = 0.0f; @@ -804,8 +806,8 @@ void func_i3_80187944(Boss* bossA6) { Math_SmoothStepToF(&bossA6->fwork[A6_FWK_34], 2.0f, 0.1f, 0.1f, 0.0f); Math_SmoothStepToF(&bossA6->fwork[A6_FWK_35], 1.2f, 0.1f, 0.1f, 0.0f); if (D_i3_801C22F0.unk_24 < 1.0f) { - bossA6->fwork[A6_FWK_6] = gPlayer[0].camEye.x + RAND_FLOAT_CENTERED(1000.0f); - bossA6->fwork[A6_FWK_7] = gPlayer[0].camEye.y + RAND_FLOAT_CENTERED(1000.0f); + bossA6->fwork[A6_FWK_6] = RAND_FLOAT_CENTERED(1000.0f) + gPlayer[0].camEye.x; + bossA6->fwork[A6_FWK_7] = RAND_FLOAT_CENTERED(1000.0f) + gPlayer[0].camEye.y; bossA6->fwork[A6_FWK_3] = -3700.0f + RAND_FLOAT_CENTERED(3000.0f); bossA6->fwork[A6_FWK_34] = 2.0f; bossA6->fwork[A6_FWK_35] = 1.2f; @@ -1020,17 +1022,18 @@ void func_i3_80187944(Boss* bossA6) { bossA6->obj.pos.z -= bossA6->fwork[A6_FWK_37]; Math_SmoothStepToF(&bossA6->fwork[A6_FWK_37], 0.0f, 1.0f, 10.0f, 0.00001f); Math_SmoothStepToF(&bossA6->fwork[A6_FWK_3], -6000.0f, 10.0f, 100.0f, 0.00001f); - sp68 = &D_i3_801BF454[D_i3_801C2250[A6_BSS_9]]; - Math_SmoothStepToF(&D_i3_801C22F0.unk_28[0], sp68->r, 0.5f, 100.0f, 0.00001f); - Math_SmoothStepToF(&D_i3_801C22F0.unk_28[2], sp68->g, 0.5f, 100.0f, 0.00001f); - Math_SmoothStepToF(&D_i3_801C22F0.unk_28[1], sp68->b, 0.5f, 100.0f, 0.00001f); + var_s0 = D_i3_801C2250[A6_BSS_9]; + // sp68 = &D_i3_801BF454[]; + Math_SmoothStepToF(&D_i3_801C22F0.unk_28[0], D_i3_801BF454[var_s0][0], 0.5f, 100.0f, 0.00001f); + Math_SmoothStepToF(&D_i3_801C22F0.unk_28[2], D_i3_801BF454[var_s0][1], 0.5f, 100.0f, 0.00001f); + Math_SmoothStepToF(&D_i3_801C22F0.unk_28[1], D_i3_801BF454[var_s0][2], 0.5f, 100.0f, 0.00001f); if (!(gGameFrameCount & 0xF)) { D_i3_801C2250[A6_BSS_9]++; D_i3_801C2250[A6_BSS_9] &= 3; } if (bossA6->timer_050 == 0) { - bossA6->state = 7; bossA6->fwork[A6_FWK_1] = 0.0f; + bossA6->state = 7; } break; case 7: @@ -1087,28 +1090,28 @@ void func_i3_80187944(Boss* bossA6) { if (bossA6->swork[A6_SWK_25] == 2) { sp128 = 12; } - for (i = 0; i < sp128; i++) { + for (var_s0 = 0; var_s0 < sp128; var_s0++) { Matrix_RotateZ(gCalcMatrix, (360.0f / sp128) * M_DTOR, 1); sp98.x = 0.0f; sp98.y = 400.0f; sp98.z = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp98, &sp8C); - sp10C = Math_RadToDeg(Math_Atan2F(sp8C.x, sp8C.z)); - sp110 = Math_RadToDeg(-Math_Atan2F(sp8C.y, sqrtf(SQ(sp8C.x) + SQ(sp8C.z)))); - temp_1 = D_i3_801C2250[A6_BSS_12_0 + i] - 1; - if (temp_1 < 0) { - temp_1 = 0; + yaw_10C = Math_RadToDeg(Math_Atan2F(sp8C.x, sp8C.z)); + pitch_110 = Math_RadToDeg(-Math_Atan2F(sp8C.y, sqrtf(SQ(sp8C.x) + SQ(sp8C.z)))); + spf124 = D_i3_801C2250[A6_BSS_12_0 + var_s0] - 1; + if (spf124 < 0) { + spf124 = 0; } - if ((gActors[temp_1].obj.status == OBJ_FREE) || (gActors[temp_1].obj.id != OBJ_ACTOR_191) || + if ((gActors[spf124].obj.status == OBJ_FREE) || (gActors[spf124].obj.id != OBJ_ACTOR_191) || (D_i3_801C2250[A6_BSS_24] == 0)) { - D_i3_801C2250[A6_BSS_12_0 + i] = 0; - temp_1 = 0; + D_i3_801C2250[A6_BSS_12_0 + var_s0] = 0; + spf124 = 0; if (bossA6->swork[A6_SWK_25] == 1) { - temp_1 = 1; + spf124 = 1; } func_i3_801875E4(bossA6->obj.pos.x + sp8C.x, bossA6->obj.pos.y + sp8C.y, - bossA6->obj.pos.z + sp8C.z, 25.0f, sp110, sp10C, 10, temp_1); - D_i3_801C2250[A6_BSS_12_0 + i] = D_i3_801C2250[A6_BSS_11]; + bossA6->obj.pos.z + sp8C.z, 25.0f, pitch_110, yaw_10C, 10, spf124); + D_i3_801C2250[A6_BSS_12_0 + var_s0] = D_i3_801C2250[A6_BSS_11]; } } D_i3_801C2250[A6_BSS_24] = 1; @@ -1344,7 +1347,7 @@ void func_i3_8018A464(Boss* bossA6, s32 arg1) { } } break; - case 1: /* switch 1 */ + case 1: if (bossA6->swork[A6_SWK_34] != 0) { for (i = 1; i < 12; i++) { D_i3_801BF010[i] = 3.0f; @@ -1388,7 +1391,7 @@ void func_i3_8018A464(Boss* bossA6, s32 arg1) { } } break; - case 2: /* switch 1 */ + case 2: if (bossA6->swork[A6_SWK_35] != 0) { for (i = 1; i < 12; i++) { D_i3_801BF190[i] = 3.0f; @@ -1774,6 +1777,8 @@ void func_i3_8018C0D0(f32* arg0, f32 arg1, Vec3f* arg2, f32 arg3, s32 arg4) { } #ifdef NON_MATCHING +// weirdness on setting spAC.x to 0.0f and in loading bossA6 near the fakeness +// https://decomp.me/scratch/mwrs8 void func_i3_8018C54C(Boss* bossA6) { Vec3f spD0[30]; Vec3f spC4; @@ -1794,8 +1799,9 @@ void func_i3_8018C54C(Boss* bossA6) { Animation_GetFrameData(&D_6018994, 0, spD0); if (D_i3_801C22F0.unk_24 != 255.0f) { RCP_SetupDL(&gMasterDisp, 0x47); - gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, (s32) D_i3_801C22F0.unk_24); spAC.x = 0.0f; + gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, (s32) D_i3_801C22F0.unk_24); + if ((gSysFrameCount & 1) == 0) { spAC.x = 0.0f; } @@ -1829,12 +1835,13 @@ void func_i3_8018C54C(Boss* bossA6) { Matrix_RotateY(gCalcMatrix, bossA6->obj.rot.y * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, bossA6->obj.rot.x * M_DTOR, 1); Matrix_RotateZ(gCalcMatrix, bossA6->obj.rot.z * M_DTOR, 1); - Matrix_MultVec3f(gCalcMatrix, &bossA6->vwork[A6_VWK_1 + i], &spC4); + Matrix_MultVec3f(gCalcMatrix, &bossA6->vwork[A6_VWK_1] + i, &spC4); func_8007D0E0(bossA6->obj.pos.x + spC4.x, bossA6->obj.pos.y + spC4.y, bossA6->obj.pos.z + spC4.z, 20.0f); spB8.x = bossA6->obj.pos.x + spC4.x; spB8.y = bossA6->obj.pos.y + spC4.y; spB8.z = bossA6->obj.pos.z + spC4.z; + if ((!bossA6) && (!bossA6)) {} // fake if (D_i3_801C2250[A6_BSS_26] == 0) { func_8007A6F0(&spB8, 0x2903B009); } @@ -1847,28 +1854,23 @@ void func_i3_8018C54C(Boss* bossA6) { bossA6->fwork[A6_FWK_10 + i] = bossA6->fwork[A6_FWK_19 + i] = bossA6->fwork[A6_FWK_13 + i] = bossA6->fwork[A6_FWK_22 + i] = 0.0f; bossA6->fwork[A6_FWK_25 + i] = -90.0f; + for (j = 0; j < 12; j++) { if (i == 0) { - D_i3_801BED70[j].x = 0.0f; - D_i3_801BED70[j].y = 0.0f; - D_i3_801BEE00[j].x = 0.0f; - D_i3_801BEE00[j].y = 0.0f; + D_i3_801BED70[j].y = D_i3_801BED70[j].x = D_i3_801BEE00[j].y = D_i3_801BEE00[j].x = + 0.0f; D_i3_801BEE90[j] = 3.0f; D_i3_801BEEC0[j] = 3.0f; } if (i == 1) { - D_i3_801BEEF0[j].x = 0.0f; - D_i3_801BEEF0[j].y = 0.0f; - D_i3_801BEF80[j].x = 0.0f; - D_i3_801BEF80[j].y = 0.0f; + D_i3_801BEEF0[j].y = D_i3_801BEEF0[j].x = D_i3_801BEF80[j].y = D_i3_801BEF80[j].x = + 0.0f; D_i3_801BF010[j] = 3.0f; D_i3_801BF040[j] = 3.0f; } if (i == 2) { - D_i3_801BF070[j].x = 0.0f; - D_i3_801BF070[j].y = 0.0f; - D_i3_801BF100[j].x = 0.0f; - D_i3_801BF100[j].y = 0.0f; + D_i3_801BF070[j].y = D_i3_801BF070[j].x = D_i3_801BF100[j].y = D_i3_801BF100[j].x = + 0.0f; D_i3_801BF190[j] = 3.0f; D_i3_801BF1C0[j] = 3.0f; } @@ -2446,7 +2448,6 @@ void func_i3_8018EC38(Actor* actor, s32 arg1) { } } -#ifdef NON_MATCHING void func_i3_8018ED78(Player* player) { s32 i; Vec3f spf90; @@ -2455,9 +2456,10 @@ void func_i3_8018ED78(Player* player) { f32 sp84; Vec3f sp78; Vec3f sp6C; - s32 pad[2]; + Actor* actor4 = &gActors[4]; + s32 pad; - switch (player->unk_1D0) { /* irregular */ + switch (player->unk_1D0) { case 0: gCsFrameCount = 0; player->unk_1D0 = 1; @@ -2506,10 +2508,10 @@ void func_i3_8018ED78(Player* player) { D_801779C0 = gBosses[0].obj.pos.z + D_80177D20; D_80177A48[0] = 0.04f; if (gCsFrameCount == 140) { - func_i3_8018EA88(&gActors[4]); + func_i3_8018EA88(actor4); func_i3_8018EA88(&gActors[5]); func_i3_8018EA88(&gActors[6]); - gActors[4].fwork[4] = 0.5f; + actor4->fwork[4] = 0.5f; } if (gCsFrameCount >= 200) { if (D_80178340 == 255) { @@ -2529,33 +2531,34 @@ void func_i3_8018ED78(Player* player) { if ((gCsFrameCount == 146) || (gCsFrameCount == 150)) { Audio_PlaySfx(0x2940F026, gActors[5].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } - if (gCsFrameCount >= 147) { - gActors[4].iwork[3] -= 4; - if (gActors[4].iwork[3] < 0) { - gActors[4].iwork[3] = 0; + if (gCsFrameCount > 146) { + actor4->iwork[3] -= 4; + if (actor4->iwork[3] < 0) { + actor4->iwork[3] = 0; } - gActors[4].iwork[7] -= 4; - if (gActors[4].iwork[7] < 0) { - gActors[4].iwork[7] = 0; + actor4->iwork[7] -= 4; + if (actor4->iwork[7] < 0) { + actor4->iwork[7] = 0; } Math_SmoothStepToF(&gActors[5].fwork[4], 450.0f, 0.03f, 1000.0f, 1.0f); Math_SmoothStepToF(&gActors[5].scale, 450.0f, 0.03f, 1000.0f, 1.0f); } - if (gCsFrameCount >= 161) { + if (gCsFrameCount > 160) { Math_SmoothStepToF(&gActors[6].fwork[4], 350.0f, 0.03f, 1000.0f, 1.0f); Math_SmoothStepToF(&gActors[6].scale, 350.0f, 0.03f, 1000.0f, 1.0f); } - if (gCsFrameCount >= 141) { - gActors[4].obj.pos.x = gActors[5].obj.pos.x = gActors[6].obj.pos.x = gBosses[0].obj.pos.x; - gActors[4].obj.pos.y = gActors[5].obj.pos.y = gActors[6].obj.pos.y = gBosses[0].obj.pos.y; - gActors[4].obj.pos.z = gActors[5].obj.pos.z = gActors[6].obj.pos.z = gBosses[0].obj.pos.z; - Math_SmoothStepToF(&gActors[4].scale, 600.0f, 0.03f, 1000.0f, 0.01f); + if (gCsFrameCount > 140) { + actor4->obj.pos.x = gActors[5].obj.pos.x = gActors[6].obj.pos.x = gBosses[0].obj.pos.x; + actor4->obj.pos.y = gActors[5].obj.pos.y = gActors[6].obj.pos.y = gBosses[0].obj.pos.y; + actor4->obj.pos.z = gActors[5].obj.pos.z = gActors[6].obj.pos.z = gBosses[0].obj.pos.z + 500.0f; + Math_SmoothStepToF(&actor4->scale, 600.0f, 0.03f, 1000.0f, 0.01f); } break; case 2: if (gCsFrameCount < 300) { break; } + if (gCsFrameCount == 300) { player->unk_234 = 1; player->pos.x = 0.0f; @@ -2663,43 +2666,43 @@ void func_i3_8018ED78(Player* player) { } break; } - switch (gCsFrameCount) { /* switch 1; irregular */ - case 380: /* switch 1 */ + switch (gCsFrameCount) { + case 380: func_8001D444(0, 38, 0, 255); break; - case 550: /* switch 1 */ + case 550: D_80177840 = 100; break; - case 700: /* switch 1 */ + case 700: D_80177830 = 1; break; - case 900: /* switch 1 */ + case 900: D_80177830 = 0; break; - case 940: /* switch 1 */ + case 940: Radio_PlayMessage(gMsg_ID_7093, RCID_FOX); break; - case 1070: /* switch 1 */ + case 1070: gActors[1].fwork[29] = 5.0f; Audio_PlaySfx(0x09000002, gActors[1].sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); break; - case 1072: /* switch 1 */ + case 1072: gActors[2].fwork[29] = 5.0f; Audio_PlaySfx(0x09000002, gActors[2].sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); break; - case 1074: /* switch 1 */ + case 1074: gActors[3].fwork[29] = 5.0f; Audio_PlaySfx(0x09000002, gActors[3].sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); break; } if (gCsFrameCount >= 1070) { - Math_SmoothStepToF(&gActors[1].fwork[12], 50.0f, 0.1f, 1000.0f, 0.001f); + Math_SmoothStepToF(&gActors[1].fwork[0], 50.0f, 0.1f, 1000.0f, 0.001f); } if (gCsFrameCount >= 1072) { - Math_SmoothStepToF(&gActors[2].fwork[12], 50.0f, 0.1f, 1000.0f, 0.001f); + Math_SmoothStepToF(&gActors[2].fwork[0], 50.0f, 0.1f, 1000.0f, 0.001f); } if (gCsFrameCount >= 1074) { - Math_SmoothStepToF(&gActors[3].fwork[12], 50.0f, 0.1f, 1000.0f, 0.001f); + Math_SmoothStepToF(&gActors[3].fwork[0], 50.0f, 0.1f, 1000.0f, 0.001f); } if (gCsFrameCount >= 1076) { Math_SmoothStepToF(&player->unk_0D0, 50.0f, 0.1f, 1000.0f, 0.001f); @@ -2725,7 +2728,3 @@ void func_i3_8018ED78(Player* player) { Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], 50000.0f, 0.0001f); Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], 50000.0f, 0.0001f); } -#else -void func_i3_8018ED78(Player* player); -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_a6/func_i3_8018ED78.s") -#endif diff --git a/src/overlays/ovl_i3/fox_aq.c b/src/overlays/ovl_i3/fox_aq.c index a50f6402..daea510b 100644 --- a/src/overlays/ovl_i3/fox_aq.c +++ b/src/overlays/ovl_i3/fox_aq.c @@ -2001,6 +2001,7 @@ void func_i3_801AF9FC(Actor* actor) { #ifdef NON_MATCHING // saved register use at start of case 3 +// https://decomp.me/scratch/gNkkb void func_i3_801AFA5C(Actor* actor) { s32 i; f32 sp70; @@ -2409,7 +2410,10 @@ void func_i3_801B10F8(Boss* bossAQ) { // OBJ_BOSS_AQ action #ifdef NON_MATCHING -// lots of float stuff, and unclear how to use the 4 indices +// unclear how to use the 4 indices +// loop at 2854 unrolls incorrectly +// sp100 shouldn't be on the stack +// https://decomp.me/scratch/M6ghQ void func_i3_801B134C(Boss* bossAQ) { s32 i; s32 i2; @@ -2952,7 +2956,7 @@ void func_i3_801B134C(Boss* bossAQ) { D_i3_801C42A0[i3 + 10]++; if (D_i3_801C42A0[i3 + 10] >= D_i3_801BFDB4[4 * i3 + i2]) { D_i3_801C42A0[i3 + 16]++; - if ((D_i3_801C42A0[i3 + 16] >= 4) || (D_i3_801BFDB4[4 * i3 + D_i3_801C42A0[i3 + 16]] == 10000)) { + if ((D_i3_801C42A0[i3 + 16] >= 4) || (D_i3_801BFDB4[4 * i3 + D_i3_801C42A0[i3 + 16]] == 100000)) { D_i3_801C42A0[i3 + 10] = 0; D_i3_801C42A0[i3 + 16] = 0; } @@ -3822,7 +3826,8 @@ void func_i3_801B6344(Actor* actor) { } #ifdef NON_MATCHING -// annoying float reg swap around 3880 +// The big spherical angle calculation has some reg swaps. BonusText_Display has a return? +// https://decomp.me/scratch/DLrGN void func_i3_801B638C(Actor* actor) { Actor* var_v0; s32 i; @@ -4005,7 +4010,8 @@ void func_i3_801B6E54(Actor* actor) { // OBJ_ACTOR_262 action #ifdef NON_MATCHING -// annoying float reg swaps around 4000 +// reloads 0.0f for temp_fs2_2. BonusText_Display has a return? +// https://decomp.me/scratch/02s9H void func_i3_801B6FF8(Actor* actor) { s32 i; f32 temp_dx; @@ -4057,9 +4063,9 @@ void func_i3_801B6FF8(Actor* actor) { temp_dz = actor->fwork[3] - actor->obj.pos.z; spA8 = Math_RadToDeg(Math_Atan2F(temp_dx, temp_dz)); var_fs0 = Math_RadToDeg(-Math_Atan2F(temp_dy, sqrtf(SQ(temp_dx) + SQ(temp_dz)))); - temp_fs2_2 = Math_SmoothStepToAngle(&actor->obj.rot.y, spA8, 0.1f, 1.0f, 0); + temp_fs2_2 = Math_SmoothStepToAngle(&actor->obj.rot.y, spA8, 0.1f, 1.0f, 0.0f); + Math_SmoothStepToAngle(&actor->obj.rot.x, var_fs0, 0.1f, 1.0f, 0.0f); - Math_SmoothStepToAngle(&actor->obj.rot.x, var_fs0, 0.1f, 1.0f, 0); var_fs0 = 340.0f; if (temp_fs2_2 < 0.0f) { var_fs0 = 20.0f; @@ -4604,6 +4610,7 @@ void func_i3_801B90DC(Actor* actor) { // OBJ_ACTOR_263 action #ifdef NON_MATCHING // BonusText_Display has a return? +// https://decomp.me/scratch/OwFpS void func_i3_801B91A4(Actor* actor) { Vec3f spDC = { 0.0f, 0.0f, 50.0f }; Vec3f spD0; diff --git a/src/overlays/ovl_i3/fox_zo.c b/src/overlays/ovl_i3/fox_zo.c index a6901c5e..0f1179b7 100644 --- a/src/overlays/ovl_i3/fox_zo.c +++ b/src/overlays/ovl_i3/fox_zo.c @@ -2038,11 +2038,16 @@ f32 D_i3_801BF6CC[2] = { 250.0f, -250.0f }; f32 D_i3_801BF6D4[2] = { 330.0f, 30.0f }; #ifdef NON_MATCHING +// loop iterator problems with noted loops +// float ordering in the boss health bar calculation +// incorrect loading of sZoLimbTimers +// compiler stack too large +// https://decomp.me/scratch/jNmle void func_i3_80194A84(Boss* bossZO) { f32 sp134; s32 sp130; s32 i; - s16 var_s0; + s32 var_s0; s32 sp124; f32 sp120; f32 sp11C; @@ -2055,8 +2060,8 @@ void func_i3_80194A84(Boss* bossZO) { f32 sp100; f32 spFC; s32 dmgType; - s32* temp2; - f32* temp3; + s32 pad1; + s32 pad2; Vec3f spE4; Vec3f spD8; Vec3f spCC; @@ -2077,7 +2082,7 @@ void func_i3_80194A84(Boss* bossZO) { } if (sZoSwork[ZO_BSS_24] == 0) { Math_SmoothStepToF(&sZoFwork[ZO_BSF_27], sZoFwork[ZO_BSF_26], 0.1f, 2.0f, 0.00001f); - Math_SmoothStepToF(&bossZO->obj.pos.z, sZoFwork[ZO_BSF_28] + (gPlayer[0].camEye.z - D_80177D20), 0.1f, + Math_SmoothStepToF(&bossZO->obj.pos.z, gPlayer[0].camEye.z - D_80177D20 + sZoFwork[ZO_BSF_28], 0.1f, sZoFwork[ZO_BSF_27], 0.00001f); } if (!(gGameFrameCount & 3)) { @@ -2132,20 +2137,22 @@ void func_i3_80194A84(Boss* bossZO) { func_8007AFD0(bossZO->obj.pos.x, bossZO->obj.pos.z, -19.0f, 46.0f, 5.0f); func_8007AFD0(bossZO->obj.pos.x, bossZO->obj.pos.z, 0.0f, 50.0f, 5.0f); } - bossZO->swork[ZO_SWK_9] = 20; + bossZO->swork[ZO_SWK_11] += 1; bossZO->swork[ZO_SWK_11] &= 1; + bossZO->swork[ZO_SWK_9] = 20; if (bossZO->swork[ZO_SWK_11] == 0) { - bossZO->swork[ZO_SWK_9] = 100; + bossZO->swork[ZO_SWK_10] += 1; bossZO->swork[ZO_SWK_10] &= 1; + bossZO->swork[ZO_SWK_9] = 100; } } if (bossZO->swork[ZO_SWK_9] != 0) { bossZO->swork[ZO_SWK_9]--; } - switch (bossZO->state) { /* switch 1 */ - case 0: /* switch 1 */ + switch (bossZO->state) { + case 0: if ((!(gGameFrameCount & 7) || (bossZO->timer_050 == 43)) && (bossZO->swork[ZO_SWK_13] == 0) && ((bossZO->swork[ZO_SWK_12] < 7) || (bossZO->timer_050 == 43))) { D_801779A8[0] = 20.0f; @@ -2191,7 +2198,7 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 1: /* switch 1 */ + case 1: Math_SmoothStepToF(&bossZO->fwork[ZO_FWK_4], 100.0f, 0.1f, 1.0f, 0.0f); func_i3_8019962C(bossZO, 0.0f); Math_SmoothStepToF(&sZoFwork[ZO_BSF_1], sZoFwork[ZO_BSF_74], 0.1f, 2.0f, 0.00001f); @@ -2222,8 +2229,8 @@ void func_i3_80194A84(Boss* bossZO) { } if ((sZoSwork[ZO_BSS_7] == 1) && (sZoSwork[ZO_BSS_25] == 0) && (sZoSwork[ZO_BSS_19] != 0)) { Radio_PlayMessage(gMsg_ID_6072, RCID_BOSS_ZONESS); - sZoSwork[ZO_BSS_34] = 333; sZoSwork[ZO_BSS_25]++; + sZoSwork[ZO_BSS_34] = 333; } if (sZoSwork[ZO_BSS_7] >= 2) { sZoSwork[ZO_BSS_7] = 0; @@ -2240,7 +2247,7 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 2: /* switch 1 */ + case 2: if (bossZO->timer_050 == 1) { sZoSwork[ZO_BSS_20]++; sZoFwork[ZO_BSF_77] = 0.0f; @@ -2255,7 +2262,7 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 3: /* switch 1 */ + case 3: if (ZO_HIT_12(bossZO)->z.offset != -883.99994f) { ZO_HIT_12(bossZO)->z.offset = -883.99994f; ZO_HIT_12(bossZO)->z.size = 244.4f; @@ -2279,9 +2286,8 @@ void func_i3_80194A84(Boss* bossZO) { } else { bossZO->timer_058 = 100; sZoFwork[ZO_BSF_20] = 5.0f; - sZoFwork[ZO_BSF_78] = 2.0f; - sZoFwork[ZO_BSF_21] = sZoFwork[ZO_BSF_79] = 0.0f; + sZoFwork[ZO_BSF_78] = 2.0f; sZoSwork[ZO_BSS_21]++; if (sZoSwork[ZO_BSS_21] >= 2) { sZoSwork[ZO_BSS_21] = 0; @@ -2306,18 +2312,18 @@ void func_i3_80194A84(Boss* bossZO) { Radio_PlayMessage(gMsg_ID_6078, RCID_BOSS_ZONESS); } if (bossZO->timer_056 == 0) { - bossZO->timer_056 = 100; bossZO->swork[ZO_SWK_1] += 1; bossZO->swork[ZO_SWK_1] &= 1; + bossZO->timer_056 = 100; } bossZO->fwork[ZO_FWK_5] += 4.0f; bossZO->vel.x = COS_DEG(bossZO->fwork[ZO_FWK_5]) * 40.0f; - Math_SmoothStepToAngle(&bossZO->fwork[ZO_FWK_7], - Math_RadToDeg(Math_Atan2F(bossZO->fwork[ZO_FWK_6] - bossZO->obj.pos.x, - (D_i3_801BF6BC[bossZO->swork[ZO_SWK_1]] + - (gPlayer[0].camEye.z - D_80177D20)) - - bossZO->obj.pos.z)), - 0.1f, 100.0f, 0.001f); + Math_SmoothStepToAngle( + &bossZO->fwork[ZO_FWK_7], + Math_RadToDeg(Math_Atan2F(bossZO->fwork[ZO_FWK_6] - bossZO->obj.pos.x, + gPlayer[0].camEye.z - D_80177D20 + + D_i3_801BF6BC[bossZO->swork[ZO_SWK_1]] - bossZO->obj.pos.z)), + 0.1f, 100.0f, 0.001f); Matrix_RotateY(gCalcMatrix, bossZO->fwork[ZO_FWK_7] * M_DTOR, 0); spE4.x = spE4.y = 0.0f; spE4.z = 20.0f; @@ -2343,7 +2349,7 @@ void func_i3_80194A84(Boss* bossZO) { spE4.z = gPlayer[0].unk_138 - sZoFwork[ZO_BSF_93_Z]; Matrix_MultVec3f(gCalcMatrix, &spE4, &spC0); sp10C = Math_RadToDeg(Math_Atan2F(spC0.x, spC0.z)); - sp110 = Math_RadToDeg(-Math_Atan2F(spC0.y, sqrtf((spC0.x * spC0.x) + (spC0.z * spC0.z)))); + sp110 = Math_RadToDeg(-Math_Atan2F(spC0.y, sqrtf(SQ(spC0.x) + SQ(spC0.z)))); if ((sp10C > 40.0f) && (sp10C < 180.0f)) { sp10C = 40.0f; } @@ -2382,12 +2388,9 @@ void func_i3_80194A84(Boss* bossZO) { func_i3_80198BE8(bossZO, 1); } break; - case 4: /* switch 1 */ + case 4: if (bossZO->swork[ZO_SWK_15] == 0) { - D_80178340 = 0; - D_80178354 = 0; - D_80178350 = 0; - D_80178348 = 0; + D_80178348 = D_80178350 = D_80178354 = D_80178340 = 0; } Math_SmoothStepToAngle(&bossZO->obj.rot.z, bossZO->fwork[ZO_FWK_9], 0.1f, 100.0f, 0.00001f); Math_SmoothStepToAngle(&bossZO->fwork[ZO_FWK_9], 0.0f, 0.1f, 100.0f, 0.00001f); @@ -2422,11 +2425,11 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 5: /* switch 1 */ + case 5: Math_SmoothStepToAngle(&bossZO->obj.rot.z, bossZO->fwork[ZO_FWK_9], 0.1f, 100.0f, 0.00001f); Math_SmoothStepToAngle(&bossZO->fwork[ZO_FWK_9], 0.0f, 0.1f, 100.0f, 0.00001f); - switch (sZoSwork[ZO_BSS_16]) { /* switch 3; irregular */ - case 0: /* switch 3 */ + switch (sZoSwork[ZO_BSS_16]) { + case 0: if (sZoSwork[ZO_BSS_13] != 0) { func_i3_8019962C(bossZO, 180.0f); if (bossZO->obj.rot.y == 180.0f) { @@ -2452,13 +2455,13 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 1: /* switch 3 */ + case 1: func_i3_80199470(bossZO, 0); break; - case 2: /* switch 3 */ + case 2: func_i3_80199470(bossZO, 1); break; - case 3: /* switch 3 */ + case 3: if (sZoSwork[ZO_BSS_13] != 0) { if (bossZO->timer_050 == 0) { Math_SmoothStepToF(&sZoFwork[ZO_BSF_4], 0.0f, 1.0f, 5.0f, 0.001f); @@ -2489,7 +2492,7 @@ void func_i3_80194A84(Boss* bossZO) { break; } break; - case 6: /* switch 1 */ + case 6: D_801779A8[0] = 20.0f; if (D_80178480 == 0) { D_80178348 = D_80178350 = D_80178354 = 255; @@ -2528,7 +2531,7 @@ void func_i3_80194A84(Boss* bossZO) { Radio_PlayMessage(gMsg_ID_6079, RCID_BOSS_ZONESS); } if (bossZO->timer_050 == 0) { - gEffects[98].obj.status = gEffects[99].obj.status = OBJ_FREE; + gEffects[99].obj.status = gEffects[98].obj.status = OBJ_FREE; sZoFwork[ZO_BSF_25] = -1000.0f; sZoFwork[ZO_BSF_23] = 10.0f; gShowBossHealth = 0; @@ -2545,7 +2548,7 @@ void func_i3_80194A84(Boss* bossZO) { gPlayer[0].unk_0E8 += 360.0f; } gPlayer[0].unk_114 = 0.0f; - func_8004319C(gPlayer, bossZO->obj.pos.x, 0.0f, bossZO->obj.pos.z); + func_8004319C(&gPlayer[0], bossZO->obj.pos.x, 0.0f, bossZO->obj.pos.z); } bossZO->timer_050 = 70; sZoSwork[ZO_BSS_5] = 0; @@ -2554,7 +2557,7 @@ void func_i3_80194A84(Boss* bossZO) { bossZO->state = 7; } break; - case 7: /* switch 1 */ + case 7: D_801779A8[0] = 20.0f; if (!(gGameFrameCount & 7) && (func_800A73E4(&sp134, &sp130, bossZO->obj.pos.x, -300.0f, bossZO->obj.pos.z) != 0)) { @@ -2565,7 +2568,7 @@ void func_i3_80194A84(Boss* bossZO) { Object_Kill(&bossZO->obj, bossZO->sfxPos); } break; - case 8: /* switch 1 */ + case 8: if (sZoSwork[ZO_BSS_18] != 0) { if ((sZoSwork[ZO_BSS_27] != 2) && (bossZO->swork[ZO_SWK_5] == 0) && (bossZO->swork[ZO_SWK_6] < 2) && ((sZoSwork[ZO_BSS_33] == 0) || (sZoSwork[ZO_BSS_33] >= 30))) { @@ -2748,9 +2751,9 @@ void func_i3_80194A84(Boss* bossZO) { if ((sZoSwork[ZO_BSS_13] < 2) && (sZoLimbTimers[ZO_LIMB_5] != LIMB_DESTROYED)) { D_801779A8[0] = 20.0f; if (!(gGameFrameCount & 1)) { - func_8007D0E0(RAND_FLOAT_CENTERED(200.0f) + sZoFwork[ZO_BSF_52_X], - RAND_FLOAT_CENTERED(200.0f) + sZoFwork[ZO_BSF_52_Y], - RAND_FLOAT_CENTERED(100.0f) + sZoFwork[ZO_BSF_52_Z], 5.0f); + func_8007D0E0(sZoFwork[ZO_BSF_52_X] + RAND_FLOAT_CENTERED(200.0f), + sZoFwork[ZO_BSF_52_Y] + RAND_FLOAT_CENTERED(200.0f), + sZoFwork[ZO_BSF_52_Z] + RAND_FLOAT_CENTERED(100.0f), 5.0f); } if (bossZO->swork[ZO_SWK_14] != 0) { if (sZoLimbTimers[ZO_LIMB_5] == 0) { @@ -2784,21 +2787,21 @@ void func_i3_80194A84(Boss* bossZO) { if (dmgType == DMG_BEAM) { Audio_PlaySfx(0x29121007, bossZO->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } - switch (bossZO->dmgPart) { /* switch 2 */ - case 0: /* switch 2 */ + switch (bossZO->dmgPart) { + case 0: if ((sZoSwork[ZO_BSS_8] != 0) && (dmgType == DMG_BOMB) && ((bossZO->state == 3) || (bossZO->state == 8))) { sZoLimbTimers[ZO_LIMB_1] = sZoLimbTimers[ZO_LIMB_14] = sZoLimbTimers[ZO_LIMB_15] = 15; sZoSwork[ZO_BSS_49] = 60; sZoSwork[ZO_BSS_8] -= bossZO->damage; if (sZoSwork[ZO_BSS_8] <= 0) { - sZoSwork[ZO_BSS_8] = 0; - sZoSwork[ZO_BSS_49] = 0; + + sZoSwork[ZO_BSS_49] = sZoSwork[ZO_BSS_8] = 0; bossZO->swork[ZO_SWK_5] = 30; } } break; - case 3: /* switch 2 */ + case 3: if ((sZoSwork[ZO_BSS_9] != 0) && (bossZO->state == 3) && (dmgType == DMG_BOMB) && (sZoSwork[ZO_BSS_50] == 0)) { sZoLimbTimers[ZO_LIMB_10] = 15; @@ -2814,7 +2817,7 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 4: /* switch 2 */ + case 4: if ((sZoSwork[ZO_BSS_10] != 0) && (bossZO->state == 3) && (dmgType == DMG_BOMB) && (sZoSwork[ZO_BSS_51] == 0)) { sZoLimbTimers[ZO_LIMB_2] = 15; @@ -2830,7 +2833,7 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 5: /* switch 2 */ + case 5: if ((sZoSwork[ZO_BSS_9] != 0) && (bossZO->state == 3) && (dmgType == DMG_BOMB) && (sZoSwork[ZO_BSS_50] == 0)) { sZoLimbTimers[ZO_LIMB_10] = 15; @@ -2860,7 +2863,7 @@ void func_i3_80194A84(Boss* bossZO) { } } /* fallthrough */ - case 6: /* switch 2 */ + case 6: if ((bossZO->health != 0) && (sZoSwork[ZO_BSS_9] == 0) && (sZoSwork[ZO_BSS_10] == 0) && (sZoSwork[ZO_BSS_11] == 0) && (sZoSwork[ZO_BSS_12] == 0) && (sZoSwork[ZO_BSS_13] == 0) && (bossZO->state == 3)) { @@ -2888,8 +2891,8 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 7: /* switch 2 */ - case 12: /* switch 2 */ + case 7: + case 12: if ((sZoSwork[ZO_BSS_13] >= 2) && (bossZO->state == 5) && (dmgType == DMG_BOMB)) { sZoLimbTimers[ZO_LIMB_5] = sZoLimbTimers[ZO_LIMB_6] = 15; sZoSwork[ZO_BSS_52] = 30; @@ -2905,8 +2908,8 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 8 + 0: /* switch 2 */ - case 10 + 0: /* switch 2 */ + case 8 + 0: + case 10 + 0: if ((sZoSwork[ZO_BSS_11] != 0) && (bossZO->state == 3) && (dmgType == DMG_BOMB) && (sZoSwork[ZO_BSS_53] == 0)) { sZoLimbTimers[ZO_LIMB_7] = sZoLimbTimers[ZO_LIMB_21] = sZoLimbTimers[ZO_LIMB_22] = 15; @@ -2931,8 +2934,8 @@ void func_i3_80194A84(Boss* bossZO) { } } break; - case 8 + 1: /* switch 2 */ - case 10 + 1: /* switch 2 */ + case 8 + 1: + case 10 + 1: if ((sZoSwork[ZO_BSS_12] != 0) && (bossZO->state == 3) && (dmgType == DMG_BOMB) && (sZoSwork[ZO_BSS_54] == 0)) { sZoLimbTimers[ZO_LIMB_11] = sZoLimbTimers[ZO_LIMB_23] = sZoLimbTimers[ZO_LIMB_24] = 15; @@ -3009,9 +3012,9 @@ void func_i3_80194A84(Boss* bossZO) { sZoLimbTimers[sp124]--; } } - for (sp124 = 0, temp2 = &sZoSwork[ZO_BSS_49]; sp124 < 6; sp124++, temp2++) { - if (*temp2 != 0) { - (*temp2)--; + for (sp124 = 0; sp124 < 6; sp124++) { // may be using pointer iterators + if (sZoSwork[ZO_BSS_49 + sp124] != 0) { + sZoSwork[ZO_BSS_49 + sp124]--; } } if (bossZO->state < 4) { @@ -3025,7 +3028,6 @@ void func_i3_80194A84(Boss* bossZO) { func_8007A6F0(&spD8, 0x29034003); } if ((sZoSwork[ZO_BSS_54] & 1) && (sZoSwork[ZO_BSS_12] != 0)) { - // if (gCalcMatrix) {} func_8007A6F0(&spCC, 0x29034003); } } @@ -3070,7 +3072,7 @@ void func_i3_80194A84(Boss* bossZO) { Radio_PlayMessage(gMsg_ID_2225, RCID_SLIPPY); } if (gBossFrameCount == 686) { - gShowBossHealth = 1; + gShowBossHealth = true; } if (gBossFrameCount > 686) { gBossHealthBar = bossZO->health / 300.0f * 64.0f; @@ -3097,9 +3099,9 @@ void func_i3_80194A84(Boss* bossZO) { } } - for (sp124 = 0, temp2 = &sZoSwork[ZO_BSS_49], temp3 = &sZoFwork[ZO_BSF_112]; sp124 < 6; sp124++, temp2++, temp3++) { - if ((!(&gPlayer[0].pos)) && (!(&gPlayer[0].pos))) {} - *temp3 = SIN_DEG(*temp2 * 50.0f) * func_i3_80193CC8(*temp2); + for (sp124 = 0; sp124 < 6; sp124++) { // may be using pointer iterators + sZoFwork[ZO_BSF_112 + sp124] = + SIN_DEG(sZoSwork[ZO_BSS_49 + sp124] * 50.0f) * func_i3_80193CC8(sZoSwork[ZO_BSS_49 + sp124]); } } #else @@ -3553,12 +3555,12 @@ void func_i3_80199F10(Actor* actor) { actor->obj.rot.y += 2.0f; func_i3_80199E9C(actor, 0.0f, 20.0f); switch (sZoSwork[ZO_BSS_16]) { /* switch 1; irregular */ - case 1: /* switch 1 */ + case 1: actor->fwork[1] = sZoFwork[ZO_BSF_68_Y] - sZoFwork[ZO_BSF_60_Y]; Audio_PlaySfx(0x3100503E, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); actor->state++; break; - case 2: /* switch 1 */ + case 2: actor->fwork[1] = sZoFwork[ZO_BSF_71_Y] - sZoFwork[ZO_BSF_60_Y]; Audio_PlaySfx(0x3100503E, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); actor->state++; @@ -3571,15 +3573,15 @@ void func_i3_80199F10(Actor* actor) { func_i3_80199E9C(actor, actor->fwork[1], 20.0f); } else { switch (sZoSwork[ZO_BSS_16]) { - case 1: /* switch 2 */ + case 1: actor->fwork[1] = sZoFwork[ZO_BSF_68_Y] - sZoFwork[ZO_BSF_60_Y]; func_i3_80199E9C(actor, actor->fwork[1], 20.0f); break; - case 2: /* switch 2 */ + case 2: actor->fwork[1] = sZoFwork[ZO_BSF_71_Y] - sZoFwork[ZO_BSF_60_Y]; func_i3_80199E9C(actor, actor->fwork[1], 20.0f); break; - case 3: /* switch 2 */ + case 3: actor->obj.rot.y += 2.0f; if (gBosses[0].timer_050 != 0) { func_i3_80199E9C(actor, 0.0f, 10.0f); @@ -4433,33 +4435,28 @@ void func_i3_8019CE58(Actor* actor) { gSPDisplayList(gMasterDisp++, D_60181E0); } -#ifdef NON_MATCHING void func_i3_8019D060(Actor* actor) { s32 i; - Actor* newActor; - for (i = 0, newActor = gActors; i < 60; i++, newActor++) { - if (newActor->obj.status == OBJ_FREE) { - Actor_Initialize(newActor); - newActor->obj.status = OBJ_ACTIVE; - newActor->obj.id = OBJ_ACTOR_247; - newActor->obj.pos.x = actor->obj.pos.x; - newActor->obj.pos.y = actor->obj.pos.y - 60.0f; - newActor->fwork[2] = newActor->obj.pos.y; - newActor->obj.pos.z = actor->obj.pos.z; + for (i = 0; i < 60; i++) { + if (gActors[i].obj.status == OBJ_FREE) { + Actor_Initialize(&gActors[i]); + gActors[i].obj.status = OBJ_ACTIVE; + gActors[i].obj.id = OBJ_ACTOR_247; + gActors[i].obj.pos.x = actor->obj.pos.x; + gActors[i].obj.pos.y = actor->obj.pos.y - 60.0f; + gActors[i].fwork[2] = gActors[i].obj.pos.y; + gActors[i].obj.pos.z = actor->obj.pos.z; - newActor->state = 1; + gActors[i].state = 1; actor->unk_046 = i + 1; - Object_SetInfo(&newActor->info, newActor->obj.id); - newActor->info.hitbox = SEGMENTED_TO_VIRTUAL(D_602C028); + Object_SetInfo(&gActors[i].info, gActors[i].obj.id); + gActors[i].info.hitbox = SEGMENTED_TO_VIRTUAL(D_602C028); break; } } } -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_zo/func_i3_8019D060.s") -#endif void func_i3_8019D15C(Actor* actor) { Actor* temp_v0; @@ -4573,17 +4570,15 @@ void func_i3_8019D428(Player* player) { D_80177CE8 += 40.0f; } -#ifdef NON_MATCHING -// more use of temps and chain assigns void func_i3_8019D76C(Player* player) { - f32 pad[4]; + f32 temp_fa0; + f32 temp_ft5; + f32 dx; + f32 dz; s32 i; Vec3f sp58; Vec3f sp4C; - Actor* var_a0; - f32 temp_fa0; - f32 temp_ft5; - f32 pa2[2]; + Boss* boss = &gBosses[0]; switch (player->unk_1D0) { case 0: @@ -4592,14 +4587,9 @@ void func_i3_8019D76C(Player* player) { player->unk_4D8 = 0.0f; player->unk_034 = 0.0f; player->unk_0D0 = 40.0f; - player->unk_110 = 0.0f; - player->unk_12C = 0.0f; player->unk_234 = 1; - player->wings.unk_04 = 0.0f; - player->wings.unk_0C = 0.0f; - player->wings.unk_08 = 0.0f; - player->wings.unk_10 = 0.0f; - player->unk_130 = 0.0f; + player->wings.unk_04 = player->wings.unk_0C = player->wings.unk_08 = player->wings.unk_10 = + player->unk_130 = player->unk_12C = player->unk_110 = 0.0f; D_80177978 = player->camEye.x; D_80177980 = player->camEye.y; D_80177988 = player->camEye.z; @@ -4628,8 +4618,9 @@ void func_i3_8019D76C(Player* player) { Math_SmoothStepToF(&player->pos.y, 200.0f, 0.05f, 10.0f, 0.0f); Math_SmoothStepToF(&D_80177980, 250.0f, 1.0f, 20.0f, 0.0f); Math_SmoothStepToF(&D_801779B8, 240.0f, 1.0f, 20.0f, 0.0f); - temp_ft5 = Math_RadToDeg( - -Math_Atan2F(player->pos.x - gBosses[0].obj.pos.x, (player->pos.z - gBosses[0].obj.pos.z) * 0.05f)); + dx = player->pos.x - boss->obj.pos.x; + dz = (player->pos.z - boss->obj.pos.z) * 0.05f; + temp_ft5 = Math_RadToDeg(-Math_Atan2F(dx, dz)); temp_fa0 = Math_SmoothStepToAngle(&player->unk_0E8, temp_ft5, 0.5f, 2.0f, 0.0001f) * 30.0f; if (gCsFrameCount >= 14) { Math_SmoothStepToAngle(&player->unk_0EC, temp_fa0, 0.1f, 5.0f, 0.0001f); @@ -4656,7 +4647,7 @@ void func_i3_8019D76C(Player* player) { player->unk_0EC = 0.0f; } break; - case 2: /* switch 1 */ + case 2: D_80177CE8 += 60.0f; if (player->timer_1F8 == 0) { player->pos.x = 0.0f; @@ -4673,9 +4664,7 @@ void func_i3_8019D76C(Player* player) { if (D_80161684 == 0) { D_80177A48[1] = 330.0f; player->camEye.x = 1350.0f; - player->camAt.x = D_801779A0 = 1450.0f; - // 1350.0f; D_80177A48[3] = 800.0f; D_80177A48[4] = -0.15f; D_80177A48[5] = -250.0f; @@ -4694,7 +4683,7 @@ void func_i3_8019D76C(Player* player) { D_80177A48[0] = 0.0f; } break; - case 3: /* switch 1 */ + case 3: D_80177CE8 += 60.0f; D_80178358 = 0; D_8017835C = 4; @@ -4734,9 +4723,7 @@ void func_i3_8019D76C(Player* player) { } if (gCsFrameCount >= 1271) { D_80178358 = 255; - D_80178354 = 0; - D_80178350 = 0; - D_80178348 = 0; + D_80178348 = D_80178350 = D_80178354 = 0; D_8017835C = 8; if (D_80178340 == 255) { func_8001CA24(0); @@ -4803,31 +4790,31 @@ void func_i3_8019D76C(Player* player) { break; } break; - case 906: /* switch 2 */ + case 906: D_80177830 = 1; break; - case 1106: /* switch 2 */ + case 1106: D_80177830 = 0; break; - case 1180: /* switch 2 */ + case 1180: Audio_PlaySfx(0x09000002, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); player->unk_190 = player->unk_194 = 5.0f; break; - case 1240: /* switch 2 */ + case 1240: func_800182F4(0x103200FF); func_800182F4(0x113200FF); break; - case 1120: /* switch 2 */ + case 1120: if (gTeamShields[3] > 0) { gActors[0].state = 2; } break; - case 1140: /* switch 2 */ + case 1140: if (gTeamShields[2] > 0) { gActors[1].state = 2; } break; - case 1160: /* switch 2 */ + case 1160: if (gTeamShields[1] > 0) { gActors[2].state = 2; } @@ -4863,16 +4850,11 @@ void func_i3_8019D76C(Player* player) { player->unk_0F4 += 8.0f; player->unk_0F0 = SIN_DEG(player->unk_0F4); } -#else -// zoness outro -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_zo/func_i3_8019D76C.s") -#endif void func_i3_8019E5F0(Actor* actor) { Vec3f sp34; Vec3f sp28; - (void) "Demo_Time %d\n"; // goes in above function, probably switch (actor->state) { case 4: case 5: diff --git a/src/overlays/ovl_i6/fox_andross.c b/src/overlays/ovl_i6/fox_andross.c index 9632b7e8..e66e4019 100644 --- a/src/overlays/ovl_i6/fox_andross.c +++ b/src/overlays/ovl_i6/fox_andross.c @@ -3511,7 +3511,9 @@ void func_i6_80193AE4(s32 actorIndex) { Audio_PlaySfx(0x3100000C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } -extern s32 D_fake_i6_80196D00; +//! @bug This references a variable in another overlay, causing undefined behavior +//! In US v1.1, that address contains the store instruction for player->vel.y = vel.y; in func_i6_80196BF8 +extern s32 D_ending_80196D00; void func_i6_80193C4C(Player* player) { s32 i; @@ -3983,7 +3985,7 @@ void func_i6_80193C4C(Player* player) { D_80178358 = 255; if (D_80178340 == 0xFF) { gNextGameState = GSTATE_CREDITS; - D_fake_i6_80196D00 = 0; + D_ending_80196D00 = 0; D_800D3180[9] = Play_CheckMedalStatus(200) + 1; func_8001DC6C(0, 0x1B); } diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index 1364352f..1b064718 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -16,11 +16,15 @@ compiler_type = "ido" "RAD_TO_DEG" = "float" "DEG_TO_RAD" = "float" "NULL" = "void*" -"RAND_F*" = "float" -"RAND_I*" = "int" -"RAND_D*" = "double" +"RAND_F.*" = "float" +"RAND_I.*" = "int" +"RAND_D.*" = "double" "RAND_RANGE" = "float" - +"SIN_DEG" = "float" +"COS_DEG" = "float" +"true" = "int" +"false" = "int" +"DMG_.*" = "int" [decompme.compilers] "tools/ido-recomp/linux/cc" = "ido5.3" \ No newline at end of file