From 5bda92de97922f060c2c7ad032aca686bdd1715c Mon Sep 17 00:00:00 2001 From: Alejandro Asenjo Nitti <96613413+sonicdcer@users.noreply.github.com> Date: Fri, 10 May 2024 23:28:18 -0300 Subject: [PATCH] Katina: Boss States and tweaks (#237) * Boss states and tweaks * fixes * roll back filename changes * variable name fix * Katina_Init --- assets/yaml/us/ast_katina.yaml | 8 +- assets/yaml/us/ast_text.yaml | 12 +-- include/i4.h | 2 +- src/engine/fox_play.c | 2 +- src/engine/fox_std_lib.c | 14 +-- src/overlays/ovl_i4/fox_ka.c | 172 ++++++++++++++++----------------- 6 files changed, 102 insertions(+), 108 deletions(-) diff --git a/assets/yaml/us/ast_katina.yaml b/assets/yaml/us/ast_katina.yaml index efc3f21c..09fe56ed 100644 --- a/assets/yaml/us/ast_katina.yaml +++ b/assets/yaml/us/ast_katina.yaml @@ -20,8 +20,8 @@ D_KA_6000000: D_KA_6001260: { type: TEXTURE, format: IA8, width: 8, height: 8, offset: 0x6001260, ctype: u8, symbol: D_KA_6001260 } -aDestroyedHatch1DL: - { type: GFX, offset: 0x60012A0, symbol: aDestroyedHatch1DL } +aKaDestroyedHatchDL: + { type: GFX, offset: 0x60012A0, symbol: aKaDestroyedHatchDL } aKaEnemy1DL: { type: GFX, offset: 0x6001530, symbol: aKaEnemy1DL } @@ -57,8 +57,8 @@ D_KA_60062F8: D_KA_6006AF8: { type: TEXTURE, format: RGBA16, width: 32, height: 32, offset: 0x6006AF8, ctype: u16, symbol: D_KA_6006AF8 } -aDestroyedMothershipDL: - { type: GFX, offset: 0x6007300, symbol: aDestroyedMothershipDL } +aKaDestroyedSaucererDL: + { type: GFX, offset: 0x6007300, symbol: aKaDestroyedSaucererDL } D_KA_6009250: { type: GFX, offset: 0x6009250, symbol: D_KA_6009250 } diff --git a/assets/yaml/us/ast_text.yaml b/assets/yaml/us/ast_text.yaml index 6cdf8a6d..faaadd71 100644 --- a/assets/yaml/us/ast_text.yaml +++ b/assets/yaml/us/ast_text.yaml @@ -293,16 +293,16 @@ aLargeText_Z: { type: TEXTURE, ctype: u8, format: IA8, width: 16, height: 15, offset: 0x5009A60, symbol: aLargeText_Z } # s (large) -aLargeText_s: - { type: TEXTURE, ctype: u8, format: IA8, width: 16, height: 15, offset: 0x5009B50, symbol: aLargeText_s } +aLargeText_s_: + { type: TEXTURE, ctype: u8, format: IA8, width: 16, height: 15, offset: 0x5009B50, symbol: aLargeText_s_ } # t (large) -aLargeText_t: - { type: TEXTURE, ctype: u8, format: IA8, width: 16, height: 15, offset: 0x5009C40, symbol: aLargeText_t } +aLargeText_t_: + { type: TEXTURE, ctype: u8, format: IA8, width: 16, height: 15, offset: 0x5009C40, symbol: aLargeText_t_ } # o (small) -aSmallText_o: - { type: TEXTURE, ctype: u8, format: IA8, width: 8, height: 8, offset: 0x5009D30, symbol: aSmallText_o } +aSmallText_o_: + { type: TEXTURE, ctype: u8, format: IA8, width: 8, height: 8, offset: 0x5009D30, symbol: aSmallText_o_ } # p (small) aSmallText_p: diff --git a/include/i4.h b/include/i4.h index a1b9069b..3f8a3bfd 100644 --- a/include/i4.h +++ b/include/i4.h @@ -27,7 +27,7 @@ void Bolse_80191ED8(void); void Bolse_DrawDynamicGround(void); void Katina_BossSetup(Boss *); void Katina_UpdateEvents(Actor*); -void Katina_BossInit(void); +void Katina_Init(void); void SectorZ_80199900(Actor *, s32); void SectorZ_Missile_Update(Actor*); void SectorZ_UpdateEvents(Actor*); diff --git a/src/engine/fox_play.c b/src/engine/fox_play.c index 617a6412..3d70b0e3 100644 --- a/src/engine/fox_play.c +++ b/src/engine/fox_play.c @@ -2671,7 +2671,7 @@ void Play_Init(void) { ActorAllRange_SpawnTeam(); break; case LEVEL_KATINA: - Katina_BossInit(); + Katina_Init(); if (!D_ctx_8017782C) { ActorAllRange_SpawnTeam(); } diff --git a/src/engine/fox_std_lib.c b/src/engine/fox_std_lib.c index 6983f5b6..a2bffd40 100644 --- a/src/engine/fox_std_lib.c +++ b/src/engine/fox_std_lib.c @@ -819,12 +819,12 @@ char sLargeChars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ. 0123456789st-"; u8 sLargeCharWidths[] = { 15, 14, 14, 13, 13, 13, 14, 14, 5, 12, 14, 12, 16, 14, 15, 13, 16, 14, 13, 13, 13, 16, 17, 17, 16, 13, 5, 16, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 9, 14, 0 }; u8* sLargeCharTex[] = { - aLargeText_A, aLargeText_B, aLargeText_C, aLargeText_D, aLargeText_E, aLargeText_F, aLargeText_G, - aLargeText_H, aLargeText_I, aLargeText_J, aLargeText_K, aLargeText_L, aLargeText_M, aLargeText_N, - aSmallText_O, aLargeText_P, aLargeText_Q, aLargeText_R, aLargeText_S, aLargeText_T, aLargeText_U, - aLargeText_V, aLargeText_W, aLargeText_X, aLargeText_Y, aLargeText_Z, aLargeText_DOT, NULL, - aLargeText_0, aLargeText_1, aLargeText_2, aLargeText_3, aLargeText_4, aLargeText_5, aLargeText_6, - aLargeText_7, aLargeText_8, aLargeText_9, aLargeText_s, aLargeText_t, aLargeText_HYPHEN, + aLargeText_A, aLargeText_B, aLargeText_C, aLargeText_D, aLargeText_E, aLargeText_F, aLargeText_G, + aLargeText_H, aLargeText_I, aLargeText_J, aLargeText_K, aLargeText_L, aLargeText_M, aLargeText_N, + aSmallText_O, aLargeText_P, aLargeText_Q, aLargeText_R, aLargeText_S, aLargeText_T, aLargeText_U, + aLargeText_V, aLargeText_W, aLargeText_X, aLargeText_Y, aLargeText_Z, aLargeText_DOT, NULL, + aLargeText_0, aLargeText_1, aLargeText_2, aLargeText_3, aLargeText_4, aLargeText_5, aLargeText_6, + aLargeText_7, aLargeText_8, aLargeText_9, aLargeText_s_, aLargeText_t_, aLargeText_HYPHEN, }; u8* sLargeNumberTex[] = { aLargeText_0, aLargeText_1, aLargeText_2, aLargeText_3, aLargeText_4, @@ -833,7 +833,7 @@ u8* sLargeNumberTex[] = { u8* sSmallCharTex[] = { NULL, aSmallText_A, aSmallText_B, aSmallText_C, aSmallText_D, aSmallText_E, aSmallText_F, aSmallText_G, aSmallText_H, aSmallText_I, aSmallText_J, aSmallText_K, aSmallText_L, aSmallText_M, aSmallText_N, - aSmallText_o, aSmallText_p, aSmallText_q, aSmallText_r, aSmallText_s, + aSmallText_o_, aSmallText_p, aSmallText_q, aSmallText_r, aSmallText_s, aSmallText_T, aSmallText_U, aSmallText_V, aSmallText_W, aSmallText_X, aSmallText_Y, aSmallText_Z, aSmallTextExclamMark, aSmallText_COLON, aSmallText_HYPHEN, aSmallText_DOT, aSmallText_0, aSmallText_1, aSmallText_2, aSmallText_3, diff --git a/src/overlays/ovl_i4/fox_ka.c b/src/overlays/ovl_i4/fox_ka.c index 5c0f4564..a60df65d 100644 --- a/src/overlays/ovl_i4/fox_ka.c +++ b/src/overlays/ovl_i4/fox_ka.c @@ -130,7 +130,7 @@ typedef enum KaActorFwork { typedef enum KaBosses { /* 0 */ KA_BOSS_BASE, - /* 1 */ KA_BOSS_MOTHERSHIP + /* 1 */ KA_BOSS_SAUCERER } KaBosses; typedef enum KaBossSwork { @@ -178,7 +178,27 @@ typedef enum KaBaseStates { /* 2 */ KA_BASE_STATE_2 } KaBaseStates; -// Particle effects visible while the Mothership is charging it's laser +typedef enum KaSaucererStates { + /* 0 */ SAUCERER_STAND_BY, + /* 1 */ SAUCERER_CS_APPROACH_BASE, + /* 2 */ SAUCERER_CS_CLOSE_UP, + /* 3 */ SAUCERER_CS_OPEN_HATCHES_START, + /* 4 */ SAUCERER_CS_OPEN_HATCHES_END, + /* 5 */ SAUCERER_CS_SEND_ENEMIES, + /* 6 */ SAUCERER_OPEN_HATCHES, + /* 7 */ SAUCERER_SEND_ENEMIES, + /* 10 */ SAUCERER_LOWER_CORE = 10, + /* 11 */ SAUCERER_LASER_CHARGE_START, + /* 12 */ SAUCERER_CS_LASER_CHARGE_END, + /* 15 */ SAUCERER_CS_ROTATE = 15, + /* 16 */ SAUCERER_CS_LASER_FIRE_START, + /* 17 */ SAUCERER_CS_LASER_FIRE_END, + /* 18 */ SAUCERER_CS_LASER_HIT, + /* 20 */ SAUCERER_DEFEAT = 20, + /* 21 */ SAUCERER_CS_FALL_TO_GROUND, +} KaSaucererStates; + +// Particle effects visible while the Saucerer is charging it's laser void Katina_LaserEnergyParticlesSetup(Effect358* this, f32 x, f32 y, f32 z, f32 x2, f32 y2, f32 z2) { f32 yRot; f32 xRot; @@ -214,7 +234,7 @@ void Katina_LaserEnergyParticlesSetup(Effect358* this, f32 x, f32 y, f32 z, f32 Object_SetInfo(&this->info, this->obj.id); } -// Allocation of particle effects visible while the Mothership is charging it's laser +// Particle effects visible while the Saucerer is charging it's laser void Katina_LaserEnergyParticlesSpawn(f32 x, f32 y, f32 z, f32 x2, f32 y2, f32 z2) { s32 i; @@ -237,8 +257,8 @@ void Katina_LaserEnergyParticlesUpdate(Effect358* this) { this->unk_44 += 3; } - if ((fabsf(this->obj.pos.x - gBosses[KA_BOSS_MOTHERSHIP].obj.pos.x) <= 30.0f) && - (fabsf(this->obj.pos.z - gBosses[KA_BOSS_MOTHERSHIP].obj.pos.z) <= 30.0f)) { + if ((fabsf(this->obj.pos.x - gBosses[KA_BOSS_SAUCERER].obj.pos.x) <= 30.0f) && + (fabsf(this->obj.pos.z - gBosses[KA_BOSS_SAUCERER].obj.pos.z) <= 30.0f)) { Object_Kill(&this->obj, this->sfxSource); } } @@ -800,7 +820,7 @@ void Katina_BossSpawnEnemies(Saucerer* this, Vec3f* pos, f32 arg2) { } /** - * Sets the angle for the enemies coming out of the mothership + * Sets the angle for the enemies coming out of the Saucerer */ void Katina_SetOutcomingEnemyAngle(Saucerer* this) { f32 angle; @@ -846,7 +866,7 @@ void Katina_BossUpdate(Saucerer* this) { } /** - * Summon core if all hatches are destroyed or after 3 minutes from mothership appearance. + * Summon core if all hatches are destroyed or after 3 minutes from Saucerer appearance. */ if ((((this->swork[BOSS_HATCH_1_HP] <= 0) && (this->swork[BOSS_HATCH_2_HP] <= 0) && (this->swork[BOSS_HATCH_3_HP] <= 0) && (this->swork[BOSS_HATCH_4_HP] <= 0)) || @@ -861,11 +881,9 @@ void Katina_BossUpdate(Saucerer* this) { } switch (this->state) { - case 0: - /** - * Send Mothership whether you killed 10 enemies or after 2 minutes of gameplay - */ - if (((gHitCount >= 10) || (gAllRangeEventTimer > 3840))) { + // Send Saucerer whether you killed 10 enemies or after 2 minutes of gameplay + case SAUCERER_STAND_BY: + if ((gHitCount >= 10) || (gAllRangeEventTimer > 3840)) { if ((D_edisplay_801615D0.y < 0.0f)) { this->state = 1; @@ -893,9 +911,10 @@ void Katina_BossUpdate(Saucerer* this) { break; /** - * Wait for mothership to aproach the base to start cutscene. + * Wait for Saucerer to be near the base to start cutscene. + * Set checkpoint. */ - case 1: + case SAUCERER_CS_APPROACH_BASE: if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_ACTIVE) || (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_U_TURN)) { if (this->obj.pos.z < 4500.0f) { this->state++; @@ -931,10 +950,7 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Cutscene: Close up - */ - case 2: + case SAUCERER_CS_CLOSE_UP: gPlayer[0].cam.at.y += 0.2f; Math_SmoothStepToF(&D_ctx_801779A8[gMainController], 30.0f, 1.0f, 1.65f, 0.0f); @@ -987,10 +1003,7 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Cutscene: Open hatches. - */ - case 3: + case SAUCERER_CS_OPEN_HATCHES_START: if (this->timer_050 == 0) { this->state++; this->timer_050 = 60; @@ -1002,10 +1015,7 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Cutscene: Hatches opened completely. - */ - case 4: + case SAUCERER_CS_OPEN_HATCHES_END: if (this->timer_050 == 0) { this->state++; this->timer_050 = 100; @@ -1015,10 +1025,10 @@ void Katina_BossUpdate(Saucerer* this) { break; /** - * Cutscene: Boss music starts, enemies coming out of the mothership. + * Cutscene: Boss music starts, enemies coming out of the Saucerer. * Return control to the player after cutscene ends and close the hatches. */ - case 5: + case SAUCERER_CS_SEND_ENEMIES: if (this->timer_050 == 1) { AUDIO_PLAY_BGM(NA_BGM_BOSS_KA); } @@ -1062,10 +1072,10 @@ void Katina_BossUpdate(Saucerer* this) { break; /** - * Open hatches for 10 seconds when there's less than 30 enemies - * or after 40 seconds have passed + * Open hatches for 10 seconds when there's less + * than 30 enemies or after 40 seconds have passed */ - case 6: + case SAUCERER_OPEN_HATCHES: if (this->timer_052 == 1) { AUDIO_PLAY_SFX(NA_SE_KA_UFO_HATCH_STOP, this->sfxSource, 0); } @@ -1098,7 +1108,7 @@ void Katina_BossUpdate(Saucerer* this) { * Send out more enemies. * Close hatches after 10 seconds. */ - case 7: + case SAUCERER_SEND_ENEMIES: Math_SmoothStepToF(&this->fwork[10], 0.0f, 0.1f, 0.5f, 0.0f); if ((this->timer_050 < 200) && ((this->timer_050 % 16) == 0)) { @@ -1121,10 +1131,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Start countdown and lower down core. - */ - case 10: + // Start countdown and lower down core. + case SAUCERER_LOWER_CORE: if (this->timer_050 == 0) { this->fwork[BOSS_CORE_TARGET_LEVEL] = 200.0f; AUDIO_PLAY_SFX(NA_SE_KA_UFO_CORE_OPEN, this->sfxSource, 0); @@ -1140,10 +1148,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Set a 1 minute timer for mothership attack. - */ - case 11: + // Set a 1 minute timer for Saucerer attack. + case SAUCERER_LASER_CHARGE_START: if (this->timer_050 == 0) { AUDIO_PLAY_SFX(NA_SE_KA_UFO_HATCH_STOP, this->sfxSource, 0); this->state = 12; @@ -1154,10 +1160,10 @@ void Katina_BossUpdate(Saucerer* this) { break; /** - * Start mothership attack after 13 seconds from Bill's warning + * Start Saucerer attack after 13 seconds from Bill's warning * Start cutscene for base destruction. */ - case 12: + case SAUCERER_CS_LASER_CHARGE_END: if (this->timer_050 == 400) { Radio_PlayMessage(gMsg_ID_18065, RCID_BILL); } @@ -1198,10 +1204,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Rotate mothership into fire position. - */ - case 15: + // Rotate Saucerer into fire position. + case SAUCERER_CS_ROTATE: if (this->timer_050 == 700) { Radio_PlayMessage(gMsg_ID_18070, RCID_BILL); } @@ -1257,10 +1261,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Cutscene: Close up, start mothership attack. - */ - case 16: + // Cutscene: Close up, start Saucerer attack. + case SAUCERER_CS_LASER_FIRE_START: Math_SmoothStepToF(&D_ctx_801779A8[gMainController], 30.0f, 1.0f, 1.6f, 0.0f); Math_SmoothStepToF(&gPlayer[0].cam.eye.z, 0.0f, 0.05f, 5.0f, 0.0f); this->fwork[BOSS_FWORK_13] += 0.1f; @@ -1340,10 +1342,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Cutscene: Mothership fires laser to the base. - */ - case 17: + // Cutscene: Saucerer fires laser to the base. + case SAUCERER_CS_LASER_FIRE_END: this->fwork[BOSS_FWORK_13] += 0.1f; Math_SmoothStepToF(&gPlayer[0].cam.at.y, 525.0f, 0.3f, 50.0f, 0.0f); @@ -1357,10 +1357,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Cutscene: Base is hit by mothership's laser. - */ - case 18: + // Cutscene: Base is hit by Saucerer's laser. + case SAUCERER_CS_LASER_HIT: Math_SmoothStepToF(&D_ctx_801779A8[gMainController], 100.0f, 1.0f, 100.0f, 0.0f); Math_SmoothStepToF(&gPlayer[0].cam.at.y, 525.0f, 0.3f, 50.0f, 0.0f); @@ -1397,10 +1395,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Mothership core destroyed, setup for MISSION_ACCOMPLISHED. - */ - case 20: + // Saucerer core destroyed, setup for MISSION_ACCOMPLISHED. + case SAUCERER_DEFEAT: gShowAllRangeCountdown = false; Math_SmoothStepToF(&this->fwork[BOSS_MOVEMENT_SPEED], 0.0f, 0.1f, 3.0f, 0.0f); @@ -1427,10 +1423,8 @@ void Katina_BossUpdate(Saucerer* this) { } break; - /** - * Cutscene: Mothership falling to the ground. - */ - case 21: + // Cutscene: Saucerer falling to the ground. + case SAUCERER_CS_FALL_TO_GROUND: Matrix_RotateY(gCalcMatrix, this->obj.rot.y * M_DTOR, MTXF_NEW); Matrix_RotateX(gCalcMatrix, this->obj.rot.x * M_DTOR, MTXF_APPLY); @@ -1571,7 +1565,7 @@ bool Katina_BossOverrideLimbDraw(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* if (boss->swork[BOSS_HATCH_1_HP] <= 0) { RCP_SetupDL(&gMasterDisp, 57); gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); - *dList = aDestroyedHatch1DL; + *dList = aKaDestroyedHatchDL; } break; @@ -1635,7 +1629,7 @@ bool Katina_BossOverrideLimbDraw(s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3f* if (boss->health < 0) { RCP_SetupDL(&gMasterDisp, 57); gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); - *dList = aDestroyedMothershipDL; + *dList = aKaDestroyedSaucererDL; } break; } @@ -1799,7 +1793,7 @@ void Katina_SFTeam_LevelComplete_Update(void) { void Katina_LevelComplete(Player* player) { s32 i; - Saucerer* boss = &gBosses[KA_BOSS_MOTHERSHIP]; + Saucerer* boss = &gBosses[KA_BOSS_SAUCERER]; Vec3f src; Vec3f dest; f32 angle; @@ -2099,7 +2093,7 @@ void Katina_LevelComplete(Player* player) { player->rockAngle = SIN_DEG(player->rockPhase); } -// Makes your teammates fly towards the camera after defeating the mothership. +// Makes your teammates fly towards the camera after defeating the Saucerer. void Katina_SFTeamFlyTowardsCamera(ActorCutscene* this) { Vec3f src; Vec3f dest; @@ -2170,7 +2164,7 @@ void Katina_801981F8(Actor* this) { src.y = 0.0f; src.z = -5000.0f; - if (gBosses[KA_BOSS_MOTHERSHIP].state != 0) { + if (gBosses[KA_BOSS_SAUCERER].state != 0) { src.z = -10000.0f; } @@ -2181,7 +2175,7 @@ void Katina_801981F8(Actor* this) { actor->unk_0B6 = D_i4_8019F430[i]; - if ((actor->unk_0B6 != 0) || (gBosses[KA_BOSS_MOTHERSHIP].state == 0)) { + if ((actor->unk_0B6 != 0) || (gBosses[KA_BOSS_SAUCERER].state == 0)) { actor->obj.status = OBJ_ACTIVE; actor->obj.id = OBJ_ACTOR_ALLRANGE; @@ -2268,16 +2262,16 @@ void Katina_UpdateEvents(ActorAllRange* this) { if (gAllRangeCheckpoint != 0) { gHitCount = gSavedHitCount; - gBosses[KA_BOSS_MOTHERSHIP].state = 6; - gBosses[KA_BOSS_MOTHERSHIP].obj.pos.x = 0.0f; - gBosses[KA_BOSS_MOTHERSHIP].obj.pos.z = 0.0f; - gBosses[KA_BOSS_MOTHERSHIP].obj.pos.y = 2000.0f; + gBosses[KA_BOSS_SAUCERER].state = 6; + gBosses[KA_BOSS_SAUCERER].obj.pos.x = 0.0f; + gBosses[KA_BOSS_SAUCERER].obj.pos.z = 0.0f; + gBosses[KA_BOSS_SAUCERER].obj.pos.y = 2000.0f; - AUDIO_PLAY_SFX(NA_SE_KA_UFO_ENGINE, gBosses[KA_BOSS_MOTHERSHIP].sfxSource, 0); + AUDIO_PLAY_SFX(NA_SE_KA_UFO_ENGINE, gBosses[KA_BOSS_SAUCERER].sfxSource, 0); gAllRangeEventTimer = 20000; - gBosses[KA_BOSS_MOTHERSHIP].swork[BOSS_CORE_TIMER] = 5760; + gBosses[KA_BOSS_SAUCERER].swork[BOSS_CORE_TIMER] = 5760; gKaKilledAlly = 1; @@ -2301,7 +2295,7 @@ void Katina_UpdateEvents(ActorAllRange* this) { break; } - if (gBosses[KA_BOSS_MOTHERSHIP].state < 15) { + if (gBosses[KA_BOSS_SAUCERER].state < 15) { switch (gAllRangeEventTimer) { case -500: Radio_PlayMessage(gMsg_ID_18005, RCID_BILL); @@ -2320,7 +2314,7 @@ void Katina_UpdateEvents(ActorAllRange* this) { break; } - if (gBosses[KA_BOSS_MOTHERSHIP].state == 12) { + if (gBosses[KA_BOSS_SAUCERER].state == 12) { if (((gAllRangeEventTimer % 256) == 0) && (Rand_ZeroOne() < 0.5f)) { AllRange_PlayMessage(gMsg_ID_18060, RCID_BILL); } @@ -2347,17 +2341,17 @@ void Katina_UpdateEvents(ActorAllRange* this) { } } -void Katina_BossInit(void) { +void Katina_Init(void) { Frontlinebase* base = &gBosses[KA_BOSS_BASE]; - Saucerer* mothership = &gBosses[KA_BOSS_MOTHERSHIP]; + Saucerer* saucerer = &gBosses[KA_BOSS_SAUCERER]; - Boss_Initialize(mothership); - mothership->obj.status = OBJ_INIT; - mothership->obj.pos.x = -15000.0f; - mothership->obj.pos.y = 3240.0f; - mothership->obj.pos.z = 15000.0f; - mothership->obj.id = OBJ_BOSS_KA; - Object_SetInfo(&mothership->info, mothership->obj.id); + Boss_Initialize(saucerer); + saucerer->obj.status = OBJ_INIT; + saucerer->obj.pos.x = -15000.0f; + saucerer->obj.pos.y = 3240.0f; + saucerer->obj.pos.z = 15000.0f; + saucerer->obj.id = OBJ_BOSS_KA; + Object_SetInfo(&saucerer->info, saucerer->obj.id); Boss_Initialize(base); base->obj.status = OBJ_INIT;