fox_hud & fox_me Decompiled (#95)

* func_80092D48

* func_800927A0

* TempComp.bin.mio0 git ignored

* func_800924E0

* func_80094D20

* func_80096A74

* func_80095604

* all functions done

* symbols for segmented addresses

* move symbols to c file for now

* failed attempt to import data

* fix

* Import data

* move data below

* ready for BSS attempt

* fix warnings

* ordering

* symbols for some segmented addresses

* rename to fox_hud

* clear mess

* .

* .

* space

* .

* func_i2_80187530

* func_i2_8018756C

* func_i2_80187650

* func_i2_801877C4

* func_i2_8018795C

* func_i2_80187B08

* func_i2_80187C68

* bss again (#98)

* func_i2_80187D08

* func_i2_80187D98

* func_i2_80187FF8

* func_i2_801881A8

* func_i2_80188228

* func_i2_80188298

* ARRAY_COUNT

* func_i2_80188344

* func_i2_80188B84

* func_i2_80188C2C

* func_i2_80188E8C

* func_i2_80188F2C

* func_i2_80188CAC

* func_i2_80189114

* func_i2_8018B7C4

* func_i2_8018C77C

* func_i2_8018C8F4

* func_i2_8018CA10

* func_i2_8018CB50

* func_i2_8018BACC co-authored-by: @inspectredc

* func_i2_8018CCF8

* func_i2_8018CB50

* func_i2_8018CD8C co-authored-by: @inspectredc & @petrie911

* func_i2_8018D9EC

* func_i2_8018DA6C

* func_i2_8018DAEC

* func_i2_8018DB6C

* func_i2_8018DBEC

* func_i2_8018DCE4

* func_i2_8018DE14

* func_i2_8018DF08 co-authored-by @inspectredc & @petrie911

* func_i2_8018E084

* func_i2_8018ED9C

* func_i2_80188088

* func_i2_801892F0

* func_i2_8018978C co-authored-by @KiritoDv & inspectredc

* fox_me DATA IMPORTED

* resolve conflicts

* func_i6_80197B30

* func_i6_80197CC4

* func_i6_80197F84

* func_i6_80198244

* merge and solve bss

* func_i6_801983E4

* PR review

---------

Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>
This commit is contained in:
Alejandro Asenjo Nitti
2024-01-21 13:27:47 -03:00
committed by GitHub
parent b8af624d0b
commit cc970381c8
20 changed files with 4476 additions and 337 deletions
+1
View File
@@ -1,4 +1,5 @@
#include "global.h"
#include "prevent_bss_reordering.h"
f32 __dx1;
f32 __dx2;
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -4123,9 +4123,9 @@ void func_800B0F50(Player* playerx) {
}
gHitCount = gSavedHitCount = D_80177CA4;
}
D_80161720 = 0.0f;
D_80161724 = 0.0f;
D_80161728 = 0.0f;
D_80161720[0] = 0.0f;
D_80161720[1] = 0.0f;
D_80161720[2] = 0.0f;
D_8016172C = gHitCount;
D_80161730 = 0;
D_80161684 = D_80161A50;
@@ -4328,9 +4328,9 @@ void func_800B0F50(Player* playerx) {
gBombCount[gPlayerNum] = 3;
D_80177B8C = 1;
if (gCamCount == (gPlayerNum + 1)) {
D_80161720 = 0.0f;
D_80161724 = 0.0f;
D_80161728 = 0.0f;
D_80161720[0] = 0.0f;
D_80161720[1] = 0.0f;
D_80161720[2] = 0.0f;
D_8016172C = 0;
gHitCount = 0;
D_80177824 = 0;
File diff suppressed because it is too large Load Diff
+1
View File
@@ -1,4 +1,5 @@
#include "global.h"
#include "prevent_bss_reordering.h"
typedef void (*BossSOfunc)(Boss*);
+1 -1
View File
@@ -1,4 +1,4 @@
#include "common.h"
#include "global.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i4/fox_ka/func_i4_801927E0.s")
+318 -9
View File
@@ -1,22 +1,331 @@
#include "common.h"
#include "global.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197B30.s")
extern Gfx D_6014A40[];
extern u16* D_60342A0[];
extern u16* D_6034304[];
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197C64.s")
void func_i6_80197F18(Boss*);
void func_i6_80198244(Boss*);
void func_i6_80198ABC(Boss*);
void func_i6_80199D64(Boss*);
void func_i6_8019AA08(Boss*);
void func_i6_8019AEC0(Boss*);
s32 func_i6_8019B528(Boss*);
s32 func_i6_8019B5CC(Boss*);
void func_i6_8019B6E8(Boss*);
void func_i6_8019BC14(Boss*);
void func_i6_8019C194(Boss*, f32, f32);
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197CB8.s")
void func_i6_80197B30(Actor* actor, s32 timer) {
Actor_Initialize(actor);
actor->obj.status = 2;
actor->obj.id = 0xC3;
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197CC4.s")
actor->obj.pos.x = gPlayer->pos.x;
actor->obj.pos.y = gPlayer->pos.y;
actor->obj.pos.z = gPlayer->pos.z;
actor->fwork[0] = gPlayer->unk_0D0;
actor->vel.x = gPlayer->vel.x;
actor->vel.y = gPlayer->vel.y;
actor->vel.z = gPlayer->vel.z;
actor->obj.rot.x = gPlayer->unk_4D8 + (gPlayer->unk_120 + gPlayer->unk_0E4);
actor->obj.rot.y = gPlayer->unk_0E8 + gPlayer->unk_114 + 180.0f;
actor->obj.rot.z = gPlayer->unk_0EC;
actor->unk_0B8 = 5;
actor->timer_04C = timer;
actor->iwork[11] = 1;
Object_SetInfo(&actor->info, actor->obj.id);
Audio_PlaySfx(0x3100000CU, &actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
void func_i6_80197C64(Effect* effect) {
RCP_SetupDL_21();
gSPDisplayList(gMasterDisp++, D_6014A40);
RCP_SetupDL(&gMasterDisp, 0x40);
}
void func_i6_80197CB8(Object_80* obj80) {
}
void func_i6_80197CC4(Boss* boss) {
boss->fwork[9] = 0.0f;
boss->swork[33] = 5500;
boss->timer_050 = 10;
boss->timer_058 = 0;
D_80177A10[8] = 0;
if (boss->index == 0) {
boss->info.hitbox = SEGMENTED_TO_VIRTUAL(D_60342A0);
boss->health = 150;
boss->swork[28] = 5;
boss->fwork[43] = 3.5f;
boss->fwork[45] = 40.0f;
if (gPlayer->state_1C8 == PLAYERSTATE_1C8_9) {
boss->obj.pos.z = -28900.0f;
gObjects58->obj.pos.z = -30000.0f;
}
boss->unk_078.y = 0.0f;
func_i6_8019AEC0(boss);
} else {
boss->fwork[34] = 2.8f;
boss->info.hitbox = SEGMENTED_TO_VIRTUAL(D_6034304);
boss->health = 100;
boss->swork[28] = 0;
boss->swork[25] = 1;
boss->fwork[45] = 35.0f;
if (boss->index == 1) {
boss->unk_078.y = 15.0f;
} else {
boss->unk_078.y = 345.0f;
}
boss->vel.x = __sinf(boss->unk_078.y * M_DTOR);
boss->vel.x = (boss->fwork[45] * boss->vel.x) * 0.2f;
boss->vel.z = __cosf(boss->unk_078.y * M_DTOR);
boss->vel.z = (boss->fwork[45] * boss->vel.z) * 0.2f;
func_i6_80198244(boss);
boss->timer_056 = 0xFA;
}
if (gLevelMode == LEVELMODE_ON_RAILS) {
if (gPlayer->state_1C8 == PLAYERSTATE_1C8_3) {
gPlayer->state_1C8 = PLAYERSTATE_1C8_9;
gPlayer->unk_1D0 = 0;
func_800182F4(0x103200FF);
func_800182F4(0x113200FF);
}
Object_Kill(&boss->obj, &boss->sfxPos);
}
}
// figure out arg0 type
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197F18.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197F84.s")
void func_i6_80197F84(Boss* boss) {
f32 var_fv1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80198238.s")
Math_SmoothStepToF(&boss->obj.pos.y, 0.0f, 0.5f, 15.0f, 0.1f);
Math_SmoothStepToF(&boss->vel.y, 0.0f, 0.1f, 0.2f, 0.1f);
Math_SmoothStepToF(&boss->vel.z, 0.0f, 0.1f, 0.2f, 0.1f);
Math_SmoothStepToF(&boss->vel.x, 0.0f, 0.1f, 0.2f, 0.1f);
Math_SmoothStepToAngle(&boss->unk_078.x, 0.0f, 0.1f, 4.0f, 0.1f);
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80198244.s")
if (func_i6_8019B5CC(boss) != 0) {
Math_SmoothStepToF(&boss->obj.pos.y, 1000.0f, 0.1f, 30.0f, 0.1f);
} else {
Math_SmoothStepToF(&boss->obj.pos.y, 0.0f, 0.1f, 10.0f, 0.1f);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_801983E4.s")
func_i6_8019B6E8(boss);
if (boss->timer_052 == 0) {
func_i6_8019BC14(boss);
}
Math_SmoothStepToAngle(
&boss->unk_078.y,
Math_RadToDeg(Math_Atan2F(boss->fwork[18] - boss->obj.pos.x, boss->fwork[20] - boss->obj.pos.z)), 0.1f, 8.0f,
0.1f);
if (boss->timer_050 == 0) {
func_i6_80198244(boss);
}
if (boss->swork[22] == 1) {
if (boss->vel.x >= 0) {
var_fv1 = boss->vel.x;
} else {
var_fv1 = -boss->vel.x;
}
if (var_fv1 <= 1.0f) {
if (boss->vel.z >= 0) {
var_fv1 = boss->vel.z;
} else {
var_fv1 = -boss->vel.z;
}
if (((var_fv1 <= 1.0f) && (fabsf(boss->fwork[18] - boss->obj.pos.x) <= 400.0f)) &&
(fabsf(boss->fwork[20] - boss->obj.pos.z) <= 1400.0f)) {
if ((Rand_ZeroOne() < 0.2f) && (boss->unk_078.x == 0.0f)) {
func_i6_8019AA08(boss);
}
if (Rand_ZeroOne() < 0.2f) {
func_i6_80198244(boss);
}
}
}
}
if (func_i6_8019B528(boss) != 0) {
func_i6_80198ABC(boss);
}
}
void func_i6_80198238(s32 arg0) {
}
void func_i6_80198244(Boss* boss) {
f32 var_fv0;
boss->swork[20] = 3;
boss->swork[21] = 1;
boss->timer_056 = (Rand_ZeroOne() * 500.0f) + 100.0f;
boss->fwork[11] = __sinf(boss->unk_078.y * M_DTOR) * boss->fwork[0x2D];
boss->fwork[13] = __cosf(boss->unk_078.y * M_DTOR) * boss->fwork[0x2D];
if (boss->vel.x >= 0) {
var_fv0 = boss->vel.x;
} else {
var_fv0 = -boss->vel.x;
}
if (var_fv0 < 5.0f) {
Math_SmoothStepToF(&boss->vel.x, boss->fwork[11], 0.1f, 5.0f, 0.1f);
}
if (boss->vel.z >= 0) {
var_fv0 = boss->vel.z;
} else {
var_fv0 = -boss->vel.z;
}
if (var_fv0 < 5.0f) {
Math_SmoothStepToF(&boss->vel.z, boss->fwork[13], 0.1f, 5.0f, 0.1f);
}
boss->fwork[10] = 181.0f;
boss->fwork[34] = 2.8f;
Audio_PlaySfx(0x2902306CU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
void func_i6_801983E4(Boss* boss) {
f32 var_fv1;
f32 sp38;
f32 sp34;
func_i6_8019B6E8(boss);
if (boss->timer_052 == 0) {
func_i6_8019BC14(boss);
}
Math_SmoothStepToAngle(&boss->unk_078.z, 0.0f, 0.1f, 2.0f, 0.1f);
Math_SmoothStepToAngle(&boss->unk_078.x, 0.0f, 0.1f, 2.0f, 0.1f);
Math_SmoothStepToF(&boss->vel.x, boss->fwork[11], 0.1f, 0.5f, 0.1f);
Math_SmoothStepToF(&boss->vel.z, boss->fwork[13], 0.1f, 0.5f, 0.1f);
Math_SmoothStepToF(&boss->vel.y, 0.0f, 0.1f, 0.2f, 0.1f);
if (boss->obj.pos.x <= boss->fwork[18]) {
sp38 = boss->fwork[18] - boss->obj.pos.x;
} else {
sp38 = -(boss->fwork[18] - boss->obj.pos.x);
}
if (boss->obj.pos.z <= boss->fwork[20]) {
sp34 = boss->fwork[20] - boss->obj.pos.z;
} else {
sp34 = -(boss->fwork[20] - boss->obj.pos.z);
}
if (boss->unk_078.x != 0.0f) {
Math_SmoothStepToAngle(&boss->unk_078.x, boss->fwork[10], 0.1f, 6.0f, 0.1f);
if (boss->unk_078.x < 200.0f) {
boss->swork[21] = 1;
boss->unk_078.y -= 180.0f;
boss->unk_078.z -= 180.0f;
boss->fwork[10] = 0.0f;
boss->unk_078.x = 0.0f;
if (boss->unk_078.y < 0.0f) {
boss->unk_078.y = boss->unk_078.y + 360.0f;
}
if (boss->unk_078.z < 0.0f) {
boss->unk_078.z = boss->unk_078.z + 360.0f;
}
boss->fwork[11] = __sinf(boss->unk_078.y * M_DTOR) * boss->fwork[45];
boss->fwork[13] = __cosf(boss->unk_078.y * M_DTOR) * boss->fwork[45];
boss->fwork[34] = 2.8f;
}
}
func_i6_8019C194(boss, sp34, sp38);
if (boss->swork[0x16] == 1) {
var_fv1 = gPlayer->unk_114 - 180.0f;
if (var_fv1 < 0.0f) {
var_fv1 += 360.0f;
}
var_fv1 = boss->unk_078.y - var_fv1;
if (var_fv1 < 0.0f) {
var_fv1 += 360.0f;
}
if ((sp34 <= 1300.0f) && (sp38 <= 800.0f) && (var_fv1 < 260.0f) && (var_fv1 > 100.0f) &&
(boss->unk_078.x == 0.0f) && (boss->fwork[34] <= 2.0f)) {
if (Rand_ZeroOne() < 0.2f) {
func_i6_8019AA08(boss);
}
}
if ((sp34 < 3400.0f) || (sp38 < 2400.0f)) {
if (((var_fv1 >= 60.0f) && (var_fv1 <= 100.0f)) || ((var_fv1 <= 300.0f) && (var_fv1 >= 260.0f))) {
if (Rand_ZeroOne() < 0.3f) {
if (Rand_ZeroOne() < 0.4f) {
func_i6_80197F18(boss);
} else {
func_i6_80199D64(boss);
}
}
}
if (((var_fv1 > 300.0f) || (var_fv1 < 60.0f)) && (boss->unk_078.x == 0.0f)) {
if (Rand_ZeroOne() < 0.3f) {
if (Rand_ZeroOne() < 0.4f) {
func_i6_80197F18(boss);
} else {
func_i6_80199D64(boss);
}
} else if (gPlayer->state_1C8 != PLAYERSTATE_1C8_5) {
Math_SmoothStepToAngle(&boss->unk_078.x, 181.0f, 0.1f, 6.0f, 0.1f);
boss->swork[21] = 3;
boss->fwork[11] = __sinf(boss->unk_078.y * M_DTOR) * (boss->fwork[45] + 10.0f);
boss->fwork[13] = __cosf(boss->unk_078.y * M_DTOR) * (boss->fwork[45] + 10.0f);
boss->fwork[34] = 2.8f;
}
}
}
}
if (func_i6_8019B5CC(boss) != 0) {
Math_SmoothStepToF(&boss->obj.pos.y, 1000.0f, 0.1f, 30.0f, 0.1f);
} else {
Math_SmoothStepToF(&boss->obj.pos.y, 0.0f, 0.1f, 5.0f, 0.1f);
}
if (boss->timer_056 == 0) {
if (Rand_ZeroOne() <= 0.7f) {
func_i6_80199D64(boss);
} else {
func_i6_80197F18(boss);
}
}
if (func_i6_8019B528(boss) != 0) {
func_i6_80198ABC(boss);
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80198ABC.s")
+12 -9
View File
@@ -11,15 +11,18 @@ extern AnimationHeader D_602F8E0;
extern AnimationHeader D_60305C0;
extern AnimationHeader D_6031DB8;
extern AnimationHeader D_6031120;
extern AnimationHeader D_60338DC;
extern AnimationHeader D_6035024;
extern AnimationHeader D_60338DC;
extern AnimationHeader D_603531C;
extern AnimationHeader D_6036278;
extern SkelAnime D_602FBAC[];
extern SkelAnime D_603088C[];
extern SkelAnime D_60313AC[];
extern SkelAnime D_6032084[];
extern SkelAnime D_60313AC[];
extern Gfx D_6036290[];
extern Gfx D_6036B30[];
f32 D_menu_801B7BB0;
f32 D_menu_801B7BB4;
@@ -157,14 +160,14 @@ f32 D_menu_801B9084;
//! TODO: Symbols for segmented addresses
Animation D_menu_801ADA00[4] = {
{ (AnimationHeader*) 0x0602F8E0, (AnimationHeader*) 0x06035024, (SkelAnime*) 0x0602FBAC },
{ (AnimationHeader*) 0x060305C0, (AnimationHeader*) 0x060338DC, (SkelAnime*) 0x0603088C },
{ (AnimationHeader*) 0x06031DB8, (AnimationHeader*) 0x0603531C, (SkelAnime*) 0x06032084 },
{ (AnimationHeader*) 0x06031120, (AnimationHeader*) 0x06036278, (SkelAnime*) 0x060313AC },
{ &D_602F8E0, &D_6035024, D_602FBAC },
{ &D_60305C0, &D_60338DC, D_603088C },
{ &D_6031DB8, &D_603531C, D_6032084 },
{ &D_6031120, &D_6036278, D_60313AC },
};
u16* D_menu_801ADA30[5] = {
(u16*) 0x8017A150, (u16*) 0x8017A190, (u16*) 0x8017A1CC, (u16*) 0x8017A210, (u16*) 0x8017A260,
gMsg_ID_10, gMsg_ID_20, gMsg_ID_30, gMsg_ID_40, gMsg_ID_50,
};
void func_menu_801875E0(void) {
@@ -2953,8 +2956,8 @@ void func_menu_8018FD08(void) {
}
static Gfx* D_menu_801AE48C[12] = {
(Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036B30, (Gfx*) 0x06036290,
(Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036B30, (Gfx*) 0x06036290,
D_6036290, D_6036290, D_6036290, D_6036290, D_6036B30, D_6036290,
D_6036290, D_6036290, D_6036290, D_6036290, D_6036B30, D_6036290,
};
static f32 D_menu_801AE4BC[12] = {