improve match on i3, add scratches, some linker cleanup (#127)

* stuff

* fixes

* addrs
This commit is contained in:
petrie911
2024-02-14 12:33:21 -06:00
committed by GitHub
parent 503ec0a01b
commit f83d179ea9
11 changed files with 248 additions and 531 deletions
+1
View File
@@ -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*);
+1 -1
View File
@@ -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;
@@ -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;
-271
View File
@@ -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;
+6 -13
View File
@@ -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:
+1 -3
View File
@@ -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:
+110 -111
View File
@@ -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
+13 -6
View File
@@ -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;
File diff suppressed because it is too large Load Diff
+4 -2
View File
@@ -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);
}
+8 -4
View File
@@ -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"