summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Asenjo Nitti <96613413+sonicdcer@users.noreply.github.com>2024-01-21 13:27:47 -0300
committerGitHub <noreply@github.com>2024-01-21 13:27:47 -0300
commitcc970381c81be22bab60a396f7ba948e4e4c426f (patch)
treef5f315f17426a57edeb885ba6f2209aa53927630
parentb8af624d0b14f9bad493e3d4960dc5e40986fb72 (diff)
fox_hud & fox_me Decompiled (#95)
* func_80092D48 * func_800927A0 * TempComp.bin.mio0 git ignored * func_800924E0 * func_80094D20 * func_80096A74 * func_80095604 * all functions done * symbols for segmented addresses * move symbols to c file for now * failed attempt to import data * fix * Import data * move data below * ready for BSS attempt * fix warnings * ordering * symbols for some segmented addresses * rename to fox_hud * clear mess * . * . * space * . * func_i2_80187530 * func_i2_8018756C * func_i2_80187650 * func_i2_801877C4 * func_i2_8018795C * func_i2_80187B08 * func_i2_80187C68 * bss again (#98) * func_i2_80187D08 * func_i2_80187D98 * func_i2_80187FF8 * func_i2_801881A8 * func_i2_80188228 * func_i2_80188298 * ARRAY_COUNT * func_i2_80188344 * func_i2_80188B84 * func_i2_80188C2C * func_i2_80188E8C * func_i2_80188F2C * func_i2_80188CAC * func_i2_80189114 * func_i2_8018B7C4 * func_i2_8018C77C * func_i2_8018C8F4 * func_i2_8018CA10 * func_i2_8018CB50 * func_i2_8018BACC co-authored-by: @inspectredc * func_i2_8018CCF8 * func_i2_8018CB50 * func_i2_8018CD8C co-authored-by: @inspectredc & @petrie911 * func_i2_8018D9EC * func_i2_8018DA6C * func_i2_8018DAEC * func_i2_8018DB6C * func_i2_8018DBEC * func_i2_8018DCE4 * func_i2_8018DE14 * func_i2_8018DF08 co-authored-by @inspectredc & @petrie911 * func_i2_8018E084 * func_i2_8018ED9C * func_i2_80188088 * func_i2_801892F0 * func_i2_8018978C co-authored-by @KiritoDv & inspectredc * fox_me DATA IMPORTED * resolve conflicts * func_i6_80197B30 * func_i6_80197CC4 * func_i6_80197F84 * func_i6_80198244 * merge and solve bss * func_i6_801983E4 * PR review --------- Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>
-rw-r--r--.gitignore1
-rw-r--r--include/functions.h6
-rw-r--r--include/hud.h58
-rw-r--r--include/i3.h4
-rw-r--r--include/sf64math.h2
-rw-r--r--include/sf64object.h4
-rw-r--r--include/sf64player.h4
-rw-r--r--include/variables.h33
-rw-r--r--linker_scripts/us/symbol_addrs_engine.txt4
-rw-r--r--linker_scripts/us/undefined_syms.ld47
-rw-r--r--src/main/fox_97F80.c1
-rw-r--r--src/main/fox_hud.c (renamed from src/main/sf_hud.c)1752
-rw-r--r--src/main/fox_play.c12
-rw-r--r--src/overlays/ovl_i2/fox_me.c2528
-rw-r--r--src/overlays/ovl_i3/sf_so.c1
-rw-r--r--src/overlays/ovl_i4/fox_ka.c2
-rw-r--r--src/overlays/ovl_i6/fox_sy.c343
-rw-r--r--src/overlays/ovl_menu/fox_title.c21
-rw-r--r--yamls/us/main.yaml8
-rw-r--r--yamls/us/overlays.yaml2
20 files changed, 4486 insertions, 347 deletions
diff --git a/.gitignore b/.gitignore
index b80a46ba..38c99622 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,4 @@ tools/mio0
tools/ido-recomp
.venv/
m2cfiles/
+TempComp.bin.mio0 \ No newline at end of file
diff --git a/include/functions.h b/include/functions.h
index 036586a2..3f6ee859 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -39,6 +39,7 @@ void func_8001CA24(u8);
void func_8001CB80(u8, u8);
void func_8001CCDC(u8, Vec3f *);
void func_8001CE28(u8, Vec3f *);
+void func_8001D034(Vec3f*, s32, u8);
void func_8001D10C(Vec3f*, u32);
void func_8001D15C(u8);
void func_8001D1C8(u8, s32);
@@ -302,6 +303,8 @@ void func_8006BB78(Actor*);
void func_8006C008(Actor*);
void func_8006D350(Object_80*);
void func_8006EEFC(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32);
+void func_8006EFA0(s32 unk0E4, f32 xPos, f32 yPos, f32 zPos, f32 arg4, f32 arg5, f32 arg6, f32 xRot, f32 yRot,
+ f32 zRot);
void func_8006F0D8(f32 xPos, f32 yPos, f32 zPos, f32 arg3);
void func_80072594(Actor*);
s32 func_80074F90(Object_80*);
@@ -492,6 +495,9 @@ void func_80092D48(Actor *);
void func_80092EC0(Actor* actor);
void func_80093164(Actor*);
void func_800935E8(Player*);
+void func_800953A0(Actor*, s32);
+void func_8009546C(Actor*, s32);
+void func_80095538(Actor*, s32);
void func_80095604(Player*);
void func_80094954(Effect*);
void func_80094BBC(Effect*);
diff --git a/include/hud.h b/include/hud.h
index 7ddc03aa..68615254 100644
--- a/include/hud.h
+++ b/include/hud.h
@@ -3,14 +3,18 @@
#include "global.h"
-typedef struct UnkStruct_func_80095350 {
- /* 0x00 */ s8 unk0;
- /* 0x01 */ char pad_1[0x1];
- /* 0x02 */ s16 unk2;
- /* 0x04 */ char pad_4[0xB2];
- /* 0xB6 */ s16 unkB6;
-} UnkStruct_func_80095350;
+typedef struct {
+ /* 0x00 */ u8* unk_00;
+ /* 0x04 */ s32 width;
+ /* 0x08 */ s32 height;
+ /* 0x0C */ u8* unk_0C;
+ /* 0x10 */ s32 unk_10;
+ /* 0x14 */ s32 unk_14;
+} UnkStruct_D_800D1AEC;
+void func_80084930(f32, f32, s32);
+void func_80086444(void);
+void func_80087788(void);
void func_80084E78(Gfx** gfxP, void* arg1, void* arg2, u32 arg3, u32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8,
f32 arg9, f32 argA);
void func_80085944(void);
@@ -36,44 +40,4 @@ void func_8008E5E8(void);
s32 func_80090E8C(Actor*);
s32 func_800910C0(Actor*);
-// Weird addresses, assets maybe?
-extern u16 D_1000E80[];
-extern u16 D_1002280[];
-extern u16 D_10030D0[];
-extern s32 D_1011280[];
-extern s32 D_10116A0[];
-extern s32 D_10116B0[];
-extern s32 D_1011730[];
-extern s32 D_1011AC0[];
-extern s32 D_1011B90[];
-extern s32 D_1011BB0[];
-extern s32 D_1011C80[];
-extern s32 D_1011CA0[];
-extern s32 D_1011D70[];
-extern s32 D_1011D90[];
-extern s32 D_1011E60[];
-extern s32 D_1013580[];
-extern s32 D_1013700[];
-extern Gfx D_20031B0[];
-extern Gfx D_2010A30[];
-extern u16 D_3000B20[];
-extern u8 D_30013E0[];
-
-extern s32 D_80161690;
-extern s32 D_80161718;
-extern s32 D_8016171C;
-extern s32 D_801617E8[];
-extern s32 D_801617FC;
-extern s32 gHitCount;
-extern s32 D_80177838;
-extern s32 D_80177854;
-extern s32 gTeamShields[];
-extern s32 D_801778BC;
-extern s32 gVersusMode;
-extern s32 D_80177B50[];
-extern s32 D_80177B70[];
-extern s32 D_80177E7C;
-extern LevelId gCurrentLevel;
-extern s32 D_80178750;
-
#endif
diff --git a/include/i3.h b/include/i3.h
index a404bf83..36982576 100644
--- a/include/i3.h
+++ b/include/i3.h
@@ -10,6 +10,8 @@
// extern f32 D_i3_801C4188; Currently externed in relevant files for bss ordering
+void func_i3_801BE034(Actor*, Player*);
+
void func_i3_8018DA58(Actor*);
void func_i3_8019E5F0(Actor*);
void func_i3_801A8BE8(Actor*);
@@ -94,7 +96,6 @@ void func_i3_801AACF8(Player*);
void func_i3_801ABA40(PlayerShot*);
void func_i3_801AC274(Player*);
void func_i3_801AC8A8(f32, f32, f32, f32, s32);
-void func_i3_801AC8A8(f32, f32, f32, f32, s32);
void func_i3_801AC918(Effect*);
void func_i3_801ACBB4(void);
void func_i3_801ACE50(Player*);
@@ -140,6 +141,7 @@ void func_i3_801BC9A0(Actor*);
void func_i3_801BD264(Actor*);
void func_i3_801BD54C(Actor*);
void func_i3_801BDE6C(Actor*);
+void func_i3_801BDF14(void);
void func_i3_801BE1FC(Object_80*);
void func_i3_801BE3F8(Actor*);
void func_i3_801BEB1C(Actor*);
diff --git a/include/sf64math.h b/include/sf64math.h
index e8877e6b..f68c02a1 100644
--- a/include/sf64math.h
+++ b/include/sf64math.h
@@ -1,7 +1,7 @@
#ifndef SF64_MATH_H
#define SF64_MATH_H
-#include "PR/ultratypes.h"
+#include "libultra/ultra64.h"
typedef struct {
/* 0x0 */ f32 x;
diff --git a/include/sf64object.h b/include/sf64object.h
index 689b43c7..8208de75 100644
--- a/include/sf64object.h
+++ b/include/sf64object.h
@@ -206,7 +206,9 @@ typedef struct {
/* 0x01C */ ObjectInfo info;
/* 0x040 */ s32 index;
/* 0x044 */ s16 unk_044;
- /* 0x046 */ char unk_46[6];
+ /* 0x046 */ s16 unk_046;
+ /* 0x048 */ s16 unk_048;
+ /* 0x04A */ s16 unk_04A;
/* 0x04C */ s16 unk_04C;
/* 0x04E */ s16 actionState;
/* 0x050 */ s16 timer_050;
diff --git a/include/sf64player.h b/include/sf64player.h
index c17b0401..139faa1e 100644
--- a/include/sf64player.h
+++ b/include/sf64player.h
@@ -212,7 +212,7 @@ typedef struct Player {
/* 0x1CC */ PlayerForm form;
/* 0x1D0 */ s32 unk_1D0;
/* 0x1D4 */ s32 unk_1D4;
- /* 0x1D8 */ char pad1D8[4];
+ /* 0x1D8 */ s32 unk_1D8;
/* 0x1DC */ s32 unk_1DC;
/* 0x1E0 */ s32 timer_1E0;
/* 0x1E4 */ s32 timer_1E4;
@@ -224,7 +224,7 @@ typedef struct Player {
/* 0x1FC */ s32 timer_1FC;
/* 0x200 */ s32 unk_200;
/* 0x204 */ s32 unk_204;
- /* 0x208 */ char pad208[4];
+ /* 0x208 */ s32 unk_208;
/* 0x20C */ s32 unk_20C;
/* 0x210 */ s32 timer_210;
/* 0x214 */ s32 timer_214;
diff --git a/include/variables.h b/include/variables.h
index c9bc74dd..37651739 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -209,7 +209,7 @@ extern f32 D_800CFFC4[];
// fox_effect
-// sf_hud
+// fox_hud
extern s16 D_800D1970;
extern f32 D_800D19AC[];
extern f32 D_800D19E0[];
@@ -308,38 +308,15 @@ extern u8 D_80161684;
// fox_6B3B0
extern s32 D_80161690;
-// sf_hud?
-extern f32 D_801616A0;
-extern f32 D_801616BC;
-extern f32 D_801616C0;
-extern f32 D_801616C4;
-extern f32 D_801616C8;
+// fox_hud
extern s32 D_80161704;
extern s32 D_80161708;
extern s32 D_8016170C;
-extern s32 gTotalHits; // gTotalGameScore
-extern f32 D_80161720;
-extern f32 D_80161724;
-extern f32 D_80161728;
+extern s32 gTotalHits; // 0x80161714 gTotalGameScore
+extern f32 D_80161720[3];
extern s32 D_8016172C;
extern s32 D_80161730;
-extern s32 gShowBossHealth;
-extern s32 D_80161788;
-extern s32 D_8016178C;
-extern s32 D_80161790;
-extern s32 D_80161794;
-extern s32 D_80161798;
-extern f32 D_8016179C;
-extern f32 D_801617A0;
-extern f32 D_801617A4;
-extern f32 D_801617A8;
-extern f32 D_801617AC;
-extern s32 D_801617B0;
-extern s32 gMedalStatus;
-extern s32 gMedalFlashTimer;
-extern s32 D_80161810[];
-extern s32 D_80161900[];
-extern s32 D_80161910[0x10]; // could be in fox_97F80
+extern s32 gShowBossHealth; // 0x80161734
// fox_game
extern f32 D_80161A10;
diff --git a/linker_scripts/us/symbol_addrs_engine.txt b/linker_scripts/us/symbol_addrs_engine.txt
index 4b31e917..f48e5959 100644
--- a/linker_scripts/us/symbol_addrs_engine.txt
+++ b/linker_scripts/us/symbol_addrs_engine.txt
@@ -360,11 +360,13 @@ func_800A3608 = 0x800A3608;
// sf_hud
+D_801616A0 = 0x801616A0; //type:s32 size:0xC
+D_801616B0 = 0x801616B0; //type:s32 size:0xC
gTotalHits = 0x80161714;
gShowBossHealth = 0x80161734;
gMedalStatus = 0x801617B4;
gMedalFlashTimer = 0x801617B8;
-
+D_800D1AEC = 0x800D1AEC; //type:s32 size:0x1B0
// fox_play
D_80161A50 = 0x80161A50;
diff --git a/linker_scripts/us/undefined_syms.ld b/linker_scripts/us/undefined_syms.ld
index 0adbc4ae..87510fbc 100644
--- a/linker_scripts/us/undefined_syms.ld
+++ b/linker_scripts/us/undefined_syms.ld
@@ -353,6 +353,9 @@ D_5000300 = 0x05000300;
D_5000380 = 0x05000380;
D_5000400 = 0x05000400;
D_5000480 = 0x05000480;
+D_500A5F0 = 0x0500A5F0;
+D_500A6E0 = 0x0500A6E0;
+D_500A7D0 = 0x0500A7D0;
D_6000E00 = 0x06000E00;
D_6001360 = 0x06001360;
@@ -772,6 +775,32 @@ D_D000000 = 0x0D000000;
D_D00B5C0 = 0x0D00B5C0;
D_D00B720 = 0x0D00B720;
+// fox_title, to be ordered later
+D_602F8E0 = 0x0602F8E0;
+D_60305C0 = 0x060305C0;
+D_6031DB8 = 0x06031DB8;
+D_6031120 = 0x06031120;
+D_6035024 = 0x06035024;
+D_60338DC = 0x060338DC;
+D_603531C = 0x0603531C;
+D_6036278 = 0x06036278;
+D_602FBAC = 0x0602FBAC;
+D_603088C = 0x0603088C;
+D_6032084 = 0x06032084;
+D_60313AC = 0x060313AC;
+
+D_602F8E0 = 0x0602F8E0;
+D_60305C0 = 0x060305C0;
+D_6031DB8 = 0x06031DB8;
+D_6031120 = 0x06031120;
+D_60338DC = 0x060338DC;
+D_6035024 = 0x06035024;
+D_603531C = 0x0603531C;
+D_6036278 = 0x06036278;
+
+D_6036290 = 0x06036290;
+D_6036B30 = 0x06036B30;
+
// fox_map, to be ordered later
D_6001C80 = 0x06001C80;
D_6002160 = 0x06002160;
@@ -832,6 +861,24 @@ D_9005380 = 0x09005380;
D_90075A0 = 0x090075A0;
D_9004230 = 0x09004230;
+// fox_hud, to be ordered later
+D_101C170 = 0x0101C170;
+D_101C000 = 0x0101C000;
+D_101BE90 = 0x0101BE90;
+D_101BD20 = 0x0101BD20;
+D_101BBB0 = 0x0101BBB0;
+D_101BA40 = 0x0101BA40;
+D_101B8D0 = 0x0101B8D0;
+D_101B760 = 0x0101B760;
+D_101B5F0 = 0x0101B5F0;
+D_101B480 = 0x0101B480;
+D_101B310 = 0x0101B310;
+D_101B1A0 = 0x0101B1A0;
+D_3000000 = 0x03000000;
+D_3000080 = 0x03000080;
+D_6001B80 = 0x06001B80;
+D_60020D0 = 0x060020D0;
+
D_C001880 = 0x0C001880;
D_C037FCC = 0x0C037FCC;
D_C0380C0 = 0x0C0380C0;
diff --git a/src/main/fox_97F80.c b/src/main/fox_97F80.c
index 0fe560b8..1602158e 100644
--- a/src/main/fox_97F80.c
+++ b/src/main/fox_97F80.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "prevent_bss_reordering.h"
f32 __dx1;
f32 __dx2;
diff --git a/src/main/sf_hud.c b/src/main/fox_hud.c
index 9b240516..421085de 100644
--- a/src/main/sf_hud.c
+++ b/src/main/fox_hud.c
@@ -1,44 +1,111 @@
+#include "sf64math.h"
+
+// BSS section range:
+// D_801616A0 <==> D_80161910
+
+// BSS SECTION START
+
+// placed before global.h for reordering reasons
+
+Vec3f D_801616A0;
+Vec3f D_801616B0;
+f32 D_801616BC;
+f32 D_801616C0;
+f32 D_801616C4;
+f32 D_801616C8;
+s32 D_801616D0[13];
+s32 D_80161704;
+s32 D_80161708;
+s32 D_8016170C;
+s32 D_80161710;
+s32 gTotalHits; // 0x80161714
+s32 D_80161718;
+s32 D_8016171C;
+f32 D_80161720[3];
+s32 D_8016172C;
+s32 D_80161730;
+s32 gShowBossHealth; // 0x80161734
+s32 D_80161738[4];
+s32 D_80161748[4];
+s32 D_80161758;
+// gap = 0x4 bytes, probably padding
+s32 D_80161760[4];
+f32 D_80161770;
+f32 D_80161774;
+f32 D_80161778;
+f32 D_8016177C;
+f32 D_80161780;
+f32 D_80161784;
+s32 D_80161788;
+s32 D_8016178C;
+s32 D_80161790;
+s32 D_80161794;
+s32 D_80161798;
+f32 D_8016179C;
+f32 D_801617A0;
+f32 D_801617A4;
+f32 D_801617A8;
+f32 D_801617AC;
+s32 D_801617B0;
+s32 gMedalStatus; // 0x801617B4
+s32 gMedalFlashTimer; // 0x801617B8
+// gap = 0x4 bytes, probably padding
+s32 D_801617C0[10];
+s32 D_801617E8[10];
+s32 D_80161810[10];
+s32 D_80161838[10];
+s32 D_80161860[20];
+f32 D_801618B0[20];
+s32 D_80161900[20];
+
+// BSS SECTION END
+
+#include "global.h"
#include "hud.h"
-typedef struct {
- /* 0x00 */ u8* unk_00;
- /* 0x04 */ s32 width;
- /* 0x08 */ s32 height;
- /* 0x0C */ u8* unk_0C;
- /* 0x10 */ s32 unk_10;
- /* 0x14 */ s32 unk_14;
-} UnkStruct_D_800D1AEC;
-
-extern f32 D_800D19F0;
-extern s32 D_800D19F4;
-extern s32 D_800D19F8;
-
-extern UnkStruct_D_800D1AEC D_800D1AEC[];
-
-extern f32 D_800D1CFC;
-extern f32 D_800D1E10;
-extern s32 D_80161710;
-extern s32 D_80161738[4];
-extern s32 D_80161748[4];
-extern s32 D_80161758;
-extern s32 D_80161760[4];
-extern f32 D_80161770;
-extern f32 D_80161774;
-extern f32 D_80161778;
-extern f32 D_8016177C;
-extern f32 D_80161780;
-extern f32 D_80161784;
-extern s32 D_801617C0[10];
-extern s32 D_80161838[10];
-extern f32 D_801618C8[20];
-extern s32 D_80161860[20];
-extern f32 D_801618B0[20];
+void func_80087788(void);
+
+// Segmented addresses
+
extern u8 D_1000000[];
-extern u8 D_1000280;
+extern u8 D_1000280[];
extern u8 D_1000640[];
+extern u16 D_1000E80[];
+extern u16 D_1002280[];
+extern u16 D_10030D0[];
+extern s32 D_1011280[];
+extern s32 D_10116A0[];
+extern s32 D_10116B0[];
+extern s32 D_1011730[];
+extern s32 D_1011AC0[];
+extern s32 D_1011B90[];
+extern s32 D_1011BB0[];
+extern s32 D_1011C80[];
+extern s32 D_1011CA0[];
+extern s32 D_1011D70[];
+extern s32 D_1011D90[];
+extern s32 D_1011E60[];
+extern s32 D_1013580[];
+extern s32 D_1013700[];
+extern Gfx D_20031B0[];
+extern Gfx D_2010A30[];
+extern u16 D_3000B20[];
+extern u8 D_30013E0[];
extern Gfx D_1012110[];
extern Gfx D_101C2E0[];
extern Gfx D_1024990[];
+extern Gfx D_101C170[];
+extern Gfx D_101C000[];
+extern Gfx D_101BE90[];
+extern Gfx D_101BD20[];
+extern Gfx D_101BBB0[];
+extern Gfx D_101BA40[];
+extern Gfx D_101B8D0[];
+extern Gfx D_101B760[];
+extern Gfx D_101B5F0[];
+extern Gfx D_101B480[];
+extern Gfx D_101B310[];
+extern Gfx D_101B1A0[];
extern u16 D_3000120[];
extern u8 D_5000500[];
extern u8 D_5001110[];
@@ -52,19 +119,60 @@ extern u8 D_5004580[];
extern u8 D_5004DC0[];
extern u8 D_5004E20[];
extern u8 D_5005460[];
+extern u8 D_5009F60[];
+extern u8 D_500A050[];
+extern u8 D_500A140[];
+extern u8 D_500A230[];
+extern u8 D_500A320[];
+extern u8 D_500A410[];
+extern u8 D_500A500[];
+extern u8 D_500A5F0[];
+extern u8 D_500A6E0[];
+extern u8 D_500A7D0[];
extern u16 D_6000840[];
extern u16 D_6000C80[];
+extern u8 D_6000D80[];
extern u8 D_6001260[];
extern u8 D_60012D0[];
extern u8 D_6002890[];
extern Gfx D_6003090[];
-void func_80084930(f32, f32, s32);
-void func_80086444(void);
-void func_80087788(void);
-void func_801BE034(Actor*, Player*);
+// DATA SECTION START
+
+s16 D_800D1970 = 0;
+
+// unused
+UNK_TYPE D_800D1974[14] = { 0 };
+
+f32 D_800D19AC[] = { 255.0f, 255.0f, 255.0f, 255.0f, 255.0f };
+
+f32 D_800D19C0[] = { 255.0f, 255.0f, 255.0f, 255.0f };
+
+s32 D_800D19D0[] = { 0, 0, 0, 0 };
+
+f32 D_800D19E0[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+
+f32 D_800D19F0 = 0.0f;
+
+s32 D_800D19F4 = 0;
+
+s32 D_800D19F8 = 0;
+
+s32 D_800D19FC = 0;
+
+Vtx D_800D1A00[] = {
+ { 10, 10, 0, 0, 0, 0, 255, 255, 255, 255 },
+ { -10, 10, 0, 0, 0, 0, 255, 255, 255, 255 },
+ { -10, -10, 0, 0, 0, 0, 255, 255, 255, 255 },
+ { 10, -10, 0, 0, 0, 0, 255, 255, 255, 255 },
+};
+
+Gfx D_800D1A40[] = {
+ gsSPVertex(D_800D1A00, 4, 0),
+ gsSP1Quadrangle(1, 2, 3, 0, 0),
+ gsSPEndDisplayList(),
+};
-#ifdef IMPORT_DATA
void func_80084930(f32 arg0, f32 arg1, s32 arg2) {
u8* D_800D1A58[] = {
D_3000000,
@@ -127,11 +235,7 @@ void func_80084930(f32 arg0, f32 arg1, s32 arg2) {
func_800869A0(arg0, arg1, arg2, 1.0f, 1, 99);
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084930.s")
-#endif
-#ifdef IMPORT_DATA
void func_80084B94(s32 arg0) {
s32 i;
Vec3f D_800D1A70[] = {
@@ -170,9 +274,6 @@ void func_80084B94(s32 arg0) {
Matrix_Pop(&gGfxMatrix);
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084B94.s")
-#endif
void func_80084E78(Gfx** gfxP, void* arg1, void* arg2, u32 arg3, u32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8,
f32 arg9, f32 argA) {
@@ -249,11 +350,9 @@ void func_80085890(f32 arg0, f32 arg1, f32 arg2, f32 arg3) {
}
}
-#ifdef IMPORT_BSS
void func_80085944(void) {
- Gfx* D_800D1A94[] = { (Gfx*) 0x0101C170, (Gfx*) 0x0101C000, (Gfx*) 0x0101BE90, (Gfx*) 0x0101BD20,
- (Gfx*) 0x0101BBB0, (Gfx*) 0x0101BA40, (Gfx*) 0x0101B8D0, (Gfx*) 0x0101B760,
- (Gfx*) 0x0101B5F0, (Gfx*) 0x0101B480, (Gfx*) 0x0101B310, (Gfx*) 0x0101B1A0 };
+ Gfx* D_800D1A94[] = { D_101C170, D_101C000, D_101BE90, D_101BD20, D_101BBB0, D_101BA40,
+ D_101B8D0, D_101B760, D_101B5F0, D_101B480, D_101B310, D_101B1A0 };
s32 i;
s32 j;
f32 D_800D1AC4[] = { 0.0f, -30.0f, -26.0f, -22.0f, -18.0f };
@@ -263,9 +362,9 @@ void func_80085944(void) {
f32 y;
s32 temp;
- D_801618C8[6] += 0.7f;
- if (D_801618C8[6] >= 12.0f) {
- D_801618C8[6] = 0.0f;
+ D_801618B0[6] += 0.7f;
+ if (D_801618B0[6] >= 12.0f) {
+ D_801618B0[6] = 0.0f;
}
if (D_80161900[4]) {
@@ -289,7 +388,7 @@ void func_80085944(void) {
D_80161860[1 + i] = 1;
D_80161900[0 + i] = 14;
- D_801618C8[2 + i] = 0.0f;
+ D_801618B0[2 + i] = 0.0f;
if (i == 2) {
D_80161900[4] = 28;
@@ -328,9 +427,9 @@ void func_80085944(void) {
case 2:
if (D_80161900[i]) {
if (D_80161900[i + 0] >= 7) {
- D_801618C8[i + 2] += 0.15f;
+ D_801618B0[i + 2] += 0.15f;
} else {
- D_801618C8[i + 2] -= 0.15f;
+ D_801618B0[i + 2] -= 0.15f;
}
RCP_SetupDL(&gMasterDisp, 0x3E);
@@ -338,8 +437,8 @@ void func_80085944(void) {
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, D_800D1AC4[i + 1], D_800D1AD8[i + 1], -100.0f, 0);
- Matrix_RotateZ(gGfxMatrix, (3.14159265358979323846f / 180.0f) * D_801618C8[0], 1);
- Matrix_Scale(gGfxMatrix, D_801618C8[i + 2], D_801618C8[i + 2], D_801618C8[i + 2], 1);
+ Matrix_RotateZ(gGfxMatrix, (3.14159265358979323846f / 180.0f) * D_801618B0[0], 1);
+ Matrix_Scale(gGfxMatrix, D_801618B0[i + 2], D_801618B0[i + 2], D_801618B0[i + 2], 1);
Matrix_SetGfxMtx(&gMasterDisp);
gSPDisplayList(gMasterDisp++, D_101C2E0);
@@ -373,7 +472,7 @@ void func_80085944(void) {
gDPSetPrimColor(gMasterDisp++, 0, 0, 180, 180, 0, 50);
gSPDisplayList(gMasterDisp++, D_1012110);
} else {
- temp = D_801618C8[6];
+ temp = D_801618B0[6];
gSPDisplayList(gMasterDisp++, D_800D1A94[temp]);
}
Matrix_Pop(&gGfxMatrix);
@@ -390,26 +489,18 @@ void func_80085944(void) {
if (D_80161860[j + 1] == 1) {
D_80161860[j + 1] = 2;
D_80161900[j + 0] = 14;
- D_801618C8[j + 2] = 0.0f;
+ D_801618B0[j + 2] = 0.0f;
D_80161900[4] = 28;
} else {
D_80161860[j + 1] = 0;
D_80161900[j + 0] = 14;
- D_801618C8[j + 2] = 0.0f;
+ D_801618B0[j + 2] = 0.0f;
}
}
}
- D_801618C8[0] += 35.0f;
- D_801618C8[1] += 10.0f;
+ D_801618B0[0] += 35.0f;
+ D_801618B0[1] += 10.0f;
}
-#else
-#ifdef IMPORT_DATA
-Gfx* D_800D1A94[] = { (Gfx*) 0x0101C170, (Gfx*) 0x0101C000, (Gfx*) 0x0101BE90, (Gfx*) 0x0101BD20,
- (Gfx*) 0x0101BBB0, (Gfx*) 0x0101BA40, (Gfx*) 0x0101B8D0, (Gfx*) 0x0101B760,
- (Gfx*) 0x0101B5F0, (Gfx*) 0x0101B480, (Gfx*) 0x0101B310, (Gfx*) 0x0101B1A0 };
-#endif
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80085944.s")
-#endif
void func_80086110(f32 arg0, f32 arg1, s32 arg2) {
f32 temp = 0.82f;
@@ -500,7 +591,18 @@ s32 func_800863C8(void) {
return ret;
}
-#ifdef IMPORT_DATA
+UnkStruct_D_800D1AEC D_800D1AEC[] = {
+ { D_500A050, 16, 15, (u8*) D_6000000, 128, 28 }, { D_500A140, 16, 15, (u8*) D_6000000, 96, 28 },
+ { D_500A140, 16, 15, (u8*) D_6000000, 176, 12 }, { D_500A230, 16, 15, (u8*) D_6000000, 168, 28 },
+ { D_500A230, 16, 15, (u8*) D_6000000, 168, 28 }, { D_500A230, 16, 15, (u8*) D_6000000, 96, 13 },
+ { D_500A320, 16, 15, (u8*) D_6000000, 176, 12 }, { D_500A320, 16, 15, (u8*) D_6000000, 112, 13 },
+ { D_500A320, 16, 15, (u8*) D_6000000, 112, 28 }, { D_500A410, 16, 15, (u8*) D_6000000, 96, 28 },
+ { D_500A410, 16, 15, (u8*) D_6000000, 160, 28 }, { D_500A410, 16, 15, (u8*) D_6000000, 176, 12 },
+ { D_500A500, 16, 15, (u8*) D_6000000, 168, 19 }, { D_500A500, 16, 15, (u8*) D_6000000, 104, 28 },
+ { 0x0500A5F0, 16, 15, D_6000D80, 128, 28 }, { 0x0500A5F0, 16, 15, D_60012D0, 128, 28 },
+ { 0x0500A5F0, 16, 15, 0x0C000A80, 128, 28 }, { D_5009F60, 16, 15, 0x05000D50, 80, 12 },
+};
+
void func_80086444(void) {
s32 i = 9;
s32 j;
@@ -518,7 +620,7 @@ void func_80086444(void) {
i = 1;
break;
- case LEVEL_VENOM_ANDROSS:
+ case LEVEL_VENOM_1:
i = 0;
break;
@@ -536,9 +638,6 @@ void func_80086444(void) {
}
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80086444.s")
-#endif
void func_80086664(f32 x, f32 y) {
s32 i;
@@ -630,14 +729,14 @@ void func_80086664(f32 x, f32 y) {
}
}
-#ifdef IMPORT_DATA
void func_800869A0(f32 arg0, f32 arg1, s32 k, f32 arg3, s32 arg4, s32 arg5) {
s32 var_s2;
s32 i;
s32 j;
u16* D_800D1CD4[] = {
- D_5009F60, D_500A050, D_500A140, D_500A230, D_500A320, D_500A410, D_500A500, D_500A5F0, D_500A6E0, D_500A7D0,
+ (u16*) D_5009F60, (u16*) D_500A050, (u16*) D_500A140, (u16*) D_500A230, (u16*) D_500A320,
+ (u16*) D_500A410, (u16*) D_500A500, (u16*) D_500A5F0, (u16*) D_500A6E0, (u16*) D_500A7D0,
};
if (arg4 != 0) {
@@ -660,9 +759,6 @@ void func_800869A0(f32 arg0, f32 arg1, s32 k, f32 arg3, s32 arg4, s32 arg5) {
}
TextureRect_8bIA(&gMasterDisp, D_800D1CD4[k], 16, 15, arg0, arg1, arg3, arg3);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800869A0.s")
-#endif
void func_80086C08(f32 xPos, f32 yPos, f32 xScale, f32 yScale) {
RCP_SetupDL(&gMasterDisp, 0x4E);
@@ -699,6 +795,8 @@ void func_80086CC8(void) {
}
}
+f32 D_800D1CFC = 0.0f;
+
void func_80086DCC(void) {
s32 i;
s32 j;
@@ -861,7 +959,6 @@ void func_80086DCC(void) {
}
}
-#ifdef IMPORT_DATA
void func_80087530(f32 x, f32 y, s32 number) {
u8* D_800D1D00[] = { 0x03000000, 0x03000000, 0x03000000 };
u16* D_800D1D0C[] = { 0x03000080, 0x03000080, 0x03000080 };
@@ -924,11 +1021,7 @@ void func_80087530(f32 x, f32 y, s32 number) {
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255);
Graphics_DisplayHUDNumber(x2, y2, number);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80087530.s")
-#endif
-#ifdef IMPORT_DATA
void func_80087788(void) {
u16* D_800D1D18[] = { D_10050E0, D_100BAC0, D_100D900, D_10032A0 };
u8* D_800D1D28[] = { 0x05006CB0, 0x05006E90, 0x05006B30 };
@@ -986,9 +1079,6 @@ void func_80087788(void) {
func_80086110(x[j][2], y[j][2], shield);
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80087788.s")
-#endif
void func_80087B5C(void) {
s32 i;
@@ -1305,7 +1395,6 @@ s32 func_800886B8(void) {
return var_v1;
}
-#ifdef IMPORT_DATA
void func_80088784(s32 arg0) {
Gfx* D_800D1D4C[] = {
D_200B630, D_200A5A0, D_2009510, D_2008480, D_20073F0, D_2006360, D_200C6C0, D_20052D0, D_2004240,
@@ -1337,12 +1426,8 @@ void func_80088784(s32 arg0) {
Matrix_Pop(&gGfxMatrix);
}
}
-#else
-void func_80088784(s32 arg0);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80088784.s")
-#endif
-#ifdef IMPORT_BSS
+// #if defined(IMPORT_BSS) || defined(NON_MATCHING)
// needs D_80161838 to be static
void func_80088970(void) {
s32 i;
@@ -1388,7 +1473,7 @@ void func_80088970(void) {
if (ret != 0) {
D_80161838[0] = 0;
if (((ret > 0) && (D_80161810[1] == 1)) || ((ret < 0) && (D_80161810[1] == 0))) {
- D_80161810[1] = D_80161810[1] ^ 1;
+ D_80161810[1] ^= 1;
Audio_PlaySfx(0x49000002U, &D_800C5D28, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
}
@@ -1475,7 +1560,8 @@ void func_80088970(void) {
if (D_80161838[1] == 6) {
gLifeCount[gPlayerNum]--;
}
- if ((D_80161838[1] += 1) > 13) {
+ D_80161838[1]++;
+ if (D_80161838[1] > 13) {
D_80161810[0] = 4;
D_80161838[1] = 0;
}
@@ -1665,9 +1751,10 @@ void func_80088970(void) {
}
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80088970.s")
-#endif
+// #else
+// void func_80088970(void);
+// #pragma GLOBAL_ASM("asm/us/nonmatchings/main/fox_hud/func_80088970.s")
+// #endif
void func_80089670(void) {
RCP_SetupDL(&gMasterDisp, 0x3E);
@@ -1709,7 +1796,8 @@ void func_800898F0(void) {
gSPDisplayList(gMasterDisp++, D_6004570);
}
-#ifdef IMPORT_DATA
+f32 D_800D1E10 = 0.0f;
+
void func_80089994(s32 arg0) {
s32 D_800D1E14[][4] = {
{ 177, 242, 12, 255 }, { 89, 121, 6, 128 }, { 90, 90, 255, 255 }, { 45, 45, 128, 128 },
@@ -1733,9 +1821,6 @@ void func_80089994(s32 arg0) {
Matrix_SetGfxMtx(&gMasterDisp);
gSPDisplayList(gMasterDisp++, D_1015510);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089994.s")
-#endif
void func_80089AF4(void) {
RCP_SetupDL(&gMasterDisp, 0x3E);
@@ -1873,7 +1958,6 @@ void func_80089E98(s32 arg0) {
}
}
-#ifdef IMPORT_DATA
void func_8008A07C(f32 x, f32 y) {
f32 D_800D1E94[] = { 20.0f, 180.0f, 20.0f, 180.0f };
f32 D_800D1EA4[] = { 72.0f, 72.0f, 192.0f, 192.0f };
@@ -1907,10 +1991,6 @@ void func_8008A07C(f32 x, f32 y) {
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
func_80085404(xPos, yPos, xScale1, yScale1);
}
-#else
-void func_8008A07C(f32 x, f32 y);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008A07C.s")
-#endif
void func_8008A240(void) {
s32 i;
@@ -2284,6 +2364,10 @@ void func_8008B2A4(void) {
}
}
+s32 D_800D1EB4 = 255;
+s32 D_800D1EB8 = 255;
+s32 D_800D1EBC = 255;
+
void func_8008B2F0(void) {
f32 var_fv0;
@@ -2662,10 +2746,10 @@ void func_8008C104(u16* texture, u16* arg1) {
Texture_Mottle(dst, src, 2);
}
-#ifdef IMPORT_DATA
void func_8008C390(f32 arg0, f32 arg1, f32 arg2, s32 arg3) {
u16* D_800D1EC0[] = {
- D_5000000, D_5000080, D_5000100, D_5000180, D_5000200, D_5000280, D_5000300, D_5000380, D_5000400, D_5000480,
+ (u16*) D_5000000, (u16*) D_5000080, (u16*) D_5000100, (u16*) D_5000180, (u16*) D_5000200,
+ (u16*) D_5000280, (u16*) D_5000300, (u16*) D_5000380, (u16*) D_5000400, (u16*) D_5000480,
};
s32 i;
@@ -2681,11 +2765,7 @@ void func_8008C390(f32 arg0, f32 arg1, f32 arg2, s32 arg3) {
TextureRect_8bIA(&gMasterDisp, D_800D1EC0[arg3 / i], 16, 8, arg0, arg1, arg2, arg2);
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008C390.s")
-#endif
-#ifdef IMPORT_DATA
void func_8008C5C8(f32 arg0, f32 arg1, f32 arg2, s32 arg3) {
u16* D_800D1EE8[] = {
D_10050E0,
@@ -2701,11 +2781,7 @@ void func_8008C5C8(f32 arg0, f32 arg1, f32 arg2, s32 arg3) {
}
TextureRect_16bRGBA(&gMasterDisp, D_800D1EE8[arg3] + 1760, 44, 4, arg0, (40.0f * arg2) + arg1, arg2, arg2);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008C5C8.s")
-#endif
-#ifdef IMPORT_DATA
void func_8008C6F4(s32 idx, s32 arg1) {
f32 D_800D1EF8[] = { 0.0f, 0.0f, -9.0f, 9.0f, 10.0f, 10.0f, 10.0f, 10.0f, 0.0f, 0.0f, -8.0f, 8.0f };
f32 D_800D1F28[] = { -7.0f, 7.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 8.0f, -8.0f, 0.0f, 0.0f };
@@ -2744,11 +2820,7 @@ void func_8008C6F4(s32 idx, s32 arg1) {
Matrix_Pop(&gGfxMatrix);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008C6F4.s")
-#endif
-#ifdef IMPORT_DATA
void func_8008CA44(void) {
s32 D_800D2048[] = {
0x80, 0x40, 0x20, 0x10, 0x0A, 0x09, 0x06, 0x05, 0x08, 0x04, 0x02, 0x01,
@@ -2756,8 +2828,8 @@ void func_8008CA44(void) {
s32 i;
s32 j;
- if ((gPlayer[gPlayerNum].unk228 != 0) && (gPlayer[gPlayerNum].unk210 == 0) && (D_80177854 != 100)) {
- j = gPlayer[gPlayerNum].unk228;
+ if ((gPlayer[gPlayerNum].unk_228 != 0) && (gPlayer[gPlayerNum].timer_210 == 0) && (D_80177854 != 100)) {
+ j = gPlayer[gPlayerNum].unk_228;
for (i = 0; i < 12; i++) {
if ((j & D_800D2048[i]) != D_800D2048[i]) {
@@ -2776,9 +2848,6 @@ void func_8008CA44(void) {
func_8008BD00(D_1024A58, 8, 8, 2);
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008CA44.s")
-#endif
s32 func_8008CB8C(void) {
return 0;
@@ -2788,7 +2857,6 @@ void func_8008CB98(f32 arg0, f32 arg1, f32 arg2) {
TextureRect_8bIA(&gMasterDisp, D_30013E0, 8, 8, arg0, arg1, arg2, arg2);
}
-#ifdef IMPORT_DATA
void func_8008CBE4(void) {
f32 D_800D2078[] = { 62.0f, 222.0f, 62.0f, 222.0f }; // X
f32 D_800D2088[] = { 86.0f, 86.0f, 206.0f, 206.0f }; // Y
@@ -2855,9 +2923,6 @@ void func_8008CBE4(void) {
break;
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008CBE4.s")
-#endif
void func_8008CFB8(f32 arg0, f32 arg1, f32 arg2, f32 arg3) {
s32 i;
@@ -2878,7 +2943,6 @@ void func_8008D1F0(f32 arg0, f32 arg1, f32 arg2, f32 arg3) {
TextureRect_4bCI(&gMasterDisp, D_10116B0, D_1011730, 16, 16, arg0, arg1, arg2, arg3);
}
-#ifdef IMPORT_DATA
void func_8008D250(void) {
f32 D_800D20C8[] = { 113.0f, 273.0f, 113.0f, 273.0f };
f32 D_800D20D8[] = { 79.0f, 79.0f, 199.0f, 199.0f };
@@ -2887,11 +2951,7 @@ void func_8008D250(void) {
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
func_8008C5C8(D_800D20C8[gPlayerNum], D_800D20D8[gPlayerNum], 0.54f, gPlayerNum);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008D250.s")
-#endif
-#ifdef IMPORT_DATA
void func_8008D31C(void) {
f32 D_800D20E8[] = { 60.0f, 220.0f, 60.0f, 220.0f };
f32 D_800D20F8[] = { 78.0f, 78.0f, 198.0f, 198.0f };
@@ -2907,11 +2967,7 @@ void func_8008D31C(void) {
func_8008CFB8(D_800D20E8[gPlayerNum], D_800D20F8[gPlayerNum], 1.0f, 1.0f);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008D31C.s")
-#endif
-#ifdef IMPORT_DATA
void func_8008D4F0(f32 arg0, f32 arg1) {
f32 D_800D2108[] = {
110.0f, 270.0f, 110.0f, 270.0f, 0.0f,
@@ -2969,11 +3025,7 @@ void func_8008D4F0(f32 arg0, f32 arg1) {
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
func_80085740(D_800D2108[var_v1], D_800D211C[var_v1], 1.0f, 1.0f);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008D4F0.s")
-#endif
-#ifdef IMPORT_DATA
void func_8008D7F4(void) {
s32 D_800D2130[] = { 146, 165, 146, 165 };
s32 D_800D2140[] = { 106, 106, 125, 125 };
@@ -2985,11 +3037,12 @@ void func_8008D7F4(void) {
gDPSetPrimColor(gMasterDisp++, 0, 0, D_800D2150[gPlayerNum], D_800D2160[gPlayerNum], D_800D2170[gPlayerNum], 255);
Graphics_DisplayHUDNumber(D_800D2130[gPlayerNum], D_800D2140[gPlayerNum], gPlayerNum + 1);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008D7F4.s")
-#endif
-#ifdef IMPORT_DATA
+s32 D_800D2180[4] = { 0, 0, 0, 0 };
+s32 D_800D2190[4] = { 0, 0, 0, 0 };
+f32 D_800D21A0 = 255.0f;
+f32 D_800D21A4 = 0.0f;
+
void func_8008D984(void) {
s32 D_800D21A8[] = { 146, 165, 146, 165 };
s32 D_800D21B8[] = { 94, 94, 137, 137 };
@@ -3024,9 +3077,6 @@ void func_8008D984(void) {
func_8008D1F0(D_800D21A8[gPlayerNum], D_800D21B8[gPlayerNum], 1.0f, 1.0f);
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008D984.s")
-#endif
void func_8008DC34(void) {
if ((D_80177E7C != 0) && (D_80178750 == 0)) {
@@ -3657,7 +3707,6 @@ void func_8008FE78(Boss* boss) {
gDPSetTextureFilter(gMasterDisp++, G_TF_BILERP);
}
-#ifdef IMPORT_DATA
void func_8008FFF0(Boss* boss, s32 arg1) {
Vec3s D_800D21C8[] = {
{ -385, 54, 233 }, { -324, 148, 193 }, { -267, 186, 136 }, { -128, 430, 180 }, { -231, 584, 140 },
@@ -3704,9 +3753,6 @@ void func_8008FFF0(Boss* boss, s32 arg1) {
break;
}
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008FFF0.s")
-#endif
s32 func_80090200(Boss* boss) {
Vec3f dest, src;
@@ -4475,11 +4521,238 @@ void func_800922F4(Actor* actor) {
}
}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800924E0.s")
+bool func_800924E0(Actor* actor) {
+ Vec3f src;
+ Vec3f dest;
+ f32 var_fv0;
+ bool ret = false;
+
+ if (actor->iwork[7] == 0) {
+ actor->vwork[29].x = actor->obj.rot.x;
+ actor->iwork[7] = 1;
+ actor->iwork[1] = 1;
+ }
+
+ if (actor->fwork[29] < 2.0f) {
+ actor->fwork[29] = 2.0f;
+ }
+
+ var_fv0 = 60.0f;
+
+ if (actor->fwork[19] > 240.0f) {
+ var_fv0 = -50.0f;
+ }
+
+ Math_SmoothStepToF(&actor->fwork[15], var_fv0, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[26], var_fv0, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[16], var_fv0, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[27], var_fv0, 0.3f, 100.0f, 0.0f);
+
+ if (actor->fwork[19] < 180.0f) {
+ actor->obj.pos.y += 2.0f;
+ }
+
+ if (Math_SmoothStepToF(&actor->fwork[19], 360.0f, 0.1f, 5.0f, 0.01f) == 0.0f) {
+ actor->obj.rot.x = actor->vwork[29].x;
+ actor->fwork[19] = actor->vwork[29].x = 0.0f;
+ ret = true;
+ actor->iwork[7] = 0;
+ actor->fwork[29] = 1.0f;
+ }
+
+ if (actor->iwork[7] != 0) {
+ Math_SmoothStepToAngle(&actor->vwork[29].x, 0.0f, 0.1f, 5.0f, 0.0f);
+ Math_SmoothStepToAngle(&actor->obj.rot.z, 0.0f, 0.1f, 5.0f, 0.0f);
+ actor->obj.rot.x = actor->vwork[29].x + (360.0f - actor->fwork[19]);
+
+ Matrix_RotateY(gCalcMatrix, actor->unk_0F4.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, -(M_DTOR * ((actor->unk_0F4.x + actor->vwork[29].x) + actor->fwork[19])), 1);
+
+ src.z = actor->fwork[1];
+ src.y = 0.0f;
+ src.x = 0.0f;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ actor->vel.x = dest.x;
+ actor->vel.y = dest.y;
+ actor->vel.z = dest.z;
+
+ if (actor->obj.pos.y < gGroundLevel + 50.0f) {
+ actor->obj.pos.y = gGroundLevel + 50.0f;
+ actor->vel.y = 0.0f;
+ }
+ }
+
+ return ret;
+}
+
+bool func_800927A0(Actor* actor) {
+ Vec3f src;
+ Vec3f dest;
+ f32 sp54;
+ f32 sp50;
+ bool ret = false;
+
+ if (actor->iwork[11] == 0) {
+ actor->unk_046 = 0;
+ actor->iwork[11] = 1;
+ actor->iwork[1] = 1;
+ actor->vwork[29].x = actor->obj.rot.x;
+ actor->vwork[29].y = actor->obj.rot.y;
+ actor->vwork[29].z = actor->obj.rot.z;
+ } else {
+ Math_SmoothStepToAngle(&actor->vwork[29].z, 0.0f, 0.1f, 5.0f, 0.0f);
+ Math_SmoothStepToAngle(&actor->vwork[29].y, 0.0f, 0.1f, 5.0f, 0.0f);
+ Math_SmoothStepToAngle(&actor->vwork[29].x, 0.0f, 0.1f, 5.0f, 0.0f);
+ sp50 = Math_RadToDeg(Math_Atan2F(0.0f - actor->obj.pos.x, 0.0f - actor->obj.pos.z));
+
+ switch (actor->unk_046) {
+ case 0:
+ if (actor->unk_04A != 0) {
+ actor->timer_0BC = 30;
+ } else {
+ actor->timer_0BC = 10;
+ }
+ actor->unk_046 = 1;
+ if (actor->fwork[19] > 180.0f) {
+ actor->fwork[19] = actor->fwork[19] - 360.0f;
+ }
+
+ case 1:
+ if (actor->timer_0BC == 0) {
+ actor->unk_046 = 2;
+ if (actor->unk_04A != 0) {
+ actor->timer_0BC = 80;
+ } else {
+ actor->timer_0BC = 60;
+ }
+ Math_SmoothStepToF(&actor->fwork[20], 0.0f, 0.1f, 15.0f, 0.0f);
+ }
+ break;
+
+ case 2:
+ if (actor->fwork[19] > 140.0f) {
+ sp54 = 0.0f;
+ } else {
+ sp54 = 60.0f;
+ }
+
+ Math_SmoothStepToF(&actor->fwork[15], sp54, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[26], sp54, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[16], sp54, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[27], sp54, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[19], 190.0f, 0.1f, 6.0f, 0.001f);
+ Math_SmoothStepToF(&actor->fwork[20], 0.0f, 0.1f, 15.0f, 0.0f);
+
+ if (actor->fwork[19] > 180.0f) {
+ actor->unk_0F4.y += 180.0f;
+ if (actor->unk_0F4.y >= 360.0f) {
+ actor->unk_0F4.y = actor->unk_0F4.y - 360.0f;
+ }
+
+ actor->fwork[19] -= 180.0f;
+
+ if ((sp50 - actor->unk_0F4.y) < 180.0f) {
+ actor->fwork[20] = 180.0f;
+ } else {
+ actor->fwork[20] = -180.0f;
+ }
+ actor->iwork[1] = 1;
+ actor->unk_046 = 3;
+ }
+ actor->fwork[28] -= 0.2f;
+ break;
+
+ case 3:
+ if (actor->fwork[29] < 2.0f) {
+ actor->fwork[29] = 2.0f;
+ }
+ Math_SmoothStepToF(&actor->fwork[20], 0.0f, 0.1f, 15.0f, 0.0f);
+
+ sp54 = actor->fwork[20] * 0.3f;
+
+ Math_SmoothStepToF(&actor->fwork[15], sp54, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[26], sp54, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[16], -sp54, 0.3f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&actor->fwork[27], -sp54, 0.3f, 100.0f, 0.0f);
+
+ if (actor->unk_04A != 0) {
+ Math_SmoothStepToAngle(&actor->unk_0F4.y, sp50, 0.1f, 2.0f, 0.0f);
+ }
+
+ if (actor->obj.pos.y < gPlayer[0].unk_0A0) {
+ if (actor->fwork[28] < 0.0f) {
+ actor->fwork[28] = actor->fwork[28] + 0.2f;
+ }
+ } else {
+ actor->fwork[28] -= 0.2f;
+ }
+
+ if (actor->timer_0BC == 0) {
+ ret = true;
+ actor->iwork[11] = 0;
+ actor->unk_046 = 0;
+ actor->fwork[28] = 0.0f;
+ actor->fwork[20] = 0.0f;
+ actor->fwork[29] = 1.0f;
+ }
+ break;
+ }
+
+ actor->obj.rot.x = actor->vwork[29].x - actor->fwork[19];
+ actor->obj.rot.y = actor->unk_0F4.y;
+ actor->obj.rot.z = actor->vwork[29].z + actor->fwork[20];
+ actor->obj.pos.y += actor->fwork[28];
+
+ Matrix_RotateY(gCalcMatrix, actor->unk_0F4.y * 0.017453292f, 0U);
+ Matrix_RotateX(gCalcMatrix, -(M_DTOR * (actor->unk_0F4.x + actor->vwork[29].x + actor->fwork[19])), 1);
+
+ src.z = actor->fwork[1];
+ src.y = 0.0f;
+ src.x = 0.0f;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ actor->vel.x = dest.x;
+ actor->vel.y = dest.y;
+ actor->vel.z = dest.z;
+ }
+ return ret;
+}
+
+void func_80092D48(Actor* actor) {
+ s32 D_800D22A8[] = { 1, 2, 3 };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800927A0.s")
+ if (gCurrentLevel != LEVEL_TITANIA) {
+ actor->fwork[1] = 40.0f;
+ actor->fwork[3] = 1.2f;
+ actor->unk_0E4 = (D_800D1970 & 3) + 1;
+ D_800D1970++;
+ } else {
+ actor->unk_0B8 = 7;
+ actor->unk_0E4 = 2;
+ actor->iwork[5] = 0;
+ gTeamShields[2] = 255;
+ }
+
+ actor->iwork[12] = D_800D22A8[actor->unk_0E4 - 1];
+ actor->iwork[11] = 1;
+
+ if (gLevelType == LEVELTYPE_PLANET) {
+ actor->unk_0C9 = 1;
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80092D48.s")
+ Audio_PlaySfx(0x3100000CU, &actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+
+ if (((D_800D1970 & 3) == 2) && (gCurrentLevel == LEVEL_SECTOR_X)) {
+ Object_Kill(&actor->obj, &actor->sfxPos);
+ }
+
+ if (gTeamShields[actor->unk_0E4] <= 0) {
+ Object_Kill(&actor->obj, &actor->sfxPos);
+ }
+}
void func_80092EC0(Actor* actor) {
f32 var_fv1;
@@ -4520,7 +4793,7 @@ void func_80092EC0(Actor* actor) {
}
if ((actor->iwork[10] != 0) && (gLevelMode == LEVELMODE_ALL_RANGE) && (actor->iwork[9] == 0) &&
- (gPlayer->state_1C8 != PLAYERSTATE_1C8_7)) {
+ (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_7)) {
actor->unk_048 = 2;
actor->unk_04A = 0;
}
@@ -4578,7 +4851,7 @@ void func_80093164(Actor* actor) {
break;
case 41:
- func_801BE034(actor, player);
+ func_i3_801BE034(actor, player);
break;
case 44:
@@ -4624,7 +4897,7 @@ void func_800933D8(f32 x, f32 y, f32 z, f32 arg3) {
Effect* effect = &gEffects[ARRAY_COUNT(gEffects) - 1];
Player* player = gPlayer;
- for (i = 0; i < 100; i++) {
+ for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
if (effect->obj.status == 0) {
Effect_Initialize(effect);
effect->obj.status = 1;
@@ -4668,10 +4941,446 @@ void func_800933D8(f32 x, f32 y, f32 z, f32 arg3) {
}
}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800935E8.s")
+f32 D_800D22B4 = -100.0f;
+f32 D_800D22B8 = 0.01f;
+f32 D_800D22BC = 0.04f;
+f32 D_800D22C0 = 0.05f;
+f32 D_800D22C4 = 260.0f;
+f32 D_800D22C8 = 260.0f;
+f32 D_800D22CC = 260.0f;
+s32 D_800D22D0 = 50;
+s32 D_800D22D4 = 2;
+
+void func_800935E8(Player* player) {
+ Vec3f D_800D22D8[] = { { -1730.0f, 1600.0f, -6690.0f },
+ { -830.0f, 1600.0f, -7380.0f },
+ { 0.0f, 1600.0f, -7380.0f } };
+ Vec3f D_800D22FC[] = { { 0.0f, 0.0f, 0.0f }, { 190.0f, 2570.0f, -4740.0f }, { 0.0f, 0.0f, 0.0f } };
+ Vec3f D_800D2320[] = { { 50.0f, -165.0f, -900.0f }, { -100.0f, -165.0f, -900.0f }, { -100.0f, -165.0f, -850.0f },
+ { -200.0f, -165.0f, -800.0f }, { -200.0f, -165.0f, -750.0f }, { -240.0f, -165.0f, -700.0f },
+ { -240.0f, -165.0f, -650.0f }, { -280.0f, -165.0f, -600.0f }, { -280.0f, -165.0f, -550.0f },
+ { -320.0f, -165.0f, -500.0f }, { -320.0f, -165.0f, -450.0f }, { -360.0f, -165.0f, -400.0f },
+ { -360.0f, -165.0f, -350.0f }, { -400.0f, -165.0f, -300.0f }, { -400.0f, -165.0f, -250.0f },
+ { -440.0f, -165.0f, -200.0f }, { -440.0f, -165.0f, -150.0f }, { -480.0f, -165.0f, -100.0f },
+ { -480.0f, -165.0f, -50.0f }, { -520.0f, -165.0f, 0.0f }, { -520.0f, -165.0f, 50.0f },
+ { -560.0f, -165.0f, 100.0f }, { -560.0f, -165.0f, 150.0f }, { -600.0f, -165.0f, 200.0f },
+ { -600.0f, -165.0f, 250.0f }, { -640.0f, -165.0f, 300.0f }, { -640.0f, -165.0f, 350.0f },
+ { -680.0f, -165.0f, 400.0f }, { -680.0f, -165.0f, 450.0f }, { -720.0f, -165.0f, 500.0f },
+ { -720.0f, -165.0f, 550.0f }, { -50.0f, -165.0f, -900.0f } };
+ Vec3f src, dest;
+ f32 x;
+ f32 y;
+ f32 z;
+ f32 stepSize;
+ f32 temp2;
+ f32 temp;
+ s32 i;
+ s32 j;
+ Actor* actor;
+
+ actor = &gActors[0];
+
+ switch (player->unk_1D0) {
+
+ case 0:
+ func_80093310();
+ D_80177A80 = 0;
+ D_80177AB0 = 1;
+ D_80177AC8 = 1;
+ player->unk_234 = 0;
+ player->unk_1D0 = 1;
+ player->unk_208 = 0;
+ player->unk_0D0 = 0.0f;
+
+ D_80178340 = 255;
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_80178358 = 0;
+
+ player->camEye.x = D_80177978 = -3061.2f;
+ player->camEye.y = D_80177980 = 1745.9f;
+ player->camEye.z = D_80177988 = -5786.0f;
+
+ player->camAt.x = D_801779A0 = 300.0f;
+ player->camAt.y = D_801779B8 = 2200.0f;
+ player->camAt.z = D_801779C0 = -5700.0f;
+
+ D_801616A0.x = 5.18f;
+ D_801616A0.y = 124.17f;
+ D_801616A0.z = 0.00f;
+
+ actor->unk_0F4.y = 30.0f;
+
+ D_80177A48[5] = 14.0f;
+ D_80177A48[0] = 0.2f;
+ D_80177A10[6] = 0;
+ D_80177A10[7] = 0;
+ D_801616B0.x = D_801616B0.y = D_801616B0.z = 0.0f;
+ D_80177A48[7] = 0.0f;
+
+ case 1:
+ if ((player->unk_208 == 0) && (D_80177A80 < 250)) {
+ i = Rand_ZeroOne() * 64.0f;
+ if (i < 32) {
+ for (j = 0; j < 4; j++) {
+ src.x = D_800D2320[i].x;
+ src.y = D_800D2320[i].y + (Rand_ZeroOne() * 12.0f);
+ src.z = D_800D2320[i].z;
+
+ Matrix_Translate(gCalcMatrix, actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 0);
+ Matrix_RotateY(gCalcMatrix, M_DTOR * 30.0f, 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ x = dest.x;
+ y = dest.y;
+ z = dest.z;
+
+ func_800933D8(x, y, z, 20.0f);
+
+ i = (i + 1) % 32;
+ }
+ } else {
+ i -= 32;
+ for (j = 0; j < 4; j++) {
+ src.x = -D_800D2320[i].x;
+ src.y = D_800D2320[i].y + (Rand_ZeroOne() * 12.0f);
+ src.z = D_800D2320[i].z;
+
+ Matrix_Translate(gCalcMatrix, actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 0);
+ Matrix_RotateY(gCalcMatrix, M_DTOR * 30.0f, 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ x = dest.x;
+ y = dest.y;
+ z = dest.z;
+
+ func_800933D8(x, y, z, 20.0f);
+
+ i = (i + 1) % 32;
+ }
+ }
+ player->unk_208 = (s32) (Rand_ZeroOne() * 3.0f) + 1;
+ } else {
+ player->unk_208--;
+ }
+
+ if (D_80177A10[6] < 3) {
+ i = D_80177A10[6];
+ stepSize = D_80177A48[5];
+
+ src.x = D_80177978;
+ src.y = D_80177980;
+ src.z = D_80177988;
+
+ dest.x = D_800D22D8[i].x;
+ dest.y = D_800D22D8[i].y;
+ dest.z = D_800D22D8[i].z;
+
+ if (Math_PursueVec3f(&src, &dest, &D_801616A0, stepSize, 0.4f, 4.8f, stepSize)) {
+ if (D_80177A10[6] == 0) {
+ D_80177A10[7]++;
+ }
+ D_80177A10[6]++;
+ }
+ D_80177978 = src.x;
+ D_80177980 = src.y;
+ D_80177988 = src.z;
+ }
+
+ if (D_80177A10[7] == 1) {
+ i = D_80177A10[7];
+ stepSize = D_80177A48[5];
+
+ src.x = D_801779A0;
+ src.y = D_801779B8;
+ src.z = D_801779C0;
+
+ dest.x = D_800D22FC[i].x;
+ dest.y = D_800D22FC[i].y;
+ dest.z = D_800D22FC[i].z;
+
+ if (D_80177A10[6] <= D_80177A10[7]) {
+ if (Math_PursueVec3f(&src, &dest, &D_801616B0, stepSize, 0.4f, 4.8f, stepSize)) {
+ D_80177A10[7]++;
+ }
+ }
+
+ D_801779A0 = src.x;
+ D_801779B8 = src.y;
+ D_801779C0 = src.z;
+ }
+
+ if (D_80177A80 >= 50) {
+ // clang-format off
+ if (D_80178340 == 255) { player->unk_1D0 = 2; }
+ // clang-format on
+ D_80178348 = D_80178350 = D_80178354 = 255;
+ D_80178358 = 255;
+ Math_SmoothStepToF(&D_80177A48[7], 16.0f, 0.04f, 0.05f, 0.0f);
+ D_8017835C = D_80177A48[7];
+ }
+ break;
+
+ case 2:
+ D_80178380[0] = 0;
+
+ D_80177A10[0] = gLight1R;
+ D_80177A10[1] = gLight1G;
+ D_80177A10[2] = gLight1B;
+ D_80177A10[3] = gAmbientR;
+ D_80177A10[4] = gAmbientG;
+ D_80177A10[5] = gAmbientB;
+
+ gLight1R = 40;
+ gLight1G = 100;
+ gLight1B = 120;
+
+ gAmbientR = 20;
+ gAmbientG = 30;
+ gAmbientB = 50;
+
+ D_80177A48[2] = 0.0f;
+ D_80177A48[3] = -1600.0f;
+ D_80177A48[4] = 520.0f;
+
+ player->unk_1D0 = 3;
+
+ D_80177AB0 = 0;
+
+ player->unk_034 = 60.0f;
+ player->timer_1F8 = 1000;
+
+ player->unk_0E8 = 30.0f;
+
+ player->pos.z = -5100.0f;
+ player->pos.x = -50.0f;
+ player->pos.y = 1200.0f;
+
+ D_80178358 = 0;
+
+ func_i3_801BDF14();
+
+ func_8001D444(0U, 0x2DU, 0U, 0xFFU);
+
+ case 3:
+ D_8017835C = 16;
+
+ if (player->timer_1F8 > 774) {
+ if (D_80177A48[4] >= 200.0f) {
+ Math_SmoothStepToF(&D_80177A48[4], -200.0f, 1.00f, 4.0f, 4.0f);
+ } else {
+ Math_SmoothStepToF(&D_80177A48[4], -200.0f, 0.06f, 4.0f, 0.0f);
+ }
+
+ src.x = D_80177A48[2];
+ src.y = D_80177A48[3];
+ src.z = D_80177A48[4];
+
+ Matrix_Translate(gCalcMatrix, actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 0);
+ Matrix_RotateY(gCalcMatrix, M_DTOR * 30.0f, 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ D_80177978 = dest.x;
+ D_80177980 = dest.y;
+ D_80177988 = dest.z;
+
+ player->camAt.x = D_801779A0 = D_80177978;
+ player->camAt.y = D_801779B8 = D_80177980 + 100.0f;
+ player->camAt.z = D_801779C0 = D_80177988 + 10.0f;
+
+ player->camEye.x = D_80177978;
+ player->camEye.y = D_80177980;
+ player->camEye.z = D_80177988;
+ }
+
+ if (player->timer_1F8 == 774) {
+ Audio_PlaySfx(0x01038026U, &player->unk_460, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_80177A10[9] = 40;
+ }
+
+ if (player->timer_1F8 <= 774) {
+ D_80177A48[0] = 0.0f;
+ temp2 = 0.0f;
+
+ if (D_80177A10[9]) {
+ D_80177A10[9] -= 1;
+ temp = D_80177A10[9];
+ if (temp > 20.0f) {
+ temp = 20.0f;
+ }
+ temp2 = __sinf(M_DTOR * (((f32) gGameFrameCount) * 70.0f)) * temp;
+ }
+
+ player->camEye.y = D_80177980 + temp2;
+ player->camAt.y = D_80177980 + 100.0f;
+
+ Math_SmoothStepToF(&player->unk_018, -1200.0f, 0.02f, 60.0f, 0.0f);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = player->unk_018;
+
+ Matrix_Translate(gCalcMatrix, player->pos.x, player->pos.y, player->pos.z, 0);
+ Matrix_RotateY(gCalcMatrix, M_DTOR * 30.0f, 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ player->pos.x = dest.x;
+ player->pos.y = dest.y;
+ player->pos.z = dest.z;
+
+ if (((player->timer_1F8 % 8) == 0) && (player->timer_1F8 > 740)) {
+ func_8007D9DC(player->camEye.x, 1600.0f, player->camEye.z, 10.0f, 100.0f, 0);
+ }
+
+ if ((player->unk_018 > -200.0f) && (D_80177A10[8] < 6)) {
+ if (D_80177A10[8] < 2) {
+ func_800933D8(player->pos.x, player->pos.y - 400.0f, player->pos.z, 20.0f);
+ }
+ if (D_80177A10[8] >= 2) {
+ func_800933D8(player->pos.x, player->pos.y, player->pos.z, 10.0f);
+ }
+ D_80177A10[8]++;
+ }
+
+ if (((gGameFrameCount % 3) == 0) && (player->timer_1F8 <= 740)) {
+ for (i = 0; i < 8; i++) {
+ func_i3_801AC8A8(player->camEye.x + (Rand_ZeroOne() - 0.5f) * D_800D22C4,
+ player->camEye.y + 260.0f + ((Rand_ZeroOne() - 0.5f) * D_800D22C8),
+ player->camEye.z + (Rand_ZeroOne() - 0.5f) * D_800D22CC, 1.0f, 0);
+ }
+ }
+ }
+
+ if (player->timer_1F8 < 736) {
+ player->unk_1D0 = 4;
+ D_80177AC8 = 1;
+ D_80178348 = D_80178350 = D_80178354 = 255;
+ D_80178358 = 255;
+ }
+ break;
+
+ case 4:
+ if (D_80178340 == 255) {
+ player->unk_1D0 = 5;
+ }
+ break;
+
+ case 5:
+ player->pos.x = 0.0f;
+ player->pos.y = 350.0f;
+ player->pos.z = 0.0f;
+
+ player->camEye.x = player->pos.x * (600.0f / player->unk_09C);
+ player->camEye.y = player->pos.y * (1040.0f / player->unk_0A0);
+ player->camEye.y -= 50.0f;
+
+ player->camAt.x = player->pos.x * (600.0f / player->unk_09C);
+ player->camAt.y = player->pos.y * (1050.0f / player->unk_0A0);
+ player->camAt.y += player->unk_060 * 10.0f;
+
+ player->pos.z += 1000.0f;
+ player->unk_034 = 0.0f;
+
+ D_80177A48[0] = 0.1f;
+
+ player->unk_0E8 = 0.0f;
+ player->unk_0D0 = 20.0f;
+ player->unk_234 = 1;
+ player->unk_1D0 = 6;
+
+ player->timer_1F8 = 1000;
+
+ D_80177AC8 = 0;
+ D_80178358 = 0;
+
+ Object_Kill(&actor->obj, &actor->sfxPos);
+
+ player->camEye.z = D_80177988 = 800.0f;
+ player->camAt.z = D_801779C0 = 0.0f;
+
+ case 6:
+ player->unk_060 = __sinf(M_DTOR * (player->unk_0F4 * 0.7f)) * 0.5f;
+ player->unk_088 += 10.0f;
+ player->unk_0F4 += 8.0f;
+ player->unk_080 = -__sinf(M_DTOR * player->unk_088) * 0.5f;
+ player->unk_0F0 = __sinf(M_DTOR * player->unk_0F4) * 1.5f;
+
+ D_80177978 = player->pos.x * (600.0f / player->unk_09C);
+ D_80177980 = player->pos.y * (740.0f / player->unk_0A0);
+ D_80177980 -= -50.0f;
+
+ D_801779A0 = player->pos.x * (600.0f / player->unk_09C);
+ D_801779B8 = player->pos.y * (750.0f / player->unk_0A0);
+ D_801779B8 += player->unk_060 * 10.0f;
+
+ Math_SmoothStepToF(&player->pos.z, 0.0f, 0.1f, 40.0f, 0.1f);
+
+ D_80177A48[0] = 0.03f;
+ D_80177988 = 240.0f;
+ D_801779C0 = player->pos.z + (D_80177D20 - 1.0f);
+
+ if (((player->timer_1F8 % 2) == 0) && (player->timer_1F8 > 962)) {
+ func_800933D8(player->pos.x, player->pos.y, player->pos.z + 50.0f, 20.0f);
+ }
+
+ if (player->timer_1F8 <= 900) {
+ D_80177838 = 50;
+
+ player->state_1C8 = PLAYERSTATE_1C8_3;
+ player->unk_1D0 = 0;
+ player->timer_1F8 = 0;
+
+ D_80178488 = 1;
+ func_800182F4(0x103200FF);
+ func_800182F4(0x113200FF);
+ func_8001D444(0U, 0xEU, 0U, 0xFFU);
+ }
+
+ func_i3_801AC8A8(player->pos.x + (Rand_ZeroOne() - 0.5f) * 10.0f,
+ player->pos.y + (Rand_ZeroOne() - 0.5f) * 10.0f,
+ player->pos.z - 65.0f + (Rand_ZeroOne() - 0.5f) * 10.0f, 0.4f, 1);
+ break;
+
+ default:
+ break;
+ }
+
+ Matrix_RotateY(gCalcMatrix, M_DTOR * (player->unk_0E8 + player->unk_114 + 180.0f), 0);
+ Matrix_RotateX(gCalcMatrix, -(M_DTOR * player->unk_0E4), 1);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = player->unk_0D0;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ player->vel.x = dest.x;
+ player->vel.y = dest.y;
+ player->vel.z = dest.z;
+
+ player->pos.x += player->vel.x;
+ player->pos.y += player->vel.y;
+ D_80177CE8 -= player->vel.z;
+
+ player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
+
+ Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], 50000.0f, 0.0f);
+}
+
+// unused data
+s32 D_800D24A0[] = { 60, 200 };
+f32 D_800D24A8[] = { 0.0f, 10.0f, 20.0f, 5.0f, 7.0f, 13.0f };
+f32 D_800D24C0[] = { 128.0f, 128.0f, 255.0f, 128.0f };
+s32 D_800D24C8[] = { 0, 900 };
+f32 D_800D24CC = 0.02f;
+// 60, 200, 0,
void func_80094954(Effect* effect) {
- Player* player = gPlayer;
+ Player* player = &gPlayer[0];
if ((player->state_1C8 == PLAYERSTATE_1C8_2) && (gCurrentLevel == LEVEL_AQUAS) && (player->unk_1D0 < 2)) {
switch (effect->unk_4E) {
@@ -4747,7 +5456,139 @@ void stub_80094D10(void) {
void stub_80094D18(void) {
}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80094D20.s")
+void func_80094D20(f32 x, f32 y) {
+ u8* D_800D24DC[] = { D_5009F60, D_500A050, D_500A140, D_500A230, D_500A320,
+ D_500A410, D_500A500, D_500A5F0, D_500A6E0, D_500A7D0 };
+ s32 D_800D2504[] = { 100, 10, 1 };
+ bool boolTemp;
+ s32 i;
+ s32 j;
+ s32 temp;
+ s32 temp2;
+ s32 temp3;
+ s32 temp4;
+ f32 x1;
+ f32 y1;
+ f32 xScale;
+
+ if (gHitCount > D_8016172C) {
+ temp3 = D_8016172C + 1;
+ temp4 = D_8016172C;
+ } else {
+ temp3 = gHitCount;
+ temp4 = D_8016172C;
+ }
+
+ boolTemp = 0;
+ i = 1000;
+ temp3 %= i;
+ temp4 %= i;
+
+ for (i /= 10, j = 0; i != 1; i /= 10, j++) {
+ xScale = 1.0f;
+ x1 = x;
+ y1 = y + 3.0f;
+
+ temp = temp3 / i;
+ temp2 = temp4 / i;
+
+ if ((temp != 0) || (boolTemp == 1)) {
+ if (temp != temp2) {
+ D_80161720[j] += 0.4f;
+ if (D_80161720[j] <= 0.9f) {
+ xScale = D_80161720[j];
+ x1 += 8.0f * xScale;
+ xScale = 1.0f - xScale;
+ }
+
+ if ((D_80161720[j] > 0.9f) && (D_80161720[j] < 1.1f)) {
+ xScale = 0.0f;
+ }
+
+ if (D_80161720[j] >= 2.0f) {
+ temp2++;
+ if (temp2 >= 10) {
+ temp2 = 0;
+ }
+ D_80161720[j] = 0.0f;
+ }
+
+ if ((D_80161720[j] < 2.0f) && (D_80161720[j] >= 1.1f)) {
+ temp2++;
+ if (temp2 >= 10) {
+ temp2 = 0;
+ }
+ xScale = 2.0f - D_80161720[j];
+ x1 += 8.0f * xScale;
+ xScale = 1.0f - xScale;
+ }
+ temp = temp2;
+ }
+
+ if (xScale != 0.0f) {
+ TextureRect_8bIA(&gMasterDisp, D_800D24DC[temp], 16, 15, x1, y1, xScale, 1.0f);
+ }
+ boolTemp = 1;
+ }
+
+ if ((!boolTemp) && (xScale != 0.0f)) {
+ TextureRect_8bIA(&gMasterDisp, D_800D24DC[0], 16, 15, x1, y1, xScale, 1.0f);
+ }
+
+ x += 13.0f;
+ temp3 %= i;
+ temp4 %= i;
+ }
+
+ xScale = 1.0f;
+ x1 = x;
+ y1 = y + 3.0f;
+
+ if (temp3 != temp4) {
+ D_80161720[j] += 0.4f;
+ if (D_80161720[j] <= 0.9f) {
+ xScale = D_80161720[j];
+ x1 += 8.0f * xScale;
+ xScale = 1.0f - xScale;
+ }
+
+ if ((D_80161720[j] > 0.9f) && (D_80161720[j] < 1.1f)) {
+ xScale = 0.0f;
+ }
+
+ if (D_80161720[j] >= 2.0f) {
+ temp4++;
+ if (temp4 >= 10) {
+ temp4 = 0;
+ }
+ D_80161720[j] = 0.0f;
+ }
+
+ if ((D_80161720[j] < 2.0f) && (D_80161720[j] >= 1.1f)) {
+ temp4++;
+ if (temp4 >= 10) {
+ temp4 = 0;
+ }
+ xScale = 2.0f - D_80161720[j];
+ x1 += 8.0f * xScale;
+ xScale = 1.0f - xScale;
+ }
+ temp3 = temp4;
+ }
+
+ if (xScale != 0.0f) {
+ TextureRect_8bIA(&gMasterDisp, D_800D24DC[temp3], 16, 15, x1, y1, xScale, 1.0f);
+ }
+
+ if ((gHitCount != D_8016172C) && (D_80161720[0] == 0.0f) && (D_80161720[1] == 0.0f) && (D_80161720[2] == 0.0f)) {
+ D_8016172C++;
+
+ if ((D_8016172C == 4) || (D_8016172C == 9) || (D_8016172C == 14) || (D_8016172C == 19) || (D_8016172C == 24) ||
+ (D_8016172C == 29)) {
+ D_80161A62 = D_8016172C;
+ }
+ }
+}
void func_80095350(Actor* actor) {
Actor_Initialize(actor);
@@ -4757,7 +5598,6 @@ void func_80095350(Actor* actor) {
Object_SetInfo(&actor->info, actor->obj.id);
}
-#ifdef IMPORT_DATA
void func_800953A0(Actor* actor, s32 arg1) {
Vec3f D_800D2510[] = {
{ 1800.0f, 0.0f, -4000.0f },
@@ -4774,11 +5614,7 @@ void func_800953A0(Actor* actor, s32 arg1) {
actor->unk_0B6 = 45;
Object_SetInfo(&actor->info, actor->obj.id);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800953A0.s")
-#endif
-#ifdef IMPORT_DATA
void func_8009546C(Actor* actor, s32 arg1) {
Vec3f D_800D2540[] = {
{ 1300.0f, 0.0f, -2000.0f }, { -1000.0f, 0.0f, -3000.0f }, { 800.0f, 0.0f, 0.0f },
@@ -4793,11 +5629,7 @@ void func_8009546C(Actor* actor, s32 arg1) {
actor->unk_0B6 = 46;
Object_SetInfo(&actor->info, actor->obj.id);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8009546C.s")
-#endif
-#ifdef IMPORT_DATA
void func_80095538(Actor* actor, s32 arg1) {
Vec3f D_800D257C[] = {
{ 0.0f, 0.0f, -200.0f }, { -300.0f, 0.0f, -700.0f }, { 400.0f, 0.0f, -900.0f },
@@ -4812,10 +5644,572 @@ void func_80095538(Actor* actor, s32 arg1) {
actor->unk_0B6 = 47;
Object_SetInfo(&actor->info, actor->obj.id);
}
-#else
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80095538.s")
-#endif
+void func_80095604(Player* player) {
+ s32 i;
+ s32 j;
+ Actor* actor;
+ f32 x;
+ f32 y;
+ f32 z;
+ f32 x1;
+ f32 y1;
+ f32 z1;
+ s32 pad;
+ Vec3f src;
+ Vec3f dest;
+ s32 shield;
+
+ actor = &gActors[0];
+
+ switch (player->unk_1D0) {
+ case 0:
+ D_80177A80 = 0;
+ player->unk_280 = 0;
+ player->unk_1D0 = 1;
+
+ D_80177A48[1] = gBosses[0].obj.pos.x;
+ D_80177A48[2] = gBosses[0].obj.pos.y;
+ D_80177A48[3] = gBosses[0].obj.pos.z;
+ D_80177A48[4] = 0.0f;
+ D_80177A48[5] = 0.0f;
+ D_80177A48[6] = 0.05f;
+
+ D_80177A48[7] = 0.0f;
+ D_80177A48[8] = 0.0f;
+ D_80177A48[9] = 0.0f;
+ D_80177A48[0] = 0.0f;
+
+ case 1:
+ if (D_80177A80 > 240) {
+ D_80178348 = D_80178350 = D_80178354 = 255;
+ D_80178358 = 255;
+ D_8017835C = 16;
+ if (D_80177A80 == 280) {
+ player->unk_1D0 = 10;
+ }
+ }
+
+ if ((D_80177A80 >= 30) && (D_80177A80 < 90)) {
+ D_80177A48[5] -= 0.6f;
+ if ((D_80177A48[5]) < 0.0f) {
+ D_80177A48[5] += 360.0f;
+ }
+ if ((D_80177A48[5]) > 360.0f) {
+ D_80177A48[5] -= 360.0f;
+ }
+ src.x = 1000.0f;
+ src.y = 300.0f;
+ src.z = 1000.0f;
+
+ Matrix_Translate(gCalcMatrix, D_80177A48[1], D_80177A48[2], D_80177A48[3], 0);
+ Matrix_RotateY(gCalcMatrix, -(M_DTOR * D_80177A48[5]), 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+ }
+
+ if (D_80177A80 < 30) {
+ dest.x = gBosses[0].obj.pos.x;
+ dest.y = player->pos.y;
+ dest.z = gBosses[0].obj.pos.z + 1000.0f;
+ }
+ if (D_80177A80 >= 90) {
+ dest.x = player->camEye.x;
+ dest.y = player->camEye.y;
+ dest.z = player->camEye.z + 200.0f - D_80177D20;
+ }
+
+ Math_SmoothStepToAngle(&player->unk_130, 0.0f, 0.05f, 1.2f, 0.0001f);
+ Math_SmoothStepToAngle(&player->unk_12C, 0.0f, 0.05f, 1.2f, 0.0001f);
+ Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 3.0f, 0.0f);
+ Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 20.0f, 0.0f);
+
+ x = player->pos.x - dest.x;
+ y = player->pos.y - dest.y;
+ z = player->pos.z - dest.z;
+
+ y1 = Math_RadToDeg(Math_Atan2F(x, z));
+ z = sqrtf(SQ(x) + SQ(z));
+ x1 = Math_RadToDeg(-Math_Atan2F(y, z));
+
+ if ((x1 + 40.0f) >= 360.0f) {
+ x1 -= 360.0f;
+ }
+ if (x1 > 180.0f) {
+ x1 = 0.0f;
+ }
+
+ z1 = Math_SmoothStepToAngle(&player->unk_0E8, y1, 0.5f, 2.0f, 0.0001f) * 30.0f;
+ Math_SmoothStepToAngle(&player->unk_0E4, x1, 0.5f, 2.0f, 0.0001f);
+ Math_SmoothStepToAngle(&player->unk_0EC, z1, 0.1f, 5.0f, 0.0001f);
+
+ Math_SmoothStepToAngle(&D_80177A48[4], 30.0f, 0.05f, 1.0f, 0.001f);
+ Math_SmoothStepToF(&D_80177A48[8], 600.0f, 0.05f, 1000.0f, 0.001f);
+ Math_SmoothStepToF(&D_80177A48[9], 2400.0f, 0.05f, 1000.0f, 0.001f);
+
+ src.x = 0.0f;
+ src.y = D_80177A48[8];
+ src.z = D_80177A48[9];
+
+ Matrix_Translate(gCalcMatrix, gBosses[0].obj.pos.x, gBosses[0].obj.pos.y, gBosses[0].obj.pos.z + D_80177D20,
+ 0);
+ Matrix_RotateY(gCalcMatrix, -(M_DTOR * D_80177A48[4]), 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ Math_SmoothStepToF(&D_80177978, dest.x, 0.02f, player->unk_0D0, 0.001f);
+ Math_SmoothStepToF(&D_80177980, dest.y, 0.02f, player->unk_0D0, 0.001f);
+ Math_SmoothStepToF(&D_80177988, dest.z, 0.02f, player->unk_0D0, 0.001f);
+
+ player->camEye.x = D_80177978;
+ player->camEye.y = D_80177980;
+ player->camEye.z = D_80177988;
+
+ if (D_80177A80 < 200) {
+ Math_SmoothStepToF(&D_801779A0, gBosses[0].obj.pos.x, 0.03f, 100.0f, 0.001f);
+ Math_SmoothStepToF(&D_801779B8, gBosses[0].obj.pos.y, 0.03f, 100.0f, 0.001f);
+ Math_SmoothStepToF(&D_801779C0, gBosses[0].obj.pos.z + 600.0f + D_80177D20, 0.03f, 100.0f, 0.001f);
+ } else {
+ Math_SmoothStepToF(&D_801779A0, player->pos.x, D_80177A48[6], 1000.0f, 0.001f);
+ Math_SmoothStepToF(&D_801779B8, player->pos.y, D_80177A48[6], 1000.0f, 0.001f);
+ Math_SmoothStepToF(&D_801779C0, player->pos.z + D_80177D20, D_80177A48[6], 1000.0f, 0.001f);
+ if (D_80177A80 > 180) {
+ D_80177A48[6] += 0.005f;
+ } else {
+ D_80177A48[6] += 0.005f;
+ }
+ }
+
+ player->camAt.x = D_801779A0;
+ player->camAt.y = D_801779B8;
+ player->camAt.z = D_801779C0;
+
+ D_80177A48[0] = 0.0f;
+ break;
+
+ case 10:
+ player->unk_234 = 1;
+ D_80177AC8 = 2;
+ player->unk_1D0 = 11;
+
+ player->unk_0F8 = player->unk_0EC = player->unk_12C = player->unk_130 = 0.0f;
+ player->vel.x = player->vel.y = player->vel.z = 0.0f;
+ player->unk_0E4 = player->unk_0E8 = player->unk_0EC = 0.0f;
+ player->unk_110 = player->unk_114 = 0.0f;
+ player->unk_0D0 = 3.6f;
+ player->unk_138 = player->pos.z = 0.0f;
+ player->pos.y = 100.0f;
+ player->pos.x = -100.0f;
+ player->unk_280 = 0;
+ player->unk_17C = player->unk_180 = 0.0f;
+
+ D_8015F974 = D_8015F978 = D_8015F97C = 255;
+ D_8015F980 = 0;
+
+ gLight1R = 40;
+ gLight1G = 100;
+ gLight1B = 120;
+
+ gAmbientR = 20;
+ gAmbientG = 30;
+ gAmbientB = 50;
+
+ func_800A6148();
+
+ player->unk_144 = D_80177D20 = 0;
+
+ j = 0;
+ func_80095350(actor);
+ j++;
+
+ for (i = 0; i < 6; i++, j++) {
+ func_80095538(&gActors[j], i);
+ }
+
+ for (i = 0; i < 5; i++, j++) {
+ func_8009546C(&gActors[j], i);
+ }
+
+ for (i = 0; i < 4; i++, j++) {
+ func_800953A0(&gActors[j], i);
+ }
+
+ player->pos.z -= D_80177D20;
+ player->unk_138 = player->pos.z;
+
+ actor->fwork[1] = 0.0f;
+ actor->fwork[2] = 600.0f;
+ actor->fwork[3] = 2600.0f;
+ actor->fwork[7] = 0.5f;
+
+ actor->unk_0F4.y = 130.0f;
+
+ src.x = actor->fwork[1];
+ src.y = actor->fwork[2];
+ src.z = actor->fwork[3];
+
+ Matrix_Translate(gCalcMatrix, player->pos.x, player->pos.y, player->unk_138 + D_80177D20, 0);
+ Matrix_RotateY(gCalcMatrix, -(M_DTOR * actor->unk_0F4.y), 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ player->camAt.x = D_801779A0 = player->pos.x;
+ player->camAt.y = D_801779B8 = player->pos.y;
+ player->camAt.z = D_801779C0 = player->pos.z - 50.0f + D_80177D20;
+
+ player->camEye.x = D_80177978 = dest.x;
+ player->camEye.y = D_80177980 = dest.y;
+ player->camEye.z = D_80177988 = dest.z;
+
+ D_80177A48[0] = 1.0f;
+
+ case 11:
+ D_80178348 = D_80178350 = D_80178354 = 255;
+ D_80178358 = 0;
+ D_8017835C = 8;
+
+ if (D_80178340 == 0) {
+ player->unk_1D0 = 12;
+ }
+
+ case 12:
+ if ((D_80177A80 >= 380) && (D_80177A80 < 640 + 280)) {
+ Math_SmoothStepToF(&actor->fwork[2], 0.0f, 0.02f, 1000.0f, 0.001f);
+ Math_SmoothStepToF(&actor->fwork[3], 300.0f, 0.02f, 1000.0f, 0.001f);
+ }
+ if (D_80177A80 >= 920) {
+ Math_SmoothStepToF(&actor->fwork[3], 200.0f, 0.02f, 1000.0f, 0.001f);
+ }
+ if (D_80177A80 >= 1120) {
+ Math_SmoothStepToF(&actor->fwork[7], 0.1f, 0.05f, 1000.0f, 0.001f);
+ }
+ if (D_80177A80 >= 1200) {
+ Math_SmoothStepToF(&actor->fwork[3], 800.0f, 0.02f, 1000.0f, 0.001f);
+ Math_SmoothStepToF(&player->unk_0D0, 5.0f, 0.1f, 1000.0f, 0.001f);
+ } else {
+ actor->fwork[4] = player->pos.x;
+ actor->fwork[5] = player->pos.y;
+ actor->fwork[6] = player->unk_138 + D_80177D20;
+ }
+
+ if (D_80177A80 < 1200) {
+ D_801779A0 = player->pos.x;
+ D_801779B8 = player->pos.y;
+ D_801779C0 = player->pos.z - 50.0f + D_80177D20;
+ } else {
+ D_801779A0 = player->pos.x;
+ D_801779B8 = player->pos.y + 10.0f;
+ D_801779C0 = player->pos.z - 50.0f + D_80177D20;
+ }
+ D_80177A48[0] = 0.05f;
+
+ actor->unk_0F4.y += actor->fwork[7];
+ if ((actor->unk_0F4.y) < 0.0f) {
+ actor->unk_0F4.y += 360.0f;
+ }
+ if ((actor->unk_0F4.y) > 360.0f) {
+ actor->unk_0F4.y -= 360.0f;
+ }
+
+ src.x = actor->fwork[1];
+ src.y = actor->fwork[2];
+ src.z = actor->fwork[3];
+
+ Matrix_Translate(gCalcMatrix, actor->fwork[4], actor->fwork[5], actor->fwork[6], 0);
+ Matrix_RotateY(gCalcMatrix, -(M_DTOR * actor->unk_0F4.y), 1);
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ D_80177978 = dest.x;
+ D_80177980 = dest.y;
+ D_80177988 = dest.z;
+
+ if (D_80177A80 >= 1360) {
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_80178358 = 255;
+ D_8017835C = 16;
+
+ if (D_80178340 == 255) {
+ D_800D3180[13] = Play_CheckMedalStatus(150) + 1;
+ player->state_1C8 = PLAYERSTATE_1C8_6;
+ player->timer_1F8 = 0;
+ func_8001DBD0(10);
+ D_8017837C = 4;
+ }
+ }
+
+ if (D_80177A80 == 1310) {
+ func_800182F4(0x105000FF);
+ func_800182F4(0x115000FF);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ switch (D_80177A80) {
+ case 300:
+ func_800BA808(gMsg_ID_15200, RCID_FOX);
+ break;
+
+ case 400:
+ func_8001D444(0U, 0x26U, 0U, 0xFFU);
+ break;
+
+ case 440:
+ D_80177840 = 100;
+ break;
+
+ case 520:
+ func_800BA808(gMsg_ID_15253, RCID_FOX);
+ break;
+
+ case 600:
+ shield = gTeamShields[3];
+ gTeamShields[3] = 1;
+ func_800BA808(gMsg_ID_15210, RCID_PEPPY);
+ gTeamShields[3] = shield;
+ break;
+
+ case 680:
+ shield = gTeamShields[2];
+ gTeamShields[2] = 1;
+ func_800BA808(gMsg_ID_15220, RCID_SLIPPY);
+ gTeamShields[2] = shield;
+ break;
+
+ case 760:
+ shield = gTeamShields[1];
+ gTeamShields[1] = 1;
+ func_800BA808(gMsg_ID_15230, RCID_FALCO);
+ gTeamShields[1] = shield;
+ break;
+
+ case 840:
+ shield = gTeamShields[2];
+ gTeamShields[2] = 1;
+ func_800BA808(gMsg_ID_15240, RCID_SLIPPY);
+ gTeamShields[2] = shield;
+ break;
+
+ case 1000:
+ D_80177830 = 1;
+ break;
+
+ case 1200:
+ D_80177830 = 0;
+ break;
+ }
+
+ Matrix_RotateY(gCalcMatrix, M_DTOR * (player->unk_0E8 + player->unk_114 + 180.0f), 0);
+ Matrix_RotateX(gCalcMatrix, -(M_DTOR * player->unk_0E4), 1);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = player->unk_0D0;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ player->vel.x = dest.x;
+ player->vel.y = dest.y;
+ player->vel.z = dest.z;
+
+ player->pos.x += player->vel.x;
+ player->pos.y += player->vel.y;
+ player->pos.z += player->vel.z;
+
+ player->unk_138 = player->pos.z;
+
+ player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
+
+ player->unk_060 = __sinf(M_DTOR * (player->unk_0F4 * 0.7f)) * 0.5f;
+ player->unk_088 += 10.0f;
+ player->unk_0F4 += 8.0f;
+ player->unk_080 = -__sinf(M_DTOR * player->unk_088) * 0.5f;
+ player->unk_0F0 = __sinf(M_DTOR * player->unk_0F4) * 1.5f;
+
+ if (player->unk_234) {
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = -70.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+ func_i3_801AC8A8(player->pos.x + dest.x + (Rand_ZeroOne() - 0.5f) * 10.0f,
+ player->pos.y + dest.y + (Rand_ZeroOne() - 0.5f) * 10.0f,
+ player->pos.z + dest.z + (Rand_ZeroOne() - 0.5f) * 10.0f, 0.4f, 1);
+ }
+
+ player->unk_178 += 20.0f;
+
+ Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], 50000.0f, 0.001f);
+ Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], 50000.0f, 0.001f);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], 50000.0f, 0.001f);
+ Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[0], 50000.0f, 0.001f);
+ Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], 50000.0f, 0.001f);
+ Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], 50000.0f, 0.001f);
+}
+
+void func_80096A74(Player* player) {
+ Vec3f src, dest;
+ s32 button;
+
+ switch (player->unk_1D0) {
+ case 0:
+ player->pos.y += 3400.0f;
+ player->unk_0E4 = 270.0f;
+ gPlayer[0].unk_0D0 = 0.0f;
+
+ D_80177A48[1] = 100.0f;
+ D_80177A48[2] = 0.0f;
+ D_80177A48[0] = 0.2f;
+ D_80177A80 = 0;
+ player->unk_1D0 = 1;
+ D_80178340 = D_80178358 = 255;
+
+ player->camEye.x = D_80177978 = 0.0f;
+ player->camEye.y = D_80177980 = player->pos.y + D_80177A48[1];
+ player->camEye.z = D_80177988 = 0.0f;
+
+ player->camAt.x = D_801779A0 = 0.0f;
+ player->camAt.y = D_801779B8 = 0.0f;
+ player->camAt.z = D_801779C0 = 0.0f;
+
+ D_80177A48[0] = 1.0f;
+ D_80177A48[2] = 0.0f;
+ D_80177A48[4] = 0.0f;
+
+ case 1:
+ if (D_80177A80 < 30) {
+ break;
+ }
+
+ if ((D_80177A80 >= 40) && (D_80178340 != 0)) {
+ D_80178358 = 0;
+ D_8017835C = 8;
+ }
+
+ if (D_80177A80 < 140) {
+ Math_SmoothStepToF(&D_80177A48[1], 800.0f, 0.2f, 10.0f, 0.0f);
+ if (D_80177A80 > 60) {
+ Math_SmoothStepToF(&D_80177A48[4], 3.0f, 0.05f, 1000.0f, 0.001f);
+ }
+ player->unk_034 += D_80177A48[4];
+ if (player->unk_034 >= 360.0f) {
+ player->unk_034 -= 360.0f;
+ }
+ if (player->unk_034 < 0.0f) {
+ player->unk_034 += 360.0f;
+ }
+ }
+
+ if (D_80177A80 >= 140) {
+ Math_SmoothStepToAngle(&player->unk_034, 0.0f, 0.05f, 3.0f, 0.001f);
+ Math_SmoothStepToF(&D_80177A48[1], 200.0f, 0.2f, 6.0f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[2], 200.0f, 0.2f, 6.0f, 0.0f);
+ D_80177A48[0] = 0.2f;
+ }
+
+ D_80177978 = player->pos.x;
+ D_80177980 = player->pos.y + D_80177A48[1];
+ D_80177988 = player->pos.z + D_80177A48[2];
+
+ D_801779A0 = player->pos.x;
+ D_801779B8 = player->pos.y;
+ D_801779C0 = player->pos.z;
+
+ if (D_80177A80 == 270) {
+ player->unk_190 = player->unk_194 = 10.0f;
+ player->unk_1D0 = 2;
+ D_80177A48[1] = 400.0f;
+ Audio_PlaySfx(0x09004002U, &player->unk_460, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ break;
+
+ case 2:
+ D_80177A48[0] = 0.12f;
+
+ Math_SmoothStepToAngle(&player->unk_034, 0.0f, 0.05f, 3.0f, 0.001f);
+ Math_SmoothStepToF(&D_80177A48[1], (player->pos.y * player->unk_148 + 50.0f), 0.2f, 10.0f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[2], 400.0f, 0.2f, 6.0f, 0.0f);
+ Math_SmoothStepToF(&player->pos.y, 350.0f, 0.1f, 40.0f, 0.0f);
+
+ button = gControllerHold[player->num].button;
+ gControllerHold[player->num].button = gBoostButton[player->num];
+ player->unk_2BC = 1;
+ player->timer_1F8 = 60;
+
+ func_800B2574(player);
+
+ D_80137E84[0] = 0;
+ gControllerHold[player->num].button = button;
+
+ D_80177978 = player->pos.x;
+ D_80177980 = (player->pos.y * player->unk_148 + 50.0f);
+ D_80177988 = D_80177A48[2];
+
+ D_801779A0 = player->pos.x;
+ D_801779B8 = (player->pos.y * player->unk_148 + 20.0f);
+ D_801779C0 = player->pos.z;
+
+ if (D_80177A80 == 300) {
+ D_80177CE8 = 0;
+ D_80177838 = 50;
+ player->state_1C8 = PLAYERSTATE_1C8_3;
+ player->unk_0D0 = D_80161A54;
+ player->unk_1D0 = 0;
+ player->timer_1F8 = 0;
+ player->unk_014 = 0.0f;
+ player->unk_018 = 0.0f;
+ player->unk_034 = 0.0f;
+ D_80178488 = 1;
+ }
+ break;
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80095604.s")
+ if (D_80177A80 >= 30) {
+ Math_SmoothStepToF(&player->unk_0D0, 30.0f, 0.05f, 1000.0f, 0.001f);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80096A74.s")
+ if (D_80177A80 < 110) {
+ player->unk_0EC += (D_80177A48[4] * 2.0f);
+ if (player->unk_0EC >= 360.0f) {
+ player->unk_0EC -= 360.0f;
+ }
+ if (player->unk_0EC < 0.0f) {
+ player->unk_0EC += 360.0f;
+ }
+ } else {
+ Math_SmoothStepToAngle(&player->unk_0EC, 0.0f, 0.4f, (D_80177A48[4] * 2.0f), 1.0f);
+ if (player->unk_0EC == 0.0f) {
+ if (player->unk_0E4 != 0.0f) {
+ Math_SmoothStepToAngle(&player->unk_0E4, 0.0f, 0.1f, 2.4f, 0.001f);
+ } else {
+ player->unk_088 += 10.0f;
+ player->unk_080 = -__sinf(M_DTOR * (player->unk_088)) * 0.5f;
+ player->unk_0F4 += 3.0f;
+ player->unk_0F0 = __sinf(M_DTOR * (player->unk_0F4)) * 1.5f;
+ }
+ }
+ }
+
+ Matrix_RotateY(gCalcMatrix, M_DTOR * (player->unk_0E8 + player->unk_114 + 180.0f), 0);
+ Matrix_RotateX(gCalcMatrix, -(M_DTOR * (player->unk_0E4)), 1);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = player->unk_0D0;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ player->vel.x = dest.x;
+ player->vel.z = dest.z;
+ player->vel.y = dest.y;
+
+ player->pos.x += player->vel.x;
+ player->pos.y += player->vel.y;
+ D_80177CE8 += player->vel.z;
+
+ player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
+ }
+
+ Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], 50000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], 50000.0f, 0.0f);
+}
diff --git a/src/main/fox_play.c b/src/main/fox_play.c
index 88ce4158..5176cb02 100644
--- a/src/main/fox_play.c
+++ b/src/main/fox_play.c
@@ -4123,9 +4123,9 @@ void func_800B0F50(Player* playerx) {
}
gHitCount = gSavedHitCount = D_80177CA4;
}
- D_80161720 = 0.0f;
- D_80161724 = 0.0f;
- D_80161728 = 0.0f;
+ D_80161720[0] = 0.0f;
+ D_80161720[1] = 0.0f;
+ D_80161720[2] = 0.0f;
D_8016172C = gHitCount;
D_80161730 = 0;
D_80161684 = D_80161A50;
@@ -4328,9 +4328,9 @@ void func_800B0F50(Player* playerx) {
gBombCount[gPlayerNum] = 3;
D_80177B8C = 1;
if (gCamCount == (gPlayerNum + 1)) {
- D_80161720 = 0.0f;
- D_80161724 = 0.0f;
- D_80161728 = 0.0f;
+ D_80161720[0] = 0.0f;
+ D_80161720[1] = 0.0f;
+ D_80161720[2] = 0.0f;
D_8016172C = 0;
gHitCount = 0;
D_80177824 = 0;
diff --git a/src/overlays/ovl_i2/fox_me.c b/src/overlays/ovl_i2/fox_me.c
index c6642b21..2ac15a15 100644
--- a/src/overlays/ovl_i2/fox_me.c
+++ b/src/overlays/ovl_i2/fox_me.c
@@ -1,97 +1,2527 @@
-#include "common.h"
+#include "global.h"
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187530.s")
+extern s32 D_800C9E90[];
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018756C.s")
+extern Gfx D_6001310[];
+extern Gfx D_600CD60[];
+extern Gfx D_6016240[];
+extern Gfx D_6017AD0[];
+extern Gfx D_60236F0[];
+extern Gfx D_6023810[];
+extern Gfx D_6024AD0[];
+extern Gfx D_60240B0[];
+extern Gfx D_60263F0[];
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187650.s")
+Vec3f D_i2_80195430[] = {
+ { 122.0, -5.0, -1200.0 }, { 122.0, -103.0, -727.0 }, { 142.0, -323.0, -848.0 }, { 362.0, -59.0, -435.0 },
+ { 692.0, -84.0, -308.0 }, { 1000.0, -7.0, -308.0 }, { 164.0, -700.0, -308.0 }, { 263.0, -370.0, -11.0 },
+ { 307.0, -95.0, 36.0 }, { 307.0, -95.0, 36.0 }, { -122.0, -5.0, -1200.0 }, { -122.0, -103.0, -727.0 },
+ { -142.0, -323.0, -848.0 }, { -362.0, -59.0, -435.0 }, { -692.0, -84.0, -308.0 }, { -1000.0, -7.0, -308.0 },
+ { -164.0, -700.0, -308.0 }, { -263.0, -370.0, -11.0 }, { -307.0, -95.0, 36.0 }, { -307.0, -95.0, 36.0 },
+};
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_801877C4.s")
+s32 D_i2_80195520[] = { 80, 70, 60, 50, 0 };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018795C.s")
+f32 D_i2_80195534[] = { 0.15f, 0.45f, 0.75f, 1.3f, 0.75f, 0.45f, 0.15f, 0.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187B08.s")
+f32 D_i2_80195554[] = { 101.0f, 96.0f, 85.0f, 80.0f, 69.0f, 64.0f, 53.0f, 48.0f, 37.0f, 32.0f, 21.0f, 16.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187C68.s")
+f32 D_i2_80195584[] = { 180.0f, -180.0f, 0.0f, -1500.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187D08.s")
+f32 D_i2_80195594[] = { 50.0f, 100.0f, -50.0f, 0.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187D98.s")
+f32 D_i2_801955A4[] = { 240.0f, 480.0f, 720.0f, -5000.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187E38.s")
+s32 D_i2_801955B4[] = { 0, 0, 0, 1 };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80187FF8.s")
+Vec3f D_i2_801955C4 = { 0.0f, 0.0f, 100.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188088.s")
+Vec3f D_i2_801955D0[] = { 2000.0f, 2000.0f, 2000.0f, -2000.0f, 2000.0f, 2000.0f,
+ 0.0f, -3000.0f, 3000.0f, 5000.0f, -3000.0f, -3000.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_801881A8.s")
+f32 D_i2_80195600[] = { 75.0f, -80.0f, 85.0f, 0.0f };
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188228.s")
+Vec3f D_i2_80195610[] = {
+ { 200.0f, -10.0f, 200.0f },
+ { -200.0f, 20.0f, 200.0f },
+ { 0.0f, 50.0f, 400.0f },
+ { -2000.0f, -1000.0f, 0.0f },
+};
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188298.s")
+void func_i2_80187530(Actor* actor) {
+ if (actor->unk_0D0 == 1) {
+ actor->unk_0D0 = 0;
+ func_8007A6F0(&actor->obj.pos, 0x2902107D);
+ }
+}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188344.s")
+void func_i2_8018756C(Actor* actor) {
+ Vec3f vec;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_801887D0.s")
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ actor->unk_0CE -= actor->unk_0D6;
+ if (actor->unk_0CE <= 0) {
+ actor->obj.status = 3;
+ }
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188A40.s")
+ actor->obj.rot.y += 2.0f;
+ actor->obj.rot.x += 1.3f;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188B84.s")
+ vec.x = actor->vel.x;
+ vec.y = actor->vel.y;
+ vec.z = actor->vel.z;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188C2C.s")
+ if ((func_8006351C(actor->index, &actor->obj.pos, &vec, 0) != 0) || (actor->obj.pos.y < (gGroundLevel + 20.0f))) {
+ actor->obj.status = 3;
+ }
+ func_i2_80187530(actor);
+}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188CAC.s")
+void func_i2_80187650(Actor* actor) {
+ Vec3f vec;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188E8C.s")
+ actor->obj.rot.y += 1.7f;
+ actor->obj.rot.x += 3.3f;
+ actor->unk_046 -= 15;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188F2C.s")
+ if (actor->unk_046 < 0) {
+ actor->unk_046 = 0;
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80188FAC.s")
+ actor->unk_048 += 8;
+ if (actor->unk_048 > 995) {
+ actor->unk_048 = 995;
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80189114.s")
+ if ((actor->timer_0BC & 3) == 1) {
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 6.0f);
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_801892F0.s")
+ if (actor->unk_0D0 != 0) {
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+ func_8007D2C8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 10.0f);
+ Object_Kill(&actor->obj, &actor->sfxPos);
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_80189624.s")
+ if (actor->timer_0C2 == 0) {
+ vec.x = actor->vel.x;
+ vec.y = actor->vel.y;
+ vec.z = actor->vel.z;
+ if ((func_8006351C(actor->index, &actor->obj.pos, &vec, 0) != 0) ||
+ (actor->obj.pos.y < (gGroundLevel + 20.0f))) {
+ func_8007D2C8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 10.0f);
+ actor->obj.status = 3;
+ }
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018978C.s")
+ func_i2_80187530(actor);
+}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018B7C4.s")
+void func_i2_801877C4(Actor* actor) {
+ Vec3f sp44;
+ Vec3f sp38;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018BACC.s")
+ actor->obj.rot.z += 1.0f;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018C77C.s")
+ Matrix_RotateZ(gCalcMatrix, actor->obj.rot.z * M_DTOR, 0);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018C8F4.s")
+ sp38.x = 0.0f;
+ sp38.y = -1100.0f;
+ sp38.z = 0.0f;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018CA10.s")
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp38, &sp44);
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018CAD8.s")
+ actor->obj.pos.x = actor->fwork[0] + sp44.x;
+ actor->obj.pos.y = actor->fwork[1] + sp44.y;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018CB50.s")
+ if (actor->unk_0D0 != 0) {
+ func_80066254(actor);
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+ Object_Kill(&actor->obj, &actor->sfxPos);
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y + 30.0f, actor->obj.pos.z, 5.0f);
+ func_8007BFFC(actor->obj.pos.x, actor->obj.pos.y + 30.0f, actor->obj.pos.z, 0.0f, 0.0f, 0.0f, 3.0f, 10);
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018CCF8.s")
+ if (actor->timer_0BC == 0) {
+ actor->timer_0BC = 40;
+ if (actor->obj.pos.z < (gPlayer->unk_138 - 1000.0f)) {
+ func_8007F11C(0x161, actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 120.0f);
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018CD8C.s")
+void func_i2_8018795C(Actor* actor) {
+ Vec3f vec;
+ s32 pad[2];
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018D9EC.s")
+ actor->obj.rot.y += 7.0f;
+ actor->obj.rot.x += 3.3f;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018DA6C.s")
+ if (actor->unk_0D0 != 0) {
+ func_80066254(actor);
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+ Object_Kill(&actor->obj, &actor->sfxPos);
+ func_8007D0E0(actor->obj.pos.x - actor->vel.x, actor->obj.pos.y, actor->obj.pos.z - actor->vel.z, 8.0f);
+ func_8007BFFC(actor->obj.pos.x - actor->vel.x, actor->obj.pos.y + 30.0f, actor->obj.pos.z - actor->vel.z, 0.0f,
+ 0.0f, 0.0f, 4.0f, 10);
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018DAEC.s")
+ if (!(gGameFrameCount & 7)) {
+ Math_Vec3fFromAngles(&vec, actor->obj.rot.x, actor->obj.rot.y, 100.0f);
+ func_8007F04C(0x161, actor->obj.pos.x + (vec.x * 3.0f), actor->obj.pos.y + (vec.y * 3.0f),
+ actor->obj.pos.z + (vec.z * 3.0f), actor->obj.rot.x, actor->obj.rot.y, actor->obj.rot.z, 0.0f,
+ 0.0f, 0.0f, vec.x, vec.y, vec.z, 1.0f);
+ }
+}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018DB6C.s")
+void func_i2_80187B08(Actor* actor) {
+ actor->obj.rot.y += 7.0f;
+ actor->obj.rot.x += 3.3f;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018DBEC.s")
+ actor->unk_046 -= 11;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018DCE4.s")
+ if (actor->unk_046 < 0) {
+ actor->unk_046 = 0;
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018DE14.s")
+ actor->unk_048 += 4;
+ if (actor->unk_048 > 995) {
+ actor->unk_048 = 995;
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018DF08.s")
+ if (!(actor->timer_0BC & 3)) {
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 6.0f);
+ }
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018E084.s")
+ if ((actor->unk_0D0 != 0) || (actor->timer_0BC == 0)) {
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+ Object_Kill(&actor->obj, &actor->sfxPos);
+ func_8007D0E0(actor->obj.pos.x - actor->vel.x, actor->obj.pos.y, actor->obj.pos.z - actor->vel.z, 8.0f);
+ func_8007BFFC(actor->obj.pos.x - actor->vel.x, actor->obj.pos.y + 30.0f, actor->obj.pos.z - actor->vel.z, 0.0f,
+ 0.0f, 0.0f, 4.0f, 10);
+ }
+}
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/func_i2_8018ED9C.s")
+void func_i2_80187C68(Actor* actor, f32 x, f32 y, f32 z, f32 arg4, f32 xRot, f32 yRot, s32 timerBC, s32 arg8, s32 id) {
+ Actor_Initialize(actor);
+ actor->obj.status = 1;
+ actor->obj.id = (u16) id;
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i2/fox_me/D_i2_80195790.s")
+ actor->obj.pos.x = x;
+ actor->obj.pos.y = y;
+ actor->obj.pos.z = z;
+
+ actor->obj.rot.x = xRot;
+ actor->obj.rot.y = yRot;
+
+ actor->timer_0BC = timerBC;
+ actor->timer_0BE = 20;
+ actor->unk_0B4 = arg8;
+ actor->fwork[5] = arg4;
+ Object_SetInfo(&actor->info, actor->obj.id);
+}
+
+void func_i2_80187D08(f32 x, f32 y, f32 z, f32 arg3, f32 xRot, f32 yRot, s32 arg6, s32 arg7, s32 id) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(gActors); i++) {
+ if (gActors[i].obj.status == 0) {
+ func_i2_80187C68(&gActors[i], x, y, z, arg3, xRot, yRot, arg6, arg7, id);
+ return;
+ }
+ }
+}
+
+void func_i2_80187D98(Effect* effect, f32 x, f32 y, f32 z, f32 arg4, bool arg5) {
+ Effect_Initialize(effect);
+ effect->obj.status = 1;
+ effect->obj.id = OBJ_EFFECT_369;
+
+ effect->obj.pos.x = x;
+ effect->obj.pos.y = y;
+ effect->obj.pos.z = z;
+
+ effect->unk_60.z = arg4;
+ effect->unk_48 = arg5;
+ effect->obj.rot.x = 45.0f;
+
+ if (arg5) {
+ effect->obj.rot.x = -45.0f;
+ }
+
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i2_80187E38(f32 x, f32 y, f32 z, f32 arg3) {
+ s32 i;
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80187D98(&gEffects[i], x, y, z, arg3, 0);
+ Audio_PlaySfx(0x31037057U, &gEffects[i].sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ }
+ }
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80187D98(&gEffects[i], x, y, z, arg3, 1);
+ break;
+ }
+ }
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80187D98(&gEffects[i], x, y, z, arg3 + 90.0f, 0);
+ break;
+ }
+ }
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80187D98(&gEffects[i], x, y, z, arg3 + 90.0f, 1);
+ break;
+ }
+ }
+}
+
+void func_i2_80187FF8(Effect* effect, f32 x, f32 y, f32 z) {
+ Effect_Initialize(effect);
+ effect->obj.status = 1;
+ effect->obj.id = OBJ_EFFECT_371;
+
+ effect->obj.pos.x = x;
+ effect->obj.pos.y = y;
+ effect->obj.pos.z = z;
+
+ effect->unk_44 = 128;
+ effect->vel.z = 50.0f;
+ effect->scale2 = 1.0f;
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i2_80188088(Boss* boss) {
+ s32 i;
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80187FF8(&gEffects[i], boss->obj.pos.x + 700.0f, boss->obj.pos.y, boss->obj.pos.z + 1235.0f);
+ Audio_PlaySfx(0x19006035U, &gEffects[i].sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ }
+ }
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80187FF8(&gEffects[i], boss->obj.pos.x - 700.0f, boss->obj.pos.y, boss->obj.pos.z + 1235.0f);
+ break;
+ }
+ }
+}
+
+void func_i2_801881A8(Effect* effect, f32 x, f32 y, f32 z, f32 zRot, s32 arg5) {
+ Effect_Initialize(effect);
+ effect->obj.status = 1;
+ effect->obj.id = OBJ_EFFECT_370;
+
+ effect->obj.pos.x = x;
+ effect->obj.pos.y = y;
+ effect->obj.pos.z = z;
+
+ effect->obj.rot.z = zRot;
+
+ effect->unk_4E = arg5;
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i2_80188228(f32 x, f32 y, f32 z, f32 zRot) {
+ s32 i;
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_801881A8(&gEffects[i], x, y, z, zRot, 0);
+ break;
+ }
+ }
+}
+
+void func_i2_80188298(f32 x, f32 y, f32 z, f32 zRot) {
+ s32 i;
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_801881A8(&gEffects[i], x, y, z, zRot, -1);
+ Audio_PlaySfx(0x3102705CU, &gEffects[i].sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ }
+ }
+}
+
+void func_i2_80188344(Boss* boss) {
+ Vec3f src;
+ Vec3f dest;
+ f32 temp;
+
+ if (boss->actionState < 5) {
+ boss->obj.pos.x = gBosses[0].obj.pos.x;
+ boss->obj.pos.y = gBosses[0].obj.pos.y;
+ boss->obj.pos.z = gBosses[0].obj.pos.z;
+ boss->obj.rot.x = gBosses[0].obj.rot.x;
+ boss->obj.rot.y = gBosses[0].obj.rot.y;
+ boss->obj.rot.z = (gBosses[0].obj.rot.z + boss->unk_078.z) + 45.0f + 180.0f;
+ }
+
+ switch (boss->actionState) {
+ case 0:
+ boss->timer_050 = 150;
+ boss->unk_078.z += 2.5f;
+ break;
+
+ case 1:
+ temp = fabsf(90.0f - boss->unk_078.z) * 0.1f;
+ if (temp > 2.5f) {
+ temp = 2.5f;
+ }
+
+ boss->unk_078.z += temp;
+
+ if (boss->timer_050 == 0) {
+ boss->actionState = 2;
+ boss->dmgType = 0;
+ }
+ break;
+
+ case 2:
+ if (boss->dmgType == 1) {
+ boss->dmgType = 0;
+ boss->timer_054 = 5;
+ boss->swork[0] += 32;
+
+ func_8001D034(&boss->sfxPos, 0x3103605B, boss->unk_04A);
+
+ boss->unk_04A++;
+ if (boss->unk_04A >= 8) {
+ boss->unk_04A = 7;
+ }
+
+ if (boss->swork[0] >= 0xFF) {
+ boss->unk_04A = 0;
+ Audio_KillSfx(&boss->sfxPos);
+ if (boss->swork[1] == 0) {
+ boss->swork[1]++;
+ func_800BA808(gMsg_ID_3315, RCID_PEPPY);
+ }
+
+ boss->swork[0] = 0;
+
+ Matrix_RotateZ(gCalcMatrix, (boss->obj.rot.z - 45.0f) * M_DTOR, 0);
+
+ src.x = 0.0f;
+ src.y = 156.0f;
+ src.z = 930.0f;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ func_i2_80188298(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z,
+ boss->obj.rot.z - 45.0f);
+ func_i2_80188228(boss->obj.pos.x - dest.x, boss->obj.pos.y - dest.y, boss->obj.pos.z + dest.z,
+ boss->obj.rot.z - 45.0f);
+ func_i2_80188228(boss->obj.pos.x + dest.y, boss->obj.pos.y - dest.x, boss->obj.pos.z + dest.z,
+ (boss->obj.rot.z - 45.0f) + 90.0f);
+ }
+ }
+ break;
+
+ case 3:
+ boss->timer_050 = 30;
+ boss->actionState = 4;
+ boss->timer_05C = 15;
+ boss->swork[0] = 0;
+ break;
+
+ case 4:
+ if (boss->timer_050 == 0) {
+ func_8007D2C8(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z + 500.0f, 30.0f);
+ func_8007BFFC(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z + 500.0f, 0.0f, 0.0f, 0.0f, 20.0f, 30);
+ boss->actionState = 5;
+
+ boss->info.unk_10 = 1000.0f;
+
+ func_8001A55C(&boss->sfxPos, 0x3103605B);
+ Audio_PlaySfx(0x3102405DU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ break;
+
+ case 5:
+ boss->obj.rot.z -= 3.0f;
+ if (boss->vel.z < 5.0f) {
+ boss->vel.z = boss->vel.z + 1.0f;
+ }
+ break;
+ }
+
+ if (boss->unk_078.z >= 360.0f) {
+ boss->unk_078.z -= 360.0f;
+ }
+ if (boss->unk_078.z < 0.0f) {
+ boss->unk_078.z += 360.0f;
+ }
+}
+
+void func_i2_801887D0(Boss* boss) {
+ s32 i;
+
+ if (boss->timer_054 & 1) {
+ RCP_SetupDL_27();
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 0, 255, 0, 255);
+ }
+
+ Matrix_RotateZ(gGfxMatrix, (M_PI / 4), 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_60240B0);
+ RCP_SetupDL_64();
+
+ for (i = 1; i < 4; i++) {
+ if (boss->swork[0] != 0) {
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, boss->swork[0]);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_RotateZ(gGfxMatrix, i * (M_PI / 2), 1);
+ Matrix_Translate(gGfxMatrix, 0.0f, 156.0f, 930.0f, 1);
+
+ if (gGameFrameCount & 1) {
+ Matrix_Scale(gGfxMatrix, 6.0f, 9.0f, 5.0f, 1);
+ } else {
+ Matrix_Scale(gGfxMatrix, 4.0f, 7.0f, 5.0f, 1);
+ }
+
+ Matrix_RotateZ(gGfxMatrix, 1.5707964f, 1); // (M_PI / 2) does not match
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_60263F0);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ }
+}
+
+void func_i2_80188A40(Boss* boss) {
+ s32 i;
+
+ func_8001D444(0, D_800C9E90[gCurrentLevel], 0, 255);
+
+ D_80178284 = 1;
+
+ boss->swork[2] = 40;
+ boss->swork[3] = 40;
+ boss->swork[4] = 40;
+ boss->swork[5] = 40;
+ boss->swork[7] = 180;
+ boss->swork[8] = 180;
+ boss->swork[6] = 150;
+ boss->fwork[0] = -10.0f;
+ boss->fwork[9] = -3000.0f;
+ boss->fwork[15] = 8.0f;
+
+ i = boss->unk_044 = 1;
+
+ Boss_Initialize(&gBosses[i]);
+
+ gBosses[i].obj.status = 1;
+ gBosses[i].obj.id = 0x12A;
+ gBosses[i].obj.pos.x = boss->obj.pos.x;
+ gBosses[i].obj.pos.y = boss->obj.pos.y;
+ gBosses[i].obj.pos.z = boss->obj.pos.z;
+
+ Object_SetInfo(&gBosses[i].info, gBosses[i].obj.id);
+ func_800BA808(gMsg_ID_3300, RCID_BOSS_METEO);
+ Audio_PlaySfx(0x3102505AU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+void func_i2_80188B84(Effect* effect, f32 x, f32 y, f32 z, f32 xRot, f32 yRot, f32 arg6, f32 arg7) {
+ Effect_Initialize(effect);
+ effect->obj.status = 1;
+ effect->obj.id = OBJ_EFFECT_369;
+
+ effect->obj.pos.x = x;
+ effect->obj.pos.y = y;
+ effect->obj.pos.z = z;
+
+ effect->obj.rot.x = xRot;
+ effect->obj.rot.y = yRot;
+ effect->unk_60.z = arg6;
+
+ effect->timer_50 = 20;
+ effect->scale2 = arg7;
+ effect->unk_4E = 1;
+ effect->unk_44 = 0x80;
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i2_80188C2C(f32 x, f32 y, f32 z, f32 xRot, f32 yRot, f32 arg5, f32 arg6) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80188B84(&gEffects[i], x, y, z, xRot, yRot, arg5, arg6);
+ return;
+ }
+ }
+}
+
+void func_i2_80188CAC(Effect* effect) {
+ Vec3f src;
+ Vec3f dest;
+
+ if (effect->unk_4E == 0) {
+ switch (effect->unk_48) {
+ case 0:
+ effect->obj.rot.x -= 15.0f;
+ if (effect->obj.rot.x <= -45.0f) {
+ effect->unk_48 = 1;
+ }
+ break;
+
+ case 1:
+ effect->obj.rot.x += 15.0f;
+ if (effect->obj.rot.x >= 45.0f) {
+ effect->unk_48 = 0;
+ }
+ break;
+ }
+
+ effect->unk_44 = 255;
+ effect->scale2 = 1.0f;
+ effect->unk_60.z += 20.0f;
+
+ Matrix_RotateZ(gCalcMatrix, effect->unk_60.z * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, effect->obj.rot.x * M_DTOR, 1);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = 80.0f;
+
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ effect->vel.x = dest.x;
+ effect->vel.y = dest.y;
+ effect->vel.z = dest.z;
+
+ func_i2_80188C2C(effect->obj.pos.x, effect->obj.pos.y, effect->obj.pos.z, effect->obj.rot.x, effect->obj.rot.y,
+ effect->unk_60.z, 1.0f);
+ } else if (effect->timer_50 == 0) {
+ Object_Kill(&effect->obj, &effect->sfxPos);
+ }
+
+ func_8007A774(gPlayer, effect, 90.0f);
+}
+
+void func_i2_80188E8C(Effect* effect, f32 x, f32 y, f32 z, f32 xRot, f32 yRot, f32 zRot, f32 scale) {
+ Effect_Initialize(effect);
+ effect->obj.status = 1;
+ effect->obj.id = OBJ_EFFECT_370;
+
+ effect->obj.pos.x = x;
+ effect->obj.pos.y = y;
+ effect->obj.pos.z = z;
+
+ effect->obj.rot.x = xRot;
+ effect->obj.rot.y = yRot;
+ effect->obj.rot.z = zRot;
+
+ effect->scale2 = scale;
+ effect->unk_4E = 1;
+ effect->unk_44 = 0x80;
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i2_80188F2C(f32 x, f32 y, f32 z, f32 xRot, f32 yRot, f32 arg5, f32 scale) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
+ if (gEffects[i].obj.status == 0) {
+ func_i2_80188E8C(&gEffects[i], x, y, z, xRot, yRot, arg5, scale);
+ return;
+ }
+ }
+}
+
+void func_i2_80188FAC(Effect* effect) {
+ Vec3f src;
+ Vec3f dest;
+
+ if (effect->unk_4E != 1) {
+ effect->obj.rot.x = 10.0f;
+ effect->obj.rot.z += 20.0f;
+
+ Matrix_RotateZ(gCalcMatrix, effect->obj.rot.z * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, effect->obj.rot.x * M_DTOR, 1);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = 80.0f;
+
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ effect->vel.x = dest.x;
+ effect->vel.y = dest.y;
+ effect->vel.z = dest.z;
+
+ if (!(gGameFrameCount & 1)) {
+ func_i2_80188F2C(effect->obj.pos.x, effect->obj.pos.y, effect->obj.pos.z, effect->obj.rot.x,
+ effect->obj.rot.y, effect->obj.rot.z, 5.0f);
+ }
+ } else {
+ effect->unk_44 -= 8;
+ if (effect->unk_44 < 0) {
+ Object_Kill(&effect->obj, &effect->sfxPos);
+ }
+ }
+ func_8007A774(gPlayer, effect, 60.0f);
+}
+
+void func_i2_80189114(Effect* arg0) {
+ if (gPlayer->state_1C8 == PLAYERSTATE_1C8_7) {
+ Object_Kill(&arg0->obj, &arg0->sfxPos);
+ }
+
+ arg0->scale2 += 0.5f;
+ if (arg0->scale2 > 10.0f) {
+ arg0->scale2 = 10.0f;
+ }
+
+ arg0->obj.rot.z += 35.0f;
+ if (arg0->obj.pos.x < gPlayer->pos.x) {
+ arg0->obj.pos.x += 1.5f;
+ if (arg0->vel.x < 40.0f) {
+ arg0->vel.x += 2.0f;
+ }
+ }
+
+ if (gPlayer->pos.x < arg0->obj.pos.x) {
+ arg0->obj.pos.x -= 1.5f;
+ if (arg0->vel.x > -40.0f) {
+ arg0->vel.x -= 2.0f;
+ }
+ }
+
+ if (arg0->obj.pos.y < gPlayer->pos.y) {
+ arg0->obj.pos.y += 1.5f;
+ if (arg0->vel.y < 40.0f) {
+ arg0->vel.y += 2.0f;
+ }
+ }
+
+ if (gPlayer->pos.y < arg0->obj.pos.y) {
+ arg0->obj.pos.y -= 1.5f;
+ if (arg0->vel.y > -40.0f) {
+ arg0->vel.y -= 2.0f;
+ }
+ }
+
+ func_8007A774(gPlayer, arg0, 100.0f);
+}
+
+void func_i2_801892F0(Boss* boss, s32 arg1) {
+ Vec3f dest;
+ Vec3f src;
+
+ func_8007A6F0(&boss->obj.pos, 0x2903B009);
+
+ if (arg1 == 7) {
+ func_8007D2C8(boss->obj.pos.x, boss->obj.pos.y + 330.0f, boss->obj.pos.z + 1020.0f, 15.0f);
+ func_8007BFFC(boss->obj.pos.x, boss->obj.pos.y + 330.0f, boss->obj.pos.z + 1020.0f, 0.0f, 0.0f, 0.0f, 7.0f, 20);
+ }
+
+ if (arg1 == 5) {
+ func_8007D2C8(boss->obj.pos.x, boss->obj.pos.y - 330.0f, boss->obj.pos.z + 1020.0f, 15.0f);
+ func_8007BFFC(boss->obj.pos.x, boss->obj.pos.y - 330.0f, boss->obj.pos.z + 1020.0f, 0.0f, 0.0f, 0.0f, 7.0f, 20);
+ }
+
+ if (arg1 == 4) {
+ func_8007D2C8(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z + 300.0f, 20.0f);
+ func_8007BFFC(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z + 300.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0x19);
+ }
+
+ if (arg1 < 4) {
+ Matrix_RotateY(gCalcMatrix, boss->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, boss->obj.rot.x * M_DTOR, 1);
+ Matrix_RotateZ(gCalcMatrix, boss->obj.rot.z * M_DTOR, 1);
+ Matrix_RotateZ(gCalcMatrix, arg1 * (M_PI / 2), 1);
+
+ src.x = 0.0f;
+ src.y = 200.0f;
+ src.z = 500.0f;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ func_8007D2C8(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, 10.0f);
+ func_8007BFFC(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, 0.0f, 0.0f, 0.0f,
+ 5.0f, 15);
+ }
+}
+
+void func_i2_80189624(void) {
+ if (gGameFrameCount & 1) {
+ D_801784B8 = D_801784C4 = 0.0f;
+ D_801784BC = D_801784C8 = 5.0f;
+ D_801784C0 = D_801784CC = 0.0f;
+ D_801784EC = D_801784F8 = 0.0f;
+ D_801784F0 = D_801784FC = 100.0f;
+ D_801784F4 = D_80178500 = 0.0f;
+ } else {
+ D_801784B8 = D_801784C4 = 0.0f;
+ D_801784BC = D_801784C8 = -5.0f;
+ D_801784C0 = D_801784CC = 0.0f;
+ D_801784EC = D_801784F8 = 0.0f;
+ D_801784F0 = D_801784FC = 110.0f;
+ D_801784F4 = D_80178500 = 0.0f;
+ }
+}
+
+void func_i2_8018978C(Boss* boss) {
+ f32 sp7C;
+ f32 rand;
+ s32 i;
+ s32 var_v0;
+
+ Vec3f src;
+ Vec3f dest;
+
+ gBossFrameCount++;
+
+ Matrix_RotateY(gCalcMatrix, boss->obj.rot.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, boss->obj.rot.x * M_DTOR, 1);
+ Matrix_RotateZ(gCalcMatrix, boss->obj.rot.z * M_DTOR, 1);
+
+ if (gGameFrameCount & 16) {
+ boss->swork[19] += 32;
+ if (boss->swork[19] > 128) {
+ boss->swork[19] = 128;
+ }
+ } else {
+ boss->swork[19] -= 32;
+ if (boss->swork[19] < 0) {
+ boss->swork[19] = 0;
+ }
+ }
+
+ if (!(gGameFrameCount & 56)) {
+ boss->fwork[3] = D_i2_80195534[gGameFrameCount & 7];
+ boss->fwork[4] = D_i2_80195534[gGameFrameCount & 7];
+ boss->fwork[5] = D_i2_80195534[gGameFrameCount & 7];
+ boss->fwork[6] = D_i2_80195534[gGameFrameCount & 7];
+ }
+
+ if (!((gGameFrameCount + 20) & 56)) {
+ boss->fwork[7] = D_i2_80195534[(gGameFrameCount + 20) & 7];
+ boss->fwork[8] = D_i2_80195534[(gGameFrameCount + 20) & 7];
+ }
+
+ if (boss->swork[9] != 0) {
+ boss->swork[9]--;
+ }
+
+ if (boss->swork[10] != 0) {
+ boss->swork[10]--;
+ }
+
+ if (boss->swork[11] != 0) {
+ boss->swork[11]--;
+ }
+
+ if (boss->swork[12] != 0) {
+ boss->swork[12]--;
+ }
+
+ if (boss->swork[13] != 0) {
+ boss->swork[13]--;
+ }
+
+ if (boss->swork[14] != 0) {
+ boss->swork[14]--;
+ }
+
+ if (boss->swork[15] != 0) {
+ boss->swork[15]--;
+ }
+
+ if (boss->swork[0] > 5) {
+ boss->swork[0]--;
+ if (boss->swork[0] == 5) {
+ func_8001A55C(&boss->sfxPos, 0x3102505AU);
+ }
+ }
+
+ if (boss->swork[1] > 5) {
+ boss->swork[1] = boss->swork[1] - 1;
+ if (boss->swork[1] == 5) {
+ func_8001A55C(&boss->sfxPos, 0x3102505AU);
+ }
+ }
+
+ if (boss->dmgType != 0) {
+ boss->dmgType = 0;
+ if ((boss->dmgPart != 7) && (boss->dmgPart >= 5) && (boss->dmgPart != 5)) {
+ Audio_PlaySfx(0x29121007U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+
+ if ((boss->actionState >= 2) && (boss->actionState < 20)) {
+ if ((boss->dmgPart < 5) && (boss[0].fwork[17 + boss->dmgPart] > 0.5f)) {
+ if (boss[0].swork[boss->dmgPart + 2] != 0) {
+ Audio_PlaySfx(0x29034003U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+
+ boss[0].swork[9 + boss->dmgPart] = 20;
+ boss[0].swork[2 + boss->dmgPart] -= boss->damage;
+
+ if (boss[0].swork[2 + boss->dmgPart] <= 0) {
+ boss[0].swork[2 + boss->dmgPart] = 0;
+ func_i2_801892F0(boss, boss->dmgPart);
+ boss->swork[20] += 1;
+ if (boss->swork[20] == 2) {
+ func_800BA808(gMsg_ID_17160, RCID_PEPPY);
+ }
+ if (boss->swork[20] == 3) {
+ func_800BA808(gMsg_ID_3371, RCID_BOSS_METEO);
+ }
+ if (boss->swork[20] == 4) {
+ func_800BA808(gMsg_ID_3320, RCID_BOSS_METEO);
+ }
+ }
+ } else {
+ Audio_PlaySfx(0x29121007U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+
+ if (boss->actionState >= 9) {
+ if (boss->dmgPart == 5) {
+ if ((boss->swork[7] != 0) && (boss->fwork[22] > 0.8f)) {
+ Audio_PlaySfx(0x2943500FU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ boss->swork[14] = 20;
+ boss->swork[7] -= boss->damage;
+ if (boss->swork[7] <= 0) {
+ boss->swork[7] = 0;
+ func_i2_801892F0(boss, boss->dmgPart);
+ }
+ } else {
+ Audio_PlaySfx(0x29121007U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+
+ if (boss->dmgPart == 7) {
+ if ((boss->swork[8] != 0) && (boss->fwork[23] > 0.8f)) {
+ Audio_PlaySfx(0x2943500FU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ boss->swork[15] = 20;
+ boss->swork[8] -= boss->damage;
+ if (boss->swork[8] <= 0) {
+ boss->swork[8] = 0;
+ func_i2_801892F0(boss, boss->dmgPart);
+ }
+ } else {
+ Audio_PlaySfx(0x29121007U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+
+ if (boss->swork[7] <= 0) {
+ if (boss->swork[8] <= 0) {
+ func_80042EC0(boss);
+
+ boss->actionState = 20;
+ boss->timer_050 = 300;
+ boss->timer_052 = 260;
+ boss->vel.x = 0.0f;
+ boss->vel.y = 0.0f;
+
+ 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_80177A80 = 0;
+ }
+
+ func_800182F4(0x103200FF);
+ func_800182F4(0x113200FF);
+ Audio_PlaySfx(0x2940D09AU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_Timer_80161A60 = 8;
+ }
+ }
+ }
+ }
+ }
+
+ sp7C = boss->obj.pos.z + D_80177D20;
+
+ if (boss->actionState >= 3) {
+ if (boss->actionState < 20) {
+ Math_SmoothStepToF(&boss->vel.z, -D_80161A54, 0.1f, 2.0f, 0.0f);
+ if ((boss->fwork[9] + 200.0f) < sp7C) {
+ Math_SmoothStepToF(&boss->vel.z, -60.0f, 0.1f, 4.0f, 0.0f);
+ }
+ if (sp7C < (boss->fwork[9] - 300.0f)) {
+ Math_SmoothStepToF(&boss->vel.z, 20.0f, 0.1f, 4.0f, 0.0f);
+ }
+ }
+ }
+
+ if ((boss->actionState >= 3) && (boss->actionState < 20)) {
+ switch (boss->swork[16]) {
+ case 0:
+ if (boss->vel.y > 0.0f) {
+ boss->vel.y -= 0.2f;
+ }
+ if (boss->vel.y < 0.0f) {
+ boss->vel.y += 0.2f;
+ }
+
+ if (boss->timer_054 == 0) {
+ boss->timer_054 = 20;
+ boss->fwork[13] = 7.0f;
+ if (boss->obj.pos.y > 0.0f) {
+ boss->fwork[13] = -7.0f;
+ }
+ boss->timer_054 = (s32) (Rand_ZeroOne() * 30.0f) + 40.0f;
+ boss->swork[16] = 1;
+ }
+ break;
+
+ case 1:
+ if (boss->fwork[13] < boss->vel.y) {
+ boss->vel.y = boss->vel.y - 0.2f;
+ }
+
+ if (boss->vel.y < boss->fwork[13]) {
+ boss->vel.y += 0.2f;
+ }
+
+ if (boss->timer_054 == 0) {
+ boss->swork[16] = 0;
+ boss->timer_054 = (s32) (Rand_ZeroOne() * 30.0f) + 40.0f;
+ }
+ break;
+ }
+
+ switch (boss->swork[17]) {
+ case 0:
+ if (boss->vel.x > 0.0f) {
+ boss->vel.x = boss->vel.x - 0.2f;
+ }
+
+ if (boss->vel.x < 0.0f) {
+ boss->vel.x += 0.2f;
+ }
+
+ if (boss->timer_056 == 0) {
+ boss->timer_056 = 20;
+ boss->fwork[14] = 7.0f;
+ if (boss->obj.pos.x > 0.0f) {
+ boss->fwork[14] = -7.0f;
+ }
+ boss->timer_056 = (s32) (Rand_ZeroOne() * 40.0f) + 50.0f;
+ boss->swork[17] = 1;
+ }
+ break;
+
+ case 1:
+ if (boss->fwork[14] < boss->vel.x) {
+ boss->vel.x = boss->vel.x - 0.2f;
+ }
+ if (boss->vel.x < boss->fwork[14]) {
+ boss->vel.x += 0.2f;
+ }
+ if (boss->timer_056 == 0) {
+ boss->swork[17] = 0;
+ boss->timer_056 = (s32) (Rand_ZeroOne() * 40.0f) + 50.0f;
+ }
+ break;
+ }
+ }
+
+ if (boss->swork[18] != 0) {
+ s32 id;
+
+ if (func_8008AC54(0) >= 4) {
+ id = 191;
+ } else {
+ id = 190;
+ }
+
+ Audio_PlaySfx(0x2903201BU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+
+ src.x = 0.0f;
+ src.y = 330.0f;
+ src.z = -1022.0f;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ if (boss->swork[18] == 1) {
+ func_i2_80187D08(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, 50.0f,
+ 270.0f, 0.0f, 0x1E, 0, id);
+ } else {
+ func_i2_80187D08(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, 50.0f, 0.0f,
+ 0.0f, 0, 0, id);
+ }
+
+ src.y = -330.0f;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ if (boss->swork[18] == 1) {
+ func_i2_80187D08(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, 50.0f, 90.0f,
+ 0.0f, 0x1E, 0, id);
+ } else {
+ func_i2_80187D08(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, 50.0f, 0.0f,
+ 0.0f, 0, 0, id);
+ }
+ boss->swork[18] = 0;
+ }
+
+ if ((sp7C < 200.0f) && (sp7C > -1500.0f)) {
+ D_801784F8 = 0.0f;
+ D_801784FC = 150.0f;
+ D_80178500 = 0.0f;
+ }
+
+ switch (boss->actionState) {
+ case 0:
+ boss->swork[0] = 10;
+ boss->swork[1] = 10;
+
+ boss->obj.pos.y += ((0.0f - boss->obj.pos.y) * boss->fwork[1]);
+ boss->vel.z = boss->fwork[0] - D_80177D08;
+
+ if (sp7C < boss->fwork[9]) {
+ boss->actionState = 1;
+ boss->fwork[1] = 0.0f;
+ }
+
+ if (sp7C < -1000.0f) {
+ if (boss->fwork[1] < 0.005f) {
+ boss->fwork[1] = boss->fwork[1] + 0.0001f;
+ }
+ }
+ break;
+
+ case 1:
+ boss->obj.pos.y += ((0.0f - boss->obj.pos.y) * boss->fwork[1]);
+ boss->vel.z = boss->fwork[0] - D_80177D08;
+
+ if (boss->fwork[0] < 0.0f) {
+ boss->fwork[0] += 0.5f;
+ if (boss->fwork[0] >= 0.0f) {
+ boss->actionState = 2;
+ boss->timer_050 = 50;
+ gBosses[boss->unk_044].actionState = 1;
+ }
+ }
+
+ if (boss->fwork[1] < 0.005f) {
+ boss->fwork[1] = boss->fwork[1] + 0.0001f;
+ }
+ break;
+
+ case 2:
+ boss->obj.pos.y += ((0.0f - boss->obj.pos.y) * boss->fwork[1]);
+ boss->vel.z = boss->fwork[0] - D_80177D08;
+
+ if (boss->fwork[1] < 0.05f) {
+ boss->fwork[1] = boss->fwork[1] + 0.0004f;
+ }
+
+ if (boss->timer_050 == 0) {
+ boss->actionState = 3;
+ boss->timer_050 = 50;
+ boss->timer_058 = 100;
+ func_800BA808(gMsg_ID_3310, RCID_BOSS_METEO);
+ }
+ break;
+
+ case 3:
+ if (boss->timer_052 == 0) {
+ rand = Rand_ZeroOne();
+ boss->fwork[9] = -3000.0f;
+ if (rand < 0.3f) {
+ boss->fwork[9] = -2000.0f;
+ }
+ if (rand > 0.7f) {
+ boss->fwork[9] = -4000.0f;
+ }
+ boss->timer_052 = 80;
+ } else if (boss->vel.z < -50.0f) {
+ if (boss->swork[0] == 5) {
+ Audio_PlaySfx(0x3102505AU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+
+ if (boss->swork[0] < 10) {
+ boss->swork[0] += 2;
+ if (boss->swork[0] > 10) {
+ boss->swork[0] = 10;
+ }
+ }
+
+ if (boss->swork[1] < 10) {
+ boss->swork[1] += 2;
+ if (boss->swork[1] > 10) {
+ boss->swork[1] = 10;
+ }
+ }
+ }
+
+ if (gBosses[boss->unk_044].actionState < 3) {
+ var_v0 = 0;
+ if (boss->swork[2] == 0) {
+ var_v0 = 1;
+ boss->obj.rot.z += 0.1f;
+ }
+ if (boss->swork[3] == 0) {
+ var_v0 += 1;
+ boss->obj.rot.z += 0.1f;
+ }
+ if (boss->swork[4] == 0) {
+ var_v0 += 1;
+ boss->obj.rot.z += 0.1f;
+ }
+ if (boss->swork[5] == 0) {
+ var_v0 += 1;
+ boss->obj.rot.z += 0.1f;
+ }
+ if (var_v0 == 4) {
+ gBosses[boss->unk_044].actionState = 3;
+ boss->actionState = 4;
+ boss->timer_050 = 250;
+ boss->timer_05A = 30;
+ boss->fwork[10] = 0;
+ }
+
+ if ((boss->timer_050 == 0) && (gBosses[boss->unk_044].actionState == 2)) {
+ boss->fwork[2] = 90.0f;
+ boss->timer_050 = D_i2_80195520[var_v0] + 45;
+ Audio_PlaySfx(0x19030036U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+
+ if (boss->fwork[2] > 0.0f) {
+ boss->fwork[2] -= 2.0f;
+ gBosses[boss->unk_044].unk_078.z -= 2.0f;
+ }
+ }
+
+ if (boss->timer_058 == 0) {
+ boss->timer_058 = (s32) (Rand_ZeroOne() * 80.0f) + 180.0f;
+ boss->swork[18] = 1;
+ }
+ break;
+
+ case 4:
+ boss->fwork[9] = -3000.0f;
+ if (boss->fwork[10] < 0.02f) {
+ boss->fwork[10] += 0.0002f;
+ }
+ boss->obj.rot.z += ((0.0f - boss->obj.rot.z) * boss->fwork[10]);
+ if (boss->timer_050 == 100) {
+ func_800BA808(gMsg_ID_3321, RCID_BOSS_METEO);
+ }
+ if (boss->timer_050 == 0) {
+ boss->actionState = 5;
+ boss->timer_050 = 70;
+ }
+ break;
+
+ case 5:
+ boss->obj.rot.z += ((0.0f - boss->obj.rot.z) * 0.02f);
+
+ if (boss->timer_050 == 1) {
+ Audio_PlaySfx(0x31016056U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+
+ if (boss->timer_050 == 0) {
+ D_801784C4 = 0.0f;
+ D_801784C8 = 5.0f;
+ D_801784CC = 0.0f;
+ D_801784F8 = 0.0f;
+ D_801784FC = 100.0f;
+ D_80178500 = 0.0f;
+ D_801784E8 = 5.0f;
+ D_80178510 = 5.0f;
+
+ if (boss->fwork[11] < 70.0f) {
+ boss->fwork[11] += 1.0f;
+ if (boss->fwork[11] > 20.0f) {
+ boss->fwork[11] += 1.0f;
+ }
+ } else {
+ boss->actionState = 6;
+ boss->timer_050 = 75;
+ }
+
+ if (boss->fwork[11] > 30.0f) {
+ func_i2_80189624();
+ }
+ }
+ break;
+
+ case 6:
+ boss->obj.rot.z = boss->obj.rot.z + ((0.0f - boss->obj.rot.z) * 0.02f);
+ Math_SmoothStepToF(&boss->fwork[0x15], 4.0f, 1.0f, 0.1f, 0.0f);
+
+ if (gPlayer->state_1C8 != PLAYERSTATE_1C8_6) {
+ D_80178348 = D_80178340 = D_80178350 = D_80178354 = 0;
+
+ if ((boss->timer_050 == 10) || (boss->timer_050 == 30) || (boss->timer_050 == 50) ||
+ (boss->timer_050 == 70)) {
+ D_80178340 = 150;
+ D_80178348 = D_80178350 = D_80178354 = 0xFF;
+ func_i2_80187E38(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z + 1300.0f,
+ boss->fwork[12] + boss->obj.rot.z);
+ boss->fwork[12] = Rand_ZeroOne() * 360.0f;
+ }
+ if ((boss->timer_050 == 13) || (boss->timer_050 == 33) || (boss->timer_050 == 53) ||
+ (boss->timer_050 == 73)) {
+ D_80178340 = 150;
+ D_80178348 = D_80178350 = D_80178354 = 255;
+ }
+ if (boss->timer_050 == 0) {
+ boss->actionState = 7;
+ Audio_PlaySfx(0x29038058U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ func_i2_80189624();
+ }
+ break;
+
+ case 7:
+ if (boss->fwork[11] > 26.0f) {
+ func_i2_80189624();
+ }
+
+ if (boss->fwork[11] > 0.0f) {
+ boss->fwork[11] -= 2.0f;
+ if (boss->fwork[11] <= 0.0f) {
+ boss->fwork[11] = 0.0f;
+ Audio_KillSfx(&boss->sfxPos);
+ if (boss->swork[6] == 0) {
+ boss->actionState = 8;
+
+ boss->timer_050 = 190;
+ boss->timer_052 = 230;
+
+ boss->fwork[10] = 0.0f;
+ boss->fwork[22] = 0.0f;
+ boss->fwork[23] = 0.0f;
+ D_80177A80 = 0;
+ func_800BA808(gMsg_ID_3322, RCID_BOSS_METEO);
+ func_800182F4(0x100100FF);
+ func_800182F4(0x110100FF);
+ } else {
+ boss->actionState = 5;
+ boss->timer_050 = 70;
+ }
+ }
+ }
+ break;
+
+ case 8:
+ D_80177A80++;
+ if (D_80177A80 == 130) {
+ func_800BA808(gMsg_ID_3330, RCID_BOSS_METEO);
+ }
+ if (D_80177A80 == 300) {
+ PRINTF("msg_03340\n");
+ func_800BA808(gMsg_ID_3340, RCID_FALCO);
+ }
+
+ if (D_80177A80 == 400) {
+ func_8001D444(0U, 0x8041U, 0U, 0xFFU);
+ if (gTeamShields[1] > 0) {
+ func_800BA808(gMsg_ID_3345, RCID_BOSS_METEO);
+ } else {
+ func_800BA808(gMsg_ID_3350, RCID_BOSS_METEO);
+ }
+ }
+
+ if (boss->timer_050 == 0) {
+ if (boss->fwork[10] < 0.02f) {
+ boss->fwork[10] = boss->fwork[10] + 0.0002f;
+ }
+
+ boss->obj.rot.x += ((-180.0f - boss->obj.rot.x) * boss->fwork[10]);
+
+ if (boss->timer_052 != 0) {
+ if (boss->swork[0] == 5) {
+ Audio_PlaySfx(0x3102505AU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->swork[0] < 10) {
+ boss->swork[0] += 2;
+ if (boss->swork[0] >= 11) {
+ boss->swork[0] = 10;
+ }
+ }
+ }
+
+ if (boss->obj.rot.x < -178.0f) {
+ boss->actionState = 9;
+ boss->timer_050 = 0;
+ boss->fwork[15] = 8.0f;
+ Audio_PlaySfx(0x11015034U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+ break;
+
+ case 9:
+ boss->obj.rot.x += ((-180.0f - boss->obj.rot.x) * boss->fwork[10]);
+ if ((boss->timer_050 > 50) && (boss->timer_050 <= 64)) {
+ boss->fwork[22] -= 0.1f;
+ if (boss->fwork[22] < 0.0f) {
+ boss->fwork[22] = 0.0f;
+ }
+ boss->fwork[23] -= 0.1f;
+ if (boss->fwork[23] < 0.0f) {
+ boss->fwork[23] = 0.0f;
+ }
+ }
+
+ if (boss->timer_050 < 20) {
+ boss->fwork[22] += 0.1f;
+ if (boss->fwork[22] > 1.0f) {
+ boss->fwork[22] = 1.0f;
+ }
+ boss->fwork[23] += 0.1f;
+ if (boss->fwork[23] > 1.0f) {
+ boss->fwork[23] = 1.0f;
+ }
+ }
+
+ if (boss->timer_050 == 40) {
+ boss->swork[18] = 2;
+ }
+
+ if (boss->timer_050 == 0) {
+ boss->fwork[15] -= 0.1f;
+ if (boss->fwork[15] < -1.0f) {
+ boss->timer_050 = 40;
+ boss->actionState = 10;
+ }
+ }
+ break;
+
+ case 10:
+ if (boss->timer_050 == 0) {
+ boss->actionState = 9;
+ boss->timer_050 = 70;
+ boss->fwork[15] = 8.0f;
+ Audio_PlaySfx(0x11015034U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else if ((boss->timer_050 & 1) == 1) {
+ func_i2_80188088(boss);
+ }
+ break;
+
+ case 20:
+ if (boss->timer_052 == 230) {
+ func_800BA808(gMsg_ID_3370, RCID_BOSS_METEO);
+ }
+ if (boss->timer_052 == 90) {
+ func_800BA808(gMsg_ID_3360, RCID_FOX);
+ }
+
+ if (!(gGameFrameCount & 7) && (Rand_ZeroOne() < 0.5f)) {
+ boss->timer_05C = 4;
+ }
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &D_i2_80195430[(s32) ((Rand_ZeroOne() * 19.9f))], &dest);
+
+ if (!(gGameFrameCount & 1)) {
+ func_8007C120(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, boss->vel.x,
+ boss->vel.y, boss->vel.z, 0.3f, 20);
+ }
+ if (!(gGameFrameCount & 3)) {
+ func_8007BFFC(boss->obj.pos.x + dest.x, boss->obj.pos.y + dest.y, boss->obj.pos.z + dest.z, boss->vel.x,
+ boss->vel.y, boss->vel.z, 10.0f, 10);
+ }
+
+ boss->vel.y = -5.0f;
+ boss->obj.rot.x += 0.2f;
+ boss->obj.rot.z -= 0.1f;
+
+ if (boss->timer_050 == 0) {
+ func_8007D2C8(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 40.0f);
+ Object_Kill(&boss->obj, &boss->sfxPos);
+ }
+ if (boss->timer_050 == 20) {
+ func_8007A568(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 80.0f);
+ Audio_PlaySfx(0x2940F026U, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_Timer_80177BD0[0] = 60;
+ for (i = 0; i < ARRAY_COUNT(gActors); i++) {
+ if (gActors[i].obj.id == 0xC6) {
+ Object_Kill(&gActors[i].obj, &gActors[i].sfxPos);
+ }
+ }
+ }
+
+ switch (boss->timer_050) {
+ case 20:
+ gShowBossHealth = false;
+
+ case 1:
+ case 5:
+ case 10:
+ case 15:
+ func_8007B344(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 71.0f, 5);
+
+ case 0:
+ for (i = 0; i < 0x64; i++) {
+ func_80079618(((Rand_ZeroOne() - 0.5f) * 1000.0f) + boss->obj.pos.x,
+ ((Rand_ZeroOne() - 0.5f) * 1000.0f) + boss->obj.pos.y,
+ ((Rand_ZeroOne() - 0.5f) * 1000.0f) + boss->obj.pos.z, 3.0f);
+ }
+ break;
+ }
+ }
+
+ if (boss->obj.rot.z >= 360.0f) {
+ boss->obj.rot.z = boss->obj.rot.z - 360.0f;
+ }
+ if (boss->obj.rot.z < 0.0f) {
+ boss->obj.rot.z += 360.0f;
+ }
+
+ if (gBossFrameCount == 250) {
+ func_800BA808(gMsg_ID_2225, RCID_SLIPPY);
+ }
+ if (gBossFrameCount == 406) {
+ gShowBossHealth = true;
+ }
+ if (gBossFrameCount > 406) {
+ gBossHealthBar = (boss->swork[2] + boss->swork[3] + boss->swork[4] + boss->swork[5] + boss->swork[7] +
+ boss->swork[8] + boss->swork[6]) /
+ 2.6274f;
+ if ((gBossFrameCount > 506) && (gBossFrameCount < 1000)) {
+ Math_SmoothStepToF(&boss->fwork[17], 3.3f, 1.0f, 0.1f, 0.0f);
+ Math_SmoothStepToF(&boss->fwork[0x12], 3.3f, 1.0f, 0.1f, 0.0f);
+ Math_SmoothStepToF(&boss->fwork[0x13], 3.3f, 1.0f, 0.1f, 0.0f);
+ Math_SmoothStepToF(&boss->fwork[20], 3.3f, 1.0f, 0.1f, 0.0f);
+ }
+ }
+}
+
+void func_i2_8018B7C4(s32 arg0) {
+ f32 effect = arg0 * 0.83333f;
+
+ if (gGameFrameCount & 1) {
+ effect *= 1.1f;
+ }
+
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+
+ RCP_SetupDL_64();
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Scale(gGfxMatrix, 10.0f * effect, 10.0f * effect, 10.0f * effect, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 70);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 20.0f, 1);
+ Matrix_Scale(gGfxMatrix, 9.0f * effect, 9.0f * effect, 9.0f * effect, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 60);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 35.0f, 1);
+ Matrix_Scale(gGfxMatrix, 7.5f * effect, 7.5f * effect, 7.5f * effect, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 50);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 40.0f, 1);
+ Matrix_Scale(gGfxMatrix, 5.0f * effect, 5.0f * effect, 5.0f * effect, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 40);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+ Matrix_Pop(&gGfxMatrix);
+ gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
+}
+
+void func_i2_8018BACC(Boss* boss) {
+ s32 i;
+ f32 var_fs0;
+ f32 var_fs1;
+ s32 pad;
+
+ gSPDisplayList(gMasterDisp++, D_6001310);
+ RCP_SetupDL_64();
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+
+ for (i = 0; i < 6; i++) {
+ if ((boss->fwork[i + 3] != 0) && (boss->fwork[11] == 0.0f)) {
+ var_fs1 = 2.0f * boss->fwork[3 + i];
+ Matrix_Push(&gGfxMatrix);
+ switch (i) {
+ case 0:
+ Matrix_Translate(gGfxMatrix, 746.0f, 741.0f, 680.0f, 1);
+ break;
+
+ case 1:
+ Matrix_Translate(gGfxMatrix, -746.0f, 741.0f, 680.0f, 1);
+ break;
+
+ case 2:
+ Matrix_Translate(gGfxMatrix, -746.0f, -741.0f, 680.0f, 1);
+ break;
+
+ case 3:
+ Matrix_Translate(gGfxMatrix, 746.0f, -741.0f, 680.0f, 1);
+ break;
+
+ case 4:
+ Matrix_Translate(gGfxMatrix, 1283.0f, 0.0f, -340.0f, 1);
+ break;
+
+ case 5:
+ Matrix_Translate(gGfxMatrix, -1283.0f, 0.0f, -340.0f, 1);
+ break;
+ }
+
+ if (i < 4) {
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 32, 32, 128);
+ Matrix_Scale(gGfxMatrix, var_fs1, var_fs1, var_fs1, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+ } else {
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 128);
+ Matrix_Scale(gGfxMatrix, var_fs1 * 6.0f, var_fs1 * 6.0f, var_fs1 * 6.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+ }
+ Matrix_Pop(&gGfxMatrix);
+ }
+ }
+
+ for (i = 0; i < 7; i++) {
+ if (boss->swork[2 + i] != 0) {
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, boss->swork[19], 255);
+
+ if (boss->swork[9 + i] & 1) {
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 0x50, 0, 0, 255);
+ }
+
+ Matrix_Push(&gGfxMatrix);
+
+ if (i == 4) {
+ Matrix_Translate(gGfxMatrix, 0.0f, 0, 300.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, (M_PI / 4), 1);
+ Matrix_Scale(gGfxMatrix, boss->fwork[21], boss->fwork[21], 1.0f, 1);
+ }
+
+ if (i == 5) {
+ Matrix_Translate(gGfxMatrix, 0.0f, 330.0f, -1022.0f, 1);
+ Matrix_Scale(gGfxMatrix, boss->fwork[22] * 3.2f, 2.0f * boss->fwork[22], 1.0f, 1);
+ }
+
+ if (i == 6) {
+ Matrix_Translate(gGfxMatrix, 0.0f, -330.0f, -1022.0f, 1);
+ Matrix_Scale(gGfxMatrix, boss->fwork[23] * 3.2f, 2.0f * boss->fwork[23], 1.0f, 1);
+ }
+
+ if (i < 4) {
+ Matrix_RotateZ(gGfxMatrix, i * (M_PI / 2), 1);
+ Matrix_Translate(gGfxMatrix, 0.0f, 200.0f, 500.0f, 1);
+ Matrix_Scale(gGfxMatrix, boss->fwork[17 + i], boss->fwork[17 + i], 1.0f, 1);
+ }
+
+ Matrix_SetGfxMtx(&gMasterDisp);
+
+ if (i < 4) {
+ gSPDisplayList(gMasterDisp++, D_6024AD0);
+ } else {
+ gSPDisplayList(gMasterDisp++, D_60236F0);
+ }
+ Matrix_Pop(&gGfxMatrix);
+ }
+ }
+
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 0xA0, 0xFF, 0xA0, 0x80);
+ for (i = 0; i < 4; i++) {
+ if (boss->fwork[11] != 0) {
+ var_fs1 = boss->fwork[11];
+ if (boss->fwork[11] > 15.0f) {
+ var_fs1 = 15.0f;
+ }
+
+ Matrix_Push(&gGfxMatrix);
+ switch (i) {
+ case 0:
+ Matrix_Translate(gGfxMatrix, 746.0f, 741.0f, 680.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, -(M_PI / 4), 1);
+ break;
+
+ case 1:
+ Matrix_Translate(gGfxMatrix, -746.0f, 741.0f, 680.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, (M_PI / 4), 1);
+ break;
+
+ case 2:
+ Matrix_Translate(gGfxMatrix, -746.0f, -741.0f, 680.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, (3 * M_PI / 4), 1);
+ break;
+
+ case 3:
+ Matrix_Translate(gGfxMatrix, 746.0f, -741.0f, 680.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, -(3 * M_PI / 4), 1);
+ break;
+ }
+
+ Matrix_SetGfxMtx(&gMasterDisp);
+ Matrix_Push(&gGfxMatrix);
+
+ if (gGameFrameCount & 1) {
+ Matrix_Scale(gGfxMatrix, var_fs1 * 2.5f, var_fs1 * 2.5f, var_fs1 * 2.5f, 1);
+ } else {
+ Matrix_Scale(gGfxMatrix, var_fs1 * 3.0f, var_fs1 * 3.0f, var_fs1 * 3.0f, 1);
+ }
+
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_RotateX(gGfxMatrix, -(M_PI / 6), 1);
+
+ if (gGameFrameCount & 1) {
+ Matrix_RotateY(gGfxMatrix, 3.1415927f, 1);
+ }
+ Matrix_Scale(gGfxMatrix, 2.0f, 2.0f * var_fs1, 2.0f, 1);
+ Matrix_Translate(gGfxMatrix, 0.0f, -20.0f, 0.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_102F5E0);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ }
+
+ if (boss->fwork[11] > 15.0f) {
+ var_fs1 = boss->fwork[11] - 15.0f;
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 0xA0, 0xFF, 0xA0, 0xFF);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 1300.0f, 1);
+ if (gGameFrameCount & 1) {
+ Matrix_Scale(gGfxMatrix, var_fs1 * 0.8f, var_fs1 * 0.8f, var_fs1 * 0.8f, 1);
+ } else {
+ Matrix_Scale(gGfxMatrix, var_fs1, var_fs1, var_fs1, 1);
+ }
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_102ED50);
+ Matrix_Pop(&gGfxMatrix);
+ }
+
+ if ((boss->actionState == 9) || (boss->actionState == 0xA)) {
+ var_fs1 = boss->fwork[15];
+ for (i = 0; i < 10; i++) {
+ var_fs1 += 0.3f;
+ var_fs0 = var_fs1;
+ if (var_fs1 <= 7.0f) {
+ if (var_fs1 < 1.0f) {
+ var_fs0 = 1.0f;
+ }
+
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, D_i2_80195554[i]);
+ Matrix_Push(&gGfxMatrix);
+
+ Matrix_Translate(gGfxMatrix, 700.0f, 0.0f, -(1235.0f - ((var_fs0 - 1.0f) * 89.2f)), 1);
+
+ if (gGameFrameCount & 1) {
+ Matrix_Scale(gGfxMatrix, var_fs0, var_fs0, var_fs0, 1);
+ } else {
+ Matrix_Scale(gGfxMatrix, var_fs0 * 1.1f, var_fs0 * 1.1f, var_fs0 * 1.1f, 1);
+ }
+
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_6023810);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, -700.0f, 0.0f, -(1235.0f - ((var_fs0 - 1.0f) * 89.2f)), 1);
+
+ if (gGameFrameCount & 1) {
+ Matrix_Scale(gGfxMatrix, var_fs0, var_fs0, var_fs0, 1);
+ } else {
+ Matrix_Scale(gGfxMatrix, var_fs0 * 1.1f, var_fs0 * 1.1f, var_fs0 * 1.1f, 1);
+ }
+
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_6023810);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ }
+ }
+
+ if (boss->swork[0] > 0) {
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, 650.0f, 600.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ func_i2_8018B7C4(boss->swork[0] - 1);
+ Matrix_Pop(&gGfxMatrix);
+ }
+
+ if (boss->swork[1] > 0) {
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, -650.0f, 600.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ func_i2_8018B7C4(boss->swork[1] - 1);
+ Matrix_Pop(&gGfxMatrix);
+ }
+
+ gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
+}
+
+void func_i2_8018C77C(Actor* actor, s32 arg1) {
+ Actor_Initialize(actor);
+ actor->obj.status = 1;
+ actor->obj.id = OBJ_ACTOR_195;
+
+ actor->obj.pos.x = D_i2_80195584[arg1] + gPlayer[0].pos.x;
+ actor->obj.pos.y = D_i2_80195594[arg1] + gPlayer[0].pos.y;
+ actor->obj.pos.z = D_i2_801955A4[arg1] + gPlayer[0].unk_138;
+
+ actor->unk_0B6 = D_i2_801955B4[arg1];
+ actor->obj.rot.y = 180.0f;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ actor->info.unk_10 = 200.0f;
+
+ if (actor->unk_0B6 == 0) {
+ actor->iwork[11] = 1;
+ Audio_PlaySfx(0x3100000CU, &actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ return;
+ }
+
+ Audio_PlaySfx(0x11030010U, &actor->sfxPos, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x31024059U, &actor->sfxPos, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+void func_i2_8018C8F4(Actor* actor1, Actor* actor2) {
+ Actor_Initialize(actor1);
+ actor1->obj.status = 1;
+ actor1->obj.id = OBJ_ACTOR_182;
+
+ actor1->obj.pos.x = ((Rand_ZeroOneSeeded() - 0.5f) * 2000.0f) + actor2->obj.pos.x;
+ actor1->obj.pos.y = ((Rand_ZeroOneSeeded() - 0.5f) * 2000.0f) + actor2->obj.pos.y;
+ actor1->obj.pos.z = (((Rand_ZeroOneSeeded() - 0.5f) * 500.0f) + actor2->obj.pos.z) - 9000.0f;
+
+ actor1->obj.rot.y = Rand_ZeroOneSeeded() * 360.0f;
+ actor1->obj.rot.x = Rand_ZeroOneSeeded() * 360.0f;
+
+ actor1->timer_0C2 = 10000;
+ actor1->vel.z = 30.0f;
+ Object_SetInfo(&actor1->info, actor1->obj.id);
+}
+
+void func_i2_8018CA10(Actor* actor1, Actor* actor2, f32 x, f32 y, f32 z) {
+ Actor_Initialize(actor1);
+ actor1->obj.status = 1;
+ actor1->obj.id = OBJ_ACTOR_182;
+
+ actor1->obj.pos.x = actor2->obj.pos.x + x;
+ actor1->obj.pos.y = actor2->obj.pos.y + y;
+ actor1->obj.pos.z = actor2->obj.pos.x + z;
+
+ actor1->obj.rot.y = Rand_ZeroOneSeeded() * 360.0f;
+ actor1->obj.rot.x = Rand_ZeroOneSeeded() * 360.0f;
+
+ actor1->timer_0C2 = 0x2710;
+ actor1->vel.z = 30.0f;
+ Object_SetInfo(&actor1->info, actor1->obj.id);
+}
+
+void func_i2_8018CAD8(void) {
+ Actor* actor = &gActors[50];
+
+ Actor_Initialize(actor);
+ actor->obj.status = 1;
+ actor->obj.pos.x = 0.0f;
+ actor->obj.pos.y = 0.0f;
+ actor->obj.pos.z = 9000.0f;
+ actor->unk_0B6 = 10;
+ actor->obj.id = OBJ_ACTOR_195;
+ Object_SetInfo(&actor->info, actor->obj.id);
+}
+
+void func_i2_8018CB50(Effect* effect, Actor* actor) {
+ Effect_Initialize(effect);
+ effect->obj.status = 2;
+ effect->obj.id = OBJ_EFFECT_346;
+ effect->timer_50 = (s32) (Rand_ZeroOne() * 20.0f) + 20.0f;
+ effect->scale2 = (Rand_ZeroOne() * 0.5f) + 0.5f;
+
+ effect->obj.pos.x = actor->obj.pos.x;
+ effect->obj.pos.y = actor->obj.pos.y;
+ effect->obj.pos.z = actor->obj.pos.z;
+
+ effect->vel.x = (Rand_ZeroOne() - 0.5f) * 30.0f;
+ effect->vel.y = (Rand_ZeroOne() - 0.5f) * 30.0f;
+ effect->vel.z = (Rand_ZeroOne() - 0.5f) * 30.0f;
+
+ effect->obj.rot.z = Rand_ZeroOne() * 360.0f;
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i2_8018CCF8(Actor* actor) {
+ s32 i;
+ s32 j;
+
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+
+ for (i = 0; i < 25; ++i) {
+ for (j = 0; j < ARRAY_COUNT(gEffects); j++) {
+ if (gEffects[j].obj.status == 0) {
+ func_i2_8018CB50(&gEffects[j], actor);
+ break;
+ }
+ }
+ }
+}
+
+void func_i2_8018CD8C(Player* player) {
+ u8 sp8F;
+ s32 i;
+ Actor* actor0 = &gActors[0];
+ Actor* actor1 = &gActors[1];
+ Actor* actor2 = &gActors[2];
+ Actor* actor3 = &gActors[3];
+ f32 x;
+ f32 y;
+ f32 z;
+ f32 sp68;
+ f32 sp64;
+ Vec3f sp58;
+ Vec3f sp4C;
+
+ D_8017835C = 4;
+
+ PRINTF("Demo_Time %d\n");
+
+ switch (player->unk_1D0) {
+ case 0:
+ D_80177A80 = 0;
+
+ if (gTeamShields[1] > 0) {
+ func_i2_8018C77C(actor0, 0);
+ }
+ if (gTeamShields[2] > 0) {
+ func_i2_8018C77C(actor1, 1);
+ }
+ if (gTeamShields[3] > 0) {
+ func_i2_8018C77C(actor2, 2);
+ }
+
+ func_i2_8018C77C(actor3, 3);
+ func_i2_8018CAD8();
+
+ for (i = 5; i < 15; i++) {
+ func_i2_8018C8F4(&gActors[i], actor3);
+ }
+
+ D_80177A48[1] = -13000.0f;
+ D_80177A48[2] = -13000.0f;
+ D_80177A48[4] = -22000.0f;
+
+ player->camEye.x = D_80177978 = player->pos.x + 100.0f;
+ player->camEye.y = D_80177980 = player->pos.y;
+ player->camEye.z = D_80177988 = D_80177A48[1] + player->unk_138;
+
+ player->camAt.x = D_801779A0 = D_80177A48[2] + player->pos.x;
+ player->camAt.y = D_801779B8 = player->pos.y;
+ player->camAt.z = D_801779C0 = D_80177A48[4] + player->unk_138;
+
+ player->unk_1D0 = 1;
+
+ D_80177A48[3] = 1.0f;
+
+ case 1:
+ actor3->vel.z = 4.0f;
+ D_80177978 = player->pos.x + 100.0f;
+ D_80177980 = player->pos.y;
+ D_80177988 = D_80177A48[1] + player->unk_138;
+ D_801779A0 = D_80177A48[2] + player->pos.x;
+ D_801779B8 = player->pos.y + 20.0f;
+ D_801779C0 = D_80177A48[4] + player->unk_138;
+ Math_SmoothStepToF(&D_80177A48[1], 8000.0f, 0.05f, 20.0f, 0);
+ Math_SmoothStepToF(&D_80177A48[2], 0.0f, 0.05f, 25.0f, 0);
+ Math_SmoothStepToF(&D_80177A48[4], 0.0f, 0.05f, 200.0f, 0);
+ Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.05f, 0.3f, 0);
+
+ D_80177A48[0] = 0.1f;
+ if (D_80177A80 == 680) {
+ actor3->unk_0B8 = 10;
+ }
+ if (D_80177A80 == 720) {
+ actor0->unk_0B8 = 11;
+ }
+ if (D_80177A80 == 750) {
+ actor2->unk_0B8 = 12;
+ }
+ if (D_80177A80 == 780) {
+ actor1->unk_0B8 = 13;
+ }
+ if (D_80177A80 > 810) {
+ player->unk_1D0 = 2;
+ D_80177A48[0] = 0.0f;
+ player->timer_1F8 = 40;
+ }
+ sp8F = false;
+ if (D_80177A80 == 190) {
+ player->timer_1FC = 5;
+ player->unk_1D8 = 10;
+ sp8F = true;
+ }
+ if (D_80177A80 == 230) {
+ player->timer_1FC = 3;
+ player->unk_1D8 = 6;
+ sp8F = true;
+ }
+ if (D_80177A80 == 240) {
+ player->timer_1FC = 3;
+ player->unk_1D8 = 11;
+ sp8F = true;
+ }
+ if (D_80177A80 == 270) {
+ player->timer_1FC = 2;
+ player->unk_1D8 = 12;
+ sp8F = true;
+ }
+ if (D_80177A80 == 600) {
+ func_i2_8018CA10(&gActors[16], &gActors[3], 100.0f, 500.0f, 1500.0f);
+ func_i2_8018CA10(&gActors[17], &gActors[3], 300.0f, 400.0f, 2000.0f);
+ }
+ if (D_80177A80 == 660) {
+ for (i = 4; i < 15; i++) {
+ gActors[i].obj.status = 0;
+ }
+
+ actor3->obj.pos.x += 1000.0f;
+ actor3->obj.pos.z += 4000.0f;
+
+ for (i = 4; i < 9; i++) {
+ func_i2_8018C8F4(&gActors[i], &gActors[3]);
+ }
+
+ actor3->obj.pos.x -= 1000.0f;
+ actor3->obj.pos.z -= 4000.0f;
+
+ func_i2_8018CA10(&gActors[13], &gActors[3], 1500.0f, 200.0f, 100.0f);
+ func_i2_8018CA10(&gActors[14], &gActors[3], 1200.0f, -200.0f, -500.0f);
+ func_i2_8018CA10(&gActors[15], &gActors[3], 2000.0f, -100.0f, -1000.0f);
+
+ gActors[50].obj.status = gActors[16].obj.status = gActors[17].obj.status = 0;
+ }
+
+ if (D_80177A80 > 660) {
+ player->wings.unk_2C = 0;
+ }
+
+ if (D_80177A80 == 340) {
+ func_8007D2C8(gActors[8].obj.pos.x, gActors[8].obj.pos.y, gActors[8].obj.pos.z, 10.0f);
+ gActors[8].obj.status = 0;
+ func_i2_8018CCF8(&gActors[8]);
+ }
+
+ if (player->timer_1FC != 0) {
+ if (sp8F != 0) {
+ sp58 = D_i2_801955C4;
+ D_80177A48[3] *= -1.0f;
+ x = gActors[player->unk_1D8].obj.pos.x - (actor3->obj.pos.x + (D_80177A48[3] * 74.0f));
+ y = gActors[player->unk_1D8].obj.pos.y - (actor3->obj.pos.y - 232.0f);
+ z = gActors[player->unk_1D8].obj.pos.z - (actor3->obj.pos.z - 1190.0f);
+
+ sp64 = Math_RadToDeg(Math_Atan2F(x, z));
+ x = sqrtf((x * x) + (z * z));
+ sp68 = Math_RadToDeg(-Math_Atan2F(y, x));
+
+ Matrix_RotateY(gCalcMatrix, M_DTOR * sp64, 0);
+ Matrix_RotateX(gCalcMatrix, M_DTOR * sp68, 1);
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp58, &sp4C);
+
+ func_8006EFA0(100, actor3->obj.pos.x + (D_80177A48[3] * 74.0f) + (sp4C.x * 0.6f),
+ actor3->obj.pos.y - 232.0f + (sp4C.y * 0.8f),
+ actor3->obj.pos.z - 1190.0f + (sp4C.z * 0.8f), sp4C.x, sp4C.y, sp4C.z, sp68, sp64,
+ 0.0f);
+ }
+ if (player->timer_1FC == 1) {
+ func_8007D2C8(gActors[player->unk_1D8].obj.pos.x, gActors[player->unk_1D8].obj.pos.y,
+ gActors[player->unk_1D8].obj.pos.z, 10.0f);
+ gActors[player->unk_1D8].obj.status = 0;
+ func_i2_8018CCF8(&gActors[player->unk_1D8]);
+ Object_Kill(&gPlayerShots->obj, &gPlayerShots->sfxPos);
+ }
+ }
+ break;
+
+ case 2:
+ D_80177978 = player->pos.x;
+ D_80177980 = (player->pos.y * player->unk_148) + 50.0f;
+ D_80177988 = 400.0f;
+ D_801779A0 = player->pos.x;
+ D_801779B8 = (player->pos.y * player->unk_148) + 20.0f;
+ D_801779C0 = player->unk_138;
+
+ Math_SmoothStepToF(D_80177A48, 1.0f, 1.0f, 0.01f, 0.0f);
+
+ if (player->timer_1F8 == 0) {
+ func_8001D444(0, D_80177C90, 0, 0xFF);
+ D_80177838 = 80;
+ player->state_1C8 = PLAYERSTATE_1C8_3;
+ player->unk_1D0 = 0;
+ player->timer_1F8 = 0;
+ player->timer_1FC = 0;
+ player->camEye.x = player->pos.x;
+ player->camEye.y = (player->pos.y * player->unk_148) + 50.0f;
+ player->camEye.z = 400.0f;
+ player->camAt.x = player->pos.x;
+ player->camAt.y = (player->pos.y * player->unk_148) + 20.0f;
+ player->camAt.z = player->unk_138;
+
+ for (i = 0; i < 4; i++) {
+ Object_Kill(&gActors[i].obj, &gActors[i].sfxPos);
+ }
+
+ D_80178488 = 1;
+ break;
+ }
+ }
+
+ switch (D_80177A80) {
+ case 500:
+ if ((gTeamShields[2] > 0) && (gTeamShields[3] > 0)) {
+ func_800BA808(gMsg_ID_3005, RCID_SLIPPY);
+ }
+ break;
+
+ case 600:
+ if ((gTeamShields[2] > 0) && (gTeamShields[3] > 0)) {
+ func_800BA808(gMsg_ID_3010, RCID_PEPPY);
+ }
+ break;
+
+ case 700:
+ func_800BA808(gMsg_ID_3015, RCID_FOX);
+ break;
+ }
+
+ Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[0], 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], 20000.0f, 0.0f);
+}
+
+void func_i2_8018D9EC(Actor* actor) {
+ switch (actor->unk_0B8) {
+ case 0:
+ actor->fwork[0] = (Rand_ZeroOne() - 0.5f) * 10.0f;
+ actor->unk_0B8 = 1;
+
+ case 1:
+ actor->obj.rot.z += actor->fwork[0];
+ break;
+ }
+ func_i2_80187530(actor);
+}
+
+void func_i2_8018DA6C(Actor* actor) {
+ RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
+ gSPDisplayList(gMasterDisp++, D_6017AD0);
+}
+
+void func_i2_8018DAEC(Actor* actor) {
+ RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
+ gSPDisplayList(gMasterDisp++, D_6016240);
+}
+
+void func_i2_8018DB6C(Actor* actor) {
+ RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
+ gSPDisplayList(gMasterDisp++, D_600CD60);
+}
+
+void func_i2_8018DBEC(Effect* effect) {
+ if (effect->unk_4E == 1) {
+ Matrix_RotateX(gGfxMatrix, effect->obj.rot.x * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2, 1);
+ Matrix_RotateZ(gGfxMatrix, (M_PI / 2), 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, effect->unk_44);
+ gSPDisplayList(gMasterDisp++, D_60263F0);
+ }
+}
+
+void func_i2_8018DCE4(Effect* effect) {
+ if (effect->unk_4E != 0) {
+ Matrix_RotateX(gGfxMatrix, effect->obj.rot.x * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2 * 3.0f, 1);
+
+ if (gGameFrameCount & 1) {
+ Matrix_RotateZ(gGfxMatrix, M_PI, 1);
+ }
+
+ Matrix_RotateX(gGfxMatrix, -(M_PI / 2), 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 160, 255, 160, effect->unk_44);
+ gSPDisplayList(gMasterDisp++, D_102F5E0);
+ }
+}
+
+void func_i2_8018DE14(Effect* effect) {
+ Matrix_RotateX(gGfxMatrix, effect->obj.rot.x * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, effect->unk_44);
+
+ switch (effect->unk_4C) {
+ case 0:
+ gSPDisplayList(gMasterDisp++, D_6023810);
+ case 1:
+ break;
+ }
+}
+
+void func_i2_8018DF08(Actor* actor, s32 idx) {
+ Actor_Initialize(actor);
+ actor->obj.status = 1;
+ actor->obj.id = OBJ_ACTOR_195;
+
+ actor->obj.pos.x = D_i2_801955D0[idx].x + gPlayer[0].pos.x;
+ actor->obj.pos.y = D_i2_801955D0[idx].y + gPlayer[0].pos.y;
+ actor->obj.pos.z = D_i2_801955D0[idx].z + gPlayer[0].unk_138;
+
+ actor->unk_0F4.y = 0.0f;
+ actor->unk_0F4.z = D_i2_80195600[idx];
+
+ Object_SetInfo(&actor->info, actor->obj.id);
+
+ if (idx == 3) {
+ Audio_PlaySfx(0x11030010U, &actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x31024059U, &actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ actor->unk_0B6 = 1;
+ } else {
+ actor->iwork[11] = 1;
+ Audio_PlaySfx(0x3100000CU, &actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+}
+
+void func_i2_8018E084(Player* player) {
+ Vec3f src;
+ Vec3f dest;
+ s32 pad[5];
+
+ gBosses[1].obj.status = 0;
+
+ Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 15.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 3.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.1f, 3.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.1f, 3.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 3.0f, 0.0f);
+ Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 20.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_110, 0.0f, 0.1f, 3.0f, 0.0f);
+
+ switch (player->unk_1D0) {
+ case 0:
+ func_8001A38C(1, &player->unk_460);
+ player->unk_1D0++;
+
+ D_80177A48[0] = 0.0f;
+ D_80177A48[1] = 0.0f;
+ D_80177A48[2] = 0.0f;
+
+ player->wings.unk_2C = 1;
+
+ D_80177A80 = 0;
+
+ case 1:
+ Matrix_RotateY(gCalcMatrix, D_80177A48[1] * M_DTOR, 0);
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = D_80177A48[2] + 2000.0f;
+
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ D_80177978 = gBosses->obj.pos.x + dest.x;
+ D_80177980 = gBosses->obj.pos.y + dest.y;
+
+ D_80177988 = gBosses->obj.pos.z + D_80177D20 + dest.z;
+ D_801779A0 = gBosses->obj.pos.x;
+ D_801779B8 = gBosses->obj.pos.y;
+
+ D_801779C0 = gBosses->obj.pos.z + D_80177D20;
+
+ Math_SmoothStepToF(&D_80177A48[1], 180.0f, 0.05f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[2], 1500.0f, 0.1f, 10.0f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[0], 0.1f, 0.1f, 0.001f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0D0, 0.0f, 1.0f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&gBosses->vel.z, 0.0f, 1.0f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 3.0f, 0.0f);
+
+ if (D_80177A80 == 320) {
+ D_80177A80 = 200;
+ D_80177A48[0] = 0.0f;
+ D_80177A48[3] = 0.0f;
+ D_80177A48[4] = 0.0f;
+ player->unk_1D0++;
+ player->timer_1F8 = 100;
+ }
+ break;
+
+ case 2:
+ if (player->timer_1F8 == 0) {
+ Math_SmoothStepToF(&D_80177A48[3], 1.0f, 1.0f, 0.01f, 0.0f);
+ }
+ if (player->timer_1F8 == 50) {
+ func_8001D444(0, 0x26U, 0, 0xFFU);
+ }
+
+ Math_SmoothStepToF(&D_80177A48[1], 1080.0f, 0.01f, D_80177A48[3], 0.0f);
+
+ if (D_80177A80 < 500) {
+ Math_SmoothStepToF(&D_80177A48[2], -1700.0f, 0.1f, 30.0f, 0.0f);
+ } else if (D_80177A80 < 800) {
+ Math_SmoothStepToF(&D_80177A48[2], -1000.0f, 0.1f, 4.0f, 0.0f);
+ } else if (D_80177A80 < 1150) {
+ Math_SmoothStepToF(&D_80177A48[2], -1250.0f, 0.1f, 4.0f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&D_80177A48[2], -1500.0f, 0.1f, 4.0f, 0.0f);
+ }
+
+ if (D_80177A80 < 400) {
+ Math_SmoothStepToF(&D_80177A48[4], 0.0f, 0.03f, 0.2f, 0.0f);
+ } else if (D_80177A80 < 700) {
+ Math_SmoothStepToF(&D_80177A48[4], -40.0f, 0.03f, 0.4f, 0.0f);
+ } else if (D_80177A80 < 1100) {
+ Math_SmoothStepToF(&D_80177A48[4], 40.0f, 0.03f, 0.4f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&D_80177A48[4], 7.0f, 0.03f, 0.2f, 0.0f);
+ }
+
+ Math_SmoothStepToF(D_80177A48, 0.1f, 0.1f, 0.002f, 0.0f);
+
+ Matrix_RotateX(gCalcMatrix, D_80177A48[4] * M_DTOR, 0);
+ Matrix_RotateY(gCalcMatrix, D_80177A48[1] * M_DTOR, 1);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = D_80177A48[2] + 2000.0f;
+
+ Matrix_MultVec3f(gCalcMatrix, &src, &dest);
+
+ D_801779A0 = player->pos.x;
+ D_801779B8 = player->pos.y;
+ D_801779C0 = player->unk_138 + D_80177D20 + 150.0f;
+
+ if (D_80177A80 > 1390) {
+ player->unk_0D0 += 2.0f;
+ player->unk_0E4 += 0.1f;
+ player->unk_190 = 2.0f;
+
+ if (D_80177A80 == 1465) {
+ func_8001DBD0(20);
+ }
+
+ if (D_80177A80 > 1465) {
+ D_80178358 = 255;
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_8017835C = 8;
+ if (D_80178340 == 255) {
+ player->state_1C8 = PLAYERSTATE_1C8_6;
+ player->timer_1F8 = 0;
+ D_8017837C = 4;
+ D_800D3180[1] = Play_CheckMedalStatus(0xC8) + 1;
+ }
+ }
+ } else {
+ D_80177978 = player->pos.x + dest.x;
+ D_80177980 = player->pos.y + dest.y;
+ D_80177988 = player->unk_138 + D_80177D20 + 150.0f + dest.z;
+ }
+ break;
+ }
+
+ switch (D_80177A80) {
+ case 350:
+ Object_Kill(&gActors->obj, &gActors->sfxPos);
+ Object_Kill(&gActors[1].obj, &gActors[1].sfxPos);
+ Object_Kill(&gActors[2].obj, &gActors[2].sfxPos);
+
+ if (gTeamShields[1] > 0) {
+ func_i2_8018DF08(gActors, 0);
+ }
+ if (gTeamShields[2] > 0) {
+ func_i2_8018DF08(&gActors[1], 1);
+ }
+ if (gTeamShields[3] > 0) {
+ func_i2_8018DF08(&gActors[2], 2);
+ }
+ func_i2_8018DF08(&gActors[3], 3);
+ break;
+
+ case 370:
+ D_80177840 = 100;
+ break;
+
+ case 450:
+ func_800BA808(gMsg_ID_20010, RCID_FOX);
+ break;
+
+ case 538:
+ switch (gTeamShields[2]) {
+ case -1:
+ func_800BA808(gMsg_ID_20333, RCID_ROB64);
+ break;
+ case 0:
+ func_800BA808(gMsg_ID_20345, RCID_ROB64);
+ break;
+ default:
+ func_80048AC0(2);
+ break;
+ }
+ break;
+
+ case 685:
+ switch (gTeamShields[3]) {
+ case -1:
+ func_800BA808(gMsg_ID_20332, RCID_ROB64);
+ break;
+ case 0:
+ func_800BA808(gMsg_ID_20344, RCID_ROB64);
+ break;
+ default:
+ func_80048AC0(3);
+ break;
+ }
+ break;
+
+ case 831:
+ switch (gTeamShields[1]) {
+ case -1:
+ func_800BA808(gMsg_ID_20331, RCID_ROB64);
+ break;
+ case 0:
+ func_800BA808(gMsg_ID_20340, RCID_ROB64);
+ break;
+ default:
+ func_80048AC0(1);
+ break;
+ }
+ break;
+
+ case 976:
+ D_80177830 = 1;
+ break;
+
+ case 1176:
+ D_80177830 = 0;
+ break;
+
+ case 1300:
+ gActors->unk_0B8 = 1;
+ break;
+
+ case 1330:
+ gActors[1].unk_0B8 = 1;
+ break;
+
+ case 1360:
+ gActors[2].unk_0B8 = 1;
+ break;
+
+ case 1390:
+ Audio_PlaySfx(0x09000002U, &player->unk_460, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ player->unk_194 = 5.0f;
+ player->unk_190 = 5.0f;
+ break;
+
+ case 1400:
+ gActors[3].unk_0B8 = 1;
+ gActors[3].obj.pos.x = player->camEye.x - 700.0f;
+ gActors[3].obj.pos.y = player->camEye.y;
+ gActors[3].obj.pos.z = player->camEye.z - D_80177D20 + 1000.0f;
+ break;
+ }
+
+ Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], 50000.0f, 0);
+ Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], 50000.0f, 0);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], 50000.0f, 0);
+ Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[0], 50000.0f, 0);
+ Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], 50000.0f, 0);
+ Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], 50000.0f, 0);
+
+ Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, -((player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
+
+ src.x = 0.0f;
+ src.y = 0.0f;
+ src.z = player->unk_0D0 + player->unk_110;
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &src, &dest);
+
+ player->vel.x = dest.x;
+ player->vel.z = dest.z;
+ player->vel.y = dest.y;
+
+ player->pos.x += player->vel.x;
+ player->pos.y += player->vel.y;
+ player->pos.z += player->vel.z;
+
+ player->unk_138 = player->pos.z + player->unk_08C;
+ player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
+ player->unk_088 += 10.0f;
+ player->unk_080 = -__sinf(player->unk_088 * M_DTOR) * 0.3f;
+ player->unk_0F4 += 8.0f;
+ player->unk_0F0 = __sinf(player->unk_0F4 * M_DTOR);
+}
+
+void func_i2_8018ED9C(Actor* actor) {
+ Vec3f sp3C;
+ Vec3f sp30;
+
+ switch (actor->unk_0B8) {
+ case 0:
+ actor->vwork[0].x = D_i2_80195610[actor->index].x + gPlayer->pos.x;
+ actor->vwork[0].y = D_i2_80195610[actor->index].y + gPlayer->pos.y;
+ actor->vwork[0].z = D_i2_80195610[actor->index].z + gPlayer->pos.z;
+
+ Math_SmoothStepToF(&actor->obj.pos.x, actor->vwork[0].x, 0.02f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&actor->obj.pos.y, actor->vwork[0].y, 0.02f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&actor->obj.pos.z, actor->vwork[0].z, 0.02f, 50.0f, 0.0001f);
+ Math_SmoothStepToF(&actor->unk_0F4.z, 0.0f, 0.03f, 0.5f, 0.0001f);
+ break;
+
+ case 1:
+ actor->unk_0B8 = 2;
+ Audio_PlaySfx(0x09000002U, &actor->sfxPos, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ actor->timer_0BC = 0x96;
+ actor->fwork[29] = 5.0f;
+
+ case 2:
+ actor->iwork[11] = 2;
+ actor->fwork[0] += 2.0f;
+ actor->unk_0F4.x += 0.1f;
+ if (actor->timer_0BC == 0) {
+ Object_Kill(&actor->obj, &actor->sfxPos);
+ }
+ break;
+ }
+
+ Matrix_RotateY(gCalcMatrix, (actor->unk_0F4.y + 180.0f) * M_DTOR, 0U);
+ Matrix_RotateX(gCalcMatrix, -(actor->unk_0F4.x * M_DTOR), 1U);
+
+ sp3C.x = 0.0f;
+ sp3C.y = 0.0f;
+ sp3C.z = actor->fwork[0];
+
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp3C, &sp30);
+
+ actor->vel.x = sp30.x;
+ actor->vel.y = sp30.y;
+ actor->vel.z = sp30.z;
+
+ actor->obj.rot.x = -actor->unk_0F4.x;
+ actor->obj.rot.y = actor->unk_0F4.y + 180.0f;
+ actor->obj.rot.z = -actor->unk_0F4.z;
+}
diff --git a/src/overlays/ovl_i3/sf_so.c b/src/overlays/ovl_i3/sf_so.c
index 29f27b5b..5422face 100644
--- a/src/overlays/ovl_i3/sf_so.c
+++ b/src/overlays/ovl_i3/sf_so.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "prevent_bss_reordering.h"
typedef void (*BossSOfunc)(Boss*);
diff --git a/src/overlays/ovl_i4/fox_ka.c b/src/overlays/ovl_i4/fox_ka.c
index 14b33d65..99b2b1ca 100644
--- a/src/overlays/ovl_i4/fox_ka.c
+++ b/src/overlays/ovl_i4/fox_ka.c
@@ -1,4 +1,4 @@
-#include "common.h"
+#include "global.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i4/fox_ka/func_i4_801927E0.s")
diff --git a/src/overlays/ovl_i6/fox_sy.c b/src/overlays/ovl_i6/fox_sy.c
index dac77c8a..98a3b95f 100644
--- a/src/overlays/ovl_i6/fox_sy.c
+++ b/src/overlays/ovl_i6/fox_sy.c
@@ -1,22 +1,331 @@
-#include "common.h"
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197B30.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197C64.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197CB8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197CC4.s")
-
+#include "global.h"
+
+extern Gfx D_6014A40[];
+extern u16* D_60342A0[];
+extern u16* D_6034304[];
+
+void func_i6_80197F18(Boss*);
+void func_i6_80198244(Boss*);
+void func_i6_80198ABC(Boss*);
+void func_i6_80199D64(Boss*);
+void func_i6_8019AA08(Boss*);
+void func_i6_8019AEC0(Boss*);
+s32 func_i6_8019B528(Boss*);
+s32 func_i6_8019B5CC(Boss*);
+void func_i6_8019B6E8(Boss*);
+void func_i6_8019BC14(Boss*);
+void func_i6_8019C194(Boss*, f32, f32);
+
+void func_i6_80197B30(Actor* actor, s32 timer) {
+ Actor_Initialize(actor);
+ actor->obj.status = 2;
+ actor->obj.id = 0xC3;
+
+ actor->obj.pos.x = gPlayer->pos.x;
+ actor->obj.pos.y = gPlayer->pos.y;
+ actor->obj.pos.z = gPlayer->pos.z;
+
+ actor->fwork[0] = gPlayer->unk_0D0;
+
+ actor->vel.x = gPlayer->vel.x;
+ actor->vel.y = gPlayer->vel.y;
+ actor->vel.z = gPlayer->vel.z;
+
+ actor->obj.rot.x = gPlayer->unk_4D8 + (gPlayer->unk_120 + gPlayer->unk_0E4);
+ actor->obj.rot.y = gPlayer->unk_0E8 + gPlayer->unk_114 + 180.0f;
+ actor->obj.rot.z = gPlayer->unk_0EC;
+
+ actor->unk_0B8 = 5;
+ actor->timer_04C = timer;
+ actor->iwork[11] = 1;
+
+ Object_SetInfo(&actor->info, actor->obj.id);
+ Audio_PlaySfx(0x3100000CU, &actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+void func_i6_80197C64(Effect* effect) {
+ RCP_SetupDL_21();
+ gSPDisplayList(gMasterDisp++, D_6014A40);
+ RCP_SetupDL(&gMasterDisp, 0x40);
+}
+
+void func_i6_80197CB8(Object_80* obj80) {
+}
+
+void func_i6_80197CC4(Boss* boss) {
+ boss->fwork[9] = 0.0f;
+ boss->swork[33] = 5500;
+ boss->timer_050 = 10;
+ boss->timer_058 = 0;
+ D_80177A10[8] = 0;
+
+ if (boss->index == 0) {
+ boss->info.hitbox = SEGMENTED_TO_VIRTUAL(D_60342A0);
+ boss->health = 150;
+ boss->swork[28] = 5;
+ boss->fwork[43] = 3.5f;
+ boss->fwork[45] = 40.0f;
+
+ if (gPlayer->state_1C8 == PLAYERSTATE_1C8_9) {
+ boss->obj.pos.z = -28900.0f;
+ gObjects58->obj.pos.z = -30000.0f;
+ }
+
+ boss->unk_078.y = 0.0f;
+ func_i6_8019AEC0(boss);
+ } else {
+ boss->fwork[34] = 2.8f;
+ boss->info.hitbox = SEGMENTED_TO_VIRTUAL(D_6034304);
+
+ boss->health = 100;
+ boss->swork[28] = 0;
+ boss->swork[25] = 1;
+ boss->fwork[45] = 35.0f;
+
+ if (boss->index == 1) {
+ boss->unk_078.y = 15.0f;
+ } else {
+ boss->unk_078.y = 345.0f;
+ }
+
+ boss->vel.x = __sinf(boss->unk_078.y * M_DTOR);
+ boss->vel.x = (boss->fwork[45] * boss->vel.x) * 0.2f;
+ boss->vel.z = __cosf(boss->unk_078.y * M_DTOR);
+ boss->vel.z = (boss->fwork[45] * boss->vel.z) * 0.2f;
+
+ func_i6_80198244(boss);
+ boss->timer_056 = 0xFA;
+ }
+
+ if (gLevelMode == LEVELMODE_ON_RAILS) {
+ if (gPlayer->state_1C8 == PLAYERSTATE_1C8_3) {
+ gPlayer->state_1C8 = PLAYERSTATE_1C8_9;
+ gPlayer->unk_1D0 = 0;
+ func_800182F4(0x103200FF);
+ func_800182F4(0x113200FF);
+ }
+ Object_Kill(&boss->obj, &boss->sfxPos);
+ }
+}
+
+// figure out arg0 type
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197F18.s")
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80197F84.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80198238.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80198244.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_801983E4.s")
+void func_i6_80197F84(Boss* boss) {
+ f32 var_fv1;
+
+ Math_SmoothStepToF(&boss->obj.pos.y, 0.0f, 0.5f, 15.0f, 0.1f);
+ Math_SmoothStepToF(&boss->vel.y, 0.0f, 0.1f, 0.2f, 0.1f);
+ Math_SmoothStepToF(&boss->vel.z, 0.0f, 0.1f, 0.2f, 0.1f);
+ Math_SmoothStepToF(&boss->vel.x, 0.0f, 0.1f, 0.2f, 0.1f);
+ Math_SmoothStepToAngle(&boss->unk_078.x, 0.0f, 0.1f, 4.0f, 0.1f);
+
+ if (func_i6_8019B5CC(boss) != 0) {
+ Math_SmoothStepToF(&boss->obj.pos.y, 1000.0f, 0.1f, 30.0f, 0.1f);
+ } else {
+ Math_SmoothStepToF(&boss->obj.pos.y, 0.0f, 0.1f, 10.0f, 0.1f);
+ }
+
+ func_i6_8019B6E8(boss);
+ if (boss->timer_052 == 0) {
+ func_i6_8019BC14(boss);
+ }
+
+ Math_SmoothStepToAngle(
+ &boss->unk_078.y,
+ Math_RadToDeg(Math_Atan2F(boss->fwork[18] - boss->obj.pos.x, boss->fwork[20] - boss->obj.pos.z)), 0.1f, 8.0f,
+ 0.1f);
+
+ if (boss->timer_050 == 0) {
+ func_i6_80198244(boss);
+ }
+
+ if (boss->swork[22] == 1) {
+ if (boss->vel.x >= 0) {
+ var_fv1 = boss->vel.x;
+ } else {
+ var_fv1 = -boss->vel.x;
+ }
+
+ if (var_fv1 <= 1.0f) {
+ if (boss->vel.z >= 0) {
+ var_fv1 = boss->vel.z;
+ } else {
+ var_fv1 = -boss->vel.z;
+ }
+
+ if (((var_fv1 <= 1.0f) && (fabsf(boss->fwork[18] - boss->obj.pos.x) <= 400.0f)) &&
+ (fabsf(boss->fwork[20] - boss->obj.pos.z) <= 1400.0f)) {
+ if ((Rand_ZeroOne() < 0.2f) && (boss->unk_078.x == 0.0f)) {
+ func_i6_8019AA08(boss);
+ }
+ if (Rand_ZeroOne() < 0.2f) {
+ func_i6_80198244(boss);
+ }
+ }
+ }
+ }
+
+ if (func_i6_8019B528(boss) != 0) {
+ func_i6_80198ABC(boss);
+ }
+}
+
+void func_i6_80198238(s32 arg0) {
+}
+
+void func_i6_80198244(Boss* boss) {
+ f32 var_fv0;
+
+ boss->swork[20] = 3;
+ boss->swork[21] = 1;
+ boss->timer_056 = (Rand_ZeroOne() * 500.0f) + 100.0f;
+ boss->fwork[11] = __sinf(boss->unk_078.y * M_DTOR) * boss->fwork[0x2D];
+ boss->fwork[13] = __cosf(boss->unk_078.y * M_DTOR) * boss->fwork[0x2D];
+
+ if (boss->vel.x >= 0) {
+ var_fv0 = boss->vel.x;
+ } else {
+ var_fv0 = -boss->vel.x;
+ }
+
+ if (var_fv0 < 5.0f) {
+ Math_SmoothStepToF(&boss->vel.x, boss->fwork[11], 0.1f, 5.0f, 0.1f);
+ }
+
+ if (boss->vel.z >= 0) {
+ var_fv0 = boss->vel.z;
+ } else {
+ var_fv0 = -boss->vel.z;
+ }
+
+ if (var_fv0 < 5.0f) {
+ Math_SmoothStepToF(&boss->vel.z, boss->fwork[13], 0.1f, 5.0f, 0.1f);
+ }
+
+ boss->fwork[10] = 181.0f;
+ boss->fwork[34] = 2.8f;
+ Audio_PlaySfx(0x2902306CU, &boss->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+void func_i6_801983E4(Boss* boss) {
+ f32 var_fv1;
+ f32 sp38;
+ f32 sp34;
+
+ func_i6_8019B6E8(boss);
+
+ if (boss->timer_052 == 0) {
+ func_i6_8019BC14(boss);
+ }
+
+ Math_SmoothStepToAngle(&boss->unk_078.z, 0.0f, 0.1f, 2.0f, 0.1f);
+ Math_SmoothStepToAngle(&boss->unk_078.x, 0.0f, 0.1f, 2.0f, 0.1f);
+ Math_SmoothStepToF(&boss->vel.x, boss->fwork[11], 0.1f, 0.5f, 0.1f);
+ Math_SmoothStepToF(&boss->vel.z, boss->fwork[13], 0.1f, 0.5f, 0.1f);
+ Math_SmoothStepToF(&boss->vel.y, 0.0f, 0.1f, 0.2f, 0.1f);
+
+ if (boss->obj.pos.x <= boss->fwork[18]) {
+ sp38 = boss->fwork[18] - boss->obj.pos.x;
+ } else {
+ sp38 = -(boss->fwork[18] - boss->obj.pos.x);
+ }
+
+ if (boss->obj.pos.z <= boss->fwork[20]) {
+ sp34 = boss->fwork[20] - boss->obj.pos.z;
+ } else {
+ sp34 = -(boss->fwork[20] - boss->obj.pos.z);
+ }
+
+ if (boss->unk_078.x != 0.0f) {
+ Math_SmoothStepToAngle(&boss->unk_078.x, boss->fwork[10], 0.1f, 6.0f, 0.1f);
+ if (boss->unk_078.x < 200.0f) {
+ boss->swork[21] = 1;
+ boss->unk_078.y -= 180.0f;
+ boss->unk_078.z -= 180.0f;
+ boss->fwork[10] = 0.0f;
+ boss->unk_078.x = 0.0f;
+
+ if (boss->unk_078.y < 0.0f) {
+ boss->unk_078.y = boss->unk_078.y + 360.0f;
+ }
+ if (boss->unk_078.z < 0.0f) {
+ boss->unk_078.z = boss->unk_078.z + 360.0f;
+ }
+
+ boss->fwork[11] = __sinf(boss->unk_078.y * M_DTOR) * boss->fwork[45];
+ boss->fwork[13] = __cosf(boss->unk_078.y * M_DTOR) * boss->fwork[45];
+ boss->fwork[34] = 2.8f;
+ }
+ }
+
+ func_i6_8019C194(boss, sp34, sp38);
+
+ if (boss->swork[0x16] == 1) {
+ var_fv1 = gPlayer->unk_114 - 180.0f;
+ if (var_fv1 < 0.0f) {
+ var_fv1 += 360.0f;
+ }
+
+ var_fv1 = boss->unk_078.y - var_fv1;
+ if (var_fv1 < 0.0f) {
+ var_fv1 += 360.0f;
+ }
+
+ if ((sp34 <= 1300.0f) && (sp38 <= 800.0f) && (var_fv1 < 260.0f) && (var_fv1 > 100.0f) &&
+ (boss->unk_078.x == 0.0f) && (boss->fwork[34] <= 2.0f)) {
+ if (Rand_ZeroOne() < 0.2f) {
+ func_i6_8019AA08(boss);
+ }
+ }
+
+ if ((sp34 < 3400.0f) || (sp38 < 2400.0f)) {
+ if (((var_fv1 >= 60.0f) && (var_fv1 <= 100.0f)) || ((var_fv1 <= 300.0f) && (var_fv1 >= 260.0f))) {
+ if (Rand_ZeroOne() < 0.3f) {
+ if (Rand_ZeroOne() < 0.4f) {
+ func_i6_80197F18(boss);
+ } else {
+ func_i6_80199D64(boss);
+ }
+ }
+ }
+
+ if (((var_fv1 > 300.0f) || (var_fv1 < 60.0f)) && (boss->unk_078.x == 0.0f)) {
+ if (Rand_ZeroOne() < 0.3f) {
+ if (Rand_ZeroOne() < 0.4f) {
+ func_i6_80197F18(boss);
+ } else {
+ func_i6_80199D64(boss);
+ }
+ } else if (gPlayer->state_1C8 != PLAYERSTATE_1C8_5) {
+ Math_SmoothStepToAngle(&boss->unk_078.x, 181.0f, 0.1f, 6.0f, 0.1f);
+ boss->swork[21] = 3;
+ boss->fwork[11] = __sinf(boss->unk_078.y * M_DTOR) * (boss->fwork[45] + 10.0f);
+ boss->fwork[13] = __cosf(boss->unk_078.y * M_DTOR) * (boss->fwork[45] + 10.0f);
+ boss->fwork[34] = 2.8f;
+ }
+ }
+ }
+ }
+
+ if (func_i6_8019B5CC(boss) != 0) {
+ Math_SmoothStepToF(&boss->obj.pos.y, 1000.0f, 0.1f, 30.0f, 0.1f);
+ } else {
+ Math_SmoothStepToF(&boss->obj.pos.y, 0.0f, 0.1f, 5.0f, 0.1f);
+ }
+
+ if (boss->timer_056 == 0) {
+ if (Rand_ZeroOne() <= 0.7f) {
+ func_i6_80199D64(boss);
+ } else {
+ func_i6_80197F18(boss);
+ }
+ }
+
+ if (func_i6_8019B528(boss) != 0) {
+ func_i6_80198ABC(boss);
+ }
+}
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/fox_sy/func_i6_80198ABC.s")
diff --git a/src/overlays/ovl_menu/fox_title.c b/src/overlays/ovl_menu/fox_title.c
index 9e6963f2..0ae72330 100644
--- a/src/overlays/ovl_menu/fox_title.c
+++ b/src/overlays/ovl_menu/fox_title.c
@@ -11,15 +11,18 @@ extern AnimationHeader D_602F8E0;
extern AnimationHeader D_60305C0;
extern AnimationHeader D_6031DB8;
extern AnimationHeader D_6031120;
-extern AnimationHeader D_60338DC;
extern AnimationHeader D_6035024;
+extern AnimationHeader D_60338DC;
extern AnimationHeader D_603531C;
extern AnimationHeader D_6036278;
extern SkelAnime D_602FBAC[];
extern SkelAnime D_603088C[];
-extern SkelAnime D_60313AC[];
extern SkelAnime D_6032084[];
+extern SkelAnime D_60313AC[];
+
+extern Gfx D_6036290[];
+extern Gfx D_6036B30[];
f32 D_menu_801B7BB0;
f32 D_menu_801B7BB4;
@@ -157,14 +160,14 @@ f32 D_menu_801B9084;
//! TODO: Symbols for segmented addresses
Animation D_menu_801ADA00[4] = {
- { (AnimationHeader*) 0x0602F8E0, (AnimationHeader*) 0x06035024, (SkelAnime*) 0x0602FBAC },
- { (AnimationHeader*) 0x060305C0, (AnimationHeader*) 0x060338DC, (SkelAnime*) 0x0603088C },
- { (AnimationHeader*) 0x06031DB8, (AnimationHeader*) 0x0603531C, (SkelAnime*) 0x06032084 },
- { (AnimationHeader*) 0x06031120, (AnimationHeader*) 0x06036278, (SkelAnime*) 0x060313AC },
+ { &D_602F8E0, &D_6035024, D_602FBAC },
+ { &D_60305C0, &D_60338DC, D_603088C },
+ { &D_6031DB8, &D_603531C, D_6032084 },
+ { &D_6031120, &D_6036278, D_60313AC },
};
u16* D_menu_801ADA30[5] = {
- (u16*) 0x8017A150, (u16*) 0x8017A190, (u16*) 0x8017A1CC, (u16*) 0x8017A210, (u16*) 0x8017A260,
+ gMsg_ID_10, gMsg_ID_20, gMsg_ID_30, gMsg_ID_40, gMsg_ID_50,
};
void func_menu_801875E0(void) {
@@ -2953,8 +2956,8 @@ void func_menu_8018FD08(void) {
}
static Gfx* D_menu_801AE48C[12] = {
- (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036B30, (Gfx*) 0x06036290,
- (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036290, (Gfx*) 0x06036B30, (Gfx*) 0x06036290,
+ D_6036290, D_6036290, D_6036290, D_6036290, D_6036B30, D_6036290,
+ D_6036290, D_6036290, D_6036290, D_6036290, D_6036B30, D_6036290,
};
static f32 D_menu_801AE4BC[12] = {
diff --git a/yamls/us/main.yaml b/yamls/us/main.yaml
index 198274e7..815d6cc5 100644
--- a/yamls/us/main.yaml
+++ b/yamls/us/main.yaml
@@ -185,7 +185,7 @@
- [0x77E40, c, fox_effect]
- [0x84F70, c, fox_fade]
- [0x852F0, c, fox_852F0]
- - [0x85530, c, sf_hud]
+ - [0x85530, c, fox_hud]
- [0x97F80, c, fox_97F80]
- [0x9A580, c, fox_std_lib]
- [0xA24B0, c, fox_game]
@@ -276,7 +276,7 @@
- [0xD09A0, .data, fox_enmy]
- [0xD0B80, .data, fox_enmy2]
- [0xD20E0, .data, fox_effect]
- - [0xD2570, data, sf_hud]
+ - [0xD2570, .data, fox_hud]
- [0xD31D0, .data, fox_std_lib]
- [0xD3460, .data, fox_game]
- [0xD3520, .data, fox_A4290]
@@ -301,7 +301,7 @@
- [0xD7650, .rodata, fox_enmy2]
- [0xD7E30, .rodata, fox_effect]
- [0xD82F0, .rodata, fox_fade]
- - [0xD8320, .rodata, sf_hud]
+ - [0xD8320, .rodata, fox_hud]
- [0xD8DE0, .rodata, fox_97F80]
- [0xD8DF0, .rodata, fox_std_lib]
- [0xD8E50, .rodata, fox_game]
@@ -364,7 +364,7 @@
- { start: 0xDE480, type: .bss, vram: 0x801615D0, name: fox_edisplay }
- { start: 0xDE480, type: .bss, vram: 0x80161670, name: fox_enmy }
- { start: 0xDE480, type: .bss, vram: 0x80161690, name: fox_enmy2 }
- - { start: 0xDE480, type: bss, vram: 0x801616A0, name: sf_hud }
+ - { start: 0xDE480, type: .bss, vram: 0x801616A0, name: fox_hud }
- { start: 0xDE480, type: .bss, vram: 0x80161950, name: fox_97F80 }
- { start: 0xDE480, type: .bss, vram: 0x801619A0, name: fox_std_lib }
- { start: 0xDE480, type: .bss, vram: 0x80161A10, name: fox_game }
diff --git a/yamls/us/overlays.yaml b/yamls/us/overlays.yaml
index 1b2c69ab..4607becc 100644
--- a/yamls/us/overlays.yaml
+++ b/yamls/us/overlays.yaml
@@ -37,7 +37,7 @@
- [0xE08410, c, fox_me]
- [0xE0FF10, c, fox_sx]
- [0xE16300, .data, fox_i2]
- - [0xE16310, data, fox_me]
+ - [0xE16310, .data, fox_me]
- [0xE16520, .data, fox_sx]
- [0xE16670, .rodata, fox_me]
- [0xE16930, .rodata, fox_sx]