summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinspectredc <78732756+inspectredc@users.noreply.github.com>2024-01-23 15:49:43 +0000
committerGitHub <noreply@github.com>2024-01-23 12:49:43 -0300
commit8f794a6335e253bb56b94db1866d8dec7d5c6c78 (patch)
tree7c78dadcbf2bec57164884dc6e5c2d9b0ed934eb
parent119dfa93545a3b2023e1b1fe35b624d68d8893bf (diff)
sf_i6_2 decompiled (#104)
* sf_i6_2 * use macro * suggestion macros Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * decimal suggestion Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * file rename --------- Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>
-rw-r--r--include/functions.h2
-rw-r--r--linker_scripts/us/symbol_addrs_overlays.txt2
-rw-r--r--src/overlays/ovl_i6/fox_andross.c4122
-rw-r--r--src/overlays/ovl_i6/fox_ve2.c4315
-rw-r--r--src/overlays/ovl_i6/sf_i6_2.c17
-rw-r--r--yamls/us/overlays.yaml14
6 files changed, 4467 insertions, 4005 deletions
diff --git a/include/functions.h b/include/functions.h
index 7d4146f8..4a067131 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -46,6 +46,7 @@ void func_8001D1C8(u8, u32);
void func_8001D2FC(f32 *, u16);
void func_8001D3A0(f32 *, u16);
void func_8001D400(s8);
+void func_8001D410(s32);
void func_8001D444(u8, u16, u8, u8);
void func_8001D4AC(u16, u8, u8, u8);
void func_8001D520(void);
@@ -111,6 +112,7 @@ void func_8002E700(Player *);
void func_8002EE64(Actor * actor);
void func_8002F180(void);
void func_8002F5F4(u16* msg, RadioCharacterId character);
+void func_8002F69C(Actor*);
void func_8003088C(Actor*);
void func_800319AC(Actor* this);
void func_80035448(Actor* actor);
diff --git a/linker_scripts/us/symbol_addrs_overlays.txt b/linker_scripts/us/symbol_addrs_overlays.txt
index 80a8b58a..b613134a 100644
--- a/linker_scripts/us/symbol_addrs_overlays.txt
+++ b/linker_scripts/us/symbol_addrs_overlays.txt
@@ -137,6 +137,8 @@ D_i5_801BE2A4 = 0x801BE2A4;
func_i6_801888F4 = 0x801888F4;
func_i6_80197CC4 = 0x80197CC4;
func_i6_8018D16C = 0x8018D16C;
+D_i6_801A68B0 = 0x801A68B0;//size:0x48 type:Vec3f segment:ovl_i6
+D_i6_801A68F8 = 0x801A68F8;//size:0xC type:f32 segment:ovl_i6
D_i6_801A7F30 = 0x801A7F30;
D_i6_801A7F58 = 0x801A7F58;
D_i6_801A7F60 = 0x801A7F60;
diff --git a/src/overlays/ovl_i6/fox_andross.c b/src/overlays/ovl_i6/fox_andross.c
new file mode 100644
index 00000000..44ecf33c
--- /dev/null
+++ b/src/overlays/ovl_i6/fox_andross.c
@@ -0,0 +1,4122 @@
+#include "prevent_bss_reordering.h"
+#include "global.h"
+
+f32 D_i6_801A7F40;
+f32 D_i6_801A7F44;
+f32 D_i6_801A7F48;
+f32 D_i6_801A7F4C;
+f32 D_i6_801A7F50;
+f32 D_i6_801A7F54;
+f32 D_i6_801A7F58;
+f32 D_i6_801A7F5C;
+f32 D_i6_801A7F60;
+f32 D_i6_801A7F64;
+f32 D_i6_801A7F68;
+f32 D_i6_801A7F6C;
+f32 D_i6_801A7F70;
+f32 D_i6_801A7F74;
+f32 D_i6_801A7F78;
+f32 D_i6_801A7F7C;
+Vec3f D_i6_801A7F80[100];
+f32 D_i6_801A8430;
+
+static f32* D_i6_801A6760[12] = {
+ D_C037FCC, D_C0380C0, D_C0381B4, D_C0382A8, D_C03839C, D_C038490,
+ D_C038584, D_C038678, D_C03876C, D_C038860, D_C038954, D_C038954,
+};
+
+void func_i6_80187530(Actor* actor) {
+ s32 index;
+
+ switch (actor->unk_048) {
+ case 0:
+ break;
+ case 1:
+ actor->unk_0B6 += (s32) actor->fwork[22];
+ if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6014658)) {
+ actor->unk_0B6 = Animation_GetFrameCount(&D_6014658) - 1;
+ }
+ break;
+ case 2:
+ actor->unk_0B6 -= (s32) actor->fwork[22];
+ if (actor->unk_0B6 <= 0) {
+ actor->unk_0B6 = 0;
+ }
+ break;
+ default:
+ break;
+ }
+
+ index = actor->unk_0B6 / 18.0f;
+ actor->info.hitbox = SEGMENTED_TO_VIRTUAL(D_i6_801A6760[index]);
+ actor->obj.rot.z = D_i6_801A7F68;
+}
+
+s32 func_i6_8018767C(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
+ if (limbIndex == 13) {
+ *dList = NULL;
+ }
+ return 0;
+}
+
+extern Limb* D_6014844[];
+
+void func_i6_8018769C(Actor* actor) {
+ Vec3f sp28[20];
+
+ Animation_GetFrameData(&D_6014658, actor->unk_0B6, sp28);
+ Animation_DrawSkeleton(1, D_6014844, sp28, func_i6_8018767C, NULL, NULL, &gIdentityMatrix);
+}
+
+extern u32 D_C039290[];
+extern u32 D_C03A290[];
+
+void func_i6_801876FC(void) {
+ f32 temp_ft3;
+ s32* var_s0;
+ s32* var_s3;
+ s32 i;
+ s32 j;
+
+ var_s0 = SEGMENTED_TO_VIRTUAL(&D_C039290);
+ var_s3 = SEGMENTED_TO_VIRTUAL(&D_C03A290);
+
+ for (i = 0; i < 1024; i += 32) {
+ temp_ft3 = 4.0f * __sinf(((((i / 32) + (((s32) gGameFrameCount) / 2)) & 0x1F)) * (M_PI / 16.0f));
+
+ for (j = 0; j < 32; j++) {
+ var_s0[i + ((((s32) temp_ft3) + j) & 0x1F)] = var_s3[i + j];
+ }
+ }
+}
+
+extern ObjectInit D_C0356CC[];
+extern f32 D_C038CCC[];
+
+void func_i6_801878A8() {
+ Actor* actor;
+ Item* item;
+ Object_58* obj58;
+ s32 i;
+
+ D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C0356CC);
+
+ for (obj58 = gObjects58, i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+
+ if (D_80178310[i].id <= OBJ_80_160) {
+ func_800A4F4C(obj58);
+ obj58->obj.status = OBJ_ACTIVE;
+ obj58->obj.id = D_80178310[i].id;
+ obj58->obj.pos.x = D_80178310[i].xPos;
+ obj58->obj.pos.z = -D_80178310[i].zPos1;
+ obj58->obj.pos.z += D_80178310[i].zPos2;
+ obj58->obj.pos.y = D_80178310[i].yPos;
+ obj58->obj.rot.y = D_80178310[i].rot.y;
+ Object_SetInfo(&obj58->info, obj58->obj.id);
+ if (obj58->obj.id == OBJ_80_131) {
+ obj58->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038CCC);
+ }
+ obj58++;
+ }
+ }
+
+ for (actor = &gActors[1], i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+
+ if ((D_80178310[i].id <= OBJ_ACTOR_291) && (D_80178310[i].id >= OBJ_ACTOR_176)) {
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_ACTIVE;
+ actor->obj.id = D_80178310[i].id;
+ actor->obj.pos.x = D_80178310[i].xPos;
+ actor->obj.pos.z = -D_80178310[i].zPos1;
+ actor->obj.pos.z += D_80178310[i].zPos2;
+ actor->obj.pos.y = D_80178310[i].yPos;
+ actor->obj.rot.y = D_80178310[i].rot.y;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ actor++;
+ }
+ }
+
+ for (item = gItems, i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+ if ((D_80178310[i].id <= OBJ_ITEM_TRAINING_RING) && (D_80178310[i].id >= OBJ_ITEM_LASERS)) {
+ Item_Initialize(item);
+ item->obj.status = OBJ_ACTIVE;
+ item->obj.id = D_80178310[i].id;
+ item->obj.pos.x = D_80178310[i].xPos;
+ item->obj.pos.z = -D_80178310[i].zPos1;
+ item->obj.pos.z += D_80178310[i].zPos2;
+ item->obj.pos.y = D_80178310[i].yPos;
+ Object_SetInfo(&item->info, item->obj.id);
+ item++;
+ }
+ }
+}
+
+extern ObjectInit* D_C036310;
+extern ObjectInit* D_C036B6C;
+extern ObjectInit* D_C03733C;
+
+void func_i6_80187C5C(void) {
+ Actor* actor;
+ Item* item;
+ Object_58* obj58;
+ s32 i;
+
+ switch ((s32) (Rand_ZeroOne() * 2.9f)) {
+ case 0:
+ D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C036310);
+ break;
+ case 1:
+ D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C036B6C);
+ break;
+ default:
+ case 2:
+ D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C03733C);
+ break;
+ }
+
+ for (obj58 = gObjects58, i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+
+ if (D_80178310[i].id <= OBJ_80_160) {
+ func_800A4F4C(obj58);
+ obj58->obj.status = OBJ_ACTIVE;
+ obj58->obj.id = D_80178310[i].id;
+ obj58->obj.pos.x = D_80178310[i].xPos;
+ obj58->obj.pos.z = -D_80178310[i].zPos1;
+ obj58->obj.pos.z += D_80178310[i].zPos2;
+ obj58->obj.pos.y = D_80178310[i].yPos;
+ obj58->obj.rot.y = D_80178310[i].rot.y;
+ if (obj58->obj.id == OBJ_80_147) {
+ obj58->unk40[0] = D_80178310[i].rot.z;
+ }
+ Object_SetInfo(&obj58->info, obj58->obj.id);
+ if (obj58->obj.id == OBJ_80_131) {
+ obj58->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038CCC);
+ }
+ obj58++;
+ }
+ }
+
+ for (actor = &gActors[1], i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+
+ if ((D_80178310[i].id <= OBJ_ACTOR_291) && (D_80178310[i].id >= OBJ_ACTOR_176)) {
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_ACTIVE;
+ actor->obj.id = D_80178310[i].id;
+ actor->obj.pos.x = D_80178310[i].xPos;
+ actor->obj.pos.z = -D_80178310[i].zPos1;
+ actor->obj.pos.z += D_80178310[i].zPos2;
+ actor->obj.pos.y = D_80178310[i].yPos;
+ actor->obj.rot.y = D_80178310[i].rot.y;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ actor++;
+ }
+ }
+
+ for (item = gItems, i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+ if ((D_80178310[i].id <= OBJ_ITEM_TRAINING_RING) && (D_80178310[i].id >= OBJ_ITEM_LASERS)) {
+ Item_Initialize(item);
+ item->obj.status = OBJ_ACTIVE;
+ item->obj.id = D_80178310[i].id;
+ item->obj.pos.x = D_80178310[i].xPos;
+ item->obj.pos.z = -D_80178310[i].zPos1;
+ item->obj.pos.z += D_80178310[i].zPos2;
+ item->obj.pos.y = D_80178310[i].yPos;
+ Object_SetInfo(&item->info, item->obj.id);
+ item++;
+ }
+ }
+}
+
+void func_i6_801880E4(Actor* actor) {
+ s32 i;
+ f32 xDisplacement;
+ f32 yDisplacement;
+ f32 zDisplacement;
+ Object_58* obj58;
+ f32 yaw;
+ f32 var_fv0;
+ Vec3f sp48;
+ Vec3f vel;
+ f32 temp_fv1;
+
+ for (obj58 = gObjects58, i = 0; i < 200; i++, obj58++) {
+ if ((obj58->obj.id == OBJ_80_147) && ((u8) actor->unk_04E == (u8) obj58->unk40[0])) {
+ actor->fwork[3] = obj58->obj.pos.x;
+ actor->fwork[4] = obj58->obj.pos.y;
+ actor->fwork[5] = obj58->obj.pos.z;
+ break;
+ }
+ }
+ actor->fwork[2] = 3.0f;
+ xDisplacement = actor->fwork[3] - actor->obj.pos.x;
+ yDisplacement = actor->fwork[4] - actor->obj.pos.y;
+ zDisplacement = actor->fwork[5] - actor->obj.pos.z;
+ if ((fabsf(xDisplacement) < 300.0f) && (fabsf(yDisplacement) < 300.0f) && (fabsf(zDisplacement) < 300.0f)) {
+ actor->unk_04E++;
+ }
+ if (!(gGameFrameCount & 0x1F)) {
+ actor->iwork[11] = 1;
+ actor->fwork[1] = 47.0f;
+ if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 1000.0f) &&
+ (fabsf(actor->obj.pos.y - gPlayer[0].pos.y) < 500.0f) &&
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 1000.0f)) {
+ actor->iwork[11] = 2;
+ actor->fwork[1] = 65.0f;
+ }
+ }
+
+ Math_SmoothStepToF(actor->fwork, actor->fwork[1], 0.2f, 3.0f, 0.00001f);
+ yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
+ Math_SmoothStepToAngle(&actor->unk_0F4.x,
+ Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement)))),
+ 0.1f, actor->fwork[2], 0.0f);
+ temp_fv1 = Math_SmoothStepToAngle(&actor->unk_0F4.y, yaw, 0.1f, actor->fwork[2], 0.0001f) * 40.0f;
+ if (temp_fv1 < 0.0f) {
+ var_fv0 = temp_fv1 * -1.0f;
+ } else {
+ var_fv0 = 360.0f - temp_fv1;
+ }
+ Math_SmoothStepToAngle(&actor->obj.rot.z, var_fv0, 0.1f, 3.0f, 0.01f);
+
+ actor->obj.rot.y = actor->unk_0F4.y;
+ actor->obj.rot.x = -actor->unk_0F4.x;
+ Matrix_RotateY(gCalcMatrix, actor->unk_0F4.y * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, -actor->unk_0F4.x * M_DTOR, 1);
+ sp48.x = 0;
+ sp48.y = 0;
+ sp48.z = actor->fwork[0];
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp48, &vel);
+ actor->vel.x = vel.x;
+ actor->vel.y = vel.y;
+ actor->vel.z = vel.z;
+}
+
+void func_i6_80188448(Actor* actor) {
+ func_8005B388(actor);
+}
+
+void func_i6_80188468(void) {
+ Actor* actor = &gActors[0];
+
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_ACTIVE;
+ actor->obj.pos.x = -23180.0f;
+ actor->obj.pos.y = 300.0f;
+ actor->obj.pos.z = -11959.0f;
+ actor->iwork[11] = 1;
+ actor->iwork[14] = 1;
+ actor->obj.id = OBJ_ACTOR_199;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ Audio_PlaySfx(0x3100000C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+void func_i6_80188528(Actor* actor) {
+ Math_SmoothStepToF(&actor->vel.x, 0.0f, 0.2f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&actor->vel.y, 0.0f, 0.2f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&actor->vel.z, 0.0f, 0.2f, 0.5f, 0.0f);
+ if (actor->unk_0D0 != 0) {
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_8007B344(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 3.0f, 5);
+ } else if (actor->timer_0BC == 0) {
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ actor->obj.rot.y = RAD_TO_DEG(-gPlayer[0].unk_058);
+ actor->obj.rot.x = RAD_TO_DEG(gPlayer[0].unk_05C);
+ actor->unk_0F4.z += actor->fwork[0];
+}
+
+extern Gfx* D_6009300;
+
+void func_i6_80188660(Actor* actor) {
+ RCP_SetupDL(&gMasterDisp, 0x3D);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
+ Matrix_RotateZ(gGfxMatrix, actor->unk_0F4.z * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, 1.1f, 0.9f, 1.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, -actor->unk_0F4.z * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, 1.1f, 0.9f, 1.0f, 1);
+ Matrix_Scale(gGfxMatrix, 3.0f, 3.0f, 1.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, &D_6009300);
+}
+
+void func_i6_801887B0(Actor* actor, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel) {
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_ACTIVE;
+ actor->obj.id = OBJ_ACTOR_286;
+ actor->vel.x = xVel;
+ actor->vel.y = yVel;
+ actor->vel.z = zVel;
+ actor->obj.pos.x = xPos;
+ actor->obj.pos.y = yPos;
+ actor->obj.pos.z = zPos;
+ if (Rand_ZeroOne() < 0.5f) {
+ actor->fwork[0] = 10.0f;
+ } else {
+ actor->fwork[0] = -10.0f;
+ }
+ actor->timer_0BC = 300;
+ Object_SetInfo(&actor->info, actor->obj.id);
+}
+
+void func_i6_8018887C(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(gActors); i++) {
+ if (gActors[i].obj.status == OBJ_FREE) {
+ func_i6_801887B0(&gActors[i], xPos, yPos, zPos, xVel, yVel, zVel);
+ break;
+ }
+ }
+}
+
+void func_i6_801888F4(Actor* actor) {
+ s32 i;
+
+ actor->obj.rot.z -= 8.0f;
+ if ((actor->timer_0BC & 1) == 1) {
+ func_8007D2C8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 5.0f);
+ }
+ if ((actor->timer_0BC == 0) || (actor->unk_0D0 != 0)) {
+ func_8007BFFC(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, actor->vel.x, actor->vel.y, actor->vel.z,
+ 7.0f, 20);
+ func_8007B344(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 10.0f, 5);
+
+ for (i = 0; i < 6; i++) {
+ func_800794CC(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 1.0f);
+ }
+
+ func_8007A6F0(&actor->obj.pos, 0x2903B009);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ func_80077240(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 5);
+ gHitCount += 6;
+ D_80177850 = 15;
+ }
+}
+
+void func_i6_80188A4C(Boss* boss) {
+
+ if (boss->damage > 20) {
+ boss->damage = 20;
+ }
+ if (boss->dmgType != DMG_NONE) {
+ boss->dmgType = DMG_NONE;
+ if (boss->actionState < 10 && !(boss->fwork[21] < 250.0f)) {
+ switch (boss->dmgPart) {
+ case 0:
+ boss->swork[1] = 15;
+ boss->swork[7] = 30;
+ break;
+ case 1:
+ case 2:
+ if (boss->swork[4] == 0) {
+ boss->swork[2] = 10;
+ boss->swork[3] = 15;
+ Audio_PlaySfx(0x2943500FU, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ boss->health -= boss->damage;
+ if ((boss->health != 0) && (boss->health <= 0)) {
+ D_Timer_80161A60 = 8;
+ Audio_PlaySfx(0x2940D09AU, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_80042EC0(boss);
+ gPlayer[0].state_1C8 = PLAYERSTATE_1C8_0;
+ boss->actionState = 20;
+ boss->swork[1] = 1000;
+ boss->swork[2] = 1000;
+ boss->swork[6] = 1;
+ D_80177A48[0] = 0.0f;
+ D_80177A48[1] = 0.1f;
+ gCsFrameCount = 0;
+ func_8001A55C(boss->sfxPos, 0x11034074U);
+ func_8001A55C(boss->sfxPos, 0x31408097U);
+ func_800182F4(0x100100FF);
+ func_800182F4(0x110100FF);
+ }
+ }
+ break;
+ default:
+ if (boss->swork[4] == 0) {
+ boss->swork[8]++;
+ if (boss->swork[8] >= 6) {
+ boss->swork[8] = 0;
+ boss->actionState = 12;
+ boss->timer_050 = 50;
+ boss->fwork[3] = gPlayer[0].pos.x;
+ boss->fwork[5] = gPlayer[0].unk_138;
+ Audio_PlaySfx(0x2940B096U, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+ break;
+ }
+ }
+ }
+}
+
+extern AnimationHeader D_600C038;
+
+void func_i6_80188CB8(Boss* boss) {
+ s32 i;
+ Vec3f sp50;
+ Vec3f sp44;
+
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_600C038)) {
+ boss->unk_04C = 0;
+ }
+ Animation_GetFrameData(&D_600C038, boss->unk_04C, boss->vwork);
+
+ if (boss->swork[3] != 0) {
+ boss->swork[3]--;
+ }
+
+ if (boss->swork[2] != 0) {
+ boss->swork[2]--;
+ Math_SmoothStepToF(&boss->fwork[15], -15.0f, 0.8f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&boss->fwork[16], 0.05f, 0.8f, 0.02f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&boss->fwork[15], 4.0f, 0.05f, 0.2f, 0.0f);
+ Math_SmoothStepToF(&boss->fwork[16], 0.03f, 0.05f, 0.001f, 0.0f);
+ }
+ Math_SmoothStepToF(&boss->fwork[10], boss->fwork[11], boss->fwork[12], boss->fwork[13], 0.0f);
+ if (boss->swork[1] != 0) {
+ boss->swork[1]--;
+ boss->fwork[11] = 30.0f;
+ boss->fwork[12] = 0.8f;
+ boss->fwork[13] = 3.0f;
+ } else {
+ boss->fwork[11] = 8.0f;
+ boss->fwork[12] = 0.05f;
+ boss->fwork[13] = 0.5f;
+ }
+
+ if (boss->swork[7] != 0) {
+ boss->swork[7]--;
+ if (!(gGameFrameCount & 1)) {
+ func_i6_8018887C(((Rand_ZeroOne() - 0.5f) * 100.0f) + boss->obj.pos.x,
+ ((Rand_ZeroOne() - 0.5f) * 300.0f) + (boss->obj.pos.y - 250.0f),
+ ((Rand_ZeroOne() - 0.5f) * 100.0f) + boss->obj.pos.z, (Rand_ZeroOne() - 0.5f) * 50.0f,
+ (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() - 0.5f) * 50.0f);
+ }
+ }
+ boss->fwork[14] += boss->fwork[15];
+ Matrix_RotateY(gCalcMatrix, -gPlayer[0].unk_058, 0);
+ sp50.x = boss->vel.z * 0.25f;
+ sp50.y = 0.0f;
+ sp50.z = boss->vel.x * 0.25f;
+ Matrix_MultVec3f(gCalcMatrix, &sp50, &sp44);
+ boss->fwork[18] = -sp44.z;
+ boss->fwork[17] = sp44.x;
+ boss->swork[4] = 0;
+ boss->fwork[19] = -26.0f;
+
+ for (i = 10; i < 12; i++) {
+ if ((gActors[i].obj.status == OBJ_ACTIVE) && (gActors[i].obj.id == OBJ_ACTOR_197)) {
+ gUnkEntities30[i].mode = 50;
+ gUnkEntities30[i].unk_28 = 1.0f;
+ gUnkEntities30[i].unk_04.x = boss->obj.pos.x;
+ gUnkEntities30[i].unk_04.y = boss->obj.pos.y - 200.0f;
+ gUnkEntities30[i].unk_04.z = boss->obj.pos.z;
+ gUnkEntities30[i].timer = 3;
+ gUnkEntities30[i].unk_10.x = gActors[i].obj.pos.x;
+ gUnkEntities30[i].unk_10.y = gActors[i].obj.pos.y;
+ gUnkEntities30[i].unk_10.z = gActors[i].obj.pos.z;
+ boss->swork[4] = 1;
+ }
+ }
+}
+
+void func_i6_80189098(Boss* boss) {
+ Actor* actor = &gActors[10];
+
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_INIT;
+ actor->obj.id = OBJ_ACTOR_197;
+ actor->unk_0E4 = 10;
+ actor->unk_0E6 = 0;
+ actor->health = 200;
+ actor->obj.pos.x = 200.0f;
+ actor->obj.pos.y = 0.0f;
+ actor->obj.pos.z = boss->obj.pos.z;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ actor->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBEA8);
+
+ actor++;
+
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_INIT;
+ actor->obj.id = OBJ_ACTOR_197;
+ actor->unk_0E4 = 10;
+ actor->unk_0E6 = 0;
+ actor->health = 200;
+ actor->obj.pos.x = -200.0f;
+ actor->obj.pos.y = 0.0f;
+ actor->obj.pos.z = boss->obj.pos.z;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ actor->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBEA8);
+
+ gActors[0].unk_0B8 = 2;
+}
+
+extern void func_800B56BC(Player*);
+
+void func_i6_80189214(void) {
+ s32 i;
+ Player* player = &gPlayer[0];
+
+ func_800A6148();
+
+ for (i = 0; i < 200; i++) {
+ gObjects58[i].obj.status = OBJ_FREE;
+ }
+
+ gLevelMode = LEVELMODE_ON_RAILS;
+ player->unk_204 = 0;
+ gPlayer[0].pos.x = 0.0f;
+ player->camEye.z = 400.0f;
+ player->camAt.z = player->camEye.z - 1000.0f;
+ player->unk_148 = player->unk_14C = 0.74f;
+ player->camEye.y = player->pos.y * player->unk_14C + 10.0f;
+ player->camEye.x = player->pos.x * player->unk_148;
+ D_80177DC8 = 0;
+ // FAKE
+ if (1) {}
+ PRINTF("FO_Game_Sw %d\n");
+ player->camAt.x = 0.0f;
+ player->camAt.y = 0.0f;
+ player->unk_114 = 0.0f;
+ player->unk_144 = 0.0f;
+ D_80177D20 = 0.0f;
+ player->unk_018 = player->unk_014 = 1.0f;
+ player->pos.z = player->unk_138 = -player->unk_144;
+ func_800B56BC(player);
+}
+
+void func_i6_8018933C(Actor* actor) {
+ if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 1000.0f) &&
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 1000.0f)) {
+ D_Timer_80177B44 = 50;
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+}
+
+void func_i6_801893B8(Actor* actor) {
+
+ if (D_8015F924 == 0) {
+ actor->unk_04E++;
+ switch (actor->unk_04E) {
+ case 200:
+ func_800BA808(gMsg_ID_8250, RCID_ANDROSS_RED);
+ return;
+ case 400:
+ func_800BA808(gMsg_ID_8255, RCID_ANDROSS_RED);
+ return;
+ case 600:
+ func_800BA808(gMsg_ID_8260, RCID_ANDROSS_RED);
+ return;
+ case 800:
+ func_800BA808(gMsg_ID_19325, RCID_ANDROSS_RED);
+ break;
+ }
+ }
+}
+
+void func_i6_80193710(void);
+
+void func_i6_80189470(Actor* actor) {
+ s32 i;
+ Player* player = &gPlayer[0];
+
+ if ((D_80177AB0 != 7) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) &&
+ (fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 9000.0f) &&
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 9000.0f)) {
+ D_80177AB0 = 7;
+ func_800BA808(gMsg_ID_19370, RCID_JAMES);
+ func_800182F4(0x101400FF);
+ func_800182F4(0x111400FF);
+ }
+
+ if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) && (fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 500.0f) &&
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 500.0f)) {
+ func_8001A838(0x11403076);
+ func_8001D400(0);
+ gCurrentLevel = LEVEL_VENOM_2;
+ D_8017827C = 1;
+ D_800D2F68 = 1;
+ player->state_1C8 = PLAYERSTATE_1C8_7;
+ player->unk_1D0 = 3;
+ player->unk_144 = D_80177D20 = 0.0f;
+ D_80177AB0 = D_80177A98 = 1;
+ player->camEye.x = 1200.0f;
+ player->camEye.z = 1200.0f;
+ player->camEye.y = 1800.0f;
+ D_801779A0 = 0.0f;
+ D_801779B8 = 620.0f;
+ D_801779C0 = 0.0f;
+ player->unk_234 = 0;
+ player->unk_034 = 0.0f;
+ D_80177A48[0] = 1.0f;
+ func_800A6148();
+
+ for (i = 0; i < 200; i++) {
+ gObjects58[i].obj.status = OBJ_FREE;
+ }
+
+ func_i6_80193710();
+ D_8017782C = 1;
+ func_800A594C();
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_80178340 = D_80178358 = 255;
+ player->timer_1F8 = 2;
+ gCsFrameCount = 0;
+ D_80177A48[1] = 0.0f;
+ }
+}
+
+extern void func_8004D440(Player*);
+
+void func_i6_80189724(Actor* actor) {
+ s32 i;
+ Vec3f vec;
+ Vec3f displacement;
+ Vec3f vel;
+
+ if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 2000.0f) &&
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 2000.0f)) {
+ Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
+ vec.x = 0.0f;
+ vec.y = 0.0f;
+ vec.z = -30.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &vel);
+ Matrix_RotateZ(gCalcMatrix, 2.0f * (Rand_ZeroOne() * M_PI), 1);
+ vec.x = Rand_ZeroOne() * 300.0f;
+ vec.y = 0.0f;
+ vec.z = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &displacement);
+
+ actor->vel.x = vel.x * 0.2f;
+ actor->vel.y = vel.y * 0.2f;
+ actor->vel.z = vel.z * 0.2f;
+ for (i = 0; i < 1; i++) {
+ func_8007797C(actor->obj.pos.x + displacement.x, actor->obj.pos.y + displacement.y,
+ actor->obj.pos.z + displacement.z, vel.x, vel.y, vel.z, (Rand_ZeroOne() * 2.5f) + 15.5f);
+ }
+ }
+ if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 500.0f) &&
+ (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 500.0f)) {
+ if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3 || gPlayer[0].state_1C8 == PLAYERSTATE_1C8_5)) {
+ gPlayer[0].shields = 0;
+ gRightWingHealth[0] = gLeftWingHealth[0] = 0;
+ Player_ApplyDamage(&gPlayer[0], 1, 60);
+ Player_ApplyDamage(&gPlayer[0], 2, 60);
+ actor->timer_0BC = 10;
+ gPlayer[0].timer_220 = 200;
+ }
+ }
+ if (actor->timer_0BC == 1) {
+ func_8004D440(&gPlayer[0]);
+ }
+}
+
+void func_i6_801899E4(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 scale2, u8 arg5) {
+
+ Effect_Initialize(effect);
+ effect->obj.status = OBJ_ACTIVE;
+ effect->obj.id = OBJ_EFFECT_357;
+ effect->obj.pos.x = xPos;
+ effect->obj.pos.y = yPos;
+ effect->obj.pos.z = zPos;
+ effect->unk_4C = arg5;
+ effect->scale2 = (Rand_ZeroOne() * 0.8f + 0.3f) * scale2;
+ effect->timer_50 = 100;
+ effect->obj.rot.x = Rand_ZeroOne() * 360.0f;
+ effect->unk_60.x = (Rand_ZeroOne() - 0.5f) * 30.0f;
+ effect->unk_60.y = (Rand_ZeroOne() - 0.5f) * 30.0f;
+ effect->unk_60.z = (Rand_ZeroOne() - 0.5f) * 30.0f;
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i6_80189B00(f32 xPos, f32 yPos, f32 zPos, f32 scale2) {
+ s32 i;
+
+ for (i = 50; i >= 0; i--) {
+ if (gEffects[i].obj.status == OBJ_FREE) {
+ func_i6_801899E4(&gEffects[i], xPos, yPos, zPos, scale2, 0);
+ break;
+ }
+ }
+}
+
+extern f32 D_800C9C30;
+extern u16 D_800C9E90[][2];
+
+void func_i6_801876FC(void);
+
+void func_i6_80189B70(Boss* boss) {
+ s32 i;
+ s32 sp98;
+ s32 frameCountMask;
+ f32 xDisplacement;
+ f32 yDisplacement;
+ f32 zDisplacement;
+ s32 pad84;
+ f32 yaw;
+ s32 pad7C;
+ Vec3f vec;
+ Vec3f sp64;
+ Vec3f sp58;
+ s32 pad;
+
+ func_i6_80188A4C(boss);
+ func_i6_80188CB8(boss);
+ boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038F24);
+ Math_SmoothStepToF(&D_800C9C30, 255.0f, 1.0f, 4.0f, 0);
+ Math_SmoothStepToF(&boss->unk_3F8, 10.0f, 0.2f, 0.2f, 0);
+ if (!(gGameFrameCount & 0x10)) {
+ Math_SmoothStepToF(&boss->fwork[25], 255.0f, 1.0f, 10.0f, 0);
+ } else {
+ Math_SmoothStepToF(&boss->fwork[25], 100.0f, 1.0f, 10.0f, 0);
+ }
+ if ((fabsf(boss->obj.pos.x - gPlayer[0].pos.x) < 300.0f) &&
+ (fabsf((boss->obj.pos.y - 300.0f) - gPlayer[0].pos.y) < 300.0f) &&
+ (fabsf(boss->obj.pos.z - gPlayer[0].unk_138) < 300.0f) && (boss->actionState < 0xB) && (boss->timer_05A == 0)) {
+ boss->actionState = 11;
+ boss->timer_050 = 150;
+ Audio_PlaySfx(0x31408097, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+
+ switch (boss->actionState) {
+ case 0:
+ boss->health = 200;
+ D_80177AB0 = 3;
+ boss->fwork[19] = -26.0f;
+ boss->fwork[10] = 8.0f;
+ func_i6_80189098(boss);
+ boss->swork[5] = 300;
+ boss->actionState++;
+ Audio_PlaySfx(0x11034074, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ boss->fwork[21] = 255.0f;
+ boss->fwork[22] = 255.0f;
+ boss->fwork[23] = 0.0f;
+ boss->fwork[24] = 0.0f;
+ break;
+ case 10:
+ boss->fwork[23] = 0.0f;
+ boss->fwork[24] = 0.0f;
+ boss->fwork[21] = 255.0f;
+ boss->fwork[22] = 255.0f;
+ boss->fwork[1] = 10.0f;
+ boss->fwork[2] = 2.0f;
+ boss->fwork[3] = 0.0f;
+ boss->fwork[4] = 0.0f;
+ boss->fwork[5] = gPlayer[0].pos.z - 3000.0f;
+ boss->fwork[19] = -26.0f;
+ boss->swork[5] = 100;
+ if (boss->timer_050 == 0) {
+ gPlayer[0].state_1C8 = PLAYERSTATE_1C8_9;
+ gPlayer[0].unk_1D0 = 0;
+ boss->actionState = 1;
+ gPlayer[0].unk_240 = 1;
+ }
+ break;
+ case 1:
+ if ((gPlayer[0].state_1C8 != PLAYERSTATE_1C8_9) && (boss->timer_050 == 0)) {
+ boss->fwork[2] = 1.6f;
+ boss->timer_050 = (s32) Rand_ZeroOne() * 50.0f + 50;
+ boss->fwork[3] = (Rand_ZeroOne() - 0.5f) * 10000.0f;
+ boss->fwork[4] = (Rand_ZeroOne() - 0.5f) * 1000.0f;
+ boss->fwork[5] = (Rand_ZeroOne() - 0.5f) * 10000.0f;
+ if (Rand_ZeroOne() < 0.3f) {
+ boss->actionState = 2;
+ boss->timer_050 = (s32) Rand_ZeroOne() * 100.0f + 50;
+ boss->fwork[1] = 0.0f;
+ }
+ }
+ break;
+ case 2:
+ if (boss->timer_050 == 0) {
+ boss->actionState = 1;
+ boss->timer_050 = (s32) Rand_ZeroOne() * 50.0f + 50;
+ boss->fwork[1] = 50.0f;
+ }
+ break;
+ case 11:
+ boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBF34);
+ if (boss->timer_050 < 120) {
+ D_80178348 = D_80178350 = D_80178354 = 255;
+ D_80178358 = 80;
+ D_8017835C = 1;
+ gPlayer[0].timer_224 = gGameFrameCount & 7;
+ gPlayer[0].timer_220 = 3;
+ Math_SmoothStepToF(&D_801779A8[gMainController], 40.0f, 1.0f, 3.0f, 0.0f);
+ if (!(gGameFrameCount & 0x1F) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3)) {
+ Player_ApplyDamage(&gPlayer[0], 3, 10);
+ }
+ }
+ Math_SmoothStepToF(&gPlayer[0].unk_0D0, 0.0f, 2.0f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].pos.x, boss->obj.pos.x, 0.8f, 50.0f, 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].pos.y, boss->obj.pos.y - 300.0f, 0.8f, 50.0f, 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].pos.z, boss->obj.pos.z, 0.8f, 50.0f, 0.0f);
+ boss->fwork[11] = 45.0f;
+ boss->fwork[12] = 0.8f;
+ boss->fwork[13] = 1.0f;
+ boss->fwork[19] = 23.0f;
+ boss->fwork[1] = 0.0f;
+ gPlayer[0].unk_238 = 1;
+ Math_SmoothStepToF(&D_800CA230, 0.15f, 0.2f, 0.004f, 0.0f);
+ if (boss->timer_050 == 120) {
+ Audio_PlaySfx(0x1940306E, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->timer_050 == 0) {
+ gPlayer[0].unk_0D0 = D_80161A54;
+ gPlayer[0].unk_238 = 0;
+ D_80178358 = 0;
+ boss->timer_05A = 50;
+ if (boss->swork[4] != 0) {
+ boss->actionState = 1;
+ boss->timer_050 = (s32) Rand_ZeroOne() * 50.0f + 50;
+ boss->fwork[1] = 50.0f;
+ } else {
+ boss->actionState = 3;
+ }
+ func_8001A55C(boss->sfxPos, 0x31408097);
+ }
+ break;
+ case 3:
+ boss->fwork[1] = 42.0f;
+ boss->fwork[2] = 1.3f;
+ boss->fwork[3] = gPlayer[0].pos.x;
+ boss->fwork[4] = gPlayer[0].pos.y;
+ boss->fwork[5] = gPlayer[0].unk_138;
+ break;
+ case 12:
+ boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBF34);
+ boss->fwork[1] = 0;
+ boss->fwork[24] = 0.2f;
+ boss->fwork[22] = 0.0f;
+ if ((boss->fwork[22] < 1.0f) && (boss->timer_050 == 0)) {
+ xDisplacement = boss->fwork[3] - boss->obj.pos.x;
+ zDisplacement = boss->fwork[5] - boss->obj.pos.z;
+ Matrix_RotateY(gCalcMatrix, Math_Atan2F(xDisplacement, zDisplacement), 0);
+ vec.x = 0.0f;
+ vec.y = 0.0f;
+ vec.z = 4000.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
+ boss->obj.pos.x = boss->fwork[3] + sp64.x;
+ boss->obj.pos.z = boss->fwork[5] + sp64.z;
+ boss->unk_078.y = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
+ boss->actionState = 13;
+ Audio_PlaySfx(0x1940306E, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ boss->timer_054 = 90;
+ }
+ break;
+ case 13:
+ boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBF34);
+ boss->fwork[24] = 0.0f;
+ boss->fwork[22] = 255.0f;
+ if (250.0f < boss->fwork[22]) {
+ boss->actionState = 3;
+ }
+ break;
+ case 20:
+ gCsFrameCount++;
+ boss->fwork[0] = 0.0f;
+ boss->fwork[1] = 0.0f;
+ boss->obj.rot.z += 0.2f;
+ boss->obj.rot.x += 0.1f;
+ boss->obj.pos.y -= 3.0f;
+ Matrix_RotateY(gCalcMatrix, -gPlayer[0].unk_058, 0U);
+ vec.x = (Rand_ZeroOne() - 0.5f) * 700.0f;
+ vec.y = (Rand_ZeroOne() - 0.5f) * 300.0f;
+ vec.z = 500.0f;
+ Matrix_MultVec3f(gCalcMatrix, &vec, &sp64);
+ func_8007797C(boss->obj.pos.x + sp64.x, boss->obj.pos.y + sp64.y, boss->obj.pos.z + sp64.z, 0.0f, 0.0f,
+ 0.0f, (Rand_ZeroOne() * 5.0f) + 7.0f);
+ if (!(gGameFrameCount & 1)) {
+ func_8007C484(((Rand_ZeroOne() - 0.5f) * 600.0f) + boss->obj.pos.x,
+ (Rand_ZeroOne() * 100.0f) + (boss->obj.pos.y + 100.0f), boss->obj.pos.z, 0.0f, 0.0f, 0.0f,
+ (Rand_ZeroOne() * 0.3f) + 0.5f, 0);
+ }
+ vec.x = 0.0f;
+ vec.y = 0.0f;
+ vec.z = 2000.0f;
+ Matrix_MultVec3f(gCalcMatrix, &vec, &sp64);
+ Math_SmoothStepToF(&D_80177A48[0], 100.0f, 1.0f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[1], 100.0f, 1.0f, 10.0f, 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].camEye.x, boss->obj.pos.x + sp64.x, 0.02f, D_80177A48[0], 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].camEye.y, boss->obj.pos.y + sp64.y, 0.02f, D_80177A48[0], 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].camEye.z, boss->obj.pos.z + sp64.z, 0.02f, D_80177A48[0], 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].camAt.x, boss->obj.pos.x, 0.05f, D_80177A48[1], 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].camAt.y, boss->obj.pos.y, 0.05f, D_80177A48[1], 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].camAt.z, boss->obj.pos.z, 0.05f, D_80177A48[1], 0.0f);
+ Math_SmoothStepToF(&gPlayer[0].unk_034, 0.0f, 0.5f, 0.5f, 0.0f);
+
+ if (gCsFrameCount == 50) {
+ func_800BA808(gMsg_ID_19335, RCID_ANDROSS_RED);
+ }
+ if (gCsFrameCount == 200) {
+ gBossActive = 0;
+ gPlayer[0].unk_0D0 = D_80161A54;
+ func_8001CA24(0);
+ boss->actionState = 21;
+ func_8007B344(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 60.0f, 5);
+ func_8007A568(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 40.0f);
+
+ for (i = 0; i < ARRAY_COUNT(gActors); i++) {
+ if ((gActors[i].obj.status == OBJ_ACTIVE) && (gActors[i].obj.id == OBJ_ACTOR_286)) {
+ Object_Kill(&gActors[i].obj, gActors[i].sfxPos);
+ }
+ }
+ D_80177AB0 = 4;
+ gCsFrameCount = 0;
+ }
+ break;
+ case 21:
+ func_i6_801876FC();
+ gCsFrameCount++;
+ D_80178480 = 10;
+ if (gCsFrameCount < 200) {
+ D_80178380[0] += 4;
+ if (D_80178380[0] >= 0xFF) {
+ D_80178380[0] = 0xFF;
+ }
+ D_80178390[0] = D_801783A0[0] = D_801783B0[0] = 0xFF;
+ Math_SmoothStepToF(&D_800CA230, 0.15f, 0.2f, 0.004f, 0.0f);
+ Math_SmoothStepToF(&D_801779A8[gMainController], 70.0f, 1.0f, 4.0f, 0.0f);
+ }
+ switch (gCsFrameCount) {
+ case 30:
+ gRadioState = 0;
+ func_800BA808(gMsg_ID_20318, RCID_FOX);
+ gPlayer[0].timer_220 = 200;
+ break;
+ case 350:
+ func_800BA808(gMsg_ID_19468, RCID_JAMES);
+ break;
+ case 500:
+ func_800BA808(gMsg_ID_19350, RCID_FOX);
+ D_8015F924 = 1;
+ break;
+ case 600:
+ D_80177AB0 = 5;
+ gFogRed = 129;
+ gFogGreen = 27;
+ gFogBlue = 0;
+ gFogNear = 996;
+ gFogFar = 1007;
+ gBgColor = 0x4081;
+ D_80161A44 = 30000.0f;
+ gGroundLevel = -50.0f;
+ gPlayer[0].pos.x = -25995.0f;
+ gPlayer[0].pos.y = 300.0f;
+ gPlayer[0].pos.z = -11140.0f;
+ gPlayer[0].unk_08C = 0.0f;
+ gPlayer[0].unk_114 = 271.0f;
+ gPlayer[0].unk_110 = gPlayer[0].unk_4D8 = gPlayer[0].unk_0E8 = gPlayer[0].unk_0E4 =
+ gPlayer[0].unk_0EC = 0.0f;
+ gPlayer[0].unk_12C = 150.0f;
+ gPlayer[0].unk_034 = -90.0f;
+ gPlayer[0].state_1C8 = PLAYERSTATE_1C8_7;
+ gPlayer[0].unk_1D0 = 100;
+ gPlayer[0].timer_1F8 = 240;
+ gPlayer[0].unk_234 = 1;
+ D_80177A48[5] = -1200.0f;
+
+ func_i6_80188468();
+ func_i6_80187C5C();
+ gPlayer[0].unk_014 = 1.0f;
+ func_800B7184(gPlayer, 1);
+ func_8001C8B8(0);
+ func_8001D444(0, D_800C9E90[gCurrentLevel][1], 0, 0xFF);
+ Audio_PlaySfx(0x11403076, D_800C5D28, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+
+ D_80177CA4 = gHitCount;
+ break;
+ case 800:
+ func_800BA808(gMsg_ID_19340, RCID_JAMES);
+ break;
+ case 1000:
+ func_8001D400(0);
+ break;
+ case 1300:
+ func_800BA808(gMsg_ID_19355, RCID_JAMES);
+ break;
+ case 1800:
+ func_800BA808(gMsg_ID_19360, RCID_JAMES);
+ break;
+ }
+ if (gCsFrameCount > 600) {
+ Math_SmoothStepToF(&D_801779A8[gMainController], 10.0f, 1.0f, 2.0f, 0.0f);
+ }
+ boss->obj.pos.y = 10000.0f;
+
+ if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) && !(gGameFrameCount & 3)) {
+ Matrix_RotateY(gCalcMatrix, (gPlayer[0].unk_114 + gPlayer[0].unk_0E8) * M_DTOR, 0U);
+ vec.x = (Rand_ZeroOne() - 0.5f) * 800.0f;
+ vec.y = 600.0f;
+ vec.z = (Rand_ZeroOne() * 1000.0f) + -3000.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
+ func_i6_80189B00(gPlayer[0].pos.x + sp64.x, sp64.y, gPlayer[0].unk_138 + sp64.z, 1.2f);
+ }
+ if (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_0) {
+ Matrix_RotateY(gCalcMatrix, -gPlayer[0].unk_058, 0);
+ vec.x = 0.0f;
+ vec.y = 0.0f;
+ vec.z = -50.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp58);
+ Matrix_RotateZ(gCalcMatrix, 2.0f * (Rand_ZeroOne() * M_PI), 1);
+ vec.x = Rand_ZeroOne() * 50.0f + 120.0f;
+ vec.y = 0.0f;
+ vec.z = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
+ if (gCsFrameCount < 1000) {
+ frameCountMask = 1;
+ } else if (gCsFrameCount < 1500) {
+ frameCountMask = 3;
+ } else if (gCsFrameCount < 2000) {
+ frameCountMask = 1;
+ } else {
+ frameCountMask = 1;
+ }
+ sp98 = 1;
+ if (!(gGameFrameCount & frameCountMask)) {
+ for (i = 0; i < sp98; i++) {
+ func_8007797C(gPlayer[0].camEye.x + sp64.x, gPlayer[0].camEye.y + sp64.y,
+ gPlayer[0].camEye.z + sp64.z, sp58.x, sp58.y, sp58.z,
+ (Rand_ZeroOne() * 2.5f) + 2.5f);
+ }
+ }
+ }
+ break;
+ }
+ xDisplacement = boss->fwork[3] - boss->obj.pos.x;
+ yDisplacement = boss->fwork[4] - boss->obj.pos.y;
+ zDisplacement = boss->fwork[5] - boss->obj.pos.z;
+ yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
+ Math_SmoothStepToAngle(&boss->unk_078.x,
+ Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement)))),
+ 0.1f, boss->fwork[2], 0.0f);
+ Math_SmoothStepToAngle(&boss->unk_078.y, yaw, 0.1f, boss->fwork[2], 0.0f);
+ if (boss->swork[4] != 0) {
+ Math_SmoothStepToAngle(&boss->obj.rot.y, Math_RadToDeg(-gPlayer[0].unk_058), 0.3f, 5.0f, 0.0f);
+ } else if (boss->timer_054 == 0) {
+ Math_SmoothStepToAngle(&boss->obj.rot.y, Math_RadToDeg(-gPlayer[0].unk_058), 0.3f, 1.5f, 0.0f);
+ }
+ Math_SmoothStepToF(boss->fwork, boss->fwork[1], 0.2f, 1.0f, 0.00001f);
+ Matrix_RotateY(gCalcMatrix, boss->unk_078.y * M_DTOR, 0U);
+ Matrix_RotateX(gCalcMatrix, -boss->unk_078.x * M_DTOR, 1U);
+ vec.x = 0.0f;
+ vec.y = 0.0f;
+ vec.z = boss->fwork[0];
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
+ boss->vel.x = sp64.x;
+ boss->vel.y = sp64.y;
+ boss->vel.z = sp64.z - D_80177D08;
+ if (boss->actionState < 20) {
+ gUnkEntities28[59].unk_00 = 1;
+ gUnkEntities28[59].unk_02 = 0x66;
+ gUnkEntities28[59].pos.x = boss->obj.pos.x;
+ gUnkEntities28[59].pos.y = boss->obj.pos.y;
+ gUnkEntities28[59].pos.z = boss->obj.pos.z;
+ gUnkEntities28[59].unk_10 = boss->unk_078.y + 180.0f;
+ }
+ gActors[10].info.unk_1C = 1.0f;
+ gActors[11].info.unk_1C = 1.0f;
+ if (boss->swork[5] != 0) {
+ boss->swork[5]--;
+ if (boss->swork[5] == 0) {
+ Audio_PlaySfx(0x11032075, gActors[10].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x11032075, gActors[11].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x3103108B, gActors[10].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x3103108B, gActors[11].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ gActors[10].obj.pos.x = boss->obj.pos.x + 200.0f;
+ gActors[10].obj.pos.y = boss->obj.pos.y - 200.0f;
+ gActors[10].obj.pos.z = boss->obj.pos.z + 200.0f;
+ gActors[10].unk_0B8 = 0;
+ gActors[10].timer_0C2 = 20;
+ gActors[10].info.unk_1C = 0.0f;
+ gActors[11].obj.pos.x = boss->obj.pos.x - 200.0f;
+ gActors[11].obj.pos.y = boss->obj.pos.y - 200.0f;
+ gActors[11].obj.pos.z = boss->obj.pos.z + 200.0f;
+ gActors[11].unk_0B8 = 0;
+ gActors[11].timer_0C2 = 20;
+ gActors[11].info.unk_1C = 0.0f;
+ }
+ Math_SmoothStepToF(&boss->fwork[21], boss->fwork[22], 1.0f, 6.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[23], boss->fwork[24], 0.3f, 0.01f, 0);
+}
+
+s32 func_i6_8018B47C(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
+ Boss* boss = (Boss*) data;
+
+ if (boss->fwork[21] >= 254.0f) {
+ if (limbIndex == 2) {
+ RCP_SetupDL(&gMasterDisp, 0x16);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, (s32) boss->fwork[25], 255, 255, 255);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x17);
+ }
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x33);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, (s32) boss->fwork[21]);
+ }
+ if ((limbIndex == 2) && (boss->swork[6] != 0)) {
+ *dList = NULL;
+ return false;
+ }
+ if ((limbIndex == 1) || (limbIndex == 2)) {
+ Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
+ Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
+ Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
+ Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
+ if (*dList != NULL) {
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Push(&gCalcMatrix);
+ Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
+ if (limbIndex == 1) {
+ Matrix_RotateY(gGfxMatrix, -boss->fwork[14] * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, boss->fwork[16] + 1.0f, 1.0f, 1.0f - boss->fwork[16], 1);
+ Matrix_RotateY(gGfxMatrix, boss->fwork[14] * M_DTOR, 1);
+ } else {
+ Matrix_RotateY(gGfxMatrix, boss->fwork[14] * 1.5f * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, 2.0f * boss->fwork[16] + 1.0f, 1.0f, 1.0f - 2.0f * boss->fwork[16], 1);
+ Matrix_RotateY(gGfxMatrix, -boss->fwork[14] * 1.5f * M_DTOR, 1);
+ }
+ Matrix_SetGfxMtx(&gMasterDisp);
+ if ((boss->swork[3] & 1) && (boss->fwork[21] >= 254.0f)) {
+ RCP_SetupDL(&gMasterDisp, 0x1B);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+
+ gSPDisplayList(gMasterDisp++, *dList);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Pop(&gCalcMatrix);
+ }
+ return true;
+ }
+ return false;
+}
+
+extern Limb* D_600C0A4[];
+extern Gfx* D_600C2D0;
+extern Gfx* D_600C560;
+
+void func_i6_8018B8C0(Boss* boss) {
+ s32 j;
+ s32 i;
+ f32 temp;
+ s32 pad;
+ Vec3f spAC;
+ Vec3f spA0;
+
+ if (boss->actionState != 21) {
+ Matrix_RotateZ(gGfxMatrix, -(f32) gGameFrameCount * 20.0f * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, boss->fwork[23] + 1.0f, 1.0f - boss->fwork[23], 1.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, gGameFrameCount * 20.0f * M_DTOR, 1);
+ Matrix_Scale(gGfxMatrix, boss->fwork[23] + 1.0f, 1.0f - boss->fwork[23], 1.0f, 1);
+ Matrix_Scale(gGfxMatrix, boss->unk_3F8, boss->unk_3F8, boss->unk_3F8, 1);
+ Animation_DrawSkeleton(0, D_600C0A4, boss->vwork, func_i6_8018B47C, NULL, boss, &gIdentityMatrix);
+ if (boss->fwork[21] >= 254) {
+ RCP_SetupDL(&gMasterDisp, 0x36);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 64, 64, 255);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x46);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 64, 64, (s32) boss->fwork[21]);
+ }
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+ Matrix_Translate(gGfxMatrix, 0.0f, -16.0f, 0.0f, 1);
+ Matrix_Scale(gGfxMatrix, 0.3f, 0.6f, 0.3f, 1);
+
+ for (i = 0; i < 30; i++) {
+ Matrix_Push(&gGfxMatrix);
+ Matrix_RotateY(gCalcMatrix, i * 50.0f * M_DTOR, 0U);
+ spAC.x = 0.0f;
+ spAC.y = 0.0f;
+ spAC.z = i * 0.8f;
+ Matrix_MultVec3f(gCalcMatrix, &spAC, &spA0);
+ Matrix_Translate(gGfxMatrix, spA0.x, 10.0f, spA0.z, 1);
+ Matrix_RotateY(gGfxMatrix, M_DTOR * -boss->obj.rot.y - gPlayer[0].unk_058, 1);
+
+ for (j = 0; j < 10; j++) {
+ Matrix_Translate(gGfxMatrix, 0.0f, -10.0f, 0.0f, 1);
+ temp = __sinf(((s32) boss->fwork[19] * (i * 10 + j) + gGameFrameCount * 5) * M_DTOR) * boss->fwork[10];
+ Matrix_RotateZ(gGfxMatrix, (boss->fwork[18] + temp) * M_DTOR, 1);
+ Matrix_RotateX(gGfxMatrix, boss->fwork[17] * M_DTOR, 1);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Translate(gGfxMatrix, 0.0f, -5.0f, 0.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ if (j == 9) {
+ gSPDisplayList(gMasterDisp++, &D_600C2D0);
+ } else {
+ gSPDisplayList(gMasterDisp++, &D_600C560);
+ }
+ Matrix_Pop(&gGfxMatrix);
+ }
+ Matrix_Pop(&gGfxMatrix);
+ }
+ }
+}
+
+extern Vtx* D_C017598;
+extern Vtx* D_C038FE8;
+
+void func_i6_8018BDD8(void) {
+ s32 i;
+ f32 spC0[17];
+ f32 sp7C[17];
+ s32 temp_lo;
+ Vtx* sp74;
+ Vtx* sp70;
+
+ sp74 = SEGMENTED_TO_VIRTUAL(&D_C038FE8);
+ sp70 = SEGMENTED_TO_VIRTUAL(&D_C017598);
+
+ for (i = 0; i < 17; i++) {
+ if (i == 0 || i == 16) {
+ spC0[i] = 0.0f;
+ sp7C[i] = 0.0f;
+ } else if (gLevelMode == LEVELMODE_ALL_RANGE) {
+ spC0[i] = (Rand_ZeroOne() - 0.5f) * 120.0f;
+ sp7C[i] = (Rand_ZeroOne() - 0.5f) * 120.0f;
+ } else {
+ spC0[i] = (Rand_ZeroOne() - 0.5f) * 30.0f;
+ sp7C[i] = (Rand_ZeroOne() - 0.5f) * 30.0f;
+ }
+ }
+
+ for (i = 0; i < 34; i++) {
+ temp_lo = (sp74[i].v.ob[2] + 200) / 25;
+ sp70[i].v.ob[0] = sp74[i].v.ob[0] + spC0[temp_lo];
+ sp70[i].v.ob[1] = sp74[i].v.ob[1] + sp7C[temp_lo];
+ }
+
+ if (gBossActive != 0) {
+ Math_SmoothStepToF(&D_i6_801A7F58, 0.0f, 1.0f, 10.0f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&D_i6_801A7F58, D_i6_801A7F60, 1.0f, 1.0f, 0.0f);
+ }
+
+ D_i6_801A7F68 += D_i6_801A7F70;
+ Math_SmoothStepToF(&D_i6_801A7F70, D_i6_801A7F78, 1.0f, 0.1f, 0.0f);
+}
+
+void func_i6_8018C390(Player* player) {
+
+ player->unk_2B4 = 1;
+ player->unk_280 = 0;
+ switch (player->unk_1D0) {
+ case 2:
+ case 3:
+ break;
+ case 0:
+ Math_SmoothStepToF(&player->pos.x, gBosses->obj.pos.x, 0.5f, 30.0f, 0);
+ Math_SmoothStepToF(&player->pos.y, gBosses->obj.pos.y - 150.0f, 0.5f, 30.0f, 0);
+ Math_SmoothStepToF(&player->pos.z, gBosses->obj.pos.z - 100.0f, 0.5f, 60.0f, 0);
+ D_80177D20 = player->unk_144 = -player->pos.z;
+ Math_SmoothStepToF(&player->camEye.z, 2000.0f, 0.05f, 20.0f, 0);
+ Math_SmoothStepToF(&player->camEye.x, 0.0f, 0.05f, 10.0f, 0);
+ Math_SmoothStepToF(&player->camEye.y, 0.0f, 0.05f, 10.0f, 0);
+ Math_SmoothStepToF(&player->camAt.x, 0.0f, 0.05f, 10.0f, 0);
+ Math_SmoothStepToF(&player->camAt.y, 0.0f, 0.05f, 10.0f, 0);
+ Math_SmoothStepToF(&player->camAt.z, 100.0f, 0.05f, 10.0f, 0.0f);
+ break;
+ case 1:
+ player->unk_0E4 += 15.0f;
+
+ if (player->unk_0E4 > 180.0f) {
+ player->unk_0E4 -= 360.0f;
+ }
+ player->unk_0E8 += 9.0f;
+ if (player->unk_0E8 > 180.0f) {
+ player->unk_0E8 -= 360.0f;
+ }
+ Math_SmoothStepToF(&player->camEye.z, 400.0f, 0.05f, 20.0f, 0.0f);
+ if (player->timer_1F8 != 0) {
+ if (gControllerPress[gMainController].button != 0) {
+ player->timer_1F8--;
+ }
+ }
+ if (player->timer_1F8 == 0) {
+ player->state_1C8 = PLAYERSTATE_1C8_3;
+ player->unk_014 = 0.0f;
+ player->unk_018 = 0.0f;
+ }
+ break;
+ }
+ player->unk_138 = player->pos.z + player->unk_08C;
+ func_800A46A0(player);
+}
+
+void func_i6_8018C660(Effect* effect, f32 xPos, f32 yPos, f32 zPos, s32 arg4) {
+ Effect_Initialize(effect);
+ effect->obj.status = OBJ_ACTIVE;
+ effect->obj.id = OBJ_EFFECT_396;
+ effect->obj.pos.x = xPos;
+ effect->obj.pos.y = yPos;
+ effect->obj.pos.z = zPos;
+ effect->unk_4C = arg4;
+ effect->scale2 = (Rand_ZeroOne() * 2.5f) + 5.0f;
+ effect->unk_60.x = (Rand_ZeroOne() - 0.5f) * 20.0f;
+ effect->unk_60.y = (Rand_ZeroOne() - 0.5f) * 20.0f;
+ Object_SetInfo(&effect->info, effect->obj.id);
+}
+
+void func_i6_8018C734(f32 xPos, f32 yPos, f32 zPos, s32 arg3) {
+ s32 i;
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == OBJ_FREE) {
+ func_i6_8018C660(&gEffects[i], xPos, yPos, zPos, arg3);
+ break;
+ }
+ }
+}
+
+void func_i6_8018C7A0(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, s32 arg7) {
+ Effect_Initialize(effect);
+ effect->obj.status = OBJ_ACTIVE;
+ effect->obj.id = OBJ_EFFECT_396;
+ effect->obj.pos.x = xPos;
+ effect->obj.pos.y = yPos;
+ effect->obj.pos.z = zPos;
+ effect->vel.x = xVel;
+ effect->vel.y = yVel;
+ effect->vel.z = zVel;
+ effect->unk_4E = 1;
+ effect->unk_4C = arg7;
+ if (arg7 < 8) {
+ effect->scale2 = (Rand_ZeroOne() * 2.5f) + 5.0f;
+ }
+ effect->obj.rot.x = Rand_ZeroOne() * 360.0f;
+ effect->obj.rot.y = Rand_ZeroOne() * 360.0f;
+ effect->unk_60.x = (Rand_ZeroOne() * 10.0f) + 10.0f;
+ effect->unk_60.y = (Rand_ZeroOne() * 10.0f) + 10.0f;
+ Object_SetInfo(&effect->info, effect->obj.id);
+ effect->info.unk_10 = 100.0f;
+}
+
+void func_i6_8018C8D4(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, s32 arg6) {
+ s32 i;
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == OBJ_FREE) {
+ func_i6_8018C7A0(&gEffects[i], xPos, yPos, zPos, xVel, yVel, zVel, arg6);
+ break;
+ }
+ }
+}
+
+void func_i6_8018C958(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale) {
+ Effect_Initialize(effect);
+ effect->obj.status = OBJ_ACTIVE;
+ effect->obj.id = OBJ_EFFECT_396;
+ effect->unk_4E = 10;
+ effect->obj.pos.x = xPos;
+ effect->obj.pos.y = yPos;
+ effect->obj.pos.z = zPos;
+ effect->vel.x = xVel;
+ effect->vel.y = yVel;
+ effect->vel.z = zVel;
+ effect->scale1 = scale;
+ effect->scale2 = scale * 0.1f;
+ effect->unk_44 = 100;
+ effect->obj.rot.z = Rand_ZeroOne() * 360.0f;
+ effect->unk_60.z = (Rand_ZeroOne() - 0.5f) * 20.0f;
+ Object_SetInfo(&effect->info, effect->obj.id);
+ effect->info.unk_14 = 1;
+ effect->info.unk_10 = 100.0f;
+}
+
+void func_i6_8018CA50(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale) {
+ s32 i;
+
+ for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
+ if (gEffects[i].obj.status == OBJ_FREE) {
+ func_i6_8018C958(&gEffects[i], xPos, yPos, zPos, xVel, yVel, zVel, scale);
+ break;
+ }
+ }
+}
+
+void func_i6_8018CAD4(Effect* effect) {
+ s32 i;
+ Item* item;
+ Vec3f vec;
+ Vec3f vel;
+ f32 effectXpos;
+ f32 effectYpos;
+ f32 effectZpos;
+ f32 pitch;
+ f32 yaw;
+ f32 sp40;
+ f32 sp3C;
+ f32 sp38;
+ f32 sp34;
+
+ effect->obj.rot.x += effect->unk_60.x;
+ effect->obj.rot.y += effect->unk_60.y;
+ switch (effect->unk_4E) {
+ case 0:
+ if (gBosses[0].actionState == 17) {
+ Math_SmoothStepToF(&effect->obj.pos.x, gBosses[0].obj.pos.x, 0.03f, 10.0f, 0);
+ Math_SmoothStepToF(&effect->obj.pos.y, gBosses[0].obj.pos.y - 200.0f, 0.03f, 10.0f, 0);
+ effectXpos = effect->obj.pos.x;
+ effectYpos = effect->obj.pos.y;
+ effectZpos = effect->obj.pos.z;
+ sp3C = gBosses[0].obj.pos.x;
+ sp38 = gBosses[0].obj.pos.y - 150.0f;
+ sp34 = gBosses[0].obj.pos.z - 100.0f;
+ yaw = Math_Atan2F(sp3C - effectXpos, sp34 - effectZpos);
+ sp40 = sqrtf(SQ(sp3C - effectXpos) + SQ(sp34 - effectZpos));
+ pitch = -Math_Atan2F(sp38 - effectYpos, sp40);
+ Matrix_RotateY(gCalcMatrix, yaw, 0);
+ Matrix_RotateX(gCalcMatrix, pitch, 1);
+ vec.x = 0.0f;
+ vec.y = 0.0f;
+ vec.z = 30.0f;
+ Matrix_MultVec3f(gCalcMatrix, &vec, &vel);
+ effect->vel.x = vel.x;
+ effect->vel.y = vel.y;
+ effect->vel.z = vel.z - D_80177D08;
+ if ((fabsf(effect->obj.pos.x - gBosses[0].obj.pos.x) <= 100.0f) &&
+ (fabsf(effect->obj.pos.z - (gBosses[0].obj.pos.z - 100.0f)) <= 100.0f)) {
+ Object_Kill(&effect->obj, effect->sfxPos);
+ }
+ } else {
+ effect->info.unk_10 = 100.0f;
+ Math_SmoothStepToF(&effect->vel.x, 0.0f, 0.05f, 1.0f, 0);
+ Math_SmoothStepToF(&effect->vel.y, 0.0f, 0.05f, 1.0f, 0);
+ Math_SmoothStepToF(&effect->vel.z, 70.0f, 0.05f, 2.0f, 0);
+ func_8007A774(&gPlayer[0], effect, 100.0f);
+ if (effect->unk_44 != 0) {
+ func_8007D0E0(effect->obj.pos.x, effect->obj.pos.y, effect->obj.pos.z, 10.0f);
+ func_8007A6F0(&effect->obj.pos, 0x2903A008);
+ Object_Kill(&effect->obj, effect->sfxPos);
+ }
+ }
+ effect->unk_44 = 0;
+ break;
+ case 1:
+ func_8007A774(&gPlayer[0], effect, 100.0f);
+ if (effect->unk_44 != 0) {
+ func_8007D0E0(effect->obj.pos.x, effect->obj.pos.y, effect->obj.pos.z, 10.0f);
+ func_8007A6F0(&effect->obj.pos, 0x2903A008);
+ Object_Kill(&effect->obj, effect->sfxPos);
+ if (Rand_ZeroOne() < 0.1f) {
+ item = gItems;
+ for (i = 0; i < 20; i++, item++) {
+ if (item->obj.status == OBJ_FREE) {
+ Item_Initialize(item);
+ item->obj.status = OBJ_INIT;
+ if (Rand_ZeroOne() < 0.5f) {
+ item->obj.id = OBJ_ITEM_SILVER_RING;
+ } else {
+ item->obj.id = OBJ_ITEM_BOMB;
+ }
+ item->obj.pos.x = effect->obj.pos.x;
+ item->obj.pos.y = effect->obj.pos.y;
+ item->obj.pos.z = effect->obj.pos.z;
+ item->timer_4A = 8;
+ Object_SetInfo(&item->info, item->obj.id);
+ item->unk_50 = 90.0f;
+ break;
+ }
+ }
+ }
+ }
+ break;
+ case 10:
+ effect->obj.rot.z += effect->unk_60.z;
+ Math_SmoothStepToF(&effect->scale2, effect->scale1, 0.05f, 0.3f, 0);
+ Math_SmoothStepToF(&effect->vel.y, 0.0f, 0.05f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&effect->vel.x, 0.0f, 0.05f, 0.5f, 0.0f);
+ effect->unk_44 -= 10;
+ if (effect->unk_44 < 0) {
+ Object_Kill(&effect->obj, effect->sfxPos);
+ }
+ break;
+ }
+}
+
+extern Gfx* D_2010A30;
+static Gfx* D_i6_801A6790[10] = {
+ D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_3016660, D_3015D80,
+};
+
+void func_i6_8018CF98(Effect* effect) {
+
+ if (effect->unk_4E == 10) {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, effect->unk_44);
+ Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, &D_2010A30);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x1D);
+ if (effect->unk_4C < 8) {
+ Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ }
+ gSPDisplayList(gMasterDisp++, D_i6_801A6790[effect->unk_4C]);
+ RCP_SetupDL(&gMasterDisp, 0x40);
+ }
+}
+
+void func_i6_8018D0D8(Boss* boss) {
+ if ((gPlayer[0].timer_498 == 0) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) &&
+ (fabsf(boss->vwork[10].x - gPlayer[0].pos.x) < 700.0f) &&
+ (fabsf(boss->vwork[10].y - gPlayer[0].pos.y) < 700.0f)) {
+ Player_ApplyDamage(&gPlayer[0], 0, 40);
+ }
+}
+
+void func_i6_8018D16C(Boss* boss) {
+ func_8001D400(0x18);
+ D_i6_801A7F5C = D_i6_801A7F64 = D_i6_801A7F6C = D_i6_801A7F74 = D_i6_801A7F7C = D_i6_801A8430 = 0.0f;
+ D_800C9C30 = 0.0f;
+ boss->health = 100;
+ boss->fwork[18] = 1.0f;
+ boss->fwork[17] = 1.0f;
+ gLight1R = 0xFF;
+ gLight1G = 80;
+ gLight1B = 20;
+ gAmbientR = 1;
+ gAmbientG = 0;
+ gAmbientB = 20;
+ boss->timer_058 = 10;
+ boss->swork[4] = boss->swork[5] = 200;
+ boss->swork[6] = 100;
+ gBossActive = 1;
+ D_80177AB0 = 1;
+ boss->info.hitbox[16] = 200.0f;
+ boss->info.hitbox[22] = 200.0f;
+ func_8001D444(0, 0x8021, 0, 0);
+}
+
+void func_i6_8018D2B0(Boss* boss) {
+ s32 i;
+ Vec3f sp68;
+
+ if ((boss->swork[5] < 0) && (boss->swork[4] < 0)) {
+ if ((boss->dmgType != DMG_NONE) && (boss->dmgPart == 0 || boss->dmgPart == 1)) {
+ boss->dmgType = DMG_NONE;
+ if (boss->actionState < 12) {
+ boss->health -= boss->damage;
+ boss->timer_05C = 20;
+ if ((boss->actionState == 9) || (boss->actionState == 10)) {
+ if (boss->health <= 0) {
+ D_Timer_80161A60 = 8;
+ Audio_PlaySfx(0x2940D09A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x31009063, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x19403070, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_8001A55C(boss->sfxPos, 0x11030073);
+ func_800182F4(0x100100FF);
+ func_800182F4(0x110100FF);
+ boss->actionState = 31;
+ boss->timer_050 = 200;
+ gPlayer[0].state_1C8 = PLAYERSTATE_1C8_7;
+ gPlayer[0].unk_1D0 = 0;
+ } else if (boss->health < 50) {
+ Audio_PlaySfx(0x2943500F, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ } else {
+ Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ } else if (boss->health <= 0) {
+ Audio_PlaySfx(0x19403070, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_800182F4(0x100100FF);
+ func_800182F4(0x110100FF);
+ if (D_8017827C == 0) {
+ boss->actionState = 30;
+ } else {
+ boss->actionState = 32;
+ }
+ boss->fwork[9] = 0.0f;
+ boss->unk_04C = 0;
+ gCsFrameCount = 0;
+ boss->timer_05C = 100;
+ } else {
+ Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+ }
+ } else if (boss->dmgType != DMG_NONE) {
+ switch (boss->dmgPart) {
+ case 0:
+ if (boss->actionState < 11) {
+ boss->swork[6] -= boss->damage;
+ boss->swork[0] = 30;
+ Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (boss->swork[6] <= 0) {
+ boss->swork[6] = 100;
+ boss->actionState = 12;
+ boss->timer_050 = 120;
+ boss->unk_04C = 0;
+ boss->fwork[9] = 0.0f;
+ Audio_PlaySfx(0x1940306F, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+ break;
+ case 1:
+ if (boss->actionState < 12) {
+ boss->swork[6] -= boss->damage;
+ boss->swork[1] = 30;
+ Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (boss->swork[6] <= 0) {
+ boss->swork[6] = 100;
+ boss->actionState = 13;
+ boss->timer_050 = 120;
+ boss->unk_04C = 0;
+ boss->fwork[9] = 0.0f;
+ Audio_PlaySfx(0x1940306F, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+ break;
+ case 2:
+ case 3:
+ if (boss->swork[7] == 0) {
+ boss->swork[boss->dmgPart] = 30;
+ if (boss->dmgPart == 2) {
+ sp68.x = boss->vwork[0].x;
+ sp68.y = boss->vwork[0].y;
+ sp68.z = boss->vwork[0].z;
+ boss->swork[4] -= boss->damage;
+ if (boss->swork[4] < 0) {
+ boss->info.hitbox[16] = 0.0f;
+ func_8007BFFC(boss->vwork[0].x, boss->vwork[0].y, boss->vwork[0].z, 0.0f, 0.0f, 0.0f, 20.0f,
+ 15);
+
+ for (i = 0; i < 30; i++) {
+ func_800794CC(boss->vwork[0].x + ((Rand_ZeroOne() - 0.5f) * 500.0f),
+ boss->vwork[0].y + ((Rand_ZeroOne() - 0.5f) * 500.0f), boss->vwork[0].z,
+ Rand_ZeroOne() + 1.0f);
+ }
+ func_8007B344(boss->vwork[0].x, boss->vwork[0].y, boss->vwork[0].z, 20.0f, 5);
+ func_8007A6F0(&sp68, 0x2903B009);
+ } else {
+ func_8007A6F0(&sp68, 0x29034003);
+ }
+ } else {
+ sp68.x = boss->vwork[1].x;
+ sp68.y = boss->vwork[1].y;
+ sp68.z = boss->vwork[1].z;
+ boss->swork[5] -= boss->damage;
+ if (boss->swork[5] < 0) {
+ boss->info.hitbox[22] = 0.0f;
+ func_8007BFFC(boss->vwork[1].x, boss->vwork[1].y, boss->vwork[1].z, 0.0f, 0.0f, 0.0f, 20.0f,
+ 15);
+
+ for (i = 0; i < 30; i++) {
+ func_800794CC(boss->vwork[1].x + ((Rand_ZeroOne() - 0.5f) * 500.0f),
+ boss->vwork[1].y + ((Rand_ZeroOne() - 0.5f) * 500.0f), boss->vwork[1].z,
+ Rand_ZeroOne() + 1.0f);
+ }
+ func_8007B344(boss->vwork[1].x, boss->vwork[1].y, boss->vwork[1].z, 20.0f, 5);
+ func_8007A6F0(&sp68, 0x2903B009);
+ } else {
+ func_8007A6F0(&sp68, 0x29034003);
+ }
+ }
+ }
+ break;
+ }
+ boss->dmgType = DMG_NONE;
+ }
+}
+
+void func_i6_8018D9C0(Boss* boss) {
+
+ switch (boss->actionState) {
+ case 2:
+ boss->actionState = 3;
+ break;
+ case 3:
+ boss->actionState = 4;
+ break;
+ case 4:
+ boss->actionState = 5;
+ boss->timer_050 = 30;
+ break;
+ case 5:
+ boss->actionState = 6;
+ boss->timer_050 = 40;
+ break;
+ case 6:
+ boss->actionState = 17;
+ boss->timer_050 = 180;
+ boss->fwork[16] = 0.0f;
+ break;
+ case 12:
+ case 13:
+ case 14:
+ boss->actionState = 7;
+ boss->timer_050 = 150;
+ break;
+ default:
+ boss->actionState = 2;
+ break;
+ }
+ boss->fwork[9] = 0.0f;
+ boss->unk_04C = 0;
+ boss->fwork[1] = 0.0f;
+ boss->fwork[4] = 0.0f;
+ boss->fwork[7] = 0.0f;
+}
+
+void func_i6_8018DA94(Boss* boss, Vec3f* arg1) {
+ s32 i;
+
+ func_8007BFFC(arg1->x, arg1->y, arg1->z, 0.0f, 0.0f, 0.0f, 10.0f, 10);
+ for (i = 0; i < 7; i++) {
+ func_800794CC(((Rand_ZeroOne() - 0.5f) * 200.0f) + arg1->x, ((Rand_ZeroOne() - 0.5f) * 200.0f) + arg1->y,
+ arg1->z, (Rand_ZeroOne() * 0.5f) + 1.0f);
+ }
+ func_8007B344(arg1->x, arg1->y, arg1->z, 10.0f, 5);
+ Audio_PlaySfx(0x2903B009, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+extern AnimationHeader D_C00208C;
+extern AnimationHeader D_C002654;
+extern AnimationHeader D_C002B08;
+extern AnimationHeader D_C006F08;
+extern AnimationHeader D_C00DE48;
+extern AnimationHeader D_C00E598;
+extern AnimationHeader D_C017050;
+extern AnimationHeader D_C017430;
+extern AnimationHeader D_C018BC4;
+extern AnimationHeader D_C023B54;
+extern AnimationHeader D_C0240D0;
+extern AnimationHeader D_C025C00;
+extern AnimationHeader D_C029F74;
+extern AnimationHeader D_C02E494;
+extern AnimationHeader D_C02EDA0;
+extern AnimationHeader D_C030244;
+extern AnimationHeader D_C033780;
+extern AnimationHeader D_C033D98;
+
+static f32 D_i6_801A67B8[] = { 0.0f, 0.0f, 0.0f };
+
+void func_i6_8018DBF0(Boss* boss) {
+ s32 i;
+ s32 frameCountMask;
+ Vec3f spD0[100];
+ f32 xDisplacement;
+ f32 yDisplacement;
+ f32 zDisplacement;
+ Effect* effect;
+ PlayerShot* playerShot;
+ Boss* boss1;
+ Player* player;
+ f32 yaw;
+ f32 pitch;
+ s16 limbCount;
+ s32 initialActionState;
+ s32 pad;
+
+ player = &gPlayer[0];
+ gBossFrameCount++;
+
+ initialActionState = boss->actionState;
+
+ func_i6_801876FC();
+ gAmbientR = 10;
+ gAmbientG = 0;
+ gAmbientB = 20;
+ D_8017812C = 0;
+ boss->fwork[19] += 5.0f;
+ if (boss->swork[9] != 0) {
+ boss->swork[9]--;
+ Math_SmoothStepToF(&boss->fwork[17], 1.5f, 0.7f, 0.4f, 0);
+ } else {
+ Math_SmoothStepToF(&boss->fwork[17], 1.0f, 0.2f, 0.3f, 0);
+ }
+
+ boss->fwork[18] = boss->fwork[17];
+ if (boss->swork[10] != 0) {
+ boss->swork[10]--;
+ if (boss->swork[10] < 20) {
+ frameCountMask = 0x1F;
+ } else if (boss->swork[10] < 30) {
+ frameCountMask = 7;
+ } else if (boss->swork[10] < 40) {
+ frameCountMask = 1;
+ } else {
+ frameCountMask = 0;
+ }
+ if (!(gGameFrameCount & frameCountMask)) {
+ func_i6_8018CA50(boss->vwork[6].x, boss->vwork[6].y, boss->vwork[6].z, 0.0f, -30.0f, 0.0f, 30.0f);
+ func_i6_8018CA50(boss->vwork[7].x, boss->vwork[7].y, boss->vwork[7].z, 0.0f, -30.0f, 0.0f, 30.0f);
+ func_i6_8018CA50(boss->vwork[8].x, boss->vwork[8].y, boss->vwork[8].z, -30.0f, 0.0f, 0.0f, 30.0f);
+ func_i6_8018CA50(boss->vwork[9].x, boss->vwork[9].y, boss->vwork[9].z, 30.0f, 0.0f, 0.0f, 30.0f);
+ }
+ }
+ Math_SmoothStepToF(&boss->fwork[20], 0.0f, 1.0f, 0.1f, 0.01f);
+ Math_SmoothStepToF(&boss->fwork[21], 0.0f, 1.0f, 0.05f, 0.001f);
+ func_i6_8018D2B0(boss);
+ boss->swork[7] = 0;
+ boss->fwork[14] = boss->fwork[15] = 0.0f;
+ if (boss->actionState >= 2) {
+ gBlurAlpha = 0x80;
+ }
+
+ for (i = 0; i < 4; i++) {
+ if (boss->swork[i] > 0) {
+ boss->swork[i]--;
+ }
+ }
+ Math_SmoothStepToF(&boss->obj.pos.z, gPlayer[0].pos.z + boss->fwork[6], boss->fwork[8], boss->fwork[7], 0);
+ Math_SmoothStepToF(&boss->obj.pos.x, boss->fwork[0], boss->fwork[2], boss->fwork[1], 0);
+ Math_SmoothStepToF(&boss->obj.pos.y, boss->fwork[3], boss->fwork[5], boss->fwork[4], 0);
+ Math_SmoothStepToF(&boss->fwork[11], 0.0f, 0.1f, 2.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[12], 0.0f, 0.1f, 2.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[13], 0.0f, 0.1f, 2.0f, 0);
+ if (player->unk_234 != 0) {
+ xDisplacement = gPlayer[0].pos.x - boss->vwork[2].x;
+ yDisplacement = gPlayer[0].pos.y - boss->vwork[2].y;
+ zDisplacement = gPlayer[0].unk_138 - boss->vwork[2].z;
+ yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
+ pitch = Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement))));
+
+ if ((yaw > 30.0f) && (yaw < 180.0f)) {
+ yaw = 30.0f;
+ }
+ if ((yaw < 330.0f) && (yaw > 180.0f)) {
+ yaw = 330.0f;
+ }
+ if ((pitch > 30.0f) && (pitch < 180.0f)) {
+ pitch = 30.0f;
+ }
+ if ((pitch < 330.0f) && (pitch > 180.0f)) {
+ pitch = 330.0f;
+ }
+ } else {
+ yaw = 0.0f;
+ pitch = 345.0f;
+ }
+ Math_SmoothStepToAngle(&boss->vwork[4].x, pitch, 0.5f, 5.0f, 0);
+ Math_SmoothStepToAngle(&boss->vwork[4].y, yaw, 0.5f, 5.0f, 0);
+ if (player->unk_234 != 0) {
+ xDisplacement = gPlayer[0].pos.x - boss->vwork[3].x;
+ yDisplacement = gPlayer[0].pos.y - boss->vwork[3].y;
+ zDisplacement = gPlayer[0].unk_138 - boss->vwork[3].z;
+ yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
+ pitch = Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement))));
+ if ((yaw > 30.0f) && (yaw < 180.0f)) {
+ yaw = 30.0f;
+ }
+ if ((yaw < 330.0f) && (yaw > 180.0f)) {
+ yaw = 330.0f;
+ }
+ if ((pitch > 30.0f) && (pitch < 180.0f)) {
+ pitch = 30.0f;
+ }
+ if ((pitch < 330.0f) && (pitch > 180.0f)) {
+ pitch = 330.0f;
+ }
+ } else {
+ yaw = 0.0f;
+ pitch = 345.0f;
+ }
+ Math_SmoothStepToAngle(&boss->vwork[5].x, pitch, 0.5f, 5.0f, 0);
+ Math_SmoothStepToAngle(&boss->vwork[5].y, yaw, 0.5f, 5.0f, 0);
+ switch (boss->actionState) {
+ case 0:
+ boss->fwork[8] = 0.1f;
+ boss->fwork[7] = 50.0f;
+ boss->actionState = 1;
+ boss->timer_050 = 60;
+ boss->timer_052 = 80;
+ boss->timer_054 = 150;
+ boss->fwork[9] = 1.0f;
+ /* fallthrough */
+ case 1:
+ boss->timer_05A = 100;
+ if (boss->timer_054 == 65) {
+ Audio_PlaySfx(0x1940306E, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->timer_050 != 0) {
+ boss->fwork[6] = -3000.0f;
+ } else {
+ boss->fwork[6] = -1000.0f;
+ Math_SmoothStepToF(&D_i6_801A7F5C, gLight1R, 1.0f, 4.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F64, gLight1G, 1.0f, 3.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F6C, gLight1B, 1.0f, 3.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F74, gAmbientR, 1.0f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F7C, gAmbientG, 1.0f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A8430, gAmbientB, 1.0f, 2.0f, 0.0f);
+ }
+ Math_SmoothStepToF(&D_800C9C30, 32.0f, 1.0f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&player->unk_034, 0.0f, 0.2f, 3.0f, 0);
+ boss->fwork[8] = 0.1f;
+ Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 10.0f, 0);
+ if (boss->timer_052 == 0) {
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C002B08)) {
+ boss->unk_04C = 0;
+ }
+ limbCount = Animation_GetFrameData(&D_C002B08, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ } else {
+ if (boss->timer_052 < 16) {
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C033D98)) {
+ boss->unk_04C = Animation_GetFrameCount(&D_C033D98) - 1;
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C033D98, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ if (boss->timer_052 == 1) {
+ boss->unk_04C = 0;
+ }
+ }
+ Math_SmoothStepToF(&boss->fwork[9], 0.2f, 1.0f, 0.01f, 0);
+ if (boss->timer_054 == 0) {
+ boss->actionState = 2;
+ boss->unk_04C = 0;
+ boss->fwork[7] = boss->fwork[9] = 0.0f;
+ boss->vel.z = -20.0f;
+ }
+ break;
+ case 2:
+ boss->fwork[6] = -4000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 5.0f, 0);
+ boss->fwork[0] = 0.0f;
+ boss->fwork[2] = 0.05f;
+ boss->fwork[3] = 0.0f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 10.0f, 1.0f, 0.5f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 10.0f, 1.0f, 0.5f, 0);
+ Math_SmoothStepToF(&boss->fwork[9], 0.7f, 1.0f, 0.005f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C033780)) {
+ func_i6_8018D9C0(boss);
+ }
+ limbCount = Animation_GetFrameData(&D_C033780, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ break;
+ case 3:
+ if (boss->swork[4] < 0) {
+ func_i6_8018D9C0(boss);
+ } else {
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y + 1000.0f;
+ if (boss->unk_04C == 60) {
+ Audio_PlaySfx(0x1940306A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->unk_04C > 60) {
+ if (boss->unk_04C == 76) {
+ boss->fwork[7] = 0.0f;
+ }
+ if (boss->unk_04C > 76) {
+ boss->fwork[6] = -2500.0f;
+ boss->fwork[8] = 0.1f;
+ Math_SmoothStepToF(&boss->fwork[7], 100.0f, 1.0f, 10.0f, 0);
+ } else {
+ boss->fwork[6] = -1500.0f;
+ boss->fwork[8] = 0.3f;
+ Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 40.0f, 0);
+ }
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 2.0f, 1.0f, 0.5f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 2.0f, 1.0f, 0.5f, 0);
+ boss->swork[7] = 1;
+ boss->fwork[14] = -100.0f;
+ boss->fwork[15] = -50.0f;
+ } else {
+ boss->fwork[6] = -4000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 2.0f, 0);
+ boss->fwork[2] = 0.1f;
+ boss->fwork[5] = 0.1f;
+ boss->fwork[14] = 50.0f;
+ Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
+ }
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C029F74)) {
+ func_i6_8018D9C0(boss);
+ }
+ limbCount = Animation_GetFrameData(&D_C029F74, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ }
+ break;
+ case 4:
+ if (boss->swork[4] < 0) {
+ func_i6_8018D9C0(boss);
+ } else {
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y;
+ if (boss->unk_04C == 55) {
+ Audio_PlaySfx(0x1940306A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->unk_04C > 55) {
+ boss->fwork[6] = -1500.0f;
+ boss->fwork[8] = 0.3f;
+ Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 40.0f, 0);
+ boss->swork[7] = 1;
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ boss->fwork[14] = -100.0f;
+ Math_SmoothStepToF(&boss->fwork[1], 2.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 2.0f, 1.0f, 1.0f, 0);
+ } else {
+ boss->fwork[6] = -4000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 2.0f, 0);
+ boss->fwork[2] = 0.1f;
+ boss->fwork[5] = 0.1f;
+ boss->fwork[14] = 50.0f;
+ Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 1.0f, 0);
+ }
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C02E494)) {
+ func_i6_8018D9C0(boss);
+ }
+ limbCount = Animation_GetFrameData(&D_C02E494, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ }
+ break;
+ case 5:
+ if (boss->swork[5] < 0) {
+ func_i6_8018D9C0(boss);
+ } else {
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y + 500.0f;
+ if (boss->timer_050 != 0) {
+ boss->fwork[6] = -4000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 5.0f, 0);
+ boss->fwork[2] = 0.1f;
+ boss->fwork[5] = 0.1f;
+ Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 2.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 2.0f, 0);
+ } else {
+ boss->unk_04C++;
+ boss->fwork[6] = -1400.0f;
+ boss->fwork[8] = 0.2f;
+ Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 40.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 2.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 2.0f, 1.0f, 1.0f, 0);
+ if (boss->unk_04C == 5) {
+ Audio_PlaySfx(0x1940306B, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ boss->swork[7] = 1;
+ boss->fwork[14] = 100.0f;
+ }
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C030244)) {
+ func_i6_8018D9C0(boss);
+ }
+ limbCount = Animation_GetFrameData(&D_C030244, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ }
+ break;
+ case 6:
+ if ((boss->swork[4] < 0) || (boss->swork[5] < 0)) {
+ func_i6_8018D9C0(boss);
+ } else {
+ if (boss->timer_050 == 1) {
+ Audio_PlaySfx(0x1940306C, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->timer_050 != 0) {
+ boss->fwork[6] = -4000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 40.0f, 1.0f, 3.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 1.0f, 0);
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y + 300.0f;
+ } else {
+ boss->unk_04C++;
+ boss->fwork[6] = -2000.0f;
+ boss->fwork[8] = 0.2f;
+ Math_SmoothStepToF(&boss->fwork[7], 50.0f, 1.0f, 10.0f, 0);
+ boss->fwork[2] = 0.1f;
+ boss->fwork[5] = 0.1f;
+ Math_SmoothStepToF(&boss->fwork[1], 10.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 10.0f, 1.0f, 1.0f, 0);
+ boss->swork[7] = 1;
+ if (boss->unk_04C > 18) {
+ Math_SmoothStepToF(&boss->fwork[11], 110.0f, 1.0f, 18.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[12], 20.0f, 1.0f, 3.6f, 0);
+ Math_SmoothStepToF(&boss->fwork[13], 80.0f, 1.0f, 15.0f, 0);
+ }
+ if (boss->unk_04C == 25) {
+ Audio_PlaySfx(0x09008015, D_i6_801A67B8, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ }
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C02EDA0)) {
+ func_i6_8018D9C0(boss);
+ }
+ limbCount = Animation_GetFrameData(&D_C02EDA0, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ }
+ break;
+ case 7:
+ if (boss->swork[5] < 0) {
+ func_i6_8018D9C0(boss);
+ } else {
+ if (boss->unk_04C == 48) {
+ Audio_PlaySfx(0x3103108B, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->unk_04C > 48) {
+ func_i6_8018D0D8(boss);
+ }
+ if (boss->unk_04C > 45) {
+ Math_SmoothStepToF(&boss->fwork[20], 1.0f, 1.0f, 0.2f, 0.01f);
+ Math_SmoothStepToF(&boss->fwork[21], 1.0f, 0.5f, 0.15f, 0.01f);
+ if (!(gGameFrameCount & 1)) {
+ gAmbientR = 200;
+ gAmbientG = 90;
+ gAmbientB = 255;
+ } else {
+ gAmbientR = 100;
+ gAmbientG = 45;
+ gAmbientB = 127;
+ }
+ } else {
+ Math_SmoothStepToF(&boss->fwork[20], 0.15f, 1.0f, 0.15f, 0.01f);
+ Math_SmoothStepToF(&boss->fwork[21], 0.5f, 1.0f, 0.11f, 0.001f);
+ }
+ boss->fwork[0] = player->pos.x + 500.0f;
+ boss->fwork[3] = player->pos.y + 750.0f;
+ boss->fwork[6] = -5000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 5.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 5.0f, 1.0f, 2.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 5.0f, 1.0f, 2.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C018BC4)) {
+ boss->unk_04C = Animation_GetFrameCount(&D_C018BC4) - 1;
+ if (boss->timer_050 == 0) {
+ func_i6_8018D9C0(boss);
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C018BC4, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ }
+ break;
+ case 12:
+ if ((boss->swork[4] < 0) || (boss->swork[5] < 0)) {
+ boss->actionState = 14;
+ boss->unk_04C = 0;
+ boss->fwork[9] = 0.0f;
+ } else {
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 40.0f, 1.0f, 2.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C025C00)) {
+ boss->unk_04C = Animation_GetFrameCount(&D_C025C00) - 1;
+ if (boss->timer_050 == 0) {
+ func_i6_8018D9C0(boss);
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C025C00, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ }
+ break;
+ case 13:
+ if ((boss->swork[4] < 0) || (boss->swork[5] < 0)) {
+ boss->actionState = 14;
+ boss->unk_04C = 0;
+ boss->fwork[9] = 0.0f;
+ } else {
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 20.0f, 1.0f, 2.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C006F08)) {
+ boss->unk_04C = Animation_GetFrameCount(&D_C006F08) - 1;
+ if (boss->timer_050 == 0) {
+ func_i6_8018D9C0(boss);
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C006F08, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ }
+ break;
+ case 14:
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 20.0f, 1.0f, 2.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C002654)) {
+ boss->unk_04C = 0;
+ if (boss->timer_050 == 0) {
+ func_i6_8018D9C0(boss);
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C002654, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ break;
+ case 15:
+ if (boss->swork[8] == 1) {
+ boss->fwork[6] = 100.0f;
+ } else {
+ boss->fwork[6] = -3000.0f;
+ }
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 5.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
+ boss->fwork[0] = 0.0f;
+ boss->fwork[3] = 0.0f;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ if (boss->unk_04C == 15) {
+ Audio_PlaySfx(0x29022088, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if ((boss->unk_04C > 35) && (boss->unk_04C < 150) && !(boss->unk_04C & 0x1F)) {
+ Audio_PlaySfx(0x29022089, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ if (player->state_1C8 == PLAYERSTATE_1C8_11) {
+ D_Timer_80177BD0[0] = 10;
+ }
+ }
+ if ((boss->unk_04C == 20) && (player->state_1C8 == PLAYERSTATE_1C8_11)) {
+ player->unk_234 = 0;
+ for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
+ if (gEffects[i].obj.id == OBJ_EFFECT_396) {
+ Object_Kill(&gEffects[i].obj, gEffects[i].sfxPos);
+ }
+ }
+ }
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C00DE48)) {
+ boss->unk_04C = Animation_GetFrameCount(&D_C00DE48) - 1;
+ if (boss->timer_050 == 0) {
+ boss->actionState = 16;
+ boss->unk_04C = 0;
+ boss->timer_050 = 30;
+ boss->fwork[9] = 0.0f;
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C00DE48, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ if ((boss->unk_04C == 45) && (boss->swork[8] == 2)) {
+ boss->actionState = 18;
+ boss->unk_04C = 0;
+ boss->unk_044 = 0;
+ boss->timer_050 = 40;
+ boss->fwork[9] = 0.0f;
+ }
+ break;
+ case 16:
+ if (boss->swork[8] == 1) {
+ boss->fwork[6] = 100.0f;
+ } else {
+ boss->fwork[6] = -3000.0f;
+ }
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 50.0f, 1.0f, 2.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y + 100.0f;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ if (boss->timer_050 == 0) {
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C023B54)) {
+ boss->unk_04C = Animation_GetFrameCount(&D_C023B54) - 1;
+ func_i6_8018D9C0(boss);
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C023B54, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ if (boss->unk_04C == 10) {
+ Audio_PlaySfx(0x3140208A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if ((boss->unk_04C == 13) && (player->state_1C8 == PLAYERSTATE_1C8_11)) {
+ player->unk_234 = 1;
+ player->unk_1D0 = 1;
+ player->timer_1F8 = 60;
+ player->timer_498 = 50;
+ boss->swork[8] = 0;
+ D_Timer_80177BD0[0] = 30;
+ if (player->wings.rightState == 2) {
+ gRightWingHealth[0] = 0;
+ player->wings.rightState = 1;
+ func_i6_8018C8D4(boss->obj.pos.x, boss->obj.pos.y - 200.0f, boss->obj.pos.z,
+ (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, 10.0f, 8);
+ }
+ if (player->wings.leftState == 2) {
+ gLeftWingHealth[0] = 0;
+ player->wings.leftState = 1;
+ func_i6_8018C8D4(boss->obj.pos.x, boss->obj.pos.y - 200.0f, boss->obj.pos.z,
+ (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, 10.0f, 9);
+ }
+ }
+ if (boss->unk_04C >= 10 && boss->unk_04C < 20) {
+ for (i = 0; i < 10; i++) {
+ func_i6_8018C8D4(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 100.0f),
+ (boss->obj.pos.y - 200.0f) + ((Rand_ZeroOne() - 0.5f) * 100.0f), boss->obj.pos.z,
+ (Rand_ZeroOne() - 0.5f) * 50.0f, (Rand_ZeroOne() - 0.5f) * 50.0f,
+ (Rand_ZeroOne() * 5.0f) + 5.0f, (s32) (Rand_ZeroOne() * 7.9));
+ }
+ }
+ break;
+ case 17:
+ // FAKE!!
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ Math_SmoothStepToF(&D_801779A8[gMainController], 50.0f, 1.0f, 1.8f, 0.0f);
+ boss->timer_056 = 50;
+
+ if ((boss->timer_050 > 70) && (boss->timer_050 < 1000) && !(gGameFrameCount & 3)) {
+ func_i6_8018C734(gPlayer[0].camEye.x + ((Rand_ZeroOne() - 0.5f) * 3000.0f),
+ gPlayer[0].camEye.y + ((Rand_ZeroOne() - 0.5f) * 3000.0f),
+ gPlayer[0].camEye.z - D_80177D20, (s32) (Rand_ZeroOne() * 7.9));
+ }
+ if (boss->timer_050 > 0) {
+ playerShot = gPlayerShots;
+ effect = gEffects;
+ for (i = 0; i < 16; i++, playerShot++) {
+ Math_SmoothStepToF(&playerShot->obj.pos.x, boss->obj.pos.x, 0.5f, boss->fwork[16], 0);
+ Math_SmoothStepToF(&playerShot->obj.pos.y, boss->obj.pos.y - 100.0f, 0.5f, boss->fwork[16], 0);
+ Math_SmoothStepToF(&playerShot->vel.x, 0.0f, 0.9f, 5.0f, 0);
+ Math_SmoothStepToF(&playerShot->vel.y, 0.0f, 0.9f, 5.0f, 0);
+ if ((playerShot->obj.id == PLAYERSHOT_3) && (playerShot->obj.status == 1) &&
+ (playerShot->unk_5C == 0) && (fabsf(playerShot->obj.pos.x - boss->obj.pos.x) < 200.0f) &&
+ (fabsf(playerShot->obj.pos.y - (boss->obj.pos.y - 100.0f)) < 200.0f) &&
+ (fabsf(playerShot->obj.pos.z - (boss->obj.pos.z - 200.0f)) < 100.0f)) {
+ Object_Kill(&playerShot->obj, playerShot->sfxPos);
+ boss->actionState = 15;
+ boss->fwork[9] = 0.2f;
+ boss->unk_04C = 0;
+ boss->swork[8] = 2;
+ Audio_PlaySfx(0x1940306D, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ }
+ }
+ for (i = 0; i < ARRAY_COUNT(gEffects); i++, effect++) {
+ if ((effect->obj.status != OBJ_FREE) && (effect->obj.id != OBJ_EFFECT_396)) {
+ Math_SmoothStepToF(&effect->obj.pos.x, boss->obj.pos.x, 0.5f, boss->fwork[16], 0);
+ Math_SmoothStepToF(&effect->obj.pos.y, boss->obj.pos.y - 100.0f, 0.5f, boss->fwork[16], 0);
+ Math_SmoothStepToF(&effect->obj.pos.z, boss->obj.pos.z - 200.0f, 0.5f, boss->fwork[16], 0);
+ Math_SmoothStepToF(&effect->vel.x, 0.0f, 0.9f, 5.0f, 0);
+ Math_SmoothStepToF(&effect->vel.y, 0.0f, 0.9f, 5.0f, 0);
+ Math_SmoothStepToF(&effect->vel.z, 0.0f, 0.9f, 10.0f, 0);
+ if ((fabsf(effect->obj.pos.x - boss->obj.pos.x) < 200.0f) &&
+ (fabsf(effect->obj.pos.y - (boss->obj.pos.y - 100.0f)) < 200.0f) &&
+ (fabsf(effect->obj.pos.z - (boss->obj.pos.z - 200.0f)) < 100.0f)) {
+ Object_Kill(&effect->obj, effect->sfxPos);
+ }
+ }
+ }
+ Math_SmoothStepToF(&player->pos.x, boss->obj.pos.x, 0.1f, boss->fwork[16], 0);
+ Math_SmoothStepToF(&player->pos.y, boss->obj.pos.y - 150.0f, 0.1f, boss->fwork[16], 0);
+ Math_SmoothStepToF(&boss->fwork[16], 35.0f, 1.0f, 0.5f, 0);
+ if (fabsf(player->unk_138 - boss->obj.pos.z) < 200.0f) {
+ boss->actionState = 15;
+ boss->swork[8] = 1;
+ boss->fwork[9] = 0.2f;
+ boss->unk_04C = 0;
+ if (player->state_1C8 == PLAYERSTATE_1C8_3) {
+ player->state_1C8 = PLAYERSTATE_1C8_11;
+ player->unk_1D0 = 0;
+ }
+ break;
+ }
+ }
+ boss->fwork[8] = 0.1f;
+ boss->fwork[2] = 0.1f;
+ boss->fwork[5] = 0.1f;
+ boss->fwork[6] = -300.0f;
+ Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 1.0f, 0);
+ boss->fwork[0] = 0.0f;
+ boss->fwork[3] = 150.0f;
+ Math_SmoothStepToF(&boss->fwork[7], 20.0f, 0.1f, 0.1f, 0);
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
+ if (boss->unk_04C == 10) {
+ Audio_PlaySfx(0x31022087, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C0240D0)) {
+ boss->unk_04C = 0;
+ if (boss->timer_050 == 0) {
+ boss->actionState = 15;
+ boss->swork[8] = 0;
+ boss->fwork[9] = 0.0f;
+ }
+ }
+ limbCount = Animation_GetFrameData(&D_C0240D0, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+
+ break;
+ case 18:
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
+ boss->fwork[0] = 0.0f;
+ boss->fwork[3] = 0.0f;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
+ switch (boss->unk_044) {
+ case 0:
+ if (boss->timer_050 != 0) {
+ limbCount = Animation_GetFrameData(&D_C00DE48, 45, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ } else {
+ boss->unk_044 = 1;
+ boss->timer_050 = 30;
+ boss->swork[9] = 20;
+ boss->fwork[9] = 0.0f;
+ func_8001CE28(0, boss->sfxPos);
+ boss->timer_05C = 50;
+ }
+ break;
+ case 1:
+ if (boss->timer_050 != 0) {
+ limbCount = Animation_GetFrameData(&D_C017430, 0, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ } else {
+ boss->unk_044 = 2;
+ boss->timer_050 = 70;
+ boss->fwork[9] = 0.0f;
+ Audio_PlaySfx(0x1940307C, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ }
+ if (boss->timer_050 == 15) {
+ boss->swork[10] = 80;
+ }
+ break;
+ case 2:
+ if (boss->timer_050 == 0) {
+ func_i6_8018D9C0(boss);
+ }
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C00E598)) {
+ boss->unk_04C = 0;
+ }
+ limbCount = Animation_GetFrameData(&D_C00E598, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ break;
+ }
+ break;
+ case 20:
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 50.0f, 1.0f, 5.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 50.0f, 1.0f, 5.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C017050)) {
+ func_i6_8018D9C0(boss);
+ }
+ limbCount = Animation_GetFrameData(&D_C017050, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ break;
+ case 30:
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
+ boss->fwork[0] = 0.0f;
+ boss->fwork[3] = 0.0f;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C017050)) {
+ boss->unk_04C = 0;
+ }
+ limbCount = Animation_GetFrameData(&D_C017050, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ if (!(gGameFrameCount & 1)) {
+ func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z, 0.0f, 0.0f,
+ boss->vel.z, (Rand_ZeroOne() * 0.2f) + 0.2f, 0);
+ }
+ if (gCsFrameCount >= 0x33) {
+ func_8007D0E0(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z,
+ (Rand_ZeroOne() * 3.0f) + 3.0f);
+ }
+
+ gCsFrameCount++;
+
+ switch (gCsFrameCount) {
+ case 60:
+ boss->swork[17] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[19]);
+ break;
+ case 70:
+ boss->swork[19] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[21]);
+ break;
+ case 80:
+ boss->swork[11] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[13]);
+ break;
+ case 90:
+ boss->swork[12] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[14]);
+ break;
+ case 100:
+ boss->swork[22] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[24]);
+ break;
+ case 110:
+ boss->swork[23] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[25]);
+ break;
+ case 120:
+ boss->swork[18] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[19]);
+ boss->actionState = 9;
+ boss->health = 100;
+ boss->timer_050 = 50;
+ boss->fwork[9] = 0.0f;
+ Audio_PlaySfx(0x11030073, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_8001D444(0, 0x8021, 0, 0xFF);
+ break;
+ }
+ break;
+ case 9:
+ boss->fwork[6] = -3000.0f;
+ if (boss->timer_050 == 0) {
+ boss->actionState = 10;
+ boss->timer_050 = 100;
+ }
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 3.0f, 0);
+ boss->fwork[0] = player->pos.x;
+ boss->fwork[3] = player->pos.y;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C00208C)) {
+ boss->unk_04C = 0;
+ }
+ limbCount = Animation_GetFrameData(&D_C00208C, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+
+ func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 700.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 700.0f), boss->obj.pos.z, 0.0f, 0.0f,
+ gPlayer[0].vel.z, (Rand_ZeroOne() * 0.15f) + 0.15f, 0);
+ break;
+ case 10:
+ boss->fwork[6] = 0.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 3.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C00208C)) {
+ boss->unk_04C = 0;
+ }
+ limbCount = Animation_GetFrameData(&D_C00208C, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+
+ func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 700.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 700.0f), boss->obj.pos.z, 0.0f, 0.0f,
+ gPlayer[0].vel.z, (Rand_ZeroOne() * 0.15f) + 0.15f, 0);
+ if (boss->timer_050 == 0) {
+ boss->actionState = 9;
+ boss->timer_050 = 130;
+ }
+ break;
+ case 31:
+ boss->obj.rot.x += 1.0f;
+ boss->obj.rot.y += 0.3f;
+ boss->obj.rot.z += 0.7f;
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
+ boss->fwork[0] = 0.0f;
+ boss->fwork[3] = 0.0f;
+ if (!(gGameFrameCount & 1)) {
+ func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z, 0.0f, 0.0f,
+ boss->vel.z, (Rand_ZeroOne() * 0.2f) + 0.2f, 0);
+ }
+ func_8007D0E0(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z,
+ (Rand_ZeroOne() * 5.0f) + 5.0f);
+ break;
+ case 32:
+ boss->fwork[6] = -3000.0f;
+ boss->fwork[8] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
+ boss->fwork[2] = 0.05f;
+ boss->fwork[5] = 0.05f;
+ Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
+ Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
+ boss->fwork[0] = 0.0f;
+ boss->fwork[3] = 0.0f;
+ Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
+ boss->unk_04C++;
+ if (boss->unk_04C >= Animation_GetFrameCount(&D_C017050)) {
+ boss->unk_04C = 0;
+ }
+ limbCount = Animation_GetFrameData(&D_C017050, boss->unk_04C, spD0);
+ Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
+ if (!(gGameFrameCount & 1)) {
+ func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z, 0.0f, 0.0f,
+ boss->vel.z, (Rand_ZeroOne() * 0.2f) + 0.2f, 0);
+ }
+
+ if (gCsFrameCount > 50) {
+ func_8007D0E0(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
+ boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z,
+ (Rand_ZeroOne() * 3.0f) + 3.0f);
+ }
+
+ gCsFrameCount++;
+
+ switch (gCsFrameCount) {
+ case 60:
+ boss->swork[17] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[19]);
+ break;
+ case 70:
+ boss->swork[19] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[21]);
+ break;
+ case 80:
+ boss->swork[14] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[16]);
+ break;
+ case 90:
+ boss->swork[13] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[15]);
+ break;
+ case 100:
+ func_i6_8018DA94(boss, &boss->vwork[13]);
+ break;
+ case 110:
+ func_i6_8018DA94(boss, &boss->vwork[14]);
+ break;
+ case 120:
+ boss->swork[20] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[22]);
+ break;
+ case 130:
+ boss->swork[21] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[23]);
+ break;
+ case 140:
+ boss->swork[22] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[24]);
+ break;
+ case 150:
+ boss->swork[23] = 2;
+ func_i6_8018DA94(boss, &boss->vwork[25]);
+ break;
+ case 160:
+ boss->swork[16] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[18]);
+ break;
+ case 170:
+ boss->swork[15] = 1;
+ func_i6_8018DA94(boss, &boss->vwork[17]);
+ break;
+ case 173:
+ func_8007A6F0(&boss->obj.pos, 0x2940C00A);
+ func_8007B344(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 100.0f, 4);
+ break;
+ case 180:
+ boss1 = &gBosses[1];
+ Boss_Initialize(boss1);
+ boss1->obj.status = OBJ_INIT;
+ boss1->obj.id = OBJ_BOSS_321;
+ boss1->obj.pos.x = boss->obj.pos.x;
+ boss1->obj.pos.y = boss->obj.pos.y;
+ boss1->obj.pos.z = boss->obj.pos.z;
+ boss1->swork[1] = 100;
+ boss1->actionState = 10;
+ boss1->timer_050 = 180;
+ boss1->unk_3F8 = 5.0f;
+ Object_SetInfo(&boss1->info, boss1->obj.id);
+ Object_Kill(&boss->obj, boss->sfxPos);
+ D_80177AB0 = 3;
+ func_i6_80189098(boss);
+ func_800BA808(gMsg_ID_19330, RCID_ANDROSS_RED);
+ break;
+ }
+ Math_SmoothStepToF(&D_800C9C30, 0.0f, 1.0f, 0.3f, 0.0f);
+ break;
+ }
+ if (boss->swork[4] >= 0) {
+ boss->info.hitbox[13] = boss->vwork[0].z - boss->obj.pos.z;
+ boss->info.hitbox[15] = boss->vwork[0].y - boss->obj.pos.y;
+ boss->info.hitbox[17] = boss->vwork[0].x - boss->obj.pos.x;
+ if (boss->swork[7] != 0) {
+ boss->info.hitbox[14] = 280.0f;
+ boss->info.hitbox[16] = 200.0f;
+ boss->info.hitbox[18] = 200.0f;
+ } else {
+ boss->info.hitbox[14] = 100.0f;
+ boss->info.hitbox[16] = 100.0f;
+ boss->info.hitbox[18] = 100.0f;
+ }
+ } else {
+ boss->info.hitbox[16] = 0.0f;
+ }
+ if (boss->swork[5] >= 0) {
+ boss->info.hitbox[19] = boss->vwork[1].z - boss->obj.pos.z;
+ boss->info.hitbox[21] = boss->vwork[1].y - boss->obj.pos.y;
+ boss->info.hitbox[23] = boss->vwork[1].x - boss->obj.pos.x;
+ if (boss->swork[7] != 0) {
+ boss->info.hitbox[20] = 280.0f;
+ boss->info.hitbox[22] = 200.0f;
+ boss->info.hitbox[24] = 200.0f;
+ } else {
+ boss->info.hitbox[20] = 100.0f;
+ boss->info.hitbox[22] = 100.0f;
+ boss->info.hitbox[24] = 100.0f;
+ }
+ } else {
+ boss->info.hitbox[22] = 0.0f;
+ }
+ boss->info.hitbox[1] = boss->vwork[2].z - boss->obj.pos.z;
+ boss->info.hitbox[3] = boss->vwork[2].y - boss->obj.pos.y;
+ boss->info.hitbox[5] = boss->vwork[2].x - boss->obj.pos.x;
+ boss->info.hitbox[7] = boss->vwork[3].z - boss->obj.pos.z;
+ boss->info.hitbox[9] = boss->vwork[3].y - boss->obj.pos.y;
+ boss->info.hitbox[11] = boss->vwork[3].x - boss->obj.pos.x;
+ if ((initialActionState == 17) && (boss->actionState != 17)) {
+ func_8001A55C(boss->sfxPos, 0x31022087);
+ }
+ if ((initialActionState == 7) && (boss->actionState != 7)) {
+ func_8001A55C(boss->sfxPos, 0x3103108B);
+ }
+}
+
+extern Gfx D_C002B20[];
+extern Gfx D_C002F00[];
+extern Gfx D_C0043D0[];
+extern Gfx D_C004860[];
+extern Gfx D_C015740[];
+extern Gfx D_C022520[];
+
+static Vec3f D_i6_801A67C4 = { 40.0f, 0.0f, -10.0f };
+static f32 D_i6_801A67D0 = 180.0f;
+static f32 D_i6_801A67D4 = 0.0f;
+static f32 D_i6_801A67D8 = 0.0f;
+static Vec3f D_i6_801A67DC = { 40.0f, 0.0f, 10.0f };
+static f32 D_i6_801A67E8 = 0.0f;
+static f32 D_i6_801A67EC = 0.0f;
+static f32 D_i6_801A67F0 = 0.0f;
+static Vec3f D_i6_801A67F4 = { 0.0f, 0.0f, 0.0f };
+
+s32 func_i6_801917F0(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
+ Vec3f sp94;
+ Vec3f sp88;
+ f32 scale;
+ Boss* boss = (Boss*) data;
+
+ sp94 = D_i6_801A67F4;
+ scale = 1.0f;
+ if ((limbIndex >= 13) && (limbIndex <= 50)) {
+ if (boss->actionState < 2) {
+ *dList = NULL;
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x1D);
+ gSPTexture(gMasterDisp++, 6600, 6600, 0, G_TX_RENDERTILE, G_ON);
+ gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
+ if (((limbIndex >= 23) && (limbIndex <= 32)) || (limbIndex == 50)) {
+ if (boss->swork[5] < 0) {
+ *dList = NULL;
+ } else if (boss->swork[3] & 1) {
+ RCP_SetupDL(&gMasterDisp, 0x1B);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ } else if (boss->swork[4] < 0) {
+ *dList = NULL;
+ } else if (boss->swork[2] & 1) {
+ RCP_SetupDL(&gMasterDisp, 0x1B);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ }
+ } else if (!(boss->timer_05C & 1)) {
+ RCP_SetupDL(&gMasterDisp, 0x1D);
+ } else {
+ RCP_SetupDL(&gMasterDisp, 0x1B);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+
+ switch (limbIndex) {
+ case 59:
+ if (boss->swork[18] == 1) {
+ *dList = D_C004860;
+ }
+ if (boss->swork[18] == 2) {
+ *dList = NULL;
+ }
+ break;
+ case 3:
+ rot->z -= boss->vwork[4].x;
+ rot->y -= boss->vwork[4].y;
+ if (boss->swork[0] & 1) {
+ RCP_SetupDL(&gMasterDisp, 0x1B);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ if (boss->swork[11] != 0) {
+ *dList = D_C0043D0;
+ RCP_SetupDL(&gMasterDisp, 0x15);
+ }
+ scale = boss->fwork[17];
+ break;
+ case 4:
+ rot->z -= boss->vwork[5].x;
+ rot->y -= boss->vwork[5].y;
+ if (boss->swork[1] & 1) {
+ RCP_SetupDL(&gMasterDisp, 0x1B);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ }
+ if (boss->swork[12] != 0) {
+ *dList = D_C015740;
+ RCP_SetupDL(&gMasterDisp, 0x15);
+ }
+ scale = boss->fwork[17];
+ break;
+ case 5:
+ if (boss->swork[17] == 1) {
+ *dList = D_C002B20;
+ }
+ if (boss->swork[17] == 2) {
+ *dList = NULL;
+ }
+ scale = boss->fwork[17];
+ break;
+ case 6:
+ if (boss->swork[19] == 1) {
+ *dList = D_C002F00;
+ }
+ if (boss->swork[19] == 2) {
+ *dList = NULL;
+ }
+ scale = boss->fwork[17];
+ break;
+ case 1:
+ if (boss->swork[14] != 0) {
+ *dList = NULL;
+ }
+ break;
+ case 2:
+ if (boss->swork[13] != 0) {
+ *dList = NULL;
+ }
+ break;
+ case 7:
+ if (boss->swork[20] != 0) {
+ *dList = NULL;
+ }
+ scale = boss->fwork[18];
+ break;
+ case 8:
+ if (boss->swork[21] != 0) {
+ *dList = NULL;
+ }
+ scale = boss->fwork[18];
+ break;
+ case 9:
+ if (boss->swork[23] != 0) {
+ *dList = NULL;
+ }
+ scale = boss->fwork[18];
+ break;
+ case 10:
+ if (boss->swork[22] != 0) {
+ *dList = NULL;
+ }
+ scale = boss->fwork[18];
+ break;
+ case 11:
+ if (boss->swork[16] != 0) {
+ *dList = NULL;
+ }
+ break;
+ case 12:
+ if (boss->swork[15] != 0) {
+ *dList = NULL;
+ }
+ break;
+ case 49:
+ pos->x -= boss->fwork[11];
+ pos->y += boss->fwork[12];
+ pos->z += boss->fwork[13];
+ Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
+ Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
+ Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
+ Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
+ if (*dList != NULL) {
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Push(&gCalcMatrix);
+ Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, *dList);
+ RCP_SetupDL(&gMasterDisp, 0x29);
+ switch (gGameFrameCount & 3) {
+ case 0:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ break;
+ case 1:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 255, 0, 255);
+ break;
+ case 2:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 255, 255);
+ break;
+ case 3:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
+ break;
+ }
+ Matrix_Translate(gGfxMatrix, D_i6_801A67DC.x, D_i6_801A67DC.y, D_i6_801A67DC.z, 1);
+ Matrix_RotateZ(gGfxMatrix, D_i6_801A67F0 * M_DTOR, 1);
+ Matrix_RotateY(gGfxMatrix, D_i6_801A67EC * M_DTOR, 1);
+ Matrix_RotateX(gGfxMatrix, D_i6_801A67E8 * M_DTOR, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_C022520);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Pop(&gCalcMatrix);
+ }
+ return true;
+ case 50:
+ pos->x -= boss->fwork[11];
+ pos->y += boss->fwork[12];
+ pos->z -= boss->fwork[13];
+ Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
+ Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
+ Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
+ Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
+ if (*dList != NULL) {
+ Matrix_Push(&gGfxMatrix);
+ Matrix_Push(&gCalcMatrix);
+ Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, *dList);
+ RCP_SetupDL(&gMasterDisp, 0x29);
+ switch (gGameFrameCount & 3) {
+ case 0:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ break;
+ case 1:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 255, 0, 255);
+ break;
+ case 2:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 255, 255);
+ break;
+ case 3:
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
+ break;
+ }
+ Matrix_Translate(gGfxMatrix, D_i6_801A67C4.x, D_i6_801A67C4.y, D_i6_801A67C4.z, 1);
+ Matrix_RotateZ(gGfxMatrix, D_i6_801A67D8 * M_DTOR, 1);
+ Matrix_RotateY(gGfxMatrix, D_i6_801A67D4 * M_DTOR, 1);
+ Matrix_RotateX(gGfxMatrix, D_i6_801A67D0 * M_DTOR, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_C022520);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Pop(&gCalcMatrix);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
+ Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
+ Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
+ Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
+ Matrix_Push(&gCalcMatrix);
+ Matrix_Scale(gCalcMatrix, scale, scale, scale, 1);
+ if (*dList != NULL) {
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &sp88);
+ func_8005F670(&sp88);
+ Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, *dList);
+ }
+ Matrix_Pop(&gCalcMatrix);
+ return true;
+}
+
+void func_i6_801924B4(s32 limbIndex, Vec3f* rot, void* data) {
+ Vec3f sp94 = { 0.0f, 0.0f, 0.0f };
+ Vec3f sp88 = { 33.0f, 0.0f, 0.0f };
+ Vec3f sp7C = { 20.0f, 0.0f, 0.0f };
+ Vec3f sp70 = { -16.0f, 8.0f, 20.0f };
+ Vec3f sp64 = { -16.0f, -8.0f, -20.0f };
+ Vec3f sp58 = { 40.0f, -22.0f, 4.0f };
+ Vec3f sp4C = { 40.0f, -22.0f, -4.0f };
+ Vec3f sp40 = { 10.0f, -2.0f, 2.0f };
+ Vec3f sp34 = { 10.0f, -2.0f, 2.0f };
+ Vec3f sp28 = { -80.0f, 0.0f, 0.0f };
+ Boss* boss = (Boss*) data;
+
+ switch (limbIndex) {
+ case 3:
+ Matrix_MultVec3f(gCalcMatrix, &sp7C, &boss->vwork[2]);
+ break;
+ case 4:
+ Matrix_MultVec3f(gCalcMatrix, &sp7C, &boss->vwork[3]);
+ break;
+ case 5:
+ Matrix_MultVec3f(gCalcMatrix, &sp4C, &boss->vwork[6]);
+ Matrix_MultVec3f(gCalcMatrix, &sp58, &boss->vwork[7]);
+ break;
+ case 12:
+ Matrix_MultVec3f(gCalcMatrix, &sp34, &boss->vwork[9]);
+ break;
+ case 11:
+ Matrix_MultVec3f(gCalcMatrix, &sp40, &boss->vwork[8]);
+ break;
+ case 20:
+ Matrix_MultVec3f(gCalcMatrix, &sp70, &boss->vwork[0]);
+ break;
+ case 28:
+ Matrix_MultVec3f(gCalcMatrix, &sp64, &boss->vwork[1]);
+ break;
+ case 25:
+ Matrix_MultVec3f(gCalcMatrix, &sp88, &boss->vwork[10]);
+ break;
+ }
+ if (boss->actionState >= 30) {
+ switch (limbIndex) {
+ case 1:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[16]);
+ return;
+ case 2:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[15]);
+ return;
+ case 3:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[13]);
+ return;
+ case 4:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[14]);
+ return;
+ case 5:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[19]);
+ return;
+ case 6:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[21]);
+ return;
+ case 7:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[22]);
+ return;
+ case 8:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[23]);
+ return;
+ case 9:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[25]);
+ return;
+ case 10:
+ Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[24]);
+ return;
+ case 11:
+ Matrix_MultVec3f(gCalcMatrix, &sp28, &boss->vwork[18]);
+ return;
+ case 12:
+ Matrix_MultVec3f(gCalcMatrix, &sp28, &boss->vwork[17]);
+ break;
+ }
+ }
+}
+
+extern Limb* D_C01CC3C;
+
+void func_i6_801928C8(Boss* boss) {
+
+ if (boss->timer_058 == 0) {
+ // FAKE
+ if (1) {}
+ PRINTF("Enm->count %d\n");
+ if (boss->actionState < 2) {
+ Lights_SetOneLight(&gMasterDisp, gLight1x, gLight1y, gLight1z, D_i6_801A7F5C, D_i6_801A7F64, D_i6_801A7F6C,
+ D_i6_801A7F74, D_i6_801A7F7C, D_i6_801A8430);
+ }
+ Matrix_Scale(gCalcMatrix, 10.0f, 10.0f, 10.0f, 1);
+ Animation_DrawSkeleton(2, &D_C01CC3C, D_i6_801A7F80, func_i6_801917F0, func_i6_801924B4, boss, gCalcMatrix);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ if (boss->fwork[20] > 0.05f) {
+ Matrix_Translate(gGfxMatrix, boss->vwork[10].x, boss->vwork[10].y, boss->vwork[10].z + D_80177D20, 1);
+ if (boss->fwork[21] > 0.05f) {
+ Matrix_Push(&gGfxMatrix);
+ RCP_SetupDL(&gMasterDisp, 0x43);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 192);
+ gDPSetEnvColor(gMasterDisp++, 255, 0, 128, 192);
+ Matrix_Scale(gGfxMatrix, boss->fwork[21] * 7.0f, boss->fwork[21] * 7.0f, boss->fwork[21] * 7.0f, 1);
+ if (gGameFrameCount & 1) {
+ Matrix_Scale(gGfxMatrix, 1.1f, 1.1f, 1.1f, 1);
+ }
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_1024AC0);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ Matrix_Scale(gGfxMatrix, boss->fwork[20] * 10.0f, boss->fwork[20] * 10.0f, boss->fwork[20] * 10.0f, 1);
+ Matrix_RotateZ(gGfxMatrix, boss->fwork[19] * M_DTOR, 1);
+ RCP_SetupDL(&gMasterDisp, 0x40);
+ if (gGameFrameCount & 1) {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 128);
+ } else {
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 30);
+ }
+ Matrix_Push(&gGfxMatrix);
+ Matrix_RotateZ(gGfxMatrix, 0.0f, 1);
+ Matrix_RotateX(gGfxMatrix, 0.2617994f, 1);
+ Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1);
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 200.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_C017440);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_RotateZ(gGfxMatrix, 2.0943952f, 1);
+ Matrix_RotateX(gGfxMatrix, 0.2617994f, 1);
+ Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1);
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 200.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_C017440);
+ Matrix_Pop(&gGfxMatrix);
+ Matrix_Push(&gGfxMatrix);
+ Matrix_RotateZ(gGfxMatrix, 4.1887903f, 1);
+ Matrix_RotateX(gGfxMatrix, 0.2617994f, 1);
+ Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1);
+ Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 200.0f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ gSPDisplayList(gMasterDisp++, D_C017440);
+ Matrix_Pop(&gGfxMatrix);
+ }
+ Lights_SetOneLight(&gMasterDisp, gLight1x, gLight1y, gLight1z, gLight1R, gLight1G, gLight1B, gAmbientR,
+ gAmbientG, gAmbientB);
+ }
+}
+
+void func_i6_80192E94(Actor* actor) {
+ Actor* otherActor;
+ s32 i;
+
+ switch (actor->unk_0B8) {
+ case 0:
+ if (actor->obj.pos.x >= 0.0f) {
+ actor->unk_0B8 = 1;
+ } else {
+ actor->unk_0B8 = 2;
+ }
+ actor->vwork[0].x = actor->obj.pos.x;
+ actor->vwork[0].y = actor->obj.pos.y - 300.0f;
+ actor->vwork[0].z = actor->obj.pos.z;
+ actor->health = 30;
+ actor->unk_0F4.z = actor->obj.rot.z;
+ Audio_PlaySfx(0x11000028, actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ case 1:
+ otherActor = gActors;
+ for (i = 0; i < 60; i++, otherActor++) {
+ if ((i != actor->index) && (otherActor->obj.status == OBJ_ACTIVE) &&
+ (otherActor->obj.id == OBJ_ACTOR_285) &&
+ (fabsf(otherActor->obj.pos.z - actor->obj.pos.z) < 200.0f)) {
+ actor->timer_0BC = 5;
+ otherActor->timer_0BC = 5;
+ gUnkEntities30[actor->index].mode = 50;
+ gUnkEntities30[actor->index].unk_28 = 1.0f;
+ gUnkEntities30[actor->index].unk_04.x = actor->obj.pos.x;
+ gUnkEntities30[actor->index].unk_04.y = actor->obj.pos.y;
+ gUnkEntities30[actor->index].unk_04.z = actor->obj.pos.z;
+ gUnkEntities30[actor->index].unk_10.x = otherActor->obj.pos.x;
+ gUnkEntities30[actor->index].unk_10.y = otherActor->obj.pos.y;
+ gUnkEntities30[actor->index].unk_10.z = otherActor->obj.pos.z;
+ gUnkEntities30[actor->index].timer = 3;
+ break;
+ }
+ }
+ /* fallthrough */
+ case 2:
+ actor->obj.rot.z = actor->unk_0F4.z + D_i6_801A7F68;
+ Matrix_RotateZ(gCalcMatrix, M_DTOR * D_i6_801A7F68, 0);
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, actor->vwork, &actor->obj.pos);
+ actor->obj.pos.y += 300.0f;
+ break;
+ }
+
+ if (actor->unk_0D0 != 0) {
+ actor->unk_0D0 = 0;
+ actor->health -= actor->damage;
+ if (actor->health <= 0) {
+ func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 5.0f);
+ for (i = 0; i < 7; i++) {
+ func_80079618(((Rand_ZeroOne() - 0.5f) * 10.0f) + actor->obj.pos.x,
+ ((Rand_ZeroOne() - 0.5f) * 10.0f) + actor->obj.pos.y, actor->obj.pos.z,
+ (Rand_ZeroOne() * 0.5f) + 0.5f);
+ }
+ func_8007A6F0(&actor->obj.pos, 0x2903A008);
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ }
+}
+
+extern Gfx* D_6007E20;
+
+void func_i6_80193244(Actor* actor) {
+
+ gSPDisplayList(gMasterDisp++, &D_6007E20);
+ if (actor->timer_0BC != 0) {
+ f32 scale;
+ u8 alpha;
+
+ scale = 2.5f;
+ alpha = 16;
+ if (gGameFrameCount & 1) {
+ alpha = 64;
+ scale *= 1.2f;
+ }
+ Matrix_Scale(gGfxMatrix, scale, scale, scale, 1);
+ Matrix_RotateX(gGfxMatrix, 1.5707964f, 1);
+ Matrix_SetGfxMtx(&gMasterDisp);
+ RCP_SetupDL(&gMasterDisp, 0x43);
+ gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, alpha);
+ gDPSetEnvColor(gMasterDisp++, 255, 128, 128, alpha);
+ gSPDisplayList(gMasterDisp++, D_1024AC0);
+ }
+}
+
+extern Gfx* D_C038AC4;
+
+void func_i6_80193380(Object_80* obj80) {
+
+ switch (obj80->unk_48) {
+ case 0:
+ if (fabsf(obj80->obj.pos.z - gPlayer[0].unk_138) < 1800.0f) {
+ obj80->unk_48 = 1;
+ obj80->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038AC4);
+ }
+ break;
+ case 1:
+ obj80->info.hitbox[7] = -130.0f - (obj80->unk_44 * 1.6f);
+ obj80->info.hitbox[17] = -130.0f - (obj80->unk_44 * 1.6f);
+ obj80->info.hitbox[27] = -130.0f - (obj80->unk_44 * 1.6f);
+ obj80->unk_44 += 2;
+ if (obj80->unk_44 >= Animation_GetFrameCount(&D_6014658)) {
+ obj80->unk_44 = Animation_GetFrameCount(&D_6014658) - 1;
+ }
+ break;
+ }
+ obj80->obj.rot.z = D_i6_801A7F68;
+}
+
+s32 func_i6_801934EC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
+ if (limbIndex == 13) {
+ *dList = NULL;
+ }
+ return false;
+}
+
+void func_i6_8019350C(Object_80* obj80) {
+ Vec3f frameTable[20];
+
+ Animation_GetFrameData(&D_6014658, obj80->unk_44, frameTable);
+ Animation_DrawSkeleton(1, D_6014844, frameTable, func_i6_801934EC, NULL, NULL, &gIdentityMatrix);
+}
+
+void func_i6_8019356C(Object_80* obj80) {
+ obj80->obj.rot.z = D_i6_801A7F68;
+ obj80->obj.pos.z += obj80->unk_60;
+ if (obj80->timer_4C == 1) {
+ Object_Kill(&obj80->obj, obj80->sfxPos);
+ }
+}
+
+s32 func_i6_801935B4(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
+ if (limbIndex != 13) {
+ *dList = NULL;
+ }
+ return false;
+}
+
+void func_i6_801935D4(Object_80* obj80) {
+ Vec3f frameTable[20];
+
+ Animation_GetFrameData(&D_6014658, obj80->unk_44, frameTable);
+ if (gLevelMode == LEVELMODE_ALL_RANGE) {
+ gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
+ }
+ Animation_DrawSkeleton(1, D_6014844, frameTable, func_i6_801935B4, NULL, NULL, &gIdentityMatrix);
+}
+
+void func_i6_80193668(Object_80* obj80, f32 xPos, f32 yPos, f32 zPos, s32 arg4) {
+ Object_80_Initialize(obj80);
+ obj80->obj.status = OBJ_ACTIVE;
+ obj80->obj.id = OBJ_80_131;
+ obj80->obj.pos.x = xPos;
+ obj80->obj.pos.y = yPos;
+ obj80->obj.pos.z = zPos;
+ obj80->unk_60 = -40.0f;
+ Object_SetInfo(&obj80->info, obj80->obj.id);
+ obj80->timer_4C = (arg4 * 50) + 100;
+ obj80->info.unk_10 = 100000.0f;
+}
+
+void func_i6_80193710(void) {
+ Actor* actor;
+ Object_58* obj58;
+ Boss* boss;
+ s32 i;
+
+ D_80178310 = SEGMENTED_TO_VIRTUAL(D_800CFDA0[gCurrentLevel]);
+
+ for (obj58 = gObjects58, i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+
+ if (D_80178310[i].id <= OBJ_80_160) {
+ func_800A4F4C(obj58);
+ obj58->obj.status = OBJ_ACTIVE;
+ obj58->obj.id = D_80178310[i].id;
+ obj58->sfxPos[0] = obj58->obj.pos.x = D_80178310[i].xPos;
+ obj58->sfxPos[1] = obj58->obj.pos.y = D_80178310[i].yPos;
+ obj58->sfxPos[2] = obj58->obj.pos.z = -D_80178310[i].zPos1;
+ obj58->unk_54 = obj58->obj.rot.y = D_80178310[i].rot.y;
+ Object_SetInfo(&obj58->info, obj58->obj.id);
+ obj58++;
+ }
+ }
+
+ for (actor = &gActors[30], i = 0; i < 1000; i++) {
+ if (D_80178310[i].id < 0) {
+ break;
+ }
+
+ if ((D_80178310[i].id >= OBJ_ACTOR_176) && (D_80178310[i].id <= OBJ_ACTOR_291)) {
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_INIT;
+ actor->obj.id = D_80178310[i].id;
+ actor->fwork[10] = actor->obj.pos.x = D_80178310[i].xPos;
+ actor->fwork[11] = actor->obj.pos.y = D_80178310[i].yPos;
+ actor->fwork[12] = actor->obj.pos.z = -D_80178310[i].zPos1;
+ actor->fwork[13] = actor->obj.rot.y = D_80178310[i].rot.y;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ actor++;
+ }
+ }
+
+ boss = &gBosses[0];
+ Boss_Initialize(boss);
+ boss->obj.status = OBJ_INIT;
+ boss->obj.id = OBJ_BOSS_312;
+ Object_SetInfo(&boss->info, boss->obj.id);
+}
+
+void func_i6_801939A0(s32 actorIndex) {
+ Actor* actor = &gActors[actorIndex];
+
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_ACTIVE;
+ actor->obj.id = OBJ_ACTOR_195;
+ actor->obj.pos.x = 0.0f;
+ actor->obj.pos.y = gPlayer[0].camAt.y;
+ actor->obj.pos.z = 0.0f;
+ actor->iwork[11] = 1;
+ actor->unk_0F4.x = 90.0f;
+ actor->fwork[0] = 50.0f;
+ actor->fwork[1] = 6.5f;
+ if (actorIndex == 10) {
+ actor->iwork[14] = 1;
+ }
+ if (actorIndex == 1) {
+ actor->unk_0B8 = 1;
+ actor->unk_046 = 0xFF;
+ actor->unk_0B6 = 1000;
+ }
+ Object_SetInfo(&actor->info, actor->obj.id);
+ Audio_PlaySfx(0x3100000C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ Audio_PlaySfx(0x09000002, actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+static Vec3f D_i6_801A6878[4] = {
+ { 1500.0f, 15000.0f, 0.0f },
+ { 0.0f, 15000.0f, -600.0f },
+ { -400.0f, 14950.0f, 0.0f },
+ { 500.0f, 14930.0f, -300.0f },
+};
+
+void func_i6_80193AE4(s32 actorIndex) {
+ Actor* actor = &gActors[actorIndex];
+
+ Actor_Initialize(actor);
+ actor->obj.status = OBJ_ACTIVE;
+ actor->obj.id = OBJ_ACTOR_195;
+ actor->obj.pos.x = D_i6_801A6878[actorIndex].x;
+ actor->obj.pos.y = D_i6_801A6878[actorIndex].y;
+ actor->obj.pos.z = D_i6_801A6878[actorIndex].z;
+ Object_SetInfo(&actor->info, actor->obj.id);
+ if (actorIndex == 0) {
+ actor->unk_0B8 = 200;
+ actor->unk_0B6 = 1;
+ Audio_PlaySfx(0x11030010, actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ return;
+ }
+ actor->iwork[11] = 1;
+ actor->fwork[7] = Rand_ZeroOne() * 360.0f;
+ actor->fwork[8] = Rand_ZeroOne() * 360.0f;
+ actor->unk_0B8 = 100;
+ Audio_PlaySfx(0x3100000C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+}
+
+extern s32 D_fake_i6_80196D00;
+
+void func_i6_80193C4C(Player* player) {
+ s32 i;
+ s32 sp90;
+ f32 sp8C;
+ Boss* boss = &gBosses[0];
+ f32 sp84;
+ f32 sp80;
+ Vec3f sp74;
+ Vec3f sp68;
+ s32 temp_v0_2;
+
+ Math_SmoothStepToF(D_80177A48, 1.0f, 1.0f, 0.01f, 0.0f);
+ player->wings.unk_04 = player->wings.unk_08 = player->wings.unk_0C = player->wings.unk_10 = 0.0f;
+ switch (player->unk_1D0) {
+ case 0:
+ gCsFrameCount = 0;
+ player->wings.unk_2C = 1;
+ D_80177A48[0] = 0.0f;
+ if (player->unk_4D8 > 180.0f) {
+ player->unk_4D8 -= 360.0f;
+ }
+ player->unk_1D0++;
+ player->timer_1F8 = 50;
+ player->vel.z = -40.0f;
+ /* fallthrough */
+ case 1:
+ Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
+ Math_SmoothStepToF(&boss->vel.z, -40.0f, 1.0f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 10.0f, 0.0f);
+ Math_SmoothStepToF(&player->vel.x, 0.0f, 1.0f, 3.0f, 0.0f);
+ Math_SmoothStepToF(&player->vel.y, 0.0f, 1.0f, 3.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.x, player->pos.x, 0.1f, 15.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.y, player->pos.y + 30.0f, 0.1f, 15.0f, 0.0f);
+ if (player->timer_1F8 == 0) {
+ player->pos.y += __sinf(player->unk_0E4 * M_DTOR) * 15.0f;
+ Math_SmoothStepToF(&player->unk_0E4, 180.0f, 0.1f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&player->vel.z, 40.0f, 1.0f, 2.0f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&player->unk_08C, 0.0f, 1.0f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 10.0f, 0.0f);
+ }
+ player->camEye.z += player->vel.z * 0.5f;
+ switch (gCsFrameCount) {
+ case 80:
+ func_8007A568(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 40.0f);
+ func_8007A6F0(&boss->obj.pos, 0x2940C00A);
+ /* fallthrough */
+ case 85:
+ case 90:
+ func_8007B344(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 250.0f, 6);
+ break;
+ case 86:
+ Object_Kill(&boss->obj, boss->sfxPos);
+ D_80177AB0 = 0;
+ break;
+ case 111:
+ player->unk_1D0 = 2;
+ Audio_PlaySfx(0x09000002, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ player->unk_190 = player->unk_194 = 7.0f;
+ D_80177A48[0] = 0.0f;
+ D_80177A48[1] = 0.0f;
+ D_80177A48[2] = 0.5f;
+ D_80177A48[3] = 1000.0f;
+ D_80177A48[4] = D_80177A48[5] = D_80177A48[6] = D_80177A48[7] = 0.0f;
+ D_80177A48[8] = 1.5f;
+ gCsFrameCount = 0;
+ break;
+ }
+ D_801779A0 = gBosses[0].obj.pos.x;
+ D_801779B8 = gBosses[0].obj.pos.y;
+ D_801779C0 = gBosses[0].obj.pos.z + D_80177D20;
+ Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 3.0f, 0.0f);
+ break;
+ case 2:
+ player->unk_190 = D_80177A48[8];
+ sp90 = 0;
+ sp68.x = (Rand_ZeroOne() - 0.5f) * 150.0f;
+ sp68.y = (Rand_ZeroOne() - 0.5f) * 150.0f;
+ sp68.z = 0.0f;
+ if (gCsFrameCount == 50) {
+ Audio_PlaySfx(0x11403071, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ func_8001D400(0);
+ }
+ if (gCsFrameCount > 40) {
+ sp90 = 1;
+ }
+ if (gCsFrameCount < 30) {
+ Math_SmoothStepToF(&D_80177A48[2], 0.5f, 1.0f, 0.05f, 0.0f);
+ } else if (gCsFrameCount <= 150) {
+ Math_SmoothStepToF(&D_80177A48[1], 300.0f, 0.1f, D_80177A48[5], 0.0f);
+ Math_SmoothStepToF(&D_80177A48[2], 0.95f, 1.0f, 0.05f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[3], 300.0f, 0.1f, 5.0f, 0.0f);
+ if (gCsFrameCount == 150) {
+ D_80177A48[5] = 0.0f;
+ }
+ } else {
+ Math_SmoothStepToF(&D_80177A48[1], 0.0f, 0.1f, D_80177A48[5], 0.0f);
+ Math_SmoothStepToF(&D_80177A48[2], 0.85f, 1.0f, 0.01f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[3], 200.0f, 0.1f, 5.0f, 0.0f);
+ D_80177A48[4] += 4.5f;
+ D_80177AB0 = 2;
+ Matrix_RotateZ(gCalcMatrix, 2.0f * (Rand_ZeroOne() * M_PI), 0);
+ sp74.x = Rand_ZeroOne() * 50.0f + 120.0f;
+ sp74.y = 0.0f;
+ sp74.z = 0.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68);
+ }
+ Math_SmoothStepToF(&D_80177A48[5], 3.0f, 1.0f, 0.05f, 0.0f);
+ player->camEye.z += player->vel.z * D_80177A48[2];
+ if (gCsFrameCount > 230) {
+ player->unk_08C -= 7.0f;
+ }
+ if (gCsFrameCount > 230) {
+ Math_SmoothStepToF(&D_80177A48[7], 3.0f, 1.0f, 0.1f, 0.0f);
+ player->unk_034 -= D_80177A48[7];
+ }
+
+ for (i = 0; i < sp90; i++) {
+ func_8007797C(player->pos.x + sp68.x, player->pos.y + sp68.y,
+ player->pos.z - (D_80177A48[3] + D_80177A48[4]), 0.0f, 0.0f, 50.0f,
+ (Rand_ZeroOne() * 2.5f) + 2.5f);
+ }
+
+ Math_SmoothStepToF(&player->camEye.x, D_80177A48[1] + player->pos.x, 0.1f, 15.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.y, player->pos.y + 30.0f, 0.1f, 15.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0EC, -180.0f, 0.02f, D_80177A48[6], 0.0f);
+ Math_SmoothStepToF(&D_80177A48[6], 3.0f, 1.0f, 0.05f, 0.0f);
+ D_801779A0 = player->pos.x;
+ D_801779B8 = player->pos.y;
+ D_801779C0 = player->unk_138 + D_80177D20;
+ if (gCsFrameCount > 200) {
+ player->unk_25C += 0.03f;
+ if (player->unk_25C > 0.6f) {
+ player->unk_25C = 0.6f;
+ }
+ Math_SmoothStepToF(&player->unk_034, 3.0f, 0.5f, 0.1f, 0.0f);
+ Math_SmoothStepToF(D_801779A8, 70.0f, 1.0f, 2.0f, 0.0f);
+ }
+
+ switch (gCsFrameCount) {
+ case 60:
+ for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
+ if ((gEffects[i].obj.id == OBJ_EFFECT_383) && (gEffects[i].obj.status == OBJ_ACTIVE)) {
+ Object_Kill(&gEffects[i].obj, gEffects[i].sfxPos);
+ break;
+ }
+ }
+ break;
+ case 25:
+ for (i = 0; i < 12; i++) {
+ func_i6_80193668(&gObjects80[i], player->pos.x, player->pos.y,
+ (player->camEye.z - D_80177D20) + (2195.0f * i), i);
+ }
+ break;
+ case 150:
+ Audio_PlaySfx(0x1900602A, D_800C5D28, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ break;
+ case 340:
+ func_8001A55C(player->sfxPos, 0x11403071);
+ func_8001D400(0);
+ D_800D2F68 = 0;
+ gBlurAlpha = 0xFF;
+ gCurrentLevel = LEVEL_VENOM_2;
+ D_8017827C = 1;
+ gLevelMode = LEVELMODE_ALL_RANGE;
+ player->unk_1D0 = 3;
+ player->unk_144 = D_80177D20 = 0.0f;
+ D_80177AB0 = D_80177A98 = 1;
+ player->camEye.x = 1200.0f;
+ player->camEye.z = 1200.0f;
+ player->camEye.y = 1800.0f;
+ D_801779A0 = 0.0f;
+ D_801779B8 = 620.0f;
+ D_801779C0 = 0.0f;
+ player->unk_034 = 0.0f;
+ player->unk_234 = 0;
+ D_80177A48[0] = 1.0f;
+ func_800A6148();
+ gObjects58 = Memory_Allocate(200 * sizeof(Object_58));
+ for (i = 0; i < 200; i++) {
+ gObjects58[i].obj.status = OBJ_FREE;
+ }
+ func_i6_80193710();
+ D_8017782C = 1;
+ func_800A594C();
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_80178340 = D_80178358 = 255;
+ player->timer_1F8 = 2;
+ gCsFrameCount = 0;
+ D_80177A48[1] = 0.0f;
+ break;
+ }
+ break;
+ case 3:
+ if (player->timer_1F8 == 0) {
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_80178340 = D_80178358 = 0;
+ } else {
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_80178340 = D_80178358 = 255;
+ }
+
+ if ((gCsFrameCount == 20) && (D_800D2F68 != 0)) {
+ func_i6_801939A0(1);
+ }
+ if (gCsFrameCount == 40) {
+ func_i6_801939A0(10);
+ Audio_PlaySfx(0x2940F026, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ D_80178480 = 30;
+ gOverlayStage = 1;
+ D_Timer_80177BD0[0] = 30;
+ }
+ if (gCsFrameCount > 40) {
+ for (i = 0; i < 3; i++) {
+ func_8007797C(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 150.0f), boss->obj.pos.y + 500.0f,
+ boss->obj.pos.z + ((Rand_ZeroOne() - 0.5f) * 150.0f), (Rand_ZeroOne() - 0.5f) * 10.0f,
+ 60.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() * 5.5f) + 5.5f);
+ }
+ Math_SmoothStepToF(&D_801779B8, gActors[10].obj.pos.y, 1.0f, D_80177A48[1], 0.0f);
+ Math_SmoothStepToF(&D_80177A48[1], 1000.0f, 1.0f, 5.0f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&player->camEye.z, 1640.0f, 0.05f, 50.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.y, 110.0f, 0.05f, 50.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.x, 0.0f, 0.05f, 50.0f, 0.0f);
+ Math_SmoothStepToF(&D_801779B8, 630.0f, 0.05f, 50.0f, 0.0f);
+ }
+
+ if (gCsFrameCount == 70) {
+ func_8001D444(0, 0x8040, 0, 0xFF);
+ }
+ if (gCsFrameCount == 150) {
+ player->unk_1D0++;
+ D_80177A48[0] = 1.0f;
+ D_80177A48[1] = 1000.0f;
+ D_80177A48[2] = 0;
+ D_80177A48[3] = 1.0f;
+ gActors[10].obj.pos.y = 1500.0f;
+ gActors[10].unk_0F4.z = 180.0f;
+ D_80177AB0 = 0;
+ gFogFar = 1030;
+ D_i6_801A7F40 = gLight1R;
+ D_i6_801A7F44 = gLight1G;
+ D_i6_801A7F48 = gLight1B;
+ D_i6_801A7F4C = gAmbientR;
+ D_i6_801A7F50 = gAmbientG;
+ D_i6_801A7F54 = gAmbientB;
+ D_801784D4 = -50.0f;
+ D_80177930 = 1;
+ for (i = 0; i < 200; i++) {
+ gObjects58[i].obj.status = OBJ_FREE;
+ }
+ }
+ break;
+ case 4:
+ player->unk_034 += D_80177A48[3];
+ if (gCsFrameCount > 190) {
+ Math_SmoothStepToF(&D_80177A48[3], 0.3f, 0.05f, 0.02f, 0.0f);
+ }
+ if (gCsFrameCount > 205) {
+ Math_SmoothStepToF(&D_i6_801A7F40, 130.0f, 1.0f, 10.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F44, 160.0f, 1.0f, 10.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F48, 80.0f, 1.0f, 10.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F4C, 10.0f, 1.0f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F50, 10.0f, 1.0f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&D_i6_801A7F54, 10.0f, 1.0f, 5.0f, 0.0f);
+ }
+ gLight1R = D_i6_801A7F40;
+ gLight1G = D_i6_801A7F44;
+ gLight1B = D_i6_801A7F48;
+ gAmbientR = D_i6_801A7F4C;
+ gAmbientG = D_i6_801A7F50;
+ gAmbientB = D_i6_801A7F54;
+ Math_SmoothStepToF(&D_80177A48[1], -5000.0f, 0.05f, 15.0f, 0.0f);
+ player->camEye.x = gActors[10].obj.pos.x + 50.0f;
+ player->camEye.y = gActors[10].obj.pos.y + D_80177A48[1];
+ player->camEye.z = gActors[10].obj.pos.z;
+ D_801779A0 = gActors[10].obj.pos.x;
+ D_801779B8 = gActors[10].obj.pos.y + 50.0f;
+ D_801779C0 = gActors[10].obj.pos.z;
+ if (!(gGameFrameCount & 3) && (gCsFrameCount < 215)) {
+ func_8007797C(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 350.0f), boss->obj.pos.y + 500.0f,
+ boss->obj.pos.z + ((Rand_ZeroOne() - 0.5f) * 350.0f), (Rand_ZeroOne() - 0.5f) * 10.0f,
+ 60.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() * 5.5f) + 15.5f);
+ }
+ sp80 = Rand_ZeroOne() * 40.0f;
+ for (i = 0; i < 36; i += 4) {
+ sp8C = __sinf((i * 10.0f * M_DTOR) + sp80) * D_80177A48[2];
+ sp84 = __cosf((i * 10.0f * M_DTOR) + sp80) * D_80177A48[2];
+ func_8007797C(sp8C, 300.0f, sp84, 0.0f, 0.0f, 0.0f, (Rand_ZeroOne() * 5.5f) + 15.5f);
+ }
+ Math_SmoothStepToF(&D_80177A48[2], 10000.0f, 0.05f, 20.0f, 0.0f);
+ if (gCsFrameCount == 220) {
+ func_i6_80193AE4(0);
+ if (gTeamShields[1] > 0) {
+ func_i6_80193AE4(1);
+ }
+ if (gTeamShields[2] > 0) {
+ func_i6_80193AE4(2);
+ }
+ if (gTeamShields[3] > 0) {
+ func_i6_80193AE4(3);
+ }
+ }
+
+ if (gCsFrameCount == 190) {
+ func_800A5D6C();
+ D_80178410 = 1000;
+ player->unk_204 = 0;
+ }
+ if (gCsFrameCount == 360) {
+ gCsFrameCount = 340;
+ player->unk_1D0++;
+ D_80177A48[0] = 1.0f;
+ D_80177A48[1] = 0.0f;
+ D_80177A48[2] = 0.0f;
+ D_80177A48[3] = 0.0f;
+ D_80177A48[4] = 0.0f;
+ player->camEye.x = D_80177978 = 100.0f;
+ player->camEye.y = D_80177980 = 14800.0f;
+ player->camEye.z = D_80177988 = -1500.0f;
+ D_801779A0 = 0.0f;
+ D_801779B8 = 15000.0f;
+ D_801779C0 = 0;
+ player->unk_034 = 0.0f;
+ gActors[10].unk_0B8 = 101;
+ gActors[10].fwork[0] = 0.0f;
+ gActors[10].obj.pos.y = 14500.0f;
+ gActors[10].unk_0F4.z = 70.0f;
+ gActors[10].unk_0F4.x = gActors[10].unk_0F4.y = 0.0f;
+ D_80178340 = D_80178358 = 255;
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ player->timer_1F8 = 3;
+ D_80178410 = 500;
+ }
+ if (gCsFrameCount == 250) {
+ D_80177840 = 100;
+ }
+ break;
+ case 5:
+ if (player->timer_1F8 == 1) {
+ D_80178340 = D_80178358 = 0;
+ }
+ if (D_800D2F68 != 0) {
+ if (gCsFrameCount >= 1000) {
+ D_801779A0 += D_80177A48[4] * 0.15f;
+ D_80177988 += D_80177A48[4];
+ Math_SmoothStepToF(&D_80177A48[4], 20.0f, 1.0f, 0.1f, 0.0f);
+ } else {
+ D_80177988 = gActors[10].obj.pos.z - 20.0f;
+ }
+ if ((gCsFrameCount >= 920) && (gTeamShields[3] > 0)) {
+ if (gCsFrameCount == 920) {
+ player->timer_1F8 = 25;
+ }
+ gActors[10].fwork[19] = __sinf(player->timer_1F8 * 40.0f * M_DTOR) * 5.0f;
+ } else {
+ if (gCsFrameCount < 850) {
+ switch (gCsFrameCount) {
+ case 600:
+ D_80177A48[2] = 80.0f;
+ D_80177A48[3] = -45.0f;
+ break;
+ case 650:
+ D_80177A48[2] = 0.0f;
+ break;
+ case 680:
+ D_80177A48[2] = 45.0f;
+ D_80177A48[3] = -20.0f;
+ break;
+ case 750:
+ D_80177A48[2] = 90.0f;
+ D_80177A48[3] = -30.0f;
+ break;
+ case 780:
+ D_80177A48[2] = 30.0f;
+ D_80177A48[3] = -45.0f;
+ break;
+ case 830:
+ D_80177A48[2] = -20.0f;
+ D_80177A48[3] = -25.0f;
+ break;
+ default:
+ // D_80177A48[2] = 0.0f;
+ break;
+ }
+ }
+ if (gCsFrameCount > 880) {
+ Math_SmoothStepToF(&gActors[10].fwork[19], 0.0f, 0.2f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&gActors[10].fwork[20], 0.0f, 0.2f, 2.0f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&gActors[10].fwork[19], D_80177A48[2], 0.2f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&gActors[10].fwork[20], D_80177A48[3], 0.2f, 2.0f, 0.0f);
+ }
+ }
+ D_80177A48[0] = 0.01f;
+ Math_SmoothStepToF(&D_80177A48[1], 10.0f, 1.0f, 0.1f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.x, gActors[10].obj.pos.x - 50.0f, D_80177A48[0], D_80177A48[1], 0);
+ Math_SmoothStepToF(&player->camEye.y, gActors[10].obj.pos.y + 10.0f, D_80177A48[0], D_80177A48[1], 0);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], D_80177A48[1], 0);
+ D_801779B8 = __sinf(gGameFrameCount * 5.5f * M_DTOR) + 15000.0f;
+ } else {
+ D_80177978 -= 1.0f;
+ D_80177980 += 0.3f;
+ D_80177988 += 4.0f;
+ D_801779B8 = (__sinf(gGameFrameCount * 1.5f * M_DTOR) * 10.0f) + 15000.0f;
+ 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);
+ }
+ if (D_800D2F68 != 0) {
+ switch (gCsFrameCount) {
+ case 400:
+ func_800BA808(gMsg_ID_19400, RCID_PEPPY);
+ break;
+ case 500:
+ func_800BA808(gMsg_ID_19410, RCID_SLIPPY);
+ break;
+ case 600:
+ func_800BA808(gMsg_ID_19420, RCID_FALCO);
+ break;
+ case 800:
+ func_800BA808(gMsg_ID_19430, RCID_PEPPY);
+ break;
+ case 900:
+ if (gTeamShields[3] > 0) {
+ func_800BA808(gMsg_ID_19440, RCID_FOX);
+ }
+ break;
+ case 1050:
+ D_80177830 = 1;
+ break;
+ case 1250:
+ D_80177830 = 0;
+ break;
+ }
+ if (gCsFrameCount > 1300) {
+ D_80178288[109] += 1.0f;
+ D_80178290[109] += 0.5f;
+ temp_v0_2 = (s32) (Rand_ZeroOne() * 100.0f);
+ D_80178298[109] = FILL_COLOR(D_800C9C3C[temp_v0_2 & 0xF]);
+ }
+ } else {
+ switch (gCsFrameCount) {
+ case 400:
+ func_800BA808(gMsg_ID_8300, RCID_PEPPY);
+ break;
+ case 500:
+ func_800BA808(gMsg_ID_8310, RCID_SLIPPY);
+ break;
+ case 600:
+ func_800BA808(gMsg_ID_8320, RCID_FALCO);
+ gCsFrameCount += 230;
+ break;
+ case 1050:
+ D_80177830 = 1;
+ break;
+ case 1250:
+ D_80177830 = 0;
+ break;
+ }
+ }
+ if (gCsFrameCount == 1400) {
+ func_8001DBD0(40);
+ }
+ if (gCsFrameCount > 1400) {
+ D_8017835C = 4;
+ D_80178348 = D_80178350 = D_80178354 = 0;
+ D_80178358 = 255;
+ if (D_80178340 == 0xFF) {
+ gNextGameState = GSTATE_CREDITS;
+ D_fake_i6_80196D00 = 0;
+ D_800D3180[9] = Play_CheckMedalStatus(200) + 1;
+ func_8001DC6C(0, 0x1B);
+ }
+ }
+ break;
+ case 100:
+ D_80178380[0] -= 4;
+ if (D_80178380[0] >= 0x100) {
+ D_80178380[0] = 0;
+ }
+ Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, -((player->unk_120 + player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
+ sp74.x = 0.0f;
+ sp74.y = 0.0f;
+ sp74.z = player->unk_0D0;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68);
+ player->vel.x = sp68.x;
+ player->vel.z = sp68.z;
+ player->vel.y = sp68.y;
+ if (player->timer_1F8 == 0) {
+ player->state_1C8 = PLAYERSTATE_1C8_3;
+ player->unk_014 = 0.2f;
+ player->unk_018 = 0.0f;
+ player->unk_01C = 0.05f;
+ D_80177AB0 = 6;
+ D_80161A44 = 12800.0f;
+ }
+ D_80177A48[0] = 1.0f;
+ D_801779A0 = (2.0f * __sinf(gGameFrameCount * 40.0f * M_DTOR)) + player->pos.x;
+ D_801779B8 = (2.0f * __sinf(gGameFrameCount * 30.0f * M_DTOR)) + player->pos.y;
+ D_801779C0 = (2.0f * __sinf(gGameFrameCount * 50.0f * M_DTOR)) + player->pos.z;
+ sp74.x = 0.0f;
+ sp74.y = 0.0f;
+ sp74.z = D_80177A48[5];
+ Math_SmoothStepToF(&D_80177A48[5], -400.0f, 0.05f, 5.0f, 0.0f);
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68);
+ D_80177978 = player->pos.x + sp68.x;
+ D_80177980 = player->pos.y + sp68.y;
+ D_80177988 = player->pos.z + sp68.z;
+ 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->unk_12C, 0.0f, 0.1f, 0.7f, 0.0f);
+ Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 0.4f, 0.0f);
+ break;
+ }
+ 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;
+ Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 15.0f, 0.0f);
+ Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 20.0f, 0.0f);
+ 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);
+}
+
+void func_i6_80195E44(Actor* actor) {
+ Vec3f sp44;
+ Vec3f sp38;
+ f32 sp34;
+
+ sp34 = 0.0f;
+
+ switch (actor->unk_0B8) {
+ case 0:
+ actor->unk_0F4.z += actor->fwork[1];
+ if (gCsFrameCount > 250) {
+ Math_SmoothStepToF(&actor->fwork[1], 0.5f, 0.1f, 0.04f, 0.0f);
+ } else {
+ Math_SmoothStepToF(&actor->fwork[1], -2.0f, 0.1f, 0.04f, 0.0f);
+ }
+ break;
+ case 1:
+ actor->unk_0F4.z += actor->fwork[1];
+ Math_SmoothStepToF(&actor->fwork[1], -2.0f, 0.1f, 0.04f, 0.0f);
+ if (gCsFrameCount == 55) {
+ actor->unk_0B8++;
+ }
+ break;
+ case 2:
+ Math_SmoothStepToF(&actor->unk_0F4.x, 180.0f, 0.1f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&actor->unk_0F4.y, 200.0f, 0.1f, 1.0f, 0.0f);
+ actor->unk_046 -= 5;
+ if (actor->unk_046 < 0) {
+ actor->unk_046 = 0;
+ Object_Kill(&actor->obj, actor->sfxPos);
+ }
+ break;
+ case 101:
+ Math_SmoothStepToF(&actor->unk_0F4.z, 0.0f, 0.03f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&actor->obj.pos.x, 0.0f, 0.03f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&actor->obj.pos.y, 15000.0f, 0.03f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&actor->obj.pos.z, 0.0f, 0.03f, 5.0f, 0.0f);
+ break;
+ case 100:
+ actor->fwork[7] += 3.0f;
+ actor->unk_0F4.z = __sinf(actor->fwork[7] * M_DTOR) * 1.5f;
+ actor->fwork[8] += 2.0f;
+ sp34 = __sinf(actor->fwork[8] * M_DTOR) * 0.5f;
+ break;
+ case 200:
+ break;
+ }
+ Matrix_RotateY(gCalcMatrix, (actor->unk_0F4.y + 180.0f) * M_DTOR, 0U);
+ Matrix_RotateX(gCalcMatrix, -(actor->unk_0F4.x * M_DTOR), 1U);
+ sp44.x = 0.0f;
+ sp44.y = 0.0f;
+ sp44.z = actor->fwork[0];
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38);
+ actor->vel.x = sp38.x;
+ actor->vel.y = sp38.y + sp34;
+ actor->vel.z = sp38.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;
+}
+
+void func_i6_801961AC(void) {
+ Boss* boss = &gBosses[0];
+
+ Boss_Initialize(boss);
+ boss->obj.status = OBJ_ACTIVE;
+ boss->actionState = 21;
+ boss->obj.id = OBJ_BOSS_321;
+ Object_SetInfo(&boss->info, boss->obj.id);
+ gCsFrameCount = 599;
+}
diff --git a/src/overlays/ovl_i6/fox_ve2.c b/src/overlays/ovl_i6/fox_ve2.c
index 44ecf33c..2529ab74 100644
--- a/src/overlays/ovl_i6/fox_ve2.c
+++ b/src/overlays/ovl_i6/fox_ve2.c
@@ -1,3420 +1,178 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
-f32 D_i6_801A7F40;
-f32 D_i6_801A7F44;
-f32 D_i6_801A7F48;
-f32 D_i6_801A7F4C;
-f32 D_i6_801A7F50;
-f32 D_i6_801A7F54;
-f32 D_i6_801A7F58;
-f32 D_i6_801A7F5C;
-f32 D_i6_801A7F60;
-f32 D_i6_801A7F64;
-f32 D_i6_801A7F68;
-f32 D_i6_801A7F6C;
-f32 D_i6_801A7F70;
-f32 D_i6_801A7F74;
-f32 D_i6_801A7F78;
-f32 D_i6_801A7F7C;
-Vec3f D_i6_801A7F80[100];
-f32 D_i6_801A8430;
-
-static f32* D_i6_801A6760[12] = {
- D_C037FCC, D_C0380C0, D_C0381B4, D_C0382A8, D_C03839C, D_C038490,
- D_C038584, D_C038678, D_C03876C, D_C038860, D_C038954, D_C038954,
-};
-
-void func_i6_80187530(Actor* actor) {
- s32 index;
-
- switch (actor->unk_048) {
- case 0:
- break;
- case 1:
- actor->unk_0B6 += (s32) actor->fwork[22];
- if (actor->unk_0B6 >= Animation_GetFrameCount(&D_6014658)) {
- actor->unk_0B6 = Animation_GetFrameCount(&D_6014658) - 1;
- }
- break;
- case 2:
- actor->unk_0B6 -= (s32) actor->fwork[22];
- if (actor->unk_0B6 <= 0) {
- actor->unk_0B6 = 0;
- }
- break;
- default:
- break;
- }
-
- index = actor->unk_0B6 / 18.0f;
- actor->info.hitbox = SEGMENTED_TO_VIRTUAL(D_i6_801A6760[index]);
- actor->obj.rot.z = D_i6_801A7F68;
-}
-
-s32 func_i6_8018767C(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
- if (limbIndex == 13) {
- *dList = NULL;
- }
- return 0;
-}
-
-extern Limb* D_6014844[];
-
-void func_i6_8018769C(Actor* actor) {
- Vec3f sp28[20];
-
- Animation_GetFrameData(&D_6014658, actor->unk_0B6, sp28);
- Animation_DrawSkeleton(1, D_6014844, sp28, func_i6_8018767C, NULL, NULL, &gIdentityMatrix);
-}
-
-extern u32 D_C039290[];
-extern u32 D_C03A290[];
-
-void func_i6_801876FC(void) {
- f32 temp_ft3;
- s32* var_s0;
- s32* var_s3;
- s32 i;
- s32 j;
-
- var_s0 = SEGMENTED_TO_VIRTUAL(&D_C039290);
- var_s3 = SEGMENTED_TO_VIRTUAL(&D_C03A290);
-
- for (i = 0; i < 1024; i += 32) {
- temp_ft3 = 4.0f * __sinf(((((i / 32) + (((s32) gGameFrameCount) / 2)) & 0x1F)) * (M_PI / 16.0f));
-
- for (j = 0; j < 32; j++) {
- var_s0[i + ((((s32) temp_ft3) + j) & 0x1F)] = var_s3[i + j];
- }
- }
-}
-
-extern ObjectInit D_C0356CC[];
-extern f32 D_C038CCC[];
-
-void func_i6_801878A8() {
- Actor* actor;
- Item* item;
- Object_58* obj58;
- s32 i;
-
- D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C0356CC);
-
- for (obj58 = gObjects58, i = 0; i < 1000; i++) {
- if (D_80178310[i].id < 0) {
- break;
- }
-
- if (D_80178310[i].id <= OBJ_80_160) {
- func_800A4F4C(obj58);
- obj58->obj.status = OBJ_ACTIVE;
- obj58->obj.id = D_80178310[i].id;
- obj58->obj.pos.x = D_80178310[i].xPos;
- obj58->obj.pos.z = -D_80178310[i].zPos1;
- obj58->obj.pos.z += D_80178310[i].zPos2;
- obj58->obj.pos.y = D_80178310[i].yPos;
- obj58->obj.rot.y = D_80178310[i].rot.y;
- Object_SetInfo(&obj58->info, obj58->obj.id);
- if (obj58->obj.id == OBJ_80_131) {
- obj58->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038CCC);
- }
- obj58++;
- }
- }
-
- for (actor = &gActors[1], i = 0; i < 1000; i++) {
- if (D_80178310[i].id < 0) {
- break;
- }
-
- if ((D_80178310[i].id <= OBJ_ACTOR_291) && (D_80178310[i].id >= OBJ_ACTOR_176)) {
- Actor_Initialize(actor);
- actor->obj.status = OBJ_ACTIVE;
- actor->obj.id = D_80178310[i].id;
- actor->obj.pos.x = D_80178310[i].xPos;
- actor->obj.pos.z = -D_80178310[i].zPos1;
- actor->obj.pos.z += D_80178310[i].zPos2;
- actor->obj.pos.y = D_80178310[i].yPos;
- actor->obj.rot.y = D_80178310[i].rot.y;
- Object_SetInfo(&actor->info, actor->obj.id);
- actor++;
- }
- }
-
- for (item = gItems, i = 0; i < 1000; i++) {
- if (D_80178310[i].id < 0) {
- break;
- }
- if ((D_80178310[i].id <= OBJ_ITEM_TRAINING_RING) && (D_80178310[i].id >= OBJ_ITEM_LASERS)) {
- Item_Initialize(item);
- item->obj.status = OBJ_ACTIVE;
- item->obj.id = D_80178310[i].id;
- item->obj.pos.x = D_80178310[i].xPos;
- item->obj.pos.z = -D_80178310[i].zPos1;
- item->obj.pos.z += D_80178310[i].zPos2;
- item->obj.pos.y = D_80178310[i].yPos;
- Object_SetInfo(&item->info, item->obj.id);
- item++;
- }
- }
-}
-
-extern ObjectInit* D_C036310;
-extern ObjectInit* D_C036B6C;
-extern ObjectInit* D_C03733C;
-
-void func_i6_80187C5C(void) {
- Actor* actor;
- Item* item;
- Object_58* obj58;
- s32 i;
-
- switch ((s32) (Rand_ZeroOne() * 2.9f)) {
- case 0:
- D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C036310);
- break;
- case 1:
- D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C036B6C);
- break;
- default:
- case 2:
- D_80178310 = SEGMENTED_TO_VIRTUAL(&D_C03733C);
- break;
- }
-
- for (obj58 = gObjects58, i = 0; i < 1000; i++) {
- if (D_80178310[i].id < 0) {
- break;
- }
-
- if (D_80178310[i].id <= OBJ_80_160) {
- func_800A4F4C(obj58);
- obj58->obj.status = OBJ_ACTIVE;
- obj58->obj.id = D_80178310[i].id;
- obj58->obj.pos.x = D_80178310[i].xPos;
- obj58->obj.pos.z = -D_80178310[i].zPos1;
- obj58->obj.pos.z += D_80178310[i].zPos2;
- obj58->obj.pos.y = D_80178310[i].yPos;
- obj58->obj.rot.y = D_80178310[i].rot.y;
- if (obj58->obj.id == OBJ_80_147) {
- obj58->unk40[0] = D_80178310[i].rot.z;
- }
- Object_SetInfo(&obj58->info, obj58->obj.id);
- if (obj58->obj.id == OBJ_80_131) {
- obj58->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038CCC);
- }
- obj58++;
- }
- }
-
- for (actor = &gActors[1], i = 0; i < 1000; i++) {
- if (D_80178310[i].id < 0) {
- break;
- }
-
- if ((D_80178310[i].id <= OBJ_ACTOR_291) && (D_80178310[i].id >= OBJ_ACTOR_176)) {
- Actor_Initialize(actor);
- actor->obj.status = OBJ_ACTIVE;
- actor->obj.id = D_80178310[i].id;
- actor->obj.pos.x = D_80178310[i].xPos;
- actor->obj.pos.z = -D_80178310[i].zPos1;
- actor->obj.pos.z += D_80178310[i].zPos2;
- actor->obj.pos.y = D_80178310[i].yPos;
- actor->obj.rot.y = D_80178310[i].rot.y;
- Object_SetInfo(&actor->info, actor->obj.id);
- actor++;
- }
- }
-
- for (item = gItems, i = 0; i < 1000; i++) {
- if (D_80178310[i].id < 0) {
- break;
- }
- if ((D_80178310[i].id <= OBJ_ITEM_TRAINING_RING) && (D_80178310[i].id >= OBJ_ITEM_LASERS)) {
- Item_Initialize(item);
- item->obj.status = OBJ_ACTIVE;
- item->obj.id = D_80178310[i].id;
- item->obj.pos.x = D_80178310[i].xPos;
- item->obj.pos.z = -D_80178310[i].zPos1;
- item->obj.pos.z += D_80178310[i].zPos2;
- item->obj.pos.y = D_80178310[i].yPos;
- Object_SetInfo(&item->info, item->obj.id);
- item++;
- }
- }
-}
-
-void func_i6_801880E4(Actor* actor) {
- s32 i;
- f32 xDisplacement;
- f32 yDisplacement;
- f32 zDisplacement;
- Object_58* obj58;
- f32 yaw;
- f32 var_fv0;
- Vec3f sp48;
- Vec3f vel;
- f32 temp_fv1;
-
- for (obj58 = gObjects58, i = 0; i < 200; i++, obj58++) {
- if ((obj58->obj.id == OBJ_80_147) && ((u8) actor->unk_04E == (u8) obj58->unk40[0])) {
- actor->fwork[3] = obj58->obj.pos.x;
- actor->fwork[4] = obj58->obj.pos.y;
- actor->fwork[5] = obj58->obj.pos.z;
- break;
- }
- }
- actor->fwork[2] = 3.0f;
- xDisplacement = actor->fwork[3] - actor->obj.pos.x;
- yDisplacement = actor->fwork[4] - actor->obj.pos.y;
- zDisplacement = actor->fwork[5] - actor->obj.pos.z;
- if ((fabsf(xDisplacement) < 300.0f) && (fabsf(yDisplacement) < 300.0f) && (fabsf(zDisplacement) < 300.0f)) {
- actor->unk_04E++;
- }
- if (!(gGameFrameCount & 0x1F)) {
- actor->iwork[11] = 1;
- actor->fwork[1] = 47.0f;
- if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 1000.0f) &&
- (fabsf(actor->obj.pos.y - gPlayer[0].pos.y) < 500.0f) &&
- (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 1000.0f)) {
- actor->iwork[11] = 2;
- actor->fwork[1] = 65.0f;
- }
- }
-
- Math_SmoothStepToF(actor->fwork, actor->fwork[1], 0.2f, 3.0f, 0.00001f);
- yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
- Math_SmoothStepToAngle(&actor->unk_0F4.x,
- Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement)))),
- 0.1f, actor->fwork[2], 0.0f);
- temp_fv1 = Math_SmoothStepToAngle(&actor->unk_0F4.y, yaw, 0.1f, actor->fwork[2], 0.0001f) * 40.0f;
- if (temp_fv1 < 0.0f) {
- var_fv0 = temp_fv1 * -1.0f;
- } else {
- var_fv0 = 360.0f - temp_fv1;
- }
- Math_SmoothStepToAngle(&actor->obj.rot.z, var_fv0, 0.1f, 3.0f, 0.01f);
-
- actor->obj.rot.y = actor->unk_0F4.y;
- actor->obj.rot.x = -actor->unk_0F4.x;
- Matrix_RotateY(gCalcMatrix, actor->unk_0F4.y * M_DTOR, 0);
- Matrix_RotateX(gCalcMatrix, -actor->unk_0F4.x * M_DTOR, 1);
- sp48.x = 0;
- sp48.y = 0;
- sp48.z = actor->fwork[0];
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp48, &vel);
- actor->vel.x = vel.x;
- actor->vel.y = vel.y;
- actor->vel.z = vel.z;
-}
-
-void func_i6_80188448(Actor* actor) {
- func_8005B388(actor);
-}
-
-void func_i6_80188468(void) {
- Actor* actor = &gActors[0];
-
- Actor_Initialize(actor);
- actor->obj.status = OBJ_ACTIVE;
- actor->obj.pos.x = -23180.0f;
- actor->obj.pos.y = 300.0f;
- actor->obj.pos.z = -11959.0f;
- actor->iwork[11] = 1;
- actor->iwork[14] = 1;
- actor->obj.id = OBJ_ACTOR_199;
- Object_SetInfo(&actor->info, actor->obj.id);
- Audio_PlaySfx(0x3100000C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
-}
-
-void func_i6_80188528(Actor* actor) {
- Math_SmoothStepToF(&actor->vel.x, 0.0f, 0.2f, 0.5f, 0.0f);
- Math_SmoothStepToF(&actor->vel.y, 0.0f, 0.2f, 0.5f, 0.0f);
- Math_SmoothStepToF(&actor->vel.z, 0.0f, 0.2f, 0.5f, 0.0f);
- if (actor->unk_0D0 != 0) {
- func_8007A6F0(&actor->obj.pos, 0x2903A008);
- Object_Kill(&actor->obj, actor->sfxPos);
- func_8007B344(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 3.0f, 5);
- } else if (actor->timer_0BC == 0) {
- Object_Kill(&actor->obj, actor->sfxPos);
- }
- actor->obj.rot.y = RAD_TO_DEG(-gPlayer[0].unk_058);
- actor->obj.rot.x = RAD_TO_DEG(gPlayer[0].unk_05C);
- actor->unk_0F4.z += actor->fwork[0];
-}
-
-extern Gfx* D_6009300;
-
-void func_i6_80188660(Actor* actor) {
- RCP_SetupDL(&gMasterDisp, 0x3D);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
- Matrix_RotateZ(gGfxMatrix, actor->unk_0F4.z * M_DTOR, 1);
- Matrix_Scale(gGfxMatrix, 1.1f, 0.9f, 1.0f, 1);
- Matrix_RotateZ(gGfxMatrix, -actor->unk_0F4.z * M_DTOR, 1);
- Matrix_Scale(gGfxMatrix, 1.1f, 0.9f, 1.0f, 1);
- Matrix_Scale(gGfxMatrix, 3.0f, 3.0f, 1.0f, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, &D_6009300);
-}
-
-void func_i6_801887B0(Actor* actor, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel) {
- Actor_Initialize(actor);
- actor->obj.status = OBJ_ACTIVE;
- actor->obj.id = OBJ_ACTOR_286;
- actor->vel.x = xVel;
- actor->vel.y = yVel;
- actor->vel.z = zVel;
- actor->obj.pos.x = xPos;
- actor->obj.pos.y = yPos;
- actor->obj.pos.z = zPos;
- if (Rand_ZeroOne() < 0.5f) {
- actor->fwork[0] = 10.0f;
- } else {
- actor->fwork[0] = -10.0f;
- }
- actor->timer_0BC = 300;
- Object_SetInfo(&actor->info, actor->obj.id);
-}
-
-void func_i6_8018887C(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel) {
- s32 i;
-
- for (i = 0; i < ARRAY_COUNT(gActors); i++) {
- if (gActors[i].obj.status == OBJ_FREE) {
- func_i6_801887B0(&gActors[i], xPos, yPos, zPos, xVel, yVel, zVel);
- break;
- }
- }
-}
-
-void func_i6_801888F4(Actor* actor) {
- s32 i;
-
- actor->obj.rot.z -= 8.0f;
- if ((actor->timer_0BC & 1) == 1) {
- func_8007D2C8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 5.0f);
- }
- if ((actor->timer_0BC == 0) || (actor->unk_0D0 != 0)) {
- func_8007BFFC(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, actor->vel.x, actor->vel.y, actor->vel.z,
- 7.0f, 20);
- func_8007B344(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 10.0f, 5);
-
- for (i = 0; i < 6; i++) {
- func_800794CC(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 1.0f);
- }
-
- func_8007A6F0(&actor->obj.pos, 0x2903B009);
- Object_Kill(&actor->obj, actor->sfxPos);
- func_80077240(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 5);
- gHitCount += 6;
- D_80177850 = 15;
- }
-}
-
-void func_i6_80188A4C(Boss* boss) {
-
- if (boss->damage > 20) {
- boss->damage = 20;
- }
- if (boss->dmgType != DMG_NONE) {
- boss->dmgType = DMG_NONE;
- if (boss->actionState < 10 && !(boss->fwork[21] < 250.0f)) {
- switch (boss->dmgPart) {
- case 0:
- boss->swork[1] = 15;
- boss->swork[7] = 30;
- break;
- case 1:
- case 2:
- if (boss->swork[4] == 0) {
- boss->swork[2] = 10;
- boss->swork[3] = 15;
- Audio_PlaySfx(0x2943500FU, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- boss->health -= boss->damage;
- if ((boss->health != 0) && (boss->health <= 0)) {
- D_Timer_80161A60 = 8;
- Audio_PlaySfx(0x2940D09AU, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- func_80042EC0(boss);
- gPlayer[0].state_1C8 = PLAYERSTATE_1C8_0;
- boss->actionState = 20;
- boss->swork[1] = 1000;
- boss->swork[2] = 1000;
- boss->swork[6] = 1;
- D_80177A48[0] = 0.0f;
- D_80177A48[1] = 0.1f;
- gCsFrameCount = 0;
- func_8001A55C(boss->sfxPos, 0x11034074U);
- func_8001A55C(boss->sfxPos, 0x31408097U);
- func_800182F4(0x100100FF);
- func_800182F4(0x110100FF);
- }
- }
- break;
- default:
- if (boss->swork[4] == 0) {
- boss->swork[8]++;
- if (boss->swork[8] >= 6) {
- boss->swork[8] = 0;
- boss->actionState = 12;
- boss->timer_050 = 50;
- boss->fwork[3] = gPlayer[0].pos.x;
- boss->fwork[5] = gPlayer[0].unk_138;
- Audio_PlaySfx(0x2940B096U, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- }
- break;
- }
- }
- }
+void func_i6_80196210(Boss* boss) {
+ Math_SmoothStepToF(boss->fwork, boss->fwork[1], 0.5f, 5.0f, 0.0f);
}
-extern AnimationHeader D_600C038;
-
-void func_i6_80188CB8(Boss* boss) {
- s32 i;
- Vec3f sp50;
- Vec3f sp44;
-
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_600C038)) {
- boss->unk_04C = 0;
- }
- Animation_GetFrameData(&D_600C038, boss->unk_04C, boss->vwork);
-
- if (boss->swork[3] != 0) {
- boss->swork[3]--;
- }
-
- if (boss->swork[2] != 0) {
- boss->swork[2]--;
- Math_SmoothStepToF(&boss->fwork[15], -15.0f, 0.8f, 5.0f, 0.0f);
- Math_SmoothStepToF(&boss->fwork[16], 0.05f, 0.8f, 0.02f, 0.0f);
- } else {
- Math_SmoothStepToF(&boss->fwork[15], 4.0f, 0.05f, 0.2f, 0.0f);
- Math_SmoothStepToF(&boss->fwork[16], 0.03f, 0.05f, 0.001f, 0.0f);
- }
- Math_SmoothStepToF(&boss->fwork[10], boss->fwork[11], boss->fwork[12], boss->fwork[13], 0.0f);
- if (boss->swork[1] != 0) {
- boss->swork[1]--;
- boss->fwork[11] = 30.0f;
- boss->fwork[12] = 0.8f;
- boss->fwork[13] = 3.0f;
- } else {
- boss->fwork[11] = 8.0f;
- boss->fwork[12] = 0.05f;
- boss->fwork[13] = 0.5f;
- }
-
- if (boss->swork[7] != 0) {
- boss->swork[7]--;
- if (!(gGameFrameCount & 1)) {
- func_i6_8018887C(((Rand_ZeroOne() - 0.5f) * 100.0f) + boss->obj.pos.x,
- ((Rand_ZeroOne() - 0.5f) * 300.0f) + (boss->obj.pos.y - 250.0f),
- ((Rand_ZeroOne() - 0.5f) * 100.0f) + boss->obj.pos.z, (Rand_ZeroOne() - 0.5f) * 50.0f,
- (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() - 0.5f) * 50.0f);
- }
- }
- boss->fwork[14] += boss->fwork[15];
- Matrix_RotateY(gCalcMatrix, -gPlayer[0].unk_058, 0);
- sp50.x = boss->vel.z * 0.25f;
- sp50.y = 0.0f;
- sp50.z = boss->vel.x * 0.25f;
- Matrix_MultVec3f(gCalcMatrix, &sp50, &sp44);
- boss->fwork[18] = -sp44.z;
- boss->fwork[17] = sp44.x;
- boss->swork[4] = 0;
- boss->fwork[19] = -26.0f;
+s32 func_i6_8019624C(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
+ Boss* boss = (Boss*) data;
- for (i = 10; i < 12; i++) {
- if ((gActors[i].obj.status == OBJ_ACTIVE) && (gActors[i].obj.id == OBJ_ACTOR_197)) {
- gUnkEntities30[i].mode = 50;
- gUnkEntities30[i].unk_28 = 1.0f;
- gUnkEntities30[i].unk_04.x = boss->obj.pos.x;
- gUnkEntities30[i].unk_04.y = boss->obj.pos.y - 200.0f;
- gUnkEntities30[i].unk_04.z = boss->obj.pos.z;
- gUnkEntities30[i].timer = 3;
- gUnkEntities30[i].unk_10.x = gActors[i].obj.pos.x;
- gUnkEntities30[i].unk_10.y = gActors[i].obj.pos.y;
- gUnkEntities30[i].unk_10.z = gActors[i].obj.pos.z;
- boss->swork[4] = 1;
- }
+ if ((limbIndex == 1) || (limbIndex == 2)) {
+ pos->x -= boss->fwork[0];
}
-}
-
-void func_i6_80189098(Boss* boss) {
- Actor* actor = &gActors[10];
-
- Actor_Initialize(actor);
- actor->obj.status = OBJ_INIT;
- actor->obj.id = OBJ_ACTOR_197;
- actor->unk_0E4 = 10;
- actor->unk_0E6 = 0;
- actor->health = 200;
- actor->obj.pos.x = 200.0f;
- actor->obj.pos.y = 0.0f;
- actor->obj.pos.z = boss->obj.pos.z;
- Object_SetInfo(&actor->info, actor->obj.id);
- actor->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBEA8);
- actor++;
-
- Actor_Initialize(actor);
- actor->obj.status = OBJ_INIT;
- actor->obj.id = OBJ_ACTOR_197;
- actor->unk_0E4 = 10;
- actor->unk_0E6 = 0;
- actor->health = 200;
- actor->obj.pos.x = -200.0f;
- actor->obj.pos.y = 0.0f;
- actor->obj.pos.z = boss->obj.pos.z;
- Object_SetInfo(&actor->info, actor->obj.id);
- actor->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBEA8);
-
- gActors[0].unk_0B8 = 2;
+ return false;
}
-extern void func_800B56BC(Player*);
+extern AnimationHeader D_6014904;
+extern Limb* D_60149D0[];
-void func_i6_80189214(void) {
- s32 i;
- Player* player = &gPlayer[0];
+void func_i6_80196288(Boss* boss) {
- func_800A6148();
-
- for (i = 0; i < 200; i++) {
- gObjects58[i].obj.status = OBJ_FREE;
- }
-
- gLevelMode = LEVELMODE_ON_RAILS;
- player->unk_204 = 0;
- gPlayer[0].pos.x = 0.0f;
- player->camEye.z = 400.0f;
- player->camAt.z = player->camEye.z - 1000.0f;
- player->unk_148 = player->unk_14C = 0.74f;
- player->camEye.y = player->pos.y * player->unk_14C + 10.0f;
- player->camEye.x = player->pos.x * player->unk_148;
- D_80177DC8 = 0;
- // FAKE
- if (1) {}
- PRINTF("FO_Game_Sw %d\n");
- player->camAt.x = 0.0f;
- player->camAt.y = 0.0f;
- player->unk_114 = 0.0f;
- player->unk_144 = 0.0f;
- D_80177D20 = 0.0f;
- player->unk_018 = player->unk_014 = 1.0f;
- player->pos.z = player->unk_138 = -player->unk_144;
- func_800B56BC(player);
+ Animation_GetFrameData(&D_6014904, 0, boss->vwork);
+ Animation_DrawSkeleton(3, D_60149D0, boss->vwork, func_i6_8019624C, NULL, boss, gCalcMatrix);
}
-void func_i6_8018933C(Actor* actor) {
- if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 1000.0f) &&
- (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 1000.0f)) {
- D_Timer_80177B44 = 50;
- Object_Kill(&actor->obj, actor->sfxPos);
- }
+void func_i6_801962F4(Actor* actor) {
+ func_8002F69C(actor);
}
-void func_i6_801893B8(Actor* actor) {
-
- if (D_8015F924 == 0) {
- actor->unk_04E++;
- switch (actor->unk_04E) {
- case 200:
- func_800BA808(gMsg_ID_8250, RCID_ANDROSS_RED);
- return;
- case 400:
- func_800BA808(gMsg_ID_8255, RCID_ANDROSS_RED);
- return;
- case 600:
- func_800BA808(gMsg_ID_8260, RCID_ANDROSS_RED);
- return;
- case 800:
- func_800BA808(gMsg_ID_19325, RCID_ANDROSS_RED);
- break;
- }
- }
-}
+static Vec3f D_i6_801A68B0[6] = {
+ { 0.0f, 4030.0f, 18000.0f }, { -500.0f, 3820.0f, 17200.0f }, { 550.0f, 3750.0f, 17000.0f },
+ { 1000.0f, 300.0f, 0.0f }, { -1000.0f, 300.0f, 0.0f }, { 0.0f, 500.0f, 0.0f },
+};
-void func_i6_80193710(void);
+static f32 D_i6_801A68F8[3] = { 300.0f, 70.0f, 280.0f };
-void func_i6_80189470(Actor* actor) {
- s32 i;
+void func_i6_80196314(Actor* actor) {
+ Actor* otherActor;
+ Actor* actor4 = &gActors[4];
Player* player = &gPlayer[0];
-
- if ((D_80177AB0 != 7) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) &&
- (fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 9000.0f) &&
- (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 9000.0f)) {
- D_80177AB0 = 7;
- func_800BA808(gMsg_ID_19370, RCID_JAMES);
- func_800182F4(0x101400FF);
- func_800182F4(0x111400FF);
- }
-
- if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) && (fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 500.0f) &&
- (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 500.0f)) {
- func_8001A838(0x11403076);
- func_8001D400(0);
- gCurrentLevel = LEVEL_VENOM_2;
- D_8017827C = 1;
- D_800D2F68 = 1;
- player->state_1C8 = PLAYERSTATE_1C8_7;
- player->unk_1D0 = 3;
- player->unk_144 = D_80177D20 = 0.0f;
- D_80177AB0 = D_80177A98 = 1;
- player->camEye.x = 1200.0f;
- player->camEye.z = 1200.0f;
- player->camEye.y = 1800.0f;
- D_801779A0 = 0.0f;
- D_801779B8 = 620.0f;
- D_801779C0 = 0.0f;
- player->unk_234 = 0;
- player->unk_034 = 0.0f;
- D_80177A48[0] = 1.0f;
- func_800A6148();
-
- for (i = 0; i < 200; i++) {
- gObjects58[i].obj.status = OBJ_FREE;
- }
-
- func_i6_80193710();
- D_8017782C = 1;
- func_800A594C();
- D_80178348 = D_80178350 = D_80178354 = 0;
- D_80178340 = D_80178358 = 255;
- player->timer_1F8 = 2;
- gCsFrameCount = 0;
- D_80177A48[1] = 0.0f;
- }
-}
-
-extern void func_8004D440(Player*);
-
-void func_i6_80189724(Actor* actor) {
- s32 i;
- Vec3f vec;
- Vec3f displacement;
- Vec3f vel;
-
- if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 2000.0f) &&
- (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 2000.0f)) {
- Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
- vec.x = 0.0f;
- vec.y = 0.0f;
- vec.z = -30.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &vel);
- Matrix_RotateZ(gCalcMatrix, 2.0f * (Rand_ZeroOne() * M_PI), 1);
- vec.x = Rand_ZeroOne() * 300.0f;
- vec.y = 0.0f;
- vec.z = 0.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &displacement);
-
- actor->vel.x = vel.x * 0.2f;
- actor->vel.y = vel.y * 0.2f;
- actor->vel.z = vel.z * 0.2f;
- for (i = 0; i < 1; i++) {
- func_8007797C(actor->obj.pos.x + displacement.x, actor->obj.pos.y + displacement.y,
- actor->obj.pos.z + displacement.z, vel.x, vel.y, vel.z, (Rand_ZeroOne() * 2.5f) + 15.5f);
- }
- }
- if ((fabsf(actor->obj.pos.x - gPlayer[0].pos.x) < 500.0f) &&
- (fabsf(actor->obj.pos.z - gPlayer[0].unk_138) < 500.0f)) {
- if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3 || gPlayer[0].state_1C8 == PLAYERSTATE_1C8_5)) {
- gPlayer[0].shields = 0;
- gRightWingHealth[0] = gLeftWingHealth[0] = 0;
- Player_ApplyDamage(&gPlayer[0], 1, 60);
- Player_ApplyDamage(&gPlayer[0], 2, 60);
- actor->timer_0BC = 10;
- gPlayer[0].timer_220 = 200;
- }
- }
- if (actor->timer_0BC == 1) {
- func_8004D440(&gPlayer[0]);
- }
-}
-
-void func_i6_801899E4(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 scale2, u8 arg5) {
-
- Effect_Initialize(effect);
- effect->obj.status = OBJ_ACTIVE;
- effect->obj.id = OBJ_EFFECT_357;
- effect->obj.pos.x = xPos;
- effect->obj.pos.y = yPos;
- effect->obj.pos.z = zPos;
- effect->unk_4C = arg5;
- effect->scale2 = (Rand_ZeroOne() * 0.8f + 0.3f) * scale2;
- effect->timer_50 = 100;
- effect->obj.rot.x = Rand_ZeroOne() * 360.0f;
- effect->unk_60.x = (Rand_ZeroOne() - 0.5f) * 30.0f;
- effect->unk_60.y = (Rand_ZeroOne() - 0.5f) * 30.0f;
- effect->unk_60.z = (Rand_ZeroOne() - 0.5f) * 30.0f;
- Object_SetInfo(&effect->info, effect->obj.id);
-}
-
-void func_i6_80189B00(f32 xPos, f32 yPos, f32 zPos, f32 scale2) {
- s32 i;
-
- for (i = 50; i >= 0; i--) {
- if (gEffects[i].obj.status == OBJ_FREE) {
- func_i6_801899E4(&gEffects[i], xPos, yPos, zPos, scale2, 0);
- break;
- }
- }
-}
-
-extern f32 D_800C9C30;
-extern u16 D_800C9E90[][2];
-
-void func_i6_801876FC(void);
-
-void func_i6_80189B70(Boss* boss) {
- s32 i;
- s32 sp98;
- s32 frameCountMask;
- f32 xDisplacement;
- f32 yDisplacement;
- f32 zDisplacement;
- s32 pad84;
- f32 yaw;
- s32 pad7C;
- Vec3f vec;
- Vec3f sp64;
- Vec3f sp58;
- s32 pad;
-
- func_i6_80188A4C(boss);
- func_i6_80188CB8(boss);
- boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038F24);
- Math_SmoothStepToF(&D_800C9C30, 255.0f, 1.0f, 4.0f, 0);
- Math_SmoothStepToF(&boss->unk_3F8, 10.0f, 0.2f, 0.2f, 0);
- if (!(gGameFrameCount & 0x10)) {
- Math_SmoothStepToF(&boss->fwork[25], 255.0f, 1.0f, 10.0f, 0);
- } else {
- Math_SmoothStepToF(&boss->fwork[25], 100.0f, 1.0f, 10.0f, 0);
- }
- if ((fabsf(boss->obj.pos.x - gPlayer[0].pos.x) < 300.0f) &&
- (fabsf((boss->obj.pos.y - 300.0f) - gPlayer[0].pos.y) < 300.0f) &&
- (fabsf(boss->obj.pos.z - gPlayer[0].unk_138) < 300.0f) && (boss->actionState < 0xB) && (boss->timer_05A == 0)) {
- boss->actionState = 11;
- boss->timer_050 = 150;
- Audio_PlaySfx(0x31408097, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
-
- switch (boss->actionState) {
- case 0:
- boss->health = 200;
- D_80177AB0 = 3;
- boss->fwork[19] = -26.0f;
- boss->fwork[10] = 8.0f;
- func_i6_80189098(boss);
- boss->swork[5] = 300;
- boss->actionState++;
- Audio_PlaySfx(0x11034074, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- boss->fwork[21] = 255.0f;
- boss->fwork[22] = 255.0f;
- boss->fwork[23] = 0.0f;
- boss->fwork[24] = 0.0f;
- break;
- case 10:
- boss->fwork[23] = 0.0f;
- boss->fwork[24] = 0.0f;
- boss->fwork[21] = 255.0f;
- boss->fwork[22] = 255.0f;
- boss->fwork[1] = 10.0f;
- boss->fwork[2] = 2.0f;
- boss->fwork[3] = 0.0f;
- boss->fwork[4] = 0.0f;
- boss->fwork[5] = gPlayer[0].pos.z - 3000.0f;
- boss->fwork[19] = -26.0f;
- boss->swork[5] = 100;
- if (boss->timer_050 == 0) {
- gPlayer[0].state_1C8 = PLAYERSTATE_1C8_9;
- gPlayer[0].unk_1D0 = 0;
- boss->actionState = 1;
- gPlayer[0].unk_240 = 1;
- }
- break;
- case 1:
- if ((gPlayer[0].state_1C8 != PLAYERSTATE_1C8_9) && (boss->timer_050 == 0)) {
- boss->fwork[2] = 1.6f;
- boss->timer_050 = (s32) Rand_ZeroOne() * 50.0f + 50;
- boss->fwork[3] = (Rand_ZeroOne() - 0.5f) * 10000.0f;
- boss->fwork[4] = (Rand_ZeroOne() - 0.5f) * 1000.0f;
- boss->fwork[5] = (Rand_ZeroOne() - 0.5f) * 10000.0f;
- if (Rand_ZeroOne() < 0.3f) {
- boss->actionState = 2;
- boss->timer_050 = (s32) Rand_ZeroOne() * 100.0f + 50;
- boss->fwork[1] = 0.0f;
- }
- }
- break;
- case 2:
- if (boss->timer_050 == 0) {
- boss->actionState = 1;
- boss->timer_050 = (s32) Rand_ZeroOne() * 50.0f + 50;
- boss->fwork[1] = 50.0f;
- }
- break;
- case 11:
- boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBF34);
- if (boss->timer_050 < 120) {
- D_80178348 = D_80178350 = D_80178354 = 255;
- D_80178358 = 80;
- D_8017835C = 1;
- gPlayer[0].timer_224 = gGameFrameCount & 7;
- gPlayer[0].timer_220 = 3;
- Math_SmoothStepToF(&D_801779A8[gMainController], 40.0f, 1.0f, 3.0f, 0.0f);
- if (!(gGameFrameCount & 0x1F) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3)) {
- Player_ApplyDamage(&gPlayer[0], 3, 10);
- }
- }
- Math_SmoothStepToF(&gPlayer[0].unk_0D0, 0.0f, 2.0f, 2.0f, 0.0f);
- Math_SmoothStepToF(&gPlayer[0].pos.x, boss->obj.pos.x, 0.8f, 50.0f, 0.0f);
- Math_SmoothStepToF(&gPlayer[0].pos.y, boss->obj.pos.y - 300.0f, 0.8f, 50.0f, 0.0f);
- Math_SmoothStepToF(&gPlayer[0].pos.z, boss->obj.pos.z, 0.8f, 50.0f, 0.0f);
- boss->fwork[11] = 45.0f;
- boss->fwork[12] = 0.8f;
- boss->fwork[13] = 1.0f;
- boss->fwork[19] = 23.0f;
- boss->fwork[1] = 0.0f;
- gPlayer[0].unk_238 = 1;
- Math_SmoothStepToF(&D_800CA230, 0.15f, 0.2f, 0.004f, 0.0f);
- if (boss->timer_050 == 120) {
- Audio_PlaySfx(0x1940306E, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if (boss->timer_050 == 0) {
- gPlayer[0].unk_0D0 = D_80161A54;
- gPlayer[0].unk_238 = 0;
- D_80178358 = 0;
- boss->timer_05A = 50;
- if (boss->swork[4] != 0) {
- boss->actionState = 1;
- boss->timer_050 = (s32) Rand_ZeroOne() * 50.0f + 50;
- boss->fwork[1] = 50.0f;
- } else {
- boss->actionState = 3;
- }
- func_8001A55C(boss->sfxPos, 0x31408097);
- }
- break;
- case 3:
- boss->fwork[1] = 42.0f;
- boss->fwork[2] = 1.3f;
- boss->fwork[3] = gPlayer[0].pos.x;
- boss->fwork[4] = gPlayer[0].pos.y;
- boss->fwork[5] = gPlayer[0].unk_138;
- break;
- case 12:
- boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBF34);
- boss->fwork[1] = 0;
- boss->fwork[24] = 0.2f;
- boss->fwork[22] = 0.0f;
- if ((boss->fwork[22] < 1.0f) && (boss->timer_050 == 0)) {
- xDisplacement = boss->fwork[3] - boss->obj.pos.x;
- zDisplacement = boss->fwork[5] - boss->obj.pos.z;
- Matrix_RotateY(gCalcMatrix, Math_Atan2F(xDisplacement, zDisplacement), 0);
- vec.x = 0.0f;
- vec.y = 0.0f;
- vec.z = 4000.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
- boss->obj.pos.x = boss->fwork[3] + sp64.x;
- boss->obj.pos.z = boss->fwork[5] + sp64.z;
- boss->unk_078.y = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
- boss->actionState = 13;
- Audio_PlaySfx(0x1940306E, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- boss->timer_054 = 90;
- }
- break;
- case 13:
- boss->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_800CBF34);
- boss->fwork[24] = 0.0f;
- boss->fwork[22] = 255.0f;
- if (250.0f < boss->fwork[22]) {
- boss->actionState = 3;
- }
- break;
- case 20:
- gCsFrameCount++;
- boss->fwork[0] = 0.0f;
- boss->fwork[1] = 0.0f;
- boss->obj.rot.z += 0.2f;
- boss->obj.rot.x += 0.1f;
- boss->obj.pos.y -= 3.0f;
- Matrix_RotateY(gCalcMatrix, -gPlayer[0].unk_058, 0U);
- vec.x = (Rand_ZeroOne() - 0.5f) * 700.0f;
- vec.y = (Rand_ZeroOne() - 0.5f) * 300.0f;
- vec.z = 500.0f;
- Matrix_MultVec3f(gCalcMatrix, &vec, &sp64);
- func_8007797C(boss->obj.pos.x + sp64.x, boss->obj.pos.y + sp64.y, boss->obj.pos.z + sp64.z, 0.0f, 0.0f,
- 0.0f, (Rand_ZeroOne() * 5.0f) + 7.0f);
- if (!(gGameFrameCount & 1)) {
- func_8007C484(((Rand_ZeroOne() - 0.5f) * 600.0f) + boss->obj.pos.x,
- (Rand_ZeroOne() * 100.0f) + (boss->obj.pos.y + 100.0f), boss->obj.pos.z, 0.0f, 0.0f, 0.0f,
- (Rand_ZeroOne() * 0.3f) + 0.5f, 0);
- }
- vec.x = 0.0f;
- vec.y = 0.0f;
- vec.z = 2000.0f;
- Matrix_MultVec3f(gCalcMatrix, &vec, &sp64);
- Math_SmoothStepToF(&D_80177A48[0], 100.0f, 1.0f, 2.0f, 0.0f);
- Math_SmoothStepToF(&D_80177A48[1], 100.0f, 1.0f, 10.0f, 0.0f);
- Math_SmoothStepToF(&gPlayer[0].camEye.x, boss->obj.pos.x + sp64.x, 0.02f, D_80177A48[0], 0.0f);
- Math_SmoothStepToF(&gPlayer[0].camEye.y, boss->obj.pos.y + sp64.y, 0.02f, D_80177A48[0], 0.0f);
- Math_SmoothStepToF(&gPlayer[0].camEye.z, boss->obj.pos.z + sp64.z, 0.02f, D_80177A48[0], 0.0f);
- Math_SmoothStepToF(&gPlayer[0].camAt.x, boss->obj.pos.x, 0.05f, D_80177A48[1], 0.0f);
- Math_SmoothStepToF(&gPlayer[0].camAt.y, boss->obj.pos.y, 0.05f, D_80177A48[1], 0.0f);
- Math_SmoothStepToF(&gPlayer[0].camAt.z, boss->obj.pos.z, 0.05f, D_80177A48[1], 0.0f);
- Math_SmoothStepToF(&gPlayer[0].unk_034, 0.0f, 0.5f, 0.5f, 0.0f);
-
- if (gCsFrameCount == 50) {
- func_800BA808(gMsg_ID_19335, RCID_ANDROSS_RED);
- }
- if (gCsFrameCount == 200) {
- gBossActive = 0;
- gPlayer[0].unk_0D0 = D_80161A54;
- func_8001CA24(0);
- boss->actionState = 21;
- func_8007B344(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 60.0f, 5);
- func_8007A568(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 40.0f);
-
- for (i = 0; i < ARRAY_COUNT(gActors); i++) {
- if ((gActors[i].obj.status == OBJ_ACTIVE) && (gActors[i].obj.id == OBJ_ACTOR_286)) {
- Object_Kill(&gActors[i].obj, gActors[i].sfxPos);
- }
- }
- D_80177AB0 = 4;
- gCsFrameCount = 0;
- }
- break;
- case 21:
- func_i6_801876FC();
- gCsFrameCount++;
- D_80178480 = 10;
- if (gCsFrameCount < 200) {
- D_80178380[0] += 4;
- if (D_80178380[0] >= 0xFF) {
- D_80178380[0] = 0xFF;
- }
- D_80178390[0] = D_801783A0[0] = D_801783B0[0] = 0xFF;
- Math_SmoothStepToF(&D_800CA230, 0.15f, 0.2f, 0.004f, 0.0f);
- Math_SmoothStepToF(&D_801779A8[gMainController], 70.0f, 1.0f, 4.0f, 0.0f);
- }
- switch (gCsFrameCount) {
- case 30:
- gRadioState = 0;
- func_800BA808(gMsg_ID_20318, RCID_FOX);
- gPlayer[0].timer_220 = 200;
- break;
- case 350:
- func_800BA808(gMsg_ID_19468, RCID_JAMES);
- break;
- case 500:
- func_800BA808(gMsg_ID_19350, RCID_FOX);
- D_8015F924 = 1;
- break;
- case 600:
- D_80177AB0 = 5;
- gFogRed = 129;
- gFogGreen = 27;
- gFogBlue = 0;
- gFogNear = 996;
- gFogFar = 1007;
- gBgColor = 0x4081;
- D_80161A44 = 30000.0f;
- gGroundLevel = -50.0f;
- gPlayer[0].pos.x = -25995.0f;
- gPlayer[0].pos.y = 300.0f;
- gPlayer[0].pos.z = -11140.0f;
- gPlayer[0].unk_08C = 0.0f;
- gPlayer[0].unk_114 = 271.0f;
- gPlayer[0].unk_110 = gPlayer[0].unk_4D8 = gPlayer[0].unk_0E8 = gPlayer[0].unk_0E4 =
- gPlayer[0].unk_0EC = 0.0f;
- gPlayer[0].unk_12C = 150.0f;
- gPlayer[0].unk_034 = -90.0f;
- gPlayer[0].state_1C8 = PLAYERSTATE_1C8_7;
- gPlayer[0].unk_1D0 = 100;
- gPlayer[0].timer_1F8 = 240;
- gPlayer[0].unk_234 = 1;
- D_80177A48[5] = -1200.0f;
-
- func_i6_80188468();
- func_i6_80187C5C();
- gPlayer[0].unk_014 = 1.0f;
- func_800B7184(gPlayer, 1);
- func_8001C8B8(0);
- func_8001D444(0, D_800C9E90[gCurrentLevel][1], 0, 0xFF);
- Audio_PlaySfx(0x11403076, D_800C5D28, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
-
- D_80177CA4 = gHitCount;
- break;
- case 800:
- func_800BA808(gMsg_ID_19340, RCID_JAMES);
- break;
- case 1000:
- func_8001D400(0);
- break;
- case 1300:
- func_800BA808(gMsg_ID_19355, RCID_JAMES);
- break;
- case 1800:
- func_800BA808(gMsg_ID_19360, RCID_JAMES);
- break;
- }
- if (gCsFrameCount > 600) {
- Math_SmoothStepToF(&D_801779A8[gMainController], 10.0f, 1.0f, 2.0f, 0.0f);
- }
- boss->obj.pos.y = 10000.0f;
-
- if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) && !(gGameFrameCount & 3)) {
- Matrix_RotateY(gCalcMatrix, (gPlayer[0].unk_114 + gPlayer[0].unk_0E8) * M_DTOR, 0U);
- vec.x = (Rand_ZeroOne() - 0.5f) * 800.0f;
- vec.y = 600.0f;
- vec.z = (Rand_ZeroOne() * 1000.0f) + -3000.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
- func_i6_80189B00(gPlayer[0].pos.x + sp64.x, sp64.y, gPlayer[0].unk_138 + sp64.z, 1.2f);
- }
- if (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_0) {
- Matrix_RotateY(gCalcMatrix, -gPlayer[0].unk_058, 0);
- vec.x = 0.0f;
- vec.y = 0.0f;
- vec.z = -50.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp58);
- Matrix_RotateZ(gCalcMatrix, 2.0f * (Rand_ZeroOne() * M_PI), 1);
- vec.x = Rand_ZeroOne() * 50.0f + 120.0f;
- vec.y = 0.0f;
- vec.z = 0.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
- if (gCsFrameCount < 1000) {
- frameCountMask = 1;
- } else if (gCsFrameCount < 1500) {
- frameCountMask = 3;
- } else if (gCsFrameCount < 2000) {
- frameCountMask = 1;
- } else {
- frameCountMask = 1;
- }
- sp98 = 1;
- if (!(gGameFrameCount & frameCountMask)) {
- for (i = 0; i < sp98; i++) {
- func_8007797C(gPlayer[0].camEye.x + sp64.x, gPlayer[0].camEye.y + sp64.y,
- gPlayer[0].camEye.z + sp64.z, sp58.x, sp58.y, sp58.z,
- (Rand_ZeroOne() * 2.5f) + 2.5f);
- }
- }
- }
- break;
- }
- xDisplacement = boss->fwork[3] - boss->obj.pos.x;
- yDisplacement = boss->fwork[4] - boss->obj.pos.y;
- zDisplacement = boss->fwork[5] - boss->obj.pos.z;
- yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
- Math_SmoothStepToAngle(&boss->unk_078.x,
- Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement)))),
- 0.1f, boss->fwork[2], 0.0f);
- Math_SmoothStepToAngle(&boss->unk_078.y, yaw, 0.1f, boss->fwork[2], 0.0f);
- if (boss->swork[4] != 0) {
- Math_SmoothStepToAngle(&boss->obj.rot.y, Math_RadToDeg(-gPlayer[0].unk_058), 0.3f, 5.0f, 0.0f);
- } else if (boss->timer_054 == 0) {
- Math_SmoothStepToAngle(&boss->obj.rot.y, Math_RadToDeg(-gPlayer[0].unk_058), 0.3f, 1.5f, 0.0f);
- }
- Math_SmoothStepToF(boss->fwork, boss->fwork[1], 0.2f, 1.0f, 0.00001f);
- Matrix_RotateY(gCalcMatrix, boss->unk_078.y * M_DTOR, 0U);
- Matrix_RotateX(gCalcMatrix, -boss->unk_078.x * M_DTOR, 1U);
- vec.x = 0.0f;
- vec.y = 0.0f;
- vec.z = boss->fwork[0];
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &sp64);
- boss->vel.x = sp64.x;
- boss->vel.y = sp64.y;
- boss->vel.z = sp64.z - D_80177D08;
- if (boss->actionState < 20) {
- gUnkEntities28[59].unk_00 = 1;
- gUnkEntities28[59].unk_02 = 0x66;
- gUnkEntities28[59].pos.x = boss->obj.pos.x;
- gUnkEntities28[59].pos.y = boss->obj.pos.y;
- gUnkEntities28[59].pos.z = boss->obj.pos.z;
- gUnkEntities28[59].unk_10 = boss->unk_078.y + 180.0f;
- }
- gActors[10].info.unk_1C = 1.0f;
- gActors[11].info.unk_1C = 1.0f;
- if (boss->swork[5] != 0) {
- boss->swork[5]--;
- if (boss->swork[5] == 0) {
- Audio_PlaySfx(0x11032075, gActors[10].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- Audio_PlaySfx(0x11032075, gActors[11].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- Audio_PlaySfx(0x3103108B, gActors[10].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- Audio_PlaySfx(0x3103108B, gActors[11].sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- gActors[10].obj.pos.x = boss->obj.pos.x + 200.0f;
- gActors[10].obj.pos.y = boss->obj.pos.y - 200.0f;
- gActors[10].obj.pos.z = boss->obj.pos.z + 200.0f;
- gActors[10].unk_0B8 = 0;
- gActors[10].timer_0C2 = 20;
- gActors[10].info.unk_1C = 0.0f;
- gActors[11].obj.pos.x = boss->obj.pos.x - 200.0f;
- gActors[11].obj.pos.y = boss->obj.pos.y - 200.0f;
- gActors[11].obj.pos.z = boss->obj.pos.z + 200.0f;
- gActors[11].unk_0B8 = 0;
- gActors[11].timer_0C2 = 20;
- gActors[11].info.unk_1C = 0.0f;
- }
- Math_SmoothStepToF(&boss->fwork[21], boss->fwork[22], 1.0f, 6.0f, 0);
- Math_SmoothStepToF(&boss->fwork[23], boss->fwork[24], 0.3f, 0.01f, 0);
-}
-
-s32 func_i6_8018B47C(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
- Boss* boss = (Boss*) data;
-
- if (boss->fwork[21] >= 254.0f) {
- if (limbIndex == 2) {
- RCP_SetupDL(&gMasterDisp, 0x16);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, (s32) boss->fwork[25], 255, 255, 255);
- } else {
- RCP_SetupDL(&gMasterDisp, 0x17);
- }
- } else {
- RCP_SetupDL(&gMasterDisp, 0x33);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, (s32) boss->fwork[21]);
- }
- if ((limbIndex == 2) && (boss->swork[6] != 0)) {
- *dList = NULL;
- return false;
- }
- if ((limbIndex == 1) || (limbIndex == 2)) {
- Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
- Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
- Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
- Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
- if (*dList != NULL) {
- Matrix_Push(&gGfxMatrix);
- Matrix_Push(&gCalcMatrix);
- Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
- if (limbIndex == 1) {
- Matrix_RotateY(gGfxMatrix, -boss->fwork[14] * M_DTOR, 1);
- Matrix_Scale(gGfxMatrix, boss->fwork[16] + 1.0f, 1.0f, 1.0f - boss->fwork[16], 1);
- Matrix_RotateY(gGfxMatrix, boss->fwork[14] * M_DTOR, 1);
- } else {
- Matrix_RotateY(gGfxMatrix, boss->fwork[14] * 1.5f * M_DTOR, 1);
- Matrix_Scale(gGfxMatrix, 2.0f * boss->fwork[16] + 1.0f, 1.0f, 1.0f - 2.0f * boss->fwork[16], 1);
- Matrix_RotateY(gGfxMatrix, -boss->fwork[14] * 1.5f * M_DTOR, 1);
- }
- Matrix_SetGfxMtx(&gMasterDisp);
- if ((boss->swork[3] & 1) && (boss->fwork[21] >= 254.0f)) {
- RCP_SetupDL(&gMasterDisp, 0x1B);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
- }
-
- gSPDisplayList(gMasterDisp++, *dList);
- Matrix_Pop(&gGfxMatrix);
- Matrix_Pop(&gCalcMatrix);
- }
- return true;
- }
- return false;
-}
-
-extern Limb* D_600C0A4[];
-extern Gfx* D_600C2D0;
-extern Gfx* D_600C560;
-
-void func_i6_8018B8C0(Boss* boss) {
- s32 j;
- s32 i;
- f32 temp;
- s32 pad;
- Vec3f spAC;
- Vec3f spA0;
-
- if (boss->actionState != 21) {
- Matrix_RotateZ(gGfxMatrix, -(f32) gGameFrameCount * 20.0f * M_DTOR, 1);
- Matrix_Scale(gGfxMatrix, boss->fwork[23] + 1.0f, 1.0f - boss->fwork[23], 1.0f, 1);
- Matrix_RotateZ(gGfxMatrix, gGameFrameCount * 20.0f * M_DTOR, 1);
- Matrix_Scale(gGfxMatrix, boss->fwork[23] + 1.0f, 1.0f - boss->fwork[23], 1.0f, 1);
- Matrix_Scale(gGfxMatrix, boss->unk_3F8, boss->unk_3F8, boss->unk_3F8, 1);
- Animation_DrawSkeleton(0, D_600C0A4, boss->vwork, func_i6_8018B47C, NULL, boss, &gIdentityMatrix);
- if (boss->fwork[21] >= 254) {
- RCP_SetupDL(&gMasterDisp, 0x36);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 64, 64, 255);
- } else {
- RCP_SetupDL(&gMasterDisp, 0x46);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 64, 64, (s32) boss->fwork[21]);
- }
- gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
- Matrix_Translate(gGfxMatrix, 0.0f, -16.0f, 0.0f, 1);
- Matrix_Scale(gGfxMatrix, 0.3f, 0.6f, 0.3f, 1);
-
- for (i = 0; i < 30; i++) {
- Matrix_Push(&gGfxMatrix);
- Matrix_RotateY(gCalcMatrix, i * 50.0f * M_DTOR, 0U);
- spAC.x = 0.0f;
- spAC.y = 0.0f;
- spAC.z = i * 0.8f;
- Matrix_MultVec3f(gCalcMatrix, &spAC, &spA0);
- Matrix_Translate(gGfxMatrix, spA0.x, 10.0f, spA0.z, 1);
- Matrix_RotateY(gGfxMatrix, M_DTOR * -boss->obj.rot.y - gPlayer[0].unk_058, 1);
-
- for (j = 0; j < 10; j++) {
- Matrix_Translate(gGfxMatrix, 0.0f, -10.0f, 0.0f, 1);
- temp = __sinf(((s32) boss->fwork[19] * (i * 10 + j) + gGameFrameCount * 5) * M_DTOR) * boss->fwork[10];
- Matrix_RotateZ(gGfxMatrix, (boss->fwork[18] + temp) * M_DTOR, 1);
- Matrix_RotateX(gGfxMatrix, boss->fwork[17] * M_DTOR, 1);
- Matrix_Push(&gGfxMatrix);
- Matrix_Translate(gGfxMatrix, 0.0f, -5.0f, 0.0f, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- if (j == 9) {
- gSPDisplayList(gMasterDisp++, &D_600C2D0);
- } else {
- gSPDisplayList(gMasterDisp++, &D_600C560);
- }
- Matrix_Pop(&gGfxMatrix);
- }
- Matrix_Pop(&gGfxMatrix);
- }
- }
-}
-
-extern Vtx* D_C017598;
-extern Vtx* D_C038FE8;
-
-void func_i6_8018BDD8(void) {
s32 i;
- f32 spC0[17];
- f32 sp7C[17];
- s32 temp_lo;
- Vtx* sp74;
- Vtx* sp70;
-
- sp74 = SEGMENTED_TO_VIRTUAL(&D_C038FE8);
- sp70 = SEGMENTED_TO_VIRTUAL(&D_C017598);
-
- for (i = 0; i < 17; i++) {
- if (i == 0 || i == 16) {
- spC0[i] = 0.0f;
- sp7C[i] = 0.0f;
- } else if (gLevelMode == LEVELMODE_ALL_RANGE) {
- spC0[i] = (Rand_ZeroOne() - 0.5f) * 120.0f;
- sp7C[i] = (Rand_ZeroOne() - 0.5f) * 120.0f;
- } else {
- spC0[i] = (Rand_ZeroOne() - 0.5f) * 30.0f;
- sp7C[i] = (Rand_ZeroOne() - 0.5f) * 30.0f;
- }
- }
-
- for (i = 0; i < 34; i++) {
- temp_lo = (sp74[i].v.ob[2] + 200) / 25;
- sp70[i].v.ob[0] = sp74[i].v.ob[0] + spC0[temp_lo];
- sp70[i].v.ob[1] = sp74[i].v.ob[1] + sp7C[temp_lo];
- }
- if (gBossActive != 0) {
- Math_SmoothStepToF(&D_i6_801A7F58, 0.0f, 1.0f, 10.0f, 0.0f);
- } else {
- Math_SmoothStepToF(&D_i6_801A7F58, D_i6_801A7F60, 1.0f, 1.0f, 0.0f);
- }
-
- D_i6_801A7F68 += D_i6_801A7F70;
- Math_SmoothStepToF(&D_i6_801A7F70, D_i6_801A7F78, 1.0f, 0.1f, 0.0f);
-}
-
-void func_i6_8018C390(Player* player) {
-
- player->unk_2B4 = 1;
- player->unk_280 = 0;
- switch (player->unk_1D0) {
- case 2:
- case 3:
- break;
+ switch (actor->unk_0B8) {
case 0:
- Math_SmoothStepToF(&player->pos.x, gBosses->obj.pos.x, 0.5f, 30.0f, 0);
- Math_SmoothStepToF(&player->pos.y, gBosses->obj.pos.y - 150.0f, 0.5f, 30.0f, 0);
- Math_SmoothStepToF(&player->pos.z, gBosses->obj.pos.z - 100.0f, 0.5f, 60.0f, 0);
- D_80177D20 = player->unk_144 = -player->pos.z;
- Math_SmoothStepToF(&player->camEye.z, 2000.0f, 0.05f, 20.0f, 0);
- Math_SmoothStepToF(&player->camEye.x, 0.0f, 0.05f, 10.0f, 0);
- Math_SmoothStepToF(&player->camEye.y, 0.0f, 0.05f, 10.0f, 0);
- Math_SmoothStepToF(&player->camAt.x, 0.0f, 0.05f, 10.0f, 0);
- Math_SmoothStepToF(&player->camAt.y, 0.0f, 0.05f, 10.0f, 0);
- Math_SmoothStepToF(&player->camAt.z, 100.0f, 0.05f, 10.0f, 0.0f);
- break;
- case 1:
- player->unk_0E4 += 15.0f;
+ D_8015F928 = 0;
+ D_8015F908 = 0;
- if (player->unk_0E4 > 180.0f) {
- player->unk_0E4 -= 360.0f;
+ for (i = 0; i < 6; i++) {
+ D_80177CF0[i] = 1;
+ D_80177CD0[i] = 1;
}
- player->unk_0E8 += 9.0f;
- if (player->unk_0E8 > 180.0f) {
- player->unk_0E8 -= 360.0f;
- }
- Math_SmoothStepToF(&player->camEye.z, 400.0f, 0.05f, 20.0f, 0.0f);
- if (player->timer_1F8 != 0) {
- if (gControllerPress[gMainController].button != 0) {
- player->timer_1F8--;
- }
- }
- if (player->timer_1F8 == 0) {
- player->state_1C8 = PLAYERSTATE_1C8_3;
- player->unk_014 = 0.0f;
- player->unk_018 = 0.0f;
- }
- break;
- }
- player->unk_138 = player->pos.z + player->unk_08C;
- func_800A46A0(player);
-}
-void func_i6_8018C660(Effect* effect, f32 xPos, f32 yPos, f32 zPos, s32 arg4) {
- Effect_Initialize(effect);
- effect->obj.status = OBJ_ACTIVE;
- effect->obj.id = OBJ_EFFECT_396;
- effect->obj.pos.x = xPos;
- effect->obj.pos.y = yPos;
- effect->obj.pos.z = zPos;
- effect->unk_4C = arg4;
- effect->scale2 = (Rand_ZeroOne() * 2.5f) + 5.0f;
- effect->unk_60.x = (Rand_ZeroOne() - 0.5f) * 20.0f;
- effect->unk_60.y = (Rand_ZeroOne() - 0.5f) * 20.0f;
- Object_SetInfo(&effect->info, effect->obj.id);
-}
-
-void func_i6_8018C734(f32 xPos, f32 yPos, f32 zPos, s32 arg3) {
- s32 i;
-
- for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
- if (gEffects[i].obj.status == OBJ_FREE) {
- func_i6_8018C660(&gEffects[i], xPos, yPos, zPos, arg3);
- break;
- }
- }
-}
-
-void func_i6_8018C7A0(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, s32 arg7) {
- Effect_Initialize(effect);
- effect->obj.status = OBJ_ACTIVE;
- effect->obj.id = OBJ_EFFECT_396;
- effect->obj.pos.x = xPos;
- effect->obj.pos.y = yPos;
- effect->obj.pos.z = zPos;
- effect->vel.x = xVel;
- effect->vel.y = yVel;
- effect->vel.z = zVel;
- effect->unk_4E = 1;
- effect->unk_4C = arg7;
- if (arg7 < 8) {
- effect->scale2 = (Rand_ZeroOne() * 2.5f) + 5.0f;
- }
- effect->obj.rot.x = Rand_ZeroOne() * 360.0f;
- effect->obj.rot.y = Rand_ZeroOne() * 360.0f;
- effect->unk_60.x = (Rand_ZeroOne() * 10.0f) + 10.0f;
- effect->unk_60.y = (Rand_ZeroOne() * 10.0f) + 10.0f;
- Object_SetInfo(&effect->info, effect->obj.id);
- effect->info.unk_10 = 100.0f;
-}
-
-void func_i6_8018C8D4(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, s32 arg6) {
- s32 i;
-
- for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
- if (gEffects[i].obj.status == OBJ_FREE) {
- func_i6_8018C7A0(&gEffects[i], xPos, yPos, zPos, xVel, yVel, zVel, arg6);
- break;
- }
- }
-}
-
-void func_i6_8018C958(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale) {
- Effect_Initialize(effect);
- effect->obj.status = OBJ_ACTIVE;
- effect->obj.id = OBJ_EFFECT_396;
- effect->unk_4E = 10;
- effect->obj.pos.x = xPos;
- effect->obj.pos.y = yPos;
- effect->obj.pos.z = zPos;
- effect->vel.x = xVel;
- effect->vel.y = yVel;
- effect->vel.z = zVel;
- effect->scale1 = scale;
- effect->scale2 = scale * 0.1f;
- effect->unk_44 = 100;
- effect->obj.rot.z = Rand_ZeroOne() * 360.0f;
- effect->unk_60.z = (Rand_ZeroOne() - 0.5f) * 20.0f;
- Object_SetInfo(&effect->info, effect->obj.id);
- effect->info.unk_14 = 1;
- effect->info.unk_10 = 100.0f;
-}
-
-void func_i6_8018CA50(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale) {
- s32 i;
-
- for (i = ARRAY_COUNT(gEffects) - 1; i >= 0; i--) {
- if (gEffects[i].obj.status == OBJ_FREE) {
- func_i6_8018C958(&gEffects[i], xPos, yPos, zPos, xVel, yVel, zVel, scale);
- break;
- }
- }
-}
-
-void func_i6_8018CAD4(Effect* effect) {
- s32 i;
- Item* item;
- Vec3f vec;
- Vec3f vel;
- f32 effectXpos;
- f32 effectYpos;
- f32 effectZpos;
- f32 pitch;
- f32 yaw;
- f32 sp40;
- f32 sp3C;
- f32 sp38;
- f32 sp34;
-
- effect->obj.rot.x += effect->unk_60.x;
- effect->obj.rot.y += effect->unk_60.y;
- switch (effect->unk_4E) {
- case 0:
- if (gBosses[0].actionState == 17) {
- Math_SmoothStepToF(&effect->obj.pos.x, gBosses[0].obj.pos.x, 0.03f, 10.0f, 0);
- Math_SmoothStepToF(&effect->obj.pos.y, gBosses[0].obj.pos.y - 200.0f, 0.03f, 10.0f, 0);
- effectXpos = effect->obj.pos.x;
- effectYpos = effect->obj.pos.y;
- effectZpos = effect->obj.pos.z;
- sp3C = gBosses[0].obj.pos.x;
- sp38 = gBosses[0].obj.pos.y - 150.0f;
- sp34 = gBosses[0].obj.pos.z - 100.0f;
- yaw = Math_Atan2F(sp3C - effectXpos, sp34 - effectZpos);
- sp40 = sqrtf(SQ(sp3C - effectXpos) + SQ(sp34 - effectZpos));
- pitch = -Math_Atan2F(sp38 - effectYpos, sp40);
- Matrix_RotateY(gCalcMatrix, yaw, 0);
- Matrix_RotateX(gCalcMatrix, pitch, 1);
- vec.x = 0.0f;
- vec.y = 0.0f;
- vec.z = 30.0f;
- Matrix_MultVec3f(gCalcMatrix, &vec, &vel);
- effect->vel.x = vel.x;
- effect->vel.y = vel.y;
- effect->vel.z = vel.z - D_80177D08;
- if ((fabsf(effect->obj.pos.x - gBosses[0].obj.pos.x) <= 100.0f) &&
- (fabsf(effect->obj.pos.z - (gBosses[0].obj.pos.z - 100.0f)) <= 100.0f)) {
- Object_Kill(&effect->obj, effect->sfxPos);
- }
+ if (player->state_1C8 == PLAYERSTATE_1C8_3) {
+ actor->unk_0B8 = 2;
+ player->pos.x = 0.0f;
+ player->pos.z = 8000.0f;
+ player->pos.y = 670.0f;
+ D_800C9B4C = 120;
+ D_8015F908 = 1000;
} else {
- effect->info.unk_10 = 100.0f;
- Math_SmoothStepToF(&effect->vel.x, 0.0f, 0.05f, 1.0f, 0);
- Math_SmoothStepToF(&effect->vel.y, 0.0f, 0.05f, 1.0f, 0);
- Math_SmoothStepToF(&effect->vel.z, 70.0f, 0.05f, 2.0f, 0);
- func_8007A774(&gPlayer[0], effect, 100.0f);
- if (effect->unk_44 != 0) {
- func_8007D0E0(effect->obj.pos.x, effect->obj.pos.y, effect->obj.pos.z, 10.0f);
- func_8007A6F0(&effect->obj.pos, 0x2903A008);
- Object_Kill(&effect->obj, effect->sfxPos);
- }
- }
- effect->unk_44 = 0;
- break;
- case 1:
- func_8007A774(&gPlayer[0], effect, 100.0f);
- if (effect->unk_44 != 0) {
- func_8007D0E0(effect->obj.pos.x, effect->obj.pos.y, effect->obj.pos.z, 10.0f);
- func_8007A6F0(&effect->obj.pos, 0x2903A008);
- Object_Kill(&effect->obj, effect->sfxPos);
- if (Rand_ZeroOne() < 0.1f) {
- item = gItems;
- for (i = 0; i < 20; i++, item++) {
- if (item->obj.status == OBJ_FREE) {
- Item_Initialize(item);
- item->obj.status = OBJ_INIT;
- if (Rand_ZeroOne() < 0.5f) {
- item->obj.id = OBJ_ITEM_SILVER_RING;
- } else {
- item->obj.id = OBJ_ITEM_BOMB;
- }
- item->obj.pos.x = effect->obj.pos.x;
- item->obj.pos.y = effect->obj.pos.y;
- item->obj.pos.z = effect->obj.pos.z;
- item->timer_4A = 8;
- Object_SetInfo(&item->info, item->obj.id);
- item->unk_50 = 90.0f;
- break;
- }
- }
+ D_800C9B4C = 320;
+ D_8015F908 = 1200;
+ actor->unk_0B8 = 1;
+ player->pos.x = 0.0f;
+ player->pos.z = 16000.0f;
+ player->pos.y = 4350.0f;
+ player->unk_0E4 = -20.0f;
+ player->unk_114 = 0.0f;
+ actor->timer_0BC = 210;
+ for (otherActor = &gActors[1], i = 1; i < 4; i++, otherActor++) {
+ otherActor->obj.pos.x = D_i6_801A68B0[i - 1].x;
+ otherActor->obj.pos.y = D_i6_801A68B0[i - 1].y + 750.f;
+ otherActor->obj.pos.z = D_i6_801A68B0[i - 1].z;
+ otherActor->obj.rot.z = D_i6_801A68F8[i - 1];
+ otherActor->unk_0F4.x = 340.0f;
}
- }
- break;
- case 10:
- effect->obj.rot.z += effect->unk_60.z;
- Math_SmoothStepToF(&effect->scale2, effect->scale1, 0.05f, 0.3f, 0);
- Math_SmoothStepToF(&effect->vel.y, 0.0f, 0.05f, 0.5f, 0.0f);
- Math_SmoothStepToF(&effect->vel.x, 0.0f, 0.05f, 0.5f, 0.0f);
- effect->unk_44 -= 10;
- if (effect->unk_44 < 0) {
- Object_Kill(&effect->obj, effect->sfxPos);
- }
- break;
- }
-}
-
-extern Gfx* D_2010A30;
-static Gfx* D_i6_801A6790[10] = {
- D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_C001880, D_3016660, D_3015D80,
-};
-
-void func_i6_8018CF98(Effect* effect) {
- if (effect->unk_4E == 10) {
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, effect->unk_44);
- Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, &D_2010A30);
- } else {
- RCP_SetupDL(&gMasterDisp, 0x1D);
- if (effect->unk_4C < 8) {
- Matrix_Scale(gGfxMatrix, effect->scale2, effect->scale2, effect->scale2, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- }
- gSPDisplayList(gMasterDisp++, D_i6_801A6790[effect->unk_4C]);
- RCP_SetupDL(&gMasterDisp, 0x40);
- }
-}
-
-void func_i6_8018D0D8(Boss* boss) {
- if ((gPlayer[0].timer_498 == 0) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) &&
- (fabsf(boss->vwork[10].x - gPlayer[0].pos.x) < 700.0f) &&
- (fabsf(boss->vwork[10].y - gPlayer[0].pos.y) < 700.0f)) {
- Player_ApplyDamage(&gPlayer[0], 0, 40);
- }
-}
-
-void func_i6_8018D16C(Boss* boss) {
- func_8001D400(0x18);
- D_i6_801A7F5C = D_i6_801A7F64 = D_i6_801A7F6C = D_i6_801A7F74 = D_i6_801A7F7C = D_i6_801A8430 = 0.0f;
- D_800C9C30 = 0.0f;
- boss->health = 100;
- boss->fwork[18] = 1.0f;
- boss->fwork[17] = 1.0f;
- gLight1R = 0xFF;
- gLight1G = 80;
- gLight1B = 20;
- gAmbientR = 1;
- gAmbientG = 0;
- gAmbientB = 20;
- boss->timer_058 = 10;
- boss->swork[4] = boss->swork[5] = 200;
- boss->swork[6] = 100;
- gBossActive = 1;
- D_80177AB0 = 1;
- boss->info.hitbox[16] = 200.0f;
- boss->info.hitbox[22] = 200.0f;
- func_8001D444(0, 0x8021, 0, 0);
-}
-
-void func_i6_8018D2B0(Boss* boss) {
- s32 i;
- Vec3f sp68;
-
- if ((boss->swork[5] < 0) && (boss->swork[4] < 0)) {
- if ((boss->dmgType != DMG_NONE) && (boss->dmgPart == 0 || boss->dmgPart == 1)) {
- boss->dmgType = DMG_NONE;
- if (boss->actionState < 12) {
- boss->health -= boss->damage;
- boss->timer_05C = 20;
- if ((boss->actionState == 9) || (boss->actionState == 10)) {
- if (boss->health <= 0) {
- D_Timer_80161A60 = 8;
- Audio_PlaySfx(0x2940D09A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- Audio_PlaySfx(0x31009063, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- Audio_PlaySfx(0x19403070, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- func_8001A55C(boss->sfxPos, 0x11030073);
- func_800182F4(0x100100FF);
- func_800182F4(0x110100FF);
- boss->actionState = 31;
- boss->timer_050 = 200;
- gPlayer[0].state_1C8 = PLAYERSTATE_1C8_7;
- gPlayer[0].unk_1D0 = 0;
- } else if (boss->health < 50) {
- Audio_PlaySfx(0x2943500F, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- } else {
- Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- } else if (boss->health <= 0) {
- Audio_PlaySfx(0x19403070, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- func_800182F4(0x100100FF);
- func_800182F4(0x110100FF);
- if (D_8017827C == 0) {
- boss->actionState = 30;
- } else {
- boss->actionState = 32;
- }
- boss->fwork[9] = 0.0f;
- boss->unk_04C = 0;
- gCsFrameCount = 0;
- boss->timer_05C = 100;
- } else {
- Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
+ D_80178340 = D_80178358 = 255;
}
- }
- } else if (boss->dmgType != DMG_NONE) {
- switch (boss->dmgPart) {
- case 0:
- if (boss->actionState < 11) {
- boss->swork[6] -= boss->damage;
- boss->swork[0] = 30;
- Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- if (boss->swork[6] <= 0) {
- boss->swork[6] = 100;
- boss->actionState = 12;
- boss->timer_050 = 120;
- boss->unk_04C = 0;
- boss->fwork[9] = 0.0f;
- Audio_PlaySfx(0x1940306F, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- }
- break;
- case 1:
- if (boss->actionState < 12) {
- boss->swork[6] -= boss->damage;
- boss->swork[1] = 30;
- Audio_PlaySfx(0x29034003, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- if (boss->swork[6] <= 0) {
- boss->swork[6] = 100;
- boss->actionState = 13;
- boss->timer_050 = 120;
- boss->unk_04C = 0;
- boss->fwork[9] = 0.0f;
- Audio_PlaySfx(0x1940306F, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- }
- break;
- case 2:
- case 3:
- if (boss->swork[7] == 0) {
- boss->swork[boss->dmgPart] = 30;
- if (boss->dmgPart == 2) {
- sp68.x = boss->vwork[0].x;
- sp68.y = boss->vwork[0].y;
- sp68.z = boss->vwork[0].z;
- boss->swork[4] -= boss->damage;
- if (boss->swork[4] < 0) {
- boss->info.hitbox[16] = 0.0f;
- func_8007BFFC(boss->vwork[0].x, boss->vwork[0].y, boss->vwork[0].z, 0.0f, 0.0f, 0.0f, 20.0f,
- 15);
-
- for (i = 0; i < 30; i++) {
- func_800794CC(boss->vwork[0].x + ((Rand_ZeroOne() - 0.5f) * 500.0f),
- boss->vwork[0].y + ((Rand_ZeroOne() - 0.5f) * 500.0f), boss->vwork[0].z,
- Rand_ZeroOne() + 1.0f);
- }
- func_8007B344(boss->vwork[0].x, boss->vwork[0].y, boss->vwork[0].z, 20.0f, 5);
- func_8007A6F0(&sp68, 0x2903B009);
- } else {
- func_8007A6F0(&sp68, 0x29034003);
- }
- } else {
- sp68.x = boss->vwork[1].x;
- sp68.y = boss->vwork[1].y;
- sp68.z = boss->vwork[1].z;
- boss->swork[5] -= boss->damage;
- if (boss->swork[5] < 0) {
- boss->info.hitbox[22] = 0.0f;
- func_8007BFFC(boss->vwork[1].x, boss->vwork[1].y, boss->vwork[1].z, 0.0f, 0.0f, 0.0f, 20.0f,
- 15);
-
- for (i = 0; i < 30; i++) {
- func_800794CC(boss->vwork[1].x + ((Rand_ZeroOne() - 0.5f) * 500.0f),
- boss->vwork[1].y + ((Rand_ZeroOne() - 0.5f) * 500.0f), boss->vwork[1].z,
- Rand_ZeroOne() + 1.0f);
- }
- func_8007B344(boss->vwork[1].x, boss->vwork[1].y, boss->vwork[1].z, 20.0f, 5);
- func_8007A6F0(&sp68, 0x2903B009);
- } else {
- func_8007A6F0(&sp68, 0x29034003);
- }
- }
- }
- break;
- }
- boss->dmgType = DMG_NONE;
- }
-}
-
-void func_i6_8018D9C0(Boss* boss) {
-
- switch (boss->actionState) {
- case 2:
- boss->actionState = 3;
- break;
- case 3:
- boss->actionState = 4;
- break;
- case 4:
- boss->actionState = 5;
- boss->timer_050 = 30;
- break;
- case 5:
- boss->actionState = 6;
- boss->timer_050 = 40;
- break;
- case 6:
- boss->actionState = 17;
- boss->timer_050 = 180;
- boss->fwork[16] = 0.0f;
- break;
- case 12:
- case 13:
- case 14:
- boss->actionState = 7;
- boss->timer_050 = 150;
- break;
- default:
- boss->actionState = 2;
- break;
- }
- boss->fwork[9] = 0.0f;
- boss->unk_04C = 0;
- boss->fwork[1] = 0.0f;
- boss->fwork[4] = 0.0f;
- boss->fwork[7] = 0.0f;
-}
-
-void func_i6_8018DA94(Boss* boss, Vec3f* arg1) {
- s32 i;
-
- func_8007BFFC(arg1->x, arg1->y, arg1->z, 0.0f, 0.0f, 0.0f, 10.0f, 10);
- for (i = 0; i < 7; i++) {
- func_800794CC(((Rand_ZeroOne() - 0.5f) * 200.0f) + arg1->x, ((Rand_ZeroOne() - 0.5f) * 200.0f) + arg1->y,
- arg1->z, (Rand_ZeroOne() * 0.5f) + 1.0f);
- }
- func_8007B344(arg1->x, arg1->y, arg1->z, 10.0f, 5);
- Audio_PlaySfx(0x2903B009, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
-}
-
-extern AnimationHeader D_C00208C;
-extern AnimationHeader D_C002654;
-extern AnimationHeader D_C002B08;
-extern AnimationHeader D_C006F08;
-extern AnimationHeader D_C00DE48;
-extern AnimationHeader D_C00E598;
-extern AnimationHeader D_C017050;
-extern AnimationHeader D_C017430;
-extern AnimationHeader D_C018BC4;
-extern AnimationHeader D_C023B54;
-extern AnimationHeader D_C0240D0;
-extern AnimationHeader D_C025C00;
-extern AnimationHeader D_C029F74;
-extern AnimationHeader D_C02E494;
-extern AnimationHeader D_C02EDA0;
-extern AnimationHeader D_C030244;
-extern AnimationHeader D_C033780;
-extern AnimationHeader D_C033D98;
-
-static f32 D_i6_801A67B8[] = { 0.0f, 0.0f, 0.0f };
-
-void func_i6_8018DBF0(Boss* boss) {
- s32 i;
- s32 frameCountMask;
- Vec3f spD0[100];
- f32 xDisplacement;
- f32 yDisplacement;
- f32 zDisplacement;
- Effect* effect;
- PlayerShot* playerShot;
- Boss* boss1;
- Player* player;
- f32 yaw;
- f32 pitch;
- s16 limbCount;
- s32 initialActionState;
- s32 pad;
-
- player = &gPlayer[0];
- gBossFrameCount++;
-
- initialActionState = boss->actionState;
-
- func_i6_801876FC();
- gAmbientR = 10;
- gAmbientG = 0;
- gAmbientB = 20;
- D_8017812C = 0;
- boss->fwork[19] += 5.0f;
- if (boss->swork[9] != 0) {
- boss->swork[9]--;
- Math_SmoothStepToF(&boss->fwork[17], 1.5f, 0.7f, 0.4f, 0);
- } else {
- Math_SmoothStepToF(&boss->fwork[17], 1.0f, 0.2f, 0.3f, 0);
- }
-
- boss->fwork[18] = boss->fwork[17];
- if (boss->swork[10] != 0) {
- boss->swork[10]--;
- if (boss->swork[10] < 20) {
- frameCountMask = 0x1F;
- } else if (boss->swork[10] < 30) {
- frameCountMask = 7;
- } else if (boss->swork[10] < 40) {
- frameCountMask = 1;
- } else {
- frameCountMask = 0;
- }
- if (!(gGameFrameCount & frameCountMask)) {
- func_i6_8018CA50(boss->vwork[6].x, boss->vwork[6].y, boss->vwork[6].z, 0.0f, -30.0f, 0.0f, 30.0f);
- func_i6_8018CA50(boss->vwork[7].x, boss->vwork[7].y, boss->vwork[7].z, 0.0f, -30.0f, 0.0f, 30.0f);
- func_i6_8018CA50(boss->vwork[8].x, boss->vwork[8].y, boss->vwork[8].z, -30.0f, 0.0f, 0.0f, 30.0f);
- func_i6_8018CA50(boss->vwork[9].x, boss->vwork[9].y, boss->vwork[9].z, 30.0f, 0.0f, 0.0f, 30.0f);
- }
- }
- Math_SmoothStepToF(&boss->fwork[20], 0.0f, 1.0f, 0.1f, 0.01f);
- Math_SmoothStepToF(&boss->fwork[21], 0.0f, 1.0f, 0.05f, 0.001f);
- func_i6_8018D2B0(boss);
- boss->swork[7] = 0;
- boss->fwork[14] = boss->fwork[15] = 0.0f;
- if (boss->actionState >= 2) {
- gBlurAlpha = 0x80;
- }
-
- for (i = 0; i < 4; i++) {
- if (boss->swork[i] > 0) {
- boss->swork[i]--;
- }
- }
- Math_SmoothStepToF(&boss->obj.pos.z, gPlayer[0].pos.z + boss->fwork[6], boss->fwork[8], boss->fwork[7], 0);
- Math_SmoothStepToF(&boss->obj.pos.x, boss->fwork[0], boss->fwork[2], boss->fwork[1], 0);
- Math_SmoothStepToF(&boss->obj.pos.y, boss->fwork[3], boss->fwork[5], boss->fwork[4], 0);
- Math_SmoothStepToF(&boss->fwork[11], 0.0f, 0.1f, 2.0f, 0);
- Math_SmoothStepToF(&boss->fwork[12], 0.0f, 0.1f, 2.0f, 0);
- Math_SmoothStepToF(&boss->fwork[13], 0.0f, 0.1f, 2.0f, 0);
- if (player->unk_234 != 0) {
- xDisplacement = gPlayer[0].pos.x - boss->vwork[2].x;
- yDisplacement = gPlayer[0].pos.y - boss->vwork[2].y;
- zDisplacement = gPlayer[0].unk_138 - boss->vwork[2].z;
- yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
- pitch = Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement))));
-
- if ((yaw > 30.0f) && (yaw < 180.0f)) {
- yaw = 30.0f;
- }
- if ((yaw < 330.0f) && (yaw > 180.0f)) {
- yaw = 330.0f;
- }
- if ((pitch > 30.0f) && (pitch < 180.0f)) {
- pitch = 30.0f;
- }
- if ((pitch < 330.0f) && (pitch > 180.0f)) {
- pitch = 330.0f;
- }
- } else {
- yaw = 0.0f;
- pitch = 345.0f;
- }
- Math_SmoothStepToAngle(&boss->vwork[4].x, pitch, 0.5f, 5.0f, 0);
- Math_SmoothStepToAngle(&boss->vwork[4].y, yaw, 0.5f, 5.0f, 0);
- if (player->unk_234 != 0) {
- xDisplacement = gPlayer[0].pos.x - boss->vwork[3].x;
- yDisplacement = gPlayer[0].pos.y - boss->vwork[3].y;
- zDisplacement = gPlayer[0].unk_138 - boss->vwork[3].z;
- yaw = Math_RadToDeg(Math_Atan2F(xDisplacement, zDisplacement));
- pitch = Math_RadToDeg(Math_Atan2F(yDisplacement, sqrtf(SQ(xDisplacement) + SQ(zDisplacement))));
- if ((yaw > 30.0f) && (yaw < 180.0f)) {
- yaw = 30.0f;
- }
- if ((yaw < 330.0f) && (yaw > 180.0f)) {
- yaw = 330.0f;
- }
- if ((pitch > 30.0f) && (pitch < 180.0f)) {
- pitch = 30.0f;
- }
- if ((pitch < 330.0f) && (pitch > 180.0f)) {
- pitch = 330.0f;
- }
- } else {
- yaw = 0.0f;
- pitch = 345.0f;
- }
- Math_SmoothStepToAngle(&boss->vwork[5].x, pitch, 0.5f, 5.0f, 0);
- Math_SmoothStepToAngle(&boss->vwork[5].y, yaw, 0.5f, 5.0f, 0);
- switch (boss->actionState) {
- case 0:
- boss->fwork[8] = 0.1f;
- boss->fwork[7] = 50.0f;
- boss->actionState = 1;
- boss->timer_050 = 60;
- boss->timer_052 = 80;
- boss->timer_054 = 150;
- boss->fwork[9] = 1.0f;
+ func_800B63BC(player, 1);
/* fallthrough */
case 1:
- boss->timer_05A = 100;
- if (boss->timer_054 == 65) {
- Audio_PlaySfx(0x1940306E, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if (boss->timer_050 != 0) {
- boss->fwork[6] = -3000.0f;
- } else {
- boss->fwork[6] = -1000.0f;
- Math_SmoothStepToF(&D_i6_801A7F5C, gLight1R, 1.0f, 4.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F64, gLight1G, 1.0f, 3.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F6C, gLight1B, 1.0f, 3.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F74, gAmbientR, 1.0f, 2.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F7C, gAmbientG, 1.0f, 2.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A8430, gAmbientB, 1.0f, 2.0f, 0.0f);
- }
- Math_SmoothStepToF(&D_800C9C30, 32.0f, 1.0f, 0.5f, 0.0f);
- Math_SmoothStepToF(&player->unk_034, 0.0f, 0.2f, 3.0f, 0);
- boss->fwork[8] = 0.1f;
- Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 10.0f, 0);
- if (boss->timer_052 == 0) {
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C002B08)) {
- boss->unk_04C = 0;
- }
- limbCount = Animation_GetFrameData(&D_C002B08, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- } else {
- if (boss->timer_052 < 16) {
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C033D98)) {
- boss->unk_04C = Animation_GetFrameCount(&D_C033D98) - 1;
- }
- }
- limbCount = Animation_GetFrameData(&D_C033D98, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- if (boss->timer_052 == 1) {
- boss->unk_04C = 0;
- }
- }
- Math_SmoothStepToF(&boss->fwork[9], 0.2f, 1.0f, 0.01f, 0);
- if (boss->timer_054 == 0) {
- boss->actionState = 2;
- boss->unk_04C = 0;
- boss->fwork[7] = boss->fwork[9] = 0.0f;
- boss->vel.z = -20.0f;
- }
- break;
- case 2:
- boss->fwork[6] = -4000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 5.0f, 0);
- boss->fwork[0] = 0.0f;
- boss->fwork[2] = 0.05f;
- boss->fwork[3] = 0.0f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 10.0f, 1.0f, 0.5f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 10.0f, 1.0f, 0.5f, 0);
- Math_SmoothStepToF(&boss->fwork[9], 0.7f, 1.0f, 0.005f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C033780)) {
- func_i6_8018D9C0(boss);
- }
- limbCount = Animation_GetFrameData(&D_C033780, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- break;
- case 3:
- if (boss->swork[4] < 0) {
- func_i6_8018D9C0(boss);
- } else {
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y + 1000.0f;
- if (boss->unk_04C == 60) {
- Audio_PlaySfx(0x1940306A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if (boss->unk_04C > 60) {
- if (boss->unk_04C == 76) {
- boss->fwork[7] = 0.0f;
- }
- if (boss->unk_04C > 76) {
- boss->fwork[6] = -2500.0f;
- boss->fwork[8] = 0.1f;
- Math_SmoothStepToF(&boss->fwork[7], 100.0f, 1.0f, 10.0f, 0);
- } else {
- boss->fwork[6] = -1500.0f;
- boss->fwork[8] = 0.3f;
- Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 40.0f, 0);
- }
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 2.0f, 1.0f, 0.5f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 2.0f, 1.0f, 0.5f, 0);
- boss->swork[7] = 1;
- boss->fwork[14] = -100.0f;
- boss->fwork[15] = -50.0f;
- } else {
- boss->fwork[6] = -4000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 2.0f, 0);
- boss->fwork[2] = 0.1f;
- boss->fwork[5] = 0.1f;
- boss->fwork[14] = 50.0f;
- Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
- }
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C029F74)) {
- func_i6_8018D9C0(boss);
- }
- limbCount = Animation_GetFrameData(&D_C029F74, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- }
- break;
- case 4:
- if (boss->swork[4] < 0) {
- func_i6_8018D9C0(boss);
- } else {
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y;
- if (boss->unk_04C == 55) {
- Audio_PlaySfx(0x1940306A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if (boss->unk_04C > 55) {
- boss->fwork[6] = -1500.0f;
- boss->fwork[8] = 0.3f;
- Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 40.0f, 0);
- boss->swork[7] = 1;
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- boss->fwork[14] = -100.0f;
- Math_SmoothStepToF(&boss->fwork[1], 2.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 2.0f, 1.0f, 1.0f, 0);
- } else {
- boss->fwork[6] = -4000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 2.0f, 0);
- boss->fwork[2] = 0.1f;
- boss->fwork[5] = 0.1f;
- boss->fwork[14] = 50.0f;
- Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 1.0f, 0);
- }
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C02E494)) {
- func_i6_8018D9C0(boss);
- }
- limbCount = Animation_GetFrameData(&D_C02E494, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- }
- break;
- case 5:
- if (boss->swork[5] < 0) {
- func_i6_8018D9C0(boss);
- } else {
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y + 500.0f;
- if (boss->timer_050 != 0) {
- boss->fwork[6] = -4000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 30.0f, 1.0f, 5.0f, 0);
- boss->fwork[2] = 0.1f;
- boss->fwork[5] = 0.1f;
- Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 2.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 2.0f, 0);
- } else {
- boss->unk_04C++;
- boss->fwork[6] = -1400.0f;
- boss->fwork[8] = 0.2f;
- Math_SmoothStepToF(&boss->fwork[7], 200.0f, 1.0f, 40.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 2.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 2.0f, 1.0f, 1.0f, 0);
- if (boss->unk_04C == 5) {
- Audio_PlaySfx(0x1940306B, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- boss->swork[7] = 1;
- boss->fwork[14] = 100.0f;
- }
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C030244)) {
- func_i6_8018D9C0(boss);
- }
- limbCount = Animation_GetFrameData(&D_C030244, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- }
- break;
- case 6:
- if ((boss->swork[4] < 0) || (boss->swork[5] < 0)) {
- func_i6_8018D9C0(boss);
- } else {
- if (boss->timer_050 == 1) {
- Audio_PlaySfx(0x1940306C, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if (boss->timer_050 != 0) {
- boss->fwork[6] = -4000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 40.0f, 1.0f, 3.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 1.0f, 0);
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y + 300.0f;
- } else {
- boss->unk_04C++;
- boss->fwork[6] = -2000.0f;
- boss->fwork[8] = 0.2f;
- Math_SmoothStepToF(&boss->fwork[7], 50.0f, 1.0f, 10.0f, 0);
- boss->fwork[2] = 0.1f;
- boss->fwork[5] = 0.1f;
- Math_SmoothStepToF(&boss->fwork[1], 10.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 10.0f, 1.0f, 1.0f, 0);
- boss->swork[7] = 1;
- if (boss->unk_04C > 18) {
- Math_SmoothStepToF(&boss->fwork[11], 110.0f, 1.0f, 18.0f, 0);
- Math_SmoothStepToF(&boss->fwork[12], 20.0f, 1.0f, 3.6f, 0);
- Math_SmoothStepToF(&boss->fwork[13], 80.0f, 1.0f, 15.0f, 0);
- }
- if (boss->unk_04C == 25) {
- Audio_PlaySfx(0x09008015, D_i6_801A67B8, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- }
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C02EDA0)) {
- func_i6_8018D9C0(boss);
- }
- limbCount = Animation_GetFrameData(&D_C02EDA0, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- }
- break;
- case 7:
- if (boss->swork[5] < 0) {
- func_i6_8018D9C0(boss);
- } else {
- if (boss->unk_04C == 48) {
- Audio_PlaySfx(0x3103108B, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if (boss->unk_04C > 48) {
- func_i6_8018D0D8(boss);
- }
- if (boss->unk_04C > 45) {
- Math_SmoothStepToF(&boss->fwork[20], 1.0f, 1.0f, 0.2f, 0.01f);
- Math_SmoothStepToF(&boss->fwork[21], 1.0f, 0.5f, 0.15f, 0.01f);
- if (!(gGameFrameCount & 1)) {
- gAmbientR = 200;
- gAmbientG = 90;
- gAmbientB = 255;
- } else {
- gAmbientR = 100;
- gAmbientG = 45;
- gAmbientB = 127;
- }
- } else {
- Math_SmoothStepToF(&boss->fwork[20], 0.15f, 1.0f, 0.15f, 0.01f);
- Math_SmoothStepToF(&boss->fwork[21], 0.5f, 1.0f, 0.11f, 0.001f);
- }
- boss->fwork[0] = player->pos.x + 500.0f;
- boss->fwork[3] = player->pos.y + 750.0f;
- boss->fwork[6] = -5000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 5.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 5.0f, 1.0f, 2.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 5.0f, 1.0f, 2.0f, 0);
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C018BC4)) {
- boss->unk_04C = Animation_GetFrameCount(&D_C018BC4) - 1;
- if (boss->timer_050 == 0) {
- func_i6_8018D9C0(boss);
- }
- }
- limbCount = Animation_GetFrameData(&D_C018BC4, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- }
- break;
- case 12:
- if ((boss->swork[4] < 0) || (boss->swork[5] < 0)) {
- boss->actionState = 14;
- boss->unk_04C = 0;
- boss->fwork[9] = 0.0f;
- } else {
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 40.0f, 1.0f, 2.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C025C00)) {
- boss->unk_04C = Animation_GetFrameCount(&D_C025C00) - 1;
- if (boss->timer_050 == 0) {
- func_i6_8018D9C0(boss);
- }
- }
- limbCount = Animation_GetFrameData(&D_C025C00, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- }
- break;
- case 13:
- if ((boss->swork[4] < 0) || (boss->swork[5] < 0)) {
- boss->actionState = 14;
- boss->unk_04C = 0;
- boss->fwork[9] = 0.0f;
- } else {
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 20.0f, 1.0f, 2.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C006F08)) {
- boss->unk_04C = Animation_GetFrameCount(&D_C006F08) - 1;
- if (boss->timer_050 == 0) {
- func_i6_8018D9C0(boss);
- }
- }
- limbCount = Animation_GetFrameData(&D_C006F08, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- }
- break;
- case 14:
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 20.0f, 1.0f, 2.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C002654)) {
- boss->unk_04C = 0;
- if (boss->timer_050 == 0) {
- func_i6_8018D9C0(boss);
- }
- }
- limbCount = Animation_GetFrameData(&D_C002654, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- break;
- case 15:
- if (boss->swork[8] == 1) {
- boss->fwork[6] = 100.0f;
- } else {
- boss->fwork[6] = -3000.0f;
- }
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 5.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
- boss->fwork[0] = 0.0f;
- boss->fwork[3] = 0.0f;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- if (boss->unk_04C == 15) {
- Audio_PlaySfx(0x29022088, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if ((boss->unk_04C > 35) && (boss->unk_04C < 150) && !(boss->unk_04C & 0x1F)) {
- Audio_PlaySfx(0x29022089, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- if (player->state_1C8 == PLAYERSTATE_1C8_11) {
- D_Timer_80177BD0[0] = 10;
- }
- }
- if ((boss->unk_04C == 20) && (player->state_1C8 == PLAYERSTATE_1C8_11)) {
- player->unk_234 = 0;
- for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
- if (gEffects[i].obj.id == OBJ_EFFECT_396) {
- Object_Kill(&gEffects[i].obj, gEffects[i].sfxPos);
- }
- }
- }
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C00DE48)) {
- boss->unk_04C = Animation_GetFrameCount(&D_C00DE48) - 1;
- if (boss->timer_050 == 0) {
- boss->actionState = 16;
- boss->unk_04C = 0;
- boss->timer_050 = 30;
- boss->fwork[9] = 0.0f;
- }
- }
- limbCount = Animation_GetFrameData(&D_C00DE48, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- if ((boss->unk_04C == 45) && (boss->swork[8] == 2)) {
- boss->actionState = 18;
- boss->unk_04C = 0;
- boss->unk_044 = 0;
- boss->timer_050 = 40;
- boss->fwork[9] = 0.0f;
- }
- break;
- case 16:
- if (boss->swork[8] == 1) {
- boss->fwork[6] = 100.0f;
- } else {
- boss->fwork[6] = -3000.0f;
- }
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 50.0f, 1.0f, 2.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 20.0f, 1.0f, 1.0f, 0);
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y + 100.0f;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- if (boss->timer_050 == 0) {
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C023B54)) {
- boss->unk_04C = Animation_GetFrameCount(&D_C023B54) - 1;
- func_i6_8018D9C0(boss);
- }
- }
- limbCount = Animation_GetFrameData(&D_C023B54, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- if (boss->unk_04C == 10) {
- Audio_PlaySfx(0x3140208A, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if ((boss->unk_04C == 13) && (player->state_1C8 == PLAYERSTATE_1C8_11)) {
- player->unk_234 = 1;
- player->unk_1D0 = 1;
- player->timer_1F8 = 60;
- player->timer_498 = 50;
- boss->swork[8] = 0;
- D_Timer_80177BD0[0] = 30;
- if (player->wings.rightState == 2) {
- gRightWingHealth[0] = 0;
- player->wings.rightState = 1;
- func_i6_8018C8D4(boss->obj.pos.x, boss->obj.pos.y - 200.0f, boss->obj.pos.z,
- (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, 10.0f, 8);
- }
- if (player->wings.leftState == 2) {
- gLeftWingHealth[0] = 0;
- player->wings.leftState = 1;
- func_i6_8018C8D4(boss->obj.pos.x, boss->obj.pos.y - 200.0f, boss->obj.pos.z,
- (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, 10.0f, 9);
- }
- }
- if (boss->unk_04C >= 10 && boss->unk_04C < 20) {
- for (i = 0; i < 10; i++) {
- func_i6_8018C8D4(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 100.0f),
- (boss->obj.pos.y - 200.0f) + ((Rand_ZeroOne() - 0.5f) * 100.0f), boss->obj.pos.z,
- (Rand_ZeroOne() - 0.5f) * 50.0f, (Rand_ZeroOne() - 0.5f) * 50.0f,
- (Rand_ZeroOne() * 5.0f) + 5.0f, (s32) (Rand_ZeroOne() * 7.9));
- }
- }
- break;
- case 17:
- // FAKE!!
- if (1) {}
- if (1) {}
- if (1) {}
- if (1) {}
- Math_SmoothStepToF(&D_801779A8[gMainController], 50.0f, 1.0f, 1.8f, 0.0f);
- boss->timer_056 = 50;
- if ((boss->timer_050 > 70) && (boss->timer_050 < 1000) && !(gGameFrameCount & 3)) {
- func_i6_8018C734(gPlayer[0].camEye.x + ((Rand_ZeroOne() - 0.5f) * 3000.0f),
- gPlayer[0].camEye.y + ((Rand_ZeroOne() - 0.5f) * 3000.0f),
- gPlayer[0].camEye.z - D_80177D20, (s32) (Rand_ZeroOne() * 7.9));
- }
- if (boss->timer_050 > 0) {
- playerShot = gPlayerShots;
- effect = gEffects;
- for (i = 0; i < 16; i++, playerShot++) {
- Math_SmoothStepToF(&playerShot->obj.pos.x, boss->obj.pos.x, 0.5f, boss->fwork[16], 0);
- Math_SmoothStepToF(&playerShot->obj.pos.y, boss->obj.pos.y - 100.0f, 0.5f, boss->fwork[16], 0);
- Math_SmoothStepToF(&playerShot->vel.x, 0.0f, 0.9f, 5.0f, 0);
- Math_SmoothStepToF(&playerShot->vel.y, 0.0f, 0.9f, 5.0f, 0);
- if ((playerShot->obj.id == PLAYERSHOT_3) && (playerShot->obj.status == 1) &&
- (playerShot->unk_5C == 0) && (fabsf(playerShot->obj.pos.x - boss->obj.pos.x) < 200.0f) &&
- (fabsf(playerShot->obj.pos.y - (boss->obj.pos.y - 100.0f)) < 200.0f) &&
- (fabsf(playerShot->obj.pos.z - (boss->obj.pos.z - 200.0f)) < 100.0f)) {
- Object_Kill(&playerShot->obj, playerShot->sfxPos);
- boss->actionState = 15;
- boss->fwork[9] = 0.2f;
- boss->unk_04C = 0;
- boss->swork[8] = 2;
- Audio_PlaySfx(0x1940306D, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- break;
- }
- }
- for (i = 0; i < ARRAY_COUNT(gEffects); i++, effect++) {
- if ((effect->obj.status != OBJ_FREE) && (effect->obj.id != OBJ_EFFECT_396)) {
- Math_SmoothStepToF(&effect->obj.pos.x, boss->obj.pos.x, 0.5f, boss->fwork[16], 0);
- Math_SmoothStepToF(&effect->obj.pos.y, boss->obj.pos.y - 100.0f, 0.5f, boss->fwork[16], 0);
- Math_SmoothStepToF(&effect->obj.pos.z, boss->obj.pos.z - 200.0f, 0.5f, boss->fwork[16], 0);
- Math_SmoothStepToF(&effect->vel.x, 0.0f, 0.9f, 5.0f, 0);
- Math_SmoothStepToF(&effect->vel.y, 0.0f, 0.9f, 5.0f, 0);
- Math_SmoothStepToF(&effect->vel.z, 0.0f, 0.9f, 10.0f, 0);
- if ((fabsf(effect->obj.pos.x - boss->obj.pos.x) < 200.0f) &&
- (fabsf(effect->obj.pos.y - (boss->obj.pos.y - 100.0f)) < 200.0f) &&
- (fabsf(effect->obj.pos.z - (boss->obj.pos.z - 200.0f)) < 100.0f)) {
- Object_Kill(&effect->obj, effect->sfxPos);
- }
- }
- }
- Math_SmoothStepToF(&player->pos.x, boss->obj.pos.x, 0.1f, boss->fwork[16], 0);
- Math_SmoothStepToF(&player->pos.y, boss->obj.pos.y - 150.0f, 0.1f, boss->fwork[16], 0);
- Math_SmoothStepToF(&boss->fwork[16], 35.0f, 1.0f, 0.5f, 0);
- if (fabsf(player->unk_138 - boss->obj.pos.z) < 200.0f) {
- boss->actionState = 15;
- boss->swork[8] = 1;
- boss->fwork[9] = 0.2f;
- boss->unk_04C = 0;
- if (player->state_1C8 == PLAYERSTATE_1C8_3) {
- player->state_1C8 = PLAYERSTATE_1C8_11;
- player->unk_1D0 = 0;
- }
- break;
+ for (otherActor = &gActors[1], i = 1; i < 4; i++, otherActor++) {
+ otherActor->unk_0B8 = 0;
+ otherActor->timer_0BC = 3;
+ if (actor->timer_0BC == 0) {
+ otherActor->unk_0B8 = 2;
+ actor->unk_0B8 = 2;
+ player->state_1C8 = PLAYERSTATE_1C8_3;
+ player->unk_014 = 0.0001f;
+ D_80177838 = 80;
}
}
- boss->fwork[8] = 0.1f;
- boss->fwork[2] = 0.1f;
- boss->fwork[5] = 0.1f;
- boss->fwork[6] = -300.0f;
- Math_SmoothStepToF(&boss->fwork[1], 20.0f, 1.0f, 1.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 1.0f, 0);
- boss->fwork[0] = 0.0f;
- boss->fwork[3] = 150.0f;
- Math_SmoothStepToF(&boss->fwork[7], 20.0f, 0.1f, 0.1f, 0);
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.01f, 0);
- if (boss->unk_04C == 10) {
- Audio_PlaySfx(0x31022087, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C0240D0)) {
- boss->unk_04C = 0;
- if (boss->timer_050 == 0) {
- boss->actionState = 15;
- boss->swork[8] = 0;
- boss->fwork[9] = 0.0f;
- }
- }
- limbCount = Animation_GetFrameData(&D_C0240D0, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
-
- break;
- case 18:
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
- boss->fwork[0] = 0.0f;
- boss->fwork[3] = 0.0f;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
- switch (boss->unk_044) {
- case 0:
- if (boss->timer_050 != 0) {
- limbCount = Animation_GetFrameData(&D_C00DE48, 45, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- } else {
- boss->unk_044 = 1;
- boss->timer_050 = 30;
- boss->swork[9] = 20;
- boss->fwork[9] = 0.0f;
- func_8001CE28(0, boss->sfxPos);
- boss->timer_05C = 50;
- }
- break;
- case 1:
- if (boss->timer_050 != 0) {
- limbCount = Animation_GetFrameData(&D_C017430, 0, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- } else {
- boss->unk_044 = 2;
- boss->timer_050 = 70;
- boss->fwork[9] = 0.0f;
- Audio_PlaySfx(0x1940307C, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- }
- if (boss->timer_050 == 15) {
- boss->swork[10] = 80;
- }
- break;
- case 2:
- if (boss->timer_050 == 0) {
- func_i6_8018D9C0(boss);
- }
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C00E598)) {
- boss->unk_04C = 0;
- }
- limbCount = Animation_GetFrameData(&D_C00E598, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- break;
+ if (D_8015F928 == 80) {
+ func_800BA808(gMsg_ID_19010, RCID_FOX);
}
break;
- case 20:
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 50.0f, 1.0f, 5.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 50.0f, 1.0f, 5.0f, 0);
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C017050)) {
- func_i6_8018D9C0(boss);
- }
- limbCount = Animation_GetFrameData(&D_C017050, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- break;
- case 30:
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
- boss->fwork[0] = 0.0f;
- boss->fwork[3] = 0.0f;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C017050)) {
- boss->unk_04C = 0;
- }
- limbCount = Animation_GetFrameData(&D_C017050, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- if (!(gGameFrameCount & 1)) {
- func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z, 0.0f, 0.0f,
- boss->vel.z, (Rand_ZeroOne() * 0.2f) + 0.2f, 0);
- }
- if (gCsFrameCount >= 0x33) {
- func_8007D0E0(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z,
- (Rand_ZeroOne() * 3.0f) + 3.0f);
- }
-
- gCsFrameCount++;
-
- switch (gCsFrameCount) {
- case 60:
- boss->swork[17] = 1;
- func_i6_8018DA94(boss, &boss->vwork[19]);
- break;
- case 70:
- boss->swork[19] = 1;
- func_i6_8018DA94(boss, &boss->vwork[21]);
- break;
- case 80:
- boss->swork[11] = 1;
- func_i6_8018DA94(boss, &boss->vwork[13]);
- break;
- case 90:
- boss->swork[12] = 1;
- func_i6_8018DA94(boss, &boss->vwork[14]);
- break;
- case 100:
- boss->swork[22] = 1;
- func_i6_8018DA94(boss, &boss->vwork[24]);
- break;
- case 110:
- boss->swork[23] = 1;
- func_i6_8018DA94(boss, &boss->vwork[25]);
- break;
- case 120:
- boss->swork[18] = 1;
- func_i6_8018DA94(boss, &boss->vwork[19]);
- boss->actionState = 9;
- boss->health = 100;
- boss->timer_050 = 50;
- boss->fwork[9] = 0.0f;
- Audio_PlaySfx(0x11030073, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- func_8001D444(0, 0x8021, 0, 0xFF);
- break;
- }
- break;
- case 9:
- boss->fwork[6] = -3000.0f;
- if (boss->timer_050 == 0) {
- boss->actionState = 10;
- boss->timer_050 = 100;
- }
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 3.0f, 0);
- boss->fwork[0] = player->pos.x;
- boss->fwork[3] = player->pos.y;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C00208C)) {
- boss->unk_04C = 0;
- }
- limbCount = Animation_GetFrameData(&D_C00208C, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
-
- func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 700.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 700.0f), boss->obj.pos.z, 0.0f, 0.0f,
- gPlayer[0].vel.z, (Rand_ZeroOne() * 0.15f) + 0.15f, 0);
- break;
- case 10:
- boss->fwork[6] = 0.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 60.0f, 1.0f, 3.0f, 0);
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C00208C)) {
- boss->unk_04C = 0;
- }
- limbCount = Animation_GetFrameData(&D_C00208C, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
-
- func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 700.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 700.0f), boss->obj.pos.z, 0.0f, 0.0f,
- gPlayer[0].vel.z, (Rand_ZeroOne() * 0.15f) + 0.15f, 0);
- if (boss->timer_050 == 0) {
- boss->actionState = 9;
- boss->timer_050 = 130;
- }
- break;
- case 31:
- boss->obj.rot.x += 1.0f;
- boss->obj.rot.y += 0.3f;
- boss->obj.rot.z += 0.7f;
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
- boss->fwork[0] = 0.0f;
- boss->fwork[3] = 0.0f;
- if (!(gGameFrameCount & 1)) {
- func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z, 0.0f, 0.0f,
- boss->vel.z, (Rand_ZeroOne() * 0.2f) + 0.2f, 0);
- }
- func_8007D0E0(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z,
- (Rand_ZeroOne() * 5.0f) + 5.0f);
- break;
- case 32:
- boss->fwork[6] = -3000.0f;
- boss->fwork[8] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[7], 70.0f, 1.0f, 7.0f, 0);
- boss->fwork[2] = 0.05f;
- boss->fwork[5] = 0.05f;
- Math_SmoothStepToF(&boss->fwork[1], 30.0f, 1.0f, 3.0f, 0);
- Math_SmoothStepToF(&boss->fwork[4], 30.0f, 1.0f, 3.0f, 0);
- boss->fwork[0] = 0.0f;
- boss->fwork[3] = 0.0f;
- Math_SmoothStepToF(&boss->fwork[9], 1.0f, 1.0f, 0.05f, 0);
- boss->unk_04C++;
- if (boss->unk_04C >= Animation_GetFrameCount(&D_C017050)) {
- boss->unk_04C = 0;
- }
- limbCount = Animation_GetFrameData(&D_C017050, boss->unk_04C, spD0);
- Math_SmoothStepToVec3fArray(spD0, D_i6_801A7F80, 1, limbCount, boss->fwork[9], 100.0f, 0.0f);
- if (!(gGameFrameCount & 1)) {
- func_8007C484(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z, 0.0f, 0.0f,
- boss->vel.z, (Rand_ZeroOne() * 0.2f) + 0.2f, 0);
- }
-
- if (gCsFrameCount > 50) {
- func_8007D0E0(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 1000.0f),
- boss->obj.pos.y + ((Rand_ZeroOne() - 0.5f) * 1000.0f), boss->obj.pos.z,
- (Rand_ZeroOne() * 3.0f) + 3.0f);
- }
-
- gCsFrameCount++;
-
- switch (gCsFrameCount) {
- case 60:
- boss->swork[17] = 2;
- func_i6_8018DA94(boss, &boss->vwork[19]);
- break;
- case 70:
- boss->swork[19] = 2;
- func_i6_8018DA94(boss, &boss->vwork[21]);
- break;
- case 80:
- boss->swork[14] = 2;
- func_i6_8018DA94(boss, &boss->vwork[16]);
- break;
- case 90:
- boss->swork[13] = 2;
- func_i6_8018DA94(boss, &boss->vwork[15]);
- break;
- case 100:
- func_i6_8018DA94(boss, &boss->vwork[13]);
- break;
- case 110:
- func_i6_8018DA94(boss, &boss->vwork[14]);
- break;
- case 120:
- boss->swork[20] = 2;
- func_i6_8018DA94(boss, &boss->vwork[22]);
- break;
- case 130:
- boss->swork[21] = 2;
- func_i6_8018DA94(boss, &boss->vwork[23]);
- break;
- case 140:
- boss->swork[22] = 2;
- func_i6_8018DA94(boss, &boss->vwork[24]);
- break;
- case 150:
- boss->swork[23] = 2;
- func_i6_8018DA94(boss, &boss->vwork[25]);
- break;
- case 160:
- boss->swork[16] = 1;
- func_i6_8018DA94(boss, &boss->vwork[18]);
- break;
- case 170:
- boss->swork[15] = 1;
- func_i6_8018DA94(boss, &boss->vwork[17]);
- break;
- case 173:
- func_8007A6F0(&boss->obj.pos, 0x2940C00A);
- func_8007B344(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 100.0f, 4);
- break;
- case 180:
- boss1 = &gBosses[1];
- Boss_Initialize(boss1);
- boss1->obj.status = OBJ_INIT;
- boss1->obj.id = OBJ_BOSS_321;
- boss1->obj.pos.x = boss->obj.pos.x;
- boss1->obj.pos.y = boss->obj.pos.y;
- boss1->obj.pos.z = boss->obj.pos.z;
- boss1->swork[1] = 100;
- boss1->actionState = 10;
- boss1->timer_050 = 180;
- boss1->unk_3F8 = 5.0f;
- Object_SetInfo(&boss1->info, boss1->obj.id);
- Object_Kill(&boss->obj, boss->sfxPos);
- D_80177AB0 = 3;
- func_i6_80189098(boss);
- func_800BA808(gMsg_ID_19330, RCID_ANDROSS_RED);
- break;
+ case 2:
+ func_i6_801962F4(actor);
+ if (((D_800C9B4C + 100) < D_8015F928) && (gActors[4].obj.status == OBJ_FREE) &&
+ (gActors[5].obj.status == OBJ_FREE) && (gActors[6].obj.status == OBJ_FREE) &&
+ (gActors[7].obj.status == OBJ_FREE) && (actor->timer_0BE == 0)) {
+ actor->timer_0BE = 80;
}
- Math_SmoothStepToF(&D_800C9C30, 0.0f, 1.0f, 0.3f, 0.0f);
- break;
- }
- if (boss->swork[4] >= 0) {
- boss->info.hitbox[13] = boss->vwork[0].z - boss->obj.pos.z;
- boss->info.hitbox[15] = boss->vwork[0].y - boss->obj.pos.y;
- boss->info.hitbox[17] = boss->vwork[0].x - boss->obj.pos.x;
- if (boss->swork[7] != 0) {
- boss->info.hitbox[14] = 280.0f;
- boss->info.hitbox[16] = 200.0f;
- boss->info.hitbox[18] = 200.0f;
- } else {
- boss->info.hitbox[14] = 100.0f;
- boss->info.hitbox[16] = 100.0f;
- boss->info.hitbox[18] = 100.0f;
- }
- } else {
- boss->info.hitbox[16] = 0.0f;
- }
- if (boss->swork[5] >= 0) {
- boss->info.hitbox[19] = boss->vwork[1].z - boss->obj.pos.z;
- boss->info.hitbox[21] = boss->vwork[1].y - boss->obj.pos.y;
- boss->info.hitbox[23] = boss->vwork[1].x - boss->obj.pos.x;
- if (boss->swork[7] != 0) {
- boss->info.hitbox[20] = 280.0f;
- boss->info.hitbox[22] = 200.0f;
- boss->info.hitbox[24] = 200.0f;
- } else {
- boss->info.hitbox[20] = 100.0f;
- boss->info.hitbox[22] = 100.0f;
- boss->info.hitbox[24] = 100.0f;
- }
- } else {
- boss->info.hitbox[22] = 0.0f;
- }
- boss->info.hitbox[1] = boss->vwork[2].z - boss->obj.pos.z;
- boss->info.hitbox[3] = boss->vwork[2].y - boss->obj.pos.y;
- boss->info.hitbox[5] = boss->vwork[2].x - boss->obj.pos.x;
- boss->info.hitbox[7] = boss->vwork[3].z - boss->obj.pos.z;
- boss->info.hitbox[9] = boss->vwork[3].y - boss->obj.pos.y;
- boss->info.hitbox[11] = boss->vwork[3].x - boss->obj.pos.x;
- if ((initialActionState == 17) && (boss->actionState != 17)) {
- func_8001A55C(boss->sfxPos, 0x31022087);
- }
- if ((initialActionState == 7) && (boss->actionState != 7)) {
- func_8001A55C(boss->sfxPos, 0x3103108B);
- }
-}
-
-extern Gfx D_C002B20[];
-extern Gfx D_C002F00[];
-extern Gfx D_C0043D0[];
-extern Gfx D_C004860[];
-extern Gfx D_C015740[];
-extern Gfx D_C022520[];
+ if ((actor->timer_0BE == 1) && (player->state_1C8 != PLAYERSTATE_1C8_7)) {
-static Vec3f D_i6_801A67C4 = { 40.0f, 0.0f, -10.0f };
-static f32 D_i6_801A67D0 = 180.0f;
-static f32 D_i6_801A67D4 = 0.0f;
-static f32 D_i6_801A67D8 = 0.0f;
-static Vec3f D_i6_801A67DC = { 40.0f, 0.0f, 10.0f };
-static f32 D_i6_801A67E8 = 0.0f;
-static f32 D_i6_801A67EC = 0.0f;
-static f32 D_i6_801A67F0 = 0.0f;
-static Vec3f D_i6_801A67F4 = { 0.0f, 0.0f, 0.0f };
-
-s32 func_i6_801917F0(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
- Vec3f sp94;
- Vec3f sp88;
- f32 scale;
- Boss* boss = (Boss*) data;
-
- sp94 = D_i6_801A67F4;
- scale = 1.0f;
- if ((limbIndex >= 13) && (limbIndex <= 50)) {
- if (boss->actionState < 2) {
- *dList = NULL;
- } else {
- RCP_SetupDL(&gMasterDisp, 0x1D);
- gSPTexture(gMasterDisp++, 6600, 6600, 0, G_TX_RENDERTILE, G_ON);
- gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
- if (((limbIndex >= 23) && (limbIndex <= 32)) || (limbIndex == 50)) {
- if (boss->swork[5] < 0) {
- *dList = NULL;
- } else if (boss->swork[3] & 1) {
- RCP_SetupDL(&gMasterDisp, 0x1B);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
+ for (i = 1; i < ARRAY_COUNT(gTeamShields); i++) {
+ D_80177C38[i] = gSavedTeamShields[i];
+ D_801778F0[i] = gSavedTeamShields[i];
+ gSavedTeamShields[i] = gTeamShields[i];
}
- } else if (boss->swork[4] < 0) {
- *dList = NULL;
- } else if (boss->swork[2] & 1) {
- RCP_SetupDL(&gMasterDisp, 0x1B);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
- }
- }
- } else if (!(boss->timer_05C & 1)) {
- RCP_SetupDL(&gMasterDisp, 0x1D);
- } else {
- RCP_SetupDL(&gMasterDisp, 0x1B);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
- }
- switch (limbIndex) {
- case 59:
- if (boss->swork[18] == 1) {
- *dList = D_C004860;
- }
- if (boss->swork[18] == 2) {
- *dList = NULL;
+ player->state_1C8 = PLAYERSTATE_1C8_7;
+ player->unk_1D0 = 0;
+ D_800D3180[gCurrentLevel] = 2;
+ D_80177C94 = gGoldRingCount[0];
+ D_80177C9C = player->shields + 1;
+ D_80161A5C = D_80177CA4 = gHitCount;
+ D_80177CAC = player->wings.rightState;
+ D_80177CB4 = player->wings.leftState;
+ D_80177CBC = gRightWingHealth[0];
+ D_80177CC4 = gLeftWingHealth[0];
}
break;
case 3:
- rot->z -= boss->vwork[4].x;
- rot->y -= boss->vwork[4].y;
- if (boss->swork[0] & 1) {
- RCP_SetupDL(&gMasterDisp, 0x1B);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
- }
- if (boss->swork[11] != 0) {
- *dList = D_C0043D0;
- RCP_SetupDL(&gMasterDisp, 0x15);
- }
- scale = boss->fwork[17];
- break;
- case 4:
- rot->z -= boss->vwork[5].x;
- rot->y -= boss->vwork[5].y;
- if (boss->swork[1] & 1) {
- RCP_SetupDL(&gMasterDisp, 0x1B);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
- }
- if (boss->swork[12] != 0) {
- *dList = D_C015740;
- RCP_SetupDL(&gMasterDisp, 0x15);
- }
- scale = boss->fwork[17];
- break;
- case 5:
- if (boss->swork[17] == 1) {
- *dList = D_C002B20;
- }
- if (boss->swork[17] == 2) {
- *dList = NULL;
- }
- scale = boss->fwork[17];
- break;
- case 6:
- if (boss->swork[19] == 1) {
- *dList = D_C002F00;
- }
- if (boss->swork[19] == 2) {
- *dList = NULL;
- }
- scale = boss->fwork[17];
- break;
- case 1:
- if (boss->swork[14] != 0) {
- *dList = NULL;
- }
- break;
- case 2:
- if (boss->swork[13] != 0) {
- *dList = NULL;
- }
- break;
- case 7:
- if (boss->swork[20] != 0) {
- *dList = NULL;
- }
- scale = boss->fwork[18];
- break;
- case 8:
- if (boss->swork[21] != 0) {
- *dList = NULL;
- }
- scale = boss->fwork[18];
- break;
- case 9:
- if (boss->swork[23] != 0) {
- *dList = NULL;
- }
- scale = boss->fwork[18];
- break;
- case 10:
- if (boss->swork[22] != 0) {
- *dList = NULL;
- }
- scale = boss->fwork[18];
- break;
- case 11:
- if (boss->swork[16] != 0) {
- *dList = NULL;
- }
- break;
- case 12:
- if (boss->swork[15] != 0) {
- *dList = NULL;
- }
- break;
- case 49:
- pos->x -= boss->fwork[11];
- pos->y += boss->fwork[12];
- pos->z += boss->fwork[13];
- Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
- Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
- Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
- Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
- if (*dList != NULL) {
- Matrix_Push(&gGfxMatrix);
- Matrix_Push(&gCalcMatrix);
- Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, *dList);
- RCP_SetupDL(&gMasterDisp, 0x29);
- switch (gGameFrameCount & 3) {
- case 0:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
- break;
- case 1:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 255, 0, 255);
- break;
- case 2:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 255, 255);
- break;
- case 3:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
- break;
- }
- Matrix_Translate(gGfxMatrix, D_i6_801A67DC.x, D_i6_801A67DC.y, D_i6_801A67DC.z, 1);
- Matrix_RotateZ(gGfxMatrix, D_i6_801A67F0 * M_DTOR, 1);
- Matrix_RotateY(gGfxMatrix, D_i6_801A67EC * M_DTOR, 1);
- Matrix_RotateX(gGfxMatrix, D_i6_801A67E8 * M_DTOR, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, D_C022520);
- Matrix_Pop(&gGfxMatrix);
- Matrix_Pop(&gCalcMatrix);
- }
- return true;
- case 50:
- pos->x -= boss->fwork[11];
- pos->y += boss->fwork[12];
- pos->z -= boss->fwork[13];
- Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
- Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
- Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
- Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
- if (*dList != NULL) {
- Matrix_Push(&gGfxMatrix);
- Matrix_Push(&gCalcMatrix);
- Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, *dList);
- RCP_SetupDL(&gMasterDisp, 0x29);
- switch (gGameFrameCount & 3) {
- case 0:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
- break;
- case 1:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 255, 0, 255);
- break;
- case 2:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 255, 255);
- break;
- case 3:
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
- break;
- }
- Matrix_Translate(gGfxMatrix, D_i6_801A67C4.x, D_i6_801A67C4.y, D_i6_801A67C4.z, 1);
- Matrix_RotateZ(gGfxMatrix, D_i6_801A67D8 * M_DTOR, 1);
- Matrix_RotateY(gGfxMatrix, D_i6_801A67D4 * M_DTOR, 1);
- Matrix_RotateX(gGfxMatrix, D_i6_801A67D0 * M_DTOR, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, D_C022520);
- Matrix_Pop(&gGfxMatrix);
- Matrix_Pop(&gCalcMatrix);
- }
- return true;
- default:
- break;
- }
-
- Matrix_Translate(gCalcMatrix, pos->x, pos->y, pos->z, 1);
- Matrix_RotateZ(gCalcMatrix, rot->z * M_DTOR, 1);
- Matrix_RotateY(gCalcMatrix, rot->y * M_DTOR, 1);
- Matrix_RotateX(gCalcMatrix, rot->x * M_DTOR, 1);
- Matrix_Push(&gCalcMatrix);
- Matrix_Scale(gCalcMatrix, scale, scale, scale, 1);
- if (*dList != NULL) {
- Matrix_MultVec3f(gCalcMatrix, &sp94, &sp88);
- func_8005F670(&sp88);
- Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, *dList);
- }
- Matrix_Pop(&gCalcMatrix);
- return true;
-}
-
-void func_i6_801924B4(s32 limbIndex, Vec3f* rot, void* data) {
- Vec3f sp94 = { 0.0f, 0.0f, 0.0f };
- Vec3f sp88 = { 33.0f, 0.0f, 0.0f };
- Vec3f sp7C = { 20.0f, 0.0f, 0.0f };
- Vec3f sp70 = { -16.0f, 8.0f, 20.0f };
- Vec3f sp64 = { -16.0f, -8.0f, -20.0f };
- Vec3f sp58 = { 40.0f, -22.0f, 4.0f };
- Vec3f sp4C = { 40.0f, -22.0f, -4.0f };
- Vec3f sp40 = { 10.0f, -2.0f, 2.0f };
- Vec3f sp34 = { 10.0f, -2.0f, 2.0f };
- Vec3f sp28 = { -80.0f, 0.0f, 0.0f };
- Boss* boss = (Boss*) data;
-
- switch (limbIndex) {
- case 3:
- Matrix_MultVec3f(gCalcMatrix, &sp7C, &boss->vwork[2]);
- break;
- case 4:
- Matrix_MultVec3f(gCalcMatrix, &sp7C, &boss->vwork[3]);
- break;
- case 5:
- Matrix_MultVec3f(gCalcMatrix, &sp4C, &boss->vwork[6]);
- Matrix_MultVec3f(gCalcMatrix, &sp58, &boss->vwork[7]);
- break;
- case 12:
- Matrix_MultVec3f(gCalcMatrix, &sp34, &boss->vwork[9]);
- break;
- case 11:
- Matrix_MultVec3f(gCalcMatrix, &sp40, &boss->vwork[8]);
- break;
- case 20:
- Matrix_MultVec3f(gCalcMatrix, &sp70, &boss->vwork[0]);
- break;
- case 28:
- Matrix_MultVec3f(gCalcMatrix, &sp64, &boss->vwork[1]);
- break;
- case 25:
- Matrix_MultVec3f(gCalcMatrix, &sp88, &boss->vwork[10]);
- break;
- }
- if (boss->actionState >= 30) {
- switch (limbIndex) {
- case 1:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[16]);
- return;
- case 2:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[15]);
- return;
- case 3:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[13]);
- return;
- case 4:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[14]);
- return;
- case 5:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[19]);
- return;
- case 6:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[21]);
- return;
- case 7:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[22]);
- return;
- case 8:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[23]);
- return;
- case 9:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[25]);
- return;
- case 10:
- Matrix_MultVec3f(gCalcMatrix, &sp94, &boss->vwork[24]);
- return;
- case 11:
- Matrix_MultVec3f(gCalcMatrix, &sp28, &boss->vwork[18]);
- return;
- case 12:
- Matrix_MultVec3f(gCalcMatrix, &sp28, &boss->vwork[17]);
- break;
- }
- }
-}
-
-extern Limb* D_C01CC3C;
-
-void func_i6_801928C8(Boss* boss) {
-
- if (boss->timer_058 == 0) {
- // FAKE
- if (1) {}
- PRINTF("Enm->count %d\n");
- if (boss->actionState < 2) {
- Lights_SetOneLight(&gMasterDisp, gLight1x, gLight1y, gLight1z, D_i6_801A7F5C, D_i6_801A7F64, D_i6_801A7F6C,
- D_i6_801A7F74, D_i6_801A7F7C, D_i6_801A8430);
- }
- Matrix_Scale(gCalcMatrix, 10.0f, 10.0f, 10.0f, 1);
- Animation_DrawSkeleton(2, &D_C01CC3C, D_i6_801A7F80, func_i6_801917F0, func_i6_801924B4, boss, gCalcMatrix);
- Matrix_Pop(&gGfxMatrix);
- Matrix_Push(&gGfxMatrix);
- if (boss->fwork[20] > 0.05f) {
- Matrix_Translate(gGfxMatrix, boss->vwork[10].x, boss->vwork[10].y, boss->vwork[10].z + D_80177D20, 1);
- if (boss->fwork[21] > 0.05f) {
- Matrix_Push(&gGfxMatrix);
- RCP_SetupDL(&gMasterDisp, 0x43);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 192);
- gDPSetEnvColor(gMasterDisp++, 255, 0, 128, 192);
- Matrix_Scale(gGfxMatrix, boss->fwork[21] * 7.0f, boss->fwork[21] * 7.0f, boss->fwork[21] * 7.0f, 1);
- if (gGameFrameCount & 1) {
- Matrix_Scale(gGfxMatrix, 1.1f, 1.1f, 1.1f, 1);
- }
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, D_1024AC0);
- Matrix_Pop(&gGfxMatrix);
- }
- Matrix_Scale(gGfxMatrix, boss->fwork[20] * 10.0f, boss->fwork[20] * 10.0f, boss->fwork[20] * 10.0f, 1);
- Matrix_RotateZ(gGfxMatrix, boss->fwork[19] * M_DTOR, 1);
- RCP_SetupDL(&gMasterDisp, 0x40);
- if (gGameFrameCount & 1) {
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 128);
- } else {
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 30);
- }
- Matrix_Push(&gGfxMatrix);
- Matrix_RotateZ(gGfxMatrix, 0.0f, 1);
- Matrix_RotateX(gGfxMatrix, 0.2617994f, 1);
- Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1);
- Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 200.0f, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, D_C017440);
- Matrix_Pop(&gGfxMatrix);
- Matrix_Push(&gGfxMatrix);
- Matrix_RotateZ(gGfxMatrix, 2.0943952f, 1);
- Matrix_RotateX(gGfxMatrix, 0.2617994f, 1);
- Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1);
- Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 200.0f, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, D_C017440);
- Matrix_Pop(&gGfxMatrix);
- Matrix_Push(&gGfxMatrix);
- Matrix_RotateZ(gGfxMatrix, 4.1887903f, 1);
- Matrix_RotateX(gGfxMatrix, 0.2617994f, 1);
- Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1);
- Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 200.0f, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- gSPDisplayList(gMasterDisp++, D_C017440);
- Matrix_Pop(&gGfxMatrix);
- }
- Lights_SetOneLight(&gMasterDisp, gLight1x, gLight1y, gLight1z, gLight1R, gLight1G, gLight1B, gAmbientR,
- gAmbientG, gAmbientB);
- }
-}
-
-void func_i6_80192E94(Actor* actor) {
- Actor* otherActor;
- s32 i;
-
- switch (actor->unk_0B8) {
- case 0:
- if (actor->obj.pos.x >= 0.0f) {
- actor->unk_0B8 = 1;
- } else {
+ D_801779BC = 0;
+ if (D_8015F908 < 600) {
+ player->camEye.x += actor4->vel.x * 0.23f;
+ player->camEye.y += actor4->vel.y * 0.23f;
+ player->camEye.z += actor4->vel.z * 0.23f;
+ }
+ Math_SmoothStepToF(&player->camAt.x, actor4->obj.pos.x, 1.0f, 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.y, actor4->obj.pos.y, 1.0f, 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->camAt.z, actor4->obj.pos.z, 1.0f, 20000.0f, 0.0f);
+ Math_SmoothStepToF(&player->unk_034, 0, 0.1f, 0.2f, 0.0f);
+ if ((gControllerPress->button & START_BUTTON) || (D_8015F928 == (D_800C9B4C + 300))) {
actor->unk_0B8 = 2;
+ player->state_1C8 = PLAYERSTATE_1C8_3;
+ func_800B7184(player, 1);
+ player->unk_014 = 0.0f;
+ D_80161708 = 0;
}
- actor->vwork[0].x = actor->obj.pos.x;
- actor->vwork[0].y = actor->obj.pos.y - 300.0f;
- actor->vwork[0].z = actor->obj.pos.z;
- actor->health = 30;
- actor->unk_0F4.z = actor->obj.rot.z;
- Audio_PlaySfx(0x11000028, actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- break;
- case 1:
- otherActor = gActors;
- for (i = 0; i < 60; i++, otherActor++) {
- if ((i != actor->index) && (otherActor->obj.status == OBJ_ACTIVE) &&
- (otherActor->obj.id == OBJ_ACTOR_285) &&
- (fabsf(otherActor->obj.pos.z - actor->obj.pos.z) < 200.0f)) {
- actor->timer_0BC = 5;
- otherActor->timer_0BC = 5;
- gUnkEntities30[actor->index].mode = 50;
- gUnkEntities30[actor->index].unk_28 = 1.0f;
- gUnkEntities30[actor->index].unk_04.x = actor->obj.pos.x;
- gUnkEntities30[actor->index].unk_04.y = actor->obj.pos.y;
- gUnkEntities30[actor->index].unk_04.z = actor->obj.pos.z;
- gUnkEntities30[actor->index].unk_10.x = otherActor->obj.pos.x;
- gUnkEntities30[actor->index].unk_10.y = otherActor->obj.pos.y;
- gUnkEntities30[actor->index].unk_10.z = otherActor->obj.pos.z;
- gUnkEntities30[actor->index].timer = 3;
- break;
- }
- }
- /* fallthrough */
- case 2:
- actor->obj.rot.z = actor->unk_0F4.z + D_i6_801A7F68;
- Matrix_RotateZ(gCalcMatrix, M_DTOR * D_i6_801A7F68, 0);
- Matrix_MultVec3fNoTranslate(gCalcMatrix, actor->vwork, &actor->obj.pos);
- actor->obj.pos.y += 300.0f;
break;
}
+ if (D_8015F908 != 0) {
+ D_8015F908--;
- if (actor->unk_0D0 != 0) {
- actor->unk_0D0 = 0;
- actor->health -= actor->damage;
- if (actor->health <= 0) {
- func_8007D0E0(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 5.0f);
- for (i = 0; i < 7; i++) {
- func_80079618(((Rand_ZeroOne() - 0.5f) * 10.0f) + actor->obj.pos.x,
- ((Rand_ZeroOne() - 0.5f) * 10.0f) + actor->obj.pos.y, actor->obj.pos.z,
- (Rand_ZeroOne() * 0.5f) + 0.5f);
- }
- func_8007A6F0(&actor->obj.pos, 0x2903A008);
- Object_Kill(&actor->obj, actor->sfxPos);
- }
- }
-}
-
-extern Gfx* D_6007E20;
-
-void func_i6_80193244(Actor* actor) {
-
- gSPDisplayList(gMasterDisp++, &D_6007E20);
- if (actor->timer_0BC != 0) {
- f32 scale;
- u8 alpha;
-
- scale = 2.5f;
- alpha = 16;
- if (gGameFrameCount & 1) {
- alpha = 64;
- scale *= 1.2f;
+ switch (D_8015F908) {
+ case 860:
+ func_800BA808(gMsg_ID_19200, RCID_WOLF);
+ break;
+ case 760:
+ func_800BA808(gMsg_ID_19210, RCID_LEON);
+ break;
+ case 620:
+ func_800BA808(gMsg_ID_19220, RCID_PIGMA);
+ break;
+ case 480:
+ func_800BA808(gMsg_ID_19230, RCID_ANDREW);
+ break;
+ case 350:
+ func_800BA808(gMsg_ID_19240, RCID_FOX);
+ break;
+ case 220:
+ func_800BA808(gMsg_ID_19250, RCID_FALCO);
+ break;
}
- Matrix_Scale(gGfxMatrix, scale, scale, scale, 1);
- Matrix_RotateX(gGfxMatrix, 1.5707964f, 1);
- Matrix_SetGfxMtx(&gMasterDisp);
- RCP_SetupDL(&gMasterDisp, 0x43);
- gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, alpha);
- gDPSetEnvColor(gMasterDisp++, 255, 128, 128, alpha);
- gSPDisplayList(gMasterDisp++, D_1024AC0);
- }
-}
-
-extern Gfx* D_C038AC4;
-
-void func_i6_80193380(Object_80* obj80) {
-
- switch (obj80->unk_48) {
- case 0:
- if (fabsf(obj80->obj.pos.z - gPlayer[0].unk_138) < 1800.0f) {
- obj80->unk_48 = 1;
- obj80->info.hitbox = SEGMENTED_TO_VIRTUAL(&D_C038AC4);
- }
- break;
- case 1:
- obj80->info.hitbox[7] = -130.0f - (obj80->unk_44 * 1.6f);
- obj80->info.hitbox[17] = -130.0f - (obj80->unk_44 * 1.6f);
- obj80->info.hitbox[27] = -130.0f - (obj80->unk_44 * 1.6f);
- obj80->unk_44 += 2;
- if (obj80->unk_44 >= Animation_GetFrameCount(&D_6014658)) {
- obj80->unk_44 = Animation_GetFrameCount(&D_6014658) - 1;
- }
- break;
}
- obj80->obj.rot.z = D_i6_801A7F68;
-}
-
-s32 func_i6_801934EC(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
- if (limbIndex == 13) {
- *dList = NULL;
- }
- return false;
-}
-
-void func_i6_8019350C(Object_80* obj80) {
- Vec3f frameTable[20];
-
- Animation_GetFrameData(&D_6014658, obj80->unk_44, frameTable);
- Animation_DrawSkeleton(1, D_6014844, frameTable, func_i6_801934EC, NULL, NULL, &gIdentityMatrix);
}
-void func_i6_8019356C(Object_80* obj80) {
- obj80->obj.rot.z = D_i6_801A7F68;
- obj80->obj.pos.z += obj80->unk_60;
- if (obj80->timer_4C == 1) {
- Object_Kill(&obj80->obj, obj80->sfxPos);
- }
-}
-
-s32 func_i6_801935B4(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* rot, void* data) {
- if (limbIndex != 13) {
- *dList = NULL;
- }
- return false;
-}
-
-void func_i6_801935D4(Object_80* obj80) {
- Vec3f frameTable[20];
-
- Animation_GetFrameData(&D_6014658, obj80->unk_44, frameTable);
- if (gLevelMode == LEVELMODE_ALL_RANGE) {
- gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
- }
- Animation_DrawSkeleton(1, D_6014844, frameTable, func_i6_801935B4, NULL, NULL, &gIdentityMatrix);
-}
-
-void func_i6_80193668(Object_80* obj80, f32 xPos, f32 yPos, f32 zPos, s32 arg4) {
- Object_80_Initialize(obj80);
- obj80->obj.status = OBJ_ACTIVE;
- obj80->obj.id = OBJ_80_131;
- obj80->obj.pos.x = xPos;
- obj80->obj.pos.y = yPos;
- obj80->obj.pos.z = zPos;
- obj80->unk_60 = -40.0f;
- Object_SetInfo(&obj80->info, obj80->obj.id);
- obj80->timer_4C = (arg4 * 50) + 100;
- obj80->info.unk_10 = 100000.0f;
-}
-
-void func_i6_80193710(void) {
+void func_i6_80196968(void) {
Actor* actor;
- Object_58* obj58;
Boss* boss;
+ Object_58* obj58;
s32 i;
D_80178310 = SEGMENTED_TO_VIRTUAL(D_800CFDA0[gCurrentLevel]);
@@ -3432,7 +190,9 @@ void func_i6_80193710(void) {
obj58->sfxPos[1] = obj58->obj.pos.y = D_80178310[i].yPos;
obj58->sfxPos[2] = obj58->obj.pos.z = -D_80178310[i].zPos1;
obj58->unk_54 = obj58->obj.rot.y = D_80178310[i].rot.y;
+
Object_SetInfo(&obj58->info, obj58->obj.id);
+
obj58++;
}
}
@@ -3454,7 +214,6 @@ void func_i6_80193710(void) {
actor++;
}
}
-
boss = &gBosses[0];
Boss_Initialize(boss);
boss->obj.status = OBJ_INIT;
@@ -3462,661 +221,255 @@ void func_i6_80193710(void) {
Object_SetInfo(&boss->info, boss->obj.id);
}
-void func_i6_801939A0(s32 actorIndex) {
- Actor* actor = &gActors[actorIndex];
+void func_i6_80196BF8(Player* player) {
+ Vec3f vec;
+ Vec3f vel;
+ f32 temp_fv0;
- Actor_Initialize(actor);
- actor->obj.status = OBJ_ACTIVE;
- actor->obj.id = OBJ_ACTOR_195;
- actor->obj.pos.x = 0.0f;
- actor->obj.pos.y = gPlayer[0].camAt.y;
- actor->obj.pos.z = 0.0f;
- actor->iwork[11] = 1;
- actor->unk_0F4.x = 90.0f;
- actor->fwork[0] = 50.0f;
- actor->fwork[1] = 6.5f;
- if (actorIndex == 10) {
- actor->iwork[14] = 1;
- }
- if (actorIndex == 1) {
- actor->unk_0B8 = 1;
- actor->unk_046 = 0xFF;
- actor->unk_0B6 = 1000;
+ if (gCsFrameCount > 50) {
+ D_8017835C = 3;
+ D_80178358 = 0;
}
- Object_SetInfo(&actor->info, actor->obj.id);
- Audio_PlaySfx(0x3100000C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- Audio_PlaySfx(0x09000002, actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
-}
-
-static Vec3f D_i6_801A6878[4] = {
- { 1500.0f, 15000.0f, 0.0f },
- { 0.0f, 15000.0f, -600.0f },
- { -400.0f, 14950.0f, 0.0f },
- { 500.0f, 14930.0f, -300.0f },
-};
-
-void func_i6_80193AE4(s32 actorIndex) {
- Actor* actor = &gActors[actorIndex];
+ Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, -((player->unk_120 + player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
+ vec.x = 0.0f;
+ vec.y = 0.0f;
+ vec.z = player->unk_0D0 + player->unk_110;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &vec, &vel);
+ player->vel.x = vel.x;
+ player->vel.z = vel.z;
+ player->vel.y = vel.y;
+ player->pos.x += player->vel.x;
+ player->pos.y += player->vel.y;
+ player->pos.z += player->vel.z;
- Actor_Initialize(actor);
- actor->obj.status = OBJ_ACTIVE;
- actor->obj.id = OBJ_ACTOR_195;
- actor->obj.pos.x = D_i6_801A6878[actorIndex].x;
- actor->obj.pos.y = D_i6_801A6878[actorIndex].y;
- actor->obj.pos.z = D_i6_801A6878[actorIndex].z;
- Object_SetInfo(&actor->info, actor->obj.id);
- if (actorIndex == 0) {
- actor->unk_0B8 = 200;
- actor->unk_0B6 = 1;
- Audio_PlaySfx(0x11030010, actor->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- return;
- }
- actor->iwork[11] = 1;
- actor->fwork[7] = Rand_ZeroOne() * 360.0f;
- actor->fwork[8] = Rand_ZeroOne() * 360.0f;
- actor->unk_0B8 = 100;
- Audio_PlaySfx(0x3100000C, actor->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
+ player->unk_138 = player->pos.z;
+ player->camEye.x = 50.0f;
+ player->camEye.y = 1800.0f;
+ player->camEye.z = 9000.0f;
+ player->camAt.x = player->pos.x;
+ player->camAt.y = player->pos.y;
+ player->camAt.z = player->pos.z;
}
-extern s32 D_fake_i6_80196D00;
-
-void func_i6_80193C4C(Player* player) {
+void func_i6_80196D88(Player* player) {
s32 i;
- s32 sp90;
+ f32 var_fa0;
+ f32 sp94;
+ f32 sp90;
f32 sp8C;
- Boss* boss = &gBosses[0];
+ f32 temp_fv1;
f32 sp84;
- f32 sp80;
- Vec3f sp74;
- Vec3f sp68;
- s32 temp_v0_2;
+ s32 pad[3];
+ f32 sp74;
+ f32 sp70;
+ Vec3f sp64;
+ Vec3f sp58;
+ s32 pad2;
+
+ Math_SmoothStepToF(&player->unk_110, 0.0f, 0.1f, 1.5f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 1.5f, 0.0f);
+ Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 1.5f, 0.0f);
+ var_fa0 = -player->unk_120;
+ temp_fv1 = player->unk_0EC;
+ if (var_fa0 < -90.0f) {
+ var_fa0 = 0.0f;
+ }
+ sp70 = 0.0f;
+ sp74 = 0.0f;
+
+ if (temp_fv1 < -5.0f) {
+ sp74 = -temp_fv1;
+ }
+ if (temp_fv1 > 5.0f) {
+ sp70 = temp_fv1;
+ }
+
+ Math_SmoothStepToF(&player->wings.unk_04, -var_fa0 + sp74, 0.1f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&player->wings.unk_08, -var_fa0 - sp74, 0.1f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&player->wings.unk_0C, -var_fa0 + sp70, 0.1f, 100.0f, 0.0f);
+ Math_SmoothStepToF(&player->wings.unk_10, -var_fa0 - sp70, 0.1f, 100.0f, 0.0f);
+ sp94 = player->pos.x - gBosses[0].obj.pos.x;
+ sp90 = player->pos.y - (gBosses[0].obj.pos.y + 700.0f);
+ sp8C = player->pos.z - gBosses[0].obj.pos.z;
- Math_SmoothStepToF(D_80177A48, 1.0f, 1.0f, 0.01f, 0.0f);
- player->wings.unk_04 = player->wings.unk_08 = player->wings.unk_0C = player->wings.unk_10 = 0.0f;
switch (player->unk_1D0) {
case 0:
- gCsFrameCount = 0;
+ player->unk_1D0++;
+ player->wings.unk_04 = player->wings.unk_0C = player->wings.unk_08 = player->wings.unk_10 = 0.0f;
player->wings.unk_2C = 1;
D_80177A48[0] = 0.0f;
- if (player->unk_4D8 > 180.0f) {
- player->unk_4D8 -= 360.0f;
+ D_80177A48[1] = 0.1f;
+ D_80177A48[3] = 0.0f;
+ D_80177A48[4] = 0.0f;
+ player->timer_1F8 = 0;
+ if ((fabsf(sp94) < 4000.0f) && (fabsf(sp8C) < 4000.0f)) {
+ player->timer_1F8 = 250;
+ sp64.x = 0.0f;
+ sp64.y = 0.0f;
+ sp64.z = 5000.0f;
+ Matrix_RotateY(gCalcMatrix, player->unk_114, 0);
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp64, &sp58);
+ D_80177A48[5] = sp58.x;
+ D_80177A48[6] = sp58.z;
+ }
+ if (D_8017827C == 2) {
+ player->timer_1FC = 240;
+ } else {
+ player->timer_1FC = 180;
}
- player->unk_1D0++;
- player->timer_1F8 = 50;
- player->vel.z = -40.0f;
+ func_800182F4(0x103C00FF);
+ func_800182F4(0x113C00FF);
/* fallthrough */
case 1:
- Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
- Math_SmoothStepToF(&boss->vel.z, -40.0f, 1.0f, 1.0f, 0.0f);
- Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 10.0f, 0.0f);
- Math_SmoothStepToF(&player->vel.x, 0.0f, 1.0f, 3.0f, 0.0f);
- Math_SmoothStepToF(&player->vel.y, 0.0f, 1.0f, 3.0f, 0.0f);
- Math_SmoothStepToF(&player->camEye.x, player->pos.x, 0.1f, 15.0f, 0.0f);
- Math_SmoothStepToF(&player->camEye.y, player->pos.y + 30.0f, 0.1f, 15.0f, 0.0f);
- if (player->timer_1F8 == 0) {
- player->pos.y += __sinf(player->unk_0E4 * M_DTOR) * 15.0f;
- Math_SmoothStepToF(&player->unk_0E4, 180.0f, 0.1f, 5.0f, 0.0f);
- Math_SmoothStepToF(&player->vel.z, 40.0f, 1.0f, 2.0f, 0.0f);
- } else {
- Math_SmoothStepToF(&player->unk_08C, 0.0f, 1.0f, 5.0f, 0.0f);
- Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 10.0f, 0.0f);
+ if (D_8017827C == 2) {
+ D_8017835C = 2;
+ D_80178358 = 0;
+ D_80178348 = D_80178350 = D_80178354 = 255;
}
- player->camEye.z += player->vel.z * 0.5f;
- switch (gCsFrameCount) {
- case 80:
- func_8007A568(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 40.0f);
- func_8007A6F0(&boss->obj.pos, 0x2940C00A);
- /* fallthrough */
- case 85:
- case 90:
- func_8007B344(boss->obj.pos.x, boss->obj.pos.y, boss->obj.pos.z, 250.0f, 6);
- break;
- case 86:
- Object_Kill(&boss->obj, boss->sfxPos);
- D_80177AB0 = 0;
- break;
- case 111:
- player->unk_1D0 = 2;
- Audio_PlaySfx(0x09000002, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- player->unk_190 = player->unk_194 = 7.0f;
- D_80177A48[0] = 0.0f;
- D_80177A48[1] = 0.0f;
- D_80177A48[2] = 0.5f;
- D_80177A48[3] = 1000.0f;
- D_80177A48[4] = D_80177A48[5] = D_80177A48[6] = D_80177A48[7] = 0.0f;
- D_80177A48[8] = 1.5f;
- gCsFrameCount = 0;
- break;
+ Math_SmoothStepToF(&D_80177A48[1], 0.8f, 1.0f, 0.05f, 0.0f);
+ Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
+ if (player->timer_1F8 == 1) {
+ D_80177A48[4] = 0.0f;
}
- D_801779A0 = gBosses[0].obj.pos.x;
- D_801779B8 = gBosses[0].obj.pos.y;
- D_801779C0 = gBosses[0].obj.pos.z + D_80177D20;
+ if (player->timer_1F8 != 0) {
+ sp94 = player->pos.x - (gBosses[0].obj.pos.x + D_80177A48[5]);
+ sp90 = player->pos.y - (gBosses[0].obj.pos.y + 700.0f);
+ sp8C = player->pos.z - (gBosses[0].obj.pos.z + D_80177A48[6]);
+ }
+ sp84 = Math_RadToDeg(Math_Atan2F(sp94, sp8C));
+ sp8C = sqrtf(SQ(sp94) + SQ(sp8C));
+ Math_SmoothStepToAngle(&player->unk_120, Math_RadToDeg(-Math_Atan2F(sp90, sp8C)), 0.1f, D_80177A48[4],
+ 0.0f);
+ Math_SmoothStepToF(&player->unk_0EC,
+ Math_SmoothStepToAngle(&player->unk_114, sp84, 0.1f, D_80177A48[4], 0.0f) * 20.0f, 0.1f,
+ 3.0f, 0.0f);
+ Math_SmoothStepToF(&D_80177A48[4], 3.0f, 1.0f, 0.1f, 0.0f);
+ Matrix_RotateX(gCalcMatrix, -(D_PI / 9), 0);
+ Matrix_RotateY(gCalcMatrix, (D_80177A48[3] + player->unk_114) * M_DTOR, 1);
+ D_80177A48[3] += 1.0f;
+ sp64.x = 0.0f;
+ sp64.y = 0.0f;
+ sp64.z = 400.0f;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp64, &sp58);
+ D_80177978 = player->pos.x + sp58.x;
+ D_80177980 = player->pos.y + sp58.y;
+ D_80177988 = player->pos.z + sp58.z;
+ Math_SmoothStepToF(D_80177A48, 0.5f, 1.0f, 0.01f, 0.0f);
Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 3.0f, 0.0f);
- break;
- case 2:
- player->unk_190 = D_80177A48[8];
- sp90 = 0;
- sp68.x = (Rand_ZeroOne() - 0.5f) * 150.0f;
- sp68.y = (Rand_ZeroOne() - 0.5f) * 150.0f;
- sp68.z = 0.0f;
- if (gCsFrameCount == 50) {
- Audio_PlaySfx(0x11403071, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- func_8001D400(0);
- }
- if (gCsFrameCount > 40) {
- sp90 = 1;
- }
- if (gCsFrameCount < 30) {
- Math_SmoothStepToF(&D_80177A48[2], 0.5f, 1.0f, 0.05f, 0.0f);
- } else if (gCsFrameCount <= 150) {
- Math_SmoothStepToF(&D_80177A48[1], 300.0f, 0.1f, D_80177A48[5], 0.0f);
- Math_SmoothStepToF(&D_80177A48[2], 0.95f, 1.0f, 0.05f, 0.0f);
- Math_SmoothStepToF(&D_80177A48[3], 300.0f, 0.1f, 5.0f, 0.0f);
- if (gCsFrameCount == 150) {
- D_80177A48[5] = 0.0f;
- }
- } else {
- Math_SmoothStepToF(&D_80177A48[1], 0.0f, 0.1f, D_80177A48[5], 0.0f);
- Math_SmoothStepToF(&D_80177A48[2], 0.85f, 1.0f, 0.01f, 0.0f);
- Math_SmoothStepToF(&D_80177A48[3], 200.0f, 0.1f, 5.0f, 0.0f);
- D_80177A48[4] += 4.5f;
- D_80177AB0 = 2;
- Matrix_RotateZ(gCalcMatrix, 2.0f * (Rand_ZeroOne() * M_PI), 0);
- sp74.x = Rand_ZeroOne() * 50.0f + 120.0f;
- sp74.y = 0.0f;
- sp74.z = 0.0f;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68);
- }
- Math_SmoothStepToF(&D_80177A48[5], 3.0f, 1.0f, 0.05f, 0.0f);
- player->camEye.z += player->vel.z * D_80177A48[2];
- if (gCsFrameCount > 230) {
- player->unk_08C -= 7.0f;
- }
- if (gCsFrameCount > 230) {
- Math_SmoothStepToF(&D_80177A48[7], 3.0f, 1.0f, 0.1f, 0.0f);
- player->unk_034 -= D_80177A48[7];
- }
-
- for (i = 0; i < sp90; i++) {
- func_8007797C(player->pos.x + sp68.x, player->pos.y + sp68.y,
- player->pos.z - (D_80177A48[3] + D_80177A48[4]), 0.0f, 0.0f, 50.0f,
- (Rand_ZeroOne() * 2.5f) + 2.5f);
- }
+ if ((player->timer_1F8 == 0) && (fabsf(sp94) < 50.0f) && (fabsf(sp8C) < 50.0f)) {
+ player->unk_1D0++;
+ D_80177A48[2] = 0.75f;
+ D_80177A48[3] = 0.0f;
+ D_80177A48[4] = 0.0f;
- Math_SmoothStepToF(&player->camEye.x, D_80177A48[1] + player->pos.x, 0.1f, 15.0f, 0.0f);
- Math_SmoothStepToF(&player->camEye.y, player->pos.y + 30.0f, 0.1f, 15.0f, 0.0f);
- Math_SmoothStepToF(&player->unk_0EC, -180.0f, 0.02f, D_80177A48[6], 0.0f);
- Math_SmoothStepToF(&D_80177A48[6], 3.0f, 1.0f, 0.05f, 0.0f);
- D_801779A0 = player->pos.x;
- D_801779B8 = player->pos.y;
- D_801779C0 = player->unk_138 + D_80177D20;
- if (gCsFrameCount > 200) {
- player->unk_25C += 0.03f;
- if (player->unk_25C > 0.6f) {
- player->unk_25C = 0.6f;
+ if (player->unk_120 >= 180.0f) {
+ player->unk_120 -= 360.0f;
}
- Math_SmoothStepToF(&player->unk_034, 3.0f, 0.5f, 0.1f, 0.0f);
- Math_SmoothStepToF(D_801779A8, 70.0f, 1.0f, 2.0f, 0.0f);
- }
-
- switch (gCsFrameCount) {
- case 60:
- for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
- if ((gEffects[i].obj.id == OBJ_EFFECT_383) && (gEffects[i].obj.status == OBJ_ACTIVE)) {
- Object_Kill(&gEffects[i].obj, gEffects[i].sfxPos);
- break;
- }
- }
- break;
- case 25:
- for (i = 0; i < 12; i++) {
- func_i6_80193668(&gObjects80[i], player->pos.x, player->pos.y,
- (player->camEye.z - D_80177D20) + (2195.0f * i), i);
- }
- break;
- case 150:
- Audio_PlaySfx(0x1900602A, D_800C5D28, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- break;
- case 340:
- func_8001A55C(player->sfxPos, 0x11403071);
- func_8001D400(0);
- D_800D2F68 = 0;
- gBlurAlpha = 0xFF;
- gCurrentLevel = LEVEL_VENOM_2;
- D_8017827C = 1;
- gLevelMode = LEVELMODE_ALL_RANGE;
- player->unk_1D0 = 3;
- player->unk_144 = D_80177D20 = 0.0f;
- D_80177AB0 = D_80177A98 = 1;
- player->camEye.x = 1200.0f;
- player->camEye.z = 1200.0f;
- player->camEye.y = 1800.0f;
- D_801779A0 = 0.0f;
- D_801779B8 = 620.0f;
- D_801779C0 = 0.0f;
- player->unk_034 = 0.0f;
- player->unk_234 = 0;
- D_80177A48[0] = 1.0f;
- func_800A6148();
- gObjects58 = Memory_Allocate(200 * sizeof(Object_58));
- for (i = 0; i < 200; i++) {
- gObjects58[i].obj.status = OBJ_FREE;
- }
- func_i6_80193710();
- D_8017782C = 1;
- func_800A594C();
- D_80178348 = D_80178350 = D_80178354 = 0;
- D_80178340 = D_80178358 = 255;
- player->timer_1F8 = 2;
- gCsFrameCount = 0;
- D_80177A48[1] = 0.0f;
- break;
+ Audio_PlaySfx(0x09000002, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ player->unk_194 = 5.0f;
+ player->unk_190 = 5.0f;
+ gCsFrameCount = 0;
+ func_8001D410(0);
}
break;
- case 3:
- if (player->timer_1F8 == 0) {
- D_80178348 = D_80178350 = D_80178354 = 0;
- D_80178340 = D_80178358 = 0;
- } else {
- D_80178348 = D_80178350 = D_80178354 = 0;
- D_80178340 = D_80178358 = 255;
- }
-
- if ((gCsFrameCount == 20) && (D_800D2F68 != 0)) {
- func_i6_801939A0(1);
- }
- if (gCsFrameCount == 40) {
- func_i6_801939A0(10);
- Audio_PlaySfx(0x2940F026, boss->sfxPos, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
- D_80178480 = 30;
- gOverlayStage = 1;
- D_Timer_80177BD0[0] = 30;
- }
- if (gCsFrameCount > 40) {
- for (i = 0; i < 3; i++) {
- func_8007797C(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 150.0f), boss->obj.pos.y + 500.0f,
- boss->obj.pos.z + ((Rand_ZeroOne() - 0.5f) * 150.0f), (Rand_ZeroOne() - 0.5f) * 10.0f,
- 60.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() * 5.5f) + 5.5f);
- }
- Math_SmoothStepToF(&D_801779B8, gActors[10].obj.pos.y, 1.0f, D_80177A48[1], 0.0f);
- Math_SmoothStepToF(&D_80177A48[1], 1000.0f, 1.0f, 5.0f, 0.0f);
+ case 2:
+ player->unk_190 = 2.0f;
+ Math_SmoothStepToF(&player->unk_120, 270.0f, 0.1f, D_80177A48[2], 0.0f);
+ Math_SmoothStepToF(&D_80177A48[2], 4.0f, 1.0f, 0.05f, 0.0f);
+ if (player->unk_120 > 80.0f) {
+ Math_SmoothStepToF(&player->unk_12C, 10000.0f, 0.1f, 8.0f, 0.0f);
+ }
+ if (player->unk_120 > 250.0f) {
+ Math_SmoothStepToF(&player->pos.x, 0.0f, 0.3f, D_80177A48[3], 0.0f);
+ Math_SmoothStepToF(&player->pos.z, 0.0f, 0.3f, D_80177A48[3], 0.0f);
+ Math_SmoothStepToF(&D_80177A48[3], 30.0f, 1.0f, 1.0f, 0.0f);
+ }
+ if (player->unk_120 > 200.0f) {
+ Math_SmoothStepToF(&D_80177A48[4], 20.0f, 1.0f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&D_80177978, player->pos.x, 0.1f, D_80177A48[4], 0.0f);
+ Math_SmoothStepToF(&D_80177980, player->pos.y + 200.0f, 0.1f, D_80177A48[4], 0.0f);
+ Math_SmoothStepToF(&D_80177988, player->pos.z, 0.1f, D_80177A48[4], 0.0f);
} else {
- Math_SmoothStepToF(&player->camEye.z, 1640.0f, 0.05f, 50.0f, 0.0f);
- Math_SmoothStepToF(&player->camEye.y, 110.0f, 0.05f, 50.0f, 0.0f);
- Math_SmoothStepToF(&player->camEye.x, 0.0f, 0.05f, 50.0f, 0.0f);
- Math_SmoothStepToF(&D_801779B8, 630.0f, 0.05f, 50.0f, 0.0f);
- }
-
- if (gCsFrameCount == 70) {
- func_8001D444(0, 0x8040, 0, 0xFF);
- }
- if (gCsFrameCount == 150) {
- player->unk_1D0++;
- D_80177A48[0] = 1.0f;
- D_80177A48[1] = 1000.0f;
- D_80177A48[2] = 0;
- D_80177A48[3] = 1.0f;
- gActors[10].obj.pos.y = 1500.0f;
- gActors[10].unk_0F4.z = 180.0f;
- D_80177AB0 = 0;
- gFogFar = 1030;
- D_i6_801A7F40 = gLight1R;
- D_i6_801A7F44 = gLight1G;
- D_i6_801A7F48 = gLight1B;
- D_i6_801A7F4C = gAmbientR;
- D_i6_801A7F50 = gAmbientG;
- D_i6_801A7F54 = gAmbientB;
- D_801784D4 = -50.0f;
- D_80177930 = 1;
- for (i = 0; i < 200; i++) {
- gObjects58[i].obj.status = OBJ_FREE;
- }
- }
- break;
- case 4:
- player->unk_034 += D_80177A48[3];
- if (gCsFrameCount > 190) {
- Math_SmoothStepToF(&D_80177A48[3], 0.3f, 0.05f, 0.02f, 0.0f);
- }
- if (gCsFrameCount > 205) {
- Math_SmoothStepToF(&D_i6_801A7F40, 130.0f, 1.0f, 10.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F44, 160.0f, 1.0f, 10.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F48, 80.0f, 1.0f, 10.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F4C, 10.0f, 1.0f, 5.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F50, 10.0f, 1.0f, 5.0f, 0.0f);
- Math_SmoothStepToF(&D_i6_801A7F54, 10.0f, 1.0f, 5.0f, 0.0f);
- }
- gLight1R = D_i6_801A7F40;
- gLight1G = D_i6_801A7F44;
- gLight1B = D_i6_801A7F48;
- gAmbientR = D_i6_801A7F4C;
- gAmbientG = D_i6_801A7F50;
- gAmbientB = D_i6_801A7F54;
- Math_SmoothStepToF(&D_80177A48[1], -5000.0f, 0.05f, 15.0f, 0.0f);
- player->camEye.x = gActors[10].obj.pos.x + 50.0f;
- player->camEye.y = gActors[10].obj.pos.y + D_80177A48[1];
- player->camEye.z = gActors[10].obj.pos.z;
- D_801779A0 = gActors[10].obj.pos.x;
- D_801779B8 = gActors[10].obj.pos.y + 50.0f;
- D_801779C0 = gActors[10].obj.pos.z;
- if (!(gGameFrameCount & 3) && (gCsFrameCount < 215)) {
- func_8007797C(boss->obj.pos.x + ((Rand_ZeroOne() - 0.5f) * 350.0f), boss->obj.pos.y + 500.0f,
- boss->obj.pos.z + ((Rand_ZeroOne() - 0.5f) * 350.0f), (Rand_ZeroOne() - 0.5f) * 10.0f,
- 60.0f, (Rand_ZeroOne() - 0.5f) * 10.0f, (Rand_ZeroOne() * 5.5f) + 15.5f);
- }
- sp80 = Rand_ZeroOne() * 40.0f;
- for (i = 0; i < 36; i += 4) {
- sp8C = __sinf((i * 10.0f * M_DTOR) + sp80) * D_80177A48[2];
- sp84 = __cosf((i * 10.0f * M_DTOR) + sp80) * D_80177A48[2];
- func_8007797C(sp8C, 300.0f, sp84, 0.0f, 0.0f, 0.0f, (Rand_ZeroOne() * 5.5f) + 15.5f);
- }
- Math_SmoothStepToF(&D_80177A48[2], 10000.0f, 0.05f, 20.0f, 0.0f);
- if (gCsFrameCount == 220) {
- func_i6_80193AE4(0);
- if (gTeamShields[1] > 0) {
- func_i6_80193AE4(1);
- }
- if (gTeamShields[2] > 0) {
- func_i6_80193AE4(2);
- }
- if (gTeamShields[3] > 0) {
- func_i6_80193AE4(3);
- }
+ Math_SmoothStepToF(&D_80177980, player->pos.y, 0.1f, 2.0f, 0.0f);
}
- if (gCsFrameCount == 190) {
- func_800A5D6C();
- D_80178410 = 1000;
- player->unk_204 = 0;
+ if (gCsFrameCount == 105) {
+ Audio_PlaySfx(0x09000002, player->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
+ player->unk_194 = 5.0f;
+ player->unk_190 = 5.0f;
}
- if (gCsFrameCount == 360) {
- gCsFrameCount = 340;
- player->unk_1D0++;
- D_80177A48[0] = 1.0f;
- D_80177A48[1] = 0.0f;
- D_80177A48[2] = 0.0f;
- D_80177A48[3] = 0.0f;
- D_80177A48[4] = 0.0f;
- player->camEye.x = D_80177978 = 100.0f;
- player->camEye.y = D_80177980 = 14800.0f;
- player->camEye.z = D_80177988 = -1500.0f;
- D_801779A0 = 0.0f;
- D_801779B8 = 15000.0f;
- D_801779C0 = 0;
- player->unk_034 = 0.0f;
- gActors[10].unk_0B8 = 101;
- gActors[10].fwork[0] = 0.0f;
- gActors[10].obj.pos.y = 14500.0f;
- gActors[10].unk_0F4.z = 70.0f;
- gActors[10].unk_0F4.x = gActors[10].unk_0F4.y = 0.0f;
- D_80178340 = D_80178358 = 255;
+ if (gCsFrameCount > 110) {
+ D_80178358 = 255;
+ D_8017835C = 8;
D_80178348 = D_80178350 = D_80178354 = 0;
- player->timer_1F8 = 3;
- D_80178410 = 500;
- }
- if (gCsFrameCount == 250) {
- D_80177840 = 100;
- }
- break;
- case 5:
- if (player->timer_1F8 == 1) {
- D_80178340 = D_80178358 = 0;
- }
- if (D_800D2F68 != 0) {
- if (gCsFrameCount >= 1000) {
- D_801779A0 += D_80177A48[4] * 0.15f;
- D_80177988 += D_80177A48[4];
- Math_SmoothStepToF(&D_80177A48[4], 20.0f, 1.0f, 0.1f, 0.0f);
- } else {
- D_80177988 = gActors[10].obj.pos.z - 20.0f;
- }
- if ((gCsFrameCount >= 920) && (gTeamShields[3] > 0)) {
- if (gCsFrameCount == 920) {
- player->timer_1F8 = 25;
+ if (D_80178340 == 255) {
+
+ for (i = 1; i < ARRAY_COUNT(gTeamShields); i++) {
+ D_80177C38[i] = gSavedTeamShields[i];
+ D_801778F0[i] = gSavedTeamShields[i];
+ gSavedTeamShields[i] = gTeamShields[i];
}
- gActors[10].fwork[19] = __sinf(player->timer_1F8 * 40.0f * M_DTOR) * 5.0f;
- } else {
- if (gCsFrameCount < 850) {
- switch (gCsFrameCount) {
- case 600:
- D_80177A48[2] = 80.0f;
- D_80177A48[3] = -45.0f;
- break;
- case 650:
- D_80177A48[2] = 0.0f;
- break;
- case 680:
- D_80177A48[2] = 45.0f;
- D_80177A48[3] = -20.0f;
- break;
- case 750:
- D_80177A48[2] = 90.0f;
- D_80177A48[3] = -30.0f;
- break;
- case 780:
- D_80177A48[2] = 30.0f;
- D_80177A48[3] = -45.0f;
- break;
- case 830:
- D_80177A48[2] = -20.0f;
- D_80177A48[3] = -25.0f;
- break;
- default:
- // D_80177A48[2] = 0.0f;
- break;
- }
+
+ gNextGameState = GSTATE_PLAY;
+ gNextLevel = LEVEL_VENOM_ANDROSS;
+ if (D_800D3180[gCurrentLevel] != 0) {
+ D_80161A2E = 1;
}
- if (gCsFrameCount > 880) {
- Math_SmoothStepToF(&gActors[10].fwork[19], 0.0f, 0.2f, 2.0f, 0.0f);
- Math_SmoothStepToF(&gActors[10].fwork[20], 0.0f, 0.2f, 2.0f, 0.0f);
- } else {
- Math_SmoothStepToF(&gActors[10].fwork[19], D_80177A48[2], 0.2f, 2.0f, 0.0f);
- Math_SmoothStepToF(&gActors[10].fwork[20], D_80177A48[3], 0.2f, 2.0f, 0.0f);
+ func_8001CA24(0);
+ Audio_KillSfx(player->sfxPos);
+
+ for (i = 0; i < 200; i++) {
+ gObjects58[i].obj.status = OBJ_FREE;
}
}
- D_80177A48[0] = 0.01f;
- Math_SmoothStepToF(&D_80177A48[1], 10.0f, 1.0f, 0.1f, 0.0f);
- Math_SmoothStepToF(&player->camEye.x, gActors[10].obj.pos.x - 50.0f, D_80177A48[0], D_80177A48[1], 0);
- Math_SmoothStepToF(&player->camEye.y, gActors[10].obj.pos.y + 10.0f, D_80177A48[0], D_80177A48[1], 0);
- Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], D_80177A48[1], 0);
- D_801779B8 = __sinf(gGameFrameCount * 5.5f * M_DTOR) + 15000.0f;
- } else {
- D_80177978 -= 1.0f;
- D_80177980 += 0.3f;
- D_80177988 += 4.0f;
- D_801779B8 = (__sinf(gGameFrameCount * 1.5f * M_DTOR) * 10.0f) + 15000.0f;
- 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);
- }
- if (D_800D2F68 != 0) {
- switch (gCsFrameCount) {
- case 400:
- func_800BA808(gMsg_ID_19400, RCID_PEPPY);
- break;
- case 500:
- func_800BA808(gMsg_ID_19410, RCID_SLIPPY);
- break;
- case 600:
- func_800BA808(gMsg_ID_19420, RCID_FALCO);
- break;
- case 800:
- func_800BA808(gMsg_ID_19430, RCID_PEPPY);
- break;
- case 900:
- if (gTeamShields[3] > 0) {
- func_800BA808(gMsg_ID_19440, RCID_FOX);
- }
- break;
- case 1050:
- D_80177830 = 1;
- break;
- case 1250:
- D_80177830 = 0;
- break;
- }
- if (gCsFrameCount > 1300) {
- D_80178288[109] += 1.0f;
- D_80178290[109] += 0.5f;
- temp_v0_2 = (s32) (Rand_ZeroOne() * 100.0f);
- D_80178298[109] = FILL_COLOR(D_800C9C3C[temp_v0_2 & 0xF]);
- }
- } else {
- switch (gCsFrameCount) {
- case 400:
- func_800BA808(gMsg_ID_8300, RCID_PEPPY);
- break;
- case 500:
- func_800BA808(gMsg_ID_8310, RCID_SLIPPY);
- break;
- case 600:
- func_800BA808(gMsg_ID_8320, RCID_FALCO);
- gCsFrameCount += 230;
- break;
- case 1050:
- D_80177830 = 1;
- break;
- case 1250:
- D_80177830 = 0;
- break;
- }
}
- if (gCsFrameCount == 1400) {
- func_8001DBD0(40);
- }
- if (gCsFrameCount > 1400) {
- D_8017835C = 4;
- D_80178348 = D_80178350 = D_80178354 = 0;
- D_80178358 = 255;
- if (D_80178340 == 0xFF) {
- gNextGameState = GSTATE_CREDITS;
- D_fake_i6_80196D00 = 0;
- D_800D3180[9] = Play_CheckMedalStatus(200) + 1;
- func_8001DC6C(0, 0x1B);
- }
+ if (gCsFrameCount > 110) {
+ gBosses[0].fwork[1] = 150.0f;
}
break;
- case 100:
- D_80178380[0] -= 4;
- if (D_80178380[0] >= 0x100) {
- D_80178380[0] = 0;
- }
- Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 0);
- Matrix_RotateX(gCalcMatrix, -((player->unk_120 + player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
- sp74.x = 0.0f;
- sp74.y = 0.0f;
- sp74.z = player->unk_0D0;
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68);
- player->vel.x = sp68.x;
- player->vel.z = sp68.z;
- player->vel.y = sp68.y;
- if (player->timer_1F8 == 0) {
- player->state_1C8 = PLAYERSTATE_1C8_3;
- player->unk_014 = 0.2f;
- player->unk_018 = 0.0f;
- player->unk_01C = 0.05f;
- D_80177AB0 = 6;
- D_80161A44 = 12800.0f;
- }
- D_80177A48[0] = 1.0f;
- D_801779A0 = (2.0f * __sinf(gGameFrameCount * 40.0f * M_DTOR)) + player->pos.x;
- D_801779B8 = (2.0f * __sinf(gGameFrameCount * 30.0f * M_DTOR)) + player->pos.y;
- D_801779C0 = (2.0f * __sinf(gGameFrameCount * 50.0f * M_DTOR)) + player->pos.z;
- sp74.x = 0.0f;
- sp74.y = 0.0f;
- sp74.z = D_80177A48[5];
- Math_SmoothStepToF(&D_80177A48[5], -400.0f, 0.05f, 5.0f, 0.0f);
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68);
- D_80177978 = player->pos.x + sp68.x;
- D_80177980 = player->pos.y + sp68.y;
- D_80177988 = player->pos.z + sp68.z;
- 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->unk_12C, 0.0f, 0.1f, 0.7f, 0.0f);
- Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 0.4f, 0.0f);
- break;
}
+ if (player->timer_1FC == 150) {
+ func_800BA808(gMsg_ID_8215, RCID_FOX);
+ func_8001D444(0, 0x803E, 0, 0xFF);
+ }
+ if (player->timer_1FC == 1) {
+ if ((gTeamShields[2] > 0) || (gTeamShields[1] > 0) || (gTeamShields[3] > 0)) {
+ func_800BA808(gMsg_ID_8230, RCID_FALCO);
+ func_800BA808(gMsg_ID_8220, RCID_PEPPY);
+ func_800BA808(gMsg_ID_8240, RCID_SLIPPY);
+ } else {
+ func_800BA808(gMsg_ID_8205, RCID_FOX);
+ }
+ }
+ D_801779A0 = player->pos.x;
+ D_801779B8 = player->pos.y;
+ D_801779C0 = player->unk_138;
+ Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 0);
+ Matrix_RotateX(gCalcMatrix, -((player->unk_120 + player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
+ sp64.x = 0.0f;
+ sp64.y = 0.0f;
+ sp64.z = player->unk_0D0 + player->unk_110;
+ Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp64, &sp58);
+ player->vel.x = sp58.x;
+ player->vel.z = sp58.z;
+ player->vel.y = sp58.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_138 = player->pos.z;
player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 15.0f, 0.0f);
- Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 20.0f, 0.0f);
- 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);
-}
-
-void func_i6_80195E44(Actor* actor) {
- Vec3f sp44;
- Vec3f sp38;
- f32 sp34;
-
- sp34 = 0.0f;
-
- switch (actor->unk_0B8) {
- case 0:
- actor->unk_0F4.z += actor->fwork[1];
- if (gCsFrameCount > 250) {
- Math_SmoothStepToF(&actor->fwork[1], 0.5f, 0.1f, 0.04f, 0.0f);
- } else {
- Math_SmoothStepToF(&actor->fwork[1], -2.0f, 0.1f, 0.04f, 0.0f);
- }
- break;
- case 1:
- actor->unk_0F4.z += actor->fwork[1];
- Math_SmoothStepToF(&actor->fwork[1], -2.0f, 0.1f, 0.04f, 0.0f);
- if (gCsFrameCount == 55) {
- actor->unk_0B8++;
- }
- break;
- case 2:
- Math_SmoothStepToF(&actor->unk_0F4.x, 180.0f, 0.1f, 1.0f, 0.0f);
- Math_SmoothStepToF(&actor->unk_0F4.y, 200.0f, 0.1f, 1.0f, 0.0f);
- actor->unk_046 -= 5;
- if (actor->unk_046 < 0) {
- actor->unk_046 = 0;
- Object_Kill(&actor->obj, actor->sfxPos);
- }
- break;
- case 101:
- Math_SmoothStepToF(&actor->unk_0F4.z, 0.0f, 0.03f, 0.5f, 0.0f);
- Math_SmoothStepToF(&actor->obj.pos.x, 0.0f, 0.03f, 5.0f, 0.0f);
- Math_SmoothStepToF(&actor->obj.pos.y, 15000.0f, 0.03f, 5.0f, 0.0f);
- Math_SmoothStepToF(&actor->obj.pos.z, 0.0f, 0.03f, 5.0f, 0.0f);
- break;
- case 100:
- actor->fwork[7] += 3.0f;
- actor->unk_0F4.z = __sinf(actor->fwork[7] * M_DTOR) * 1.5f;
- actor->fwork[8] += 2.0f;
- sp34 = __sinf(actor->fwork[8] * M_DTOR) * 0.5f;
- break;
- case 200:
- break;
- }
- Matrix_RotateY(gCalcMatrix, (actor->unk_0F4.y + 180.0f) * M_DTOR, 0U);
- Matrix_RotateX(gCalcMatrix, -(actor->unk_0F4.x * M_DTOR), 1U);
- sp44.x = 0.0f;
- sp44.y = 0.0f;
- sp44.z = actor->fwork[0];
- Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38);
- actor->vel.x = sp38.x;
- actor->vel.y = sp38.y + sp34;
- actor->vel.z = sp38.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;
-}
-
-void func_i6_801961AC(void) {
- Boss* boss = &gBosses[0];
-
- Boss_Initialize(boss);
- boss->obj.status = OBJ_ACTIVE;
- boss->actionState = 21;
- boss->obj.id = OBJ_BOSS_321;
- Object_SetInfo(&boss->info, boss->obj.id);
- gCsFrameCount = 599;
+ Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 5.0f, 0.0f);
+ Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], 100.0f, 0);
+ Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], 100.0f, 0);
+ Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], 100.0f, 0);
+ Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[1], 100.0f, 0);
+ Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[1], 100.0f, 0);
+ Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[1], 100.0f, 0);
+ 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);
}
diff --git a/src/overlays/ovl_i6/sf_i6_2.c b/src/overlays/ovl_i6/sf_i6_2.c
deleted file mode 100644
index 31116d15..00000000
--- a/src/overlays/ovl_i6/sf_i6_2.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "common.h"
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_80196210.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_8019624C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_80196288.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_801962F4.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_80196314.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_80196968.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_80196BF8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i6/sf_i6_2/func_i6_80196D88.s")
diff --git a/yamls/us/overlays.yaml b/yamls/us/overlays.yaml
index 2c72e04b..ba7f83bd 100644
--- a/yamls/us/overlays.yaml
+++ b/yamls/us/overlays.yaml
@@ -140,22 +140,22 @@
symbol_name_format: i6_$VRAM
subsegments:
- [0xE9F1D0, c, fox_i6]
- - [0xE9F1E0, c, fox_ve2]
- - [0xEADEC0, c, sf_i6_2]
+ - [0xE9F1E0, c, fox_andross]
+ - [0xEADEC0, c, fox_ve2]
- [0xEAF7E0, c, fox_sy]
- [0xEBD210, c, sf_i6_4]
- [0xEBE400, .data, fox_i6]
- - [0xEBE410, .data, fox_ve2]
- - [0xEBE560, data, sf_i6_2]
+ - [0xEBE410, .data, fox_andross]
+ - [0xEBE560, .data, fox_ve2]
- [0xEBE5C0, data, fox_sy]
- [0xEBE830, data, sf_i6_4]
- [0xEBE840, .rodata, fox_i6]
- - [0xEBE850, .rodata, fox_ve2]
- - [0xEBF0F0, .rodata, sf_i6_2]
+ - [0xEBE850, .rodata, fox_andross]
+ - [0xEBF0F0, .rodata, fox_ve2]
- [0xEBF130, .rodata, fox_sy]
- [0xEBFB80, .rodata, sf_i6_4]
- { start: 0xEBFBE0, type: .bss, vram: 0x801A7F30, name: fox_i6 }
- - { type: .bss, vram: 0x801A7F40, name: fox_ve2 }
+ - { type: .bss, vram: 0x801A7F40, name: fox_andross }
- { type: bss, vram: 0x801A8440, name: fox_sy }
- name: ovl_menu