summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpetrie911 <69443847+petrie911@users.noreply.github.com>2024-02-01 21:05:17 -0600
committerGitHub <noreply@github.com>2024-02-02 00:05:17 -0300
commit85da42216892fd0040cd5dc8cef559760d4e7691 (patch)
tree3018bbc3595eec6df71efe227aa09749d231eb33
parent22f5d22fa0355cb04504bf72413bb30cba374759 (diff)
fox_aq decomped, some type cleanup (#112)
* stuff * stuff * temps * matched * so complete * merge and clean * format * graphics macros * aq * more stuff * oh god the clam * limbdraw * headers? * format, name changes * enums * merge and format
-rw-r--r--.vscode/settings.json4
-rw-r--r--include/assets.h70
-rw-r--r--include/functions.h9
-rw-r--r--include/gfx.h18
-rw-r--r--include/i5.h2
-rw-r--r--include/macros.h1
-rw-r--r--linker_scripts/us/symbol_addrs_overlays.txt2
-rw-r--r--src/main/fox_demo.c34
-rw-r--r--src/main/fox_effect.c17
-rw-r--r--src/main/fox_play.c6
-rw-r--r--src/main/fox_std_lib.c14
-rw-r--r--src/overlays/ovl_i1/fox_co.c18
-rw-r--r--src/overlays/ovl_i1/sf_ve1.c8
-rw-r--r--src/overlays/ovl_i2/fox_sx.c30
-rw-r--r--src/overlays/ovl_i3/fox_a6.c2
-rw-r--r--src/overlays/ovl_i3/fox_aq.c6184
-rw-r--r--src/overlays/ovl_i3/fox_zo.c41
-rw-r--r--src/overlays/ovl_i3/sf_aq.c1108
-rw-r--r--src/overlays/ovl_i4/fox_fo.c6
-rw-r--r--src/overlays/ovl_i5/fox_ma.c107
-rw-r--r--src/overlays/ovl_i6/fox_andross.c64
-rw-r--r--src/overlays/ovl_i6/fox_sy.c22
-rw-r--r--src/overlays/ovl_i6/fox_ve2.c2
-rw-r--r--src/overlays/ovl_menu/fox_map.c198
-rw-r--r--src/overlays/ovl_menu/fox_title.c40
-rw-r--r--yamls/us/overlays.yaml8
26 files changed, 6474 insertions, 1541 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
index a0b894af..910a3c8f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -49,7 +49,9 @@
"prevent_bss_reordering.h": "c",
"fox_map.h": "c",
"sf64level.h": "c",
- "prevent_bss_reordering2.h": "c"
+ "prevent_bss_reordering2.h": "c",
+ "ast_aq.h": "c",
+ "ast_8e1f80.h": "c"
},
"C_Cpp_Runner.msvcBatchPath": ""
} \ No newline at end of file
diff --git a/include/assets.h b/include/assets.h
index 63ea7ed1..96486184 100644
--- a/include/assets.h
+++ b/include/assets.h
@@ -187,10 +187,10 @@ extern Gfx D_3014BF0[];
extern Gfx D_3015120[];
extern Gfx D_30155E0[];
extern Gfx D_3015740[];
-extern AnimationHeader D_3015AF4;
-extern AnimationHeader D_3015C28;
+extern Animation D_3015AF4;
+extern Animation D_3015C28;
extern Gfx D_3015D80[];
-extern AnimationHeader D_30163C4;
+extern Animation D_30163C4;
extern Limb* D_3016610[];
extern Gfx D_3016660[];
extern Gfx D_30160A0[];
@@ -206,13 +206,13 @@ extern Gfx D_3018800[];
extern Gfx D_30194E0[];
extern Gfx D_301B080[];
extern Gfx D_301B6E0[];
-extern AnimationHeader D_301C3A8;
+extern Animation D_301C3A8;
extern Limb* D_301C614[];
-extern AnimationHeader D_301CFEC;
+extern Animation D_301CFEC;
extern Limb* D_301D258[];
-extern AnimationHeader D_301D888;
+extern Animation D_301D888;
extern Limb* D_301DB94[];
-extern AnimationHeader D_301E19C;
+extern Animation D_301E19C;
extern Limb* D_301E3E8[];
extern Gfx D_301E570[];
extern Gfx D_301F140[];
@@ -251,18 +251,18 @@ extern Triangle D_302F044[];
extern Vec3f D_302F098[];
// ast_918430, ast_922730
-extern AnimationHeader D_4000080;
+extern Animation D_4000080;
extern Limb* D_400014C[];
-extern AnimationHeader D_40001A4;
+extern Animation D_40001A4;
extern Limb* D_4000270[];
extern Gfx D_40018A0[];
extern Gfx D_4003BD0[];
-extern AnimationHeader D_40057AC;
+extern Animation D_40057AC;
extern Limb* D_40058B8[];
extern Gfx D_40068F0[];
extern Gfx D_4007870[];
extern Gfx D_4007AF0[];
-extern AnimationHeader D_400A30C;
+extern Animation D_400A30C;
extern Limb* D_400A398[];
extern Gfx D_400B390[];
@@ -353,7 +353,7 @@ extern Gfx D_6006140[];
extern Gfx D_6006310[];
extern u16* D_600631C[];
extern u8 D_6006320[];
-extern AnimationHeader D_600636C;
+extern Animation D_600636C;
extern f32 D_60064AC[];
extern f32 D_60064C8[];
extern f32 D_60064FC[];
@@ -394,8 +394,8 @@ extern Gfx D_6006A80[];
extern Gfx D_6006BE0[];
extern f32 D_6006BF0[];
extern f32 D_6006C44[];
-extern AnimationHeader D_6006D64;
-extern Limb *D_6006E50[];
+extern Animation D_6006D64;
+extern Limb* D_6006E50[];
extern EnvSettings D_6006E70;
extern u8 D_6006E80[];
extern u16 D_6006EA0[];
@@ -427,7 +427,7 @@ extern u16* D_6009B34[];
extern u16 D_6009BB8[];
extern f32 D_6009CC4[];
extern f32 D_6009CFC[];
-extern AnimationHeader D_6009D30;
+extern Animation D_6009D30;
extern Gfx D_6009E30[];
extern Vtx D_6009ED0[];
extern Gfx D_6009F90[];
@@ -439,7 +439,7 @@ extern u16 D_600AB68[];
extern u8 D_600AD30[];
extern Gfx D_600AF40[];
extern Gfx D_600B0E0[];
-extern AnimationHeader D_600B1B4;
+extern Animation D_600B1B4;
extern Gfx D_600B4B0[];
extern Gfx D_600B8B0[];
extern u8 D_600B9B0[];
@@ -447,9 +447,9 @@ extern Gfx D_600BAF0[];
extern u16 D_600BEA0[];
extern Gfx D_600BF80[];
extern Gfx D_600C130[];
-extern AnimationHeader D_600C15C;
-extern AnimationHeader D_600C200;
-extern Limb *D_600C2AC[];
+extern Animation D_600C15C;
+extern Animation D_600C200;
+extern Limb* D_600C2AC[];
extern u16 D_600C6A0[];
extern Gfx D_600C740[];
extern Vtx D_600C780[];
@@ -457,7 +457,7 @@ extern Gfx D_600CAA0[];
extern u16 D_600CBD8[];
extern u8 D_600CC10[];
extern Gfx D_600D190[];
-extern AnimationHeader D_600D3DC;
+extern Animation D_600D3DC;
extern u16 D_600D5C0[];
extern Gfx D_600D730[];
extern u16 D_600D990[];
@@ -470,10 +470,10 @@ extern Gfx D_600DDF0[];
extern Gfx D_600E050[];
extern Gfx D_600E0C0[];
extern u8 D_600E210[];
-extern AnimationHeader D_600E2C4;
+extern Animation D_600E2C4;
extern u8 D_600E360[];
-extern Limb *D_600E470[];
-extern AnimationHeader D_600E5EC;
+extern Limb* D_600E470[];
+extern Animation D_600E5EC;
extern Gfx D_600E820[];
extern u8 D_600E980[];
extern EnvSettings D_600EA90;
@@ -497,7 +497,7 @@ extern CollisionPoly D_600F60C[];
extern Gfx D_600F670[];
extern Gfx D_600F6C0[];
extern Gfx D_600F6C0[];
-extern AnimationHeader D_600F744;
+extern Animation D_600F744;
extern Gfx D_600F8A0[];
extern u8 D_600F940[];
extern Gfx D_600F9B0[];
@@ -544,14 +544,14 @@ extern Gfx D_60120F0[];
extern u8 D_6012310[];
extern u8 D_60123F0[];
extern Gfx D_6012C00_Gfx[];
-extern AnimationHeader D_6012C00_Anim;
+extern Animation D_6012C00_Anim;
extern u8 D_60131A0[];
extern Gfx D_60132B0[];
extern u8 D_6013470[];
extern Gfx D_6013480[];
extern Gfx D_60137B0[];
-extern AnimationHeader D_6013820;
-extern AnimationHeader D_601388C;
+extern Animation D_6013820;
+extern Animation D_601388C;
extern Limb* D_601390C[];
extern Gfx D_6013960[];
extern u8 D_60139E0[];
@@ -561,7 +561,7 @@ extern u8 D_6014360[];
extern Gfx D_60143E0[];
extern Gfx D_6014500[];
extern u16 D_6014510[];
-extern AnimationHeader D_6014658;
+extern Animation D_6014658;
extern Gfx D_6014670[];
extern u16 D_60147C0[];
extern u8 D_60147E0[];
@@ -595,7 +595,7 @@ extern u8 D_6017640[];
extern u8 D_6018280[];
extern Gfx D_6018450[];
extern Gfx D_60188D0[];
-extern AnimationHeader D_6018994;
+extern Animation D_6018994;
extern Limb* D_6018BA0[];
extern Gfx D_6018BF0[];
extern Gfx D_6018C00[]; // possible collision
@@ -656,7 +656,7 @@ extern Gfx D_601DE60[];
extern Gfx D_601DE80[];
extern Gfx D_601E150[];
extern u16 D_601E1E8[];
-extern AnimationHeader D_601E8C4;
+extern Animation D_601E8C4;
extern Limb* D_601E9D0[];
extern Gfx D_601EAA0[];
extern Gfx D_601F1D0[];
@@ -664,7 +664,7 @@ extern EnvSettings D_601F1F0;
extern Gfx D_601F500[];
extern Gfx D_601F5A0[];
extern Gfx D_601F6B0[];
-extern AnimationHeader D_601F874;
+extern Animation D_601F874;
extern Limb* D_601F920[];
extern Gfx D_601FCB0[];
extern u8 D_601FF40[];
@@ -678,7 +678,7 @@ extern Gfx D_6020E60[];
extern u16 D_6020F60[];
extern u16 D_6020FB0[];
extern u16 D_6021ED0[];
-extern AnimationHeader D_602201C;
+extern Animation D_602201C;
extern Limb* D_60220E8[];
extern Gfx D_6022110[];
extern u16 D_6022340[];
@@ -711,7 +711,7 @@ extern u16 D_6026C90[];
extern u8 D_6026D70[];
extern Gfx D_60270E0[];
extern Gfx D_6027180[];
-extern AnimationHeader D_6027320;
+extern Animation D_6027320;
extern u16 D_6027340[];
extern Limb* D_602742C[];
extern Gfx D_6027900[];
@@ -724,7 +724,7 @@ extern u16* D_60289FC[];
extern u16 D_6028A60[];
extern u16 D_6029170[];
extern u8 D_6029220[];
-extern AnimationHeader D_6029528;
+extern Animation D_6029528;
extern Limb* D_6029674[];
extern Gfx D_6029890[];
extern EnvSettings D_602A120;
@@ -979,7 +979,7 @@ extern Gfx D_7007350[];
extern Gfx D_700AB70[];
extern Gfx D_700BB10[];
extern Gfx D_700BE00[];
-extern AnimationHeader D_700CAF4;
+extern Animation D_700CAF4;
extern Limb* D_700CB60[];
extern u16 D_700E9A0[];
extern u8 D_70118E0[];
diff --git a/include/functions.h b/include/functions.h
index 9eb96984..62562fa7 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -429,10 +429,10 @@ void func_8007E45C(Effect*);
void func_8007E5CC(Effect*);
void func_8007E648(Effect*);
void func_8007E93C(Effect* effect, u32 objId, f32 xPos, f32 yPos, f32 zPos, f32 arg5);
-void func_8007EE68(s32 objId, Vec3f* pos, Vec3f* rot, Vec3f* arg3, Vec3f* arg4, f32 scale2);
-void func_8007F04C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 unkX, f32 unkY, f32 unkZ, f32 xVel, f32 yVel, f32 zVel, f32 scale2);
-void func_8007F11C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4);
-void func_8007F20C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4);
+void func_8007EE68(ObjectId objId, Vec3f* pos, Vec3f* rot, Vec3f* arg3, Vec3f* arg4, f32 scale2);
+void func_8007F04C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 unkX, f32 unkY, f32 unkZ, f32 xVel, f32 yVel, f32 zVel, f32 scale2);
+void func_8007F11C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4);
+void func_8007F20C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4);
void func_8007F438(Effect*);
void func_8007F6B0(Effect*);
void func_8007F958(Effect*);
@@ -452,6 +452,7 @@ void func_80081A8C(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 arg4);
void func_80081BEC(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 arg4);
void func_80081C5C(Effect*);
void func_80082F78(Effect*);
+void func_8008377C(f32, f32, f32, f32, f32);
void func_800837EC(Effect*);
void func_80083B8C(Effect*);
void func_80083C70(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 arg7, s32 arg8);
diff --git a/include/gfx.h b/include/gfx.h
index 2aa8983e..75766d5c 100644
--- a/include/gfx.h
+++ b/include/gfx.h
@@ -52,7 +52,7 @@ typedef struct {
/* 0x02 */ s16 limbCount;
/* 0x04 */ u16* frameData;
/* 0x08 */ JointKey* jointKey;
-} AnimationHeader; // size = 0xC
+} Animation; // size = 0xC
typedef struct Limb {
/* 0x000 */ Gfx* dList;
@@ -62,14 +62,6 @@ typedef struct Limb {
/* 0x01C */ struct Limb* child;
} Limb; // size = 0x20
-typedef Limb* SkelAnime;
-
-typedef struct {
- /* 0x00 */ AnimationHeader* unk_0;
- /* 0x04 */ AnimationHeader* unk_4;
- /* 0x08 */ SkelAnime* skelanime;
-} Animation; // size = 0x0C
-
void Lights_SetOneLight(Gfx** dList, s32 dirX, s32 dirY, s32 dirZ, s32 colR, s32 colG, s32 colB, s32 ambR, s32 ambG, s32 ambB);
void Lights_SetTwoLights(Gfx** dList, s32 dir1x, s32 dir1y, s32 dir1z, s32 dir2x, s32 dir2y, s32 dir2z, s32 col1r, s32 col1g,
s32 col1b, s32 col2r, s32 col2g, s32 col2b, s32 ambR, s32 ambG, s32 ambB);
@@ -79,13 +71,13 @@ s32 Graphics_Printf(const char *fmt, ...);
void Texture_Scroll(void *texture, s32 width, s32 height, u8 mode);
void Texture_Mottle(void *dst, void *src, u8 mode);
s32 Animation_GetLimbIndex(Limb* limb, Limb** skeleton);
-void Animation_DrawLimb(s32 mode, Limb * limb, Limb* *skeleton, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, void* data);
+void Animation_DrawLimb(s32 mode, Limb* limb, Limb* *skeleton, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, void* data);
void Animation_DrawSkeleton(s32 mode, Limb** skeletonSegment, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, void* data, Matrix* transform);
-s16 Animation_GetFrameData(AnimationHeader *animationSegmemt, s32 frame, Vec3f *frameTable);
-s16 Animation_GetFrameCount(AnimationHeader *animationSegment);
+s16 Animation_GetFrameData(Animation *animationSegmemt, s32 frame, Vec3f *frameTable);
+s16 Animation_GetFrameCount(Animation *animationSegment);
void Animation_FindBoundingBox(Gfx* dList, s32 len, Vec3f *min, Vec3f *max, s32 *vtxFound, s32 *vtxCount, Vtx* *vtxList);
void Animation_GetDListBoundingBox(Gfx *dList, s32 len, Vec3f *min, Vec3f *max);
-void Animation_GetSkeletonBoundingBox(Limb **skeletonSegment, AnimationHeader *animationSegment, s32 frame, Vec3f *min, Vec3f* max);
+void Animation_GetSkeletonBoundingBox(Limb** skeletonSegment, Animation *animationSegment, s32 frame, Vec3f *min, Vec3f* max);
void TextureRect_4bCI(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale);
void TextureRect_4bCI_Flip(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale);
void TextureRect_4bCI_MirX(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale);
diff --git a/include/i5.h b/include/i5.h
index 73f1eb32..1bece2d7 100644
--- a/include/i5.h
+++ b/include/i5.h
@@ -45,7 +45,7 @@ void func_i5_801A5E2C(Actor *);
void func_i5_801A6134(Actor *);
void func_i5_801A65E0(Object_80 *);
void func_i5_801A7D98(Actor *);
-void func_i5_801ACFBC();
+void func_i5_801ACFBC(void);
void func_i5_801AD080(void);
void func_i5_801B5110(f32, f32, f32);
void func_i5_801B58AC(Gfx **, f32);
diff --git a/include/macros.h b/include/macros.h
index edea8627..1df9889c 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -7,6 +7,7 @@
#define RAND_FLOAT(max) (Rand_ZeroOne()*(max))
#define RAND_INT(max) ((s32)(Rand_ZeroOne()*(max)))
#define RAND_FLOAT_CENTERED(width) ((Rand_ZeroOne()-0.5f)*(width))
+#define RAND_RANGE(min, max) (((max) - (min)) * (Rand_ZeroOne() - (min) / ((min) - (max))))
#define RAND_FLOAT_SEEDED(max) (Rand_ZeroOneSeeded()*(max))
#define RAND_INT_SEEDED(max) ((s32)(Rand_ZeroOneSeeded()*(max)))
diff --git a/linker_scripts/us/symbol_addrs_overlays.txt b/linker_scripts/us/symbol_addrs_overlays.txt
index d5d8318e..c78b3a5a 100644
--- a/linker_scripts/us/symbol_addrs_overlays.txt
+++ b/linker_scripts/us/symbol_addrs_overlays.txt
@@ -78,7 +78,7 @@ D_i3_801C27C8 = 0x801C27C8; //segment:ovl_i3 size:0x12C0
D_i3_801C3A88 = 0x801C3A88; //segment:ovl_i3 size:0x700
D_i3_801C4190 = 0x801C4190; //segment:ovl_i3 size:0x28
D_i3_801C41B8 = 0x801C41B8; //segment:ovl_i3 size:0x78
-D_i3_801C4230 = 0x801C4230; //segment:ovl_i3 size:0x70
+sBossAQlimbTimers = 0x801C4230; //segment:ovl_i3 size:0x70
D_i3_801C42A0 = 0x801C42A0; //segment:ovl_i3 size:0x68
D_i3_801C4308 = 0x801C4308; //segment:ovl_i3 size:0x148
D_i3_801C0060 = 0x801C0060; //segment:ovl_i3 type:f32
diff --git a/src/main/fox_demo.c b/src/main/fox_demo.c
index 071a8989..af07757a 100644
--- a/src/main/fox_demo.c
+++ b/src/main/fox_demo.c
@@ -9,17 +9,17 @@
extern Gfx D_1024AC0[];
extern Gfx D_60320E0[];
extern Gfx D_7010970[];
-extern Gfx* D_E000000;
-extern Gfx* D_E003AB0;
+extern Gfx D_E000000[];
+extern Gfx D_E003AB0[];
extern s32 D_800C9E90[];
-extern AnimationHeader D_60265B4[];
-extern AnimationHeader D_602B8DC[];
-extern AnimationHeader D_60034C4[];
-extern AnimationHeader D_602A2CC[];
-extern AnimationHeader D_602CEB4[];
-extern AnimationHeader D_602B778[];
+extern Animation D_60265B4[];
+extern Animation D_602B8DC[];
+extern Animation D_60034C4[];
+extern Animation D_602A2CC[];
+extern Animation D_602CEB4[];
+extern Animation D_602B778[];
extern f32 D_80178454;
extern f32 D_80178458;
@@ -36,9 +36,9 @@ extern Gfx D_60132B0[];
extern Gfx D_6014A40[];
extern Gfx D_6020810[];
-extern AnimationHeader D_6020A40;
-extern Limb* D_6020C6C;
-extern Limb* D_602D140;
+extern Animation D_6020A40;
+extern Limb* D_6020C6C[];
+extern Limb* D_602D140[];
Vec3f D_800C9F60[] = {
{ 2000.0f, 2000.0f, 2000.0f },
@@ -127,8 +127,8 @@ f32 D_800CA1D4[] = {
1.5f, 0.87f, 0.83f, 0.75f, 0.7f, 0.6f, 0.4f, 0.1f,
};
-AnimationHeader* D_800CA1F4[] = {
- D_60265B4, D_602B8DC, D_60034C4, D_602A2CC, D_602CEB4, D_602B778, (AnimationHeader*) 0x0601F3B8,
+Animation* D_800CA1F4[] = {
+ D_60265B4, D_602B8DC, D_60034C4, D_602A2CC, D_602CEB4, D_602B778, (Animation*) 0x0601F3B8,
};
void func_80048AC0(s32 teamId) {
@@ -2801,7 +2801,7 @@ void func_8004FEC0(Actor* actor) {
Math_SmoothStepToVec3fArray(sp144, actor->vwork, 1, animFrameData, actor->fwork[2], 100.0f, .0f);
RCP_SetupDL_30(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
gDPSetPrimColor(gMasterDisp++, 0, 0, 150, 255, 150, 255);
- Animation_DrawSkeleton(1, &D_602D140, actor->vwork, 0, 0, actor, &gIdentityMatrix);
+ Animation_DrawSkeleton(1, D_602D140, actor->vwork, 0, 0, actor, &gIdentityMatrix);
if (actor->fwork[0] != 0.0f) {
RCP_SetupDL_49();
@@ -2895,7 +2895,7 @@ void func_8004FEC0(Actor* actor) {
case 44:
Animation_GetFrameData(&D_6020A40, actor->iwork[0], actor->vwork);
gSPClearGeometryMode(gMasterDisp++, 0x00002000);
- Animation_DrawSkeleton(1, &D_6020C6C, actor->vwork, 0, 0, &actor->index, &gIdentityMatrix);
+ Animation_DrawSkeleton(1, D_6020C6C, actor->vwork, 0, 0, &actor->index, &gIdentityMatrix);
gSPSetGeometryMode(gMasterDisp++, 0x00002000);
break;
@@ -2939,9 +2939,9 @@ void func_800515C4(void) {
}
if (D_80177B8C != 0) {
- gSPDisplayList(gMasterDisp++, &D_E000000);
+ gSPDisplayList(gMasterDisp++, D_E000000);
} else {
- gSPDisplayList(gMasterDisp++, &D_E003AB0);
+ gSPDisplayList(gMasterDisp++, D_E003AB0);
}
if ((gCurrentLevel != LEVEL_AQUAS) &&
diff --git a/src/main/fox_effect.c b/src/main/fox_effect.c
index eb35f1d3..d363f64e 100644
--- a/src/main/fox_effect.c
+++ b/src/main/fox_effect.c
@@ -2496,7 +2496,8 @@ void func_8007E93C(Effect* effect, u32 objId, f32 xPos, f32 yPos, f32 zPos, f32
Audio_PlaySfx(0x29002002, effect->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
-void func_8007EBB8(Effect* effect, s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2) {
+void func_8007EBB8(Effect* effect, ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel,
+ f32 scale2) {
Effect_Initialize(effect);
effect->obj.status = OBJ_INIT;
effect->obj.id = objId;
@@ -2520,7 +2521,7 @@ void func_8007EBB8(Effect* effect, s32 objId, f32 xPos, f32 yPos, f32 zPos, f32
Object_SetInfo(&effect->info, effect->obj.id);
}
-void func_8007ECB4(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2) {
+void func_8007ECB4(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2) {
s32 i;
for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
@@ -2531,7 +2532,7 @@ void func_8007ECB4(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel,
}
}
-void func_8007ED54(Effect* effect, s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 unkX,
+void func_8007ED54(Effect* effect, ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 unkX,
f32 unkY, f32 unkZ, f32 xVel, f32 yVel, f32 zVel, f32 scale2) {
Effect_Initialize(effect);
effect->obj.status = OBJ_INIT;
@@ -2565,7 +2566,7 @@ void func_8007ED54(Effect* effect, s32 objId, f32 xPos, f32 yPos, f32 zPos, f32
Object_SetInfo(&effect->info, effect->obj.id);
}
-void func_8007EE68(s32 objId, Vec3f* pos, Vec3f* rot, Vec3f* arg3, Vec3f* arg4, f32 scale2) {
+void func_8007EE68(ObjectId objId, Vec3f* pos, Vec3f* rot, Vec3f* arg3, Vec3f* arg4, f32 scale2) {
s32 i;
Vec3f sp68;
@@ -2587,8 +2588,8 @@ void func_8007EE68(s32 objId, Vec3f* pos, Vec3f* rot, Vec3f* arg3, Vec3f* arg4,
}
}
-void func_8007F04C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 unkX, f32 unkY, f32 unkZ,
- f32 xVel, f32 yVel, f32 zVel, f32 scale2) {
+void func_8007F04C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 unkX, f32 unkY,
+ f32 unkZ, f32 xVel, f32 yVel, f32 zVel, f32 scale2) {
s32 i;
for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
@@ -2600,7 +2601,7 @@ void func_8007F04C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot,
}
}
-void func_8007F11C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4) {
+void func_8007F11C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4) {
s32 i;
if ((fabsf(zPos - gPlayer[0].unk_138) > 300.0f) || (fabsf(xPos - gPlayer[0].pos.x) > 300.0f)) {
@@ -2615,7 +2616,7 @@ void func_8007F11C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4) {
}
}
-void func_8007F20C(s32 objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4) {
+void func_8007F20C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4) {
s32 i;
if ((fabsf(zPos - gPlayer[0].camEye.z) > 300.0f) || (fabsf(xPos - gPlayer[0].camEye.x) > 300.0f)) {
diff --git a/src/main/fox_play.c b/src/main/fox_play.c
index ae8b3c88..8ea0cf39 100644
--- a/src/main/fox_play.c
+++ b/src/main/fox_play.c
@@ -3850,10 +3850,10 @@ void func_800B0194(Player* player) {
player->unk_17C = RAND_FLOAT_CENTERED(100.0f);
}
if (((gGameFrameCount & 0xF) == 3) && (Rand_ZeroOne() < 0.5f)) {
- player->unk_174 = (Rand_ZeroOne() - 0.2f) * 50.0f;
+ player->unk_174 = RAND_RANGE(-10.0f, 40.0f);
}
if (((gGameFrameCount & 0xF) == 10) && (Rand_ZeroOne() < 0.5f)) {
- player->unk_178 = (Rand_ZeroOne() - 0.2f) * 50.0f;
+ player->unk_178 = RAND_RANGE(-10.0f, 40.0f);
}
Math_SmoothStepToF(&player->unk_15C, player->unk_17C, 0.15f, 10.0f, 0.00001f);
Math_SmoothStepToF(&player->unk_164, player->unk_174, 0.1f, 10.0f, 0.00001f);
@@ -5148,7 +5148,7 @@ void func_800B44C4(Player* player) {
break;
case FORM_BLUE_MARINE:
func_i3_801BEC80(player);
- return;
+ break;
case FORM_ON_FOOT:
func_800B00C0(player);
func_800B0194(player);
diff --git a/src/main/fox_std_lib.c b/src/main/fox_std_lib.c
index 4e18fac8..bf6d8ec6 100644
--- a/src/main/fox_std_lib.c
+++ b/src/main/fox_std_lib.c
@@ -248,8 +248,8 @@ void Animation_DrawSkeleton(s32 mode, Limb** skeletonSegment, Vec3f* jointTable,
}
}
-s16 Animation_GetFrameData(AnimationHeader* animationSegmemt, s32 frame, Vec3f* frameTable) {
- AnimationHeader* animation = SEGMENTED_TO_VIRTUAL(animationSegmemt);
+s16 Animation_GetFrameData(Animation* animationSegmemt, s32 frame, Vec3f* frameTable) {
+ Animation* animation = SEGMENTED_TO_VIRTUAL(animationSegmemt);
u16 var4 = animation->limbCount;
JointKey* key = SEGMENTED_TO_VIRTUAL(animation->jointKey);
u16* frameData = SEGMENTED_TO_VIRTUAL(animation->frameData);
@@ -275,8 +275,8 @@ s16 Animation_GetFrameData(AnimationHeader* animationSegmemt, s32 frame, Vec3f*
return var4 + 1;
}
-s16 Animation_GetFrameCount(AnimationHeader* animationSegment) {
- AnimationHeader* animation = SEGMENTED_TO_VIRTUAL(animationSegment);
+s16 Animation_GetFrameCount(Animation* animationSegment) {
+ Animation* animation = SEGMENTED_TO_VIRTUAL(animationSegment);
return animation->frameCount;
}
@@ -335,11 +335,11 @@ void Animation_GetDListBoundingBox(Gfx* dList, s32 len, Vec3f* min, Vec3f* max)
Animation_FindBoundingBox(dList, len, min, max, &vtxFound, &vtxCount, &vtxList);
}
-void Animation_GetSkeletonBoundingBox(Limb** skeletonSegment, AnimationHeader* animationSegment, s32 frame, Vec3f* min,
+void Animation_GetSkeletonBoundingBox(Limb** skeletonSegment, Animation* animationSegment, s32 frame, Vec3f* min,
Vec3f* max) {
JointKey* key;
u16* frameData;
- AnimationHeader* animation;
+ Animation* animation;
Limb* limb;
u16 var_t6;
s32 vtxFound;
@@ -351,7 +351,7 @@ void Animation_GetSkeletonBoundingBox(Limb** skeletonSegment, AnimationHeader* a
Limb** skeleton = (Limb**) SEGMENTED_TO_VIRTUAL(skeletonSegment);
limb = (Limb*) SEGMENTED_TO_VIRTUAL(skeleton[0]);
- animation = (AnimationHeader*) SEGMENTED_TO_VIRTUAL(animationSegment);
+ animation = (Animation*) SEGMENTED_TO_VIRTUAL(animationSegment);
key = (JointKey*) SEGMENTED_TO_VIRTUAL(animation->jointKey);
frameData = (u16*) SEGMENTED_TO_VIRTUAL(animation->frameData);
diff --git a/src/overlays/ovl_i1/fox_co.c b/src/overlays/ovl_i1/fox_co.c
index 04b4ff39..97f92a43 100644
--- a/src/overlays/ovl_i1/fox_co.c
+++ b/src/overlays/ovl_i1/fox_co.c
@@ -526,8 +526,8 @@ void func_i1_80188D50(Boss* boss) {
}
}
-extern AnimationHeader D_602BC18;
-extern AnimationHeader D_602C0D0;
+extern Animation D_602BC18;
+extern Animation D_602C0D0;
void func_i1_80189058(Boss* boss) {
Vec3f sp21C = { 0.0f, 0.0f, 0.0f };
@@ -1154,7 +1154,7 @@ void func_i1_8018ACE0(Actor* actor) {
}
}
-extern AnimationHeader D_602991C;
+extern Animation D_602991C;
extern Gfx D_60329C0[];
void func_i1_8018AED0(Actor* actor) {
@@ -1222,7 +1222,7 @@ void func_i1_8018B0B4(Actor* actor) {
}
}
-extern AnimationHeader D_602AA04;
+extern Animation D_602AA04;
void func_i1_8018B15C(Actor* actor) {
Vec3f sp60[20];
@@ -1288,7 +1288,7 @@ void func_i1_8018B15C(Actor* actor) {
1.0f, 1.0f);
}
-extern AnimationHeader D_602A520;
+extern Animation D_602A520;
void func_i1_8018B418(Actor* actor) {
s32 pad;
@@ -2328,7 +2328,7 @@ s32 func_i1_8018EC54(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* d
return false;
}
-extern AnimationHeader D_602D400;
+extern Animation D_602D400;
extern Limb* D_602D5AC[];
void func_i1_8018ECAC(Boss* boss) {
@@ -2442,7 +2442,7 @@ s32 func_i1_8018F1C8(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* d
return 0;
}
-extern AnimationHeader D_602AA7C;
+extern Animation D_602AA7C;
extern Limb* D_602AB48[];
void func_i1_8018F31C(Object_80* obj80) {
@@ -2494,13 +2494,13 @@ void func_i1_8018F55C(Effect* effect) {
Effect_Initialize(effect);
effect->obj.status = OBJ_INIT;
effect->obj.pos.x = gPlayer[0].camEye.x + RAND_FLOAT_CENTERED(500.0f);
- effect->obj.pos.y = gPlayer[0].camEye.y + ((Rand_ZeroOne() - 0.8f) * 350.0f);
+ effect->obj.pos.y = gPlayer[0].camEye.y + RAND_RANGE(-280.0f, 70.0f);
effect->obj.id = OBJ_EFFECT_352;
effect->timer_50 = 80;
effect->unk_46 = 0x90;
effect->obj.pos.z = -4000.0f;
effect->vel.z = 60.0f;
- effect->scale2 = RAND_FLOAT(15.0f) + 10.0f;
+ effect->scale2 = 10.0f + RAND_FLOAT(15.0f);
if (Rand_ZeroOne() < 0.5f) {
effect->obj.rot.z = 180.0f;
}
diff --git a/src/overlays/ovl_i1/sf_ve1.c b/src/overlays/ovl_i1/sf_ve1.c
index e08f7d7e..1ab30105 100644
--- a/src/overlays/ovl_i1/sf_ve1.c
+++ b/src/overlays/ovl_i1/sf_ve1.c
@@ -7,8 +7,8 @@ extern s32 D_i1_8019C0B8;
extern s32 D_i1_8019C0BC;
extern s32 D_i1_8019C0C0;
extern Vec3f D_i1_80199FFC;
-extern Limb* D_900D164;
-extern Limb* D_901C0F4;
+extern Limb* D_900D164[];
+extern Limb* D_901C0F4[];
const char D_i1_8019B2B0[] = "--アタックオフ!!\n";
const char D_i1_8019B2C4[] = "--レベルアップ!!\n";
@@ -351,7 +351,7 @@ void func_i1_801933B4(Actor* arg0) {
void func_i1_801934D0(Actor* actor) {
Matrix_Translate(gGfxMatrix, 0.0f, -488.0f, 0.0f, 1U);
- Animation_DrawSkeleton(0, &D_900D164, actor->vwork, NULL, NULL, actor, &gIdentityMatrix);
+ Animation_DrawSkeleton(0, D_900D164, actor->vwork, NULL, NULL, actor, &gIdentityMatrix);
}
void func_i1_80193540(Object_80* arg0) {
@@ -383,7 +383,7 @@ void func_i1_80198594(Boss* boss) {
void func_i1_801985E4(Boss* boss) {
if (boss->swork[26] == 0) {
- Animation_DrawSkeleton(0, &D_901C0F4, boss->vwork, func_i1_801937F4, func_i1_80193D64, boss, &gIdentityMatrix);
+ Animation_DrawSkeleton(0, D_901C0F4, boss->vwork, func_i1_801937F4, func_i1_80193D64, boss, &gIdentityMatrix);
}
boss->state = boss->swork[9];
}
diff --git a/src/overlays/ovl_i2/fox_sx.c b/src/overlays/ovl_i2/fox_sx.c
index 5c05152b..72993424 100644
--- a/src/overlays/ovl_i2/fox_sx.c
+++ b/src/overlays/ovl_i2/fox_sx.c
@@ -13,17 +13,17 @@ Vec3f D_i2_80195668 = { 90.0f, 0.0f, 0.0f };
extern Gfx D_60010C0[];
extern Gfx D_6006810[];
extern Gfx D_6009C30[];
-extern AnimationHeader D_6009FF8;
-extern AnimationHeader D_600A2D4;
-extern AnimationHeader D_600F890;
-extern AnimationHeader D_60123BC;
-extern AnimationHeader D_6013798;
-extern AnimationHeader D_60158C4;
-extern AnimationHeader D_6016E28;
-extern AnimationHeader D_601AA28;
-extern AnimationHeader D_601C690;
-extern AnimationHeader D_60206DC;
-extern Limb* D_6020C68;
+extern Animation D_6009FF8;
+extern Animation D_600A2D4;
+extern Animation D_600F890;
+extern Animation D_60123BC;
+extern Animation D_6013798;
+extern Animation D_60158C4;
+extern Animation D_6016E28;
+extern Animation D_601AA28;
+extern Animation D_601C690;
+extern Animation D_60206DC;
+extern Limb* D_6020C68[];
extern Gfx D_6020D20[];
extern Gfx D_603265C[];
extern Gfx D_6032768[];
@@ -312,7 +312,7 @@ bool func_i2_8018FF40(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void*
}
void func_i2_8018FF84(Boss* boss) {
- Animation_DrawSkeleton(3, &D_6020C68, boss->vwork, func_i2_8018FF40, func_i2_80193208, boss, gCalcMatrix);
+ Animation_DrawSkeleton(3, D_6020C68, boss->vwork, func_i2_8018FF40, func_i2_80193208, boss, gCalcMatrix);
}
bool func_i2_8018FFDC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
@@ -324,7 +324,7 @@ bool func_i2_8018FFDC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void*
}
void func_i2_80190020(Boss* boss) {
- Animation_DrawSkeleton(3, &D_6020C68, boss->vwork, func_i2_8018FFDC, func_i2_80193208, boss, gCalcMatrix);
+ Animation_DrawSkeleton(3, D_6020C68, boss->vwork, func_i2_8018FFDC, func_i2_80193208, boss, gCalcMatrix);
}
void func_i2_80190078(Boss* boss) {
@@ -1106,7 +1106,7 @@ void func_i2_80190078(Boss* boss) {
D_i2_80195640 = 1;
- Animation_DrawSkeleton(1, &D_6020C68, boss->vwork, func_i2_80192AF0, func_i2_80193208, boss, &gIdentityMatrix);
+ Animation_DrawSkeleton(1, D_6020C68, boss->vwork, func_i2_80192AF0, func_i2_80193208, boss, &gIdentityMatrix);
if (((boss->swork[1] != 0) && (boss->swork[3] > 0)) && ((boss->fwork[4] < 45.0f) || (boss->fwork[4] > 315.0f))) {
boss->swork[1]++;
@@ -1364,7 +1364,7 @@ void func_i2_80193434(Boss* boss) {
if (boss->swork[5] == 0) {
D_i2_80195640 = 0;
- Animation_DrawSkeleton(3, &D_6020C68, boss->vwork, func_i2_80192AF0, 0, boss, gCalcMatrix);
+ Animation_DrawSkeleton(3, D_6020C68, boss->vwork, func_i2_80192AF0, 0, boss, gCalcMatrix);
RCP_SetupDL_64();
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 96);
diff --git a/src/overlays/ovl_i3/fox_a6.c b/src/overlays/ovl_i3/fox_a6.c
index fbceb5dc..6d09d92d 100644
--- a/src/overlays/ovl_i3/fox_a6.c
+++ b/src/overlays/ovl_i3/fox_a6.c
@@ -1415,7 +1415,7 @@ void func_i3_8018A464(Boss* bossA6, s32 arg1) {
}
} else {
bossA6->swork[A6_SWK_11] = 30;
- D_i3_801BF100[0].x = (Rand_ZeroOne() - 0.4f) * 30.0f;
+ D_i3_801BF100[0].x = RAND_RANGE(-12.0f, 18.0f);
}
D_i3_801BF394[0] = D_i3_801BF100[0].x;
} else if (!(bossA6->swork[A6_SWK_11] & 7)) {
diff --git a/src/overlays/ovl_i3/fox_aq.c b/src/overlays/ovl_i3/fox_aq.c
new file mode 100644
index 00000000..76e2270d
--- /dev/null
+++ b/src/overlays/ovl_i3/fox_aq.c
@@ -0,0 +1,6184 @@
+// #include "prevent_bss_reordering.h"
+#include "global.h"
+
+const char D_i3_801C1A30[] = "プレイヤーのすべてをクリア \n";
+const char D_i3_801C1A50[] = "i %d\n";
+
+// /* 0x3 */ ROM_SEGMENT(ast_8E1F80),
+extern Gfx D_3000130[];
+extern Gfx D_3000470[];
+extern Gfx D_3000AF0[];
+extern Gfx D_3000C70[];
+extern Gfx D_3006AF0[];
+extern Gfx D_3006C70[];
+extern Gfx D_3006DE0[];
+
+// /* 0x6 */ ROM_SEGMENT(ast_A58F60),
+extern Animation D_6000AE4;
+extern Limb* D_6000DB0[];
+extern Animation D_6002628;
+extern Limb* D_6002874[];
+extern Gfx D_6002C10[];
+extern Animation D_6005954;
+extern Limb* D_6005A80[];
+extern u8 D_6008EC8[];
+extern u8 D_6008FC8[];
+extern Vtx D_6011A78[];
+extern Animation D_60135E0;
+extern Limb* D_60136CC[];
+extern Limb* D_60137CC[];
+extern Gfx D_60137F0[];
+extern Gfx D_6014030[];
+extern Animation D_6014438;
+extern Limb* D_6014504[];
+extern Gfx D_6014520[];
+extern Gfx D_6014FD0[];
+extern Vtx D_6018878[];
+extern Vtx D_6018C78[];
+extern Vtx D_6019078[];
+extern u8 D_6019238[];
+extern u8 D_6019338[];
+extern Gfx D_60194D0[];
+extern Gfx D_6019880[];
+extern Gfx D_6019E80[];
+extern Animation D_601DE50;
+extern Animation D_601EC68;
+extern Limb* D_601EDB4[];
+extern Animation D_6020A40;
+extern Limb* D_6020C6C[];
+extern Animation D_6023780;
+extern Limb* D_602390C[];
+extern Gfx D_6024A50[];
+extern Animation D_6024F80;
+extern Limb* D_602512C[];
+extern Animation D_60260EC;
+extern Limb* D_60263F8[];
+extern Animation D_602AC28;
+extern Limb* D_602BD60[];
+extern f32 D_6030D3C[];
+extern f32 D_6030D58[];
+extern f32 D_60314AC[];
+extern f32 D_60314E4[];
+extern f32 D_603151C[];
+extern Vtx D_6031D90[];
+
+typedef enum {
+ /* 0 */ AQ_LIMB_0,
+ /* 1 */ AQ_LIMB_1,
+ /* 2 */ AQ_LIMB_2,
+ /* 3 */ AQ_LIMB_3,
+ /* 4 */ AQ_LIMB_4,
+ /* 5 */ AQ_LIMB_5,
+ /* 6 */ AQ_LIMB_6,
+ /* 7 */ AQ_LIMB_7,
+ /* 8 */ AQ_LIMB_8,
+ /* 9 */ AQ_LIMB_9,
+ /* 10 */ AQ_LIMB_10,
+ /* 11 */ AQ_LIMB_11,
+ /* 12 */ AQ_LIMB_12,
+ /* 13 */ AQ_LIMB_13,
+ /* 14 */ AQ_LIMB_14,
+ /* 15 */ AQ_LIMB_15,
+ /* 16 */ AQ_LIMB_16,
+ /* 17 */ AQ_LIMB_17,
+ /* 18 */ AQ_LIMB_18,
+ /* 19 */ AQ_LIMB_19,
+ /* 20 */ AQ_LIMB_20,
+ /* 21 */ AQ_LIMB_21,
+ /* 22 */ AQ_LIMB_22,
+ /* 23 */ AQ_LIMB_23,
+ /* 24 */ AQ_LIMB_24,
+ /* 25 */ AQ_LIMB_25,
+ /* 26 */ AQ_LIMB_26,
+ /* 27 */ AQ_LIMB_27,
+ /* 28 */ AQ_LIMB_MAX,
+} BossAQLimbs;
+
+typedef enum {
+ /* 0 */ AQ_SWK_0,
+ /* 1 */ AQ_SWK_1,
+ /* 2 */ AQ_SWK_2,
+ /* 3 */ AQ_SWK_3,
+ /* 4 */ AQ_SWK_4,
+ /* 5 */ AQ_SWK_5,
+ /* 6 */ AQ_SWK_6,
+ /* 7 */ AQ_SWK_7,
+ /* 8 */ AQ_SWK_8,
+ /* 9 */ AQ_SWK_9,
+ /* 10 */ AQ_SWK_10,
+ /* 11 */ AQ_SWK_11,
+ /* 12 */ AQ_SWK_12,
+ /* 13 */ AQ_SWK_13,
+ /* 14 */ AQ_SWK_14,
+ /* 15 */ AQ_SWK_15,
+ /* 16 */ AQ_SWK_16,
+ /* 17 */ AQ_SWK_17,
+ /* 18 */ AQ_SWK_18,
+ /* 19 */ AQ_SWK_19,
+ /* 20 */ AQ_SWK_20,
+ /* 21 */ AQ_SWK_21,
+ /* 22 */ AQ_SWK_22,
+ /* 23 */ AQ_SWK_23,
+ /* 24 */ AQ_SWK_24,
+ /* 25 */ AQ_SWK_25,
+ /* 26 */ AQ_SWK_26,
+ /* 27 */ AQ_SWK_27,
+ /* 28 */ AQ_SWK_28,
+ /* 29 */ AQ_SWK_29,
+ /* 30 */ AQ_SWK_30,
+ /* 31 */ AQ_SWK_31,
+ /* 32 */ AQ_SWK_32,
+ /* 33 */ AQ_SWK_33,
+ /* 34 */ AQ_SWK_34,
+ /* 35 */ AQ_SWK_35,
+ /* 36 */ AQ_SWK_36,
+ /* 37 */ AQ_SWK_37,
+ /* 38 */ AQ_SWK_38,
+ /* 39 */ AQ_SWK_39,
+ /* 40 */ AQ_SWK_MAX,
+} BossAQswork;
+
+typedef enum {
+ /* 0 */ AQ_FWK_0,
+ /* 1 */ AQ_FWK_1,
+ /* 2 */ AQ_FWK_2,
+ /* 3 */ AQ_FWK_3,
+ /* 4 */ AQ_FWK_4,
+ /* 5 */ AQ_FWK_5,
+ /* 6 */ AQ_FWK_6,
+ /* 7 */ AQ_FWK_7,
+ /* 8 */ AQ_FWK_8,
+ /* 9 */ AQ_FWK_9,
+ /* 10 */ AQ_FWK_10,
+ /* 11 */ AQ_FWK_11,
+ /* 12 */ AQ_FWK_12,
+ /* 13 */ AQ_FWK_13,
+ /* 14 */ AQ_FWK_14,
+ /* 15 */ AQ_FWK_15,
+ /* 16 */ AQ_FWK_16,
+ /* 17 */ AQ_FWK_17,
+ /* 18 */ AQ_FWK_18,
+ /* 19 */ AQ_FWK_19,
+ /* 20 */ AQ_FWK_20,
+ /* 21 */ AQ_FWK_21,
+ /* 22 */ AQ_FWK_22,
+ /* 23 */ AQ_FWK_23,
+ /* 24 */ AQ_FWK_24,
+ /* 25 */ AQ_FWK_25,
+ /* 26 */ AQ_FWK_26,
+ /* 27 */ AQ_FWK_27,
+ /* 28 */ AQ_FWK_28,
+ /* 29 */ AQ_FWK_29,
+ /* 30 */ AQ_FWK_30,
+ /* 31 */ AQ_FWK_31,
+ /* 32 */ AQ_FWK_32,
+ /* 33 */ AQ_FWK_33,
+ /* 34 */ AQ_FWK_34,
+ /* 35 */ AQ_FWK_35,
+ /* 36 */ AQ_FWK_36,
+ /* 37 */ AQ_FWK_37,
+ /* 38 */ AQ_FWK_38,
+ /* 39 */ AQ_FWK_39,
+ /* 40 */ AQ_FWK_40,
+ /* 41 */ AQ_FWK_41,
+ /* 42 */ AQ_FWK_42,
+ /* 43 */ AQ_FWK_43,
+ /* 44 */ AQ_FWK_44,
+ /* 45 */ AQ_FWK_45,
+ /* 46 */ AQ_FWK_46,
+ /* 47 */ AQ_FWK_47,
+ /* 48 */ AQ_FWK_48,
+ /* 49 */ AQ_FWK_49,
+ /* 50 */ AQ_FWK_MAX,
+} BossAQfwork;
+
+typedef enum {
+ /* 0 */ AQ_VWK_0,
+ /* 1 */ AQ_VWK_1,
+ /* 2 */ AQ_VWK_2,
+ /* 3 */ AQ_VWK_3,
+ /* 4 */ AQ_VWK_4,
+ /* 5 */ AQ_VWK_5,
+ /* 6 */ AQ_VWK_6,
+ /* 7 */ AQ_VWK_7,
+ /* 8 */ AQ_VWK_8,
+ /* 9 */ AQ_VWK_9,
+ /* 10 */ AQ_VWK_10,
+ /* 11 */ AQ_VWK_11,
+ /* 12 */ AQ_VWK_12,
+ /* 13 */ AQ_VWK_13,
+ /* 14 */ AQ_VWK_14,
+ /* 15 */ AQ_VWK_15,
+ /* 16 */ AQ_VWK_16,
+ /* 17 */ AQ_VWK_17,
+ /* 18 */ AQ_VWK_18,
+ /* 19 */ AQ_VWK_19,
+ /* 20 */ AQ_VWK_20,
+ /* 21 */ AQ_VWK_21,
+ /* 22 */ AQ_VWK_22,
+ /* 23 */ AQ_VWK_23,
+ /* 24 */ AQ_VWK_24,
+ /* 25 */ AQ_VWK_25,
+ /* 26 */ AQ_VWK_26,
+ /* 27 */ AQ_VWK_27,
+ /* 28 */ AQ_VWK_28,
+ /* 29 */ AQ_VWK_29,
+ /* 30 */ AQ_VWK_30,
+ /* 31 */ AQ_VWK_31,
+ /* 32 */ AQ_VWK_32,
+ /* 33 */ AQ_VWK_33,
+ /* 34 */ AQ_VWK_34,
+ /* 35 */ AQ_VWK_35,
+ /* 36 */ AQ_VWK_36,
+ /* 37 */ AQ_VWK_37,
+ /* 38 */ AQ_VWK_38,
+ /* 39 */ AQ_VWK_39,
+ /* 40 */ AQ_VWK_40,
+ /* 41 */ AQ_VWK_41,
+ /* 42 */ AQ_VWK_42,
+ /* 43 */ AQ_VWK_43,
+ /* 44 */ AQ_VWK_44,
+ /* 45 */ AQ_VWK_45,
+ /* 46 */ AQ_VWK_46,
+ /* 47 */ AQ_VWK_47,
+ /* 48 */ AQ_VWK_48,
+ /* 49 */ AQ_VWK_49,
+ /* 50 */ AQ_VWK_MAX,
+} BossAQvwork;
+
+f32 D_i3_801BFB60 = 0.0f;
+s32 D_i3_801BFB64[11] = {
+ 0, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3,
+};
+u8 D_i3_801BFB90[12] = {
+ 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+};
+Gfx* D_i3_801BFB9C[3] = { D_6015FF0, D_6022110, D_6015DD0 };
+f32 D_i3_801BFBA8[2] = { 40.0f, -40.0f };
+f32 D_i3_801BFBB0[3] = { 20.0f, 10.0f, 15.0f };
+f32 D_i3_801BFBBC[3] = { 8.0f, 27.0f, 42.0f };
+f32 D_i3_801BFBC8[3] = { 15.0f, 6.0f, 7.0f };
+f32 D_i3_801BFBD4[3] = { 358.0f, 12.0f, 352.0f };
+f32 D_i3_801BFBE0[3][4] = {
+ { 1.3f, 0.1f, 1.0f, 777.0f },
+ { 0.7f, 0.5f, 5.0f, 777.0f },
+ { 1.0f, 0.2f, 2.0f, 777.0f },
+};
+f32 D_i3_801BFC10[3][4] = {
+ { 0.6f, 0.1f, 1.0f, 777.0f },
+ { 1.5f, 0.5f, 5.0f, 777.0f },
+ { 1.0f, 0.2f, 2.0f, 777.0f },
+};
+f32 D_i3_801BFC40[3][4] = {
+ { 1.3f, 0.1f, 1.0f, 777.0f },
+ { 0.7f, 0.5f, 5.0f, 777.0f },
+ { 1.0f, 0.2f, 2.0f, 777.0f },
+};
+s32 D_i3_801BFC70[3] = { 18, 22, 45 };
+f32 D_i3_801BFC7C[3] = { 20.0f, 10.0f, 0.0f };
+f32 D_i3_801BFC88[3] = { 10.0f, 320.0f, 30.0f };
+Vec3f D_i3_801BFC94[6 * 4] = {
+ { 1.0f, 1.0f, 1.0f }, { 0.9f, 0.9f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f },
+ { 0.9f, 0.9f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 0.9f, 0.9f, 0.9f },
+ { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 0.9f, 1.0f, 0.9f }, { 1.0f, 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 0.9f, 1.0f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f },
+};
+s32 D_i3_801BFDB4[6 * 4] = {
+ 1, 5, 15, 100000, 1, 5, 15, 100000, 1, 5, 15, 100000, 1, 10, 20, 100000, 1, 10, 20, 100000, 1, 10, 20, 100000,
+};
+s32 D_i3_801BFE14 = 0;
+Vec3f D_i3_801BFE18[6 * 4] = {
+ { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f },
+ { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f },
+ { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.2f, 0.2f, 0.2f }, { 0.3f, 0.3f, 0.3f }, { 0.2f, 0.2f, 0.2f },
+ { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f },
+ { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f },
+};
+Vec3f D_i3_801BFF38[6 * 4] = {
+ { 1.0f, 1.0f, 1.0f }, { 5.0f, 5.0f, 5.0f }, { 10.0f, 10.0f, 10.0f }, { 5.0f, 5.0f, 5.0f }, { 1.0f, 1.0f, 1.0f },
+ { 5.0f, 5.0f, 5.0f }, { 10.0f, 10.0f, 10.0f }, { 5.0f, 5.0f, 5.0f }, { 1.0f, 1.0f, 1.0f }, { 3.0f, 3.0f, 3.0f },
+ { 2.0f, 2.0f, 2.0f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 3.0f, 1.0f, 3.0f }, { 2.0f, 1.0f, 2.0f },
+ { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { 3.0f, 1.0f, 3.0f }, { 2.0f, 1.0f, 2.0f }, { 1.0f, 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f }, { 1.0f, 4.0f, 3.0f }, { 1.0f, 3.0f, 2.0f }, { 1.0f, 1.0f, 1.0f },
+};
+f32 D_i3_801C0058 = 191.0f;
+f32 D_i3_801C005C = 63.0f;
+f32 D_i3_801C0060[7 * 2] = {
+ 50.0f, 8.0f, 50.0f, 8.0f, 10.0f, 1.0f, 20.0f, 2.0f, 20.0f, 2.0f, 20.0f, 2.0f, 50.0f, 2.0f,
+};
+Vec3f D_i3_801C0098[2] = {
+ { 370.0f, -53.0f, 1085.0f },
+ { -370.0f, -53.0f, 1085.0f },
+};
+f32 D_i3_801C00B0[3][4] = {
+ { 1.0f, 1.2f, 0.8f, 1.0f },
+ { 1.0f, 1.2f, 0.9f, 1.0f },
+ { 1.0f, 0.7f, 1.4f, 1.0f },
+};
+s32 D_i3_801C00E0[4] = { 1, 5, 8, 40 };
+f32 D_i3_801C00F0[3][4] = {
+ { 0.3f, 0.3f, 0.3f, 0.3f },
+ { 0.3f, 0.3f, 0.3f, 0.3f },
+ { 0.5f, 0.5f, 0.5f, 0.5f },
+};
+f32 D_i3_801C0120[3][4] = {
+ { 1.0f, 1.0f, 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f, 1.0f },
+ { 2.0f, 2.0f, 2.0f, 2.0f },
+};
+f32 D_i3_801C0150[4][4] = {
+ { 0.0f, 0.0f, 0.0f, 0.0f },
+ { 0.0f, -25.5f, 0.0f, 0.0f },
+ { -25.5f, 25.5f, -25.5f, 0.0f },
+ { 25.5f, 0.0f, 25.5f, 0.0f },
+};
+f32 D_i3_801C0190[5] = {
+ 0.0f, -30.0f, 30.0f, -30.0f, 30.0f,
+};
+
+PosRot* D_i3_801C27C0;
+PosRot D_i3_801C27C8[4 * 50];
+Vtx D_i3_801C3A88[2][2][28];
+f32 D_i3_801C4188;
+s32 D_i3_801C4190[10];
+f32 D_i3_801C41B8[30];
+s32 sBossAQlimbTimers[AQ_LIMB_MAX];
+s32 D_i3_801C42A0[25];
+f32 D_i3_801C4308[82];
+s32 D_i3_801C4450;
+s32 D_i3_801C4454;
+f32 D_i3_801C4458;
+f32 D_i3_801C445C;
+
+void func_i3_801A8E30(void) {
+ s32 i;
+ f32 spA8[17];
+ f32 sp64[17];
+ s32 j;
+ Vtx* sp5C = SEGMENTED_TO_VIRTUAL(D_6031D90);
+ Vtx* sp58 = SEGMENTED_TO_VIRTUAL(D_6011A78);
+
+ for (i = 0; i < 17; i++) {
+ if ((i == 0) || (i == 16)) {
+ spA8[i] = 0.0f;
+ sp64[i] = 0.0f;
+ } else {
+ spA8[i] = RAND_FLOAT_CENTERED(70.0f);
+ sp64[i] = RAND_FLOAT_CENTERED(70.0f);
+ }
+ }
+ for (i = 0; i < 34; i++) {
+ j = (sp5C[i].v.ob[2] + 200) / 25;
+ sp58[i].v.ob[0] = sp5C[i].v.ob[0] + spA8[j];
+ sp58[i].v.ob[1] = sp5C[i].v.ob[1] + sp64[j];
+ }
+}
+
+void func_i3_801A92EC(Actor* actor, f32 xUnk, f32 yUnk, f32 zUnk, s32 index, s32 mode) {
+ gUnkEntities30[index].mode = mode;
+ gUnkEntities30[index].unk_28 = 10.0f;
+ gUnkEntities30[index].unk_04.x = actor->obj.pos.x;
+ gUnkEntities30[index].unk_04.y = actor->obj.pos.y;
+ gUnkEntities30[index].unk_04.z = actor->obj.pos.z;
+ gUnkEntities30[index].unk_10.x = xUnk;
+ gUnkEntities30[index].unk_10.y = yUnk;
+ gUnkEntities30[index].unk_10.z = zUnk;
+ gUnkEntities30[index].unk_2C = gUnkEntities30[index].unk_2D = gUnkEntities30[index].unk_2E =
+ gUnkEntities30[index].unk_2F = 255;
+ gUnkEntities30[index].timer = 3;
+}
+
+void func_i3_801A9374(Actor* actor, Vec3f* pos, Vec3f* rot, f32 xVel, f32 yVel, f32 zVel, s32 state, f32 scale,
+ s32 timerBC, s32 unk48) {
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_ACTIVE;
+ actor->obj.id = OBJ_ACTOR_189;
+ actor->state = state;
+ actor->scale = scale;
+ actor->unk_048 = unk48;
+ actor->obj.pos = *pos;
+ actor->obj.rot = *rot;
+ actor->vel.x = xVel;
+ actor->vel.y = yVel;
+ actor->vel.z = zVel;
+ actor->timer_0BC = timerBC;
+ actor->gravity = 0.5f;
+ Object_SetInfo(&actor->info, actor->obj.id);
+}
+
+void func_i3_801A9448(Vec3f* pos, Vec3f* rot, f32 xVel, f32 yVel, f32 zVel, s32 unkB8, f32 scale, s32 timerBC,
+ s32 unk48) {
+ s32 i;
+
+ for (i = 59; i >= 0; i--) {
+ if (gActors[i].obj.status == OBJ_FREE) {
+ func_i3_801A9374(&gActors[i], pos, rot, xVel, yVel, zVel, unkB8, scale, timerBC, unk48);
+ break;
+ }
+ }
+}
+
+void func_i3_801A94EC(Vec3f* pos, ObjectId objId) {
+ Item* sp18;
+ Item* item;
+ s32 i;
+
+ for (i = 0, item = gItems; i < ARRAY_COUNT(gItems); i++, item++) {
+ if (item->obj.status == OBJ_FREE) {
+ Item_Initialize(item);
+ item->obj.status = OBJ_INIT;
+ item->obj.id = objId;
+ item->obj.pos.x = pos->x;
+ item->obj.pos.y = pos->y;
+ item->obj.pos.z = pos->z;
+ item->timer_4A = 2;
+ Object_SetInfo(&item->info, item->obj.id);
+ break;
+ }
+ }
+}
+
+f32 func_i3_801A958C(s32 arg0, f32 arg1) {
+ f32 var_fv1 = arg0 / 2.0f;
+
+ var_fv1 = MIN(arg1, var_fv1);
+
+ return var_fv1;
+}
+
+void func_i3_801A95C8(void) {
+ Math_SmoothStepToF(&gPlayer[0].camEye.x, D_80177978, 0.1f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&gPlayer[0].camEye.y, D_80177980, 0.1f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&gPlayer[0].camEye.z, D_80177988, 0.1f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&gPlayer[0].camAt.x, D_801779A0, 0.1f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&gPlayer[0].camAt.y, D_801779B8, 0.1f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&gPlayer[0].camAt.z, D_801779C0, 0.1f, 50.0f, 0.0001f);
+}
+
+void func_i3_801A96DC(Actor* actor) {
+ actor->obj.rot.y = RAD_TO_DEG(-gPlayer[0].unk_058);
+ actor->obj.rot.x = RAD_TO_DEG(gPlayer[0].unk_05C);
+}
+
+void func_i3_801A9728(Actor* actor, f32 radius, f32 scale, s32 spread) {
+ f32 temp_fs0;
+ f32 temp_fs1;
+ f32 temp;
+ s32 i;
+
+ for (i = 0; i < 36; i += spread) {
+ temp_fs1 = SIN_DEG(i * 10.0f) * radius;
+ temp_fs0 = COS_DEG(i * 10.0f) * radius;
+ temp = gGroundLevel + 30.0f;
+ func_8007B8F8(actor->obj.pos.x + temp_fs1, temp, actor->obj.pos.z + temp_fs0, scale);
+ }
+}
+
+void func_i3_801A9824(void) {
+ s32 i;
+ f32* var_v0;
+ f32* var_v0_4;
+ s32* var_a0;
+ s32* var_v0_2;
+ s32* var_v0_3;
+
+ gTeamShields[1] = gTeamShields[2] = gTeamShields[3] = 255;
+ for (i = 0; i < ARRAY_COUNT(D_i3_801C4190); i++) {
+ D_i3_801C4190[i] = 0;
+ }
+ for (i = 0; i < ARRAY_COUNT(D_i3_801C41B8); i++) {
+ D_i3_801C41B8[i] = 0.0f;
+ }
+ for (i = 0; i < AQ_LIMB_MAX; i++) {
+ sBossAQlimbTimers[i] = 0;
+ }
+ for (i = 0; i < ARRAY_COUNT(D_i3_801C42A0); i++) {
+ D_i3_801C42A0[i] = 0;
+ }
+ for (i = 0; i < ARRAY_COUNT(D_i3_801C4308); i++) {
+ D_i3_801C4308[i] = 0;
+ }
+ D_i3_801C4458 = D_i3_801C445C = 0.0f;
+ D_i3_801C4450 = D_i3_801C4454 = 0;
+ D_i3_801C41B8[12] = 40.0f;
+ D_i3_801C41B8[13] = 100.0f;
+ D_i3_801C41B8[14] = 120.0f;
+ D_i3_801C41B8[15] = 20.0f;
+ D_i3_801C41B8[16] = 30.0f;
+ D_i3_801C41B8[17] = 50.0f;
+ if (D_80177CA0 != 0) {
+ D_i3_801C41B8[12] = 0.0f;
+ D_i3_801C41B8[13] = 3.0f;
+ D_i3_801C41B8[14] = 5.0f;
+ D_i3_801C41B8[15] = 0.0f;
+ D_i3_801C41B8[16] = 0.0f;
+ D_i3_801C41B8[17] = 0.0f;
+ }
+ D_i3_801C4190[5] = 0;
+ D_i3_801C41B8[25] = D_8015F970;
+ D_i3_801C41B8[26] = 128.0f;
+}
+
+void func_i3_801A99D4(Player* player) {
+ s32 sp24 = fabsf(player->unk_138 / 1000.0f);
+
+ Math_SmoothStepToF(&D_8015F970, D_i3_801C41B8[25], 1.0f, 10.0f, 0.00001f);
+ Math_SmoothStepToF(&D_i3_801C4188, D_i3_801C41B8[26], 0.1f, 10.0f, 0.00001f);
+ if ((D_i3_801C4190[8] < sp24) && (D_i3_801C41B8[25] < 4600.0f)) {
+ D_i3_801C4190[8] = sp24;
+ D_i3_801C41B8[25] += 150.0f;
+ D_i3_801C41B8[26] = D_i3_801C4188 - 6.0f;
+ if (D_i3_801C41B8[26] < 0.0f) {
+ D_i3_801C41B8[26] = 0.0f;
+ }
+ if (D_i3_801C41B8[25] > 4600.0f) {
+ D_i3_801C41B8[25] = 4600.0f;
+ }
+ D_i3_801C41B8[12] -= 2.0f;
+ if (D_i3_801C41B8[12] < 0.0f) {
+ D_i3_801C41B8[12] = 0.0f;
+ }
+ D_i3_801C41B8[13] -= 6.0f;
+ if (D_i3_801C41B8[13] < 3.0f) {
+ D_i3_801C41B8[13] = 3.0f;
+ }
+ D_i3_801C41B8[14] -= 6.0f;
+ if (D_i3_801C41B8[14] < 5.0f) {
+ D_i3_801C41B8[14] = 5.0f;
+ }
+ D_i3_801C41B8[15] -= 1.0f;
+ if (D_i3_801C41B8[15] < 0.0f) {
+ D_i3_801C41B8[15] = 0.0f;
+ }
+ D_i3_801C41B8[16] -= 1.5f;
+ if (D_i3_801C41B8[16] < 0.0f) {
+ D_i3_801C41B8[16] = 0.0f;
+ }
+ D_i3_801C41B8[17] -= 2.5f;
+ if (D_i3_801C41B8[17] < 0.0f) {
+ D_i3_801C41B8[17] = 0.0f;
+ }
+ gLight1R = D_i3_801C41B8[12];
+ gLight1G = D_i3_801C41B8[13];
+ gLight1B = D_i3_801C41B8[14];
+ gAmbientR = D_i3_801C41B8[15];
+ gAmbientG = D_i3_801C41B8[16];
+ gAmbientB = D_i3_801C41B8[17];
+ }
+}
+
+void func_i3_801A9C98(Player* player) {
+ Actor* actor;
+ s32 i;
+ s32 var_v0;
+
+ if ((D_i3_801C4190[0] != 777) && (D_i3_801C4190[0] > 0)) {
+ i = D_i3_801C4190[0] - 1;
+ actor = &gActors[i];
+ if ((actor->obj.status != OBJ_ACTIVE) || ((player->unk_138 - 300.0f) <= actor->obj.pos.z) ||
+ (actor->obj.pos.z <= (player->unk_138 - 7000.0f)) || (actor->obj.id != D_i3_801C4190[1]) ||
+ (actor->health == 0)) {
+ D_i3_801C4190[0] = D_i3_801C4190[3] = D_i3_801C4190[5] =
+
+ D_i3_801C4190[1] = 0;
+ } else {
+ var_v0 = 1;
+ if (actor->info.hitbox[1] == 200000.0f) {
+ var_v0 = 5;
+ }
+ D_i3_801C41B8[2] = actor->obj.pos.z + actor->info.hitbox[var_v0 + 0] + actor->info.hitbox[var_v0 + 1];
+ D_i3_801C41B8[1] = actor->obj.pos.y + actor->info.hitbox[var_v0 + 2];
+ D_i3_801C41B8[0] = actor->obj.pos.x + actor->info.hitbox[var_v0 + 4];
+ }
+ }
+}
+
+void func_i3_801A9DE4(Player* player) {
+ s32 i;
+
+ if (D_i3_801C4190[0] == 777) {
+ if ((gBosses[0].obj.status != OBJ_ACTIVE) || (gBosses[0].health == 0) || (fabsf(D_i3_801C4308[10]) <= 6.0f) ||
+ ((D_i3_801C4190[4] == 121) && (gBosses[0].swork[AQ_SWK_12] == 0))) {
+ D_i3_801C4190[0] = D_i3_801C4190[4] = D_i3_801C4190[3] = D_i3_801C4190[5] = D_i3_801C4190[1] = 0;
+ } else {
+ i = D_i3_801C4190[4] - 2;
+
+ D_i3_801C41B8[2] = gBosses[0].obj.pos.z + gBosses[0].info.hitbox[i + 0] + gBosses[0].info.hitbox[i + 1];
+ D_i3_801C41B8[1] = gBosses[0].obj.pos.y + gBosses[0].info.hitbox[i + 2];
+ D_i3_801C41B8[0] = gBosses[0].obj.pos.x + gBosses[0].info.hitbox[i + 4];
+ }
+ }
+}
+
+// Loop looks really fake. optimized out index?
+void func_i3_801A9ED0(Player* player) {
+ s32 j;
+ s32 i;
+ s32 sp8C;
+ f32 temp_fa0;
+ f32 temp_fa1;
+ f32 temp_fv0;
+ f32 temp_fv1;
+ Vec3f sp70;
+ Vec3f sp64;
+ f32* tempy;
+
+ Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 1);
+ sp70.x = 0.0f;
+ sp70.y = 0.0f;
+ sp70.z = -1200.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp70, &sp64);
+ if (D_i3_801C4190[3] == 0) {
+ sp8C = D_i3_801C4190[4];
+
+ if ((fabsf(D_i3_801C4308[10]) >= 6.0f) && (gBosses[0].state >= 10) && (gBosses[0].obj.status == OBJ_ACTIVE) &&
+ (gBosses[0].health != 0)) {
+ for (j = 119, i = 121; j < 199; j += 10, i += 10) {
+ if ((j == 119) || (j == 129) || (j == 139) || (j == 169)) {
+ tempy = &gBosses[0].info.hitbox[i];
+
+ temp_fv0 = gBosses[0].obj.pos.y + tempy[0] + tempy[1] + 200.0f;
+ temp_fa0 = gBosses[0].obj.pos.y + tempy[0] - tempy[1] - 200.0f;
+ temp_fv1 = gBosses[0].obj.pos.x + tempy[2] + tempy[3] + 200.0f;
+ temp_fa1 = gBosses[0].obj.pos.x + tempy[2] - tempy[3] - 200.0f;
+ if ((gBosses[0].state >= 10) && ((player->pos.y + sp64.y) <= temp_fv0) &&
+ (temp_fa0 <= (player->pos.y + sp64.y)) && ((player->pos.x + sp64.x) <= temp_fv1) &&
+ (temp_fa1 <= (player->pos.x + sp64.x))) {
+ if (D_i3_801C41B8[11] >=
+ fabsf(player->unk_138 - gBosses[0].obj.pos.z - gBosses[0].info.hitbox[j])) {
+ D_i3_801C41B8[11] =
+ fabsf(player->unk_138 - gBosses[0].obj.pos.z - gBosses[0].info.hitbox[j]);
+ D_i3_801C4190[0] = 777;
+ D_i3_801C4190[4] = i;
+ D_i3_801C4190[1] = OBJ_BOSS_AQ;
+ }
+ if (((j == 129) && (gBosses[0].swork[AQ_SWK_8] == 0)) ||
+ ((j == 139) && (gBosses[0].swork[AQ_SWK_9] == 0)) ||
+ ((j == 119) && (gBosses[0].swork[AQ_SWK_12] == 0))) {
+ D_i3_801C4190[0] = D_i3_801C4190[4] = D_i3_801C4190[3] = D_i3_801C4190[5] =
+ D_i3_801C4190[1] = 0;
+ }
+ }
+ }
+ }
+ if ((sp8C != D_i3_801C4190[4]) && (D_i3_801C41B8[5] == 3.0f)) {
+ Audio_PlaySfx(0x4900001B, D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_i3_801C41B8[5] = 20.0f;
+ }
+ }
+ }
+ func_i3_801A9DE4(player);
+}
+
+void func_i3_801AA20C(void) {
+ f32 var_fs1;
+ f32 var_fs2;
+ s32 i;
+
+ if (gPlayer[0].unk_234 != 0) {
+ Matrix_Push(&gGfxMatrix);
+ Math_SmoothStepToF(&D_i3_801C41B8[5], 3.0f, 1.0f, 4.0f, 0.0001f);
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ if (D_i3_801C4190[3] == 0) {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
+ var_fs1 = -10.0f;
+ var_fs2 = 10.0f;
+ if (D_i3_801C4190[0] != 0) {
+ var_fs1 = var_fs2 = 0.0f;
+ }
+ Matrix_Translate(gGfxMatrix, D_i3_801C41B8[0] + var_fs1, D_i3_801C41B8[1] + var_fs2,
+ D_i3_801C41B8[2] + gPlayer[0].unk_144, 1);
+ Matrix_Scale(gGfxMatrix, D_i3_801C41B8[5], D_i3_801C41B8[5], D_i3_801C41B8[5], 1);
+ for (i = 0; i < 4; i++) {
+ Matrix_RotateZ(gGfxMatrix, M_PI / 2, 1);
+ Matrix_Translate(gGfxMatrix, var_fs1, var_fs2, 0.0f, 1);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_3000470);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ } else {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ Matrix_Translate(gGfxMatrix, D_i3_801C41B8[0], D_i3_801C41B8[1], D_i3_801C41B8[2] + gPlayer[0].unk_144, 1);
+ Matrix_Scale(gGfxMatrix, D_i3_801C41B8[5], D_i3_801C41B8[5], D_i3_801C41B8[5], 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_3000130);
+ }
+ Matrix_Pop(&gGfxMatrix);
+ }
+}
+
+void func_i3_801AA4BC(Player* player) {
+ f32 sp3C;
+ f32 sp38;
+
+ if (player->unk_230 == 0) {
+ sp3C = 0.0f;
+ sp38 = 0.1f;
+ if ((gInputHold->button & Z_TRIG) && !(gInputHold->button & R_TRIG)) {
+ sp3C = 90.0f;
+ sp38 = 0.2f;
+ if (player->unk_12C < 70.0f) {
+ Math_SmoothStepToF(&player->wings.unk_04, -70.0f, 0.3f, 100.0f, 0);
+ Math_SmoothStepToF(&player->wings.unk_08, -70.0f, 0.3f, 100.0f, 0);
+ Math_SmoothStepToF(&player->wings.unk_0C, 70.0f, 0.3f, 100.0f, 0);
+ Math_SmoothStepToF(&player->wings.unk_10, 70.0f, 0.3f, 100.0f, 0);
+ }
+ }
+ if ((gInputHold->button & R_TRIG) && !(gInputHold->button & Z_TRIG)) {
+ sp3C = -90.0f;
+ sp38 = 0.2f;
+ if (player->unk_12C > -70.0f) {
+ Math_SmoothStepToF(&player->wings.unk_04, 70.0f, 0.3f, 100.0f, 0);
+ Math_SmoothStepToF(&player->wings.unk_08, 70.0f, 0.3f, 100.0f, 0);
+ Math_SmoothStepToF(&player->wings.unk_0C, -70.0f, 0.3f, 100.0f, 0);
+ Math_SmoothStepToF(&player->wings.unk_10, -70.0f, 0.3f, 100.0f, 0);
+ }
+ }
+ Math_SmoothStepToF(&player->unk_12C, sp3C, sp38, 10.0f, 0);
+ }
+ if ((gInputPress->button & Z_TRIG) && (player->unk_230 == 0)) {
+ player->unk_48C = 1;
+ if (player->timer_1E0 != 0) {
+ player->unk_1DC = 1;
+ player->timer_1E8 = 10;
+ player->unk_1EC = player->unk_1F0 = 30;
+ player->unk_494 = 1;
+ } else {
+ player->timer_1E0 = 10;
+ }
+ }
+ if ((gInputPress->button & R_TRIG) && (player->unk_230 == 0)) {
+ player->unk_48C = 1;
+ if (player->timer_1E4 != 0) {
+ player->unk_1DC = 1;
+ player->timer_1E8 = 10;
+ player->unk_1EC = player->unk_1F0 = -30;
+ player->unk_494 = 1;
+ } else {
+ player->timer_1E4 = 10;
+ }
+ }
+ Math_SmoothStepToF(&player->unk_150, 1.0f, 0.05f, 10.0f, 0.0001f);
+ player->unk_130 = Math_ModF(player->unk_130, 360.0f);
+ if (player->unk_280 > 0) {
+ player->unk_280 -= 30;
+ if (player->unk_280 <= 0) {
+ player->unk_280 = 0;
+ }
+ }
+ if (player->unk_1DC == 0) {
+ Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 10.0f, 0.00001f);
+ }
+ if (player->timer_1E0 != 0) {
+ player->timer_1E0--;
+ }
+ if (player->timer_1E4 != 0) {
+ player->timer_1E4--;
+ }
+ if (player->timer_214 != 0) {
+ player->timer_214--;
+ }
+ if (player->timer_218 != 0) {
+ player->timer_218--;
+ }
+ if (player->timer_1E8 != 0) {
+ player->timer_1E8--;
+ }
+ if (player->unk_1DC != 0) {
+ player->timer_1E0 = player->timer_1E4 = 0;
+ player->unk_150 = 1.5f;
+ player->unk_130 += player->unk_1EC;
+ if (player->timer_1E8 == 0) {
+ if (player->unk_1EC > 0) {
+ player->unk_1EC -= 5;
+ }
+ if (player->unk_1EC < 0) {
+ player->unk_1EC += 5;
+ }
+ if (player->unk_1EC == 0) {
+ player->unk_1DC = 0;
+ }
+ } else {
+ if (player->unk_280 < 180) {
+ player->unk_280 += 60;
+ if (player->unk_280 > 180) {
+ player->unk_280 = 180;
+ }
+ }
+ }
+ }
+}
+
+void func_i3_801AA8E8(Player* player) {
+ f32 var_fv0 = gInputPress->stick_x;
+ f32 var_fv1 = -gInputPress->stick_y;
+ f32 temp;
+
+ if (player->state_1C8 != PLAYERSTATE_1C8_3) {
+ var_fv0 = var_fv1 = 0.0f;
+ }
+ Math_SmoothStepToF(&player->unk_030, var_fv0, 0.05f, 1.0f, 0.05f);
+ if (player->pos.y < (gGroundLevel + 50.0f)) {
+ Math_SmoothStepToF(&player->unk_02C, var_fv1 * 0.3f, 0.05f, 1.0f, 0.05f);
+ } else {
+ Math_SmoothStepToF(&player->unk_02C, var_fv1, 0.05f, 2.0f, 0.05f);
+ }
+ D_80177978 = (player->pos.x - player->unk_0AC) * (600.0f / player->unk_09C);
+ D_80177978 -= player->unk_030 * 1.5f;
+ D_80177978 += player->unk_0AC + D_i3_801C41B8[9];
+ D_80177980 = player->pos.y * (740.0f / player->unk_0A0);
+ D_80177980 -= player->unk_02C - 50.0f;
+ D_80177980 += player->unk_0B0;
+ D_801779A0 = (player->pos.x - player->unk_0AC - D_i3_801C41B8[9]) * (600.0f / player->unk_09C);
+ D_801779A0 += player->unk_084 * -2.0f;
+ D_801779A0 -= player->unk_030 * 0.5f;
+ D_801779A0 += player->unk_0AC;
+ D_801779B8 = (player->pos.y - player->unk_0B0) * (750.0f / player->unk_0A0);
+ D_801779B8 += player->unk_060 * 10.0f;
+ D_801779B8 -= player->unk_02C * -0.55f;
+ D_801779B8 += player->unk_0B0 + D_i3_801C41B8[10];
+ if (D_801779B8 < 20.0f) {
+ D_801779B8 = 20.0f;
+ }
+ D_80177988 = 240.0f;
+ D_801779C0 = player->unk_138 + (D_80177D20 - 1.0f);
+ Math_SmoothStepToF(&player->camEye.x, D_80177978, player->unk_014, 1000.0f, 0);
+ Math_SmoothStepToF(&player->camEye.y, D_80177980, player->unk_014, 1000.0f, 0);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, 0.2f, 30.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.x, D_801779A0, player->unk_014, 1000.0f, 0);
+ Math_SmoothStepToF(&player->camAt.y, D_801779B8, player->unk_014, 1000.0f, 0);
+ Math_SmoothStepToF(&player->camAt.z, D_801779C0, player->unk_014, 1000.0f, 0);
+ Math_SmoothStepToF(&player->unk_014, 1.0f, 1.0f, 0.05f, 0.0f);
+ temp = -player->unk_0EC;
+ Math_SmoothStepToF(&player->unk_034, temp * 0.3f, 0.1f, 1.5f, 0.0f);
+}
+
+void func_i3_801AACF8(Player* player) {
+ Vec3f sp8C;
+ Vec3f sp80;
+ Vec3f sp74;
+ Vec3f sp68;
+ f32 sp64;
+ f32 sp60;
+ f32 sp5C;
+ f32 sp58;
+ f32 var_fa0;
+ f32 var_fa1;
+ f32 var_fv1_2;
+ s32 pad;
+
+ func_i3_801AA4BC(player);
+ func_i3_801A99D4(player);
+ func_i3_801A8E30();
+ sp64 = -gInputPress->stick_x;
+ sp5C = gInputPress->stick_y;
+ D_80177970 = 0.68f;
+ Math_SmoothStepToF(&player->unk_180, sp64 * D_80177970, 1.0f, 10.0f, 0.0001f);
+ var_fa0 = fabsf(player->unk_180 * 0.5f);
+ if (var_fa0 > 2.0f) {
+ var_fa0 = 2.0f;
+ }
+ if (player->unk_180 < 0.0f) {
+ if (D_i3_801C41B8[3] > player->unk_180) {
+ D_i3_801C41B8[3] -= var_fa0;
+ }
+ } else {
+ if (D_i3_801C41B8[3] < player->unk_180) {
+ D_i3_801C41B8[3] += var_fa0;
+ }
+ }
+ Math_SmoothStepToF(&D_i3_801C41B8[3], player->unk_180, 0.1f, 2.0f, 0.00001f);
+ sp60 = D_i3_801C41B8[3];
+ D_80177968 = 7.0f;
+ if ((player->pos.x < (-player->unk_09C + player->unk_0AC + 10.0f)) && (sp60 >= 20.0f)) {
+ D_80177968 = 2.0f;
+ Math_SmoothStepToF(&D_i3_801C41B8[9], 30.0f, 0.1f, 10.0f, 0.0001f);
+ }
+ if ((player->pos.x > (player->unk_09C + player->unk_0AC - 10.0f)) && (sp60 <= -20.0f)) {
+ D_80177968 = 2.0f;
+ Math_SmoothStepToF(&D_i3_801C41B8[9], -30.0f, 0.1f, 10.0f, 0.0001f);
+ }
+ Math_SmoothStepToF(&player->unk_0E8, sp60, 0.3f, D_80177968, 0.00001f);
+ if (D_80177968 != 2.0f) {
+ Math_SmoothStepToF(&D_i3_801C41B8[9], 0.0f, 0.1f, 20.0f, 0.0001f);
+ }
+ Math_SmoothStepToF(&player->unk_17C, sp5C * D_80177970, 1.0f, 7.0f, 0.0001f);
+ var_fa1 = fabsf(player->unk_17C * 0.05f);
+ if (var_fa1 > 2.0f) {
+ var_fa1 = 2.0f;
+ }
+ if (player->unk_17C * -1.0f < 0.0f) {
+ if (D_i3_801C41B8[4] > player->unk_17C) {
+ D_i3_801C41B8[4] -= var_fa1;
+ }
+ } else {
+ if (D_i3_801C41B8[4] < player->unk_17C) {
+ D_i3_801C41B8[4] += var_fa1;
+ }
+ }
+ Math_SmoothStepToF(&D_i3_801C41B8[4], player->unk_17C * -1.0f, 0.1f, 3.0f, 0.00001f);
+ sp58 = D_i3_801C41B8[4] * 0.8f;
+ D_80177968 = 10.0f;
+ if (player->pos.y < (gGroundLevel + 50.0f)) {
+ if (sp58 <= 0.0f) {
+ sp58 = 0.0f;
+ D_80177968 = 2.0f;
+ if (D_i3_801C4190[7] == 0) {
+ Audio_PlaySfx(0x9404028, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_i3_801C4190[7] = 1;
+ }
+ }
+ } else {
+ D_i3_801C4190[7] = 0;
+ }
+ if ((player->unk_0A0 - 50.0f) <= player->pos.y) {
+ if (sp58 >= 0.0f) {
+ Math_SmoothStepToF(&D_i3_801C41B8[10], 30.0f, 1.0f, 1.0f, 0.00001f);
+ }
+ } else {
+ Math_SmoothStepToF(&D_i3_801C41B8[10], 0.0f, 0.1f, 1.0f, 0.00001f);
+ }
+ Math_SmoothStepToF(&player->unk_0E4, sp58, 1.0f, D_80177968, 0.00001f);
+ var_fv1_2 = 2.0f;
+ if (sp64 == 0.0f) {
+ var_fv1_2 = 1.0f;
+ }
+ Math_SmoothStepToF(&player->unk_0EC, player->unk_180 * 0.7f, 0.08f, var_fv1_2, 0.0001f);
+ player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
+ Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, -((player->unk_120 + player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
+ sp8C.x = sp8C.y = 0.0f;
+ sp8C.z = player->unk_0D0;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp8C, &sp68);
+ sp68.x *= 1.4f;
+ sp68.y *= 1.4f;
+ Matrix_RotateY(gCalcMatrix, player->unk_114 * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, player->unk_120 * M_DTOR, 1);
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp68, &sp80);
+ sp8C.x = sp8C.y = 0.0f;
+ sp8C.z = -player->unk_110;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp8C, &sp74);
+ player->vel.x = (sp80.x + sp74.x) * player->unk_150;
+ player->vel.y = (sp80.y + sp74.y) * player->unk_150;
+ player->vel.z = sp80.z + sp74.z;
+ player->pos.x += player->vel.x;
+ if (player->pos.x > player->unk_09C + player->unk_0AC) {
+ player->pos.x = player->unk_09C + player->unk_0AC;
+ player->vel.x = 0.0f;
+ }
+ if (player->pos.x < player->unk_0AC - player->unk_09C) {
+ player->pos.x = player->unk_0AC - player->unk_09C;
+ player->vel.x = 0.0f;
+ }
+ player->pos.y += player->vel.y;
+ if (player->pos.y > player->unk_0A0) {
+ player->pos.y = player->unk_0A0;
+ player->vel.y = 0.0f;
+ }
+ if (player->pos.y < player->unk_0A4) {
+ player->pos.y = player->unk_0A4;
+ player->vel.y = 0.0f;
+ }
+ if (player->pos.x > (player->unk_0AC + (player->unk_09C - 100.0f))) {
+ player->unk_228 = 1;
+ }
+ if (player->pos.x < (player->unk_0AC - (player->unk_09C - 100.0f))) {
+ player->unk_228 = 2;
+ }
+ if (player->pos.y > (player->unk_0B0 + (player->unk_0A0 - 100.0f))) {
+ player->unk_228 = 8;
+ }
+ if (player->pos.y <= (gGroundLevel + 100)) {
+ player->unk_228 = 4;
+ }
+ if (D_i3_801C4190[6] != 0) {
+ player->unk_0D0 = 20.0f;
+ Math_SmoothStepToF(&D_i3_801BFB60, -40.0f, 0.01f, 0.1f, 0.0f);
+ player->vel.z += D_i3_801BFB60;
+ if (player->vel.z <= 0.0f) {
+ player->vel.z = 0.0f;
+ }
+ }
+ player->pos.z += player->vel.z;
+ player->unk_138 = player->pos.z;
+ player->unk_060 = SIN_DEG(player->unk_0F4 * 0.7f) * 0.5f;
+ player->unk_088 += 10.0f;
+ player->unk_0F4 += 8.0f + D_i3_801C41B8[24];
+ player->unk_080 = -SIN_DEG(player->unk_088) * 0.5f;
+ player->unk_0F0 = SIN_DEG(player->unk_0F4) * 1.5f;
+ if (player->pos.y < (D_80177CC0 + 50.0f)) {
+ Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + player->unk_114) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 1);
+ sp8C.x = sp8C.y = 0.0f;
+ sp8C.z = 70.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp8C, &sp80);
+ if (player->unk_110 > 1.0f) {
+ player->unk_178 -= 30.0f;
+ func_i3_801AC8A8(player->pos.x + RAND_FLOAT_CENTERED(10.0f) + sp80.x,
+ player->pos.y + RAND_FLOAT_CENTERED(10.0f) + sp80.y,
+ player->unk_138 + RAND_FLOAT_CENTERED(10.0f) + (sp80.z * -1.0f), 0.4f, 1);
+ } else {
+ player->unk_178 -= 10.0f;
+ if (!(gGameFrameCount & 7)) {
+ func_i3_801AC8A8(player->pos.x + RAND_FLOAT_CENTERED(10.0f) + sp80.x,
+ player->pos.y + RAND_FLOAT_CENTERED(10.0f) + sp80.y,
+ player->unk_138 + RAND_FLOAT_CENTERED(20.0f) + sp80.z, 0.4f, 0);
+ }
+ }
+ }
+}
+
+void func_i3_801AB9B0(Player* player) {
+ func_8007D0E0(player->pos.x, player->pos.y, player->unk_138, 6.0f);
+ func_8007B344(player->pos.x, player->pos.y, player->unk_138, 3.0f, 5);
+ func_8007BFFC(player->pos.x, player->pos.y, player->unk_138, 0.0f, 0.0f, 0.0f, 3.0f, 80);
+ func_8004D440(player);
+}
+
+void func_i3_801ABA40(PlayerShot* shot) {
+ f32 sp7C;
+ f32 sp78;
+ f32 sp74;
+ f32 sp70;
+ f32 sp6C;
+ Vec3f sp60;
+ Vec3f sp54;
+
+ D_i3_801C41B8[21] = shot->obj.pos.x;
+ D_i3_801C41B8[22] = shot->obj.pos.y;
+ D_i3_801C41B8[23] = shot->obj.pos.z;
+ if ((fabsf(shot->obj.pos.z - (gPlayer[0].camEye.z - D_80177D20)) > 10000.0f) ||
+ (fabsf(shot->obj.pos.y - gPlayer[0].camEye.y) > 1500.0f) ||
+ ((fabsf(shot->obj.pos.x - gPlayer[0].camEye.x) > 4000.0f) && (shot->unk_5C != 0))) {
+ shot->unk_64 = 0;
+ }
+ if (shot->obj.pos.y < gGroundLevel) {
+ shot->obj.pos.y = gGroundLevel + 2.0f;
+ func_800365E4(shot->obj.pos.x, shot->obj.pos.y, shot->obj.pos.z, 0.0f, 0.0f, 0.0f, 0.0f, 90.0f, 2.0f, 0, 0);
+ func_8007CF30(shot->obj.pos.x, shot->obj.pos.y, shot->obj.pos.z, 1.2f);
+ D_i3_801C4190[5] = D_i3_801C4190[3] = 0;
+ func_80036318(shot);
+ } else if (((shot->unk_64 == 0) || (D_i3_801C4454 == 0)) && (shot->unk_5C != 0)) {
+ func_8007CF30(shot->obj.pos.x, shot->obj.pos.y, shot->obj.pos.z, 1.2f);
+ D_i3_801C41B8[21] = D_i3_801C41B8[22] = D_i3_801C41B8[23] = 0.0f;
+ D_i3_801C4190[5] = D_i3_801C4190[3] = 0;
+ func_80036318(shot);
+ } else {
+ Math_SmoothStepToF(&shot->unk_48, 50.0f, 0.2f, 10.0f, 0.00001f);
+ shot->obj.rot.z += shot->unk_48;
+ if (!(gGameFrameCount & 1)) {
+ func_80035DEC(shot->obj.pos.x, shot->obj.pos.y, shot->obj.pos.z);
+ }
+ func_80038140(shot);
+ shot->unk_2C = (shot->obj.pos.y * 0.01f) + 1.2f;
+ shot->unk_30 = (shot->obj.pos.y * 0.003f) + 0.6f;
+ shot->unk_34 = (shot->obj.pos.y * 0.001f) + 0.6f;
+ shot->unk_58 = (shot->obj.pos.y * -0.24f) + 150.0f;
+ if (shot->unk_58 < 30) {
+ shot->unk_58 = 30;
+ }
+ switch (shot->unk_5C) {
+ case 0:
+ shot->unk_64 = 50;
+ shot->obj.rot.y = gPlayer[0].unk_0E8;
+ shot->obj.rot.x = gPlayer[0].unk_0E4;
+ shot->unk_5C++;
+ break;
+ case 1:
+ if (D_i3_801C4190[3] != 0) {
+ sp7C = shot->obj.pos.x - D_i3_801C41B8[0];
+ sp78 = shot->obj.pos.y - D_i3_801C41B8[1];
+ sp74 = shot->obj.pos.z - D_i3_801C41B8[2];
+ sp6C = Math_RadToDeg(Math_Atan2F(sp7C, sp74));
+ sp70 = Math_RadToDeg(-Math_Atan2F(sp78, sqrtf(SQ(sp7C) + SQ(sp74))));
+ Math_SmoothStepToAngle(&shot->obj.rot.y, sp6C, 1.0f, 100.0f, 0.00001f);
+ Math_SmoothStepToAngle(&shot->obj.rot.x, sp70, 1.0f, 100.0f, 0.00001f);
+ if (shot->unk_64 < 2) {
+ if (D_i3_801C4458 < -30.0f) {
+ D_i3_801C4458 += 20.0f;
+ }
+ if (D_i3_801C445C < 1.0f) {
+ D_i3_801C445C += 0.25f;
+ }
+ shot->unk_64 = 10;
+ }
+ }
+ if (shot->unk_54 == 0) {
+ shot->unk_54 = -30.0f;
+ }
+ if (!(gGameFrameCount & 3)) {
+ Math_SmoothStepToF(&shot->unk_54, D_i3_801C4458, 0.1f, 50.0f, 0.0001f);
+ }
+ Matrix_RotateY(gCalcMatrix, shot->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, shot->obj.rot.x * M_DTOR, 1);
+ sp60.x = sp60.y = 0.0f;
+ sp60.z = shot->unk_54;
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp54);
+ shot->vel.x = sp54.x;
+ shot->vel.y = sp54.y;
+ shot->vel.z = sp54.z;
+ if ((shot->obj.pos.y < (gGroundLevel + 30.0f)) && (shot->vel.y < 0.0f) && (D_i3_801C4190[3] != 0)) {
+ shot->vel.y = 0.0f;
+ }
+ break;
+ }
+ if (D_i3_801C4454 < 297) {
+ D_80178370 = shot->obj.pos.x;
+ D_80178374 = shot->obj.pos.y;
+ D_80178378 = shot->obj.pos.z;
+ D_80178360 = 255;
+ D_80178364 = 200;
+ D_80178368 = 150;
+ Math_SmoothStepToF(&D_8017836C, 0.8f, 1.0f, 0.08f, 0.001f);
+ }
+ if (D_i3_801C4454 != 0) {
+ D_i3_801C4454--;
+ }
+ }
+}
+
+void func_i3_801AC09C(Player* player) {
+ s32 i;
+ PlayerShot* shot;
+
+ for (i = 15, shot = &gPlayerShots[15]; i < 16; i++, shot++) {
+ if (shot->obj.status == OBJ_FREE) {
+ func_800AC290(player, shot, 0.0f, 0.0f, PLAYERSHOT_8, 50.0f);
+ Audio_PlaySfx(0x1000025, shot->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_i3_801C4190[5] = i + 1;
+ D_i3_801C4454 = 300;
+ D_i3_801C4458 = -100.0f;
+ D_i3_801C445C = 0.1f;
+ D_8017836C = 1.0f;
+ break;
+ }
+ }
+}
+
+void func_i3_801AC18C(Player* player) {
+ s32 i;
+
+ for (i = 0; i < 3; i++) {
+ if (gPlayerShots[i].obj.status == OBJ_FREE) {
+ func_800AC290(player, &gPlayerShots[i], 0.0f, -10.0f, PLAYERSHOT_0, 120.0f);
+ if (gLaserStrength[gPlayerNum] == LASERS_SINGLE) {
+ Audio_PlaySfx(0x9400021, gPlayerShots[i].sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else {
+ Audio_PlaySfx(0x9400027, gPlayerShots[i].sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ break;
+ }
+ }
+}
+
+void func_i3_801AC274(Player* player) {
+ s32 temp;
+ s32 i;
+ f32 tempy1;
+ f32 tempy2;
+ f32 tempx1;
+ f32 tempx2;
+ s32 var_v1;
+ Vec3f sp68;
+ Vec3f sp5C;
+ Actor* actor;
+
+ if ((gPlayerShots[D_i3_801C4190[5] - 1].obj.status == OBJ_FREE) && (D_i3_801C4190[5] != 0)) {
+ D_i3_801C41B8[21] = D_i3_801C41B8[22] = D_i3_801C41B8[23] = 0.0f;
+ D_i3_801C4190[5] = D_i3_801C4190[3] = 0;
+ }
+ Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + player->unk_114) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 1);
+ sp68.x = 0.0f;
+ sp68.y = 0.0f;
+ sp68.z = -1200.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp68, &sp5C);
+ D_i3_801C41B8[6] = player->pos.x + sp5C.x;
+ D_i3_801C41B8[7] = player->pos.y + sp5C.y;
+ D_i3_801C41B8[8] = player->unk_138 + sp5C.z;
+ if (D_i3_801C4190[3] == 0) {
+
+ if (D_i3_801C4190[0] == 0) {
+ D_i3_801C41B8[0] = player->pos.x + sp5C.x;
+ D_i3_801C41B8[1] = player->pos.y + sp5C.y;
+ D_i3_801C41B8[2] = player->unk_138 + sp5C.z;
+ D_i3_801C41B8[5] = 3.0f;
+ }
+ D_i3_801C41B8[11] = 10000.0f;
+ temp = D_i3_801C4190[0];
+ for (i = 0, actor = gActors; i < 60; i++, actor++) {
+ if ((actor->obj.status == OBJ_ACTIVE) && (actor->obj.id != OBJ_ACTOR_189)) {
+ var_v1 = 1;
+ if (actor->info.hitbox[1] == HITBOX_UNK_2) {
+ var_v1 = 5;
+ }
+ tempy1 = actor->obj.pos.y + actor->info.hitbox[var_v1 + 2] + actor->info.hitbox[var_v1 + 3] + 200.0f;
+ tempy2 = actor->obj.pos.y + actor->info.hitbox[var_v1 + 2] - actor->info.hitbox[var_v1 + 3] - 200.0f;
+ tempx1 = actor->obj.pos.x + actor->info.hitbox[var_v1 + 4] + actor->info.hitbox[var_v1 + 5] + 200.0f;
+ tempx2 = actor->obj.pos.x + actor->info.hitbox[var_v1 + 4] - actor->info.hitbox[var_v1 + 5] - 200.0f;
+ if ((actor->health > 0) && (actor->timer_0C2 < 5) && (actor->obj.pos.z <= (player->unk_138 - 300.0f)) &&
+ ((player->unk_138 - 7000.0f) <= actor->obj.pos.z) && (player->pos.y + sp5C.y <= tempy1) &&
+ (tempy2 <= player->pos.y + sp5C.y) && (player->pos.x + sp5C.x <= tempx1) &&
+ (tempx2 <= player->pos.x + sp5C.x) &&
+ (fabsf(player->unk_138 - actor->obj.pos.z - actor->info.hitbox[var_v1 + 0]) < D_i3_801C41B8[11])) {
+ D_i3_801C41B8[11] = fabsf(player->unk_138 - actor->obj.pos.z - actor->info.hitbox[var_v1 + 0]);
+ D_i3_801C4190[0] = actor->index + 1;
+ D_i3_801C4190[1] = actor->obj.id;
+ }
+ }
+ }
+
+ if ((D_i3_801C4190[0] != temp) && (D_i3_801C41B8[5] == 3.0f)) {
+ Audio_PlaySfx(0x4900001B, D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_i3_801C41B8[5] = 20.0f;
+ }
+ if (D_i3_801C4190[0] != 0) {
+ func_i3_801A9C98(player);
+ }
+ if (gBosses[0].health != 0) {
+ func_i3_801A9ED0(player);
+ }
+ } else {
+ func_i3_801A9C98(player);
+ func_i3_801A9DE4(player);
+ }
+ if (gInputPress->button & A_BUTTON) {
+ func_i3_801AC18C(player);
+ }
+ if (gInputPress->button & B_BUTTON) {
+ func_i3_801AC09C(player);
+ if (D_i3_801C4190[0] != 0) {
+ D_i3_801C4190[3] = 1;
+ }
+ }
+ if (D_i3_801C4190[5] == 0) {
+ D_80178370 = player->pos.x;
+ D_80178374 = player->pos.y - 5.0f;
+ D_80178378 = player->unk_138 - 60.0f;
+
+ D_80178360 += 4;
+ D_80178364 += 3;
+ D_80178368 += 2;
+ if (D_80178360 >= 255) {
+ D_80178360 = 255;
+ }
+ if (D_80178364 > 200) {
+ D_80178364 = 200;
+ }
+ if (D_80178368 > 150) {
+ D_80178368 = 150;
+ }
+ Math_SmoothStepToF(&D_8017836C, 0.2f, 1.0f, 0.04f, 0.001f);
+ }
+}
+
+void func_i3_801AC7C8(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 state) {
+ Effect_Initialize(effect);
+ effect->obj.status = OBJ_INIT;
+ effect->obj.id = OBJ_EFFECT_366;
+ effect->obj.pos.x = xPos;
+ effect->obj.pos.y = yPos;
+ effect->obj.pos.z = zPos;
+ effect->scale1 = RAND_FLOAT(360.0f);
+ effect->state = state;
+ effect->unk_4A = 40;
+ effect->scale2 = scale2 * 0.2f;
+ effect->unk_46 = 50;
+ effect->unk_60.y = gPlayer[0].unk_0E8 + gPlayer[0].unk_114;
+ if (effect->state == 2) {
+ effect->unk_46 = 100;
+ }
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i3_801AC8A8(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 unk4E) {
+ s32 i;
+
+ for (i = 0; i < 95; i++) {
+ if (gEffects[i].obj.status == OBJ_FREE) {
+ func_i3_801AC7C8(&gEffects[i], xPos, yPos, zPos, scale2, unk4E);
+ break;
+ }
+ }
+}
+
+// OBJ_EFFECT_366 action
+void func_i3_801AC918(Effect* effect) {
+ f32 temp_fs0;
+
+ if (effect->unk_46 != 0) {
+ effect->unk_46--;
+ }
+ switch (effect->state) {
+ case 0:
+ if (effect->vel.y < 5.0f) {
+ effect->vel.y += 0.1f;
+ }
+ if (effect->unk_46 == 0) {
+ Object_Kill(&effect->obj, effect->sfxPos);
+ }
+ effect->scale1 += 33.0f;
+ temp_fs0 = COS_DEG(effect->scale1) * 1.5f;
+ effect->vel.x = __cosf(gPlayer[0].unk_058) * temp_fs0;
+ effect->vel.z = __sinf(gPlayer[0].unk_058) * temp_fs0;
+ break;
+ case 1:
+ if (effect->unk_46 == 0) {
+ Object_Kill(&effect->obj, effect->sfxPos);
+ }
+ effect->unk_60.x += 0.07f;
+ effect->scale1 += 33.0f;
+
+ effect->vel.y = effect->unk_60.x + (SIN_DEG(effect->scale1) * 3.0f);
+ temp_fs0 = COS_DEG(effect->scale1) * 3.0f;
+ effect->vel.x = COS_DEG(effect->unk_60.y) * temp_fs0;
+ effect->vel.z = -SIN_DEG(effect->unk_60.y) * temp_fs0;
+ break;
+ case 2:
+ if (effect->vel.y < 10.0f) {
+ effect->vel.y += 0.2f;
+ }
+ if (effect->unk_46 == 0) {
+ Object_Kill(&effect->obj, effect->sfxPos);
+ }
+ effect->scale1 += 55.0f;
+ temp_fs0 = COS_DEG(effect->scale1) * 2.5f;
+ effect->vel.x = __cosf(gPlayer[0].unk_058) * temp_fs0;
+ effect->vel.z = __sinf(gPlayer[0].unk_058) * temp_fs0;
+ break;
+ }
+}
+
+void func_i3_801ACBB4(Player* player) {
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -40.0f, 1);
+ Matrix_RotateY(gGfxMatrix, M_PI, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_3000C70);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, -4.5f, 1.2f, 1);
+ Matrix_RotateZ(gGfxMatrix, player->unk_178 * M_DTOR, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_3006DE0);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, 2.0f, 40.0f, 1);
+ Matrix_RotateY(gGfxMatrix, -player->unk_180 * M_DTOR, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_3006C70);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, -19.0f, -3.6f, 1.2f, 1);
+ Matrix_RotateX(gGfxMatrix, player->unk_17C * M_DTOR, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_3000AF0);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 19.0f, -3.6f, 1.2f, 1);
+ Matrix_RotateX(gGfxMatrix, player->unk_17C * M_DTOR, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_3006AF0);
+ Matrix_Pop(&gGfxMatrix);
+}
+
+void func_i3_801ACE50(Player* player) {
+ f32 pad;
+ f32 pad2;
+ Vec3f sp54;
+ Vec3f sp48;
+
+ player->boost = 0;
+ if (player->timer_27C != 0) {
+ player->timer_27C--;
+ player->unk_110 += 0.3f;
+ Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + player->unk_114) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 1);
+ sp54.x = sp54.y = 0.0f;
+ sp54.z = 70.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp54, &sp48);
+ func_i3_801AC8A8(player->pos.x + RAND_FLOAT_CENTERED(10.0f) + sp48.x,
+ player->pos.y + RAND_FLOAT_CENTERED(10.0f) + sp48.y,
+ player->unk_138 + RAND_FLOAT_CENTERED(10.0f) + (sp48.z * -1.0f), 0.4f, 1);
+ Math_SmoothStepToF(&player->unk_08C, -130.0f, 0.1f, 10.0f, 0.00001f);
+ player->unk_130 -= player->unk_258;
+ player->unk_258 += 0.2f;
+ if (player->unk_258 > 50.0f) {
+ player->unk_258 = 50.0f;
+ }
+ if (!(gGameFrameCount & 1) && (gBlurAlpha > 64)) {
+ gBlurAlpha -= 1;
+ }
+ } else {
+ player->unk_258 = 0.0f;
+ if (gBlurAlpha < 255) {
+ gBlurAlpha += 4;
+ if (gBlurAlpha >= 252) {
+ gBlurAlpha = 255;
+ }
+ }
+ if (!(gBrakeButton[player->num] & gInputHold->button) && !(gBoostButton[player->num] & gInputHold->button)) {
+ player->unk_2B4 = 1;
+ if (player->unk_2BC == 0.0f) {
+ player->unk_2B4 = 0;
+ }
+ }
+ if ((gBoostButton[player->num] & gInputHold->button) && (player->unk_230 == 0) &&
+ (player->state_1C8 != PLAYERSTATE_1C8_5) && (player->unk_2B4 == 0)) {
+ if (player->unk_2BC == 0) {
+ Audio_PlaySfx(0x9004030, player->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ player->unk_2BC += 3.0f;
+ if (player->unk_2BC > 90.0f) {
+ player->unk_2BC = 90.0f;
+ player->unk_2B4 = 1;
+ }
+ player->unk_110 += 2.0f;
+ if (player->unk_110 > 10.0f) {
+ player->unk_110 = 10.0f;
+ }
+ Math_SmoothStepToF(&D_i3_801C41B8[27], 10.0f, 0.1f, 2.0f, 0.00001f);
+ Math_SmoothStepToF(&player->unk_08C, -200.0f, 0.1f, D_i3_801C41B8[27], 0.00001f);
+ player->boost = 1;
+ Math_SmoothStepToF(&D_801779A8[0], 50.0f, 1.0f, 10.0f, 0.0f);
+ } else {
+ D_i3_801C41B8[27] = 0.0f;
+ if (player->unk_2BC > 0.0f) {
+ player->unk_2BC -= 0.50f;
+ if (player->unk_2BC <= 0.0f) {
+ player->unk_2BC = 0.0f;
+ player->unk_2B4 = 0;
+ }
+ }
+ if (player->unk_110 > 0.0f) {
+ player->unk_110 -= 1.0f;
+ if (player->unk_110 < 0.0f) {
+ player->unk_110 = 0.0f;
+ }
+ }
+ }
+ }
+ Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.1f, 2.0f, 0.0f);
+}
+
+void func_i3_801AD328(Player* player) {
+ player->brake = 0;
+ if ((gBrakeButton[player->num] & gInputHold->button) && (player->unk_230 == 0) &&
+ (player->state_1C8 != PLAYERSTATE_1C8_5) && (player->unk_2B4 == 0)) {
+ if (player->unk_2BC == 0) {
+ Audio_PlaySfx(0x9004031, player->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ player->unk_2BC += 3.0f;
+ if (player->unk_2BC > 90.0f) {
+ player->unk_2BC = 90.0f;
+ player->unk_2B4 = 1;
+ }
+ player->unk_110 -= 1.0f;
+ if (player->unk_110 < -20.0f) {
+ player->unk_110 = -20.0f;
+ }
+ Math_SmoothStepToF(&D_i3_801C41B8[28], 10.0f, 1.0f, 2.0f, 0.00001f);
+ Math_SmoothStepToF(&player->unk_08C, 180.0f, 0.1f, D_i3_801C41B8[28], 0.0f);
+ player->brake = 1;
+ Math_SmoothStepToF(&D_801779A8[0], 25.0f, 1.0f, 5.0f, 0.0f);
+ } else {
+ if (player->unk_2BC > 0.0f) {
+ player->unk_2BC -= 0.5f;
+ if (player->unk_2BC <= 0.0f) {
+ player->unk_2BC = 0.0f;
+ player->unk_2B4 = 0;
+ D_i3_801C41B8[28] = 0.0f;
+ }
+ Math_SmoothStepToF(&D_i3_801C41B8[28], 0.0f, 1.0f, 1.0f, 0.0001f);
+ if (player->unk_110 < 0.0f) {
+ player->unk_110 += 0.5f;
+ if (player->unk_110 > 0.0f) {
+ player->unk_110 = 0.0f;
+ }
+ }
+ }
+ }
+ Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.1f, 2.0f, 0.0f);
+}
+
+void func_i3_801AD598(Actor* actor) {
+ s32 i;
+
+ D_i3_801C27C0 = &D_i3_801C27C8[50 * actor->iwork[0]];
+ for (i = 50 * actor->iwork[0]; i < 50 * actor->iwork[0] + 50; i++, D_i3_801C27C0++) {
+ D_i3_801C27C0->pos.x = actor->obj.pos.x;
+ D_i3_801C27C0->pos.y = actor->obj.pos.y;
+ D_i3_801C27C0->pos.z = actor->obj.pos.z;
+ D_i3_801C27C0->rot.x = actor->obj.rot.x;
+ D_i3_801C27C0->rot.y = actor->obj.rot.y;
+ D_i3_801C27C0->rot.z = actor->obj.rot.z;
+ D_i3_801C27C0->rot.x = actor->unk_0F4.x;
+ D_i3_801C27C0->rot.y = actor->unk_0F4.y;
+ D_i3_801C27C0->rot.z = actor->unk_0F4.z;
+ }
+}
+
+void func_i3_801AD688(Actor* actor) {
+ func_i3_801AD598(actor);
+ actor->iwork[1] = 10;
+ actor->scale = 1.0f;
+}
+
+// OBJ_ACTOR_255 action
+void func_i3_801AD6C0(Actor* actor) {
+ s32 var_v0;
+ f32 sp80;
+ f32 sp7C;
+ f32 sp78;
+ f32 sp74;
+ f32 sp70;
+ f32 sp6C;
+ f32 sp68;
+ Vec3f sp5C;
+ Vec3f sp50;
+ Vec3f sp44;
+
+ var_v0 = actor->iwork[2] - 1;
+ if ((D_i3_801C42A0[23] == 0) || (gActors[var_v0].state >= 4)) {
+ actor->timer_0C2 = 30000;
+ actor->state = 2;
+ actor->vel.y = 0.0f;
+ actor->vel.x = 0.0f;
+ actor->vel.z = 0.0f;
+ }
+ if ((gPlayer[0].unk_138 + 500.0f) <= actor->obj.pos.z) {
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ actor->unk_04E++;
+ if (actor->unk_04E >= 50) {
+ actor->unk_04E = 0;
+ }
+ switch (actor->state) {
+ case 0:
+ if (actor->timer_0BC != 0) {
+ actor->unk_0F4.x += D_i3_801C4308[10];
+ actor->unk_0F4.z += 10.0f;
+ actor->unk_0F4.z = Math_ModF(actor->unk_0F4.z, 360.0f);
+ } else {
+ actor->health = 30;
+ Audio_PlaySfx(0x31000047, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ actor->state++;
+ }
+ break;
+ case 1:
+ if (actor->unk_0D0 != 0) {
+ if (actor->health > 0) {
+ actor->unk_0D0 = 0;
+ actor->timer_0C6 = 15;
+ actor->health -= actor->damage;
+ Audio_PlaySfx(0x29034045, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (actor->health <= 0) {
+ actor->timer_0C2 = 30000;
+ actor->state = 2;
+ actor->vel.y = 0.0f;
+ actor->vel.x = 0.0f;
+ actor->vel.z = 0.0f;
+ Audio_PlaySfx(0x2902A046, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+ }
+ if (actor->obj.pos.z <= (gPlayer[0].unk_138 - 200.0f)) {
+ actor->fwork[7] = sp80 = gPlayer[0].pos.x + RAND_FLOAT_CENTERED(100.0f) - actor->obj.pos.x;
+ actor->fwork[8] = sp7C = gPlayer[0].pos.y - 30.0f - actor->obj.pos.y;
+ actor->fwork[9] = sp78 = gPlayer[0].unk_138 - actor->obj.pos.z;
+ } else {
+ sp80 = actor->fwork[7];
+ sp7C = actor->fwork[8];
+ sp78 = actor->fwork[9] + 600.0f;
+ }
+ Math_RadToDeg(Math_Atan2F(sp80, sp78));
+ sp70 = sqrtf(SQ(sp80) + SQ(sp78));
+ Math_RadToDeg(-Math_Atan2F(sp7C, sp70));
+ actor->fwork[0] += (actor->iwork[0] + 1) * 5.0f;
+ actor->fwork[1] += 10.0f + (actor->iwork[0] + 1) * 5.0f;
+ actor->fwork[5] = (actor->iwork[0] + 1) * 0.2f;
+ actor->fwork[6] = (actor->iwork[0] + 1) * 0.2f;
+ sp7C = SIN_DEG(actor->fwork[0]) * sp70 * actor->fwork[5];
+ sp74 = COS_DEG(actor->fwork[1]) * sp70 * actor->fwork[6];
+ sp80 = COS_DEG(actor->unk_0F4.y) * sp74;
+ sp78 = -SIN_DEG(actor->unk_0F4.y) * sp74;
+ if (sp7C < 20.0f) {
+ sp7C = 20.0f;
+ }
+ if ((Rand_ZeroOne() < 0.7) && (actor->obj.rot.z == 0.0f)) {
+ actor->fwork[2] = 360.0f;
+ }
+ Math_SmoothStepToF(&actor->unk_0F4.z, actor->fwork[2], 0.1f, 10.0f, 0.001f);
+ if (actor->unk_0F4.z >= 360.0f) {
+ actor->unk_0F4.z = 0.0f;
+ actor->fwork[2] = 0.0f;
+ }
+ sp68 = Math_RadToDeg(Math_Atan2F(gPlayer[0].pos.x + sp80 + RAND_FLOAT_CENTERED(200.0f) - actor->obj.pos.x,
+ gPlayer[0].unk_138 + sp78 - actor->obj.pos.z));
+ sp6C = Math_RadToDeg(-Math_Atan2F(gPlayer[0].pos.y - 30.0f + sp7C - actor->obj.pos.y, sp70));
+ if (gPlayer[0].unk_138 <= actor->obj.pos.z) {
+ sp68 = actor->unk_0F4.y;
+ sp6C = actor->unk_0F4.x;
+ }
+ Math_SmoothStepToAngle(&actor->unk_0F4.y, sp68, 1.0f, 5.0f, 0.001f);
+ Math_SmoothStepToAngle(&actor->unk_0F4.x, sp6C, 1.0f, 5.0f, 0.001f);
+ Matrix_RotateY(gCalcMatrix, actor->unk_0F4.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->unk_0F4.x * M_DTOR, 1);
+ sp5C.x = 0.0f;
+ sp5C.y = 0.0f;
+ sp5C.z = 40.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp5C, &sp50);
+ sp5C.z = 10.0f + (actor->iwork[0] + 1) * RAND_FLOAT(10.0f);
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp5C, &sp44);
+ actor->vel.x = sp50.x;
+ actor->vel.y = sp50.y;
+ actor->vel.z = sp44.z;
+ break;
+ case 2:
+ if (actor->timer_0C6 == 0) {
+ actor->timer_0C6 = 15;
+ }
+ if (actor->timer_0BC == 0) {
+ var_v0 = actor->iwork[0] * 50 + actor->unk_04E - D_i3_801BFB64[actor->iwork[1]];
+ if (var_v0 < actor->iwork[0] * 50) {
+ if (var_v0 > 0) {
+ var_v0 -= actor->iwork[0] * 50;
+ }
+ var_v0 = var_v0 + (actor->iwork[0] + 1) * 50;
+ }
+ D_i3_801C27C0 = &D_i3_801C27C8[var_v0];
+ func_800815DC();
+ actor->iwork[1]--;
+ if (actor->iwork[1] <= 0) {
+ actor->unk_044 = 0;
+ actor->unk_0D4 = 2;
+ func_80066254(actor);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ actor->timer_0BC = 4;
+ func_8007D0E0(D_i3_801C27C0->pos.x, D_i3_801C27C0->pos.y, D_i3_801C27C0->pos.z, 3.0f);
+ Audio_PlaySfx(0x29018049, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ break;
+ }
+ D_i3_801C27C0 = &D_i3_801C27C8[50 * actor->iwork[0] + actor->unk_04E];
+ D_i3_801C27C0->pos.x = actor->obj.pos.x;
+ D_i3_801C27C0->pos.y = actor->obj.pos.y;
+ D_i3_801C27C0->pos.z = actor->obj.pos.z;
+ D_i3_801C27C0->rot.x = actor->unk_0F4.x;
+ D_i3_801C27C0->rot.y = actor->unk_0F4.y;
+ D_i3_801C27C0->rot.z = actor->unk_0F4.z;
+}
+
+void func_i3_801ADF7C(f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, u8 type, s32 flag, f32 scale,
+ s32 index) {
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, xPos, yPos, zPos + D_80177D20, 1);
+ Matrix_RotateY(gGfxMatrix, M_DTOR * yRot, 1);
+ Matrix_RotateX(gGfxMatrix, M_DTOR * xRot, 1);
+ Matrix_RotateZ(gGfxMatrix, M_DTOR * zRot, 1);
+ Graphics_SetScaleMtx(scale);
+ if (index < 2) {
+ if (!flag) {
+ RCP_SetupDL(&gMasterDisp, 0x39);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ } else {
+ if (!flag) {
+ RCP_SetupDL(&gMasterDisp, 0x39);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ }
+ gSPDisplayList(gMasterDisp++, D_i3_801BFB9C[type]);
+ Matrix_Pop(&gGfxMatrix);
+}
+
+// OBJ_ACTOR_255 draw
+#ifdef NON_MATCHING
+// float calculation acts oddly. seems to depend on how many references there are to static vars.
+void func_i3_801AE168(Actor* actor) {
+ f32 xz;
+ f32 yRot;
+ f32 xRot;
+ s32 i;
+ s32 index;
+
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+
+ for (i = 0; i <= actor->iwork[1]; i++) {
+ if ((actor->iwork[1] != 10) && (i == 0)) {
+ i = 1;
+ }
+ index = actor->iwork[0] * 50 + actor->unk_04E - D_i3_801BFB64[actor->iwork[1]];
+ if (index < actor->iwork[0] * 50) {
+ if (index > 0) {
+ index -= actor->iwork[0] * 50;
+ }
+ index = index + (actor->iwork[0] + 1) * 50;
+ }
+ D_i3_801C27C0 = &D_i3_801C27C8[index];
+ xRot = D_i3_801C27C0->rot.x;
+ yRot = D_i3_801C27C0->rot.y;
+ if (i >= 2) {
+ yRot = RAD_TO_DEG(Math_Atan2F(gPlayer[0].camEye.x - D_i3_801C27C0->pos.x,
+ gPlayer[0].camEye.z - (D_i3_801C27C0->pos.z + D_80177D20)));
+ xz = sqrtf(SQ(gPlayer[0].camEye.x - D_i3_801C27C0->pos.x) +
+ SQ(gPlayer[0].camEye.z - (D_i3_801C27C0->pos.z + D_80177D20)));
+ xRot = RAD_TO_DEG(-Math_Atan2F(gPlayer[0].camEye.y - D_i3_801C27C0->pos.y, xz));
+ }
+ func_i3_801ADF7C(D_i3_801C27C0->pos.x, D_i3_801C27C0->pos.y, D_i3_801C27C0->pos.z, xRot, yRot,
+ D_i3_801C27C0->rot.z, D_i3_801BFB90[i], actor->timer_0C6 & 1, actor->scale, i);
+ }
+}
+#else
+#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_aq/func_i3_801AE168.s")
+#endif
+
+void func_i3_801AE3AC(Actor* actor) {
+ actor->fwork[1] = 1.0f;
+ actor->obj.rot.x = 336.0f;
+ actor->scale = 0.5f;
+}
+
+// OBJ_ACTOR_256 action
+void func_i3_801AE3D8(Actor* actor) {
+ s32 i;
+
+ switch (actor->state) {
+ case 0:
+ actor->obj.pos.y = fabsf(D_i3_801C4308[10] * 15.0f) + 347.0f;
+ if (actor->obj.pos.y >= 757.0f) {
+ actor->obj.pos.y = 757.0f;
+ }
+ if (actor->obj.pos.y <= 347.0f) {
+ actor->obj.pos.y = 347.0f;
+ }
+ actor->scale = fabsf(D_i3_801C4308[10] / -28.0f) + 0.5f;
+ if (actor->scale > 1.3f) {
+ actor->scale = 1.3f;
+ }
+ if (actor->scale <= 0.5f) {
+ actor->scale = 0.5f;
+ }
+ if (gBosses[0].timer_052 == 0) {
+ actor->health = 0;
+ if (actor->info.hitbox[10] != 116.0f) {
+ actor->info.hitbox[10] = 116.0f;
+ }
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if ((fabsf(D_i3_801C4308[10]) >= 6.0f) && (gBosses[0].state >= 10) &&
+ (gBosses[0].swork[AQ_SWK_0] < 2)) {
+ actor->timer_0C6 = 30;
+ actor->iwork[1] = 0;
+ D_i3_801C4308[79] -= 5.0f;
+ Audio_PlaySfx(0x29036050, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (D_i3_801C4308[79] <= -28.0f) {
+ D_i3_801C4308[79] = -28.0f;
+ }
+ if (D_i3_801C4308[10] <= -23.0f) {
+ if (gBosses[0].timer_052 == 0) {
+ gBosses[0].timer_052 = 72;
+ actor->health = 10;
+ for (i = 0; i < 60; i++) {
+ if ((gActors[i].obj.id == OBJ_ACTOR_256) && (actor->index != gActors[i].index)) {
+ gActors[i].health = 10;
+ }
+ }
+ } else {
+ actor->iwork[1] = 0;
+ actor->timer_0C6 = 0;
+ }
+ if (gBosses[0].swork[AQ_SWK_0] == 0) {
+ gBosses[0].swork[AQ_SWK_0] = 1;
+ actor->info.hitbox[10] = 300.0f;
+ if (actor->iwork[23] == 0) {
+ Radio_PlayMessage(gMsg_ID_15120, RCID_SLIPPY);
+ }
+ actor->iwork[23]++;
+ actor->iwork[23] &= 1;
+ } else if (actor->damage == 31) {
+ actor->health -= actor->damage;
+ Radio_PlayMessage(gMsg_ID_15130, RCID_FALCO);
+ if (actor->health <= 0) {
+ gBosses[0].swork[AQ_SWK_0] = 2;
+ actor->health = 0;
+ actor->timer_0C6 = 300;
+ actor->fwork[2] = actor->scale;
+ Audio_PlaySfx(0x19000033, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ actor->state++;
+ }
+ }
+ }
+ }
+ }
+ break;
+ case 1:
+ if (!(gGameFrameCount & 1)) {
+ func_8007C120(actor->obj.pos.x, actor->fwork[0] + actor->obj.pos.y, actor->obj.pos.z, actor->vel.x,
+ actor->vel.y, actor->vel.z, 0.1f, 10);
+ func_8007C120(actor->obj.pos.x, actor->obj.pos.y + (actor->fwork[0] * -1.0f), actor->obj.pos.z + 200.0f,
+ actor->vel.x, actor->vel.y, actor->vel.z, 0.1f, 10);
+ actor->fwork[0] += 40.0f;
+ }
+ if ((actor->fwork[2] * 400.0f) <= actor->fwork[0]) {
+ actor->timer_0BC = 20;
+ actor->state++;
+ }
+ break;
+ case 2:
+ if (actor->timer_0BC == 0) {
+ for (i = 0; i < 6; i++) {
+ func_8007B8F8(actor->obj.pos.x, actor->obj.pos.y + 450.0f, actor->obj.pos.z + 50.0f, 50.0f);
+ func_8007B8F8(actor->obj.pos.x, actor->obj.pos.y - 420.0f, actor->obj.pos.z + 300.0f, 50.0f);
+ }
+ actor->fwork[3] = 0.7f;
+ actor->timer_0BC = 10;
+
+ actor->state++;
+ }
+ break;
+ case 3:
+ if (actor->timer_0BC == 0) {
+ Math_SmoothStepToF(&actor->fwork[3], 0.0f, 0.1f, 2.0f, 0);
+ Math_SmoothStepToF(&actor->scale, 0.0f, actor->fwork[3], 10.0f, 0);
+ if (actor->scale <= 0.2f) {
+ func_8007BC7C(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 50.0f);
+ func_8007BC7C(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 50.0f);
+ func_8007BC7C(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 50.0f);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ D_i3_801C42A0[23]--;
+ gBosses[0].swork[AQ_SWK_0] = 3;
+ gBosses[0].swork[AQ_SWK_19] = 30;
+ D_i3_801C4308[79] = 0.0f;
+ if (D_i3_801C42A0[23] == 0) {
+ D_i3_801C4308[79] = -180.0f;
+ for (i = 0; i < 60; i++) {
+ func_i3_801AC8A8(gBosses[0].obj.pos.x + RAND_FLOAT_CENTERED(1800.0f),
+ gBosses[0].obj.pos.y + 400.0f + RAND_FLOAT_CENTERED(1000.0f),
+ gBosses[0].obj.pos.z + 700.0f + RAND_FLOAT_CENTERED(1000.0f), 7.0f, 2);
+ }
+ gBosses[0].timer_052 = 0;
+ gBosses[0].timer_056 = 60;
+ gBosses[0].state = 14;
+ }
+ D_i3_801C4308[80] += D_i3_801BFBA8[actor->iwork[0]];
+ }
+ }
+ break;
+ }
+}
+
+// OBJ_ACTOR_256 draw
+void func_i3_801AEB44(Actor* actor) {
+ f32 var_fv0;
+ u8 var_t1;
+ u8 i;
+ Vtx* var_t5;
+ Vtx* temp_v1_2;
+
+ if ((actor->timer_0C6 != 0) && (actor->state == 0) && (D_80177854 != 100)) {
+ actor->iwork[1]++;
+ actor->iwork[1] %= 8;
+ }
+ temp_v1_2 = SEGMENTED_TO_VIRTUAL(D_6019078);
+ if (actor->iwork[1] < 4) {
+ var_t5 = SEGMENTED_TO_VIRTUAL(D_6018C78);
+ } else {
+ var_t5 = SEGMENTED_TO_VIRTUAL(D_6018878);
+ }
+ var_t1 = actor->iwork[1] % 4;
+ if (var_t1 >= 3) {
+ var_t1 = 4 - var_t1;
+ }
+ var_fv0 = actor->timer_0C6 / 60.0f;
+ if (var_fv0 < 0.1f) {
+ var_fv0 = 0.1f;
+ }
+ for (i = 0; i < 28; i += 1) {
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.ob[0] =
+ temp_v1_2[i].v.ob[0] + (s16) ((((var_t5[i].n.ob[0] - temp_v1_2[i].n.ob[0]) * var_t1) / 2) * var_fv0);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.ob[1] =
+ temp_v1_2[i].n.ob[1] + (((var_t5[i].n.ob[1] - temp_v1_2[i].n.ob[1]) * var_t1) / 2);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.ob[2] =
+ temp_v1_2[i].n.ob[2] + (((var_t5[i].n.ob[2] - temp_v1_2[i].n.ob[2]) * var_t1) / 2);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.flag = temp_v1_2[i].n.flag;
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.tc[0] =
+ temp_v1_2[i].n.tc[0] + (((var_t5[i].n.tc[0] - temp_v1_2[i].n.tc[0]) * var_t1) / 2);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.tc[1] =
+ temp_v1_2[i].n.tc[1] + (((var_t5[i].n.tc[1] - temp_v1_2[i].n.tc[1]) * var_t1) / 2);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.n[0] =
+ temp_v1_2[i].n.n[0] + (((var_t5[i].n.n[0] - temp_v1_2[i].n.n[0]) * var_t1) / 2);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.n[1] =
+ temp_v1_2[i].n.n[1] + (((var_t5[i].n.n[1] - temp_v1_2[i].n.n[1]) * var_t1) / 2);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.n[2] =
+ temp_v1_2[i].n.n[2] + (((var_t5[i].n.n[2] - temp_v1_2[i].n.n[2]) * var_t1) / 2);
+ D_i3_801C3A88[actor->iwork[0]][gSysFrameCount % 2][i].n.a = temp_v1_2[i].n.a;
+ }
+ Matrix_Scale(gGfxMatrix, actor->fwork[1] - 0.25f + ((1.5f - actor->scale) * 0.5f), actor->scale, actor->fwork[1],
+ 1);
+ if (actor->state != 0) {
+ RCP_SetupDL(&gMasterDisp, 0x20);
+ } else if (gBosses[0].swork[AQ_SWK_0] == 1) {
+ RCP_SetupDL(&gMasterDisp, 4);
+ } else if (!(actor->timer_0C6 & 1)) {
+ RCP_SetupDL(&gMasterDisp, 0x1D);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x16);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gDPSetTextureLUT(gMasterDisp++, G_TT_RGBA16);
+ gDPLoadTLUT_pal256(gMasterDisp++, D_6008FC8);
+ gDPLoadTextureBlock(gMasterDisp++, D_6008EC8, G_IM_FMT_CI, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD);
+ gSPVertex(gMasterDisp++, D_i3_801C3A88[actor->iwork[0]][gSysFrameCount & 1], 14, 0);
+ gSP1Triangle(gMasterDisp++, 0, 1, 2, 0);
+ gSP1Triangle(gMasterDisp++, 3, 1, 0, 0);
+ gSP1Triangle(gMasterDisp++, 4, 5, 0, 0);
+ gSP1Triangle(gMasterDisp++, 0, 6, 7, 0);
+ gSP1Triangle(gMasterDisp++, 2, 6, 0, 0);
+ gSP1Triangle(gMasterDisp++, 0, 5, 3, 0);
+ gSP1Triangle(gMasterDisp++, 0, 8, 4, 0);
+ gSP1Triangle(gMasterDisp++, 7, 8, 0, 0);
+ gSP1Triangle(gMasterDisp++, 9, 4, 8, 0);
+ gSP1Triangle(gMasterDisp++, 8, 7, 10, 0);
+ gSP1Triangle(gMasterDisp++, 8, 11, 9, 0);
+ gSP1Triangle(gMasterDisp++, 10, 11, 8, 0);
+ gSP1Triangle(gMasterDisp++, 12, 4, 9, 0);
+ gSP1Triangle(gMasterDisp++, 13, 5, 4, 0);
+ gSP1Triangle(gMasterDisp++, 4, 12, 13, 0);
+ gSP1Triangle(gMasterDisp++, 3, 5, 13, 0);
+ gSP1Triangle(gMasterDisp++, 13, 6, 2, 0);
+ gSP1Triangle(gMasterDisp++, 7, 6, 13, 0);
+ gSP1Triangle(gMasterDisp++, 13, 12, 7, 0);
+ gSP1Triangle(gMasterDisp++, 10, 7, 12, 0);
+ gSPVertex(gMasterDisp++, &D_i3_801C3A88[actor->iwork[0]][gSysFrameCount & 1][1], 3, 0);
+ gSPVertex(gMasterDisp++, &D_i3_801C3A88[actor->iwork[0]][gSysFrameCount & 1][9], 2, 3);
+ gSPVertex(gMasterDisp++, &D_i3_801C3A88[actor->iwork[0]][gSysFrameCount & 1][12], 8, 5);
+ gSP1Triangle(gMasterDisp++, 0, 2, 7, 0);
+ gSP1Triangle(gMasterDisp++, 7, 2, 8, 0);
+ gSP1Triangle(gMasterDisp++, 6, 8, 2, 0);
+ gSP1Triangle(gMasterDisp++, 8, 1, 9, 0);
+ gSP1Triangle(gMasterDisp++, 1, 8, 6, 0);
+ gSP1Triangle(gMasterDisp++, 5, 10, 4, 0);
+ gSP1Triangle(gMasterDisp++, 3, 10, 5, 0);
+ gSP1Triangle(gMasterDisp++, 8, 12, 7, 0);
+ gSP1Triangle(gMasterDisp++, 7, 11, 0, 0);
+ gSP1Triangle(gMasterDisp++, 0, 11, 9, 0);
+ gSP1Triangle(gMasterDisp++, 9, 1, 0, 0);
+ gSP1Triangle(gMasterDisp++, 9, 12, 8, 0);
+ gDPLoadTLUT_pal256(gMasterDisp++, D_6019338);
+ gDPLoadTextureBlock(gMasterDisp++, D_6019238, G_IM_FMT_CI, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD);
+ gSPVertex(gMasterDisp++, &D_i3_801C3A88[actor->iwork[0]][gSysFrameCount & 1][20], 8, 0);
+ gSP1Triangle(gMasterDisp++, 0, 1, 2, 0);
+ gSP1Triangle(gMasterDisp++, 2, 3, 0, 0);
+ gSP1Triangle(gMasterDisp++, 4, 5, 6, 0);
+ gSP1Triangle(gMasterDisp++, 6, 7, 4, 0);
+ gDPPipeSync(gMasterDisp++);
+ gDPSetTextureLUT(gMasterDisp++, G_TT_NONE);
+}
+
+void func_i3_801AF9FC(Actor* actor) {
+ s32 temp = actor->iwork[0];
+
+ actor->fwork[0] = actor->fwork[1] = actor->fwork[2] = 1.0f;
+ actor->obj.pos.x = D_i3_801C4308[1 + temp];
+ actor->obj.pos.y = D_i3_801C4308[4 + temp];
+ actor->obj.pos.z = D_i3_801C4308[7 + temp];
+ actor->obj.rot.x = D_i3_801BFBBC[temp] + D_i3_801C4308[10];
+}
+
+#ifdef NON_MATCHING
+// saved register use at start of case 3
+void func_i3_801AFA5C(Actor* actor) {
+ s32 i;
+ f32 sp70;
+ f32 sp6C;
+ f32 sp68;
+ f32 pad64;
+ Vec3f sp58;
+ Vec3f sp4C;
+ Actor* sp48;
+
+ if (actor->state < 4) {
+ i = actor->iwork[0];
+ actor->obj.pos.x = D_i3_801C4308[1 + i];
+ actor->obj.pos.y = D_i3_801C4308[4 + i];
+ actor->obj.pos.z = D_i3_801C4308[7 + i];
+ actor->obj.rot.x = D_i3_801BFBBC[i] + D_i3_801C4308[10];
+ if (actor->obj.rot.x < 0.0f) {
+ actor->obj.rot.x += 359.0f;
+ }
+ if (actor->obj.rot.x >= 360.0f) {
+ actor->obj.rot.x -= 360.0f;
+ }
+ actor->obj.rot.y = D_i3_801BFBC8[i];
+ actor->obj.rot.z = D_i3_801BFBD4[i];
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if ((gBosses[0].state >= 10) && (actor->health != 0) && (actor->damage == 31)) {
+ actor->timer_0BE = 70;
+ actor->health -= actor->damage;
+ Audio_PlaySfx(0x2903604CU, actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (actor->timer_0C6 == 0) {
+ actor->timer_0C6 = 70;
+ }
+ if (actor->health <= 0) {
+ actor->health = actor->timer_0BE = 0;
+ BonusText_Display(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 200.0f, 3);
+ gHitCount += 4;
+ D_80177850 = 15;
+ actor->info.bonus = 0;
+ actor->state = 4;
+ }
+ }
+ }
+ if (D_i3_801C42A0[23] == 0) {
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ if (actor->timer_0C6 & 1) {
+ func_8007C120(actor->obj.pos.x, actor->obj.pos.y + 100.0f, actor->obj.pos.z + RAND_FLOAT(500.0f), actor->vel.x,
+ actor->vel.y, actor->vel.z, actor->scale * 0.2f, 10);
+ }
+ switch (actor->state) {
+ case 0:
+ if (gBosses[0].state >= 10) {
+ actor->timer_0BC = D_i3_801BFBB0[actor->iwork[0]] + RAND_FLOAT(20.0f);
+ actor->health = 90;
+ actor->state++;
+ }
+ break;
+ case 1:
+ if ((actor->timer_0BC == 0) && (fabsf(D_i3_801C4308[10]) < 5.0f) && (actor->timer_0C6 == 0)) {
+ i = actor->iwork[3] - 1;
+ if (i >= 0) {
+ if (!((gActors[i].obj.status == OBJ_ACTIVE) && (gActors[i].obj.id == OBJ_ACTOR_255) &&
+ (gActors[i].iwork[0] == actor->iwork[0]))) {
+ actor->iwork[3] = 0;
+ actor->state = 2;
+ }
+ } else {
+ actor->iwork[3] = 0;
+ actor->state = 2;
+ }
+ }
+ break;
+ case 2:
+ Math_SmoothStepToF(&actor->fwork[0], 1.0f, 0.2f, 0.5f, 0.01f);
+ actor->fwork[2] = actor->fwork[1] = actor->fwork[0];
+ if (actor->fwork[0] == 1.0f) {
+ actor->state = 3;
+ }
+ break;
+ case 3:
+ i = actor->iwork[2];
+ Math_SmoothStepToF(&actor->fwork[0], D_i3_801BFBE0[i][0], D_i3_801BFBE0[i][1], D_i3_801BFBE0[i][2],
+ 0.00001f);
+ Math_SmoothStepToF(&actor->fwork[1], D_i3_801BFC10[i][0], D_i3_801BFC10[i][1], D_i3_801BFC10[i][2],
+ 0.00001f);
+ Math_SmoothStepToF(&actor->fwork[2], D_i3_801BFC40[i][0], D_i3_801BFC40[i][1], D_i3_801BFC40[i][2],
+ 0.00001f);
+ actor->iwork[1]++;
+ i = actor->iwork[3] - 1;
+
+ if ((i >= 0) && !((gActors[i].obj.status == OBJ_ACTIVE) && (gActors[i].obj.id == OBJ_ACTOR_255) &&
+ (gActors[i].iwork[0] == actor->iwork[0]))) {
+ actor->iwork[3] = 0;
+ i = -1;
+ }
+ if ((actor->iwork[1] == 13) && (i < 0)) {
+ Audio_PlaySfx(0x29022048U, actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ for (i = 0, sp48 = gActors; i < 60; i++, sp48++) {
+ if (sp48->obj.status == OBJ_FREE) {
+ Actor_Initialize(sp48);
+ sp48->obj.status = OBJ_INIT;
+ sp48->obj.id = OBJ_ACTOR_255;
+ sp48->obj.pos.x = actor->obj.pos.x;
+ sp48->obj.pos.y = actor->obj.pos.y;
+ sp48->obj.pos.z = actor->obj.pos.z;
+ sp48->obj.rot.x = sp48->unk_0F4.x =
+ Math_ModF(actor->obj.rot.x + 270.0f + D_i3_801BFC7C[actor->iwork[0]], 360.0f);
+ sp48->obj.rot.y = sp48->unk_0F4.y =
+ Math_ModF(actor->obj.rot.y + D_i3_801BFC88[actor->iwork[0]], 360.0f);
+ sp48->unk_0F4.z = actor->obj.rot.z;
+ sp48->obj.rot.z = actor->obj.rot.z;
+ sp48->timer_0BC = 10;
+ Object_SetInfo(&sp48->info, sp48->obj.id);
+ actor->iwork[3] = i + 1;
+ sp48->iwork[0] = actor->iwork[0];
+ sp48->iwork[2] = actor->index + 1;
+ Matrix_RotateY(gCalcMatrix, sp48->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, sp48->obj.rot.x * M_DTOR, 1);
+ Matrix_RotateZ(gCalcMatrix, sp48->obj.rot.z * M_DTOR, 1);
+ sp58.x = sp58.y = 0.0f;
+ sp58.z = 60.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp58, &sp4C);
+ sp48->vel.x = sp4C.x;
+ sp48->vel.y = sp4C.y;
+ sp48->vel.z = sp4C.z;
+ break;
+ }
+ }
+ if (i >= 60) {
+ actor->iwork[3] = 0;
+ sp48->obj.status = OBJ_FREE;
+ }
+ }
+ if (actor->iwork[1] == D_i3_801BFC70[actor->iwork[2]]) {
+ actor->iwork[2]++;
+ if (actor->iwork[2] >= 3) {
+ actor->iwork[1] = actor->iwork[2] = 0;
+ actor->state = 1;
+ actor->fwork[0] = actor->fwork[1] = actor->fwork[2] = 1.0f;
+ actor->timer_0BC = D_i3_801BFBB0[actor->iwork[0]] + 70.0f - RAND_FLOAT_CENTERED(30.0f);
+ }
+ }
+ break;
+ case 4:
+ actor->state = 5;
+ actor->vel.y = 10.0f;
+ actor->vel.z = 5.0f;
+ Audio_PlaySfx(0x1902102FU, actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ case 5:
+ if (actor->obj.pos.y > (gGroundLevel + 70.0f)) {
+ Math_SmoothStepToF(actor->fwork, 1.0f, 0.1f, 0.2f, 0.0001f);
+ Math_SmoothStepToF(&actor->fwork[1], 1.0f, 0.1f, 0.2f, 0.0001f);
+ Math_SmoothStepToF(&actor->fwork[2], 1.0f, 0.1f, 0.2f, 0.0001f);
+ Math_SmoothStepToF(&actor->vel.y, -10.0f, 0.1f, 1.0f, 0.001f);
+ Math_SmoothStepToAngle(&actor->obj.rot.x, 80.0f, 0.1f, 1.0f, 0.001f);
+ if (!(gGameFrameCount & 1)) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(300.0f),
+ actor->obj.pos.y + RAND_FLOAT_CENTERED(200.0f), actor->obj.pos.z, 4.0f, 2);
+ }
+ if (actor->timer_0C6 == 0) {
+ actor->timer_0C6 = 70;
+ }
+ actor->fwork[6] = 10.0f;
+ actor->timer_0C0 = 20;
+ } else {
+ Math_SmoothStepToF(&actor->fwork[6], 30.0f, 0.1f, 12.0f, 0.1f);
+ sp70 = RAND_FLOAT(30.0f);
+ if (!(gGameFrameCount & 3)) {
+ for (i = 0; i < 36; i += 2) {
+ sp6C = __sinf(sp70 + (i * 10.0f * M_DTOR)) * actor->fwork[6] * 10.0f;
+ sp68 = __cosf(sp70 + (i * 10.0f * M_DTOR)) * actor->fwork[6] * 10.0f;
+ pad64 = gGroundLevel + 30.0f;
+ func_8007B8F8(actor->obj.pos.x + sp6C, pad64, actor->obj.pos.z + sp68, 20.0f);
+ }
+ }
+ if (actor->vel.z != 0) {
+ actor->vel.y = actor->vel.z = 0.0f;
+ Audio_PlaySfx(0x19402031U, actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (actor->timer_0C0 == 1) {
+ Audio_PlaySfx(0x19003030U, actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (actor->timer_0C0 == 0) {
+ if (actor->timer_0BE == 0) {
+ actor->timer_0BE = 10;
+ }
+ Math_SmoothStepToF(actor->fwork, 0.0f, 0.05f, 0.1f, 0.001f);
+ Math_SmoothStepToF(&actor->fwork[1], 0.0f, 0.05f, 0.1f, 0.001f);
+ Math_SmoothStepToF(&actor->fwork[2], 0.0f, 0.05f, 0.1f, 0.001f);
+ Math_SmoothStepToF(&actor->obj.pos.y, -300.0f, 0.1f, 1.0f, 0.001f);
+ if (actor->fwork[0] <= 0.2f) {
+ for (i = 0; i < 5; i++) {
+ func_8007BC7C(actor->obj.pos.x, gGroundLevel + 50.0f, actor->obj.pos.z, 20.0f);
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(300.0f), gGroundLevel + (i * 20.0f),
+ actor->obj.pos.z, 5.0f, 2);
+ }
+ if (gBosses[0].state < 13) {
+ gBosses[0].state++;
+ if (gBosses[0].state == 13) {
+ gBosses[0].swork[AQ_SWK_19] = 30;
+ }
+ }
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ }
+ }
+ break;
+ }
+ if (actor->timer_0BE != 0) {
+ actor->fwork[3] = SIN_DEG(actor->timer_0BE * 20.0f) * func_i3_801A958C(actor->timer_0BE, 20.0f);
+ actor->fwork[4] = SIN_DEG(actor->timer_0BE * 20.0f) * func_i3_801A958C(actor->timer_0BE, 20.0f);
+ actor->fwork[5] = SIN_DEG(actor->timer_0BE * 20.0f) * func_i3_801A958C(actor->timer_0BE, 20.0f);
+ }
+}
+#else
+// OBJ_ACTOR_257 action
+#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_aq/func_i3_801AFA5C.s")
+#endif
+
+// OBJ_ACTOR_257 draw
+void func_i3_801B099C(Actor* actor) {
+ Matrix_RotateY(gGfxMatrix, (actor->obj.rot.x + actor->fwork[3]) * M_DTOR, 1);
+ Matrix_RotateX(gGfxMatrix, (actor->obj.rot.y + actor->fwork[4]) * M_DTOR, 1);
+ Matrix_RotateZ(gGfxMatrix, (actor->obj.rot.z + actor->fwork[5]) * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, actor->fwork[0], actor->fwork[1], actor->fwork[2], 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ if (!(actor->timer_0C6 & 1)) {
+ RCP_SetupDL(&gMasterDisp, 0x39);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ switch (actor->iwork[0]) {
+ case 0:
+ gSPDisplayList(gMasterDisp++, D_6019E80);
+ break;
+ case 1:
+ gSPDisplayList(gMasterDisp++, D_60194D0);
+ break;
+ case 2:
+ gSPDisplayList(gMasterDisp++, D_6019880);
+ break;
+ }
+}
+
+// OBJ_ACTOR_258 action
+void func_i3_801B0B60(Actor* actor) {
+ Vec3f sp44;
+ Vec3f sp38;
+
+ if ((actor->unk_0D0 != 0) || (gBosses[0].state >= 16)) {
+ actor->state = 3;
+ }
+ switch (actor->state) {
+ case 0:
+ if (actor->timer_0BC == 0) {
+ Matrix_RotateY(gCalcMatrix, actor->fwork[2] * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->fwork[1] * M_DTOR, 1);
+ sp44.x = sp44.y = 0.0f;
+ sp44.z = 50.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38);
+ actor->vel.x = sp38.x;
+ actor->vel.y = sp38.y;
+ actor->vel.z = sp38.z;
+ actor->timer_0BE = 5;
+ actor->iwork[1] = 255;
+ actor->iwork[2] = 255;
+ actor->iwork[3] = 255;
+ actor->state++;
+ }
+ break;
+ case 1:
+ if (actor->timer_0BE == 0) {
+ Matrix_RotateY(gCalcMatrix, actor->fwork[4] * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->fwork[3] * M_DTOR, 1);
+ sp44.x = sp44.y = 0.0f;
+ sp44.z = 30.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38);
+ actor->vel.x = sp38.x;
+ actor->vel.y = sp38.y;
+ actor->vel.z = sp38.z;
+ actor->timer_0C0 = 10;
+ actor->state++;
+ }
+ break;
+ case 2:
+ if (actor->timer_0C0 == 0) {
+ actor->iwork[1] -= 20;
+ actor->iwork[2] -= 20;
+ actor->iwork[3] -= 20;
+ if (actor->iwork[1] < 5) {
+ actor->iwork[1] = actor->iwork[2] = actor->iwork[3] = 5;
+ }
+ }
+ break;
+ case 3:
+ if (Rand_ZeroOne() < 0.1) {
+ actor->unk_044 = 22;
+ actor->unk_0D4 = 2;
+ func_80066254(actor);
+ }
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_800815DC();
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 50.0f, 5.0f);
+ func_8007A6F0(&actor->obj.pos, 0x29018049);
+ break;
+ }
+ if (!(gGameFrameCount & 0xF)) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(10.0f), actor->obj.pos.y + RAND_FLOAT_CENTERED(10.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(10.0f), 2.0f, 1);
+ }
+ func_i3_801A96DC(actor);
+}
+
+// OBJ_ACTOR_258 draw
+void func_i3_801B0EC0(Actor* actor) {
+ if (actor->timer_0BC == 0) {
+ Graphics_SetScaleMtx(0.8f);
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, actor->iwork[1], actor->iwork[2], actor->iwork[3], 255);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_6024A50);
+ }
+}
+
+void func_i3_801B0F88(Boss* bossAQ) {
+ if ((D_i3_801C42A0[23] != 0) && (bossAQ->swork[AQ_SWK_0] < 2)) {
+ bossAQ->swork[AQ_SWK_19] = 30;
+ D_i3_801C4308[79] = 0.0f;
+ bossAQ->swork[AQ_SWK_0] = 3;
+ }
+}
+
+void func_i3_801B0FCC(Boss* bossAQ) {
+ D_i3_801C4308[54] = D_i3_801C4308[61] = D_i3_801C4308[68] = 0.1f;
+ bossAQ->swork[AQ_SWK_19] = 500;
+ D_i3_801C4308[79] = -28.0f;
+}
+
+void func_i3_801B1008(Boss* bossAQ, s32 timer) {
+ if ((bossAQ->swork[AQ_SWK_19] == 0) && (fabsf(D_i3_801C4308[10]) <= 1.0f) && (bossAQ->swork[AQ_SWK_0] == 0)) {
+ D_i3_801C4308[79] = -28.0f;
+ bossAQ->swork[AQ_SWK_19] = timer;
+ bossAQ->swork[AQ_SWK_0] = 0;
+ if (bossAQ->swork[AQ_SWK_22] == 0) {
+ Radio_PlayMessage(gMsg_ID_15110, RCID_PEPPY);
+ }
+ bossAQ->swork[AQ_SWK_22]++;
+ bossAQ->swork[AQ_SWK_22] &= 3;
+ }
+ if ((fabsf(D_i3_801C4308[10]) >= 15.0f) && (bossAQ->timer_056 == 0)) {
+ bossAQ->swork[AQ_SWK_2] = bossAQ->swork[AQ_SWK_3] = 1;
+ bossAQ->timer_056 = 60;
+ }
+}
+
+// OBJ_BOSS_AQ init
+void func_i3_801B10F8(Boss* bossAQ) {
+ s32 i;
+ Actor* actor;
+
+ gBossActive = 1;
+ gBossFrameCount = 0;
+ bossAQ->health = 150;
+ for (i = 0, actor = gActors; i < 2; actor++) {
+ if (actor->obj.status == OBJ_FREE) {
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_INIT;
+ actor->obj.id = OBJ_ACTOR_256;
+ actor->obj.pos.x = bossAQ->obj.pos.x + D_i3_801C0098[i].x;
+ actor->obj.pos.y = bossAQ->obj.pos.y + D_i3_801C0098[i].y;
+ actor->obj.pos.z = bossAQ->obj.pos.z + D_i3_801C0098[i].z;
+ actor->iwork[0] = i;
+ i++;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ }
+ }
+ D_i3_801C42A0[23] = 2;
+ D_i3_801C42A0[0] = 255;
+ D_i3_801C42A0[9] = D_i3_801C0058;
+ D_i3_801C42A0[11] = 9;
+ D_i3_801C42A0[10] = 10;
+ D_i3_801C42A0[13] = 6;
+ D_i3_801C42A0[14] = 11;
+
+ bossAQ->fwork[AQ_FWK_1] = 10.0f;
+ D_i3_801C4308[79] = D_i3_801C4308[10] = D_i3_801C4308[80] = D_i3_801C4308[11] = 0.0f;
+ D_i3_801C4308[58] = D_i3_801C4308[65] = D_i3_801C4308[72] = 1.0f;
+ bossAQ->fwork[AQ_FWK_8] = bossAQ->fwork[AQ_FWK_9] = bossAQ->fwork[AQ_FWK_10] = 1.0f;
+ bossAQ->swork[AQ_SWK_14] = bossAQ->swork[AQ_SWK_15] = bossAQ->swork[AQ_SWK_16] = 255;
+ bossAQ->swork[AQ_SWK_17] = 10;
+ D_i3_801C42A0[1] = D_i3_801C42A0[2] = D_i3_801C42A0[4] = D_i3_801C42A0[5] =
+ (D_i3_801C42A0[6] = D_i3_801C42A0[7] = 0) ^ 0; // fake
+ for (i = 0; i < AQ_LIMB_MAX; i++) {
+ sBossAQlimbTimers[i] = 0;
+ }
+ bossAQ->obj.pos.y += 400.0f;
+ bossAQ->info.hitbox[119] = 1028.0f;
+ bossAQ->info.hitbox[169] = 800.0f;
+ bossAQ->swork[AQ_SWK_8] = bossAQ->swork[AQ_SWK_9] = 2;
+ Audio_PlaySfx(0x3140904D, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+// OBJ_BOSS_AQ action
+#ifdef NON_MATCHING
+// lots of float stuff, and unclear how to use the 4 indices
+void func_i3_801B134C(Boss* bossAQ) {
+ s32 i;
+ s32 i2;
+ s32 i3;
+ s32 i7;
+ Actor* actor;
+ f32 sp110;
+ f32 var_fs3;
+ f32 var_fs0;
+ f32 sp104;
+ f32 sp100;
+ f32 spFC;
+ f32 spF8;
+ f32 spF4;
+ f32 spF0;
+ f32 spEC;
+ f32 spE8;
+ f32 spE4;
+ f32 spE0;
+ Vec3f spD4;
+ f32 temp3;
+ f32 var_fs1;
+
+ gBossFrameCount++;
+
+ switch (bossAQ->state) {
+ case 0:
+ if (bossAQ->swork[AQ_SWK_21] == 0) {
+ for (i2 = 0, actor = gActors; i2 < 3; actor++) {
+ if (actor->obj.status == OBJ_FREE) {
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_INIT;
+ actor->obj.id = OBJ_ACTOR_257;
+ actor->iwork[0] = i2;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ i2++;
+ }
+ }
+ bossAQ->swork[AQ_SWK_21] = 1;
+ func_800182F4(0x102800FF);
+ func_800182F4(0x112800FF);
+ Radio_PlayMessage(gMsg_ID_15100, RCID_FOX);
+ }
+ if (fabsf(bossAQ->obj.pos.z - gPlayer[0].unk_138) <= 3000.0f) {
+ D_i3_801C4190[6] = 1;
+ bossAQ->timer_056 = 20;
+ func_8001D444(0, 32798, 0, 1);
+ bossAQ->state = 1;
+ }
+ break;
+ case 1:
+ if (bossAQ->timer_056 == 0) {
+ D_i3_801C4308[14] = 80.0f;
+ D_i3_801C4308[12] = D_i3_801C4308[13] = 0.0f;
+ bossAQ->timer_056 = 20;
+ bossAQ->state = 2;
+ Audio_PlaySfx(0x1900002E, bossAQ->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ break;
+ case 2:
+ func_i3_801B0FCC(bossAQ);
+ if (!(bossAQ->timer_056 & 1)) {
+ for (i3 = 0; i3 < 30; i3++) {
+ func_i3_801AC8A8(gBosses[0].obj.pos.x + RAND_FLOAT_CENTERED(1800.0f),
+ gBosses[0].obj.pos.y + RAND_FLOAT_CENTERED(500.0f),
+ gBosses[0].obj.pos.z + 700.0f + RAND_FLOAT_CENTERED(1000.0f), 7.0f, 2);
+ }
+ }
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->timer_056 = 40;
+ bossAQ->state = 3;
+ }
+ break;
+ case 3:
+ func_i3_801B0FCC(bossAQ);
+ Math_SmoothStepToF(&D_i3_801C4308[12], -45.0f, 0.5f, 1.0f, 0.01f);
+ Math_SmoothStepToF(&D_i3_801C4308[13], 30.0f, 0.5f, 1.0f, 0.01f);
+ Math_SmoothStepToAngle(&D_i3_801C4308[14], 0.0f, 1.0f, 2.0f, 0.0f);
+ Math_SmoothStepToAngle(&D_i3_801C4308[15], D_i3_801C0190[bossAQ->swork[AQ_SWK_20]], 1.0f, 10, 0.0f);
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->timer_056 = 10;
+ bossAQ->swork[AQ_SWK_20]++;
+ if (bossAQ->swork[AQ_SWK_20] >= 5) {
+ bossAQ->state = 4;
+ }
+ }
+ break;
+ case 4:
+ func_i3_801B0FCC(bossAQ);
+ Math_SmoothStepToF(&D_i3_801C4308[58], 0.25f, 0.3f, 1.0f, 0.0f);
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->timer_056 = 20;
+ bossAQ->state = 5;
+ }
+ break;
+ case 5:
+ func_i3_801B0FCC(bossAQ);
+ Math_SmoothStepToF(&D_i3_801C4308[58], 0.25f, 0.3f, 1.0f, 0.0f);
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->timer_056 = 30;
+ bossAQ->state = 6;
+ }
+ break;
+ case 6:
+ func_i3_801B0FCC(bossAQ);
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->state = 7;
+ }
+ break;
+ case 7:
+ bossAQ->swork[AQ_SWK_19] = 500;
+ D_i3_801C4308[79] = -28.0f;
+ Math_SmoothStepToF(&D_i3_801C4308[54], 1.0f, 0.001f, 0.01f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[61], 1.0f, 0.001f, 0.01f, 0.0f);
+ if (D_i3_801C4308[54] >= 0.9f) {
+ bossAQ->timer_056 = 20;
+ D_i3_801C4308[79] = 0.0f;
+ bossAQ->swork[AQ_SWK_0] = 3;
+ bossAQ->state = 8;
+ }
+ break;
+ case 8:
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->timer_056 = 20;
+ bossAQ->swork[AQ_SWK_12] = 10;
+ D_i3_801C42A0[3] = 0;
+ Radio_PlayMessage(gMsg_ID_2225, RCID_SLIPPY);
+ bossAQ->swork[AQ_SWK_26] = gBossFrameCount + 156;
+ bossAQ->state = 9;
+ }
+ break;
+ case 9:
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->state = 10;
+ }
+ break;
+ case 10:
+ case 11:
+ case 12:
+ func_i3_801B1008(bossAQ, 500);
+ break;
+ case 13:
+ func_i3_801B1008(bossAQ, 60);
+ break;
+ case 14:
+ if (bossAQ->timer_056 == 58) {
+ Audio_PlaySfx(0x29408055, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if ((bossAQ->timer_056 == 0) && (D_i3_801C4308[12] <= -44.0f)) {
+ bossAQ->swork[AQ_SWK_2] = bossAQ->swork[AQ_SWK_3] = 20;
+ bossAQ->state = 15;
+ }
+ if (bossAQ->timer_056 == 40) {
+ Radio_PlayMessage(gMsg_ID_15140, RCID_PEPPY);
+ }
+ break;
+ case 15:
+ if (bossAQ->swork[AQ_SWK_2] == 0) {
+ bossAQ->swork[AQ_SWK_2] = 100 + RAND_INT(50.0f);
+ }
+ if (bossAQ->swork[AQ_SWK_3] == 0) {
+ bossAQ->swork[AQ_SWK_3] = 100 + RAND_INT(50.0f);
+ }
+ break;
+ case 16:
+ D_801779A8[0] = 20.0f;
+ if (D_80178480 == 0) {
+
+ D_80178340 = D_80178348 = D_80178350 = D_80178354 = D_80178358 = 255;
+
+ D_80178358 = 0;
+ D_8017835C = 25;
+ D_80178480 = 20 + RAND_FLOAT(20);
+ }
+ if (D_80178480 == 29) {
+ D_80178348 = D_80178350 = D_80178354 = D_80178340 = 0;
+ }
+ Math_SmoothStepToF(&D_i3_801C41B8[25], D_8015F970, 1.0f, 100, 0.f);
+ Math_SmoothStepToF(&D_i3_801C41B8[26], 128.0f, 1.0f, 100, 0.f);
+ for (i3 = 0; i3 < AQ_LIMB_MAX; i3++) {
+ if (sBossAQlimbTimers[i3] == 0) {
+ sBossAQlimbTimers[i3] = 100;
+ }
+ }
+
+ if (D_i3_801C42A0[7] == 0) {
+ D_i3_801C42A0[1] = D_i3_801C42A0[2] = D_i3_801C42A0[4] = D_i3_801C42A0[5] = D_i3_801C42A0[6] =
+ D_i3_801C42A0[7] = 50;
+ }
+ if (!(gGameFrameCount & 1)) {
+ func_8007C120(bossAQ->obj.pos.x + RAND_FLOAT_CENTERED(1200.0f),
+ bossAQ->obj.pos.y + 400.0f + RAND_FLOAT_CENTERED(400.0f),
+ bossAQ->obj.pos.z + 1000.0f + RAND_FLOAT_CENTERED(800.0f), bossAQ->vel.x, bossAQ->vel.y,
+ bossAQ->vel.z, 0.5f, 10);
+ func_8007D0E0(bossAQ->obj.pos.x + RAND_FLOAT_CENTERED(1200.0f),
+ bossAQ->obj.pos.y + 200.0f + RAND_FLOAT_CENTERED(400.0f),
+ bossAQ->obj.pos.z + 1000.0f + RAND_FLOAT_CENTERED(800.0f), 10.0f);
+ }
+ if (i3 && i3) {}
+ for (i3 = 0; i3 < 3; i3++) {
+ func_80081A8C(bossAQ->obj.pos.x + RAND_FLOAT_CENTERED(1200.0f),
+ bossAQ->obj.pos.y + 200.0f + RAND_FLOAT_CENTERED(200.0f),
+ bossAQ->obj.pos.z + 1000.0f + RAND_FLOAT_CENTERED(800.0f), 3.0f + RAND_FLOAT(3.0f), 5);
+ }
+ if (bossAQ->timer_056 == 0) {
+ gEffects[98].obj.status = OBJ_FREE;
+ gEffects[99].obj.status = OBJ_FREE;
+ func_8007A568(bossAQ->obj.pos.x, bossAQ->obj.pos.y, bossAQ->obj.pos.z + 600.0f, 40.0f);
+ bossAQ->timer_056 = 50;
+ for (i3 = 0; i3 < AQ_LIMB_MAX; i3++) {
+ sBossAQlimbTimers[i3] = 100;
+ }
+ D_80178348 = D_80178350 = D_80178354 = D_80178340 = 0;
+ bossAQ->state = 17;
+ }
+ break;
+ case 17:
+ if (bossAQ->timer_056 == 20) {
+ gEffects[96].obj.status = OBJ_FREE;
+ gEffects[97].obj.status = OBJ_FREE;
+ func_8007A568(bossAQ->obj.pos.x, bossAQ->obj.pos.y, bossAQ->obj.pos.z + 600.0f, 80.0f);
+ }
+ D_i3_801C42A0[0] -= 4;
+ if (D_i3_801C42A0[0] < 0) {
+ D_i3_801C42A0[0] = 0;
+ }
+ for (i3 = 0; i3 < 21; i3++) {
+ Math_SmoothStepToF(&D_i3_801C4308[52 + i3], 0.1f, 0.1f, 1.0f, 0.0f);
+ }
+ Math_SmoothStepToF(&bossAQ->fwork[AQ_FWK_8], 0.1f, 0.1f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&bossAQ->fwork[AQ_FWK_9], 0.1f, 0.1f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&bossAQ->fwork[AQ_FWK_10], 0.1f, 0.1f, 1.0f, 0.0f);
+ if (!(gGameFrameCount & 1)) {
+ func_8007C120(bossAQ->obj.pos.x + RAND_FLOAT_CENTERED(1200.0f),
+ bossAQ->obj.pos.y + 400.0f + RAND_FLOAT_CENTERED(400.0f),
+ bossAQ->obj.pos.z + 1000.0f + RAND_FLOAT_CENTERED(800.0f), bossAQ->vel.x, bossAQ->vel.y,
+ bossAQ->vel.z, 0.7f, 15);
+ }
+ if (bossAQ->timer_056 == 1) {
+ for (i3 = 0; i3 < AQ_LIMB_MAX; i3++) {
+ if (i3 != AQ_LIMB_27) {
+ sBossAQlimbTimers[i3] = 1000;
+ }
+ }
+ }
+ if (bossAQ->timer_056 == 0) {
+ bossAQ->timer_056 = 300;
+ bossAQ->state = 18;
+ }
+ break;
+ case 18:
+ if (bossAQ->timer_056 != 0) {
+ for (i3 = 0; i3 < 30; i3++) {
+ func_i3_801AC8A8(gBosses[0].obj.pos.x + RAND_FLOAT_CENTERED(1800.0f),
+ gBosses[0].obj.pos.y + RAND_FLOAT_CENTERED(500.0f),
+ gBosses[0].obj.pos.z + 700.0f + RAND_FLOAT_CENTERED(1000.0f), 7.0f, 2);
+ }
+ }
+ break;
+ }
+ switch (bossAQ->swork[AQ_SWK_0]) {
+ case 0:
+ if (D_i3_801C42A0[23] == 0) {
+ D_i3_801C4308[79] = -180.0f;
+ } else {
+ Math_SmoothStepToF(&D_i3_801C4308[79], 0.0f, 0.05f, 0.2f, 0.0f);
+ }
+ Math_SmoothStepToF(&D_i3_801C4308[10], D_i3_801C4308[79], 0.05f, 0.3f, 0.0f);
+ break;
+ case 1:
+ Math_SmoothStepToF(&D_i3_801C4308[10], -28.0f, 0.05f, 0.3f, 0.0f);
+ if (bossAQ->timer_052 < 3) {
+ func_i3_801B0F88(bossAQ);
+ }
+ break;
+ case 2:
+ break;
+ case 3:
+ Math_SmoothStepToF(&D_i3_801C4308[10], D_i3_801C4308[79], 0.5f, 10.0f, 0.0f);
+ if (fabsf(D_i3_801C4308[10]) <= 5.0f) {
+ bossAQ->swork[AQ_SWK_0] = 0;
+ bossAQ->timer_052 = 0;
+ bossAQ->swork[AQ_SWK_19] = 500;
+ D_i3_801C4308[79] = 0.0f;
+ Audio_PlaySfx(0x29408054, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (bossAQ->state < 14) {
+ for (i3 = 0, actor = gActors; i3 < 60; i3++, actor++) {
+ if ((actor->obj.id == OBJ_ACTOR_260) && (actor->obj.status == OBJ_ACTIVE)) {
+ actor->iwork[0] = 1;
+ }
+ }
+ bossAQ->timer_058 = 30;
+ bossAQ->swork[AQ_SWK_0] = 4;
+ D_80178480 = 50;
+ Audio_PlaySfx(0x1900002D, bossAQ->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_80062B60(bossAQ->obj.pos.x, bossAQ->obj.pos.z + 800.0f, 0, 100.0f);
+ var_fs3 = 80.0f;
+ for (i2 = 0; i2 < 3; i2++, var_fs3 += 10.0f) {
+ for (i3 = 0; i3 < 9; i3++) {
+ var_fs0 = SIN_DEG((27 + 2 * i3) * (10.0f + 3 * i2)) * var_fs3 * 10.0f;
+ var_fs1 = COS_DEG((27 + 2 * i3) * (10.0f + 3 * i2)) * var_fs3 * 10.0f;
+ temp3 = gGroundLevel + 30.0f;
+ func_8007B8F8(bossAQ->obj.pos.x + var_fs0, temp3, bossAQ->obj.pos.z + 1000.0f + var_fs1,
+ 20.0f);
+ }
+ }
+ }
+ }
+ break;
+ case 4:
+ bossAQ->swork[AQ_SWK_19] = 50;
+ Math_SmoothStepToF(&D_i3_801C4308[10], D_i3_801C4308[79], 0.5f, 5.0f, 0.0f);
+ if (bossAQ->timer_058 > 10) {
+ Math_SmoothStepToF(D_801779A8, 20.0f, 1.0f, 5.0f, 0.0f);
+ }
+ if (bossAQ->timer_058 != 0) {
+ gPlayer[0].unk_2B4 = 1;
+ Math_SmoothStepToF(&D_i3_801C41B8[24], 20.0f, 0.1f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].unk_08C, 180.0f, 0.4f, 20.0f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&D_i3_801C41B8[24], 0.0f, 0.01f, 0.1f, 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].unk_08C, 0.0f, 0.1f, 2.0f, 0.0f);
+ if (gPlayer[0].unk_08C < 0.1f) {
+ gPlayer[0].unk_2B4 = 0;
+ gPlayer[0].unk_08C = D_i3_801C41B8[24] = 0.0f;
+ bossAQ->swork[AQ_SWK_0] = 0;
+ }
+ }
+ break;
+ }
+ Math_SmoothStepToF(&D_i3_801C4308[80], 0.0f, 1.0f, 2.0f, 0);
+ Math_SmoothStepToF(&D_i3_801C4308[11], D_i3_801C4308[80], 0.1f, 2.0f, 0);
+ if (bossAQ->dmgType != 0) {
+ bossAQ->dmgType = 0;
+ if (fabsf(D_i3_801C4308[10]) >= 5.0f) {
+ switch (bossAQ->dmgPart) {
+ case 13:
+ if ((bossAQ->swork[AQ_SWK_12] != 0) && (bossAQ->state >= 15)) {
+ if (D_i3_801C42A0[23] == 0) {
+ sBossAQlimbTimers[AQ_LIMB_9] = D_i3_801C42A0[3] = 50;
+ D_i3_801C42A0[22] = 0;
+ bossAQ->swork[AQ_SWK_12]--;
+ bossAQ->swork[AQ_SWK_13] = 70;
+ Audio_PlaySfx(0x2940604C, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ } else if (bossAQ->state >= 10) {
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ break;
+ case 14:
+ if (bossAQ->damage == 31) {
+ if (D_i3_801C42A0[23] != 0) {
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else if ((bossAQ->state >= 15) && (bossAQ->swork[AQ_SWK_8] != 0)) {
+ D_i3_801C42A0[1] = 50;
+ sBossAQlimbTimers[AQ_LIMB_7] = 50;
+ bossAQ->swork[AQ_SWK_8]--;
+ Audio_PlaySfx(0x2903604C, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (bossAQ->swork[AQ_SWK_8] == 0) {
+ spD4.x = D_i3_801C4308[73];
+ spD4.y = D_i3_801C4308[74];
+ spD4.z = D_i3_801C4308[75]; // 74?
+ func_8007A6F0(&spD4, 0x19000033);
+ bossAQ->swork[AQ_SWK_10] = 250.0f + RAND_FLOAT(50.0f);
+ }
+ }
+ }
+ break;
+ case 15:
+ if (bossAQ->damage == 31) {
+ if (D_i3_801C42A0[23] != 0) {
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else if ((bossAQ->state >= 15) && (bossAQ->swork[AQ_SWK_9] != 0)) {
+ D_i3_801C42A0[2] = 50;
+ sBossAQlimbTimers[AQ_LIMB_8] = 50;
+ bossAQ->swork[AQ_SWK_9]--;
+ Audio_PlaySfx(0x2903604C, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (bossAQ->swork[AQ_SWK_9] == 0) {
+ spD4.x = D_i3_801C4308[76];
+ spD4.y = D_i3_801C4308[77]; // 76?
+ spD4.z = D_i3_801C4308[78];
+ func_8007A6F0(&spD4, 0x19000033);
+ bossAQ->swork[AQ_SWK_11] = 250.0f + RAND_FLOAT(50.0f);
+ }
+ }
+ }
+ break;
+ case 16:
+ if (bossAQ->damage == 31) {
+ if (D_i3_801C42A0[23] != 0) {
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else if (bossAQ->state >= 15) {
+ D_i3_801C42A0[4] = 75;
+ }
+ }
+ break;
+ case 17:
+ if (bossAQ->damage == 31) {
+ if (D_i3_801C42A0[23] != 0) {
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else if (bossAQ->state >= 15) {
+ D_i3_801C42A0[5] = 75;
+ }
+ }
+ break;
+ case 18:
+ if ((bossAQ->damage == 31) && (bossAQ->swork[AQ_SWK_1] != 2) && (bossAQ->swork[AQ_SWK_12] == 0) &&
+ (bossAQ->state == 15) && (bossAQ->health != 0)) {
+ if (D_i3_801C42A0[23] != 0) {
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else {
+ for (i7 = 0; i7 < AQ_LIMB_MAX; i7++) {
+ sBossAQlimbTimers[i7] = 50;
+ }
+ D_i3_801C42A0[1] = D_i3_801C42A0[2] = D_i3_801C42A0[4] = D_i3_801C42A0[5] =
+ D_i3_801C42A0[6] = D_i3_801C42A0[7] = 50;
+
+ bossAQ->swork[AQ_SWK_13] = 40;
+ bossAQ->swork[AQ_SWK_1] = 2;
+ Audio_PlaySfx(0x2940804E, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ bossAQ->health -= bossAQ->damage;
+ if ((bossAQ->swork[AQ_SWK_25] == 0) || (bossAQ->swork[AQ_SWK_25] == 2)) {
+ Radio_PlayMessage(gMsg_ID_7086, RCID_SLIPPY);
+ }
+ bossAQ->swork[AQ_SWK_25]++;
+ if (bossAQ->health <= 0) {
+ func_800182F4(0x102800FF);
+ func_800182F4(0x112800FF);
+ func_80042EC0(bossAQ);
+ Radio_PlayMessage(gMsg_ID_15252, RCID_SLIPPY);
+ D_8017796C = -1;
+ if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) ||
+ (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_5)) {
+ gPlayer[0].state_1C8 = PLAYERSTATE_1C8_7;
+ gPlayer[0].unk_1D0 = 0;
+ }
+ D_i3_801C4190[1] = 0;
+ D_i3_801C4190[5] = 0;
+ D_i3_801C4190[3] = 0;
+ D_i3_801C4190[4] = 0;
+ D_i3_801C4190[0] = 0;
+ bossAQ->health = 0;
+ bossAQ->swork[AQ_SWK_13] = 40;
+ bossAQ->swork[AQ_SWK_1] = 2;
+ bossAQ->timer_056 = 50;
+ Audio_PlaySfx(0x2940A04F, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ gShowBossHealth = false;
+ bossAQ->state = 16;
+ }
+ }
+ }
+ break;
+ case 19:
+ case 20:
+ if (bossAQ->damage == 31) {
+ if (D_i3_801C42A0[23] != 0) {
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else if (bossAQ->state >= 15) {
+ D_i3_801C42A0[6] = 50;
+ }
+ }
+ break;
+ default:
+ Audio_PlaySfx(0x29121007, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ }
+ }
+ }
+ if (bossAQ->state >= 15) {
+ switch (bossAQ->swork[AQ_SWK_1]) {
+ case 0:
+ Math_SmoothStepToF(&D_i3_801C4308[12], -45.0f, 1.0f, bossAQ->fwork[AQ_FWK_1], 0.01f);
+ Math_SmoothStepToF(&D_i3_801C4308[13], 30.0f, 1.0f, bossAQ->fwork[AQ_FWK_1], 0.01f);
+ if ((bossAQ->timer_050 == 0) && (*(&D_i3_801C4308[12]) == -45.0f)) {
+ bossAQ->timer_050 = 7;
+ bossAQ->swork[AQ_SWK_1]++;
+ }
+ break;
+ case 1:
+ var_fs0 = 2.0f * bossAQ->fwork[AQ_FWK_1];
+ Math_SmoothStepToF(&D_i3_801C4308[12], 0.0f, 1.0f, var_fs0, 0.0001f);
+ Math_SmoothStepToF(&D_i3_801C4308[13], 0.0f, 1.0f, var_fs0, 0.0001f);
+ if (bossAQ->timer_050 == 0) {
+ bossAQ->swork[AQ_SWK_1] = 0;
+ bossAQ->timer_050 = 40.0f - ((bossAQ->health - 150) / 5.0f);
+ }
+ break;
+ case 2:
+ if (D_i3_801C42A0[7] != 0) {
+ Math_SmoothStepToF(&D_i3_801C4308[12], -80.0f, 1.0f, 10.0f, 0.0001f);
+ Math_SmoothStepToF(&D_i3_801C4308[13], 30.0f, 1.0f, 10.0f, 0.0001f);
+ } else {
+ bossAQ->timer_050 = 50;
+ bossAQ->swork[AQ_SWK_1] = 0;
+ }
+ break;
+ }
+ }
+ bossAQ->swork[AQ_SWK_14] += D_i3_801C0150[bossAQ->swork[AQ_SWK_18]][0];
+ bossAQ->swork[AQ_SWK_15] += D_i3_801C0150[bossAQ->swork[AQ_SWK_18]][1];
+ bossAQ->swork[AQ_SWK_16] += D_i3_801C0150[bossAQ->swork[AQ_SWK_18]][2];
+ if (bossAQ->swork[AQ_SWK_14] < 0) {
+ bossAQ->swork[AQ_SWK_14] = 0;
+ }
+ if (bossAQ->swork[AQ_SWK_15] < 0) {
+ bossAQ->swork[AQ_SWK_15] = 0;
+ }
+ if (bossAQ->swork[AQ_SWK_16] < 0) {
+ bossAQ->swork[AQ_SWK_16] = 0;
+ }
+ if (bossAQ->swork[AQ_SWK_17] == 0) {
+ bossAQ->swork[AQ_SWK_17] = 10;
+ bossAQ->swork[AQ_SWK_18] += 1;
+ bossAQ->swork[AQ_SWK_18] &= 3;
+ }
+ if ((bossAQ->state >= 4) && (bossAQ->state < 16)) {
+ sp104 = gPlayer[0].pos.x - bossAQ->obj.pos.x;
+ sp100 = gPlayer[0].pos.y - bossAQ->obj.pos.y;
+ spFC = gPlayer[0].unk_138 - bossAQ->obj.pos.z;
+ spE8 = Math_RadToDeg(Math_Atan2F(sp104, spFC));
+ // spEC = sqrtf(SQ(sp104) + SQ(spFC));
+ spE4 = Math_RadToDeg(-Math_Atan2F(sp100, sqrtf(SQ(sp104) + SQ(spFC))));
+ if ((spE8 <= 40.0f) || (spE8 >= 320.0f)) {
+ Math_SmoothStepToAngle(&D_i3_801C4308[15], spE8, 1.0f, 5.0f, 0.001f);
+ }
+ if ((spE4 <= 30.0f) || (spE4 >= 330.0f)) {
+ Math_SmoothStepToAngle(&D_i3_801C4308[14], spE4, 1.0f, 5.0f, 0.001f);
+ }
+ }
+ for (i3 = 0; i3 < 6; i3++) {
+ if ((D_i3_801C42A0[i3 + 1] == 0) && (bossAQ->state < 17)) {
+ if ((i3 + 1 != bossAQ->swork[AQ_SWK_6]) && (i3 + 1 != bossAQ->swork[AQ_SWK_7])) {
+ i2 = D_i3_801C42A0[i3 + 16];
+ Math_SmoothStepToF(&D_i3_801C4308[52 + i3], D_i3_801BFC94[4 * i3 + i2].x, D_i3_801BFE18[4 * i3 + i2].x,
+ D_i3_801BFF38[4 * i3 + i2].x, 0.00001f);
+ Math_SmoothStepToF(&D_i3_801C4308[59 + i3], D_i3_801BFC94[4 * i3 + i2].y, D_i3_801BFE18[4 * i3 + i2].y,
+ D_i3_801BFF38[4 * i3 + i2].y, 0.00001f);
+ Math_SmoothStepToF(&D_i3_801C4308[66 + i3], D_i3_801BFC94[4 * i3 + i2].z, D_i3_801BFE18[4 * i3 + i2].z,
+ D_i3_801BFF38[4 * i3 + i2].z, 0.00001f);
+ 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)) {
+ D_i3_801C42A0[i3 + 10] = 0;
+ D_i3_801C42A0[i3 + 16] = 0;
+ }
+ }
+ }
+ }
+ }
+
+ spF4 = gPlayer[0].pos.y - D_i3_801C4308[77];
+ spF8 = gPlayer[0].pos.x - D_i3_801C4308[76];
+ spF0 = gPlayer[0].unk_138 - D_i3_801C4308[78];
+ sp104 = gPlayer[0].pos.x - D_i3_801C4308[73];
+ sp100 = gPlayer[0].pos.y - D_i3_801C4308[74];
+ spFC = gPlayer[0].unk_138 - D_i3_801C4308[75];
+
+ spE8 = Math_RadToDeg(Math_Atan2F(sp104, spFC));
+ spE0 = Math_RadToDeg(Math_Atan2F(spF8, spF0));
+ spFC = sqrtf(SQ(sp104) + SQ(spFC));
+ spF0 = sqrtf(SQ(spF8) + SQ(spF0));
+ spE4 = Math_RadToDeg(-Math_Atan2F(sp100, spFC));
+ spEC = Math_RadToDeg(-Math_Atan2F(spF4, spF0));
+ if ((spE8 <= 15.0f) || (spE8 >= 310.0f)) {
+ Math_SmoothStepToAngle(&D_i3_801C4308[18], spE8, 1.0f, 5.0f, 0.001f);
+ }
+ if ((spE4 <= 12.0f) || (spE4 >= 330.0f)) {
+ Math_SmoothStepToAngle(&D_i3_801C4308[16], spE4, 1.0f, 5.0f, 0.001f);
+ }
+ if ((spE0 <= 20.0f) || (spE0 >= 315.0f)) {
+ Math_SmoothStepToAngle(&D_i3_801C4308[19], spE0, 1.0f, 5.0f, 0.001f);
+ }
+ if ((spEC <= 12.0f) || (spEC >= 330.0f)) {
+ Math_SmoothStepToAngle(&D_i3_801C4308[17], spEC, 1.0f, 5.0f, 0.001f);
+ }
+ if ((bossAQ->swork[AQ_SWK_2] == 1) && (bossAQ->swork[AQ_SWK_8] != 0) && (bossAQ->health != 0) &&
+ (bossAQ->swork[AQ_SWK_6] == 0)) {
+ D_i3_801C42A0[10] = D_i3_801C42A0[16] = 0;
+ bossAQ->swork[AQ_SWK_6] = 1;
+ }
+ if ((bossAQ->swork[AQ_SWK_3] == 1) && (bossAQ->swork[AQ_SWK_9] != 0) && (bossAQ->health != 0) &&
+ (bossAQ->swork[AQ_SWK_7] == 0)) {
+ D_i3_801C42A0[11] = D_i3_801C42A0[17] = 0;
+ bossAQ->swork[AQ_SWK_7] = 2;
+ }
+ if (bossAQ->health != 0) {
+ for (i7 = 0; i7 < 2; i7++) {
+ if (bossAQ->swork[AQ_SWK_6 + i7] != 0) {
+ i2 = bossAQ->swork[AQ_SWK_4 + i7];
+ Math_SmoothStepToF(&D_i3_801C4308[52 + i7], D_i3_801C00B0[0][i2], D_i3_801C00F0[0][i2],
+ D_i3_801C0120[0][i2], 0.00001f);
+ Math_SmoothStepToF(&D_i3_801C4308[59 + i7], D_i3_801C00B0[1][i2], D_i3_801C00F0[1][i2],
+ D_i3_801C0120[1][i2], 0.00001f);
+ Math_SmoothStepToF(&D_i3_801C4308[66 + i7], D_i3_801C00B0[2][i2], D_i3_801C00F0[2][i2],
+ D_i3_801C0120[2][i2], 0.00001f);
+ D_i3_801C42A0[i7 + 10]++;
+ if (D_i3_801C42A0[i7 + 10] >= D_i3_801C00E0[i2]) {
+ bossAQ->swork[AQ_SWK_4 + i7]++;
+ if (bossAQ->swork[AQ_SWK_4 + i7] == 2) {
+ i = 4;
+ if (D_i3_801C42A0[23] == 0) {
+
+ i = ((160 - bossAQ->health) / 10) + 10;
+ if (bossAQ->health < 31) {
+ i += 10;
+ }
+ if (i > 40) {
+ i = 40;
+ }
+ }
+ spD4.x = D_i3_801C4308[73 + 3 * i7];
+ spD4.y = D_i3_801C4308[74 + 3 * i7];
+ spD4.z = D_i3_801C4308[75 + 3 * i7];
+ func_8007A6F0(&spD4, 0x2903404B);
+ i2 = 0;
+ for (i3 = 0; i2 <= i && i3 < 60; i3++) {
+ if ((gActors[i3].obj.status == OBJ_FREE) && (i3 < 60)) {
+ Actor_Initialize(&gActors[i3]);
+
+ gActors[i3].obj.status = OBJ_INIT;
+ gActors[i3].obj.id = OBJ_ACTOR_258;
+ gActors[i3].obj.pos.x = D_i3_801C4308[73 + 3 * i7];
+ gActors[i3].obj.pos.y = D_i3_801C4308[74 + 3 * i7] + 30.0f;
+ gActors[i3].obj.pos.z = D_i3_801C4308[75 + 3 * i7] + 150.0f;
+ if (Rand_ZeroOne() < 0.5f) {
+ var_fs1 = Math_ModF(D_i3_801C4308[i7 + 16] + RAND_FLOAT_CENTERED(60.0f), 360.0f);
+ var_fs0 = Math_ModF(D_i3_801C4308[i7 + 18] + RAND_FLOAT_CENTERED(60.0f), 360.0f);
+ if (bossAQ->health < 61) {
+ if (i7 == 0) {
+ var_fs1 =
+ Math_ModF(D_i3_801C4308[i7 + 16] + RAND_FLOAT_CENTERED(30.0f), 360.0f);
+ var_fs0 = Math_ModF(
+ D_i3_801C4308[i7 + 18] - 30.0f + RAND_FLOAT_CENTERED(20.0f), 360.0f);
+ } else {
+ var_fs1 =
+ Math_ModF(D_i3_801C4308[i7 + 16] + RAND_FLOAT_CENTERED(30.0f), 360.0f);
+ var_fs0 = Math_ModF(
+ D_i3_801C4308[i7 + 18] + 30.0f + RAND_FLOAT_CENTERED(20.0f), 360.0f);
+ }
+ }
+ } else {
+ var_fs1 = Math_ModF(D_i3_801C4308[i7 + 16] + RAND_FLOAT_CENTERED(30.0f), 360.0f);
+ var_fs0 = Math_ModF(D_i3_801C4308[i7 + 18] + RAND_FLOAT_CENTERED(30.0f), 360.0f);
+ }
+ gActors[i3].fwork[3] = var_fs1;
+ gActors[i3].fwork[4] = var_fs0;
+ // gActors[i3].timer_0BC = i2 * 3;
+ gActors[i3].timer_0BC = i2;
+ gActors[i3].timer_0BC *= 3; // nonmatching, but helps elsewhere
+ gActors[i3].fwork[1] = D_i3_801C4308[i7 + 16];
+ gActors[i3].fwork[2] = D_i3_801C4308[i7 + 18];
+ Object_SetInfo(&gActors[i3].info, gActors[i3].obj.id);
+ if (i3 >= 60) {
+ gActors[i3].obj.status = OBJ_FREE;
+ }
+ i2++;
+ }
+ }
+ }
+ if (bossAQ->swork[AQ_SWK_4 + i7] >= 4) {
+ D_i3_801C42A0[10 + i7] = bossAQ->swork[AQ_SWK_6 + i7] = bossAQ->swork[AQ_SWK_4 + i7] = 0;
+ }
+ }
+ }
+ }
+ }
+ for (i7 = 26; i7 < 107; i7 += 10) {
+ var_fs0 = D_i3_801C4308[10] - 10;
+ if (fabsf(D_i3_801C4308[10]) <= 5.0f) {
+ var_fs0 = 0.0f;
+ }
+ bossAQ->info.hitbox[i7] = var_fs0;
+ }
+ if (bossAQ->state >= 10) {
+ sp110 = D_i3_801C42A0[9];
+ i2 = (gGameFrameCount & 0x1F);
+ if (sBossAQlimbTimers[AQ_LIMB_9] != 0) {
+ Math_SmoothStepToF(&sp110, 255.0f, 1.0f, 10, 0.0001f);
+ } else if (!(i2 & 0x10)) {
+ Math_SmoothStepToF(&sp110, D_i3_801C005C, 1.0f, 10, 0.0001f);
+ } else {
+ Math_SmoothStepToF(&sp110, D_i3_801C0058, 1.0f, 10, 0.0001f);
+ }
+ D_i3_801C42A0[9] = sp110;
+ }
+ if (D_i3_801C42A0[7] != 0) {
+ Math_SmoothStepToF(&D_801779A8[0], 20.0f, 1.0f, 5.0f, 0);
+ }
+ for (i2 = 45, i3 = 1, i7 = 0; i7 < 14; i3++, i2++, i7 += 2) {
+ if (D_i3_801C42A0[i3] != 0) {
+ D_i3_801C4308[i2] = SIN_DEG(D_i3_801C0060[i7 + 0] * D_i3_801C42A0[i3]) *
+ func_i3_801A958C(D_i3_801C42A0[i3], D_i3_801C0060[i7 + 1]);
+ D_i3_801C42A0[i3]--;
+ }
+ }
+ if (bossAQ->swork[AQ_SWK_12] != 0) {
+ if (D_i3_801C42A0[3] != 0) {
+ var_fs3 = 1.0f;
+ if (D_i3_801C42A0[22] < 4) {
+ var_fs3 = 1.2f;
+ }
+ Math_SmoothStepToF(&D_i3_801C4308[54], var_fs3, 0.3f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[61], var_fs3, 0.3f, 1.0f, 0.0f);
+ D_i3_801C42A0[22]++;
+ if (D_i3_801C42A0[22] >= 9) {
+ D_i3_801C42A0[22] = 0;
+ }
+ }
+ } else {
+ D_i3_801C42A0[3] = 10;
+ if (bossAQ->swork[AQ_SWK_13] != 0) {
+ Math_SmoothStepToF(&D_i3_801C4308[54], 0.0f, 0.3f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[61], 0.0f, 0.3f, 0.5f, 0.0f);
+ bossAQ->info.hitbox[119] = -10000.0f;
+ if (bossAQ->swork[AQ_SWK_13] == 1) {
+ Audio_PlaySfx(0x29409051, bossAQ->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ } else if ((bossAQ->health != 0) || (bossAQ->state < 16)) {
+ Math_SmoothStepToF(&D_i3_801C4308[54], 1.0f, 0.3f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[61], 1.0f, 0.3f, 0.5f, 0.0f);
+ if (D_i3_801C4308[61] >= 0.9f) {
+ bossAQ->swork[AQ_SWK_12] = 10;
+ bossAQ->info.hitbox[119] = 1028.0f;
+ }
+ } else {
+ Math_SmoothStepToF(&D_i3_801C4308[54], 0, 0.1f, 10, 0);
+ Math_SmoothStepToF(&D_i3_801C4308[61], 0, 0.1f, 10.0f, 0);
+ D_i3_801C42A0[9] -= 5;
+ if (D_i3_801C42A0[9] < 0) {
+ D_i3_801C42A0[9] = 0;
+ }
+ }
+ }
+ if ((D_i3_801C42A0[7] != 0) || (bossAQ->state >= 16)) {
+ var_fs3 = 0.25f;
+ } else {
+ var_fs3 = 1.0f;
+ }
+ Math_SmoothStepToF(&D_i3_801C4308[58], var_fs3, 0.3f, 1.0f, 0);
+ for (i3 = 0; i3 < 2; i3++) {
+ if (bossAQ->swork[AQ_SWK_8 + i3] == 0) {
+ if (bossAQ->swork[AQ_SWK_10 + i3] == 1) {
+ spD4.x = D_i3_801C4308[73 + 3 * i3];
+ spD4.y = D_i3_801C4308[74 + 3 * i3];
+ spD4.z = D_i3_801C4308[75 + 3 * i3];
+ func_8007A6F0(&spD4, 0x29400052);
+ }
+ if ((fabsf(D_i3_801C4308[10]) <= 3.0f) || (bossAQ->swork[AQ_SWK_10 + i3] == 0)) {
+ Math_SmoothStepToF(&D_i3_801C4308[52 + i3], 1.0f, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[59 + i3], 1.0f, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[66 + i3], 1.0f, 0.1f, 0.5f, 0.0f);
+ if (D_i3_801C4308[i3 + 66] >= 0.9f) {
+ for (i = 0; i < 3; i++) {
+ spD4.x = D_i3_801C4308[73 + 3 * i3] + RAND_FLOAT(i * 200.0f);
+ spD4.y = D_i3_801C4308[74 + 3 * i3] + RAND_FLOAT(i * 200.0f);
+ spD4.z = D_i3_801C4308[75 + 3 * i3] + RAND_FLOAT(i * 400.0f);
+ func_i3_801A94EC(&spD4, OBJ_ITEM_SILVER_RING);
+ }
+ bossAQ->swork[AQ_SWK_8 + i3] = 2;
+ }
+ } else {
+ Math_SmoothStepToF(&D_i3_801C4308[52 + i3], 0, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[59 + i3], 0, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&D_i3_801C4308[66 + i3], 0, 0.1f, 0.5f, 0.0f);
+ D_i3_801C42A0[i3 + 1] = 50;
+ }
+ }
+ }
+ if (bossAQ->swork[AQ_SWK_2] != 0) {
+ bossAQ->swork[AQ_SWK_2]--;
+ }
+ if (bossAQ->swork[AQ_SWK_3] != 0) {
+ bossAQ->swork[AQ_SWK_3]--;
+ }
+ if (bossAQ->swork[AQ_SWK_10] != 0) {
+ bossAQ->swork[AQ_SWK_10]--;
+ }
+ if (bossAQ->swork[AQ_SWK_11] != 0) {
+ bossAQ->swork[AQ_SWK_11]--;
+ }
+ if (bossAQ->swork[AQ_SWK_13] != 0) {
+ bossAQ->swork[AQ_SWK_13]--;
+ }
+ if (bossAQ->swork[AQ_SWK_17] != 0) {
+ bossAQ->swork[AQ_SWK_17]--;
+ }
+ if (bossAQ->swork[AQ_SWK_19] != 0) {
+ bossAQ->swork[AQ_SWK_19]--;
+ }
+ if (bossAQ->swork[AQ_SWK_26] == gBossFrameCount) {
+ gShowBossHealth = true;
+ }
+ if (bossAQ->swork[AQ_SWK_26] < gBossFrameCount) {
+ gBossHealthBar = (bossAQ->health / 150.0f) * 255.0f;
+ }
+}
+#else
+void func_i3_801B134C(Boss* bossAQ);
+#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_aq/func_i3_801B134C.s")
+#endif
+
+bool func_i3_801B42AC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx) {
+ Vec3f sp6C = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp60;
+ f32 sp5C = 0.0f;
+ f32 sp58 = 0.0f;
+ f32 sp54 = 0.0f;
+ s32 sp50 = false;
+ Boss* this = thisx;
+
+ if (sBossAQlimbTimers[limbIndex] >= 1000) {
+ *dList = NULL;
+ } else if ((sBossAQlimbTimers[limbIndex] != 0) && (D_80177854 != 100)) {
+ sBossAQlimbTimers[limbIndex]--;
+ }
+ gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
+ if ((D_i3_801C42A0[0] != 255) && (limbIndex != 27)) {
+ RCP_SetupDL(&gMasterDisp, 0x3A);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, D_i3_801C42A0[0]);
+ } else if (!(sBossAQlimbTimers[limbIndex] & 1)) {
+ RCP_SetupDL(&gMasterDisp, 0x39);
+ } else {
+ sp50 = true;
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ switch (limbIndex) {
+ case AQ_LIMB_4:
+ rot->x = D_i3_801C4308[13];
+ sp5C = this->fwork[AQ_FWK_8];
+ sp58 = this->fwork[AQ_FWK_9];
+ sp54 = this->fwork[AQ_FWK_10];
+ break;
+ case AQ_LIMB_5:
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, gBosses[0].swork[AQ_SWK_14], gBosses[0].swork[AQ_SWK_15],
+ gBosses[0].swork[AQ_SWK_16], 255);
+ rot->x = D_i3_801C4308[14];
+ rot->y = D_i3_801C4308[15];
+ pos->z = 40.0f;
+ sp5C = D_i3_801C4308[58];
+ sp58 = D_i3_801C4308[65];
+ sp54 = D_i3_801C4308[72];
+ break;
+ case AQ_LIMB_6:
+ rot->x = D_i3_801C4308[12];
+ sp5C = this->fwork[AQ_FWK_8];
+ sp58 = this->fwork[AQ_FWK_9];
+ sp54 = this->fwork[AQ_FWK_10];
+ break;
+ case AQ_LIMB_7:
+ rot->x = D_i3_801C4308[16];
+ rot->y = D_i3_801C4308[18];
+ rot->x += D_i3_801C4308[45];
+ rot->y += D_i3_801C4308[45];
+ rot->z += D_i3_801C4308[45];
+ sp5C = D_i3_801C4308[52];
+ sp58 = D_i3_801C4308[59];
+ sp54 = D_i3_801C4308[66];
+ break;
+ case AQ_LIMB_8:
+ rot->x = D_i3_801C4308[17];
+ rot->y = D_i3_801C4308[19];
+ rot->x += D_i3_801C4308[46];
+ rot->y += D_i3_801C4308[46];
+ rot->z += D_i3_801C4308[46];
+ sp5C = D_i3_801C4308[53];
+ sp58 = D_i3_801C4308[60];
+ sp54 = D_i3_801C4308[67];
+ break;
+ case AQ_LIMB_9:
+ rot->x += D_i3_801C4308[47];
+ rot->y += D_i3_801C4308[47];
+ rot->z += D_i3_801C4308[47];
+ sp5C = D_i3_801C4308[54];
+ sp58 = D_i3_801C4308[61];
+ sp54 = D_i3_801C4308[68];
+ if (sp50) {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ if (gBosses[0].health != 0) {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ } else {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ }
+ break;
+ case AQ_LIMB_10:
+ rot->x += D_i3_801C4308[48];
+ rot->y += D_i3_801C4308[48];
+ rot->z += D_i3_801C4308[48];
+ sp5C = D_i3_801C4308[55];
+ sp58 = D_i3_801C4308[62];
+ sp54 = D_i3_801C4308[69];
+ break;
+ case AQ_LIMB_12:
+ rot->x = D_i3_801C4308[14];
+ rot->y = D_i3_801C4308[15];
+ sp5C = this->fwork[AQ_FWK_8];
+ sp58 = this->fwork[AQ_FWK_9];
+ sp54 = this->fwork[AQ_FWK_10];
+ break;
+ case AQ_LIMB_15:
+ rot->x += D_i3_801C4308[49];
+ rot->y += D_i3_801C4308[49];
+ rot->z += D_i3_801C4308[49];
+ sp5C = D_i3_801C4308[56];
+ sp58 = D_i3_801C4308[63];
+ sp54 = D_i3_801C4308[70];
+ break;
+ case AQ_LIMB_18:
+ rot->y += D_i3_801C4308[50];
+ rot->z += D_i3_801C4308[50];
+ sp5C = D_i3_801C4308[57];
+ sp58 = D_i3_801C4308[64];
+ sp54 = D_i3_801C4308[71];
+ break;
+ case AQ_LIMB_22:
+ rot->x += D_i3_801C4308[51];
+ rot->y += D_i3_801C4308[51];
+ rot->z += D_i3_801C4308[51];
+ sp5C = this->fwork[AQ_FWK_8];
+ sp58 = this->fwork[AQ_FWK_9];
+ sp54 = this->fwork[AQ_FWK_10];
+ break;
+ case AQ_LIMB_24:
+ rot->x = D_i3_801C4308[10];
+ rot->z = D_i3_801C4308[11];
+ break;
+ case AQ_LIMB_27:
+ break;
+ }
+ if (sp5C > 0.0f) {
+ Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
+ Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
+ Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
+ Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
+ if (*dList != NULL) {
+ Matrix_MultVec3f(gCalcMatrix, &sp6C, &sp60);
+ func_8005F670(&sp60);
+ Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Scale(gGfxMatrix, sp5C, sp58, sp54, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, *dList);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ return true;
+ }
+ return false;
+}
+
+void func_i3_801B49DC(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp6C;
+ Vec3f sp60 = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp54 = { 340.0f, 600.0f, 1480.0f };
+ Vec3f sp48 = { -640.0f, 380.0f, 1520.0f };
+ Vec3f sp3C = { 760.0f, 340.0f, 1560.0f };
+ Vec3f sp30 = { 130.0f, 350.0f, 130.0f };
+ Vec3f sp24 = { -130.0f, 350.0f, 130.0f };
+
+ switch (limbIndex) {
+ case AQ_LIMB_5:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[21] = sp6C.x;
+ D_i3_801C4308[22] = sp6C.y;
+ D_i3_801C4308[23] = sp6C.z;
+ break;
+ case AQ_LIMB_7:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[24] = sp6C.x;
+ D_i3_801C4308[25] = sp6C.y;
+ D_i3_801C4308[26] = sp6C.z;
+ Matrix_MultVec3f(gCalcMatrix, &sp30, &sp6C);
+ D_i3_801C4308[73] = sp6C.x;
+ D_i3_801C4308[74] = sp6C.y;
+ D_i3_801C4308[75] = sp6C.z;
+ break;
+ case AQ_LIMB_8:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[27] = sp6C.x;
+ D_i3_801C4308[28] = sp6C.y;
+ D_i3_801C4308[29] = sp6C.z;
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &sp6C);
+ D_i3_801C4308[76] = sp6C.x;
+ D_i3_801C4308[77] = sp6C.y;
+ D_i3_801C4308[78] = sp6C.z;
+ break;
+ case AQ_LIMB_9:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[30] = sp6C.x;
+ D_i3_801C4308[31] = sp6C.y;
+ D_i3_801C4308[32] = sp6C.z;
+ break;
+ case AQ_LIMB_10:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[33] = sp6C.x;
+ D_i3_801C4308[34] = sp6C.y;
+ D_i3_801C4308[35] = sp6C.z;
+ break;
+ case AQ_LIMB_15:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[36] = sp6C.x;
+ D_i3_801C4308[37] = sp6C.y;
+ D_i3_801C4308[38] = sp6C.z;
+ break;
+ case AQ_LIMB_18:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[39] = sp6C.x;
+ D_i3_801C4308[40] = sp6C.y;
+ D_i3_801C4308[41] = sp6C.z;
+ break;
+ case AQ_LIMB_22:
+ Matrix_MultVec3f(gCalcMatrix, &sp60, &sp6C);
+ D_i3_801C4308[42] = sp6C.x;
+ D_i3_801C4308[43] = sp6C.y;
+ D_i3_801C4308[44] = sp6C.z;
+ break;
+ case AQ_LIMB_24:
+ Matrix_MultVec3f(gCalcMatrix, &sp54, &sp6C);
+ D_i3_801C4308[1] = sp6C.x;
+ D_i3_801C4308[4] = sp6C.y;
+ D_i3_801C4308[7] = sp6C.z;
+ Matrix_MultVec3f(gCalcMatrix, &sp48, &sp6C);
+ D_i3_801C4308[2] = sp6C.x;
+ D_i3_801C4308[5] = sp6C.y;
+ D_i3_801C4308[8] = sp6C.z;
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &sp6C);
+ D_i3_801C4308[3] = sp6C.x;
+ D_i3_801C4308[6] = sp6C.y;
+ D_i3_801C4308[9] = sp6C.z;
+ break;
+ case AQ_LIMB_27:
+ break;
+ }
+}
+
+// OBJ_BOSS_AQ draw
+void func_i3_801B4D84(Boss* bossAQ) {
+ Animation_DrawSkeleton(3, D_602BD60, bossAQ->vwork, func_i3_801B42AC, func_i3_801B49DC, bossAQ, gCalcMatrix);
+}
+
+f32 D_i3_801C01F8[11] = {
+ 400.0f, 430.0f, 460.0f, 490.0f, 520.0f, 550.0f, 580.0f, 610.0f, 640.0f, 670.0f, 700.0f,
+};
+f32 D_i3_801C0224[11] = {
+ 6.0f, 6.0f, 8.0f, 8.0f, 8.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f,
+};
+Vec3f D_i3_801C0250 = { 0.0f, 0.0f, 0.0f };
+
+s32 func_i3_801B4DDC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx) {
+ Actor* this = thisx;
+
+ if (!(this->timer_0C6 & 1)) {
+ RCP_SetupDL(&gMasterDisp, 0x39);
+ if ((limbIndex > 0) && (limbIndex < 5)) {
+ RCP_SetupDL(&gMasterDisp, 0x3C);
+ }
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ return false;
+}
+
+void func_i3_801B4E94(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp24 = D_i3_801C0250;
+ Actor* this = thisx;
+
+ if (this->health == 0) {
+ switch (limbIndex) {
+ case 1:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, this->vwork);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[8]);
+ break;
+ case 2:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[1]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[9]);
+ break;
+ case 3:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[2]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[10]);
+ break;
+ case 4:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[3]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[11]);
+ break;
+ case 5:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[4]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[12]);
+ break;
+ case 6:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[5]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[13]);
+ break;
+ case 7:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[6]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[14]);
+ break;
+ case 8:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[7]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[15]);
+ break;
+ }
+ }
+}
+
+// OBJ_ACTOR_261 draw
+void func_i3_801B504C(Actor* actor) {
+ Vec3f sp30[30];
+
+ Matrix_Scale(gCalcMatrix, actor->scale, actor->scale, actor->scale, 1);
+ Animation_GetFrameData(&D_6005954, actor->unk_0B6, sp30);
+ Animation_DrawSkeleton(3, D_6005A80, sp30, func_i3_801B4DDC, func_i3_801B4E94, actor, gCalcMatrix);
+}
+
+f32 D_i3_801C025C[2] = { 120.0f, 0.0f };
+s32 D_i3_801C0264[19] = {
+ 0, 0, 3, 4, 0, 5, 6, 7, 1, 2, 0, 0, 0, 0, 0, 0, 8, 9, 0,
+};
+
+// OBJ_ACTOR_261 action
+void func_i3_801B50E8(Actor* actor) {
+ s32 i;
+ Vec3f sp88;
+ Vec3f sp7C;
+ Vec3f sp70;
+ Actor* var_v0;
+
+ if ((actor->health == 0) && (actor->state != 0)) {
+ for (i = 0; i < 5; i++) {
+ func_80081A8C(actor->obj.pos.x + RAND_FLOAT(i * 15.0f), actor->obj.pos.y + RAND_FLOAT(i * 3.0f),
+ actor->obj.pos.z + RAND_FLOAT(i * 5.0f), 0.4f + RAND_FLOAT(0.4f), 7);
+ }
+ actor->health = 0;
+ actor->state = 7;
+ func_8007A6F0(&actor->obj.pos, 0x29038090);
+ }
+ switch (actor->state) {
+ case 0:
+ for (i = 0; i < 8; i++) {
+ actor->vwork[i].x = actor->obj.pos.x;
+ actor->vwork[i].y = actor->obj.pos.y;
+ actor->vwork[i].z = actor->obj.pos.z;
+ actor->vwork[8 + i].x = actor->obj.rot.x;
+ actor->vwork[8 + i].y = actor->obj.rot.y;
+ actor->vwork[8 + i].z = actor->obj.rot.z;
+ }
+ actor->info.bonus = 0;
+ actor->health = 10;
+ actor->fwork[4] = 1000.0f + RAND_FLOAT_CENTERED(400.0f);
+ actor->state++;
+ break;
+ case 2:
+ Math_SmoothStepToF(&actor->obj.pos.z, gPlayer[0].unk_138, 1.0f, 10.0f, 0);
+ if (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < actor->fwork[4]) {
+ func_i3_801A9728(actor, 50.0f, 10.0f, 8);
+ actor->state = 3;
+ actor->vel.y = 30.0f;
+ } else if (!(gGameFrameCount & 0xF)) {
+ func_8007B8F8(actor->obj.pos.x, gGroundLevel + 30.0f, actor->obj.pos.z, 10.0f);
+ }
+ break;
+ case 3:
+ Math_SmoothStepToAngle(&actor->obj.rot.x, 270.0f, 1.0f, 100.0f, 0.0001f);
+ if (actor->obj.rot.x == 270.0f) {
+ actor->iwork[1] = RAND_FLOAT(10.0f);
+ actor->fwork[0] = D_i3_801C01F8[actor->iwork[1]];
+ actor->state = 4;
+ }
+ break;
+ case 4:
+ Math_SmoothStepToF(&actor->vel.y, 0.0f, 1.0f, 4.0f, 0.0001f);
+ actor->vel.z = gPlayer[0].vel.z;
+ Math_SmoothStepToF(&actor->obj.pos.z, gPlayer[0].unk_138 - actor->fwork[4], 0.1f, 100.0f, 0);
+ Math_SmoothStepToF(&actor->obj.pos.y, actor->fwork[0], 1.0f, D_i3_801C0224[actor->iwork[1]], 0);
+ actor->fwork[1] += 10.0f;
+ actor->vel.x = COS_DEG(actor->fwork[1]) * actor->iwork[1] * 0.1f;
+ if ((actor->fwork[0] - 1.0f) <= actor->obj.pos.y) {
+ actor->state = 5;
+ }
+ if (!(gGameFrameCount & 7)) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(100.0f),
+ actor->obj.pos.y + RAND_FLOAT_CENTERED(100.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(100.0f), 1.0f, 1);
+ }
+ break;
+ case 5:
+ actor->vel.z = gPlayer[0].vel.z;
+ Math_SmoothStepToF(&actor->obj.pos.z, gPlayer[0].unk_138 - 1000.0f, 0.1f, 100.0f, 0);
+ Math_SmoothStepToF(&actor->vel.x, 0.0f, 1.0f, 2.0f, 0.001f);
+ Math_SmoothStepToAngle(&actor->obj.rot.x, D_i3_801C025C[actor->iwork[0]], 1.0f, 20.0f, 0);
+ if (actor->obj.rot.x == D_i3_801C025C[actor->iwork[0]]) {
+ actor->iwork[0]++;
+ if (actor->iwork[0] >= 2) {
+ sp88.x = gPlayer[0].pos.x - actor->obj.pos.x;
+ sp88.y = gPlayer[0].pos.y - actor->obj.pos.y;
+ sp88.z = gPlayer[0].unk_138 - actor->obj.pos.z;
+ actor->fwork[2] = Math_RadToDeg(Math_Atan2F(sp88.x, sp88.z));
+ actor->fwork[3] = Math_RadToDeg(-Math_Atan2F(sp88.y, sqrtf(SQ(sp88.x) + SQ(sp88.z))));
+ Matrix_RotateY(gCalcMatrix, actor->fwork[2] * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->fwork[3] * M_DTOR, 1);
+ sp7C.x = sp7C.y = 0.0f;
+ sp7C.z = 40.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp7C, &sp70);
+ actor->vel.x = sp70.x;
+ actor->vel.y = sp70.y;
+ actor->vel.z = sp70.z;
+ actor->state = 6;
+ }
+ }
+ break;
+ case 6:
+ Math_SmoothStepToAngle(&actor->obj.rot.x, actor->fwork[3], 1.0f, 5.0f, 0);
+ Math_SmoothStepToAngle(&actor->obj.rot.y, actor->fwork[2], 1.0f, 5.0f, 0);
+ if (!(gGameFrameCount & 3)) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(100.0f),
+ actor->obj.pos.y + RAND_FLOAT_CENTERED(100.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(100.0f), 1.0f, 1);
+ }
+ break;
+ case 7:
+ for (i = 0; i < 8; i++) {
+ func_i3_801A9448(&actor->vwork[i], &actor->vwork[8 + i], RAND_FLOAT_CENTERED(20.0f), RAND_FLOAT(5.0f),
+ RAND_FLOAT_CENTERED(10.0f), 49, actor->scale, 200, i);
+ func_8007BC7C(actor->vwork[i].x, actor->vwork[i].y, actor->vwork[i].z + 100.0f, 6.0f);
+ }
+ actor->unk_044 = 0;
+ func_80066254(actor);
+ func_800815DC();
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 6.0f);
+ break;
+ }
+ if (actor->state >= 2) {
+ if (actor->state < 3) {
+ actor->unk_0B6++;
+ } else {
+ actor->unk_0B6 += 3;
+ }
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6005954)) {
+ actor->unk_0B6 = 0;
+ }
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if (actor->health != 0) {
+ if (actor->damage == 31) {
+ actor->info.bonus = 1;
+ actor->health -= actor->damage;
+ if (actor->health <= 0) {
+ actor->health = 0;
+ }
+ } else if (actor->damage == 30) {
+ for (i = 0, var_v0 = gActors; i < 60; i++, var_v0++) {
+ if ((var_v0->obj.status == OBJ_ACTIVE) && (var_v0->obj.id == OBJ_ACTOR_261) &&
+ (var_v0->state == 1) && (i != actor->index) &&
+ (fabsf(var_v0->obj.pos.x - actor->obj.pos.x) <= 300.0f) &&
+ (fabsf(var_v0->obj.pos.z - actor->obj.pos.z) <= 300.0f)) {
+ var_v0->state = 2;
+ }
+ }
+ } else if ((actor->state >= 3) && (actor->state < 5)) {
+ actor->info.bonus = 1;
+ actor->timer_0C6 = 15;
+ actor->health -= actor->damage;
+ if (actor->health <= 0) {
+ actor->health = 0;
+ }
+ }
+ }
+ }
+}
+
+s32 func_i3_801B5C18(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx) {
+ f32 sp6C = 1.0f;
+ f32 sp68 = 1.0f;
+ f32 sp64 = 1.0f;
+ Vec3f sp58;
+ Vec3f sp4C = { 0.0f, 0.0f, 0.0f };
+ Actor* this = thisx;
+
+ if (!(this->timer_0C6 & 1)) {
+ RCP_SetupDL(&gMasterDisp, 0x39);
+ } else if ((limbIndex < 7) || (limbIndex >= 9)) {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ switch (limbIndex) {
+ case 7:
+ RCP_SetupDL(&gMasterDisp, 0x40);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, (s32) this->fwork[4]);
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+ sp6C = this->fwork[1];
+ sp68 = this->fwork[2];
+ sp64 = this->fwork[3];
+ break;
+ case 8:
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, (s32) this->fwork[4]);
+ break;
+ }
+ if (sp6C != 1.0f) {
+ Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
+ Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
+ Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
+ Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
+ if (*dList != NULL) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &sp58);
+ func_8005F670(&sp58);
+ Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Scale(gGfxMatrix, sp6C, sp68, sp64, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, *dList);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ return true;
+ }
+ return false;
+}
+
+void func_i3_801B5F68(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp3C = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp30;
+ Vec3f sp24;
+ Actor* this = thisx;
+
+ if ((this->health == 0) || (limbIndex == 7)) {
+ switch (limbIndex) {
+ case 1:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[0]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[9]);
+ break;
+ case 2:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[1]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[10]);
+ break;
+ case 3:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[2]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[11]);
+ break;
+ case 4:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[3]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[12]);
+ break;
+ case 5:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[4]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[13]);
+ break;
+ case 6:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[5]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[14]);
+ break;
+ case 7:
+ sp30.x = this->fwork[11];
+ sp30.y = 0.0f;
+ sp30.z = 0.0f;
+ Matrix_MultVec3f(gCalcMatrix, &sp30, &sp24);
+ this->fwork[8] = sp24.x;
+ this->fwork[9] = gGroundLevel;
+ this->fwork[10] = sp24.z;
+ break;
+ case 8:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[6]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[15]);
+ break;
+ case 9:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[7]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[16]);
+ break;
+ case 16:
+ Matrix_MultVec3f(gCalcMatrix, &sp3C, &this->vwork[8]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[17]);
+ break;
+ }
+ }
+}
+
+f32 D_i3_801C02C8[2] = { 255.0f, 68.0f };
+s32 D_i3_801C02D0[2] = { 70, 100 };
+
+// OBJ_ACTOR_259 draw
+void func_i3_801B619C(Actor* actor) {
+ Vec3f sp40[30];
+
+ Matrix_Push(&gCalcMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Scale(gCalcMatrix, actor->scale, actor->scale, actor->scale, 1);
+ Animation_GetFrameData(&D_6002628, actor->unk_0B6, sp40);
+ Animation_DrawSkeleton(3, D_6002874, sp40, func_i3_801B5C18, func_i3_801B5F68, actor, gCalcMatrix);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Pop(&gCalcMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, actor->fwork[8], actor->fwork[9], actor->fwork[10], 1);
+ Matrix_Scale(gGfxMatrix, actor->fwork[5], actor->fwork[6], actor->fwork[7], 1);
+ RCP_SetupDL(&gMasterDisp, 0x31);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, (s32) actor->iwork[12]);
+ gDPSetEnvColor(gMasterDisp++, 127, 127, 0, (s32) actor->iwork[12]);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_1024AC0);
+ Matrix_Pop(&gGfxMatrix);
+}
+
+void func_i3_801B6344(Actor* actor) {
+ actor->health = 200;
+ actor->iwork[13] = actor->fwork[4] = 255.0f;
+ actor->fwork[12] = actor->obj.rot.y;
+ actor->iwork[14] = actor->iwork[16] = actor->obj.rot.z;
+}
+
+#ifdef NON_MATCHING
+// annoying float reg swap around 3880
+void func_i3_801B638C(Actor* actor) {
+ Actor* var_v0;
+ s32 i;
+ f32 spB4;
+ f32 temp_dz;
+ f32 temp_fscc;
+ f32 temp_ryr;
+ f32 temp_fsc;
+ f32 temp2;
+ f32 temp_dx;
+
+ f32 sp98;
+ Vec3f sp8C;
+ Vec3f sp80;
+ f32 var_rxd;
+
+ if (actor->health == 0) {
+ for (i = 0; i < 9; i++) {
+ func_i3_801A9448(&actor->vwork[i], &actor->vwork[9 + i], RAND_FLOAT_CENTERED(20.0f), RAND_FLOAT(5.0f),
+ RAND_FLOAT_CENTERED(10.0f), 48, actor->scale, 200, i);
+ func_8007BC7C(actor->vwork[i].x, actor->vwork[i].y, actor->vwork[i].z, 10.0f);
+ }
+ func_800815DC();
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 150.0f, 10.0f);
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 150.0f, 10.0f);
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 150.0f, 10.0f);
+ for (i = 0; i < 5; i++) {
+ func_80081A8C(actor->obj.pos.x + RAND_FLOAT(i * 15.0f), actor->obj.pos.y + RAND_FLOAT(i * 3.0f),
+ actor->obj.pos.z + RAND_FLOAT(i * 5.0f), 1.0f + RAND_FLOAT(1.0f), 7);
+ }
+ actor->unk_044 = 2;
+ if (actor->iwork[16] != 0) {
+ actor->unk_044 = 14;
+ }
+ func_80066254(actor);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ Audio_PlaySfx(0x1903001D, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_8007A6F0(&actor->obj.pos, 0x29038090);
+ }
+ actor->fwork[5] = (actor->obj.pos.y * 0.01f) + 2.5f;
+ actor->fwork[6] = (actor->obj.pos.y * 0.003f) + 0.8f;
+ actor->fwork[7] = (actor->obj.pos.y * 0.001f) + 0.8f;
+ actor->iwork[12] = (actor->obj.pos.y * -0.24f) + 150.0f;
+ if (actor->iwork[12] < 30.0f) {
+ actor->iwork[12] = 30;
+ }
+
+ actor->fwork[1] = (actor->obj.pos.y * 0.0032f) + 1.0f;
+ actor->fwork[2] = (actor->obj.pos.y * 0.0032f) + 1.5f;
+ actor->fwork[3] = (actor->obj.pos.y * 0.0032f) + 2.0f;
+ actor->fwork[11] = actor->obj.pos.y + 300.0f;
+ if (actor->fwork[11] > 1200.0f) {
+ actor->fwork[11] = 1200.0f;
+ }
+ actor->unk_0B6++;
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6002628)) {
+ actor->unk_0B6 = 0;
+ }
+ switch (actor->state) {
+ case 0:
+ for (i = 0; i < 9; i++) {
+ actor->vwork[0 + i].x = actor->obj.pos.x;
+ actor->vwork[0 + i].y = actor->obj.pos.y;
+ actor->vwork[0 + i].z = actor->obj.pos.z;
+ actor->vwork[9 + i].x = actor->obj.rot.x;
+ actor->vwork[9 + i].y = actor->obj.rot.y;
+ actor->vwork[9 + i].z = actor->obj.rot.z;
+ }
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ sp8C.x = sp8C.y = 0.0f;
+ sp8C.z = -1400.0f;
+ if (actor->iwork[14] != 0) {
+ sp8C.z = -5000.0f;
+ }
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp8C, &sp80);
+ actor->fwork[15] = actor->obj.pos.x + sp80.x;
+ actor->fwork[16] = actor->obj.pos.z + sp80.z;
+ actor->state = 1;
+
+ break;
+ case 1:
+ if (actor->timer_0BC == 1) {
+ actor->iwork[15] = 1;
+ }
+ if (actor->iwork[15] != 0) {
+ if ((gPlayer[0].unk_138 + 300.0f) < actor->obj.pos.z) {
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ } else {
+ if (!(gGameFrameCount & 1)) {
+ for (i = 0, var_v0 = gActors; i < 60; i++, var_v0++) {
+ if ((var_v0->obj.status == OBJ_ACTIVE) && (var_v0->obj.id == OBJ_ACTOR_261) &&
+ (var_v0->state == 1) &&
+ (fabsf(var_v0->obj.pos.x - actor->fwork[8]) <= (actor->fwork[5] * 48.0f)) &&
+ (var_v0->obj.pos.y <= (actor->obj.pos.y + 50.0f)) &&
+ (fabsf(var_v0->obj.pos.z - actor->fwork[10]) <= (actor->fwork[7] * 125.0f))) {
+ var_v0->state = 2;
+ }
+ }
+ }
+ temp_dx = actor->obj.pos.x - actor->fwork[15];
+ temp_dz = actor->obj.pos.z - actor->fwork[16];
+ sp98 = sqrtf(SQ(temp_dx) + SQ(temp_dz));
+ actor->fwork[13] -= 20.0f;
+ actor->fwork[14] += 5.0f;
+ spB4 = SIN_DEG(actor->fwork[13]) * sp98 * 0.1f;
+ temp_fsc = COS_DEG(actor->fwork[14]) * sp98 * 0.8f;
+ temp_fscc = COS_DEG(actor->obj.rot.y) * temp_fsc;
+ temp2 = -SIN_DEG(actor->obj.rot.y) * temp_fsc;
+ temp_ryr = Math_Atan2F(actor->obj.pos.x - actor->fwork[15] + temp_fscc,
+ actor->obj.pos.z - actor->fwork[16] + temp2);
+ temp_fscc = actor->obj.pos.y - spB4;
+ var_rxd = -Math_Atan2F(temp_fscc, sp98);
+ temp_ryr = Math_RadToDeg(temp_ryr);
+ Math_SmoothStepToAngle(&actor->obj.rot.y, temp_ryr, 0.1f, 100.0f, 0.001f);
+ var_rxd = Math_RadToDeg(var_rxd);
+ if (actor->obj.pos.y >= 1000.0f) {
+ var_rxd = 0.0f;
+ }
+ Math_SmoothStepToAngle(&actor->obj.rot.x, var_rxd, 0.1f, 100.0f, 0.001f);
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->obj.rot.x * M_DTOR, 1);
+ sp8C.x = sp8C.y = 0.0f;
+ sp8C.z = 10.0f;
+ if (actor->iwork[14] != 0) {
+ sp8C.z = 30.0f;
+ }
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp8C, &sp80);
+ actor->vel.x = sp80.x;
+ actor->vel.y = sp80.y;
+ actor->vel.z = sp80.z;
+ if (actor->iwork[15] != 0) {
+ actor->vel.x = actor->vel.y = actor->vel.z = 0.0f;
+ }
+ if ((actor->iwork[14] != 0) && (actor->obj.pos.z < (gPlayer[0].unk_138 - 2000.0f))) {
+ actor->iwork[14] = 0;
+ actor->timer_0BC = 500;
+ }
+ }
+ break;
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if ((actor->health != 0) && (actor->unk_0D2 == 0)) {
+ actor->health -= actor->damage;
+ actor->timer_0C6 = 30;
+ Audio_PlaySfx(0x2903408F, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (actor->health <= 0) {
+ actor->health = 0;
+ BonusText_Display(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 200.0f, 3);
+ gHitCount += 4;
+ D_80177850 = 15;
+ }
+ }
+ }
+}
+#else
+// OBJ_ACTOR_259 action
+#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_aq/func_i3_801B638C.s")
+#endif
+
+void func_i3_801B6E54(Actor* actor) {
+ s32 i;
+
+ for (i = 0; i < 15; i++) {
+ actor->vwork[0 + i].x = actor->obj.pos.x;
+ actor->vwork[0 + i].y = actor->obj.pos.y;
+ actor->vwork[0 + i].z = actor->obj.pos.z;
+ actor->vwork[15 + i].x = actor->obj.rot.x;
+ actor->vwork[15 + i].y = actor->obj.rot.y;
+ actor->vwork[15 + i].z = actor->obj.rot.z;
+ }
+ actor->health = 0;
+ if (actor->obj.rot.z != 0) {
+ actor->obj.rot.z = 0.0f;
+ actor->state = 1;
+ }
+ actor->fwork[4] = actor->obj.pos.z;
+}
+
+// OBJ_ACTOR_262 action
+#ifdef NON_MATCHING
+// annoying float reg swaps around 4000
+void func_i3_801B6FF8(Actor* actor) {
+ s32 i;
+ f32 temp_dx;
+ f32 temp_dy;
+ f32 temp_dz;
+ f32 temp_fs2_2;
+ f32 spA8;
+ Vec3f sp9C;
+ Vec3f sp90;
+ f32 var_fs0;
+
+ if (actor->health == -100) {
+ actor->unk_044 = 2;
+ func_80066254(actor);
+ for (i = 0; i < 15; i++) {
+ func_i3_801A9448(&actor->vwork[i], &actor->vwork[15 + i], RAND_FLOAT_CENTERED(20.0f), RAND_FLOAT(5.0f),
+ RAND_FLOAT_CENTERED(10.0f), 51, actor->scale, 200, i);
+ func_800815DC();
+ func_8007D0E0(actor->vwork[i].x, actor->vwork[i].y, actor->vwork[i].z + 100.0f, 6.0f);
+ }
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_8007A6F0(&actor->obj.pos, 0x29038090);
+ }
+ switch (actor->state) {
+ case 0:
+ if (actor->timer_0BC == 0) {
+ actor->timer_0BC = 200;
+ actor->fwork[1] = gPlayer[0].pos.x + RAND_FLOAT_CENTERED(800.0f);
+ actor->fwork[2] = gPlayer[0].pos.y + 50.0f + RAND_FLOAT(100.0f);
+ actor->fwork[3] = gPlayer[0].unk_138 - 1500.0f;
+ if (actor->fwork[1] > 700.0f) {
+ actor->fwork[1] = 700.0f;
+ }
+ if (actor->fwork[1] < -700.0f) {
+ actor->fwork[1] = -700.0f;
+ }
+ if (Rand_ZeroOne() < 0.2f) {
+ actor->fwork[3] = gPlayer[0].unk_138 - 800.0f;
+ actor->fwork[1] = gPlayer[0].pos.x;
+ actor->fwork[2] = gPlayer[0].pos.y + 50.0f;
+ }
+ if (fabsf(actor->fwork[4] - actor->obj.pos.z) >= 20000.0f) {
+ actor->fwork[3] = -10000.0f;
+ }
+ }
+ actor->fwork[3] += gPlayer[0].vel.z;
+ temp_dx = actor->fwork[1] - actor->obj.pos.x;
+ temp_dy = actor->fwork[2] - actor->obj.pos.y;
+ 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);
+
+ 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;
+ }
+ Math_SmoothStepToAngle(&actor->obj.rot.z, var_fs0, 0.1f, 1.0f, 0.f);
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->obj.rot.x * M_DTOR, 1);
+ sp9C.x = sp9C.y = 0.0f;
+ sp9C.z = 10.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp9C, &sp90);
+ actor->vel.x = sp90.x;
+ actor->vel.y = sp90.y;
+ actor->vel.z = sp90.z - 20.0f;
+ break;
+ case 1:
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->obj.rot.x * M_DTOR, 1);
+ sp9C.x = 0.0f;
+ sp9C.y = 0.0f;
+ sp9C.z = 19.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp9C, &sp90);
+ actor->vel.x = sp90.x;
+ actor->vel.y = sp90.y;
+ actor->vel.z = sp90.z;
+ break;
+ }
+ if (!(gGameFrameCount & 3)) {
+ for (i = 0; i < 3; i++) {
+ func_80081A8C(actor->obj.pos.x + RAND_FLOAT_CENTERED(70.0f), actor->obj.pos.y + RAND_FLOAT_CENTERED(70.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(70.0f), 1.0f, 1);
+ }
+ }
+ actor->unk_0B6++;
+ if (Animation_GetFrameCount(&D_60260EC) < actor->unk_0B6) {
+ actor->unk_0B6 = 0;
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if (actor->health > -100) {
+ actor->timer_0C6 = 15;
+ actor->health -= actor->damage;
+ for (i = 0; i < 10; i++) {
+ func_80081A8C(actor->unk_0D8.x + RAND_FLOAT_CENTERED(70.0f),
+ actor->unk_0D8.y + RAND_FLOAT_CENTERED(70.0f),
+ actor->unk_0D8.z + RAND_FLOAT_CENTERED(70.0f), 1.0f, 1);
+ }
+ Audio_PlaySfx(0x2903408F, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (actor->health <= -100) {
+ actor->health = -100;
+ BonusText_Display(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 200.0f, 3);
+ gHitCount += 4;
+ D_80177850 = 15;
+ }
+ }
+ }
+}
+#else
+#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_aq/func_i3_801B6FF8.s")
+#endif
+
+s32 func_i3_801B76EC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx) {
+ gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
+ if ((limbIndex >= 4) && (limbIndex < 14)) {
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+ }
+ return false;
+}
+
+void func_i3_801B7754(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp24 = { 0.0f, 0.0f, 0.0f };
+ Actor* this = thisx;
+
+ if (this->health == -100) {
+ switch (limbIndex) {
+ case 1:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[0]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[15]);
+ return;
+ case 2:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[1]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[16]);
+ return;
+ case 3:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[2]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[17]);
+ return;
+ case 4:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[3]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[18]);
+ return;
+ case 5:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[4]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[19]);
+ return;
+ case 6:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[5]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[20]);
+ return;
+ case 7:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[6]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[21]);
+ return;
+ case 8:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[7]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[22]);
+ return;
+ case 9:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[8]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[23]);
+ return;
+ case 10:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[9]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[24]);
+ return;
+ case 11:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[10]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[25]);
+ return;
+ case 12:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[11]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[26]);
+ return;
+ case 13:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[12]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[27]);
+ return;
+ case 22:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[13]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[28]);
+ return;
+ case 23:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[14]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[29]);
+ break;
+ }
+ }
+}
+
+// OBJ_ACTOR_262 draw
+void func_i3_801B7A24(Actor* actor) {
+ Vec3f sp30[30];
+
+ RCP_SetupDL(&gMasterDisp, 0x39);
+ if (actor->timer_0C6 & 1) {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ Animation_GetFrameData(&D_60260EC, actor->unk_0B6, sp30);
+ Animation_DrawSkeleton(3, D_60263F8, sp30, func_i3_801B76EC, func_i3_801B7754, actor, gCalcMatrix);
+}
+
+void func_i3_801B7AF0(Actor* actor) {
+ s32 i;
+
+ actor->fwork[4] = 10.0f;
+ actor->fwork[3] = -1000.0f;
+ actor->fwork[2] = 30.0f;
+ actor->obj.pos.y = 150.0f;
+ actor->fwork[5] = 20.0f;
+ actor->fwork[6] = 20.0f;
+ actor->health = 60;
+ for (i = 0; i < 10; i++) {
+ actor->vwork[0 + i].x = actor->obj.pos.x;
+ actor->vwork[0 + i].y = actor->obj.pos.y;
+ actor->vwork[0 + i].z = actor->obj.pos.z;
+ actor->vwork[10 + i].x = actor->obj.rot.x;
+ actor->vwork[10 + i].y = actor->obj.rot.y;
+ actor->vwork[10 + i].z = actor->obj.rot.z;
+ }
+}
+
+// OBJ_ACTOR_260 action
+void func_i3_801B7C78(Actor* actor) {
+ s32 i;
+ s32 j;
+ f32 spAC;
+ f32 temp_dz;
+ f32 temp_dy;
+ f32 temp_fs2;
+ f32 temp1;
+ Vec3f sp90;
+ Vec3f sp84;
+ Effect* effect;
+
+ if (actor->health == 0) {
+ for (i = 0; i < 10; i++) {
+ func_80081A8C(actor->obj.pos.x + RAND_FLOAT(i * 15.0f), actor->obj.pos.y + RAND_FLOAT(i * 3.0f),
+ actor->obj.pos.z + RAND_FLOAT(i * 5.0f), 1.0f + RAND_FLOAT(0.5f), 7);
+ }
+ for (i = 0; i < 10; i++) {
+ func_i3_801A9448(&actor->vwork[0 + i], &actor->vwork[10 + i], RAND_FLOAT_CENTERED(20.0f), RAND_FLOAT(5.0f),
+ RAND_FLOAT_CENTERED(10.0f), 52, actor->scale, 200, i);
+ func_8007BC7C(actor->vwork[0 + i].x, actor->vwork[0 + i].y, actor->vwork[0 + i].z + 100.0f, 6.0f);
+ }
+
+ for (i = 0; i < 2; i++) {
+ if (actor->iwork[2 + i] != 0) {
+ j = actor->iwork[2 + i] - 1;
+ effect = &gEffects[j];
+ if ((effect->obj.id == OBJ_EFFECT_395) && (effect->state == 2) && (effect->timer_50 != 0)) {
+ effect->unk_44 = 3;
+ actor->iwork[2 + i] = 0;
+ }
+ }
+ }
+ func_800815DC();
+ func_8007D0E0(actor->vwork[7].x, actor->vwork[7].y, actor->vwork[7].z, 5.0f);
+ actor->unk_044 = 4;
+ func_80066254(actor);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_8007A6F0(&actor->obj.pos, 0x29038090);
+ }
+ if (actor->state != 6) {
+ spAC = gPlayer[0].pos.x - actor->obj.pos.x;
+ Math_SmoothStepToAngle(&actor->obj.rot.y,
+ Math_RadToDeg(Math_Atan2F(spAC, gPlayer[0].unk_138 - actor->obj.pos.z)), 1.0f, 5.0f,
+ 0.001f);
+ }
+ if (((actor->state >= 2) && (actor->state < 4)) || (actor->state >= 5)) {
+ Math_SmoothStepToF(&actor->fwork[4], 10.0f, 0.2f, 20.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[5], 20.0f, 0.2f, 20.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[6], 20.0f, 0.2f, 20.0f, 0);
+ }
+ if ((actor->state >= 4) && (actor->state < 5)) {
+ Math_SmoothStepToF(&actor->fwork[4], 159.0f, 0.1f, 10.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[5], 159.0f, 0.1f, 10.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[6], 255.0f, 0.1f, 10.0f, 0);
+ }
+ if (((actor->state < 5) || (actor->state == 7)) && (actor->health != 0) && !(gGameFrameCount & 0xF)) {
+ func_8007B8F8(actor->vwork[22].x, gGroundLevel, actor->vwork[22].z, 5.0f);
+ }
+ Math_SmoothStepToF(&actor->fwork[1], actor->fwork[2], 0.1f, 2.0f, 0.00001f);
+ Math_SmoothStepToF(&actor->obj.pos.z, gPlayer[0].camEye.z - D_80177D20 + actor->fwork[3], 0.1f, actor->fwork[1],
+ 0.00001);
+ if ((actor->state == 1) && (fabsf(actor->fwork[7] - actor->obj.pos.z) >= 10000.0f)) {
+ actor->timer_0C0 = 20;
+ actor->state = 5;
+ }
+ switch (actor->state) {
+ case 0:
+ actor->timer_0BE = (s32) (100.0f + RAND_FLOAT(150.0f));
+ actor->state = 1;
+ actor->fwork[7] = actor->obj.pos.z;
+ break;
+ case 1:
+ if (actor->timer_0BC != 0) {
+ Math_SmoothStepToF(&actor->fwork[4], 255.0f, 0.1f, 50.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[5], 255.0f, 0.1f, 50.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[6], 0.0f, 0.1f, 50.0f, 0);
+ } else {
+ Math_SmoothStepToF(&actor->fwork[4], 10.0f, 0.2f, 20.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[5], 20.0f, 0.2f, 20.0f, 0);
+ Math_SmoothStepToF(&actor->fwork[6], 20.0f, 0.2f, 20.0f, 0);
+ if (actor->timer_0BE == 0) {
+ actor->iwork[1] = 1;
+ actor->state = 2;
+ }
+ }
+ if (!(gGameFrameCount & 3)) {
+ func_i3_801AC8A8(actor->vwork[7].x + RAND_FLOAT_CENTERED(120.0f),
+ actor->vwork[7].y + RAND_FLOAT_CENTERED(50.0f),
+ actor->vwork[7].z + 100.0f + RAND_FLOAT_CENTERED(100.0f), 1.0f, 0);
+ }
+ break;
+ case 2:
+ actor->unk_0B6 += actor->iwork[1];
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6024F80)) {
+ actor->unk_0B6 = 0;
+ actor->timer_0BE = 0;
+ if (actor->iwork[1] >= 2) {
+ actor->timer_0BE = 30;
+ }
+ for (i = 0; i < 10; i++) {
+ func_i3_801AC8A8(actor->vwork[7].x + RAND_FLOAT_CENTERED(120.0f),
+ actor->vwork[7].y + RAND_FLOAT_CENTERED(50.0f),
+ actor->vwork[7].z + 100.0f + RAND_FLOAT_CENTERED(100.0f), 2.0f, 0);
+ }
+ actor->state = 3;
+ }
+ break;
+ case 3:
+ if (actor->timer_0BE == 0) {
+ for (i = 0; i < 2; i++) {
+ actor->iwork[2 + i] =
+ func_80081B24(actor->vwork[20 + i].x, actor->vwork[20 + i].y, actor->vwork[20 + i].z, 0.1f) + 1;
+ }
+ actor->timer_0C0 = 10;
+ Audio_PlaySfx(0x2900208D, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ actor->state = 4;
+ }
+ break;
+ case 4:
+ actor->iwork[5]++;
+ if (actor->timer_0C0 == 0) {
+ Audio_KillSfx(actor->sfxPos);
+ actor->unk_0B6++;
+ if (Animation_GetFrameCount(&D_602AC28) < actor->unk_0B6) {
+ actor->unk_0B6 = Animation_GetFrameCount(&D_6024F80) - 1;
+ actor->state = 7;
+ }
+ }
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ if ((actor->unk_0B6 < 21) && (actor->state == 4) && (actor->iwork[3] != 0)) {
+ j = actor->iwork[3] - 1;
+ effect = &gEffects[j];
+ if (actor->unk_0B6 == 20) {
+ spAC = gPlayer[0].pos.x - effect->obj.pos.x;
+ temp_dy = gPlayer[0].pos.y - effect->obj.pos.y;
+ temp_dz = gPlayer[0].unk_138 - 50.0f - effect->obj.pos.z;
+
+ temp_fs2 = Math_RadToDeg(Math_Atan2F(spAC, temp_dz));
+ temp1 = Math_RadToDeg(-Math_Atan2F(temp_dy, sqrtf(SQ(spAC) + SQ(temp_dz))));
+ Matrix_RotateY(gCalcMatrix, M_DTOR * temp_fs2, 0);
+ Matrix_RotateX(gCalcMatrix, M_DTOR * temp1, 1);
+ sp90.x = sp90.y = 0.0f;
+ sp90.z = 30.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp90, &sp84);
+ effect->vel.x = sp84.x;
+ effect->vel.y = sp84.y;
+ effect->vel.z = sp84.z;
+ effect->unk_44 = 2;
+ effect->timer_50 = 100;
+ actor->iwork[3] = 0;
+ Audio_PlaySfx(0x2900308C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else {
+ effect->obj.pos.x = actor->vwork[21].x;
+ effect->obj.pos.y = actor->vwork[21].y;
+ effect->obj.pos.z = actor->vwork[21].z;
+ }
+ }
+ if ((actor->unk_0B6 < 58) && (actor->state == 4) && (actor->iwork[2] != 0)) {
+ j = actor->iwork[2] - 1;
+ effect = &gEffects[j];
+ if (actor->unk_0B6 == 57) {
+ spAC = gPlayer[0].pos.x - effect->obj.pos.x;
+ temp_dy = gPlayer[0].pos.y - effect->obj.pos.y;
+ temp_dz = gPlayer[0].unk_138 - 50.0f - effect->obj.pos.z;
+ temp_fs2 = Math_RadToDeg(Math_Atan2F(spAC, temp_dz));
+ temp1 = Math_RadToDeg(-Math_Atan2F(temp_dy, sqrtf(SQ(spAC) + SQ(temp_dz))));
+ Matrix_RotateY(gCalcMatrix, M_DTOR * temp_fs2, 0);
+ Matrix_RotateX(gCalcMatrix, M_DTOR * temp1, 1);
+ sp90.x = sp90.y = 0.0f;
+ sp90.z = 50.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp90, &sp84);
+ effect->vel.x = sp84.x;
+ effect->vel.y = sp84.y;
+ effect->vel.z = sp84.z;
+ effect->unk_44 = 2;
+ effect->timer_50 = 100;
+ actor->iwork[2] = 0;
+ } else {
+ effect->obj.pos.x = actor->vwork[20].x;
+ effect->obj.pos.y = actor->vwork[20].y;
+ effect->obj.pos.z = actor->vwork[20].z;
+ }
+ }
+ break;
+ case 5:
+ Math_SmoothStepToAngle(&actor->obj.rot.x, 40.0f, 0.1f, 10.0f, 0);
+ actor->unk_0B6++;
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6024F80)) {
+ actor->unk_0B6 = Animation_GetFrameCount(&D_6024F80) - 1;
+ }
+ if (actor->timer_0C0 == 0) {
+ temp_dy = gPlayer[0].pos.y - 50.0f - actor->obj.pos.y;
+ temp_dz = gPlayer[0].unk_138 - actor->obj.pos.z;
+ temp1 = Math_RadToDeg(-Math_Atan2F(temp_dy, sqrtf(SQ(spAC) + SQ(temp_dz))));
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, M_DTOR * temp1, 1);
+ sp90.x = sp90.y = 0.0f;
+ sp90.z = 40.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp90, &sp84);
+ actor->vel.x = sp84.x;
+ actor->vel.y = sp84.y;
+ actor->vel.z = sp84.z;
+ actor->state = 6;
+ }
+ break;
+ case 6:
+ actor->unk_0B6++;
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6024F80)) {
+ actor->unk_0B6 = Animation_GetFrameCount(&D_6024F80) - 1;
+ }
+ Math_SmoothStepToAngle(&actor->obj.rot.x, 30.0f, 0.1f, 10.0f, 0);
+ if (!(gGameFrameCount & 1)) {
+ func_i3_801AC8A8(actor->vwork[7].x + RAND_FLOAT_CENTERED(120.0f),
+ actor->vwork[7].y + RAND_FLOAT_CENTERED(50.0f),
+ actor->vwork[7].z + RAND_FLOAT_CENTERED(100.0f), 2.0f, 0);
+ }
+ break;
+ case 7:
+ actor->unk_0B6--;
+ if (actor->unk_0B6 <= 0) {
+ actor->unk_0B6 = 0;
+ actor->timer_0BE = (s32) (100.0f + RAND_FLOAT(150.0f));
+ actor->state = 1;
+ }
+ break;
+ }
+ if (actor->iwork[0] != 0) {
+ actor->health = 0;
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if (actor->health != 0) {
+ actor->info.bonus = 0;
+ if (actor->damage == 31) {
+ if (actor->state >= 2) {
+ actor->info.bonus = 1;
+ actor->timer_0C6 = 30;
+ actor->health -= actor->damage;
+ }
+ if (actor->state == 1) {
+ actor->info.bonus = 1;
+ actor->iwork[1] = 7;
+ actor->state = 2;
+ }
+ } else if (actor->state >= 2) {
+ actor->info.bonus = 1;
+ actor->timer_0C6 = 30;
+ actor->health -= actor->damage;
+ Audio_PlaySfx(0x2903408F, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else {
+ actor->timer_0BC = 50;
+ }
+ if (actor->health <= 0) {
+ actor->health = 0;
+ }
+ }
+ }
+}
+
+s32 func_i3_801B8C50(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx) {
+ Actor* this = thisx;
+
+ RCP_SetupDL(&gMasterDisp, 0x3A);
+ if (this->timer_0C6 & 1) {
+ RCP_SetupDL(&gMasterDisp, 0x22);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ if ((this->timer_0C6 == 0) && ((this->fwork[6] <= 254.0f) || (this->state >= 4))) {
+ RCP_SetupDL(&gMasterDisp, 0x22);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, (s32) this->fwork[4], (s32) this->fwork[5], (s32) this->fwork[6],
+ 255);
+ }
+ return false;
+}
+
+void func_i3_801B8D7C(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp4C = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp40 = { 108.0f, 0.0f, 24.0f };
+ Vec3f sp34 = { 102.0f, 14.0f, -21.0f };
+ Vec3f sp28 = { 0.0f, 0.0f, 0.0f };
+ Actor* this = thisx;
+
+ switch (limbIndex) {
+ case 1:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[0]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[10]);
+ } else {
+ Matrix_MultVec3f(gCalcMatrix, &sp40, &this->vwork[20]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[23]);
+ }
+ break;
+ case 2:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[1]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[11]);
+ }
+ break;
+ case 3:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[2]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[12]);
+ }
+ break;
+ case 4:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[3]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[13]);
+ } else {
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[21]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[24]);
+ }
+ break;
+ case 5:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[4]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[14]);
+ }
+ break;
+ case 6:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[5]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[15]);
+ }
+ break;
+ case 9:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[6]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[16]);
+ }
+ break;
+ case 10:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[7]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[17]);
+ }
+ break;
+ case 11:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[8]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[18]);
+ }
+ break;
+ case 12:
+ if (this->health == 0) {
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &this->vwork[9]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[19]);
+ } else {
+ Matrix_MultVec3f(gCalcMatrix, &sp28, &this->vwork[22]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[25]);
+ }
+ break;
+ }
+}
+
+// OBJ_ACTOR_260 draw
+void func_i3_801B90DC(Actor* actor) {
+ Vec3f sp30[30];
+
+ if ((actor->state >= 3) && (actor->state < 5)) {
+ Animation_GetFrameData(&D_602AC28, actor->unk_0B6, sp30);
+ } else {
+ Animation_GetFrameData(&D_6024F80, actor->unk_0B6, sp30);
+ }
+ Matrix_Translate(gCalcMatrix, 0.0f, -150.0f, 100.0f, 1);
+ Animation_DrawSkeleton(3, D_602512C, sp30, func_i3_801B8C50, func_i3_801B8D7C, actor, gCalcMatrix);
+}
+
+// OBJ_ACTOR_263 action
+#ifdef NON_MATCHING
+// BonusText_Display has a return?
+void func_i3_801B91A4(Actor* actor) {
+ Vec3f spDC = { 0.0f, 0.0f, 50.0f };
+ Vec3f spD0;
+ Vec3f spC4;
+ Vec3f spB8;
+ Vec3f spAC;
+ s32 i;
+ f32 spfA4;
+ f32 spA0;
+ f32 spf9C;
+ f32 spf98;
+ f32 sp94;
+
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->obj.rot.x * M_DTOR, 1);
+ if ((actor->health == 0) && (actor->state > 0)) {
+ actor->unk_044 = 0;
+ func_80066254(actor);
+ for (i = 0; i < 5; i++) {
+ func_80081A8C(actor->obj.pos.x + RAND_FLOAT(i * 15.0f), actor->obj.pos.y + RAND_FLOAT(i * 3.0f),
+ actor->obj.pos.z + RAND_FLOAT(i * 5.0f), 0.5f + RAND_FLOAT(0.3f), 7);
+ }
+ for (i = RAND_INT(10.0f); i < 13; i++) {
+ func_i3_801A9448(&actor->vwork[0 + i], &actor->vwork[13 + i], RAND_FLOAT_CENTERED(20.0f), RAND_FLOAT(5.0f),
+ RAND_FLOAT_CENTERED(10.0f), 53, actor->scale, 200, i);
+ func_8007BC7C(actor->vwork[0 + i].x, actor->vwork[0 + i].y, actor->vwork[0 + i].z + 100.0f, 6.0f);
+ }
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_800815DC();
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 5.0f);
+ func_8007A6F0(&actor->obj.pos, 0x29038090);
+ }
+ switch (actor->state) {
+ case 0:
+ for (i = 0; i < 13; i++) {
+ actor->vwork[0 + i].x = actor->obj.pos.x;
+ actor->vwork[0 + i].y = actor->obj.pos.y;
+ actor->vwork[0 + i].z = actor->obj.pos.z;
+ actor->vwork[13 + i].x = actor->obj.rot.x;
+ actor->vwork[13 + i].y = actor->obj.rot.y;
+ actor->vwork[13 + i].z = actor->obj.rot.z;
+ }
+ actor->health = 30;
+ actor->unk_0B6 = 19;
+ actor->fwork[1] = actor->obj.pos.z;
+ if (actor->obj.rot.z >= 4.0f) {
+ actor->info.hitbox = SEGMENTED_TO_VIRTUAL(D_60314AC);
+ actor->health = 200;
+ actor->info.bonus = 1;
+ actor->state = 2;
+ actor->obj.rot.x = actor->obj.rot.y = actor->obj.rot.z = 0.0f;
+ actor->fwork[7] = actor->obj.pos.y;
+ actor->scale = 2.0f;
+ } else {
+ if (actor->obj.rot.z >= 2.0f) {
+ actor->iwork[1] = 1;
+ }
+ spC4.x = spC4.y = 0.0f;
+ spC4.z = 40.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &spC4, &spB8);
+ actor->fwork[4] = spB8.x;
+ actor->fwork[5] = spB8.y;
+ actor->fwork[6] = spB8.z;
+ actor->state = 1;
+ actor->obj.rot.z = 0.0f;
+ }
+ break;
+ case 1:
+ actor->unk_0B6++;
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6000AE4)) {
+ actor->unk_0B6 = 0;
+ }
+ if (actor->unk_0B6 == 36) {
+ actor->vel.x = actor->fwork[4];
+ actor->vel.y = actor->fwork[5];
+ actor->vel.z = actor->fwork[6];
+ }
+ Math_SmoothStepToF(&actor->vel.x, 0.0f, 0.1f, 1.0f, 0.00001f);
+ Math_SmoothStepToF(&actor->vel.y, 0.0f, 0.1f, 1.0f, 0.00001f);
+ Math_SmoothStepToF(&actor->vel.z, 0.0f, 0.1f, 1.0f, 0.00001f);
+ i = 0;
+ if (actor->iwork[1] != 0) {
+ if (!(actor->unk_0B6 & 7)) {
+ i = 1;
+ }
+ } else {
+ if (!(actor->unk_0B6 & 1)) {
+ i = 1;
+ }
+ }
+ if ((actor->unk_0B6 > 36) && (i != 0) && (fabsf(gPlayer[0].unk_138 - actor->obj.pos.z) > 1000.0f)) {
+ spfA4 = gPlayer[0].pos.x + RAND_FLOAT_CENTERED(200.0f) - actor->vwork[26].x;
+ spA0 = gPlayer[0].pos.y + RAND_FLOAT_CENTERED(200.0f) - actor->vwork[26].y;
+ spf9C = gPlayer[0].unk_138 + RAND_FLOAT_CENTERED(200.0f) - actor->vwork[26].z;
+ sp94 = Math_RadToDeg(Math_Atan2F(spfA4, spf9C));
+ spf98 = Math_RadToDeg(-Math_Atan2F(spA0, sqrtf(SQ(spfA4) + SQ(spf9C))));
+ Matrix_RotateY(gCalcMatrix, M_DTOR * sp94, 0);
+ Matrix_RotateX(gCalcMatrix, M_DTOR * spf98, 1);
+ spC4.x = spC4.y = 0.0f;
+ spC4.z = 70.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &spC4, &spAC);
+ func_8007F04C(353, actor->vwork[26].x + RAND_FLOAT_CENTERED(200.0f),
+ actor->vwork[26].y + RAND_FLOAT_CENTERED(200.0f), actor->vwork[26].z, spf98, sp94, 0.0f,
+ 0.0f, 0.0f, 0.0f, spAC.x, spAC.y, spAC.z, 1.0f);
+ }
+ break;
+ case 2:
+ actor->unk_0B6++;
+ if ((actor->unk_0B6 >= Animation_GetFrameCount(&D_6000AE4)) && (actor->fwork[8] < 1.0f)) {
+ actor->unk_0B6 = 0;
+ }
+ if (actor->unk_0B6 == 40) {
+ actor->fwork[8] = 700.0f;
+ func_i3_801A9728(actor, 50.0f, 10.0f, 8);
+ }
+ Math_SmoothStepToF(&actor->obj.pos.y, actor->fwork[7] + actor->fwork[8], 0.1f, 10.0f, 0.00001f);
+ Math_SmoothStepToF(&actor->fwork[8], 0.0f, 0.1f, 10.0f, 0.0001f);
+ if (actor->unk_0B6 >= 40) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(70.0f),
+ actor->obj.pos.y - 50.0f + RAND_FLOAT_CENTERED(50.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(100.0f), 1.0f, 0);
+ }
+ if (actor->unk_0B6 >= 37) {
+ actor->obj.rot.y += 20.0f;
+ actor->fwork[2] += 20.0f;
+ if (!(gGameFrameCount & 3)) {
+ Matrix_RotateY(gCalcMatrix, actor->fwork[2] * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->vwork[27].x * M_DTOR, 1);
+ Matrix_RotateZ(gCalcMatrix, actor->vwork[27].z * M_DTOR, 1);
+ func_i3_801AC8A8(actor->vwork[11].x + RAND_FLOAT_CENTERED(120.0f),
+ actor->vwork[11].y + RAND_FLOAT_CENTERED(50.0f),
+ actor->vwork[11].z + RAND_FLOAT_CENTERED(100.0f), 2.0f, 0);
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &spDC, &spD0);
+ func_8007F04C(353, actor->vwork[26].x + spD0.x, actor->vwork[26].y + spD0.y,
+ actor->vwork[26].z + spD0.z, actor->vwork[27].x, actor->fwork[2], actor->vwork[27].z,
+ 0.0f, 0.0f, 0.0f, spD0.x, spD0.y, spD0.z, 1.0f);
+ }
+ }
+ break;
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if ((actor->health != 0) && (actor->state != 0)) {
+ actor->timer_0C6 = 15;
+ actor->health -= actor->damage;
+ Audio_PlaySfx(0x2903408F, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (actor->health <= 0) {
+ actor->health = 0;
+ if (actor->scale > 1.0f) {
+ BonusText_Display(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 200.0f, 2);
+ gHitCount += 2;
+ D_80177850 = 15;
+ }
+ }
+ }
+ }
+}
+#else
+Vec3f D_i3_801C0314 = { 0.0f, 0.0f, 50.0f };
+#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/fox_aq/func_i3_801B91A4.s")
+#endif
+
+void func_i3_801B9DB0(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp34 = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp28 = { -27.0f, 7.0f, 5.0f };
+ Actor* this = thisx;
+
+ if ((this->health == 0) || (limbIndex == 12)) {
+ switch (limbIndex) {
+ case 1:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[0]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[13]);
+ return;
+ case 2:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[1]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[14]);
+ return;
+ case 3:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[2]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[15]);
+ return;
+ case 4:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[3]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[16]);
+ return;
+ case 5:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[4]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[17]);
+ return;
+ case 6:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[5]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[18]);
+ return;
+ case 7:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[6]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[19]);
+ return;
+ case 8:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[7]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[20]);
+ return;
+ case 9:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[8]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[21]);
+ return;
+ case 10:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[9]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[22]);
+ return;
+ case 11:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[10]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[23]);
+ return;
+ case 12:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[11]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[24]);
+ Matrix_Push(&gCalcMatrix);
+ switch (gGameFrameCount & 3) {
+ case 0:
+ break;
+ case 1:
+ Matrix_RotateX(gCalcMatrix, M_PI / 2, 1);
+ break;
+ case 2:
+ Matrix_RotateX(gCalcMatrix, M_PI, 1);
+ break;
+ case 3:
+ Matrix_RotateX(gCalcMatrix, 3 * M_PI / 2, 1);
+ break;
+ }
+ Matrix_MultVec3f(gCalcMatrix, &sp28, &this->vwork[26]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[27]);
+ Matrix_Pop(&gCalcMatrix);
+ return;
+ case 21:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &this->vwork[12]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[25]);
+ break;
+ }
+ }
+}
+
+// OBJ_ACTOR_263 draw
+void func_i3_801BA108(Actor* actor) {
+ Vec3f sp40[30];
+
+ RCP_SetupDL(&gMasterDisp, 0x1D);
+ if (actor->timer_0C6 & 1) {
+ RCP_SetupDL(&gMasterDisp, 0x1E);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ } else if (actor->state == 2) {
+ RCP_SetupDL(&gMasterDisp, 0x1E);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 95, 31, 255);
+ }
+ Matrix_Scale(gCalcMatrix, actor->scale, actor->scale, actor->scale, 1);
+ if (actor->state == 1) {
+ Matrix_RotateX(gCalcMatrix, (actor->obj.rot.x + 90.0f) * M_DTOR, 1);
+ }
+ Animation_GetFrameData(&D_6000AE4, actor->unk_0B6, sp40);
+ Animation_DrawSkeleton(3, D_6000DB0, sp40, NULL, func_i3_801B9DB0, actor, gCalcMatrix);
+}
+
+// OBJ_ACTOR_264 action
+void func_i3_801BA26C(Actor* actor) {
+ Vec3f sp40[30];
+ u16 sp3E;
+
+ switch (actor->state) {
+ case 0:
+ actor->unk_0B6 = RAND_INT(50.0f);
+ actor->state++;
+ /* fallthrough */
+ case 1:
+ actor->unk_0B6 += 2;
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6020A40)) {
+ actor->unk_0B6 = 0;
+ }
+ sp3E = Animation_GetFrameData(&D_6020A40, actor->unk_0B6, sp40);
+ if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 150.0f) &&
+ (fabsf(actor->obj.pos.y - gPlayer[0].pos.y) < 500.0f) &&
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 700.0f)) {
+ actor->state = 2;
+ actor->fwork[0] = 0.0f;
+ }
+ break;
+ case 2:
+ actor->unk_0B6 += 2;
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_601DE50)) {
+ actor->unk_0B6 = 0;
+ }
+ sp3E = Animation_GetFrameData(&D_601DE50, actor->unk_0B6, sp40);
+ if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) > 150.0f) ||
+ (fabsf(actor->obj.pos.y - gPlayer[0].pos.y) > 500.0f) ||
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) > 700.0f)) {
+ actor->state = 1;
+ actor->fwork[0] = 0.0f;
+ }
+ break;
+ }
+ Math_SmoothStepToVec3fArray(sp40, actor->vwork, 1, sp3E, actor->fwork[0], 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[0], 0.5f, 1.0f, 0.008f, 0.0f);
+}
+
+// OBJ_ACTOR_264 draw
+void func_i3_801BA4E4(Actor* actor) {
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+ Animation_DrawSkeleton(1, D_6020C6C, actor->vwork, NULL, NULL, &actor->index, &gIdentityMatrix);
+ gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
+}
+
+void func_i3_801BA57C(Actor* actor) {
+ if (actor->state == 0) {
+ actor->scale = 1.0f;
+ actor->gravity = 0.3f;
+ actor->health = 10;
+ actor->fwork[2] = RAND_FLOAT_CENTERED((actor->index & 7) + 3.0f);
+ } else {
+ actor->info.bonus = 0;
+ actor->scale = 0.5f;
+ actor->gravity = 0.1f;
+ actor->info.hitbox = SEGMENTED_TO_VIRTUAL(D_603151C);
+ actor->fwork[2] = RAND_FLOAT_CENTERED((actor->index & 3) + 1.0f);
+ }
+ actor->fwork[1] = RAND_FLOAT(50.0f);
+}
+
+// OBJ_ACTOR_265 action
+void func_i3_801BA6A4(Actor* actor) {
+ s32 i;
+ s32 var_s2;
+ Actor* var_s0;
+
+ switch (actor->state) {
+ case 0:
+ if (actor->iwork[1] == 0) {
+ actor->obj.rot.z += actor->fwork[2];
+ if (!(gGameFrameCount & 1)) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(120.0f),
+ actor->obj.pos.y + RAND_FLOAT_CENTERED(50.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(100.0f), 2.0f, 0);
+ }
+ actor->fwork[1] += 10.0f;
+ actor->vel.x = SIN_DEG(actor->fwork[1]) * 10.0f;
+ if (actor->obj.pos.y < (gGroundLevel + 30.0f)) {
+ Audio_PlaySfx(0x19400007, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ actor->iwork[1] = 1;
+ actor->vel.x = actor->vel.y = actor->vel.z = 0.0f;
+ actor->gravity = 0.0f;
+ func_8007B8F8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 100.0f, actor->scale * 30.0f);
+ func_8007B8F8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 100.0f, actor->scale * 30.0f);
+ }
+ }
+ break;
+ case 1:
+ if (actor->iwork[1] == 0) {
+ actor->obj.rot.z += actor->fwork[2];
+ if (!(gGameFrameCount & 3)) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(70.0f),
+ actor->obj.pos.y + RAND_FLOAT_CENTERED(50.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(50.0f), 1.0f, 0);
+ }
+ Math_SmoothStepToF(&actor->vel.y, -7.0f, 0.1f, 1.0f, 0.0001f);
+ if (actor->obj.pos.y < (gGroundLevel + 20.0f)) {
+ actor->gravity = 0.0f;
+ if (actor->vel.y < 0.0f) {
+ actor->vel.y = 0.0f;
+ }
+ actor->iwork[1] = 1;
+ Audio_PlaySfx(0x19400007, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_8007B8F8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 100.0f, actor->scale * 30.0f);
+ }
+ } else {
+ Math_SmoothStepToF(&actor->vel.y, 0.0f, 0.1f, 1.0f, 0.0001f);
+ }
+ Math_SmoothStepToF(&actor->vel.x, 0.0f, 0.1f, 1.0f, 0.0001f);
+ Math_SmoothStepToF(&actor->vel.z, 0.0f, 0.1f, 1.0f, 0.0001f);
+ break;
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ actor->health -= actor->damage;
+ if (actor->health <= 0) {
+ actor->health = actor->unk_044 = 0;
+ func_80066254(actor);
+ if (actor->state == 0) {
+ for (i = 0, var_s2 = 0, var_s0 = gActors; i < 60 && var_s2 < 4; i++, var_s0++) {
+ if (var_s0->obj.status == OBJ_FREE) {
+ Actor_Initialize(var_s0);
+ var_s0->obj.status = OBJ_INIT;
+ var_s0->obj.id = OBJ_ACTOR_265;
+ var_s0->obj.pos.x = actor->obj.pos.x;
+ var_s0->obj.pos.y = actor->obj.pos.y + 20.0f;
+ var_s0->obj.pos.z = actor->obj.pos.z;
+ var_s0->vel.x = RAND_FLOAT_CENTERED(50.0f);
+ var_s0->vel.y = RAND_FLOAT(5.0f);
+ var_s0->vel.z = RAND_FLOAT_CENTERED(50.0f);
+ var_s0->state = 1;
+
+ Object_SetInfo(&var_s0->info, var_s0->obj.id);
+ var_s2++;
+ }
+ }
+ if (i >= 60) {
+ var_s0->obj.status = OBJ_FREE;
+ }
+ } else {
+ for (i = 0; i < 4; i++) {
+ func_i3_801A9448(&actor->obj.pos, &actor->obj.rot, RAND_FLOAT_CENTERED(30.0f), RAND_FLOAT(5.0f),
+ RAND_FLOAT_CENTERED(10.0f), 54, 0.1f, 200, i);
+ }
+ }
+ func_8007BC7C(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 130.0f, actor->scale * 30.0f);
+ func_8007BC7C(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 130.0f, actor->scale * 30.0f);
+ func_8007BC7C(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 130.0f, actor->scale * 30.0f);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+ }
+ }
+}
+
+// OBJ_ACTOR_265 draw
+void func_i3_801BAD7C(Actor* actor) {
+ Matrix_Scale(gGfxMatrix, actor->scale, actor->scale, actor->scale, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_6014FD0);
+}
+
+// OBJ_ACTOR_266 action
+void func_i3_801BADF8(Actor* actor) {
+ s32 i;
+
+ switch (actor->state) {
+ case 0:
+ for (i = 0; i < 5; i++) {
+ actor->vwork[0 + i].x = actor->obj.pos.x;
+ actor->vwork[0 + i].y = actor->obj.pos.y;
+ actor->vwork[0 + i].z = actor->obj.pos.z;
+ actor->vwork[5 + i].x = actor->obj.rot.x;
+ actor->vwork[5 + i].y = actor->obj.rot.y;
+ actor->vwork[5 + i].z = actor->obj.rot.z;
+ }
+ actor->state++;
+ break;
+ case 1:
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if (actor->damage == 0) {
+ gPlayer[0].unk_1F4 = 6;
+ gPlayer[0].unk_21C = 0;
+ }
+ actor->state++;
+ }
+ break;
+ case 2:
+ for (i = 0; i < 5; i++) {
+ func_i3_801A9448(&actor->vwork[0 + i], &actor->vwork[5 + i], RAND_FLOAT_CENTERED(20.0f),
+ RAND_FLOAT(5.0f), RAND_FLOAT_CENTERED(10.0f), 55, actor->scale, 200, i);
+ func_8007BC7C(actor->vwork[0 + i].x, actor->vwork[0 + i].y, actor->vwork[0 + i].z + 100.0f, 6.0f);
+ }
+ Object_Kill(&actor->obj, actor->sfxPos);
+ break;
+ }
+}
+
+void func_i3_801BB0C4(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp24 = { 0.0f, 0.0f, 0.0f };
+ Actor* this = thisx;
+
+ if (this->state != 0) {
+ switch (limbIndex) {
+ case 1:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[0]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[5]);
+ break;
+ case 2:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[1]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[6]);
+ break;
+ case 3:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[2]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[7]);
+ break;
+ case 4:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[3]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[8]);
+ break;
+ case 9:
+ Matrix_MultVec3f(gCalcMatrix, &sp24, &this->vwork[4]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[9]);
+ break;
+ }
+ }
+}
+
+// OBJ_ACTOR_266 draw
+void func_i3_801BB204(Actor* actor) {
+ Vec3f sp28[30];
+
+ Animation_GetFrameData(&D_601EC68, 0, sp28);
+ Animation_DrawSkeleton(3, D_601EDB4, sp28, NULL, func_i3_801BB0C4, actor, gCalcMatrix);
+}
+
+Vec3f D_i3_801C0344[4] = {
+ { -6.4f, -4.6f, -7.8f },
+ { 6.4f, 4.6f, 7.8f },
+ { -5.9f, -7.8f, -7.0f },
+ { 5.9f, 7.8f, 7.0f },
+};
+f32 D_i3_801C0374[51] = {
+ // Structured as f32[4 + 4 + 9][3]
+ 1.0f, 1.0f, 1.0f, 1.3f, 0.8f, 1.3f, 1.0f, 1.2f, 1.0f, 1.3f, 0.8f, 1.3f, 1.0f, 1.0f, 1.0f, 1.3f, 1.0f,
+ 1.3f, 1.0f, 1.0f, 1.0f, 1.3f, 1.0f, 1.3f, 1.0f, 1.0f, 1.0f, 0.85f, 0.95f, 0.85f, 0.85f, 0.95f, 0.85f, 0.85f,
+ 0.95f, 0.85f, 1.0f, 1.05f, 1.0f, 0.85f, 0.95f, 0.85f, 0.85f, 0.95f, 0.85f, 0.85f, 0.95f, 0.85f, 0.85f, 0.95f, 0.85f,
+};
+s32 D_i3_801C0440[24] = {
+ 0, 30, 60, 90, 0, 0, 0, 0, 0, 15, 30, 45, 0, 0, 0, 0, 0, 15, 30, 45, 60, 75, 90, 105,
+};
+s32 D_i3_801C04A0[6] = {
+ 15, -15, 10, -10, 7, -7,
+};
+
+void func_i3_801BB26C(Actor* actor) {
+ s32 sp64;
+ s32 sp60;
+ Vec3f sp54;
+ Vec3f sp48;
+ Actor* sp44;
+ Actor* sp40;
+
+ actor->fwork[1] = RAND_FLOAT(100.0f);
+ actor->timer_0BC = RAND_INT(50.0f);
+ actor->iwork[3] = RAND_INT(10.0f) & 1;
+ actor->fwork[11] = actor->fwork[14] = actor->fwork[17] = actor->fwork[12] = actor->fwork[15] = actor->fwork[18] =
+ actor->fwork[13] = actor->fwork[16] = actor->fwork[19] = 1.0f;
+ actor->fwork[2] = 213.0f;
+ actor->fwork[3] = 160.0f;
+ actor->fwork[4] = 255.0f;
+ actor->fwork[8] = 255.0f;
+ actor->fwork[7] = 255.0f;
+ actor->fwork[6] = 197.0f;
+ actor->fwork[5] = 197.0f;
+ actor->fwork[10] = 231.0f;
+ actor->fwork[9] = 231.0f;
+ actor->fwork[22] = actor->obj.pos.x;
+ actor->fwork[23] = actor->obj.pos.y;
+ actor->fwork[24] = actor->obj.pos.z;
+ actor->iwork[4] = RAND_INT(60.0f);
+ actor->iwork[5] = 15 + RAND_INT(45.0f);
+ actor->iwork[6] = 45 + RAND_INT(15.0f);
+ actor->iwork[7] = RAND_INT(120.0f);
+ actor->iwork[8] = RAND_INT(120.0f);
+ actor->iwork[9] = RAND_INT(120.0f);
+ actor->unk_0B6 = RAND_INT(Animation_GetFrameCount(&D_6023780));
+ if (actor->iwork[2] == 0) {
+ actor->iwork[18] = fabsf(actor->obj.rot.y / 10.0f);
+ if ((actor->iwork[18] == 0) || (actor->iwork[18] == 2)) {
+ actor->iwork[19] = 1;
+ }
+ actor->iwork[13] = D_i3_801C4450 * 3;
+ Matrix_RotateZ(gCalcMatrix, actor->obj.rot.z * M_DTOR, 0);
+ sp54.x = 0.0f;
+ sp54.y = actor->obj.rot.x * 10.0f;
+ sp54.z = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp54, &sp48);
+ for (sp64 = 0, sp44 = gActors; sp64 < 60; sp64++, sp44++) {
+ if (sp44->obj.status == OBJ_FREE) {
+ Actor_Initialize(sp44);
+ sp44->obj.status = OBJ_INIT;
+ sp44->obj.id = OBJ_ACTOR_267;
+ sp44->obj.pos.x = actor->obj.pos.x + sp48.x;
+ sp44->obj.pos.y = actor->obj.pos.y + sp48.y;
+ sp44->obj.pos.z = actor->obj.pos.z;
+ sp44->iwork[0] = actor->index + 1;
+ sp44->iwork[2] = 1;
+ sp44->iwork[13] = actor->iwork[13];
+ sp44->iwork[18] = actor->iwork[18];
+ sp44->iwork[19] = actor->iwork[19];
+ actor->iwork[0] = sp64 + 1;
+ Object_SetInfo(&sp44->info, sp44->obj.id);
+ break;
+ }
+ }
+ Matrix_RotateZ(gCalcMatrix, (actor->obj.rot.z + 90.0f) * M_DTOR, 0);
+ sp54.x = 0.0f;
+ sp54.y = actor->obj.rot.x * 10.0f;
+ sp54.z = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp54, &sp48);
+ for (sp60 = 0, sp40 = gActors; sp60 < 60; sp60++, sp40++) {
+ if (sp40->obj.status == OBJ_FREE) {
+ Actor_Initialize(sp40);
+ sp40->obj.status = OBJ_INIT;
+ sp40->obj.id = OBJ_ACTOR_267;
+ sp40->obj.pos.x = actor->obj.pos.x + sp48.x;
+ sp40->obj.pos.y = actor->obj.pos.y + sp48.y;
+ sp40->obj.pos.z = actor->obj.pos.z;
+ sp40->iwork[0] = actor->index + 1;
+ sp40->iwork[1] = sp44->index + 1;
+ sp40->iwork[2] = 2;
+ sp40->iwork[13] = actor->iwork[13];
+ sp40->iwork[18] = actor->iwork[18];
+ sp40->iwork[19] = actor->iwork[19];
+ sp44->iwork[1] = sp60 + 1;
+ actor->iwork[1] = sp60 + 1;
+ Object_SetInfo(&sp40->info, sp40->obj.id);
+ break;
+ }
+ }
+ actor->fwork[21] = actor->obj.rot.x * 10.0f;
+ actor->iwork[17] = fabsf(Math_ModF(actor->obj.rot.y, 10.0f));
+ actor->fwork[20] = actor->obj.rot.z;
+
+ actor->obj.rot.x = actor->obj.rot.y = actor->obj.rot.z = 0.0f;
+ D_i3_801C4450++;
+ if (D_i3_801C4450 > 20) {
+ D_i3_801C4450 = 0;
+ }
+ }
+}
+
+// OBJ_ACTOR_267 action
+void func_i3_801BB79C(Actor* actor) {
+ s32 i;
+ s32 it0;
+ s32 it1;
+ Vec3f sp80;
+ Vec3f sp74;
+ Actor* sp70;
+ Actor* sp6C;
+ Object_80* sp68;
+
+ if (actor->timer_0C0 == 0) {
+ switch (actor->iwork[18]) {
+ case 1:
+ case 2:
+ i = actor->iwork[19] + (actor->iwork[2] * 2);
+ actor->vel.x = D_i3_801C04A0[i];
+ if (!(gGameFrameCount & 3)) {
+ if (fabsf(actor->fwork[22] - actor->obj.pos.x) >= 100.0f) {
+ if (actor->iwork[20] == 0) {
+ actor->iwork[19]++;
+ actor->iwork[19] &= 1;
+ actor->iwork[20] = 50;
+ }
+ } else {
+ for (i = 0, sp68 = gObjects80; i < 50; i++, sp68++) {
+ if ((sp68->obj.status == OBJ_ACTIVE) && (sp68->obj.id == OBJ_80_122) &&
+ func_80062DBC(&actor->obj.pos, sp68->info.hitbox, &sp68->obj, 0.0f, 0.0f, 0.0f) &&
+ (actor->iwork[20] == 0)) {
+ actor->iwork[20] = 50;
+ actor->iwork[19]++;
+ actor->iwork[19] &= 1;
+ }
+ }
+ }
+ }
+ break;
+ case 3:
+ case 4:
+ i = actor->iwork[19] + (actor->iwork[2] * 2);
+ actor->vel.y = D_i3_801C04A0[i];
+ if (!(gGameFrameCount & 3)) {
+ if (fabsf(actor->fwork[23] - actor->obj.pos.y) >= 100.0f) {
+ if (actor->iwork[20] == 0) {
+ actor->iwork[19]++;
+ actor->iwork[19] &= 1;
+ actor->iwork[20] = 50;
+ }
+ } else {
+ for (i = 0, sp68 = gObjects80; i < 50; i++, sp68++) {
+ if ((sp68->obj.status == OBJ_ACTIVE) && (sp68->obj.id == OBJ_80_122) &&
+ (func_80062DBC(&actor->obj.pos, sp68->info.hitbox, &sp68->obj, 0.0f, 0.0f, 0.0f) ||
+ (actor->obj.pos.y < (gGroundLevel + 30.0f))) &&
+ (actor->iwork[20] == 0)) {
+ actor->iwork[20] = 50;
+ actor->iwork[19]++;
+ actor->iwork[19] &= 1;
+ }
+ }
+ }
+ }
+ break;
+ }
+ } else {
+ actor->vel.x = actor->vel.y = 0.0f;
+ }
+ if (actor->iwork[2] == 0) {
+ sp70 = &gActors[actor->iwork[0] - 1];
+ sp6C = &gActors[actor->iwork[1] - 1];
+ Math_SmoothStepToF(&actor->fwork[21], 200.0f, 0.1f, 2.0f, 0.0001f);
+ if ((actor->iwork[13] == sp70->iwork[13]) && (actor->iwork[14] == 0)) {
+ i = 1;
+ if (!((sp70->obj.id == OBJ_ACTOR_267) && (sp70->obj.status == OBJ_ACTIVE))) {
+ actor->iwork[14] = 1;
+ i = 0;
+ }
+ if (i != 0) {
+ if (!actor->timer_0C0 && sp70->timer_0C0 >= 2) {
+ actor->timer_0C0 = sp70->timer_0C0;
+ actor->timer_0C6 = sp70->timer_0C6;
+ }
+ if (actor->timer_0C0 && !sp70->timer_0C0 >= 2) {
+ sp70->timer_0C0 = actor->timer_0C0;
+ sp70->timer_0C6 = actor->timer_0C6;
+ }
+ }
+ if (!(gGameFrameCount & 7)) {
+ func_8007A6F0(&sp70->obj.pos, 0x3100208E);
+ }
+ func_i3_801A92EC(actor, sp70->obj.pos.x, sp70->obj.pos.y, sp70->obj.pos.z, actor->iwork[13], i);
+ if ((actor->fwork[21] > 200.0f) && (actor->iwork[17] != 0)) {
+ Matrix_RotateZ(gCalcMatrix, actor->fwork[20] * M_DTOR, 0);
+ sp80.x = 0.0f;
+ sp80.y = actor->fwork[21];
+ sp80.z = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp80, &sp74);
+ sp70->obj.pos.x = actor->obj.pos.x + sp74.x;
+ sp70->obj.pos.y = actor->obj.pos.y + sp74.y;
+ sp70->obj.pos.z = actor->obj.pos.z;
+ }
+ }
+ if ((actor->iwork[13] == sp6C->iwork[13]) && (actor->iwork[15] == 0)) {
+ i = 1;
+ if (!((sp6C->obj.id == OBJ_ACTOR_267) && (sp6C->obj.status == OBJ_ACTIVE))) {
+ actor->iwork[15] = 1;
+ i = 0;
+ }
+ if (i != 0) {
+ if (!actor->timer_0C0 && sp6C->timer_0C0 >= 2) {
+ actor->timer_0C0 = sp6C->timer_0C0;
+ actor->timer_0C6 = sp6C->timer_0C6;
+ }
+ if (actor->timer_0C0 && !sp6C->timer_0C0 >= 2) {
+ sp6C->timer_0C0 = actor->timer_0C0;
+ sp6C->timer_0C6 = actor->timer_0C6;
+ }
+ }
+ if (!(gGameFrameCount & 3)) {
+ func_8007A6F0(&sp6C->obj.pos, 0x3100208E);
+ }
+ func_i3_801A92EC(actor, sp6C->obj.pos.x, sp6C->obj.pos.y, sp6C->obj.pos.z, actor->iwork[13] + 1, i);
+ if ((actor->fwork[21] > 200.0f) && (actor->iwork[17] != 0)) {
+ Matrix_RotateZ(gCalcMatrix, (actor->fwork[20] + 90.0f) * M_DTOR, 0);
+ sp80.x = 0.0f;
+ sp80.y = actor->fwork[21];
+ sp80.z = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp80, &sp74);
+ sp6C->obj.pos.x = actor->obj.pos.x + sp74.x;
+ sp6C->obj.pos.y = actor->obj.pos.y + sp74.y;
+ sp6C->obj.pos.z = actor->obj.pos.z;
+ }
+ }
+ } else if (actor->iwork[2] == 1) {
+ sp70 = &gActors[actor->iwork[1] - 1];
+ if ((actor->iwork[13] == sp70->iwork[13]) && (actor->iwork[16] == 0)) {
+ i = 1;
+ if (!((sp70->obj.id == OBJ_ACTOR_267) && (sp70->obj.status == OBJ_ACTIVE))) {
+ actor->iwork[16] = 1;
+ i = 0;
+ }
+ if (i != 0) {
+ if (!actor->timer_0C0 && sp70->timer_0C0 >= 2) {
+ actor->timer_0C0 = sp70->timer_0C0;
+ actor->timer_0C6 = sp70->timer_0C6;
+ }
+ if (actor->timer_0C0 && !sp70->timer_0C0 >= 2) {
+ sp70->timer_0C0 = actor->timer_0C0;
+ sp70->timer_0C6 = actor->timer_0C6;
+ }
+ }
+ if (!(gGameFrameCount & 0xF)) {
+ func_8007A6F0(&sp70->obj.pos, 0x3100208E);
+ }
+ func_i3_801A92EC(actor, sp70->obj.pos.x, sp70->obj.pos.y, sp70->obj.pos.z, actor->iwork[13] + 2, i);
+ }
+ }
+ if (!(gGameFrameCount & 3)) {
+ func_8007C120(actor->obj.pos.x + RAND_FLOAT_CENTERED(100.0f), actor->obj.pos.y + RAND_FLOAT_CENTERED(100.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(50.0f), actor->vel.x, actor->vel.y, actor->vel.z,
+ 0.05f + RAND_FLOAT(0.03f), 10);
+ }
+ if (actor->timer_0BE == 0) {
+ D_i3_801C41B8[18] = 255.0f;
+ D_i3_801C41B8[19] = 255.0f;
+ D_i3_801C41B8[20] = 255.0f;
+ actor->timer_0BE = 10;
+ }
+ if (actor->iwork[3] == 0) {
+ Math_SmoothStepToF(&actor->fwork[1], 30.0f, 0.1f, 1.0f, 0.00001f);
+ } else {
+ Math_SmoothStepToF(&actor->fwork[1], 100.0f, 0.1f, 1.0f, 0.00001f);
+ }
+ if (actor->timer_0BC == 0) {
+ actor->timer_0BC = 100;
+ actor->iwork[3]++;
+ actor->iwork[3] &= 1;
+ }
+ actor->unk_0B6 += 2;
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6023780)) {
+ actor->unk_0B6 = 0;
+ }
+ if (actor->iwork[4] < 30) {
+ actor->fwork[2] += D_i3_801C0344[0].x;
+ actor->fwork[3] += D_i3_801C0344[0].y;
+ actor->fwork[4] += D_i3_801C0344[0].z;
+ if (actor->fwork[2] < 0.0f) {
+ actor->fwork[2] = actor->fwork[3] = actor->fwork[4] = 0.0f;
+ }
+ } else {
+ actor->fwork[2] += D_i3_801C0344[1].x;
+ actor->fwork[3] += D_i3_801C0344[1].y;
+ actor->fwork[4] += D_i3_801C0344[1].z;
+ if (actor->fwork[3] >= 160.0f) {
+ actor->fwork[2] = 213.0f;
+ actor->fwork[3] = 160.0f;
+ actor->fwork[4] = 255.0f;
+ }
+ }
+ for (i = 0; i < 2; i++) {
+ if (actor->iwork[i + 5] < 30) {
+ actor->fwork[i + 5] += D_i3_801C0344[2].x;
+ actor->fwork[i + 7] += D_i3_801C0344[2].y;
+ actor->fwork[i + 9] += D_i3_801C0344[2].z;
+ if (actor->fwork[i + 7] < 0.0f) {
+ actor->fwork[i + 5] = actor->fwork[i + 7] = actor->fwork[i + 9] = 0.0f;
+ }
+ } else {
+ actor->fwork[i + 5] += D_i3_801C0344[3].x;
+ actor->fwork[i + 7] += D_i3_801C0344[3].y;
+ actor->fwork[i + 9] += D_i3_801C0344[3].z;
+ if (actor->fwork[i + 7] >= 255.0f) {
+ actor->fwork[i + 5] = 197.0f;
+ actor->fwork[i + 7] = 255.0f;
+ actor->fwork[i + 9] = 231.0f;
+ }
+ }
+ }
+ for (i = 0; i < 3; i++) {
+ it0 = i * 12 + 3 * actor->iwork[10 + i];
+ Math_SmoothStepToF(&actor->fwork[11 + i], D_i3_801C0374[it0 + 0], 0.1f, 5.0f, 0.000001f);
+ Math_SmoothStepToF(&actor->fwork[14 + i], D_i3_801C0374[it0 + 1], 0.1f, 5.0f, 0.000001f);
+ Math_SmoothStepToF(&actor->fwork[17 + i], D_i3_801C0374[it0 + 2], 0.1f, 5.0f, 0.000001f);
+
+ it0 = 8 * i + actor->iwork[10 + i];
+ if (actor->iwork[7 + i] == D_i3_801C0440[it0]) {
+ actor->iwork[10 + i]++;
+ }
+ }
+ actor->iwork[4]++;
+ if (actor->iwork[4] >= 60) {
+ actor->iwork[4] = 0;
+ }
+ actor->iwork[5]++;
+ if (actor->iwork[5] >= 60) {
+ actor->iwork[5] = 0;
+ }
+ actor->iwork[6]++;
+ if (actor->iwork[6] >= 60) {
+ actor->iwork[6] = 0;
+ }
+ actor->iwork[7]++;
+ if (actor->iwork[7] >= 120) {
+ actor->iwork[7] = actor->iwork[10] = 0;
+ }
+ actor->iwork[8]++;
+ if (actor->iwork[8] >= 60) {
+ actor->iwork[8] = actor->iwork[11] = 0;
+ }
+ actor->iwork[9]++;
+ if (actor->iwork[9] >= 120) {
+ actor->iwork[9] = actor->iwork[12] = 0;
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ Audio_PlaySfx(0x2903408F, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (actor->damage != 31) {
+ actor->timer_0C0 = actor->timer_0C6 = 40;
+ } else {
+ actor->timer_0C0 = actor->timer_0C6 = 80;
+ }
+ }
+ if (actor->iwork[20] != 0) {
+ actor->iwork[20]--;
+ }
+ func_i3_801A96DC(actor);
+}
+
+s32 func_i3_801BC530(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx) {
+ Vec3f sp64 = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp58;
+ f32 sp54 = 0.0f;
+ f32 sp50 = 0.0f;
+ f32 sp4C = 0.0f;
+ Actor* this = thisx;
+
+ RCP_SetupDL(&gMasterDisp, 0x29);
+ if (!(this->timer_0C6 & 1)) {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 191, 255, 223, (s32) this->fwork[1]);
+ } else {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 255);
+ }
+ switch (limbIndex) {
+ case 1:
+ sp54 = this->fwork[12];
+ sp50 = this->fwork[15];
+ sp4C = this->fwork[18];
+ break;
+ case 2:
+ sp54 = this->fwork[13];
+ sp50 = this->fwork[16];
+ sp4C = this->fwork[19];
+ break;
+ case 3:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, (s32) this->fwork[5], (s32) this->fwork[7], (s32) this->fwork[9],
+ 255);
+ break;
+ case 4:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, (s32) this->fwork[2], (s32) this->fwork[3], (s32) this->fwork[4],
+ 255);
+ break;
+ case 5:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, (s32) this->fwork[6], (s32) this->fwork[8],
+ (s32) this->fwork[10], 255);
+ break;
+ case 11:
+ sp54 = this->fwork[11];
+ sp50 = this->fwork[14];
+ sp4C = this->fwork[17];
+ }
+ if (sp54 > 0.0f) {
+ Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
+ Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
+ Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
+ Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
+ if (*dList != NULL) {
+ Matrix_MultVec3f(gCalcMatrix, &sp64, &sp58);
+ func_8005F670(&sp58);
+ Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Scale(gGfxMatrix, sp54, sp50, sp4C, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, *dList);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ return true;
+ }
+ return false;
+}
+
+void func_i3_801BC91C(s32 limbIndex, Vec3f* rot, void* thisx) {
+}
+
+// OBJ_ACTOR_267 draw
+void func_i3_801BC930(Actor* actor) {
+ Vec3f sp28[30];
+
+ Animation_GetFrameData(&D_6023780, actor->unk_0B6, sp28);
+ Animation_DrawSkeleton(3, D_602390C, sp28, func_i3_801BC530, func_i3_801BC91C, actor, gCalcMatrix);
+}
+
+s32 D_i3_801C04C4[9] = {
+ 1, 5, 9, 14, 15, 16, 17, 0, 13,
+};
+
+// OBJ_ACTOR_269 action
+void func_i3_801BC9A0(Actor* actor) {
+ s32 j;
+ s32 i;
+ Vec3f spA4;
+ Vec3f sp98;
+ Actor* var_s0;
+
+ switch (actor->state) {
+ case 0:
+ actor->vwork[0].x = actor->obj.pos.x;
+ actor->vwork[0].y = actor->obj.pos.y;
+ actor->vwork[0].z = actor->obj.pos.z;
+ actor->vwork[1].x = actor->obj.pos.x;
+ actor->vwork[1].y = actor->obj.pos.y;
+ actor->vwork[1].z = actor->obj.pos.z;
+ actor->vwork[4].x = actor->obj.pos.x;
+ actor->vwork[4].y = actor->obj.pos.y;
+ actor->vwork[4].z = actor->obj.pos.z;
+ actor->iwork[1] = actor->obj.rot.z;
+ if (actor->iwork[1] >= 9) {
+ actor->iwork[1] = 7;
+ }
+ if (actor->obj.rot.y != 0) {
+ actor->health = 7650;
+ actor->iwork[3] = 1;
+ actor->state = 2;
+ } else {
+ actor->health = 10;
+ actor->info.drawType = 2;
+ actor->info.bonus = 1;
+ actor->state++;
+ }
+ actor->obj.rot.y = actor->obj.rot.z = 0.0f;
+ break;
+ case 1:
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if ((actor->health != 0) && (actor->iwork[3] == 0) && (actor->damage == 31)) {
+ actor->health -= actor->damage;
+ Audio_PlaySfx(0x2903B009, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (actor->health <= 0) {
+ actor->health = 0;
+ actor->state = 3;
+ }
+ }
+ }
+ break;
+ case 3:
+ for (i = 0; i < 2; i++) {
+ for (j = 0; j < 60; j++) {
+ if ((gActors[j].obj.status == OBJ_ACTIVE) && (gActors[j].obj.id == OBJ_ACTOR_189) &&
+ (gActors[j].state == 58)) {
+ Object_Kill(&gActors[j].obj, gActors[j].sfxPos);
+ break;
+ }
+ }
+ }
+ for (i = 0; i < 2; i++) {
+ for (j = 0, var_s0 = gActors; j < 60; j++, var_s0++) {
+ if (var_s0->obj.status == OBJ_FREE) {
+ Actor_Initialize(var_s0);
+ var_s0->obj.status = OBJ_INIT;
+ var_s0->obj.id = OBJ_ACTOR_269;
+ var_s0->obj.pos.x = actor->vwork[i].x;
+ var_s0->obj.pos.y = actor->vwork[i].y;
+ var_s0->obj.pos.z = actor->vwork[i].z;
+ var_s0->iwork[0] = i + 1;
+ Object_SetInfo(&var_s0->info, var_s0->obj.id);
+ if (i == 0) {
+ var_s0->fwork[0] = RAND_FLOAT(360.0f);
+ Matrix_RotateY(gCalcMatrix, var_s0->fwork[0] * M_DTOR, 0);
+ spA4.x = spA4.y = spA4.z = 5.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &spA4, &sp98);
+ var_s0->vel.x = sp98.x;
+ var_s0->vel.z = sp98.z;
+ var_s0->gravity = 0.4f;
+ var_s0->state = 5;
+ var_s0->info.hitbox = SEGMENTED_TO_VIRTUAL(D_6030D3C);
+ } else {
+ var_s0->state = 2;
+ var_s0->info.hitbox = SEGMENTED_TO_VIRTUAL(D_6030D58);
+ }
+ break;
+ }
+ }
+ }
+ for (j = 0; j < 10; j++) {
+ func_i3_801A9448(&actor->vwork[4], &actor->vwork[5], RAND_FLOAT_CENTERED(20.0f), RAND_FLOAT(5.0f),
+ RAND_FLOAT_CENTERED(10.0f), 58, 0.2f + RAND_FLOAT(1.0f), 200, 0);
+ func_8007BC7C(actor->vwork[4].x, actor->vwork[4].y, actor->vwork[4].z + 50.0f, 6.0f);
+ }
+ func_800815DC();
+ func_8007D0E0(actor->vwork[4].x, actor->vwork[4].y, actor->vwork[4].z, 10.0f);
+ for (j = 0; j < 20; j++) {
+ func_i3_801AC8A8(actor->vwork[4].x + RAND_FLOAT_CENTERED(100.0f),
+ actor->vwork[4].y + RAND_FLOAT_CENTERED(200.0f),
+ actor->vwork[4].z + 100.0f + RAND_FLOAT_CENTERED(200.0f), 6.0f, 2);
+ }
+ func_800815DC();
+ func_8007D0E0(actor->vwork[4].x, actor->vwork[4].y, actor->vwork[4].z + 150.0f, 10.0f);
+ actor->timer_0BC = 4;
+ actor->state = 4;
+ break;
+ case 4:
+ if (actor->timer_0BC == 0) {
+ actor->obj.pos.x = actor->vwork[4].x;
+ actor->obj.pos.y = actor->vwork[4].y;
+ actor->obj.pos.z = actor->vwork[4].z;
+ actor->unk_044 = D_i3_801C04C4[actor->iwork[1]];
+ func_80066254(actor);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_8007A6F0(&actor->obj.pos, 0x19021078);
+ }
+ break;
+ case 5:
+ Math_SmoothStepToAngle(&actor->obj.rot.y, actor->fwork[0], 0.1f, 10.0f, 0.0001f);
+ Math_SmoothStepToAngle(&actor->obj.rot.x, 90.0f, 0.1f, 1.0f, 0.0001f);
+ if (!(gGameFrameCount & 1) && (actor->iwork[2] == 0)) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(200.0f),
+ actor->obj.pos.y + RAND_RANGE(-45.0f, 105.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(200.0f), 6.0f, 2);
+ }
+ if ((actor->obj.pos.y < (gGroundLevel + 30.0f)) && (actor->iwork[2] == 0)) {
+ actor->iwork[2] = 1;
+ actor->vel.x = actor->vel.y = actor->vel.z = actor->gravity = 0.0f;
+ func_8007A6F0(&actor->obj.pos, 0x19400007);
+ for (j = 0; j < 6; j++) {
+ func_8007B8F8(actor->obj.pos.x + RAND_FLOAT_CENTERED(100.0f),
+ actor->obj.pos.y + RAND_RANGE(-9.0f, 21.0f),
+ actor->obj.pos.z + RAND_FLOAT_CENTERED(200.0f), 20.0f);
+ }
+ }
+ break;
+ }
+}
+
+void func_i3_801BD17C(s32 limbIndex, Vec3f* rot, void* thisx) {
+ Vec3f sp2C = { 0.0f, 0.0f, 0.0f };
+ Actor* this = thisx;
+
+ if (this->state == 3) {
+ switch (limbIndex) {
+ case 1:
+ Matrix_MultVec3f(gCalcMatrix, &sp2C, &this->vwork[4]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[5]);
+ return;
+ case 2:
+ Matrix_MultVec3f(gCalcMatrix, &sp2C, &this->vwork[0]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[2]);
+ return;
+ case 5:
+ Matrix_MultVec3f(gCalcMatrix, &sp2C, &this->vwork[1]);
+ Matrix_GetYRPAngles(gCalcMatrix, &this->vwork[3]);
+ break;
+ }
+ }
+}
+
+// OBJ_ACTOR_269 draw
+void func_i3_801BD264(Actor* actor) {
+ Vec3f sp40[30];
+
+ if (actor->state != 0) {
+ RCP_SetupDL(&gMasterDisp, 0x37);
+ switch (actor->iwork[0]) {
+ case 0:
+ if (actor->state != 0) {
+ if ((actor->iwork[3] == 0) && (actor->info.drawType == 2)) {
+ Animation_GetFrameData(&D_6014438, 0, sp40);
+ Animation_DrawSkeleton(3, D_6014504, sp40, NULL, func_i3_801BD17C, actor, gCalcMatrix);
+ } else {
+ gSPDisplayList(gMasterDisp++, D_6014520);
+ }
+ }
+ break;
+ case 1:
+ gSPDisplayList(gMasterDisp++, D_60137F0);
+ break;
+ case 2:
+ gSPDisplayList(gMasterDisp++, D_6014030);
+ break;
+ }
+ }
+}
+
+void func_i3_801BD3B0(Actor* actor, f32 x, f32 y, f32 z) {
+ f32 temp;
+ Vec3f sp38;
+ Vec3f sp2C;
+
+ Math_SmoothStepToAngle(&actor->obj.rot.y, actor->fwork[6], 0.1f, 100.0f, 0.00001f);
+ Math_SmoothStepToAngle(&actor->obj.rot.x, actor->fwork[7], 0.1f, 100.0f, 0.00001f);
+ if (!(gGameFrameCount & 3)) {
+ actor->fwork[6] = Math_RadToDeg(Math_Atan2F(x, z));
+ temp = sqrtf(SQ(x) + SQ(z));
+ actor->fwork[7] = Math_RadToDeg(-Math_Atan2F(y, temp));
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, actor->obj.rot.x * M_DTOR, 1);
+ Math_SmoothStepToF(&actor->fwork[4], 5.0f, 0.1f, 10.0f, 0);
+ sp38.z = actor->fwork[4];
+ if (actor->iwork[2] != 0) {
+ sp38.z = 50.0f;
+ }
+ sp38.x = sp38.y = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp38, &sp2C);
+ actor->vel.x = sp2C.x;
+ actor->vel.y = sp2C.y;
+ actor->vel.z = sp2C.z;
+ }
+}
+
+f32 D_i3_801C04F4[4] = { 700.0f, 300.0f, 600.0f, 400.0f };
+// OBJ_ACTOR_268 action
+void func_i3_801BD54C(Actor* actor) {
+ s32 sp6C;
+ s32 sp68;
+ s32 sp64;
+ f32 var_fs0;
+ f32 sp5C;
+ f32 sp58;
+ f32 sp54;
+ Actor* var_s0;
+
+ if (actor->state == 2) {
+ var_fs0 = (actor->iwork[3] != 0) ? 2800.0f : 9000.0f;
+ if (fabsf(actor->fwork[5] - actor->obj.pos.z) >= var_fs0) {
+ actor->state = 3;
+ if (actor->iwork[0] == 0) {
+ Audio_PlaySfx(0x19400077, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ } else {
+ // needed to match
+ }
+ }
+ switch (actor->state) {
+ case 0:
+ if (actor->obj.rot.z != 0) {
+ actor->iwork[3] = 1;
+ actor->obj.rot.z = 0.0f;
+ }
+ actor->state = 1;
+ actor->fwork[5] = actor->obj.pos.z;
+ break;
+ case 1:
+ sp64 = actor->index;
+ for (sp68 = 0; sp68 < 15; sp68++) {
+ for (sp6C = 0, var_s0 = gActors; sp6C < 60; sp6C++, var_s0++) {
+ if (var_s0->obj.status == OBJ_FREE) {
+ Actor_Initialize(var_s0);
+ var_s0->obj.status = OBJ_INIT;
+ var_s0->obj.id = OBJ_ACTOR_268;
+ var_s0->iwork[4] = sp64;
+ var_s0->iwork[0] = sp68 + 1;
+ var_s0->iwork[3] = actor->iwork[3];
+ sp64 = sp6C;
+ var_fs0 = 100.0f;
+ if (Rand_ZeroOne() < 0.5f) {
+ var_fs0 = -100.0f;
+ }
+ var_s0->obj.pos.x = actor->obj.pos.x + ((sp68 & 7) * var_fs0) + RAND_FLOAT(50.0f);
+ var_s0->obj.pos.y = actor->obj.pos.y + ((sp68 & 7) * (var_fs0 / 2.0f)) + RAND_FLOAT(30.0f);
+ var_s0->obj.pos.z = actor->obj.pos.z + (sp68 * 20.0f) + RAND_FLOAT(-18.0f);
+ var_s0->unk_0B6 = RAND_FLOAT(20.0f);
+ var_s0->fwork[5] = actor->fwork[5];
+ var_s0->state = 2;
+ Object_SetInfo(&var_s0->info, var_s0->obj.id);
+ break;
+ }
+ }
+ }
+ actor->state = 2;
+ break;
+ case 2:
+ if (actor->obj.pos.y < gGroundLevel + 30.0f) {
+ actor->obj.pos.y = gGroundLevel + 30.0f;
+ }
+ if ((actor->iwork[2] != 0) || (actor->timer_0BE != 0)) {
+ actor->timer_0BC = 0;
+ } else {
+ Math_SmoothStepToF(&actor->fwork[3], D_i3_801C04F4[actor->iwork[1]], 0.1f, 30.0f, 0.0001f);
+ Math_SmoothStepToF(&actor->obj.pos.z, gPlayer[0].camEye.z - D_80177D20 - actor->fwork[3], 0.1f, 30.0f,
+ 0.00001f);
+ }
+ if ((actor->timer_0BC == 0) && (actor->iwork[2] == 0) && (actor->timer_0BE == 0)) {
+ actor->timer_0BC = 60;
+ actor->fwork[1] = RAND_FLOAT_CENTERED(300.0f);
+ actor->fwork[2] = 50.0f + RAND_FLOAT_CENTERED(100.0f);
+ if (actor->fwork[2] < gGroundLevel + 30.0f) {
+ actor->fwork[2] = gGroundLevel + 30.0f;
+ }
+ actor->iwork[1]++;
+ actor->iwork[1] &= 3;
+ }
+ sp5C = gPlayer[0].pos.x - actor->obj.pos.x;
+ sp58 = gPlayer[0].pos.y - actor->obj.pos.y;
+ sp54 = gPlayer[0].unk_138 - actor->obj.pos.z;
+ if (actor->timer_0BE == 0) {
+ actor->iwork[2] = 0;
+ if (actor->iwork[0] == 0) {
+ if (D_i3_801C4190[5] == 0) {
+ sp5C = gPlayer[0].pos.x + actor->fwork[1] - actor->obj.pos.x;
+ sp58 = gPlayer[0].pos.y - 100.0f + actor->fwork[2] - actor->obj.pos.y;
+ sp54 = gPlayer[0].unk_138 - actor->fwork[3] - actor->obj.pos.z;
+ } else if ((D_i3_801C41B8[21] != 0) && (D_i3_801C41B8[22] != 0) && (D_i3_801C41B8[23] != 0)) {
+ sp5C = D_i3_801C41B8[21] - actor->obj.pos.x;
+ sp58 = D_i3_801C41B8[22] - actor->obj.pos.y;
+ sp54 = D_i3_801C41B8[23] - actor->obj.pos.z;
+ actor->iwork[2] = 1;
+ }
+ } else if (D_i3_801C4190[5] == 0) {
+ var_s0 = &gActors[actor->iwork[4]];
+ if ((actor->iwork[0] - 1 == var_s0->iwork[0]) && (var_s0->obj.status != OBJ_FREE) &&
+ (var_s0->obj.id == OBJ_ACTOR_268)) {
+ sp5C = var_s0->obj.pos.x + (actor->fwork[1] / 2.0f) - actor->obj.pos.x;
+ sp58 = var_s0->obj.pos.y + (actor->fwork[2] / 2.0f) - actor->obj.pos.y;
+ sp54 = var_s0->obj.pos.z - actor->obj.pos.z;
+ } else {
+ actor->iwork[0]--;
+ sp5C = gPlayer[0].pos.x + actor->fwork[1] - actor->obj.pos.x;
+ sp58 = gPlayer[0].pos.y + actor->fwork[2] - actor->obj.pos.y;
+ sp54 = gPlayer[0].unk_138 - actor->fwork[3] - actor->obj.pos.z;
+ if (actor->iwork[0] < 0) {
+ actor->iwork[0] = 0;
+ }
+ }
+ } else if ((D_i3_801C41B8[21] != 0) && (D_i3_801C41B8[22] != 0) && (D_i3_801C41B8[23] != 0)) {
+ sp68 = actor->iwork[0];
+ var_fs0 = 50.0f;
+ if (Rand_ZeroOne() < 0.5f) {
+ var_fs0 = -50.0f;
+ }
+
+ sp5C = D_i3_801C41B8[21] + ((sp68 & 7) * var_fs0) + RAND_FLOAT(50.0f) - actor->obj.pos.x;
+ sp58 = D_i3_801C41B8[22] + ((sp68 & 7) * (var_fs0 / 2.0f)) + RAND_FLOAT(50.0f) - actor->obj.pos.y;
+ sp54 = D_i3_801C41B8[23] + RAND_FLOAT(50.0f) - actor->obj.pos.z;
+ actor->iwork[2] = 1;
+ }
+ if (1) {}
+ }
+ if ((actor->iwork[2] != 0) && (D_i3_801C4190[5] == 0)) {
+ actor->iwork[2] = 0;
+ actor->fwork[4] = 40.0f;
+ actor->timer_0BE = 20;
+ }
+ func_i3_801BD3B0(actor, sp5C, sp58, sp54);
+ break;
+ case 3:
+ sp5C = gPlayer[0].pos.x + actor->fwork[1] - actor->obj.pos.x;
+ sp58 = gPlayer[0].pos.y + actor->fwork[2] - actor->obj.pos.y;
+ sp54 = gPlayer[0].unk_138 + 10000.0f - actor->fwork[3] - actor->obj.pos.z;
+ actor->iwork[2] = 1;
+ func_i3_801BD3B0(actor, sp5C, sp58, sp54);
+ if ((gPlayer[0].unk_138 + 1000.0f) < actor->obj.pos.z) {
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ break;
+ }
+ actor->unk_0B6++;
+ if (Animation_GetFrameCount(&D_60135E0) < actor->unk_0B6) {
+ actor->unk_0B6 = 0;
+ }
+}
+
+s32 func_i3_801BDDFC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx) {
+ gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
+ if ((limbIndex == 1) || (limbIndex == 2) || (limbIndex == 5)) {
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+ }
+ return false;
+}
+
+// OBJ_ACTOR_268 draw
+void func_i3_801BDE6C(Actor* actor) {
+ Animation_GetFrameData(&D_60135E0, actor->unk_0B6, actor->vwork);
+ if (actor->iwork[3] == 0) {
+ Animation_DrawSkeleton(1, D_60136CC, actor->vwork, func_i3_801BDDFC, NULL, actor, &gIdentityMatrix);
+ } else {
+ Animation_DrawSkeleton(1, D_60137CC, actor->vwork, func_i3_801BDDFC, NULL, actor, &gIdentityMatrix);
+ }
+}
+
+Vec3f D_i3_801C0504[50] = {
+ { 416.0f, 440.0f, -4182.0f }, { 437.0f, 440.0f, -4178.0f }, { 510.0f, 420.0f, -4156.0f },
+ { 168.0f, 361.0f, -4168.0f }, { 434.0f, 440.0f, -4162.0f }, { 465.0f, 465.0f, -4146.0f },
+ { 464.0f, 493.0f, -4124.0f }, { 426.0f, 395.0f, -4136.0f }, { 457.0f, 440.0f, -4112.0f },
+ { 480.0f, 487.0f, -4110.0f }, { 454.0f, 440.0f, -4256.0f }, { 179.0f, 507.0f, -4272.0f },
+ { 442.0f, 392.0f, -4242.0f }, { 450.0f, 481.0f, -4248.0f }, { 474.0f, 420.0f, -4232.0f },
+ { 376.0f, 440.0f, -4196.0f }, { 463.0f, 507.0f, -4190.0f }, { 467.0f, 424.0f, -4208.0f },
+ { 394.0f, 404.0f, -4186.0f }, { 256.0f, 440.0f, -3680.0f }, { 243.0f, 515.0f, -3648.0f },
+ { 277.0f, 390.0f, -3662.0f }, { 234.0f, 457.0f, -3664.0f }, { 561.0f, 440.0f, -4332.0f },
+ { 550.0f, 514.0f, -4346.0f }, { 568.0f, 404.0f, -4304.0f }, { 580.0f, 545.0f, -4350.0f },
+ { 552.0f, 382.0f, -4292.0f }, { 528.0f, 462.0f, -4322.0f }, { 558.0f, 440.0f, -4294.0f },
+ { 396.0f, 440.0f, -4284.0f }, { 391.0f, 363.0f, -4254.0f }, { 379.0f, 501.0f, -4254.0f },
+ { 428.0f, 440.0f, -4246.0f }, { 374.0f, 440.0f, -4282.0f }, { 373.0f, 342.0f, -4290.0f },
+ { 353.0f, 570.0f, -4266.0f }, { 359.0f, 440.0f, -4232.0f }, { 399.0f, 216.0f, -4246.0f },
+ { 406.0f, 251.0f, -4222.0f }, { 380.0f, 189.0f, -4248.0f }, { 370.0f, 278.0f, -4214.0f },
+ { 383.0f, 237.0f, -4266.0f }, { 360.0f, 299.0f, -4320.0f }, { 359.0f, 266.0f, -4280.0f },
+ { 354.0f, 211.0f, -4256.0f }, { 391.0f, 238.0f, -4192.0f }, { 340.0f, 294.0f, -4216.0f },
+ { 423.0f, 242.0f, -4200.0f }, { 429.0f, 311.0f, -4138.0f },
+};
+f32 D_i3_801C075C[51] = {
+ 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f,
+ 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 320.0f, 320.0f, 320.0f, 320.0f, 40.0f, 40.0f, 40.0f,
+ 40.0f, 40.0f, 40.0f, 40.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f,
+ 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 10.0f, 28.0f, 28.0f,
+};
+f32 D_i3_801C0828[51] = {
+ 210.0f, 250.0f, 170.0f, 200.0f, 225.0f, 240.0f, 220.0f, 180.0f, 210.0f, 230.0f, 355.0f, 349.0f, 357.0f,
+ 12.0f, 357.0f, 65.0f, 256.0f, 250.0f, 88.0f, 0.0f, 0.0f, 0.0f, 9.0f, 14.0f, 35.0f, 40.0f,
+ 5.0f, 92.0f, 56.0f, 71.0f, 355.0f, 326.0f, 30.0f, 5.0f, 30.0f, 30.0f, 60.0f, 69.0f, 1.0f,
+ 346.0f, 30.0f, 97.0f, 30.0f, 30.0f, 30.0f, 30.0f, 162.0f, 98.0f, 10.0f, 213.0f, 30.0f,
+};
+
+void func_i3_801BDF14(void) {
+ Actor* var_s0 = &gActors[1];
+ s32 i;
+
+ for (i = 0; i < 50; i++, var_s0++) {
+ Actor_Initialize(var_s0);
+ var_s0->obj.status = OBJ_INIT;
+ var_s0->obj.id = OBJ_ACTOR_195;
+ var_s0->obj.pos.x = D_i3_801C0504[i].x;
+ var_s0->obj.pos.y = D_i3_801C0504[i].y;
+ var_s0->obj.pos.z = D_i3_801C0504[i].z;
+ var_s0->unk_0F4.y = D_i3_801C075C[i];
+ var_s0->unk_0B6 = 41;
+ var_s0->iwork[0] = RAND_INT(20.0f);
+ var_s0->iwork[2] = i;
+ var_s0->timer_0BC = 231;
+ var_s0->fwork[0] = 4.5f;
+ Object_SetInfo(&var_s0->info, var_s0->obj.id);
+ }
+}
+
+void func_i3_801BE034(Actor* actor) {
+ f32 temp;
+
+ if (actor->timer_0BC == 0) {
+ actor->fwork[0] = 10.0f;
+ temp = D_i3_801C0828[actor->iwork[2]];
+ Math_SmoothStepToAngle(&actor->unk_0F4.y, temp, 1.0f, 100.0f, 0.00001f);
+ }
+ actor->iwork[0]++;
+ if (actor->iwork[0] >= Animation_GetFrameCount(&D_60135E0)) {
+ actor->iwork[0] = 0;
+ }
+ if (gPlayer->unk_1D0 >= 5) {
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+}
+
+void func_i3_801BE0F0(Actor* actor) {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ Matrix_Scale(gGfxMatrix, 0.5f, 0.5f, 0.5f, 1);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 255, 255, 255);
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ Animation_GetFrameData(&D_60135E0, actor->iwork[0], actor->vwork);
+ Animation_DrawSkeleton(1, D_60136CC, actor->vwork, NULL, NULL, actor, &gIdentityMatrix);
+ gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
+}
+
+// OBJ_80_126 draw
+void func_i3_801BE1FC(Object_80* obj80) {
+ Matrix_Scale(gGfxMatrix, 0.5f, 0.5f, 0.5f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_600EEF0);
+}
+
+void func_i3_801BE274(Actor* actor, f32 yRot, f32 xRot) {
+ Vec3f sp64;
+ Vec3f sp58;
+ Vec3f sp4C = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp40;
+
+ Matrix_RotateY(gCalcMatrix, 0.017453292f * yRot, 0);
+ Matrix_RotateX(gCalcMatrix, 0.017453292f * xRot, 1);
+ sp40.x = sp40.y = 0.0f;
+ sp40.z = 50.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp40, &sp64);
+ sp64.x += actor->obj.pos.x;
+ sp64.y += actor->obj.pos.y + 8.0f;
+ sp64.z = actor->obj.pos.z;
+ sp40.x = sp40.y = 0.0f;
+ sp40.z = 80.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp40, &sp58);
+ func_8007F04C(355, sp64.x, sp64.y, sp64.z, xRot, yRot, 0.0f, 0.0f, 0.0f, 0.0f, sp58.x, sp58.y, sp58.z, 1.0f);
+}
+
+// OBJ_ACTOR_270 action
+void func_i3_801BE3F8(Actor* actor) {
+ s32 i;
+ f32 sp68;
+ f32 sp64;
+ f32 sp60;
+ f32 sp5C;
+ f32 sp58;
+
+ switch (actor->state) {
+ case 0:
+ actor->health = 30;
+ actor->fwork[0] = 1.0f;
+ actor->fwork[1] = 0.9f;
+ actor->fwork[2] = 0.8f;
+ actor->state++;
+ break;
+ case 1:
+ if (fabsf(gPlayer->pos.z - actor->obj.pos.z) <= 3000.0f) {
+ actor->info.hitbox = SEGMENTED_TO_VIRTUAL(D_60314E4);
+ actor->info.damage = 0;
+ actor->info.bonus = 1;
+ actor->timer_0BC = 40.0f + RAND_FLOAT(30.0f);
+ actor->state++;
+ }
+ break;
+ case 2:
+ actor->unk_0B6++;
+ if (actor->unk_0B6 == 10) {
+ for (i = 0; i < 10; i++) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(200.0f),
+ actor->obj.pos.y + 50.0f + RAND_FLOAT_CENTERED(70.0f), actor->obj.pos.z + 100.0f,
+ 3.0f, 2);
+ }
+ }
+ if ((actor->unk_0B6 == 18) && (actor->health != 0)) {
+ actor->unk_0B6 = 17;
+ if ((fabsf(actor->obj.pos.z - gPlayer->unk_138) > 1000.0f) && (actor->timer_0BC < 20) &&
+ !(actor->timer_0BC & 3)) {
+ sp68 = gPlayer->pos.x + RAND_FLOAT_CENTERED(200.0f) - actor->obj.pos.x;
+ sp64 = gPlayer->pos.y + RAND_FLOAT_CENTERED(200.0f) - actor->obj.pos.y;
+ sp60 = gPlayer->unk_138 - actor->obj.pos.z;
+ sp58 = Math_RadToDeg(Math_Atan2F(sp68, sp60));
+ sp5C = Math_RadToDeg(-Math_Atan2F(sp64, sqrtf(SQ(sp68) + SQ(sp60))));
+ func_i3_801BE274(actor, sp58, sp5C);
+ if (actor->timer_0BC == 0) {
+ actor->timer_0BC = 40.0f + RAND_FLOAT(30.0f);
+ }
+ }
+ }
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_602201C)) {
+ actor->info.bonus = 0;
+ actor->unk_0B6 = Animation_GetFrameCount(&D_602201C) - 1;
+ actor->state++;
+ }
+ break;
+ case 3:
+ break;
+ }
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ if (actor->health != 0) {
+ if (actor->state == 2) {
+ actor->health -= actor->damage;
+ if (actor->health <= 0) {
+ actor->health = actor->unk_044 = 0;
+ func_80066254(actor);
+ for (i = 0; i < 10; i++) {
+ func_i3_801AC8A8(actor->obj.pos.x + RAND_FLOAT_CENTERED(200.0f),
+ actor->obj.pos.y + 50.0f + RAND_FLOAT_CENTERED(70.0f),
+ actor->obj.pos.z + 100.0f, 3.0f, 2);
+ }
+ for (i = 0; i < 3; i++) {
+ func_80081A8C(actor->obj.pos.x + RAND_FLOAT(15.0f), actor->obj.pos.y + RAND_FLOAT(3.0f),
+ actor->obj.pos.z + RAND_FLOAT(5.0f), 1.0f + RAND_FLOAT(0.5f), 7);
+ }
+ func_800815DC();
+ func_8007CF30(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z + 51.0f, 10.0f);
+ }
+ }
+ if (actor->state == 1) {
+ actor->info.hitbox = SEGMENTED_TO_VIRTUAL(D_60314E4);
+ actor->info.damage = 0;
+ actor->info.bonus = 1;
+ actor->state = 2;
+ }
+ }
+ }
+}
+
+// OBJ_ACTOR_270 draw
+void func_i3_801BEB1C(Actor* actor) {
+ Graphics_SetScaleMtx(3.0f);
+ RCP_SetupDL(&gMasterDisp, 0x38);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 143, 143, 255);
+ Animation_GetFrameData(&D_602201C, actor->unk_0B6, actor->vwork);
+ Animation_DrawSkeleton(1, D_60220E8, actor->vwork, NULL, NULL, &actor->index, &gIdentityMatrix);
+ if (actor->health != 0) {
+ RCP_SetupDL(&gMasterDisp, 0x37);
+ Matrix_Scale(gGfxMatrix, actor->fwork[0], actor->fwork[1], actor->fwork[2], 1);
+ Matrix_Translate(gGfxMatrix, 0.0f, -8.0f, 51.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_6002C10);
+ }
+}
+
+// OBJ_BOSS_301 action
+void func_i3_801BEC50(Boss* boss301) {
+}
+
+// OBJ_BOSS_301 draw
+void func_i3_801BEC5C(Boss* boss301) {
+}
+
+// OBJ_ACTOR_188 action
+void func_i3_801BEC68(Actor* actor) {
+}
+
+// OBJ_ACTOR_188 draw
+void func_i3_801BEC74(Actor* actor) {
+}
+
+void func_i3_801BEC80(Player* player) {
+}
+
+void func_i3_801BEC8C(void* arg0) {
+}
diff --git a/src/overlays/ovl_i3/fox_zo.c b/src/overlays/ovl_i3/fox_zo.c
index a8943098..a6901c5e 100644
--- a/src/overlays/ovl_i3/fox_zo.c
+++ b/src/overlays/ovl_i3/fox_zo.c
@@ -46,7 +46,6 @@ typedef struct {
#define ZO_HIT_10(bossZO, index) ((Hitbox*) ((f32*) (ZO_HIT_8(bossZO, 0) + 2) + 6 * (index)))
#define ZO_HIT_12(bossZO) ((Hitbox*) (ZO_HIT_10(bossZO, 0) + 2))
-void func_8007EE68(s32, Vec3f*, Vec3f*, Vec3f*, Vec3f*, f32);
void func_80081BEC(f32, f32, f32, f32, s32);
void func_8008377C(f32, f32, f32, f32, f32);
void func_i3_801A7750(void);
@@ -62,6 +61,20 @@ void func_i3_80199394(Boss* bossZO, s32 arg1);
void func_i3_80199470(Boss* bossZO, s32 arg1);
void func_i3_8019962C(Boss* bossZO, f32 arg1);
+// /* 0x1 */ ROM_SEGMENT(ast_873CB0),
+// /* 0x2 */ ROM_SEGMENT(ast_8AE0A0),
+// /* 0x3 */ ROM_SEGMENT(ast_8BFC00),
+// /* 0x4 */ ROM_SEGMENT(ast_918430),
+// /* 0x5 */ ROM_SEGMENT(ast_CD2410),
+// /* 0x6 */ ROM_SEGMENT(ast_B84560),
+// /* 0x7 */ NO_SEGMENT,
+// /* 0x8 */ NO_SEGMENT,
+// /* 0x9 */ NO_SEGMENT,
+// /* 0xA */ NO_SEGMENT,
+// /* 0xB */ NO_SEGMENT,
+// /* 0xC */ NO_SEGMENT,
+// /* 0xD */ ROM_SEGMENT(ast_955270),
+
extern Gfx D_6002E10[];
extern Gfx D_6004380[];
extern Gfx D_6006360[];
@@ -69,25 +82,25 @@ extern Limb* D_600E7D8[];
extern Gfx D_6013330[];
extern Gfx D_6017950[];
extern Gfx D_60181E0[];
-extern AnimationHeader D_6018550;
+extern Animation D_6018550;
extern Limb* D_601863C[];
extern Gfx D_6018660[];
-extern AnimationHeader D_60195EC;
+extern Animation D_60195EC;
extern Limb* D_6019738[];
-extern AnimationHeader D_601996C;
+extern Animation D_601996C;
extern Limb* D_6019E18[];
extern Gfx D_6019EB0[];
extern Gfx D_601A340[];
-extern AnimationHeader D_601AA48;
+extern Animation D_601AA48;
extern Limb* D_601AB14[];
-extern AnimationHeader D_601AFB8;
+extern Animation D_601AFB8;
extern Limb* D_601B184[];
extern Gfx D_601BCC0[];
extern Gfx D_601C590[];
extern Gfx D_601D680[];
-extern AnimationHeader D_601FBC4;
+extern Animation D_601FBC4;
extern Limb* D_601FC90[];
-extern AnimationHeader D_6021ABC;
+extern Animation D_6021ABC;
extern Limb* D_6021B88[];
extern Gfx D_6023D50[];
extern Gfx D_6025E60[];
@@ -177,7 +190,7 @@ typedef enum {
/* 38 */ ZO_LIMB_38,
/* 39 */ ZO_LIMB_39,
/* 40 */ ZO_LIMB_MAX,
-} ZoLimbs;
+} BossZOLimbs;
typedef enum {
/* 0 */ ZO_BSF_0,
@@ -2509,8 +2522,8 @@ void func_i3_80194A84(Boss* bossZO) {
}
func_8007C120(sZoFwork[ZO_BSF_55_X], sZoFwork[ZO_BSF_55_Y], sZoFwork[ZO_BSF_55_Z], bossZO->vel.x,
bossZO->vel.y, bossZO->vel.z, 0.2f, 10);
- func_8007D0E0(RAND_FLOAT_CENTERED(200.0f) + sZoFwork[ZO_BSF_55_X],
- ((Rand_ZeroOne() - 0.2f) * 800.0f) + sZoFwork[ZO_BSF_55_Y], sZoFwork[ZO_BSF_55_Z], 10.0f);
+ func_8007D0E0(sZoFwork[ZO_BSF_55_X] + RAND_FLOAT_CENTERED(200.0f),
+ sZoFwork[ZO_BSF_55_Y] + RAND_RANGE(-160.0f, 640.0f), sZoFwork[ZO_BSF_55_Z], 10.0f);
if (bossZO->timer_050 == 30) {
Radio_PlayMessage(gMsg_ID_6079, RCID_BOSS_ZONESS);
}
@@ -2596,8 +2609,8 @@ void func_i3_80194A84(Boss* bossZO) {
}
if ((bossZO->timer_050 == 0) && (sZoSwork[ZO_BSS_26] != 0)) {
bossZO->timer_050 = 50;
- sZoFwork[ZO_BSF_37_X] = (Rand_ZeroOne() - 0.3f) * 1100.0f;
- sZoFwork[ZO_BSF_40_X] = (Rand_ZeroOne() - 0.7f) * 800.0f;
+ sZoFwork[ZO_BSF_37_X] = RAND_RANGE(-330.0f, 770.0f);
+ sZoFwork[ZO_BSF_40_X] = RAND_RANGE(-560.0f, 240.0f);
func_i3_801989FC(bossZO);
}
} else {
@@ -3253,7 +3266,7 @@ void func_i3_80198F3C(Boss* bossZO, s32 arg1, s32 arg2) {
sZoLimbTimers[ZO_LIMB_22 + 2 * arg1] = 15;
}
func_8007D0E0(sZoFwork[ZO_BSF_0 + arg2] + RAND_FLOAT_CENTERED(400.0f),
- sZoFwork[ZO_BSF_1 + arg2] + (Rand_ZeroOne() - 0.2f) * 800.0f, sZoFwork[ZO_BSF_2 + arg2], 7.0f);
+ sZoFwork[ZO_BSF_1 + arg2] + RAND_RANGE(-160.0f, 640.0f), sZoFwork[ZO_BSF_2 + arg2], 7.0f);
if (!(gGameFrameCount & 1)) {
func_8007C120(sZoFwork[ZO_BSF_0 + arg2], sZoFwork[ZO_BSF_1 + arg2], sZoFwork[ZO_BSF_2 + arg2], bossZO->vel.x,
bossZO->vel.y, bossZO->vel.z, 0.2f, 10);
diff --git a/src/overlays/ovl_i3/sf_aq.c b/src/overlays/ovl_i3/sf_aq.c
deleted file mode 100644
index da02cf47..00000000
--- a/src/overlays/ovl_i3/sf_aq.c
+++ /dev/null
@@ -1,1108 +0,0 @@
-#include "prevent_bss_reordering.h"
-#include "global.h"
-
-void func_i3_801AC918(Effect*);
-void func_i3_801AD6C0(Actor*);
-void func_i3_801AE168(Actor*);
-void func_i3_801AE3D8(Actor*);
-void func_i3_801AEB44(Actor*);
-void func_i3_801AFA5C(Actor*);
-void func_i3_801B099C(Actor*);
-void func_i3_801B0B60(Actor*);
-void func_i3_801B0EC0(Actor*);
-void func_i3_801B504C(Actor*);
-void func_i3_801B50E8(Actor*);
-void func_i3_801B619C(Actor*);
-void func_i3_801B638C(Actor*);
-void func_i3_801B6FF8(Actor*);
-void func_i3_801B7A24(Actor*);
-void func_i3_801B7C78(Actor*);
-void func_i3_801B90DC(Actor*);
-void func_i3_801B91A4(Actor*);
-void func_i3_801BA108(Actor*);
-void func_i3_801BA26C(Actor*);
-void func_i3_801BA4E4(Actor*);
-void func_i3_801BA6A4(Actor*);
-void func_i3_801BAD7C(Actor*);
-void func_i3_801BADF8(Actor*);
-void func_i3_801BB204(Actor*);
-void func_i3_801BB79C(Actor*);
-void func_i3_801BC930(Actor*);
-void func_i3_801BC9A0(Actor*);
-void func_i3_801BD264(Actor*);
-void func_i3_801BD54C(Actor*);
-void func_i3_801BDE6C(Actor*);
-void func_i3_801BE1FC(Object_80*);
-void func_i3_801BE3F8(Actor*);
-void func_i3_801BEB1C(Actor*);
-void func_i3_801BEC68(Actor*);
-void func_i3_801BEC74(Actor*);
-
-typedef enum {
- /* 0 */ AQ_SWK_0,
- /* 1 */ AQ_SWK_1,
- /* 2 */ AQ_SWK_2,
- /* 3 */ AQ_SWK_3,
- /* 4 */ AQ_SWK_4,
- /* 5 */ AQ_SWK_5,
- /* 6 */ AQ_SWK_6,
- /* 7 */ AQ_SWK_7,
- /* 8 */ AQ_SWK_8,
- /* 9 */ AQ_SWK_9,
- /* 10 */ AQ_SWK_10,
- /* 11 */ AQ_SWK_11,
- /* 12 */ AQ_SWK_12,
- /* 13 */ AQ_SWK_13,
- /* 14 */ AQ_SWK_14,
- /* 15 */ AQ_SWK_15,
- /* 16 */ AQ_SWK_16,
- /* 17 */ AQ_SWK_17,
- /* 18 */ AQ_SWK_18,
- /* 19 */ AQ_SWK_19,
- /* 20 */ AQ_SWK_20,
- /* 21 */ AQ_SWK_21,
- /* 22 */ AQ_SWK_22,
- /* 23 */ AQ_SWK_23,
- /* 24 */ AQ_SWK_24,
- /* 25 */ AQ_SWK_25,
- /* 26 */ AQ_SWK_26,
- /* 27 */ AQ_SWK_27,
- /* 28 */ AQ_SWK_28,
- /* 29 */ AQ_SWK_29,
- /* 30 */ AQ_SWK_30,
- /* 31 */ AQ_SWK_31,
- /* 32 */ AQ_SWK_32,
- /* 33 */ AQ_SWK_33,
- /* 34 */ AQ_SWK_34,
- /* 35 */ AQ_SWK_35,
- /* 36 */ AQ_SWK_36,
- /* 37 */ AQ_SWK_37,
- /* 38 */ AQ_SWK_38,
- /* 39 */ AQ_SWK_39,
- /* 40 */ AQ_SWK_MAX,
-} BossAQswork;
-
-typedef enum {
- /* 0 */ AQ_FWK_0,
- /* 1 */ AQ_FWK_1,
- /* 2 */ AQ_FWK_2,
- /* 3 */ AQ_FWK_3,
- /* 4 */ AQ_FWK_4,
- /* 5 */ AQ_FWK_5,
- /* 6 */ AQ_FWK_6,
- /* 7 */ AQ_FWK_7,
- /* 8 */ AQ_FWK_8,
- /* 9 */ AQ_FWK_9,
- /* 10 */ AQ_FWK_10,
- /* 11 */ AQ_FWK_11,
- /* 12 */ AQ_FWK_12,
- /* 13 */ AQ_FWK_13,
- /* 14 */ AQ_FWK_14,
- /* 15 */ AQ_FWK_15,
- /* 16 */ AQ_FWK_16,
- /* 17 */ AQ_FWK_17,
- /* 18 */ AQ_FWK_18,
- /* 19 */ AQ_FWK_19,
- /* 20 */ AQ_FWK_20,
- /* 21 */ AQ_FWK_21,
- /* 22 */ AQ_FWK_22,
- /* 23 */ AQ_FWK_23,
- /* 24 */ AQ_FWK_24,
- /* 25 */ AQ_FWK_25,
- /* 26 */ AQ_FWK_26,
- /* 27 */ AQ_FWK_27,
- /* 28 */ AQ_FWK_28,
- /* 29 */ AQ_FWK_29,
- /* 30 */ AQ_FWK_30,
- /* 31 */ AQ_FWK_31,
- /* 32 */ AQ_FWK_32,
- /* 33 */ AQ_FWK_33,
- /* 34 */ AQ_FWK_34,
- /* 35 */ AQ_FWK_35,
- /* 36 */ AQ_FWK_36,
- /* 37 */ AQ_FWK_37,
- /* 38 */ AQ_FWK_38,
- /* 39 */ AQ_FWK_39,
- /* 40 */ AQ_FWK_40,
- /* 41 */ AQ_FWK_41,
- /* 42 */ AQ_FWK_42,
- /* 43 */ AQ_FWK_43,
- /* 44 */ AQ_FWK_44,
- /* 45 */ AQ_FWK_45,
- /* 46 */ AQ_FWK_46,
- /* 47 */ AQ_FWK_47,
- /* 48 */ AQ_FWK_48,
- /* 49 */ AQ_FWK_49,
- /* 50 */ AQ_FWK_MAX,
-} BossAQfwork;
-
-typedef enum {
- /* 0 */ AQ_VWK_0,
- /* 1 */ AQ_VWK_1,
- /* 2 */ AQ_VWK_2,
- /* 3 */ AQ_VWK_3,
- /* 4 */ AQ_VWK_4,
- /* 5 */ AQ_VWK_5,
- /* 6 */ AQ_VWK_6,
- /* 7 */ AQ_VWK_7,
- /* 8 */ AQ_VWK_8,
- /* 9 */ AQ_VWK_9,
- /* 10 */ AQ_VWK_10,
- /* 11 */ AQ_VWK_11,
- /* 12 */ AQ_VWK_12,
- /* 13 */ AQ_VWK_13,
- /* 14 */ AQ_VWK_14,
- /* 15 */ AQ_VWK_15,
- /* 16 */ AQ_VWK_16,
- /* 17 */ AQ_VWK_17,
- /* 18 */ AQ_VWK_18,
- /* 19 */ AQ_VWK_19,
- /* 20 */ AQ_VWK_20,
- /* 21 */ AQ_VWK_21,
- /* 22 */ AQ_VWK_22,
- /* 23 */ AQ_VWK_23,
- /* 24 */ AQ_VWK_24,
- /* 25 */ AQ_VWK_25,
- /* 26 */ AQ_VWK_26,
- /* 27 */ AQ_VWK_27,
- /* 28 */ AQ_VWK_28,
- /* 29 */ AQ_VWK_29,
- /* 30 */ AQ_VWK_30,
- /* 31 */ AQ_VWK_31,
- /* 32 */ AQ_VWK_32,
- /* 33 */ AQ_VWK_33,
- /* 34 */ AQ_VWK_34,
- /* 35 */ AQ_VWK_35,
- /* 36 */ AQ_VWK_36,
- /* 37 */ AQ_VWK_37,
- /* 38 */ AQ_VWK_38,
- /* 39 */ AQ_VWK_39,
- /* 40 */ AQ_VWK_40,
- /* 41 */ AQ_VWK_41,
- /* 42 */ AQ_VWK_42,
- /* 43 */ AQ_VWK_43,
- /* 44 */ AQ_VWK_44,
- /* 45 */ AQ_VWK_45,
- /* 46 */ AQ_VWK_46,
- /* 47 */ AQ_VWK_47,
- /* 48 */ AQ_VWK_48,
- /* 49 */ AQ_VWK_49,
- /* 50 */ AQ_VWK_MAX,
-} BossAQvwork;
-
-f32 D_i3_801BFB60 = 0.0f;
-s32 D_i3_801BFB64[11] = {
- 0, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3,
-};
-u8 D_i3_801BFB90[12] = {
- 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
-};
-Gfx* D_i3_801BFB9C[3] = { D_6015FF0, D_6022110, D_6015DD0 };
-f32 D_i3_801BFBA8[2] = { 40.0f, -40.0f };
-f32 D_i3_801BFBB0[3] = { 20.0f, 10.0f, 15.0f };
-f32 D_i3_801BFBBC[3] = { 8.0f, 27.0f, 42.0f };
-f32 D_i3_801BFBC8[3] = { 15.0f, 6.0f, 7.0f };
-f32 D_i3_801BFBD4[3] = { 358.0f, 12.0f, 352.0f };
-f32 D_i3_801BFBE0[3][4] = {
- { 1.3f, 0.1f, 1.0f, 777.0f },
- { 0.7f, 0.5f, 5.0f, 777.0f },
- { 1.0f, 0.2f, 2.0f, 777.0f },
-};
-f32 D_i3_801BFC10[3][4] = {
- { 0.6f, 0.1f, 1.0f, 777.0f },
- { 1.5f, 0.5f, 5.0f, 777.0f },
- { 1.0f, 0.2f, 2.0f, 777.0f },
-};
-f32 D_i3_801BFC40[3][4] = {
- { 1.3f, 0.1f, 1.0f, 777.0f },
- { 0.7f, 0.5f, 5.0f, 777.0f },
- { 1.0f, 0.2f, 2.0f, 777.0f },
-};
-s32 D_i3_801BFC70[3] = { 18, 22, 45 };
-f32 D_i3_801BFC7C[3] = { 20.0f, 10.0f, 0.0f };
-f32 D_i3_801BFC88[3] = { 10.0f, 320.0f, 30.0f };
-Vec3f D_i3_801BFC94[6][4] = {
- { { 1.0f, 1.0f, 1.0f }, { 0.9f, 0.9f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 0.9f, 0.9f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 0.9f, 0.9f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 0.9f, 1.0f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 0.9f, 1.0f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8f, 0.9f }, { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f } },
-};
-s32 D_i3_801BFDB4[6][4] = {
- { 1, 5, 15, 100000 }, { 1, 5, 15, 100000 }, { 1, 5, 15, 100000 },
- { 1, 10, 20, 100000 }, { 1, 10, 20, 100000 }, { 1, 10, 20, 100000 },
-};
-s32 D_i3_801BFE14 = 0;
-Vec3f D_i3_801BFE18[6][4] = {
- { { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f } },
- { { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f } },
- { { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f }, { 0.4f, 0.4f, 0.4f } },
- { { 0.2f, 0.2f, 0.2f }, { 0.3f, 0.3f, 0.3f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f } },
- { { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f } },
- { { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f } },
-};
-Vec3f D_i3_801BFF38[6][4] = {
- { { 1.0f, 1.0f, 1.0f }, { 5.0f, 5.0f, 5.0f }, { 10.0f, 10.0f, 10.0f }, { 5.0f, 5.0f, 5.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 5.0f, 5.0f, 5.0f }, { 10.0f, 10.0f, 10.0f }, { 5.0f, 5.0f, 5.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 3.0f, 3.0f, 3.0f }, { 2.0f, 2.0f, 2.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 3.0f, 1.0f, 3.0f }, { 2.0f, 1.0f, 2.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 3.0f, 1.0f, 3.0f }, { 2.0f, 1.0f, 2.0f }, { 1.0f, 1.0f, 1.0f } },
- { { 1.0f, 1.0f, 1.0f }, { 1.0f, 4.0f, 3.0f }, { 1.0f, 3.0f, 2.0f }, { 1.0f, 1.0f, 1.0f } },
-};
-f32 D_i3_801C0058 = 191.0f;
-f32 D_i3_801C005C = 63.0f;
-f32 D_i3_801C0060[14] = {
- 50.0f, 8.0f, 50.0f, 8.0f, 10.0f, 1.0f, 20.0f, 2.0f, 20.0f, 2.0f, 20.0f, 2.0f, 50.0f, 2.0f,
-};
-Vec3f D_i3_801C0098[2] = {
- { 370.0f, -53.0f, 1085.0f },
- { -370.0f, -53.0f, 1085.0f },
-};
-f32 D_i3_801C00B0[3][4] = {
- { 1.0f, 1.2f, 0.8f, 1.0f },
- { 1.0f, 1.2f, 0.9f, 1.0f },
- { 1.0f, 0.7f, 1.4f, 1.0f },
-};
-s32 D_i3_801C00E0[4] = { 1, 5, 8, 40 };
-f32 D_i3_801C00F0[3][4] = {
- { 0.3f, 0.3f, 0.3f, 0.3f },
- { 0.3f, 0.3f, 0.3f, 0.3f },
- { 0.5f, 0.5f, 0.5f, 0.5f },
-};
-f32 D_i3_801C0120[3][4] = {
- { 1.0f, 1.0f, 1.0f, 1.0f },
- { 1.0f, 1.0f, 1.0f, 1.0f },
- { 2.0f, 2.0f, 2.0f, 2.0f },
-};
-f32 D_i3_801C0150[4][4] = {
- { 0.0f, 0.0f, 0.0f, 0.0f },
- { 0.0f, -25.5f, 0.0f, 0.0f },
- { -25.5f, 25.5f, -25.5f, 0.0f },
- { 25.5f, 0.0f, 25.5f, 0.0f },
-};
-f32 D_i3_801C0190[5] = {
- 0.0f, -30.0f, 30.0f, -30.0f, 30.0f,
-};
-Vec3f D_i3_801C01A4 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C01B0 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C01BC = { 340.0f, 600.0f, 1480.0f };
-Vec3f D_i3_801C01C8 = { -640.0f, 380.0f, 1520.0f };
-Vec3f D_i3_801C01D4 = { 760.0f, 340.0f, 1560.0f };
-Vec3f D_i3_801C01E0 = { 130.0f, 350.0f, 130.0f };
-Vec3f D_i3_801C01EC = { -130.0f, 350.0f, 130.0f };
-f32 D_i3_801C01F8[11] = {
- 400.0f, 430.0f, 460.0f, 490.0f, 520.0f, 550.0f, 580.0f, 610.0f, 640.0f, 670.0f, 700.0f,
-};
-f32 D_i3_801C0224[11] = {
- 6.0f, 6.0f, 8.0f, 8.0f, 8.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f,
-};
-Vec3f D_i3_801C0250 = { 0.0f, 0.0f, 0.0f };
-f32 D_i3_801C025C[2] = { 120.0f, 0.0f };
-s32 D_i3_801C0264[19] = {
- 0, 0, 3, 4, 0, 5, 6, 7, 1, 2, 0, 0, 0, 0, 0, 0, 8, 9, 0,
-};
-Vec3f D_i3_801C02B0 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C02BC = { 0.0f, 0.0f, 0.0f };
-f32 D_i3_801C02C8[2] = { 255.0f, 68.0f };
-s32 D_i3_801C02D0[2] = { 70, 100 };
-Vec3f D_i3_801C02D8 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C02E4 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C02F0 = { 108.0f, 0.0f, 24.0f };
-Vec3f D_i3_801C02FC = { 102.0f, 14.0f, -21.0f };
-Vec3f D_i3_801C0308 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C0314 = { 0.0f, 0.0f, 50.0f };
-Vec3f D_i3_801C0320 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C032C = { -27.0f, 7.0f, 5.0f };
-Vec3f D_i3_801C0338 = { 0.0f, 0.0f, 0.0f };
-Vec3f D_i3_801C0344[4] = {
- { -6.4f, -4.6f, -7.8f },
- { 6.4f, 4.6f, 7.8f },
- { -5.9f, -7.8f, -7.0f },
- { 5.9f, 7.8f, 7.0f },
-};
-Vec3f D_i3_801C0374[17] = {
- { 1.0f, 1.0f, 1.0f }, { 1.3f, 0.8f, 1.3f }, { 1.0f, 1.2f, 1.0f }, { 1.3f, 0.8f, 1.3f },
- { 1.0f, 1.0f, 1.0f }, { 1.3f, 1.0f, 1.3f }, { 1.0f, 1.0f, 1.0f }, { 1.3f, 1.0f, 1.3f },
- { 1.0f, 1.0f, 1.0f }, { 0.85f, 0.95f, 0.85f }, { 0.85f, 0.95f, 0.85f }, { 0.85f, 0.95f, 0.85f },
- { 1.0f, 1.05f, 1.0f }, { 0.85f, 0.95f, 0.85f }, { 0.85f, 0.95f, 0.85f }, { 0.85f, 0.95f, 0.85f },
- { 0.85f, 0.95f, 0.85f },
-};
-s32 D_i3_801C0440[24] = {
- 0, 30, 60, 90, 0, 0, 0, 0, 0, 15, 30, 45, 0, 0, 0, 0, 0, 15, 30, 45, 60, 75, 90, 105,
-};
-s32 D_i3_801C04A0[6] = {
- 15, -15, 10, -10, 7, -7,
-};
-Vec3f D_i3_801C04B8 = { 0.0f, 0.0f, 0.0f };
-s32 D_i3_801C04C4[9] = {
- 1, 5, 9, 14, 15, 16, 17, 0, 13,
-};
-Vec3f D_i3_801C04E8 = { 0.0f, 0.0f, 0.0f };
-f32 D_i3_801C04F4[4] = { 700.0f, 300.0f, 600.0f, 400.0f };
-Vec3f D_i3_801C0504[50] = {
- { 416.0f, 440.0f, -4182.0f }, { 437.0f, 440.0f, -4178.0f }, { 510.0f, 420.0f, -4156.0f },
- { 168.0f, 361.0f, -4168.0f }, { 434.0f, 440.0f, -4162.0f }, { 465.0f, 465.0f, -4146.0f },
- { 464.0f, 493.0f, -4124.0f }, { 426.0f, 395.0f, -4136.0f }, { 457.0f, 440.0f, -4112.0f },
- { 480.0f, 487.0f, -4110.0f }, { 454.0f, 440.0f, -4256.0f }, { 179.0f, 507.0f, -4272.0f },
- { 442.0f, 392.0f, -4242.0f }, { 450.0f, 481.0f, -4248.0f }, { 474.0f, 420.0f, -4232.0f },
- { 376.0f, 440.0f, -4196.0f }, { 463.0f, 507.0f, -4190.0f }, { 467.0f, 424.0f, -4208.0f },
- { 394.0f, 404.0f, -4186.0f }, { 256.0f, 440.0f, -3680.0f }, { 243.0f, 515.0f, -3648.0f },
- { 277.0f, 390.0f, -3662.0f }, { 234.0f, 457.0f, -3664.0f }, { 561.0f, 440.0f, -4332.0f },
- { 550.0f, 514.0f, -4346.0f }, { 568.0f, 404.0f, -4304.0f }, { 580.0f, 545.0f, -4350.0f },
- { 552.0f, 382.0f, -4292.0f }, { 528.0f, 462.0f, -4322.0f }, { 558.0f, 440.0f, -4294.0f },
- { 396.0f, 440.0f, -4284.0f }, { 391.0f, 363.0f, -4254.0f }, { 379.0f, 501.0f, -4254.0f },
- { 428.0f, 440.0f, -4246.0f }, { 374.0f, 440.0f, -4282.0f }, { 373.0f, 342.0f, -4290.0f },
- { 353.0f, 570.0f, -4266.0f }, { 359.0f, 440.0f, -4232.0f }, { 399.0f, 216.0f, -4246.0f },
- { 406.0f, 251.0f, -4222.0f }, { 380.0f, 189.0f, -4248.0f }, { 370.0f, 278.0f, -4214.0f },
- { 383.0f, 237.0f, -4266.0f }, { 360.0f, 299.0f, -4320.0f }, { 359.0f, 266.0f, -4280.0f },
- { 354.0f, 211.0f, -4256.0f }, { 391.0f, 238.0f, -4192.0f }, { 340.0f, 294.0f, -4216.0f },
- { 423.0f, 242.0f, -4200.0f }, { 429.0f, 311.0f, -4138.0f },
-};
-f32 D_i3_801C075C[51] = {
- 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f,
- 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 320.0f, 320.0f, 320.0f, 320.0f, 40.0f, 40.0f, 40.0f,
- 40.0f, 40.0f, 40.0f, 40.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f,
- 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 28.0f, 10.0f, 28.0f, 28.0f,
-};
-f32 D_i3_801C0828[51] = {
- 210.0f, 250.0f, 170.0f, 200.0f, 225.0f, 240.0f, 220.0f, 180.0f, 210.0f, 230.0f, 355.0f, 349.0f, 357.0f,
- 12.0f, 357.0f, 65.0f, 256.0f, 250.0f, 88.0f, 0.0f, 0.0f, 0.0f, 9.0f, 14.0f, 35.0f, 40.0f,
- 5.0f, 92.0f, 56.0f, 71.0f, 355.0f, 326.0f, 30.0f, 5.0f, 30.0f, 30.0f, 60.0f, 69.0f, 1.0f,
- 346.0f, 30.0f, 97.0f, 30.0f, 30.0f, 30.0f, 30.0f, 162.0f, 98.0f, 10.0f, 213.0f, 30.0f,
-};
-Vec3f D_i3_801C08F4 = { 0.0f, 0.0f, 0.0f };
-
-PosRot* D_i3_801C27C0;
-PosRot D_i3_801C27C8[4][50];
-Vtx D_i3_801C3A88[2][2][28];
-f32 D_i3_801C4188;
-s32 D_i3_801C4190[10];
-f32 D_i3_801C41B8[30];
-s32 D_i3_801C4230[28];
-s32 D_i3_801C42A0[25];
-f32 D_i3_801C4308[82];
-s32 D_i3_801C4450;
-s32 D_i3_801C4454;
-f32 D_i3_801C4458;
-f32 D_i3_801C445C;
-
-extern Gfx D_3000130[];
-extern Gfx D_3000470[];
-extern Gfx D_3000AF0[];
-extern Gfx D_3000C70[];
-extern Gfx D_3006AF0[];
-extern Gfx D_3006C70[];
-extern Gfx D_3006DE0[];
-extern AnimationHeader D_6000AE4;
-extern Limb* D_6000DB0[];
-extern AnimationHeader D_6002628;
-extern Limb* D_6002874[];
-extern Gfx D_6002C10[];
-extern AnimationHeader D_6005954;
-extern Limb* D_6005A80[];
-extern u8 D_6008EC8[];
-extern u8 D_6008FC8[];
-extern Vtx D_6011A78[];
-extern AnimationHeader D_60135E0;
-extern Limb* D_60136CC;
-extern Limb* D_60137CC;
-extern Gfx D_60137F0[];
-extern Gfx D_6014030[];
-extern AnimationHeader D_6014438;
-extern Limb* D_6014504[];
-extern Gfx D_6014520[];
-extern Gfx D_6014FD0[];
-extern Vtx D_6018878[];
-extern Vtx D_6018C78[];
-extern Vtx D_6019078[];
-extern u8 D_6019238[];
-extern u8 D_6019338[];
-extern Gfx D_60194D0[];
-extern Gfx D_6019880[];
-extern Gfx D_6019E80[];
-extern AnimationHeader D_601DE50;
-extern AnimationHeader D_601EC68;
-extern Limb* D_601EDB4[];
-extern AnimationHeader D_6020A40;
-extern Limb* D_6020C6C[];
-extern AnimationHeader D_6023780;
-extern Limb* D_602390C[];
-extern Gfx D_6024A50[];
-extern AnimationHeader D_6024F80;
-extern Limb* D_602512C;
-extern AnimationHeader D_60260EC;
-extern Limb* D_60263F8[];
-extern AnimationHeader D_602AC28;
-extern Limb* D_602BD60[];
-extern f32 D_6030D3C[];
-extern f32 D_6030D58[];
-extern f32 D_60314AC[];
-extern f32 D_60314E4[];
-extern f32 D_603151C[];
-extern Vtx D_6031D90[];
-
-void func_i3_801A8E30(void);
-void func_i3_801A92EC(Actor* actor, f32 xUnk, f32 yUnk, f32 zUnk, s32 index, s32 mode);
-void func_i3_801A9374(Actor* actor, Vec3f* pos, Vec3f* rot, f32 xVel, f32 yVel, f32 zVel, s32 unkB8, f32 scale,
- s32 timerBC, s32 unk48);
-void func_i3_801A9448(Vec3f* pos, Vec3f* rot, f32 xVel, f32 yVel, f32 zVel, s32 unkB8, f32 scale, s32 timerBC,
- s32 unk48);
-void func_i3_801A94EC(Vec3f* pos, ObjectId objId);
-f32 func_i3_801A958C(s32 arg0, f32 arg1);
-void func_i3_801A95C8(void);
-void func_i3_801A96DC(Actor* actor);
-void func_i3_801A9728(Actor* actor, f32 radius, f32 scale, s32 spread);
-void func_i3_801A9824(void);
-void func_i3_801A99D4(Player* player);
-void func_i3_801A9C98(Player* player);
-void func_i3_801A9DE4(Player* player);
-void func_i3_801A9ED0(Player* player);
-void func_i3_801AA20C(void);
-void func_i3_801AA4BC(Player* player);
-void func_i3_801AA8E8(Player* player);
-void func_i3_801AACF8(Player* player);
-void func_i3_801AB9B0(Player* player);
-void func_i3_801ABA40(PlayerShot* shot);
-void func_i3_801AC09C(Player* player);
-void func_i3_801AC18C(Player* player);
-void func_i3_801AC274(Player* player);
-void func_i3_801AC7C8(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 unk4E);
-void func_i3_801AC8A8(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 unk4E);
-void func_i3_801AC918(Effect* effect);
-void func_i3_801ACBB4(Player* player);
-void func_i3_801ACE50(Player* player);
-void func_i3_801AD328(Player* player);
-void func_i3_801AD598(Actor* actor);
-void func_i3_801AD688(Actor* actor);
-void func_i3_801AD6C0(Actor* actor);
-void func_i3_801AE168(Actor* actor);
-void func_i3_801AE3AC(Actor* actor);
-void func_i3_801AE3D8(Actor* actor);
-void func_i3_801AEB44(Actor* actor);
-void func_i3_801AF9FC(Actor* actor);
-void func_i3_801AFA5C(Actor* actor);
-void func_i3_801B099C(Actor* actor);
-void func_i3_801B0B60(Actor* actor);
-void func_i3_801B0EC0(Actor* actor);
-void func_i3_801B0F88(Boss* bossAQ);
-void func_i3_801B0FCC(Boss* bossAQ);
-void func_i3_801B1008(Boss* bossAQ, s16 timer);
-void func_i3_801B10F8(Boss* bossAQ);
-void func_i3_801B134C(Boss* bossAQ);
-bool func_i3_801B42AC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx);
-void func_i3_801B49DC(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801B4D84(Boss* bossAQ);
-bool func_i3_801B4DDC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx);
-void func_i3_801B4E94(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801B504C(Actor* actor);
-void func_i3_801B50E8(Actor* actor);
-bool func_i3_801B5C18(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx);
-void func_i3_801B5F68(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801B619C(Actor* actor);
-void func_i3_801B6344(Actor* actor);
-void func_i3_801B638C(Actor* actor);
-void func_i3_801B6E54(Actor* actor);
-void func_i3_801B6FF8(Actor* actor);
-bool func_i3_801B76EC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx);
-void func_i3_801B7754(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801B7A24(Actor* actor);
-void func_i3_801B7AF0(Actor* actor);
-void func_i3_801B7C78(Actor* actor);
-bool func_i3_801B8C50(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx);
-void func_i3_801B8D7C(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801B90DC(Actor* actor);
-void func_i3_801B91A4(Actor* actor);
-void func_i3_801B9DB0(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801BA108(Actor* actor);
-void func_i3_801BA26C(Actor* actor);
-void func_i3_801BA4E4(Actor* actor);
-void func_i3_801BA57C(Actor* actor);
-void func_i3_801BA6A4(Actor* actor);
-void func_i3_801BAD7C(Actor* actor);
-void func_i3_801BADF8(Actor* actor);
-void func_i3_801BB0C4(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801BB204(Actor* actor);
-void func_i3_801BB26C(Actor* actor);
-void func_i3_801BB79C(Actor* actor);
-bool func_i3_801BC530(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx);
-void func_i3_801BC91C(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801BC930(Actor* actor);
-void func_i3_801BC9A0(Actor* actor);
-void func_i3_801BD17C(s32 limbIndex, Vec3f* rot, void* thisx);
-void func_i3_801BD264(Actor* actor);
-void func_i3_801BD3B0(Actor* actor, f32 x, f32 y, f32 z);
-void func_i3_801BD54C(Actor* actor);
-bool func_i3_801BDDFC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* thisx);
-void func_i3_801BDE6C(Actor* actor);
-void func_i3_801BDF14(void);
-void func_i3_801BE034(Actor* actor);
-void func_i3_801BE0F0(Actor* actor);
-void func_i3_801BE1FC(Object_80* obj80);
-void func_i3_801BE274(Actor* actor, f32 yRot, f32 xRot);
-void func_i3_801BE3F8(Actor* actor);
-void func_i3_801BEB1C(Actor* actor);
-void func_i3_801BEC68(Actor* actor);
-void func_i3_801BEC74(Actor* actor);
-void func_i3_801BEC80(Player* player);
-void func_i3_801BEC8C(UNK_TYPE arg0);
-
-void func_i3_801A8E30(void) {
- s32 i;
- f32 spA8[17];
- f32 sp64[17];
- s32 j;
- Vtx* sp5C = SEGMENTED_TO_VIRTUAL(D_6031D90);
- Vtx* sp58 = SEGMENTED_TO_VIRTUAL(D_6011A78);
-
- for (i = 0; i < 17; i++) {
- if ((i == 0) || (i == 16)) {
- spA8[i] = 0.0f;
- sp64[i] = 0.0f;
- } else {
- spA8[i] = RAND_FLOAT_CENTERED(70.0f);
- sp64[i] = RAND_FLOAT_CENTERED(70.0f);
- }
- }
- for (i = 0; i < 34; i++) {
- j = (sp5C[i].v.ob[2] + 200) / 25;
- sp58[i].v.ob[0] = sp5C[i].v.ob[0] + spA8[j];
- sp58[i].v.ob[1] = sp5C[i].v.ob[1] + sp64[j];
- }
-}
-
-void func_i3_801A92EC(Actor* actor, f32 xUnk, f32 yUnk, f32 zUnk, s32 index, s32 mode) {
- gUnkEntities30[index].mode = mode;
- gUnkEntities30[index].unk_28 = 10.0f;
- gUnkEntities30[index].unk_04.x = actor->obj.pos.x;
- gUnkEntities30[index].unk_04.y = actor->obj.pos.y;
- gUnkEntities30[index].unk_04.z = actor->obj.pos.z;
- gUnkEntities30[index].unk_10.x = xUnk;
- gUnkEntities30[index].unk_10.y = yUnk;
- gUnkEntities30[index].unk_10.z = zUnk;
- gUnkEntities30[index].unk_2C = gUnkEntities30[index].unk_2D = gUnkEntities30[index].unk_2E =
- gUnkEntities30[index].unk_2F = 255;
- gUnkEntities30[index].timer = 3;
-}
-
-void func_i3_801A9374(Actor* actor, Vec3f* pos, Vec3f* rot, f32 xVel, f32 yVel, f32 zVel, s32 unkB8, f32 scale,
- s32 timerBC, s32 unk48) {
- Actor_Initialize(actor);
- actor->obj.status = 2;
- actor->obj.id = 189;
- actor->state = unkB8;
- actor->scale = scale;
- actor->unk_048 = unk48;
- actor->obj.pos = *pos;
- actor->obj.rot = *rot;
- actor->vel.x = xVel;
- actor->vel.y = yVel;
- actor->vel.z = zVel;
- actor->timer_0BC = timerBC;
- actor->gravity = 0.5f;
- Object_SetInfo(&actor->info, actor->obj.id);
-}
-
-void func_i3_801A9448(Vec3f* pos, Vec3f* rot, f32 xVel, f32 yVel, f32 zVel, s32 unkB8, f32 scale, s32 timerBC,
- s32 unk48) {
- s32 i;
-
- for (i = 59; i >= 0; i--) {
- if (gActors[i].obj.status == 0) {
- func_i3_801A9374(&gActors[i], pos, rot, xVel, yVel, zVel, unkB8, scale, timerBC, unk48);
- break;
- }
- }
-}
-
-void func_i3_801A94EC(Vec3f* pos, ObjectId objId) {
- Item* sp18;
- Item* item;
- s32 i;
-
- for (i = 0, item = gItems; i < ARRAY_COUNT(gItems); i++, item++) {
- if (item->obj.status == 0) {
- Item_Initialize(item);
- item->obj.status = 1;
- item->obj.id = objId;
- item->obj.pos.x = pos->x;
- item->obj.pos.y = pos->y;
- item->obj.pos.z = pos->z;
- item->timer_4A = 2;
- Object_SetInfo(&item->info, item->obj.id);
- break;
- }
- }
-}
-
-f32 func_i3_801A958C(s32 arg0, f32 arg1) {
- f32 var_fv1 = arg0 / 2.0f;
-
- var_fv1 = MIN(arg1, var_fv1);
-
- return var_fv1;
-}
-
-void func_i3_801A95C8(void) {
- Math_SmoothStepToF(&gPlayer[0].camEye.x, D_80177978, 0.1f, 50.0f, 0.0001f);
- Math_SmoothStepToF(&gPlayer[0].camEye.y, D_80177980, 0.1f, 50.0f, 0.0001f);
- Math_SmoothStepToF(&gPlayer[0].camEye.z, D_80177988, 0.1f, 50.0f, 0.0001f);
- Math_SmoothStepToF(&gPlayer[0].camAt.x, D_801779A0, 0.1f, 50.0f, 0.0001f);
- Math_SmoothStepToF(&gPlayer[0].camAt.y, D_801779B8, 0.1f, 50.0f, 0.0001f);
- Math_SmoothStepToF(&gPlayer[0].camAt.z, D_801779C0, 0.1f, 50.0f, 0.0001f);
-}
-
-void func_i3_801A96DC(Actor* actor) {
- actor->obj.rot.y = RAD_TO_DEG(-gPlayer->unk_058);
- actor->obj.rot.x = RAD_TO_DEG(gPlayer->unk_05C);
-}
-
-void func_i3_801A9728(Actor* actor, f32 radius, f32 scale, s32 spread) {
- f32 temp_fs0;
- f32 temp_fs1;
- f32 temp;
- s32 i;
-
- for (i = 0; i < 36; i += spread) {
- temp_fs1 = SIN_DEG(i * 10.0f) * radius;
- temp_fs0 = COS_DEG(i * 10.0f) * radius;
- temp = gGroundLevel + 30.0f;
- func_8007B8F8(actor->obj.pos.x + temp_fs1, temp, actor->obj.pos.z + temp_fs0, scale);
- }
-}
-
-void func_i3_801A9824(void) {
- s32 i;
- f32* var_v0;
- f32* var_v0_4;
- s32* var_a0;
- s32* var_v0_2;
- s32* var_v0_3;
-
- gTeamShields[1] = gTeamShields[2] = gTeamShields[3] = 0xFF;
- for (i = 0; i < ARRAY_COUNT(D_i3_801C4190); i++) {
- D_i3_801C4190[i] = 0;
- }
- for (i = 0; i < ARRAY_COUNT(D_i3_801C41B8); i++) {
- D_i3_801C41B8[i] = 0.0f;
- }
- for (i = 0; i < ARRAY_COUNT(D_i3_801C4230); i++) {
- D_i3_801C4230[i] = 0;
- }
- for (i = 0; i < ARRAY_COUNT(D_i3_801C42A0); i++) {
- D_i3_801C42A0[i] = 0;
- }
- for (i = 0; i < ARRAY_COUNT(D_i3_801C4308); i++) {
- D_i3_801C4308[i] = 0;
- }
- D_i3_801C4458 = D_i3_801C445C = 0.0f;
- D_i3_801C4450 = D_i3_801C4454 = 0;
- D_i3_801C41B8[12] = 40.0f;
- D_i3_801C41B8[13] = 100.0f;
- D_i3_801C41B8[14] = 120.0f;
- D_i3_801C41B8[15] = 20.0f;
- D_i3_801C41B8[16] = 30.0f;
- D_i3_801C41B8[17] = 50.0f;
- if (D_80177CA0 != 0) {
- D_i3_801C41B8[12] = 0.0f;
- D_i3_801C41B8[13] = 3.0f;
- D_i3_801C41B8[14] = 5.0f;
- D_i3_801C41B8[15] = 0.0f;
- D_i3_801C41B8[16] = 0.0f;
- D_i3_801C41B8[17] = 0.0f;
- }
- D_i3_801C4190[5] = 0;
- D_i3_801C41B8[25] = D_8015F970;
- D_i3_801C41B8[26] = 128.0f;
-}
-
-void func_i3_801A99D4(Player* player) {
- s32 sp24 = fabsf(player->unk_138 / 1000.0f);
-
- Math_SmoothStepToF(&D_8015F970, D_i3_801C41B8[25], 1.0f, 10.0f, 0.00001f);
- Math_SmoothStepToF(&D_i3_801C4188, D_i3_801C41B8[26], 0.1f, 10.0f, 0.00001f);
- if ((D_i3_801C4190[8] < sp24) && (D_i3_801C41B8[25] < 4600.0f)) {
- D_i3_801C4190[8] = sp24;
- D_i3_801C41B8[25] += 150.0f;
- D_i3_801C41B8[26] = D_i3_801C4188 - 6.0f;
- if (D_i3_801C41B8[26] < 0.0f) {
- D_i3_801C41B8[26] = 0.0f;
- }
- if (D_i3_801C41B8[25] > 4600.0f) {
- D_i3_801C41B8[25] = 4600.0f;
- }
- D_i3_801C41B8[12] -= 2.0f;
- if (D_i3_801C41B8[12] < 0.0f) {
- D_i3_801C41B8[12] = 0.0f;
- }
- D_i3_801C41B8[13] -= 6.0f;
- if (D_i3_801C41B8[13] < 3.0f) {
- D_i3_801C41B8[13] = 3.0f;
- }
- D_i3_801C41B8[14] -= 6.0f;
- if (D_i3_801C41B8[14] < 5.0f) {
- D_i3_801C41B8[14] = 5.0f;
- }
- D_i3_801C41B8[15] -= 1.0f;
- if (D_i3_801C41B8[15] < 0.0f) {
- D_i3_801C41B8[15] = 0.0f;
- }
- D_i3_801C41B8[16] -= 1.5f;
- if (D_i3_801C41B8[16] < 0.0f) {
- D_i3_801C41B8[16] = 0.0f;
- }
- D_i3_801C41B8[17] -= 2.5f;
- if (D_i3_801C41B8[17] < 0.0f) {
- D_i3_801C41B8[17] = 0.0f;
- }
- gLight1R = D_i3_801C41B8[12];
- gLight1G = D_i3_801C41B8[13];
- gLight1B = D_i3_801C41B8[14];
- gAmbientR = D_i3_801C41B8[15];
- gAmbientG = D_i3_801C41B8[16];
- gAmbientB = D_i3_801C41B8[17];
- }
-}
-
-void func_i3_801A9C98(Player* player) {
- Actor* actor;
- s32 i;
- s32 var_v0;
-
- if ((D_i3_801C4190[0] != 777) && (D_i3_801C4190[0] > 0)) {
- i = D_i3_801C4190[0] - 1;
- actor = &gActors[i];
- if ((actor->obj.status != 2) || ((player->unk_138 - 300.0f) <= actor->obj.pos.z) ||
- (actor->obj.pos.z <= (player->unk_138 - 7000.0f)) || (actor->obj.id != D_i3_801C4190[1]) ||
- (actor->health == 0)) {
- D_i3_801C4190[1] = 0;
- D_i3_801C4190[5] = 0;
- D_i3_801C4190[3] = 0;
- D_i3_801C4190[0] = 0;
- } else {
- var_v0 = 1;
- if (actor->info.hitbox[1] == 200000.0f) {
- var_v0 = 5;
- }
- D_i3_801C41B8[2] = actor->obj.pos.z + actor->info.hitbox[var_v0 + 0] + actor->info.hitbox[var_v0 + 1];
- D_i3_801C41B8[1] = actor->obj.pos.y + actor->info.hitbox[var_v0 + 2];
- D_i3_801C41B8[0] = actor->obj.pos.x + actor->info.hitbox[var_v0 + 4];
- }
- }
-}
-
-void func_i3_801A9DE4(Player* player) {
- s32 i;
-
- if (D_i3_801C4190[0] == 777) {
- if ((gBosses[0].obj.status != OBJ_ACTIVE) || (gBosses[0].health == 0) || (fabsf(D_i3_801C4308[10]) <= 6.0f) ||
- ((D_i3_801C4190[4] == 0x79) && (gBosses[0].swork[0xC] == 0))) {
- D_i3_801C4190[1] = 0;
- D_i3_801C4190[5] = 0;
- D_i3_801C4190[3] = 0;
- D_i3_801C4190[4] = 0;
- D_i3_801C4190[0] = 0;
- } else {
- i = D_i3_801C4190[4] - 2;
-
- D_i3_801C41B8[2] = gBosses[0].obj.pos.z + gBosses[0].info.hitbox[i + 0] + gBosses[0].info.hitbox[i + 1];
- D_i3_801C41B8[1] = gBosses[0].obj.pos.y + gBosses[0].info.hitbox[i + 2];
- D_i3_801C41B8[0] = gBosses[0].obj.pos.x + gBosses[0].info.hitbox[i + 4];
- }
- }
-}
-
-// Loop looks really fake. optimized out index?
-void func_i3_801A9ED0(Player* player) {
- s32 j;
- s32 i;
- s32 sp8C;
- f32 temp_fa0;
- f32 temp_fa1;
- f32 temp_fv0;
- f32 temp_fv1;
- Vec3f sp70;
- Vec3f sp64;
- f32* tempx;
- f32* tempy;
- f32* tempz;
-
- Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8) * M_DTOR, 0);
- Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 1);
- sp70.x = 0.0f;
- sp70.y = 0.0f;
- sp70.z = -1200.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp70, &sp64);
- if (D_i3_801C4190[3] == 0) {
- sp8C = D_i3_801C4190[4];
-
- if ((fabsf(D_i3_801C4308[10]) >= 6.0f) && (gBosses[0].state >= 10) && (gBosses[0].obj.status == 2) &&
- (gBosses[0].health != 0)) {
- for (j = 119, i = 121; j < 199; j += 10, i += 10) {
- if ((j == 119) || (j == 129) || (j == 139) || (j == 169)) {
- tempy = &gBosses[0].info.hitbox[i];
-
- temp_fv0 = gBosses[0].obj.pos.y + tempy[0] + tempy[1] + 200.0f;
- temp_fa0 = gBosses[0].obj.pos.y + tempy[0] - tempy[1] - 200.0f;
- temp_fv1 = gBosses[0].obj.pos.x + tempy[2] + tempy[3] + 200.0f;
- temp_fa1 = gBosses[0].obj.pos.x + tempy[2] - tempy[3] - 200.0f;
- if ((gBosses[0].state >= 10) && ((player->pos.y + sp64.y) <= temp_fv0) &&
- (temp_fa0 <= (player->pos.y + sp64.y)) && ((player->pos.x + sp64.x) <= temp_fv1) &&
- (temp_fa1 <= (player->pos.x + sp64.x))) {
- if (D_i3_801C41B8[11] >=
- fabsf(player->unk_138 - gBosses[0].obj.pos.z - gBosses[0].info.hitbox[j])) {
- D_i3_801C41B8[11] =
- fabsf(player->unk_138 - gBosses[0].obj.pos.z - gBosses[0].info.hitbox[j]);
- D_i3_801C4190[0] = 777;
- D_i3_801C4190[4] = i;
- D_i3_801C4190[1] = 318;
- }
- if (((j == 129) && (gBosses[0].swork[8] == 0)) || ((j == 139) && (gBosses[0].swork[9] == 0)) ||
- ((j == 119) && (gBosses[0].swork[0xC] == 0))) {
- D_i3_801C4190[1] = 0;
- D_i3_801C4190[5] = 0;
- D_i3_801C4190[3] = 0;
- D_i3_801C4190[4] = 0;
- D_i3_801C4190[0] = 0;
- }
- }
- }
- }
- if ((sp8C != D_i3_801C4190[4]) && (D_i3_801C41B8[5] == 3.0f)) {
- Audio_PlaySfx(0x4900001B, D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- D_i3_801C41B8[5] = 20.0f;
- }
- }
- }
- func_i3_801A9DE4(player);
-}
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AA20C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AA4BC.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AA8E8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AACF8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AB9B0.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801ABA40.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AC09C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AC18C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AC274.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AC7C8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AC8A8.s")
-
-// OBJ_EFFECT_366 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AC918.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801ACBB4.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801ACE50.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AD328.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AD598.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AD688.s")
-
-// OBJ_ACTOR_255 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AD6C0.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801ADF7C.s")
-
-// OBJ_ACTOR_255 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AE168.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AE3AC.s")
-
-// OBJ_ACTOR_256 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AE3D8.s")
-
-// OBJ_ACTOR_256 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AEB44.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AF9FC.s")
-
-// OBJ_ACTOR_257 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801AFA5C.s")
-
-// OBJ_ACTOR_257 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B099C.s")
-
-// OBJ_ACTOR_258 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B0B60.s")
-
-// OBJ_ACTOR_258 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B0EC0.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B0F88.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B0FCC.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B1008.s")
-
-// OBJ_BOSS_AQ init
-void func_i3_801B10F8(Boss* bossAQ);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B10F8.s")
-
-// OBJ_BOSS_AQ action
-void func_i3_801B134C(Boss* bossAQ);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B134C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B42AC.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B49DC.s")
-
-// OBJ_BOSS_AQ draw
-void func_i3_801B4D84(Boss* bossAQ);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B4D84.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B4DDC.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B4E94.s")
-
-// OBJ_ACTOR_261 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B504C.s")
-
-// OBJ_ACTOR_261 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B50E8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B5C18.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B5F68.s")
-
-// OBJ_ACTOR_259 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B619C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B6344.s")
-
-// OBJ_ACTOR_259 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B638C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B6E54.s")
-
-// OBJ_ACTOR_262 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B6FF8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B76EC.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B7754.s")
-
-// OBJ_ACTOR_262 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B7A24.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B7AF0.s")
-
-// OBJ_ACTOR_260 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B7C78.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B8C50.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B8D7C.s")
-
-// OBJ_ACTOR_260 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B90DC.s")
-
-// OBJ_ACTOR_263 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B91A4.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801B9DB0.s")
-
-// OBJ_ACTOR_263 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BA108.s")
-
-// OBJ_ACTOR_264 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BA26C.s")
-
-// OBJ_ACTOR_264 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BA4E4.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BA57C.s")
-
-// OBJ_ACTOR_265 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BA6A4.s")
-
-// OBJ_ACTOR_265 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BAD7C.s")
-
-// OBJ_ACTOR_266 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BADF8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BB0C4.s")
-
-// OBJ_ACTOR_266 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BB204.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BB26C.s")
-
-// OBJ_ACTOR_267 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BB79C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BC530.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BC91C.s")
-
-// OBJ_ACTOR_267 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BC930.s")
-
-// OBJ_ACTOR_269 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BC9A0.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BD17C.s")
-
-// OBJ_ACTOR_269 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BD264.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BD3B0.s")
-
-// OBJ_ACTOR_268 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BD54C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BDDFC.s")
-
-// OBJ_ACTOR_268 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BDE6C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BDF14.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BE034.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BE0F0.s")
-
-// OBJ_80_126 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BE1FC.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BE274.s")
-
-// OBJ_ACTOR_270 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BE3F8.s")
-
-// OBJ_ACTOR_270 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BEB1C.s")
-
-// OBJ_BOSS_301 action
-void func_i3_801BEC50(Boss* boss301) {
-}
-
-// OBJ_BOSS_301 draw
-void func_i3_801BEC5C(Boss* boss301) {
-}
-
-// OBJ_ACTOR_188 action
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BEC68.s")
-
-// OBJ_ACTOR_188 draw
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BEC74.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BEC80.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/func_i3_801BEC8C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i3/sf_aq/D_i3_801C1A30.s")
diff --git a/src/overlays/ovl_i4/fox_fo.c b/src/overlays/ovl_i4/fox_fo.c
index 5e390e7f..67692299 100644
--- a/src/overlays/ovl_i4/fox_fo.c
+++ b/src/overlays/ovl_i4/fox_fo.c
@@ -1,7 +1,7 @@
#include "global.h"
-extern AnimationHeader D_6007854;
-extern Limb* D_6007980;
+extern Animation D_6007854;
+extern Limb* D_6007980[];
extern u8 D_600FF64[];
s32 func_80090200(Boss* boss);
@@ -576,7 +576,7 @@ void func_i4_80188FE4(Actor* actor) {
Vec3f vec[20];
Animation_GetFrameData(&D_6007854, 0, vec);
- Animation_DrawSkeleton(3, &D_6007980, vec, func_i4_80188F08, func_i4_80188DA0, actor, gCalcMatrix);
+ Animation_DrawSkeleton(3, D_6007980, vec, func_i4_80188F08, func_i4_80188DA0, actor, gCalcMatrix);
if (actor->state == 1) {
actor->state = 2;
diff --git a/src/overlays/ovl_i5/fox_ma.c b/src/overlays/ovl_i5/fox_ma.c
index 9b1252a0..99b5e8a1 100644
--- a/src/overlays/ovl_i5/fox_ma.c
+++ b/src/overlays/ovl_i5/fox_ma.c
@@ -14,32 +14,32 @@ extern f32 D_603605C[];
extern Gfx D_6010470[];
extern Gfx D_6003370[];
extern Gfx D_6004440[];
-extern AnimationHeader D_600FEC4;
-extern AnimationHeader D_6010144;
-extern AnimationHeader D_6010220;
+extern Animation D_600FEC4;
+extern Animation D_6010144;
+extern Animation D_6010220;
extern Limb* D_601042C[];
extern Gfx D_6017720[];
extern Gfx D_601BE90[];
-extern AnimationHeader D_601EAB0;
+extern Animation D_601EAB0;
extern Limb* D_601EBBC;
extern Gfx D_6022200[];
extern Gfx D_60227F0[];
extern Gfx D_60239D0[];
extern Gfx D_6024670[];
extern Gfx D_60269E0[];
-extern AnimationHeader D_6027A04;
+extern Animation D_6027A04;
extern Limb* D_6027AF0[];
extern Gfx D_6027BF0[];
extern Gfx D_6027D40[];
extern Gfx D_6027EB0[];
extern Gfx D_60288A0[];
-extern AnimationHeader D_602EA0C;
+extern Animation D_602EA0C;
extern Limb* D_602EBB8[];
extern Gfx D_6001180[];
extern Gfx D_60014A0[];
extern Gfx D_601C170[];
extern Gfx D_6022610[];
-extern AnimationHeader D_6025CA0;
+extern Animation D_6025CA0;
extern Limb* D_6025DAC[];
extern Gfx D_6026860[];
extern Gfx D_602D380[];
@@ -62,18 +62,18 @@ extern Gfx D_600A4D0[];
extern Gfx D_600A7D0[];
extern Gfx D_600AA70[];
extern Gfx D_600AD50[];
-extern AnimationHeader D_600C4D0;
+extern Animation D_600C4D0;
extern Limb* D_600C65C[];
extern f32 D_603648C[];
extern Gfx D_602F380[];
-extern AnimationHeader D_602FEB4;
+extern Animation D_602FEB4;
extern Limb* D_602FFA0[];
extern Gfx D_602FFC0[];
extern Gfx D_601A2B0[];
extern f32 D_6036520[];
-extern AnimationHeader D_602F098;
+extern Animation D_602F098;
extern Limb* D_602F264[];
-extern AnimationHeader D_602F2E0;
+extern Animation D_602F2E0;
extern Limb* D_602F36C[];
extern Gfx D_601A840[];
extern Gfx D_6012A60[];
@@ -82,16 +82,16 @@ extern Gfx D_6025850[];
extern Gfx D_60257B0[];
extern Gfx D_601F270[];
extern u16 D_6012C98[];
-extern AnimationHeader D_600CD18;
-extern AnimationHeader D_6015C24;
-extern AnimationHeader D_6016040;
-extern AnimationHeader D_60163F0;
-extern AnimationHeader D_6016B2C;
-extern AnimationHeader D_6017714;
-extern AnimationHeader D_601D188;
+extern Animation D_600CD18;
+extern Animation D_6015C24;
+extern Animation D_6016040;
+extern Animation D_60163F0;
+extern Animation D_6016B2C;
+extern Animation D_6017714;
+extern Animation D_601D188;
extern f32 D_6036818[];
extern Limb* D_600D1E4[];
-extern AnimationHeader D_601EA28;
+extern Animation D_601EA28;
extern f32 D_6035A94[];
extern ObjectInit D_6035678[];
extern ObjectInit D_60357CC[];
@@ -340,7 +340,7 @@ void func_i5_80199920(void) {
D_i5_801BE250[6] = 0.0f;
D_i5_801BE250[16] = 0.0f;
D_i5_801BE250[20] = 0.0f;
- D_i5_801BA1E8 = 0x62;
+ D_i5_801BA1E8 = 98;
D_i5_801BA1E0 = 1e7f;
D_i5_801BE310 = 999;
D_i5_801BE312 = 0;
@@ -515,7 +515,7 @@ void func_i5_80199F8C(Actor* actor) {
void func_i5_8019A128(void) {
func_i5_80199C20(D_6023228, 16, 16, 0, 8);
- func_i5_80199A40(D_6023388, D_Unk_800DB4B8, (f32) gGameFrameCount * -20.0f);
+ func_i5_80199A40(D_6023388, D_Unk_800DB4B8, gGameFrameCount * -20.0f);
}
void func_i5_8019A198(Actor* actor) {
@@ -531,7 +531,7 @@ void func_i5_8019A198(Actor* actor) {
func_8001CFA8(actor->vel.z);
}
func_8001D10C(actor->sfxPos, 0x31078085);
- D_i5_801BE310 = (s16) actor->iwork[5];
+ D_i5_801BE310 = actor->iwork[5];
}
D_i5_801BA1E0 = actor->obj.pos.z;
if (D_i5_801BE313 != 0) {
@@ -2046,14 +2046,15 @@ void func_i5_801A0BD8(Object_80* obj80) {
break;
}
if (obj80->timer_4C != 0) {
- obj80->vel.z = Rand_ZeroOne() + 2.0f;
+ obj80->vel.z = 2.0f + RAND_FLOAT(1.0f);
} else {
- obj80->vel.z = Rand_ZeroOne() + 1.0f;
+ obj80->vel.z = 1.0f + RAND_FLOAT(1.0f);
}
}
bool func_i5_801A0DD8(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
Object_80* obj80 = (Object_80*) data;
+
if (limbIndex == 5) {
rot->y += obj80->vel.y;
}
@@ -2973,7 +2974,7 @@ void func_i5_801A46A0(Actor* actor) {
}
actor->fwork[0] /= 1.2f + Rand_ZeroOne() / 2;
- actor->unk_046 -= 1;
+ actor->unk_046--;
actor->vel.z /= 1.5f;
if (actor->unk_046 == 0) {
actor->timer_0BE = RAND_INT(30.0f);
@@ -3503,7 +3504,7 @@ void func_i5_801A68F8(Actor* actor, s16 arg1, f32 arg2, f32 arg3, f32 arg4, f32
gUnkEntities30[arg1].unk_04.y = arg3;
gUnkEntities30[arg1].unk_28 = 5.0f;
gUnkEntities30[arg1].unk_2C = gUnkEntities30[arg1].unk_2D = gUnkEntities30[arg1].unk_2E =
- gUnkEntities30[arg1].unk_2F = 0xFF;
+ gUnkEntities30[arg1].unk_2F = 255;
gUnkEntities30[arg1].timer = 3;
gUnkEntities30[arg1].unk_04.z = arg4;
gUnkEntities30[arg1].unk_10.x = arg5;
@@ -3512,23 +3513,22 @@ void func_i5_801A68F8(Actor* actor, s16 arg1, f32 arg2, f32 arg3, f32 arg4, f32
}
void func_i5_801A6984(Actor* actor) {
+ s16 var_s3;
f32 temp_fa0;
- f32 temp_fa1;
f32 temp_fs0;
- f32 temp_fs1;
- f32 temp_fs2_2;
+ f32 temp_fa1;
f32 temp_fs3;
+ s32 var_s4;
+ f32 temp_fs2_2;
f32 temp_fs3_2;
f32 temp_fs4;
- f32 var_fs5;
f32 spA8;
- f32 temp;
+ f32 var_fs5;
f32 spA0;
f32 sp9C;
- f32 sp78;
- s16 temp_a1;
- s16 var_s3;
- s32 var_s4;
+ f32 temp;
+ s32 pad1;
+ s32 pad2;
s32 i;
f32 sp88;
f32 sp84;
@@ -3546,14 +3546,11 @@ void func_i5_801A6984(Actor* actor) {
if (var_s4 == 0) {
var_s4 = 1;
}
-
- sp78 = (f32) var_s4;
spA8 = (180.0f / var_s4) + 1.0f;
var_fs5 = actor->obj.pos.x;
-
spA0 = actor->obj.pos.y;
-
sp9C = actor->obj.pos.z;
+
sp88 = (D_i5_801BE368[4] - actor->obj.pos.x) / var_s4;
sp84 = (D_i5_801BE368[5] - actor->obj.pos.y) / var_s4;
sp80 = (D_i5_801BE368[6] - actor->obj.pos.z) / var_s4;
@@ -3563,13 +3560,11 @@ void func_i5_801A6984(Actor* actor) {
} else {
Math_SmoothStepToF(&D_i5_801BE368[7], 100.0f, 0.01f, 0.01f, 0.01f);
}
-
- temp = SIN_DEG(i * spA8) * (-(D_i5_801BE368[7] * 3.0f) * (1.0f - (i / sp78)));
- temp_a1 = var_s3++;
+ temp = SIN_DEG(i * spA8) * (-(D_i5_801BE368[7] * 3.0f) * (1.0f - ((f32) i / var_s4)));
temp_fs2_2 = actor->obj.pos.x + (sp88 * i);
temp_fs3_2 = actor->obj.pos.y + (sp84 * i) + temp;
temp_fs4 = actor->obj.pos.z + (sp80 * i);
- func_i5_801A68F8(actor, temp_a1, var_fs5, spA0, sp9C, temp_fs2_2, temp_fs3_2, temp_fs4);
+ func_i5_801A68F8(actor, var_s3++, var_fs5, spA0, sp9C, temp_fs2_2, temp_fs3_2, temp_fs4);
var_fs5 = temp_fs2_2;
spA0 = temp_fs3_2;
sp9C = temp_fs4;
@@ -4360,12 +4355,12 @@ void func_i5_801A7E7C(Actor* actor) {
spC6 = RAND_INT(5.0f);
for (i = 0; i < 10; i++) {
func_i5_801AE610(actor->vwork[0].x, actor->vwork[0].y + 100.0f, actor->vwork[0].z,
- RAND_FLOAT_CENTERED(35.0f), RAND_FLOAT(80.0f) + 90.0f,
- (Rand_ZeroOne() - 0.9f) * 80.0f, spC6);
+ RAND_FLOAT_CENTERED(35.0f), RAND_FLOAT(80) + 90.0f, RAND_RANGE(-72.0f, 8.0f),
+ spC6);
}
for (i = 0; i < 20; i++) {
- func_i5_801AD624(actor->vwork[0].x, (actor->vwork[0].y + 50.0f) + RAND_FLOAT(50.0f),
+ func_i5_801AD624(actor->vwork[0].x, actor->vwork[0].y + 50.0f + RAND_FLOAT(50.0f),
actor->vwork[0].z, RAND_FLOAT_CENTERED(10.0f), RAND_FLOAT(5.0f),
actor->vel.z + 2.0f, RAND_FLOAT(360.0f), RAND_FLOAT(360.0f), RAND_FLOAT(360.0f),
RAND_FLOAT_CENTERED(30.0f), RAND_FLOAT_CENTERED(30.0f), RAND_FLOAT_CENTERED(30.0f),
@@ -4419,7 +4414,7 @@ void func_i5_801A7E7C(Actor* actor) {
sp360.z = RAND_FLOAT(200.0f) + 100.0f;
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp360, &sp354);
D_i5_801BE368[23] = 1.0f;
- func_i5_801AE800((actor->vwork[2].x + sp354.x) - 50.0f, actor->vwork[2].y + sp354.y + 100.0f,
+ func_i5_801AE800(actor->vwork[2].x + sp354.x - 50.0f, actor->vwork[2].y + sp354.y + 100.0f,
actor->vwork[2].z + sp354.z, actor->vwork[2].x, actor->vwork[2].y, actor->vwork[2].z);
D_i5_801BE368[23] = 2.0f;
func_i5_801AE800(actor->vwork[4].x + sp354.x + 50.0f, actor->vwork[4].y + sp354.y + 100.0f,
@@ -4453,7 +4448,7 @@ void func_i5_801A7E7C(Actor* actor) {
Math_SmoothStepToF(&actor->obj.pos.z, gPlayer[0].unk_138 - 250.0f, 0.1f, 15.0f, 0.01f);
Math_SmoothStepToF(&actor->obj.pos.y, 250.0f, 0.1f, 10.0f, 0.01f);
if (D_i5_801BE320[3] < (Animation_GetFrameCount(&D_6015C24) - 1)) {
- D_i5_801BE320[3] = (s16) (D_i5_801BE320[3] + 1);
+ D_i5_801BE320[3]++;
}
func_i5_8019A198(actor);
func_i5_801A6984(actor);
@@ -4476,14 +4471,14 @@ void func_i5_801A7E7C(Actor* actor) {
actor->vwork[6].z += actor->vel.z;
actor->vwork[7].z += actor->vel.z;
sp348.x = actor->vwork[6].x - actor->vwork[2].x;
- sp348.y = (actor->vwork[6].y - actor->vwork[2].y) + 25.0f;
+ sp348.y = actor->vwork[6].y - actor->vwork[2].y + 25.0f;
sp348.z = actor->vwork[6].z - actor->vwork[2].z;
Matrix_RotateZ(gCalcMatrix, -actor->vwork[3].z * M_DTOR, 0);
Matrix_RotateX(gCalcMatrix, -actor->vwork[3].x * M_DTOR, 1);
Matrix_RotateY(gCalcMatrix, -actor->vwork[3].y * M_DTOR, 1);
Matrix_MultVec3f(gCalcMatrix, &sp348, &sp354);
D_i5_801BE368[14] = Math_RadToDeg(Math_Atan2F(sp354.x, sp354.z));
- temp = sqrtf((sp354.x * sp354.x) + (sp354.z * sp354.z));
+ temp = sqrtf(SQ(sp354.x) + SQ(sp354.z));
D_i5_801BE368[13] = Math_RadToDeg(-Math_Atan2F(sp354.y, temp));
Matrix_RotateY(gCalcMatrix, actor->vwork[3].y * M_DTOR, 0);
Matrix_RotateX(gCalcMatrix, actor->vwork[3].x * M_DTOR, 1);
@@ -4500,7 +4495,7 @@ void func_i5_801A7E7C(Actor* actor) {
sp330.z = actor->vwork[3].z;
func_8007EE68(OBJ_EFFECT_380, &sp348, &sp33C, &sp330, &D_i5_801BA750, 5.0f);
sp348.x = actor->vwork[7].x - actor->vwork[4].x;
- sp348.y = (actor->vwork[7].y - actor->vwork[4].y) + 25.0f;
+ sp348.y = actor->vwork[7].y - actor->vwork[4].y + 25.0f;
sp348.z = actor->vwork[7].z - actor->vwork[4].z;
Matrix_RotateZ(gCalcMatrix, -actor->vwork[5].z * M_DTOR, 0);
Matrix_RotateX(gCalcMatrix, -actor->vwork[5].x * M_DTOR, 1);
@@ -4543,7 +4538,7 @@ void func_i5_801A7E7C(Actor* actor) {
func_i5_801A0308(actor, actor->obj.pos.z, actor->obj.rot.y, 0);
Math_SmoothStepToF(&actor->obj.pos.x, gPlayer[0].pos.x, 0.1f, 10.0f, 0.01f);
Math_SmoothStepToF(&actor->obj.pos.z, gPlayer[0].unk_138 - 1200.0f, 0.1f, 35.0f, 0.01f);
- Math_SmoothStepToF(&actor->obj.pos.y, (actor->fwork[5] + 600.0f) + D_i5_801BE368[3], 0.1f, 20.0f, 10.0f);
+ Math_SmoothStepToF(&actor->obj.pos.y, actor->fwork[5] + 600.0f + D_i5_801BE368[3], 0.1f, 20.0f, 10.0f);
if (D_i5_801BE368[3] < ((gPlayer[0].unk_138 - actor->obj.pos.z) / 5.0f)) {
Math_SmoothStepToF(&D_i5_801BE368[2], 15.0f, 0.2f, 2.0f, 0.01f);
D_i5_801BE368[3] += D_i5_801BE368[2];
@@ -4617,7 +4612,7 @@ void func_i5_801A7E7C(Actor* actor) {
Audio_PlaySfx(0x2903300E, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
actor->iwork[7] = 15;
D_i5_801BE320[9] -= actor->damage;
- func_i5_801AD624(actor->obj.pos.x, actor->obj.pos.y + 80.0f, actor->obj.pos.z + 50.0f,
+ func_i5_801AD624(actor->obj.pos.x, actor->obj.pos.y + 80, actor->obj.pos.z + 50.0f,
RAND_FLOAT_CENTERED(10.0f), RAND_FLOAT(5.0f), RAND_FLOAT_CENTERED(3.0f),
RAND_FLOAT(360.0f), RAND_FLOAT(360.0f), RAND_FLOAT(360.0f), RAND_FLOAT_CENTERED(30.0f),
RAND_FLOAT_CENTERED(30.0f), RAND_FLOAT_CENTERED(30.0f), (s32) (RAND_FLOAT(50.0f) + 70.0f),
@@ -4687,9 +4682,9 @@ void func_i5_801A7E7C(Actor* actor) {
Radio_PlayMessage(gMsg_ID_2225, RCID_SLIPPY);
} else if (gBossFrameCount > 155) {
gShowBossHealth = 1;
- gBossHealthBar = (s32) (((f32) D_i5_801BE320[29] / 250) * 85.0f);
- gBossHealthBar += (s32) (((f32) D_i5_801BE320[9] / 200) * 85.0f);
- gBossHealthBar += (s32) (((f32) D_i5_801BE320[10] / 250) * 85.0f);
+ gBossHealthBar = (s32) ((D_i5_801BE320[29] / 250.f) * 85.0f);
+ gBossHealthBar += (s32) ((D_i5_801BE320[9] / 200.f) * 85.0f);
+ gBossHealthBar += (s32) ((D_i5_801BE320[10] / 250.f) * 85.0f);
}
gBossFrameCount++;
}
diff --git a/src/overlays/ovl_i6/fox_andross.c b/src/overlays/ovl_i6/fox_andross.c
index 413939ec..9632b7e8 100644
--- a/src/overlays/ovl_i6/fox_andross.c
+++ b/src/overlays/ovl_i6/fox_andross.c
@@ -344,7 +344,7 @@ void func_i6_80188528(Actor* actor) {
actor->unk_0F4.z += actor->fwork[0];
}
-extern Gfx* D_6009300;
+extern Gfx D_6009300[];
void func_i6_80188660(Actor* actor) {
RCP_SetupDL(&gMasterDisp, 0x3D);
@@ -355,7 +355,7 @@ void func_i6_80188660(Actor* actor) {
Matrix_Scale(gGfxMatrix, 1.1f, 0.9f, 1.0f, 1);
Matrix_Scale(gGfxMatrix, 3.0f, 3.0f, 1.0f, 1);
Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, &D_6009300);
+ gSPDisplayList(gMasterDisp++, D_6009300);
}
void func_i6_801887B0(Actor* actor, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel) {
@@ -469,7 +469,7 @@ void func_i6_80188A4C(Boss* boss) {
}
}
-extern AnimationHeader D_600C038;
+extern Animation D_600C038;
void func_i6_80188CB8(Boss* boss) {
s32 i;
@@ -1214,8 +1214,8 @@ s32 func_i6_8018B47C(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* d
}
extern Limb* D_600C0A4[];
-extern Gfx* D_600C2D0;
-extern Gfx* D_600C560;
+extern Gfx D_600C2D0[];
+extern Gfx D_600C560[];
void func_i6_8018B8C0(Boss* boss) {
s32 j;
@@ -1262,9 +1262,9 @@ void func_i6_8018B8C0(Boss* boss) {
Matrix_Translate(gGfxMatrix, 0.0f, -5.0f, 0.0f, 1);
Matrix_SetGfxMtx(&gMasterDisp);
if (j == 9) {
- gSPDisplayList(gMasterDisp++, &D_600C2D0);
+ gSPDisplayList(gMasterDisp++, D_600C2D0);
} else {
- gSPDisplayList(gMasterDisp++, &D_600C560);
+ gSPDisplayList(gMasterDisp++, D_600C560);
}
Matrix_Pop(&gGfxMatrix);
}
@@ -1554,7 +1554,7 @@ void func_i6_8018CAD4(Effect* effect) {
}
}
-extern Gfx* D_2010A30;
+extern Gfx D_2010A30[];
static Gfx* D_i6_801A6790[10] = {
D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_3016660, D_3015D80,
};
@@ -1565,7 +1565,7 @@ void func_i6_8018CF98(Effect* effect) {
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, effect->unk_44);
Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2, 1);
Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, &D_2010A30);
+ gSPDisplayList(gMasterDisp++, D_2010A30);
} else {
RCP_SetupDL(&gMasterDisp, 0x1D);
if (effect->unk_4C < 8) {
@@ -1789,24 +1789,24 @@ void func_i6_8018DA94(Boss* boss, Vec3f* arg1) {
Audio_PlaySfx(0x2903B009, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
-extern AnimationHeader D_C00208C;
-extern AnimationHeader D_C002654;
-extern AnimationHeader D_C002B08;
-extern AnimationHeader D_C006F08;
-extern AnimationHeader D_C00DE48;
-extern AnimationHeader D_C00E598;
-extern AnimationHeader D_C017050;
-extern AnimationHeader D_C017430;
-extern AnimationHeader D_C018BC4;
-extern AnimationHeader D_C023B54;
-extern AnimationHeader D_C0240D0;
-extern AnimationHeader D_C025C00;
-extern AnimationHeader D_C029F74;
-extern AnimationHeader D_C02E494;
-extern AnimationHeader D_C02EDA0;
-extern AnimationHeader D_C030244;
-extern AnimationHeader D_C033780;
-extern AnimationHeader D_C033D98;
+extern Animation D_C00208C;
+extern Animation D_C002654;
+extern Animation D_C002B08;
+extern Animation D_C006F08;
+extern Animation D_C00DE48;
+extern Animation D_C00E598;
+extern Animation D_C017050;
+extern Animation D_C017430;
+extern Animation D_C018BC4;
+extern Animation D_C023B54;
+extern Animation D_C0240D0;
+extern Animation D_C025C00;
+extern Animation D_C029F74;
+extern Animation D_C02E494;
+extern Animation D_C02EDA0;
+extern Animation D_C030244;
+extern Animation D_C033780;
+extern Animation D_C033D98;
static f32 D_i6_801A67B8[] = { 0.0f, 0.0f, 0.0f };
@@ -3172,7 +3172,7 @@ void func_i6_801924B4(s32 limbIndex, Vec3f* rot, void* data) {
}
}
-extern Limb* D_C01CC3C;
+extern Limb* D_C01CC3C[];
void func_i6_801928C8(Boss* boss) {
@@ -3185,7 +3185,7 @@ void func_i6_801928C8(Boss* boss) {
D_i6_801A7F74, D_i6_801A7F7C, D_i6_801A8430);
}
Matrix_Scale(gCalcMatrix, 10.0f, 10.0f, 10.0f, 1);
- Animation_DrawSkeleton(2, &D_C01CC3C, D_i6_801A7F80, func_i6_801917F0, func_i6_801924B4, boss, gCalcMatrix);
+ Animation_DrawSkeleton(2, D_C01CC3C, D_i6_801A7F80, func_i6_801917F0, func_i6_801924B4, boss, gCalcMatrix);
Matrix_Pop(&gGfxMatrix);
Matrix_Push(&gGfxMatrix);
if (boss->fwork[20] > 0.05f) {
@@ -3303,11 +3303,11 @@ void func_i6_80192E94(Actor* actor) {
}
}
-extern Gfx* D_6007E20;
+extern Gfx D_6007E20[];
void func_i6_80193244(Actor* actor) {
- gSPDisplayList(gMasterDisp++, &D_6007E20);
+ gSPDisplayList(gMasterDisp++, D_6007E20);
if (actor->timer_0BC != 0) {
f32 scale;
u8 alpha;
@@ -3328,7 +3328,7 @@ void func_i6_80193244(Actor* actor) {
}
}
-extern Gfx* D_C038AC4;
+extern Gfx D_C038AC4[];
void func_i6_80193380(Object_80* obj80) {
diff --git a/src/overlays/ovl_i6/fox_sy.c b/src/overlays/ovl_i6/fox_sy.c
index 19d4f52f..b0991aa5 100644
--- a/src/overlays/ovl_i6/fox_sy.c
+++ b/src/overlays/ovl_i6/fox_sy.c
@@ -1,20 +1,20 @@
#include "global.h"
-extern AnimationHeader D_6003348;
-extern AnimationHeader D_60034C4;
+extern Animation D_6003348;
+extern Animation D_60034C4;
extern Gfx D_6013600[];
extern Gfx D_6014A40[];
extern Gfx D_6014BD0[];
extern Gfx D_601F3D0[];
-extern AnimationHeader D_60258A0;
-extern AnimationHeader D_602645C;
-extern AnimationHeader D_60265B4;
-extern AnimationHeader D_602738C;
-extern AnimationHeader D_6029B48;
-extern AnimationHeader D_602A2CC;
-extern AnimationHeader D_602B778;
-extern AnimationHeader D_602B8DC;
-extern AnimationHeader D_602CEB4;
+extern Animation D_60258A0;
+extern Animation D_602645C;
+extern Animation D_60265B4;
+extern Animation D_602738C;
+extern Animation D_6029B48;
+extern Animation D_602A2CC;
+extern Animation D_602B778;
+extern Animation D_602B8DC;
+extern Animation D_602CEB4;
extern Limb* D_602D140[];
extern f32 D_60340C0[];
extern f32 D_6034124[];
diff --git a/src/overlays/ovl_i6/fox_ve2.c b/src/overlays/ovl_i6/fox_ve2.c
index 7b251439..977c4b6e 100644
--- a/src/overlays/ovl_i6/fox_ve2.c
+++ b/src/overlays/ovl_i6/fox_ve2.c
@@ -14,7 +14,7 @@ s32 func_i6_8019624C(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* d
return false;
}
-extern AnimationHeader D_6014904;
+extern Animation D_6014904;
extern Limb* D_60149D0[];
void func_i6_80196288(Boss* boss) {
diff --git a/src/overlays/ovl_menu/fox_map.c b/src/overlays/ovl_menu/fox_map.c
index 982bd8b0..a505d83b 100644
--- a/src/overlays/ovl_menu/fox_map.c
+++ b/src/overlays/ovl_menu/fox_map.c
@@ -6170,185 +6170,31 @@ void func_menu_801AC80C(s32 arg0) {
u32 padding_801B6B34[3] = { 0, 0, 0 };
UnkStruct_D_menu_801B8294 D_menu_801B6B40[] = {
- {
- 0.0,
- 260.4722595214844,
- 1477.2115478515625,
- 0.0,
- -17.364818572998047,
- -98.48077392578125,
- },
- {
- 0.0,
- 20.159666061401367,
- 759.7326049804688,
- 0.0,
- -2.652587890625,
- -99.96481323242188,
- },
- {
- -45.79036331176758,
- 0.7120879888534546,
- 336.9016418457031,
- 13.467754364013672,
- -0.2094379961490631,
- -99.0887222290039,
- },
- {
- -59.033607482910156,
- -7.9528679847717285,
- 104.17190551757812,
- 49.194671630859375,
- 6.627389907836914,
- -86.80992126464844,
- },
- {
- -39.37468719482422,
- 50.698238372802734,
- 40.26434326171875,
- 65.62447357177734,
- -4.497063159942627,
- -67.10723876953125,
- },
- {
- -57.282569885253906,
- 48.52915573120117,
- -34.80637741088867,
- 95.47095489501953,
- 7.118072986602783,
- -11.322705268859863,
- },
- {
- -64.80924987792969,
- 53.131526947021484,
- -77.35162353515625,
- 81.01156616210938,
- 3.335592031478882,
- 15.689521789550781,
- },
- {
- -32.061317443847656,
- 30.244365692138672,
- -127.72071075439453,
- 32.061317443847656,
- 29.755634307861328,
- 61.72071075439453,
- },
- {
- -62.320308685302734,
- 25.741756439208984,
- -222.99485778808594,
- 31.160154342651367,
- 32.129119873046875,
- 61.99742889404297,
- },
- {
- -105.85608673095703,
- 14.339532852172852,
- -355.72161865234375,
- 31.134143829345703,
- 34.60601806640625,
- 61.918128967285156,
- },
- {
- -136.990234375,
- 9.733512878417969,
- -450.6397399902344,
- 31.134143829345703,
- 34.60601806640625,
- 61.918128967285156,
- },
- {
- -189.91827392578125,
- 1.9032800197601318,
- -612.0005493164062,
- 31.134143829345703,
- 34.60601806640625,
- 61.918128967285156,
- },
+ { 0.0f, 260.47226f, 1477.2115f, 0.0f, -17.364819f, -98.480774f },
+ { 0.0f, 20.159666f, 759.7326f, 0.0f, -2.652588f, -99.96481f },
+ { -45.790363f, 0.712088f, 336.90164f, 13.467754f, -0.209438f, -99.08872f },
+ { -59.033607f, -7.952868f, 104.171906f, 49.19467f, 6.62739f, -86.80992f },
+ { -39.374687f, 50.69824f, 40.264343f, 65.62447f, -4.497063f, -67.10724f },
+ { -57.28257f, 48.529156f, -34.806377f, 95.470955f, 7.118073f, -11.322705f },
+ { -64.80925f, 53.131527f, -77.35162f, 81.011566f, 3.335592f, 15.689522f },
+ { -32.061317f, 30.244366f, -127.72071f, 32.061317f, 29.755634f, 61.72071f },
+ { -62.32031f, 25.741756f, -222.99486f, 31.160154f, 32.12912f, 61.99743f },
+ { -105.85609f, 14.339533f, -355.72162f, 31.134144f, 34.606018f, 61.91813f },
+ { -136.99023f, 9.733513f, -450.63974f, 31.134144f, 34.606018f, 61.91813f },
+ { -189.91827f, 1.90328f, -612.00055f, 31.134144f, 34.606018f, 61.91813f },
};
UnkStruct_D_menu_801B8294 D_menu_801B6C60[] = {
- {
- 230.0,
- -20.0,
- -3.999999989900971e-06,
- 90.0,
- -20.0,
- 1.9999999949504854e-06,
- },
- {
- 217.92657470703125,
- 45.027198791503906,
- -0.0069610001519322395,
- 96.70745849609375,
- -25.01511001586914,
- 0.0038670001085847616,
- },
- {
- 161.75991821289062,
- 66.46260070800781,
- 50.40374755859375,
- 73.11239624023438,
- -6.1025848388671875,
- -28.31671142578125,
- },
- {
- 117.36236572265625,
- 2.6198840141296387,
- 27.208602905273438,
- 84.39605712890625,
- -4.366471767425537,
- -45.34767150878906,
- },
- {
- 19.168537139892578,
- 2.4452030658721924,
- 27.57978057861328,
- 7.556180953979492,
- -4.366434097290039,
- -49.24960708618164,
- },
- {
- -116.45977783203125,
- 1.2701389789581299,
- 27.862812042236328,
- -109.60753631591797,
- -2.268105983734131,
- -49.75502014160156,
- },
- {
- -117.43788146972656,
- 1.2725709676742554,
- 27.8646240234375,
- -110.64664459228516,
- -2.272449016571045,
- -49.75825500488281,
- },
- {
- -118.43771362304688,
- 1.3140660524368286,
- 27.862712860107422,
- -111.64693450927734,
- -2.346545934677124,
- -49.754844665527344,
- },
- {
- -118.44500732421875,
- 1.3140660524368286,
- 27.86207389831543,
- -111.6339111328125,
- -2.346545934677124,
- -49.75370407104492,
- },
- {
- -118.46446228027344,
- 1.3140660524368286,
- 27.860361099243164,
- -111.59918212890625,
- -2.346545934677124,
- -49.75064468383789,
- },
+ { 230.0f, -20.0f, -0.000004f, 90.0f, -20.0f, 0.000002f },
+ { 217.92657f, 45.0272f, -0.006961f, 96.70746f, -25.01511f, 0.003867f },
+ { 161.75992f, 66.4626f, 50.403748f, 73.1124f, -6.102585f, -28.316711f },
+ { 117.362366f, 2.619884f, 27.208603f, 84.39606f, -4.366472f, -45.34767f },
+ { 19.168537f, 2.445203f, 27.57978f, 7.556181f, -4.366434f, -49.249607f },
+ { -116.45978f, 1.270139f, 27.862812f, -109.60754f, -2.268106f, -49.75502f },
+ { -117.43788f, 1.272571f, 27.864624f, -110.646645f, -2.272449f, -49.758255f },
+ { -118.43771f, 1.314066f, 27.862713f, -111.646935f, -2.346546f, -49.754845f },
+ { -118.44501f, 1.314066f, 27.862074f, -111.63391f, -2.346546f, -49.753704f },
+ { -118.46446f, 1.314066f, 27.860361f, -111.59918f, -2.346546f, -49.750645f },
};
void func_menu_801AC9A0(s32 index) {
diff --git a/src/overlays/ovl_menu/fox_title.c b/src/overlays/ovl_menu/fox_title.c
index 0ae2c0d7..d551bdba 100644
--- a/src/overlays/ovl_menu/fox_title.c
+++ b/src/overlays/ovl_menu/fox_title.c
@@ -7,19 +7,19 @@
#include "global.h"
#include "fox_title.h"
-extern AnimationHeader D_602F8E0;
-extern AnimationHeader D_60305C0;
-extern AnimationHeader D_6031DB8;
-extern AnimationHeader D_6031120;
-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_6032084[];
-extern SkelAnime D_60313AC[];
+extern Animation D_602F8E0;
+extern Animation D_60305C0;
+extern Animation D_6031DB8;
+extern Animation D_6031120;
+extern Animation D_6035024;
+extern Animation D_60338DC;
+extern Animation D_603531C;
+extern Animation D_6036278;
+
+extern Limb* D_602FBAC[];
+extern Limb* D_603088C[];
+extern Limb* D_6032084[];
+extern Limb* D_60313AC[];
extern Gfx D_6036290[];
extern Gfx D_6036B30[];
@@ -158,8 +158,14 @@ f32 D_menu_801B907C;
f32 D_menu_801B9080;
f32 D_menu_801B9084;
+typedef struct {
+ /* 0x00 */ Animation* unk_0;
+ /* 0x04 */ Animation* unk_4;
+ /* 0x08 */ Limb** skeleton;
+} TitleAnimation; // size = 0x0C
+
//! TODO: Symbols for segmented addresses
-Animation D_menu_801ADA00[4] = {
+TitleAnimation D_menu_801ADA00[4] = {
{ &D_602F8E0, &D_6035024, D_602FBAC },
{ &D_60305C0, &D_60338DC, D_603088C },
{ &D_6031DB8, &D_603531C, D_6032084 },
@@ -680,7 +686,7 @@ void func_menu_801881FC(void) {
D_menu_801B8350[3].unk_00.x = 58.0f;
D_menu_801B8350[3].unk_00.y = -5.0f;
D_menu_801B8350[3].unk_00.z = 22.00f;
- D_menu_801B8350[3].unk_48 = -17.899979;
+ D_menu_801B8350[3].unk_48 = -17.899979f;
D_menu_801B8350[3].unk_4C = -8.890011f;
D_menu_801B8350[3].unk_50 = 0.00f;
} else {
@@ -2580,7 +2586,7 @@ void func_menu_8018E67C(s32 arg0) {
}
Animation_GetFrameData(D_menu_801ADA00[arg0].unk_0, sp5C, sp60);
- Animation_DrawSkeleton(0, D_menu_801ADA00[arg0].skelanime, sp60, NULL, NULL, NULL, &gIdentityMatrix);
+ Animation_DrawSkeleton(0, D_menu_801ADA00[arg0].skeleton, sp60, NULL, NULL, NULL, &gIdentityMatrix);
if (arg0 == 2) {
gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
@@ -2645,7 +2651,7 @@ void func_menu_8018EA78(s32 arg0) {
Math_SmoothStepToVec3fArray(sp48, D_menu_801B86E0[arg0], 1,
Animation_GetFrameData(D_menu_801ADA00[arg0].unk_4, sp44, sp48), 0.2f, 100.0f, 0.0001f);
- Animation_DrawSkeleton(1, D_menu_801ADA00[arg0].skelanime, D_menu_801B86E0[arg0], func_menu_8018EDC8, NULL, &arg0,
+ Animation_DrawSkeleton(1, D_menu_801ADA00[arg0].skeleton, D_menu_801B86E0[arg0], func_menu_8018EDC8, NULL, &arg0,
&gIdentityMatrix);
Matrix_Pop(&gGfxMatrix);
diff --git a/yamls/us/overlays.yaml b/yamls/us/overlays.yaml
index 9e043b46..99381c1a 100644
--- a/yamls/us/overlays.yaml
+++ b/yamls/us/overlays.yaml
@@ -57,21 +57,21 @@
- [0xE16C60, c, fox_a6]
- [0xE1F680, c, fox_zo]
- [0xE2DF20, c, fox_so]
- - [0xE38560, c, sf_aq]
+ - [0xE38560, c, fox_aq]
- [0xE4E3D0, .data, fox_i3]
- [0xE4E3E0, .data, fox_a6]
- [0xE4EC90, .data, fox_zo]
- [0xE4F010, .data, fox_so]
- - [0xE4F290, .data, sf_aq]
+ - [0xE4F290, .data, fox_aq]
- [0xE50030, .rodata, fox_a6]
- [0xE504E0, .rodata, fox_zo]
- [0xE50C00, .rodata, fox_so]
- - [0xE51160, .rodata, sf_aq]
+ - [0xE51160, .rodata, fox_aq]
- { start: 0xE51970, type: .bss, vram: 0x801C2240, name: fox_i3 }
- { type: .bss, vram: 0x801C2250, name: fox_a6 }
- { type: .bss, vram: 0x801C2330, name: fox_zo }
- { type: .bss, vram: 0x801C2740, name: fox_so }
- - { type: .bss, vram: 0x801C27C0, name: sf_aq }
+ - { type: .bss, vram: 0x801C27C0, name: fox_aq }
- name: ovl_i4
type: code