mirror of https://github.com/zeldaret/mm.git
Boss_02 Documentation, Part 2: Document Twinmold Param Types and name most BSS variables (#931)
* Boss_02 Documentation, Part 2: Document Twinmold Param Types and name most BSS variables * Respond to hensldm's review
This commit is contained in:
parent
905c089beb
commit
7732f5e96d
|
|
@ -16,16 +16,16 @@
|
|||
|
||||
void Boss02_Init(Actor* thisx, PlayState* play);
|
||||
void Boss02_Destroy(Actor* thisx, PlayState* play);
|
||||
void Boss02_Update(Actor* thisx, PlayState* play);
|
||||
void Boss02_Draw(Actor* thisx, PlayState* play);
|
||||
void Boss02_Twinmold_Update(Actor* thisx, PlayState* play);
|
||||
void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_809DAA74(Boss02* this, PlayState* play);
|
||||
void func_809DAA98(Boss02* this, PlayState* play);
|
||||
void func_809DAAA8(Boss02* this, PlayState* play);
|
||||
void func_809DAB78(Boss02* this, PlayState* play);
|
||||
void func_809DC218(Actor* thisx, PlayState* play);
|
||||
void func_809DC78C(Actor* thisx, PlayState* play);
|
||||
void func_809DD0A8(Actor* thisx, PlayState* play);
|
||||
void Boss02_Tail_Update(Actor* thisx, PlayState* play);
|
||||
void Boss02_Static_Update(Actor* thisx, PlayState* play);
|
||||
void Boss02_Static_Draw(Actor* thisx, PlayState* play);
|
||||
void Boss02_UpdateEffects(PlayState* play);
|
||||
void Boss02_DrawEffects(PlayState* play);
|
||||
void func_809DD934(Boss02* this, PlayState* play);
|
||||
|
|
@ -33,15 +33,15 @@ void func_809DEAC4(Boss02* this, PlayState* play);
|
|||
|
||||
u8 D_809E0420;
|
||||
u8 D_809E0421;
|
||||
u8 D_809E0422; // 0 when the giant's mask is off, 1 when the giant's mask is on
|
||||
Boss02* D_809E0424;
|
||||
Boss02* D_809E0428;
|
||||
Boss02* D_809E042C;
|
||||
u8 D_809E0430;
|
||||
DoorWarp1* D_809E0434;
|
||||
TwinmoldEffect D_809E0438[150];
|
||||
u8 sIsInGiantMode;
|
||||
Boss02* sRedTwinmold;
|
||||
Boss02* sBlueTwinmold;
|
||||
Boss02* sTwinmoldStatic;
|
||||
u8 sMusicStartTimer;
|
||||
DoorWarp1* sBlueWarp;
|
||||
TwinmoldEffect sEffects[150];
|
||||
|
||||
static DamageTable sDamageTable1 = {
|
||||
static DamageTable sBlueTwinmoldDamageTable = {
|
||||
/* Deku Nut */ DMG_ENTRY(0, 0x0),
|
||||
/* Deku Stick */ DMG_ENTRY(1, 0xF),
|
||||
/* Horse trample */ DMG_ENTRY(0, 0x0),
|
||||
|
|
@ -76,7 +76,7 @@ static DamageTable sDamageTable1 = {
|
|||
/* Powder Keg */ DMG_ENTRY(1, 0xF),
|
||||
};
|
||||
|
||||
static DamageTable sDamageTable2 = {
|
||||
static DamageTable sRedTwinmoldDamageTable = {
|
||||
/* Deku Nut */ DMG_ENTRY(0, 0x0),
|
||||
/* Deku Stick */ DMG_ENTRY(1, 0xF),
|
||||
/* Horse trample */ DMG_ENTRY(0, 0x0),
|
||||
|
|
@ -119,8 +119,8 @@ const ActorInit Boss_02_InitVars = {
|
|||
sizeof(Boss02),
|
||||
(ActorFunc)Boss02_Init,
|
||||
(ActorFunc)Boss02_Destroy,
|
||||
(ActorFunc)Boss02_Update,
|
||||
(ActorFunc)Boss02_Draw,
|
||||
(ActorFunc)Boss02_Twinmold_Update,
|
||||
(ActorFunc)Boss02_Twinmold_Draw,
|
||||
};
|
||||
|
||||
f32 D_809DF5B0 = 1.0f;
|
||||
|
|
@ -480,7 +480,7 @@ void func_809DA24C(PlayState* play) {
|
|||
void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) {
|
||||
s16 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_809E0438); i++, effects++) {
|
||||
for (i = 0; i < ARRAY_COUNT(sEffects); i++, effects++) {
|
||||
if (effects->type == TWINMOLD_EFFECT_NONE) {
|
||||
effects->type = TWINMOLD_EFFECT_SAND;
|
||||
effects->pos = *pos;
|
||||
|
|
@ -501,7 +501,7 @@ void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) {
|
|||
void Boss02_SpawnEffectFragment(TwinmoldEffect* effects, Vec3f* pos) {
|
||||
s16 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_809E0438); i++, effects++) {
|
||||
for (i = 0; i < ARRAY_COUNT(sEffects); i++, effects++) {
|
||||
if (effects->type == TWINMOLD_EFFECT_NONE) {
|
||||
effects->type = TWINMOLD_EFFECT_FRAGMENT;
|
||||
effects->pos = *pos;
|
||||
|
|
@ -523,7 +523,7 @@ void Boss02_SpawnEffectFragment(TwinmoldEffect* effects, Vec3f* pos) {
|
|||
void Boss02_SpawnEffectFlash(TwinmoldEffect* effects, Vec3f* pos) {
|
||||
s16 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_809E0438); i++, effects++) {
|
||||
for (i = 0; i < ARRAY_COUNT(sEffects); i++, effects++) {
|
||||
if ((effects->type == TWINMOLD_EFFECT_NONE) || (effects->type == TWINMOLD_EFFECT_FRAGMENT)) {
|
||||
effects->type = TWINMOLD_EFFECT_FLASH;
|
||||
effects->pos = *pos;
|
||||
|
|
@ -549,47 +549,48 @@ void Boss02_Init(Actor* thisx, PlayState* play) {
|
|||
s32 i;
|
||||
s32 pad[2];
|
||||
|
||||
if ((gSaveContext.save.weekEventReg[52] & 0x20) && (this->actor.params == 0)) {
|
||||
D_809E0434 = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f,
|
||||
0.0f, 0, 0, 0, 1);
|
||||
if ((gSaveContext.save.weekEventReg[52] & 0x20) && (this->actor.params == TWINMOLD_RED)) {
|
||||
sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f,
|
||||
0.0f, 0, 0, 0, 1);
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0);
|
||||
}
|
||||
|
||||
this->actor.targetMode = 10;
|
||||
this->unk_1D3C.z = this->unk_1D3C.x = 0.0f;
|
||||
this->unk_1D3C.y = 1.0f;
|
||||
if (this->actor.params == 200) {
|
||||
D_809E042C = this;
|
||||
play->specialEffects = (void*)D_809E0438;
|
||||
this->actor.update = func_809DC78C;
|
||||
this->actor.draw = func_809DD0A8;
|
||||
if (this->actor.params == TWINMOLD_STATIC) {
|
||||
sTwinmoldStatic = this;
|
||||
play->specialEffects = (void*)sEffects;
|
||||
this->actor.update = Boss02_Static_Update;
|
||||
this->actor.draw = Boss02_Static_Draw;
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
this->unk_1D70 = 0.00999999977648f;
|
||||
if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x20) || (D_809E0434 != NULL)) {
|
||||
if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x20) || (sBlueWarp != NULL)) {
|
||||
this->unk_1D20 = 0;
|
||||
D_809E0430 = KREG(15) + 20;
|
||||
sMusicStartTimer = KREG(15) + 20;
|
||||
} else {
|
||||
this->unk_1D20 = 1;
|
||||
}
|
||||
XREG(41) = KREG(14) + 20;
|
||||
this->unk_01AC = 1.0f;
|
||||
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_TANRON5, 0.0f, 1000.0f, 0.0f, 0, 0, 0, 0);
|
||||
} else if (this->actor.params == 100) {
|
||||
this->actor.update = func_809DC218;
|
||||
} else if (this->actor.params == TWINMOLD_TAIL) {
|
||||
this->actor.update = Boss02_Tail_Update;
|
||||
this->actor.draw = NULL;
|
||||
this->actor.hintId = 0x2E;
|
||||
} else {
|
||||
if (this->actor.params != 35) {
|
||||
this->actor.params = 0;
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_02, 0.0f, 0.0f, 0.0f, 0, 0, 0, 200);
|
||||
D_809E0424 = this;
|
||||
D_809E0428 = (Boss02*)Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_02, this->actor.world.pos.x,
|
||||
this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x,
|
||||
this->actor.world.rot.y, this->actor.world.rot.z, 35);
|
||||
D_809E0424->actor.colChkInfo.damageTable = &sDamageTable2;
|
||||
D_809E0428->actor.colChkInfo.damageTable = &sDamageTable1;
|
||||
D_809E0424->unk_1674 = D_809E0428;
|
||||
D_809E0428->unk_1674 = D_809E0424;
|
||||
if (this->actor.params != TWINMOLD_BLUE) {
|
||||
this->actor.params = TWINMOLD_RED;
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_02, 0.0f, 0.0f, 0.0f, 0, 0, 0, TWINMOLD_STATIC);
|
||||
sRedTwinmold = this;
|
||||
sBlueTwinmold =
|
||||
(Boss02*)Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_02, this->actor.world.pos.x,
|
||||
this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x,
|
||||
this->actor.world.rot.y, this->actor.world.rot.z, TWINMOLD_BLUE);
|
||||
sRedTwinmold->actor.colChkInfo.damageTable = &sRedTwinmoldDamageTable;
|
||||
sBlueTwinmold->actor.colChkInfo.damageTable = &sBlueTwinmoldDamageTable;
|
||||
sRedTwinmold->otherTwinmold = sBlueTwinmold;
|
||||
sBlueTwinmold->otherTwinmold = sRedTwinmold;
|
||||
}
|
||||
|
||||
this->actor.colChkInfo.mass = MASS_HEAVY;
|
||||
|
|
@ -603,7 +604,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) {
|
|||
this->colliderSphere2Elements);
|
||||
Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit);
|
||||
|
||||
if (D_809E0434 != NULL) {
|
||||
if (sBlueWarp != NULL) {
|
||||
func_809DAA74(this, play);
|
||||
} else {
|
||||
func_809DAAA8(this, play);
|
||||
|
|
@ -617,7 +618,8 @@ void Boss02_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
this->unk_014C = Rand_ZeroFloat(1000.0f);
|
||||
this->unk_1678 = 22;
|
||||
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_BOSS_02, 0.0f, 0.0f, 0.0f, 0, 0, 0, 100);
|
||||
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_BOSS_02, 0.0f, 0.0f, 0.0f, 0, 0, 0,
|
||||
TWINMOLD_TAIL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -635,14 +637,14 @@ void func_809DAA98(Boss02* this, PlayState* play) {
|
|||
void func_809DAAA8(Boss02* this, PlayState* play) {
|
||||
this->actionFunc = func_809DAB78;
|
||||
Animation_MorphToLoop(&this->skelAnime, &gTwinmoldHeadFlyAnim, 0.0f);
|
||||
if (D_809E042C->unk_1D20 != 0) {
|
||||
if (sTwinmoldStatic->unk_1D20 != 0) {
|
||||
this->unk_0144 = 10;
|
||||
} else {
|
||||
this->unk_0144 = 100;
|
||||
this->unk_01A8 = 25.0f;
|
||||
D_809E042C->unk_1D7E = 100;
|
||||
sTwinmoldStatic->unk_1D7E = 100;
|
||||
this->actor.world.pos.x = 0.0f;
|
||||
if (D_809E0424 == this) {
|
||||
if (sRedTwinmold == this) {
|
||||
this->actor.world.pos.z = -1000.0f;
|
||||
} else {
|
||||
this->actor.world.pos.z = 1400.0f;
|
||||
|
|
@ -666,7 +668,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
f32 phi_f2;
|
||||
s16 temp_s0;
|
||||
s16 temp_s2;
|
||||
Boss02* spB0 = this->unk_1674;
|
||||
Boss02* otherTwinmold = this->otherTwinmold;
|
||||
Vec3f spA4;
|
||||
f32 spA0;
|
||||
f32 sp9C;
|
||||
|
|
@ -693,7 +695,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->unk_01A4 = Math_SinS(this->unk_0196) * this->unk_019C;
|
||||
this->actor.world.rot.x = this->actor.shape.rot.x + this->unk_01A4;
|
||||
|
||||
if (!(this->unk_014C & 0x1F) && (D_809E042C->unk_1D20 == 0)) {
|
||||
if (!(this->unk_014C & 0x1F) && (sTwinmoldStatic->unk_1D20 == 0)) {
|
||||
this->unk_01A0 = Rand_ZeroFloat(0x1000) + 0x800;
|
||||
this->unk_019A = Rand_ZeroFloat(0x400) + 0x200;
|
||||
}
|
||||
|
|
@ -716,7 +718,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
Actor_UpdatePos(&this->actor);
|
||||
|
||||
spD0 = this->actor.world.pos;
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
spD0.y = 5000.0f;
|
||||
} else {
|
||||
spD0.y = 2000.0f;
|
||||
|
|
@ -752,9 +754,9 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->unk_0B1C[this->unk_014E].z = BINANG_TO_RAD(this->actor.world.rot.z);
|
||||
}
|
||||
|
||||
if ((this->unk_0144 < 10) && (spB0->unk_0144 >= 20)) {
|
||||
if ((this->unk_0144 < 10) && (otherTwinmold->unk_0144 >= 20)) {
|
||||
this->unk_01B0.y = -1000.0f * D_809DF5B0;
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
this->unk_01B0.y += 3150.0f;
|
||||
}
|
||||
this->unk_0144 = 3;
|
||||
|
|
@ -774,7 +776,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->actor.world.pos.x = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0);
|
||||
this->actor.world.pos.z = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0);
|
||||
this->actor.world.pos.y = -500.0f * D_809DF5B0;
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
this->actor.world.pos.y += 3150.0f;
|
||||
}
|
||||
}
|
||||
|
|
@ -807,7 +809,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->unk_01B0.z = 500.0f;
|
||||
}
|
||||
this->unk_01B0.y = Rand_ZeroFloat(800.0f * D_809DF5B0) + (200.0f * D_809DF5B0);
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
this->unk_01B0.y += 3150.0f;
|
||||
}
|
||||
}
|
||||
|
|
@ -824,7 +826,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
if (sqrtf(SQ(spCC) + SQ(spC8) + SQ(spC4)) < (phi_f2 * D_809DF5B0)) {
|
||||
this->unk_0144 = 3;
|
||||
this->unk_01B0.y = -3000.0f * D_809DF5B0;
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
this->unk_01B0.y += 3150.0f;
|
||||
}
|
||||
this->unk_0146[0] = 150;
|
||||
|
|
@ -846,7 +848,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->unk_0144 = 3;
|
||||
this->unk_01B0.x = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.x;
|
||||
this->unk_01B0.y = -3000.0f * D_809DF5B0;
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
this->unk_01B0.y += 3150.0f;
|
||||
}
|
||||
this->unk_01B0.z = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.z;
|
||||
|
|
@ -870,7 +872,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
return;
|
||||
|
||||
case 11:
|
||||
if (this == D_809E0424) {
|
||||
if (this == sRedTwinmold) {
|
||||
this->unk_01B0.x = D_809DF9C0[this->unk_1D1A].x;
|
||||
this->unk_01B0.y = D_809DF9C0[this->unk_1D1A].y;
|
||||
this->unk_01B0.z = D_809DF9C0[this->unk_1D1A].z;
|
||||
|
|
@ -894,7 +896,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
if (this->unk_1D1A > 8) {
|
||||
this->unk_1D1A = 8;
|
||||
}
|
||||
if (this == D_809E0424) {
|
||||
if (this == sRedTwinmold) {
|
||||
this->unk_01B0.x = D_809DF9C0[this->unk_1D1A].x;
|
||||
this->unk_01B0.y = D_809DF9C0[this->unk_1D1A].y;
|
||||
this->unk_01B0.z = D_809DF9C0[this->unk_1D1A].z;
|
||||
|
|
@ -915,7 +917,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->unk_0146[0] = 50;
|
||||
this->unk_01B0.x = player->actor.world.pos.x + spA4.x;
|
||||
this->unk_01B0.y = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0);
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
this->unk_01B0.y += 3150.0f;
|
||||
}
|
||||
this->unk_01B0.z = player->actor.world.pos.z + spA4.z;
|
||||
|
|
@ -933,8 +935,8 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->unk_0144 = 21;
|
||||
this->unk_0146[0] = 20;
|
||||
this->unk_0152 = 0;
|
||||
D_809E042C->unk_1D20 = 102;
|
||||
D_809E042C->unk_1D5C = 0.0f;
|
||||
sTwinmoldStatic->unk_1D20 = 102;
|
||||
sTwinmoldStatic->unk_1D5C = 0.0f;
|
||||
play_sound(NA_SE_EN_INBOSS_DEAD_PRE2_OLD);
|
||||
} else if (!(this->unk_0146[1] & 0xF) && (Rand_ZeroOne() < 0.5f)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_INBOSS_DAMAGE_OLD);
|
||||
|
|
@ -974,7 +976,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->actor.speedXZ = 15.0f * D_809DF5B0;
|
||||
}
|
||||
|
||||
if (spB0->unk_0144 >= 10) {
|
||||
if (otherTwinmold->unk_0144 >= 10) {
|
||||
Audio_QueueSeqCmd(NA_BGM_CLEAR_BOSS | 0x8000);
|
||||
}
|
||||
|
||||
|
|
@ -998,10 +1000,10 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
this->unk_0170 = this->unk_017C;
|
||||
this->unk_016C = 30;
|
||||
this->unk_0170.y = this->actor.floorHeight;
|
||||
D_809E042C->unk_1D20 = 103;
|
||||
D_809E042C->unk_1D1C = 0;
|
||||
D_809E042C->unk_0146[0] = 15;
|
||||
D_809E042C->unk_0150 = 0;
|
||||
sTwinmoldStatic->unk_1D20 = 103;
|
||||
sTwinmoldStatic->unk_1D1C = 0;
|
||||
sTwinmoldStatic->unk_0146[0] = 15;
|
||||
sTwinmoldStatic->unk_0150 = 0;
|
||||
play_sound(NA_SE_EV_LIGHTNING);
|
||||
|
||||
for (i = 0; i < 30; i++) {
|
||||
|
|
@ -1052,13 +1054,13 @@ void func_809DAB78(Boss02* this, PlayState* play) {
|
|||
}
|
||||
|
||||
void func_809DBFB4(Boss02* this, PlayState* play) {
|
||||
Boss02* temp_s6 = this->unk_1674;
|
||||
Boss02* otherTwinmold = this->otherTwinmold;
|
||||
s32 temp;
|
||||
s32 i;
|
||||
u8 damage;
|
||||
|
||||
if (this->unk_0154 == 0) {
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
temp = 0;
|
||||
} else {
|
||||
temp = 1;
|
||||
|
|
@ -1078,7 +1080,7 @@ void func_809DBFB4(Boss02* this, PlayState* play) {
|
|||
this->unk_015C = 10;
|
||||
}
|
||||
|
||||
if (D_809E0422 != 0) {
|
||||
if (sIsInGiantMode) {
|
||||
this->unk_0152 = 15;
|
||||
} else {
|
||||
this->unk_0152 = 12;
|
||||
|
|
@ -1086,7 +1088,7 @@ void func_809DBFB4(Boss02* this, PlayState* play) {
|
|||
|
||||
damage = this->actor.colChkInfo.damage;
|
||||
|
||||
if (temp_s6->unk_0144 < 20) {
|
||||
if (otherTwinmold->unk_0144 < 20) {
|
||||
do {
|
||||
do {
|
||||
this->actor.colChkInfo.health -= damage;
|
||||
|
|
@ -1100,17 +1102,17 @@ void func_809DBFB4(Boss02* this, PlayState* play) {
|
|||
this->skelAnime.playSpeed = 2.0f;
|
||||
this->unk_0144 = 20;
|
||||
|
||||
if (temp_s6->unk_0144 >= 10) {
|
||||
if (otherTwinmold->unk_0144 >= 10) {
|
||||
Audio_QueueSeqCmd(0x100100FF);
|
||||
} else {
|
||||
temp_s6->unk_0195 = 1;
|
||||
otherTwinmold->unk_0195 = 1;
|
||||
}
|
||||
|
||||
this->unk_0146[1] = BREG(70) + 170;
|
||||
this->unk_0146[0] = 0;
|
||||
this->actor.shape.rot.x = 0x4000;
|
||||
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
if (this->actor.world.pos.y < -200.0f) {
|
||||
this->actor.world.pos.y = -200.0f;
|
||||
}
|
||||
|
|
@ -1118,12 +1120,12 @@ void func_809DBFB4(Boss02* this, PlayState* play) {
|
|||
this->actor.world.pos.y = 3130.0f;
|
||||
}
|
||||
|
||||
D_809E042C->unk_1D20 = 100;
|
||||
sTwinmoldStatic->unk_1D20 = 100;
|
||||
|
||||
if (this == D_809E0424) {
|
||||
D_809E042C->unk_0194 = 0;
|
||||
if (this == sRedTwinmold) {
|
||||
sTwinmoldStatic->unk_0194 = 0;
|
||||
} else {
|
||||
D_809E042C->unk_0194 = 1;
|
||||
sTwinmoldStatic->unk_0194 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1132,23 +1134,23 @@ void func_809DBFB4(Boss02* this, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_809DC218(Actor* thisx, PlayState* play) {
|
||||
void Boss02_Tail_Update(Actor* thisx, PlayState* play) {
|
||||
Boss02* this = THIS;
|
||||
s32 pad;
|
||||
Vec3f sp24;
|
||||
CollisionPoly* sp20;
|
||||
Vec3f pos;
|
||||
CollisionPoly* outPoly;
|
||||
|
||||
this->unk_014C++;
|
||||
if ((this->unk_014C + this->actor.params) & 1) {
|
||||
sp24 = this->actor.world.pos;
|
||||
pos = this->actor.world.pos;
|
||||
this->actor.focus.pos = this->actor.world.pos;
|
||||
if (D_809E0422 != 0) {
|
||||
sp24.y = 5000.0f;
|
||||
if (sIsInGiantMode) {
|
||||
pos.y = 5000.0f;
|
||||
} else {
|
||||
sp24.y = 2000.0f;
|
||||
pos.y = 2000.0f;
|
||||
}
|
||||
|
||||
if ((this->actor.focus.pos.y < BgCheck_EntityRaycastFloor1(&play->colCtx, &sp20, &sp24)) || (D_809E0422 != 0)) {
|
||||
if ((this->actor.focus.pos.y < BgCheck_EntityRaycastFloor1(&play->colCtx, &outPoly, &pos)) || sIsInGiantMode) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
} else {
|
||||
this->actor.flags |= ACTOR_FLAG_1;
|
||||
|
|
@ -1156,19 +1158,19 @@ void func_809DC218(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
void Boss02_Update(Actor* thisx, PlayState* play) {
|
||||
void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) {
|
||||
Vec3f sp3C;
|
||||
Boss02* this = THIS;
|
||||
s32 pad;
|
||||
s16 i;
|
||||
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
Actor_SetScale(&this->actor, 0.6f);
|
||||
} else {
|
||||
Actor_SetScale(&this->actor, 0.060000001f);
|
||||
}
|
||||
|
||||
if (D_809E042C->unk_1D18 == 0) {
|
||||
if (sTwinmoldStatic->unk_1D18 == 0) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_0146); i++) {
|
||||
if (this->unk_0146[i] != 0) {
|
||||
this->unk_0146[i]--;
|
||||
|
|
@ -1274,18 +1276,18 @@ void Boss02_Update(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_809DC78C(Actor* thisx, PlayState* play) {
|
||||
void Boss02_Static_Update(Actor* thisx, PlayState* play) {
|
||||
Boss02* this = THIS;
|
||||
|
||||
this->unk_01AC = D_809DF5B0;
|
||||
play->envCtx.sandstormState = 0xD;
|
||||
|
||||
if (D_809E0434 != NULL) {
|
||||
if (sBlueWarp != NULL) {
|
||||
this->unk_1D74 = KREG(23) + -15.0f;
|
||||
D_801F4E30 = 0;
|
||||
play->envCtx.lightSettingOverride = 1;
|
||||
play->skyboxId = 1;
|
||||
} else if (D_809E0422 == 0) {
|
||||
} else if (!sIsInGiantMode) {
|
||||
this->unk_1D74 = 0.0f;
|
||||
D_801F4E30 = this->unk_1D7C;
|
||||
play->envCtx.lightSettingOverride = 0;
|
||||
|
|
@ -1303,10 +1305,10 @@ void func_809DC78C(Actor* thisx, PlayState* play) {
|
|||
this->unk_0146[0]--;
|
||||
}
|
||||
|
||||
if (D_809E0434 == NULL) {
|
||||
if (D_809E0430 != 0) {
|
||||
D_809E0430--;
|
||||
if (D_809E0430 == 0) {
|
||||
if (sBlueWarp == NULL) {
|
||||
if (sMusicStartTimer != 0) {
|
||||
sMusicStartTimer--;
|
||||
if (sMusicStartTimer == 0) {
|
||||
Audio_QueueSeqCmd(NA_BGM_BOSS | 0x8000);
|
||||
}
|
||||
}
|
||||
|
|
@ -1328,7 +1330,7 @@ Gfx* D_809DFA9C[] = {
|
|||
|
||||
Vec3f D_809DFAF4 = { -10000.0f, -100000.0f, -100000.0f };
|
||||
|
||||
void Boss02_Draw(Actor* thisx, PlayState* play2) {
|
||||
void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
|
||||
PlayState* play = play2;
|
||||
Boss02* this = THIS;
|
||||
s32 i;
|
||||
|
|
@ -1358,7 +1360,7 @@ void Boss02_Draw(Actor* thisx, PlayState* play2) {
|
|||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x0D, mtx);
|
||||
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
sp98 = -500.0f;
|
||||
} else {
|
||||
sp98 = 3100.0f;
|
||||
|
|
@ -1452,7 +1454,7 @@ void Boss02_Draw(Actor* thisx, PlayState* play2) {
|
|||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
func_809DA50C(0, &this->colliderSphere2, &D_809DFAF4);
|
||||
func_809DA50C(21, &this->colliderSphere1, &this->unk_147C[0]);
|
||||
} else {
|
||||
|
|
@ -1461,7 +1463,7 @@ void Boss02_Draw(Actor* thisx, PlayState* play2) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_809DD0A8(Actor* thisx, PlayState* play) {
|
||||
void Boss02_Static_Draw(Actor* thisx, PlayState* play) {
|
||||
Boss02_DrawEffects(play);
|
||||
}
|
||||
|
||||
|
|
@ -1470,13 +1472,13 @@ void Boss02_UpdateEffects(PlayState* play) {
|
|||
f32 floorY;
|
||||
s16 i;
|
||||
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
floorY = 0.0f;
|
||||
} else {
|
||||
floorY = 3150.0f;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_809E0438); i++, effect++) {
|
||||
for (i = 0; i < ARRAY_COUNT(sEffects); i++, effect++) {
|
||||
if (effect->type) {
|
||||
effect->timer++;
|
||||
effect->pos.x += effect->velocity.x * D_809DF5B0;
|
||||
|
|
@ -1523,7 +1525,7 @@ void Boss02_DrawEffects(PlayState* play) {
|
|||
func_8012C28C(play->state.gfxCtx);
|
||||
func_8012C2DC(play->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_809E0438); i++, effect++) {
|
||||
for (i = 0; i < ARRAY_COUNT(sEffects); i++, effect++) {
|
||||
if (effect->type == TWINMOLD_EFFECT_SAND) {
|
||||
if (!flag) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gTwinmoldDustMaterialDL);
|
||||
|
|
@ -1551,7 +1553,7 @@ void Boss02_DrawEffects(PlayState* play) {
|
|||
}
|
||||
|
||||
effect = (TwinmoldEffect*)play->specialEffects;
|
||||
for (i = 0, flag = false; i < ARRAY_COUNT(D_809E0438); i++, effect++) {
|
||||
for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) {
|
||||
if (effect->type == TWINMOLD_EFFECT_FRAGMENT) {
|
||||
if (!flag) {
|
||||
gDPSetCombineLERP(POLY_OPA_DISP++, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE,
|
||||
|
|
@ -1572,7 +1574,7 @@ void Boss02_DrawEffects(PlayState* play) {
|
|||
}
|
||||
|
||||
effect = (TwinmoldEffect*)play->specialEffects;
|
||||
for (i = 0, flag = false; i < ARRAY_COUNT(D_809E0438); i++, effect++) {
|
||||
for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) {
|
||||
if (effect->type == TWINMOLD_EFFECT_FLASH) {
|
||||
if (!flag) { //! @bug - dev forgot to set flag to 1, should only apply to first entry?
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL);
|
||||
|
|
@ -1591,7 +1593,7 @@ void Boss02_DrawEffects(PlayState* play) {
|
|||
}
|
||||
|
||||
effect = (TwinmoldEffect*)play->specialEffects;
|
||||
for (i = 0, flag = false; i < ARRAY_COUNT(D_809E0438); i++, effect++) {
|
||||
for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) {
|
||||
if (effect->type == TWINMOLD_EFFECT_BLACK_DUST) {
|
||||
if (!flag) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gTwinmoldDustMaterialDL);
|
||||
|
|
@ -1638,7 +1640,7 @@ void func_809DD934(Boss02* this, PlayState* play) {
|
|||
this->unk_1D14 = 0;
|
||||
this->unk_1D5C = 0.0f;
|
||||
this->unk_1D58 = 0.0f;
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
this->unk_1D18 = 1;
|
||||
this->unk_1D68 = 10.0f;
|
||||
this->unk_1D64 = 60.0f;
|
||||
|
|
@ -1767,19 +1769,19 @@ void func_809DD934(Boss02* this, PlayState* play) {
|
|||
play->envCtx.lightSettings.fogNear = this->unk_1D74;
|
||||
|
||||
if (sp57) {
|
||||
D_809E0422 = 1 - D_809E0422;
|
||||
if (D_809E0422 == 0) {
|
||||
sIsInGiantMode = 1 - sIsInGiantMode;
|
||||
if (!sIsInGiantMode) {
|
||||
D_809DF5B0 = 1.0f;
|
||||
} else {
|
||||
D_809DF5B0 = 0.1f;
|
||||
}
|
||||
|
||||
this->unk_01AC = D_809DF5B0;
|
||||
if (D_809E0422 == 0) {
|
||||
if (D_809E0434 != NULL) {
|
||||
D_809E0434->unk_203 = 0;
|
||||
D_809E0434->unk_204 = 1.0f;
|
||||
D_809E0434->dyna.actor.world.pos.y = 60.0f;
|
||||
if (!sIsInGiantMode) {
|
||||
if (sBlueWarp != NULL) {
|
||||
sBlueWarp->unk_203 = 0;
|
||||
sBlueWarp->unk_204 = 1.0f;
|
||||
sBlueWarp->dyna.actor.world.pos.y = 60.0f;
|
||||
}
|
||||
|
||||
player->actor.world.pos.x *= 10.0f;
|
||||
|
|
@ -1788,70 +1790,70 @@ void func_809DD934(Boss02* this, PlayState* play) {
|
|||
player->unk_B68 = player->actor.world.pos.y;
|
||||
player->actor.world.pos.z *= 10.0f;
|
||||
|
||||
if ((D_809E0434 != NULL) && ((SQ(player->actor.world.pos.z) + SQ(player->actor.world.pos.x)) < SQ(60.0f))) {
|
||||
if ((sBlueWarp != NULL) && ((SQ(player->actor.world.pos.z) + SQ(player->actor.world.pos.x)) < SQ(60.0f))) {
|
||||
player->actor.world.pos.z = 60.0f;
|
||||
player->actor.world.pos.x = 60.0f;
|
||||
}
|
||||
|
||||
D_809E0424->actor.world.pos.x *= 10.0f;
|
||||
D_809E0424->actor.world.pos.y -= 3150.0f;
|
||||
D_809E0424->actor.world.pos.y *= 10.0f;
|
||||
D_809E0424->actor.world.pos.z *= 10.0f;
|
||||
sRedTwinmold->actor.world.pos.x *= 10.0f;
|
||||
sRedTwinmold->actor.world.pos.y -= 3150.0f;
|
||||
sRedTwinmold->actor.world.pos.y *= 10.0f;
|
||||
sRedTwinmold->actor.world.pos.z *= 10.0f;
|
||||
|
||||
D_809E0424->unk_0170.x *= 10.0f;
|
||||
D_809E0424->unk_0170.y -= 3150.0f;
|
||||
D_809E0424->unk_0170.y *= 10.0f;
|
||||
D_809E0424->unk_0170.z *= 10.0f;
|
||||
sRedTwinmold->unk_0170.x *= 10.0f;
|
||||
sRedTwinmold->unk_0170.y -= 3150.0f;
|
||||
sRedTwinmold->unk_0170.y *= 10.0f;
|
||||
sRedTwinmold->unk_0170.z *= 10.0f;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_01BC); i++) {
|
||||
D_809E0424->unk_01BC[i].x *= 10.0f;
|
||||
D_809E0424->unk_01BC[i].y -= 3150.0f;
|
||||
D_809E0424->unk_01BC[i].y *= 10.0f;
|
||||
D_809E0424->unk_01BC[i].z *= 10.0f;
|
||||
sRedTwinmold->unk_01BC[i].x *= 10.0f;
|
||||
sRedTwinmold->unk_01BC[i].y -= 3150.0f;
|
||||
sRedTwinmold->unk_01BC[i].y *= 10.0f;
|
||||
sRedTwinmold->unk_01BC[i].z *= 10.0f;
|
||||
}
|
||||
|
||||
D_809E0424->unk_01B0.x *= 10.0f;
|
||||
D_809E0424->unk_01B0.y -= 3150.0f;
|
||||
D_809E0424->unk_01B0.y *= 10.0f;
|
||||
D_809E0424->unk_01B0.z *= 10.0f;
|
||||
sRedTwinmold->unk_01B0.x *= 10.0f;
|
||||
sRedTwinmold->unk_01B0.y -= 3150.0f;
|
||||
sRedTwinmold->unk_01B0.y *= 10.0f;
|
||||
sRedTwinmold->unk_01B0.z *= 10.0f;
|
||||
|
||||
D_809E0424->unk_017C.y -= 3150.0f;
|
||||
D_809E0424->unk_017C.y *= 10.0f;
|
||||
D_809E0424->unk_0188.y -= 3150.0f;
|
||||
D_809E0424->unk_0188.y *= 10.0f;
|
||||
sRedTwinmold->unk_017C.y -= 3150.0f;
|
||||
sRedTwinmold->unk_017C.y *= 10.0f;
|
||||
sRedTwinmold->unk_0188.y -= 3150.0f;
|
||||
sRedTwinmold->unk_0188.y *= 10.0f;
|
||||
|
||||
D_809E0428->actor.world.pos.x *= 10.0f;
|
||||
D_809E0428->actor.world.pos.y -= 3150.0f;
|
||||
D_809E0428->actor.world.pos.y *= 10.0f;
|
||||
D_809E0428->actor.world.pos.z *= 10.0f;
|
||||
sBlueTwinmold->actor.world.pos.x *= 10.0f;
|
||||
sBlueTwinmold->actor.world.pos.y -= 3150.0f;
|
||||
sBlueTwinmold->actor.world.pos.y *= 10.0f;
|
||||
sBlueTwinmold->actor.world.pos.z *= 10.0f;
|
||||
|
||||
D_809E0428->unk_0170.x *= 10.0f;
|
||||
D_809E0428->unk_0170.y -= 3150.0f;
|
||||
D_809E0428->unk_0170.y *= 10.0f;
|
||||
D_809E0428->unk_0170.z *= 10.0f;
|
||||
sBlueTwinmold->unk_0170.x *= 10.0f;
|
||||
sBlueTwinmold->unk_0170.y -= 3150.0f;
|
||||
sBlueTwinmold->unk_0170.y *= 10.0f;
|
||||
sBlueTwinmold->unk_0170.z *= 10.0f;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_01BC); i++) {
|
||||
D_809E0428->unk_01BC[i].x *= 10.0f;
|
||||
D_809E0428->unk_01BC[i].y -= 3150.0f;
|
||||
D_809E0428->unk_01BC[i].y *= 10.0f;
|
||||
D_809E0428->unk_01BC[i].z *= 10.0f;
|
||||
sBlueTwinmold->unk_01BC[i].x *= 10.0f;
|
||||
sBlueTwinmold->unk_01BC[i].y -= 3150.0f;
|
||||
sBlueTwinmold->unk_01BC[i].y *= 10.0f;
|
||||
sBlueTwinmold->unk_01BC[i].z *= 10.0f;
|
||||
}
|
||||
|
||||
D_809E0428->unk_01B0.x *= 10.0f;
|
||||
D_809E0428->unk_01B0.y -= 3150.0f;
|
||||
D_809E0428->unk_01B0.y *= 10.0f;
|
||||
D_809E0428->unk_01B0.z *= 10.0f;
|
||||
sBlueTwinmold->unk_01B0.x *= 10.0f;
|
||||
sBlueTwinmold->unk_01B0.y -= 3150.0f;
|
||||
sBlueTwinmold->unk_01B0.y *= 10.0f;
|
||||
sBlueTwinmold->unk_01B0.z *= 10.0f;
|
||||
|
||||
D_809E0428->unk_017C.y -= 3150.0f;
|
||||
D_809E0428->unk_017C.y *= 10.0f;
|
||||
D_809E0428->unk_0188.y -= 3150.0f;
|
||||
D_809E0428->unk_0188.y *= 10.0f;
|
||||
sBlueTwinmold->unk_017C.y -= 3150.0f;
|
||||
sBlueTwinmold->unk_017C.y *= 10.0f;
|
||||
sBlueTwinmold->unk_0188.y -= 3150.0f;
|
||||
sBlueTwinmold->unk_0188.y *= 10.0f;
|
||||
|
||||
} else {
|
||||
if (D_809E0434 != 0) {
|
||||
D_809E0434->unk_203 = 1;
|
||||
D_809E0434->unk_204 = 0.1f;
|
||||
D_809E0434->dyna.actor.world.pos.y = 3155.0f;
|
||||
if (sBlueWarp != 0) {
|
||||
sBlueWarp->unk_203 = 1;
|
||||
sBlueWarp->unk_204 = 0.1f;
|
||||
sBlueWarp->dyna.actor.world.pos.y = 3155.0f;
|
||||
}
|
||||
|
||||
player->actor.world.pos.x *= 0.1f;
|
||||
|
|
@ -1860,59 +1862,59 @@ void func_809DD934(Boss02* this, PlayState* play) {
|
|||
player->unk_B68 = player->actor.world.pos.y;
|
||||
player->actor.world.pos.z *= 0.1f;
|
||||
|
||||
D_809E0424->actor.world.pos.x *= 0.1f;
|
||||
D_809E0424->actor.world.pos.y *= 0.1f;
|
||||
D_809E0424->actor.world.pos.y += 3150.0f;
|
||||
D_809E0424->actor.world.pos.z *= 0.1f;
|
||||
sRedTwinmold->actor.world.pos.x *= 0.1f;
|
||||
sRedTwinmold->actor.world.pos.y *= 0.1f;
|
||||
sRedTwinmold->actor.world.pos.y += 3150.0f;
|
||||
sRedTwinmold->actor.world.pos.z *= 0.1f;
|
||||
|
||||
D_809E0424->unk_0170.x *= 0.1f;
|
||||
D_809E0424->unk_0170.y *= 0.1f;
|
||||
D_809E0424->unk_0170.y += 3150.0f;
|
||||
D_809E0424->unk_0170.z *= 0.1f;
|
||||
sRedTwinmold->unk_0170.x *= 0.1f;
|
||||
sRedTwinmold->unk_0170.y *= 0.1f;
|
||||
sRedTwinmold->unk_0170.y += 3150.0f;
|
||||
sRedTwinmold->unk_0170.z *= 0.1f;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_01BC); i++) {
|
||||
D_809E0424->unk_01BC[i].x *= 0.1f;
|
||||
D_809E0424->unk_01BC[i].y *= 0.1f;
|
||||
D_809E0424->unk_01BC[i].y += 3150.0f;
|
||||
D_809E0424->unk_01BC[i].z *= 0.1f;
|
||||
sRedTwinmold->unk_01BC[i].x *= 0.1f;
|
||||
sRedTwinmold->unk_01BC[i].y *= 0.1f;
|
||||
sRedTwinmold->unk_01BC[i].y += 3150.0f;
|
||||
sRedTwinmold->unk_01BC[i].z *= 0.1f;
|
||||
}
|
||||
|
||||
D_809E0424->unk_01B0.x *= 0.1f;
|
||||
D_809E0424->unk_01B0.y *= 0.1f;
|
||||
D_809E0424->unk_01B0.y += 3150.0f;
|
||||
D_809E0424->unk_01B0.z *= 0.1f;
|
||||
sRedTwinmold->unk_01B0.x *= 0.1f;
|
||||
sRedTwinmold->unk_01B0.y *= 0.1f;
|
||||
sRedTwinmold->unk_01B0.y += 3150.0f;
|
||||
sRedTwinmold->unk_01B0.z *= 0.1f;
|
||||
|
||||
D_809E0424->unk_017C.y *= 0.1f;
|
||||
D_809E0424->unk_017C.y += 3150.0f;
|
||||
D_809E0424->unk_0188.y *= 0.1f;
|
||||
D_809E0424->unk_0188.y += 3150.0f;
|
||||
sRedTwinmold->unk_017C.y *= 0.1f;
|
||||
sRedTwinmold->unk_017C.y += 3150.0f;
|
||||
sRedTwinmold->unk_0188.y *= 0.1f;
|
||||
sRedTwinmold->unk_0188.y += 3150.0f;
|
||||
|
||||
D_809E0428->actor.world.pos.x *= 0.1f;
|
||||
D_809E0428->actor.world.pos.y *= 0.1f;
|
||||
D_809E0428->actor.world.pos.y += 3150.0f;
|
||||
D_809E0428->actor.world.pos.z *= 0.1f;
|
||||
sBlueTwinmold->actor.world.pos.x *= 0.1f;
|
||||
sBlueTwinmold->actor.world.pos.y *= 0.1f;
|
||||
sBlueTwinmold->actor.world.pos.y += 3150.0f;
|
||||
sBlueTwinmold->actor.world.pos.z *= 0.1f;
|
||||
|
||||
D_809E0428->unk_0170.x *= 0.1f;
|
||||
D_809E0428->unk_0170.y *= 0.1f;
|
||||
D_809E0428->unk_0170.y += 3150.0f;
|
||||
D_809E0428->unk_0170.z *= 0.1f;
|
||||
sBlueTwinmold->unk_0170.x *= 0.1f;
|
||||
sBlueTwinmold->unk_0170.y *= 0.1f;
|
||||
sBlueTwinmold->unk_0170.y += 3150.0f;
|
||||
sBlueTwinmold->unk_0170.z *= 0.1f;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_01BC); i++) {
|
||||
D_809E0428->unk_01BC[i].x *= 0.1f;
|
||||
D_809E0428->unk_01BC[i].y *= 0.1f;
|
||||
D_809E0428->unk_01BC[i].y += 3150.0f;
|
||||
D_809E0428->unk_01BC[i].z *= 0.1f;
|
||||
sBlueTwinmold->unk_01BC[i].x *= 0.1f;
|
||||
sBlueTwinmold->unk_01BC[i].y *= 0.1f;
|
||||
sBlueTwinmold->unk_01BC[i].y += 3150.0f;
|
||||
sBlueTwinmold->unk_01BC[i].z *= 0.1f;
|
||||
}
|
||||
|
||||
D_809E0428->unk_01B0.x *= 0.1f;
|
||||
D_809E0428->unk_01B0.y *= 0.1f;
|
||||
D_809E0428->unk_01B0.y += 3150.0f;
|
||||
D_809E0428->unk_01B0.z *= 0.1f;
|
||||
sBlueTwinmold->unk_01B0.x *= 0.1f;
|
||||
sBlueTwinmold->unk_01B0.y *= 0.1f;
|
||||
sBlueTwinmold->unk_01B0.y += 3150.0f;
|
||||
sBlueTwinmold->unk_01B0.z *= 0.1f;
|
||||
|
||||
D_809E0428->unk_017C.y *= 0.1f;
|
||||
D_809E0428->unk_017C.y += 3150.0f;
|
||||
D_809E0428->unk_0188.y *= 0.1f;
|
||||
D_809E0428->unk_0188.y += 3150.0f;
|
||||
sBlueTwinmold->unk_017C.y *= 0.1f;
|
||||
sBlueTwinmold->unk_017C.y += 3150.0f;
|
||||
sBlueTwinmold->unk_0188.y *= 0.1f;
|
||||
sBlueTwinmold->unk_0188.y += 3150.0f;
|
||||
}
|
||||
|
||||
player->actor.home.pos = player->actor.world.pos;
|
||||
|
|
@ -1927,15 +1929,15 @@ void func_809DD934(Boss02* this, PlayState* play) {
|
|||
temp_a0_5 = temp_a0_5->next;
|
||||
}
|
||||
{
|
||||
f32 tmp = D_809E0422 ? 3150.0f : 0.0f;
|
||||
f32 tmp = sIsInGiantMode ? 3150.0f : 0.0f;
|
||||
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_BG_INIBS_MOVEBG, 0, tmp, 0, 0, 0, 0, D_809E0422);
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_BG_INIBS_MOVEBG, 0, tmp, 0, 0, 0, 0, sIsInGiantMode);
|
||||
}
|
||||
|
||||
temp_a0_5 = play->actorCtx.actorLists[ACTORCAT_BOSS].first;
|
||||
while (temp_a0_5 != NULL) {
|
||||
if ((temp_a0_5->id == ACTOR_EN_TANRON5) || (temp_a0_5->id == ACTOR_ITEM_B_HEART)) {
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
temp_a0_5->world.pos.y -= 3150.0f;
|
||||
temp_a0_5->world.pos.y *= 10.0f;
|
||||
|
||||
|
|
@ -2043,9 +2045,9 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
|
|||
|
||||
this->unk_1D1C++;
|
||||
if (this->unk_0194 == 0) {
|
||||
sp68 = D_809E0424;
|
||||
sp68 = sRedTwinmold;
|
||||
} else {
|
||||
sp68 = D_809E0428;
|
||||
sp68 = sBlueTwinmold;
|
||||
}
|
||||
|
||||
switch (this->unk_1D20) {
|
||||
|
|
@ -2090,12 +2092,12 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
|
|||
|
||||
if (this->unk_1D1C == 45) {
|
||||
func_800B7298(play, &this->actor, 21);
|
||||
D_809E0430 = KREG(91) + 43;
|
||||
sMusicStartTimer = KREG(91) + 43;
|
||||
}
|
||||
|
||||
if (this->unk_1D1C == 85) {
|
||||
D_809E0424->unk_0144 = 11;
|
||||
D_809E0424->unk_014C = 0;
|
||||
sRedTwinmold->unk_0144 = 11;
|
||||
sRedTwinmold->unk_014C = 0;
|
||||
}
|
||||
|
||||
if (this->unk_1D1C == 92) {
|
||||
|
|
@ -2128,8 +2130,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
|
|||
Math_ApproachF(&this->unk_1D30.z, this->unk_1D48.z, 0.1f, 3000.0f);
|
||||
|
||||
if (this->unk_1D1C == 100) {
|
||||
D_809E0428->unk_0144 = 11;
|
||||
D_809E0428->unk_014C = 0;
|
||||
sBlueTwinmold->unk_0144 = 11;
|
||||
sBlueTwinmold->unk_014C = 0;
|
||||
this->unk_0194 = 1;
|
||||
}
|
||||
|
||||
|
|
@ -2145,8 +2147,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
|
|||
func_800B7298(play, &this->actor, 6);
|
||||
this->actor.flags |= ACTOR_FLAG_1;
|
||||
this->unk_1D20 = 0;
|
||||
D_809E0424->unk_0144 = D_809E0428->unk_0144 = 3;
|
||||
D_809E0424->unk_0146[0] = D_809E0428->unk_0146[0] = 60;
|
||||
sRedTwinmold->unk_0144 = sBlueTwinmold->unk_0144 = 3;
|
||||
sRedTwinmold->unk_0146[0] = sBlueTwinmold->unk_0146[0] = 60;
|
||||
gSaveContext.eventInf[5] |= 0x20;
|
||||
}
|
||||
break;
|
||||
|
|
@ -2176,7 +2178,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
|
|||
|
||||
this->unk_1D24.x = player->actor.world.pos.x;
|
||||
this->unk_1D24.y = player->actor.world.pos.y + 100.0f;
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
if (this->unk_1D24.y < 100.0f) {
|
||||
this->unk_1D24.y = 100.0f;
|
||||
}
|
||||
|
|
@ -2207,26 +2209,26 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
|
|||
this->unk_1D20 = 0;
|
||||
this->actor.flags |= ACTOR_FLAG_1;
|
||||
sp68->unk_0144 = 10;
|
||||
if ((D_809E0424->unk_0144 >= 10) && (D_809E0428->unk_0144 >= 10)) {
|
||||
if ((sRedTwinmold->unk_0144 >= 10) && (sBlueTwinmold->unk_0144 >= 10)) {
|
||||
f32 phi_f0;
|
||||
|
||||
this->unk_1D7E = 0;
|
||||
if (D_809E0422 == 0) {
|
||||
if (!sIsInGiantMode) {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0);
|
||||
phi_f0 = 60.0f;
|
||||
} else {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 3153.0f, -15.0f, 0, 1, 0, 35);
|
||||
phi_f0 = 3155.0f;
|
||||
}
|
||||
D_809E0434 = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1,
|
||||
0.0f, phi_f0, 0.0f, 0, 0, 0, 1);
|
||||
sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1,
|
||||
0.0f, phi_f0, 0.0f, 0, 0, 0, 1);
|
||||
|
||||
if (D_809E0422 == 0) {
|
||||
D_809E0434->unk_203 = 0;
|
||||
D_809E0434->unk_204 = 1.0f;
|
||||
if (!sIsInGiantMode) {
|
||||
sBlueWarp->unk_203 = 0;
|
||||
sBlueWarp->unk_204 = 1.0f;
|
||||
} else {
|
||||
D_809E0434->unk_203 = 1;
|
||||
D_809E0434->unk_204 = 0.1f;
|
||||
sBlueWarp->unk_203 = 1;
|
||||
sBlueWarp->unk_204 = 0.1f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,13 @@ typedef enum {
|
|||
/* 4 */ TWINMOLD_EFFECT_FLASH, // The flashes of light that appear when the parts of Twinmold explode
|
||||
} TwinmoldEffectType;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ TWINMOLD_RED,
|
||||
/* 35 */ TWINMOLD_BLUE = 35,
|
||||
/* 100 */ TWINMOLD_TAIL = 100,
|
||||
/* 200 */ TWINMOLD_STATIC = 200,
|
||||
} TwinmoldParams;
|
||||
|
||||
typedef struct Boss02 {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ u8 unk_0144;
|
||||
|
|
@ -68,7 +75,7 @@ typedef struct Boss02 {
|
|||
/* 0x15D4 */ Vec3s jointTable[TWINMOLD_HEAD_LIMB_MAX];
|
||||
/* 0x1622 */ Vec3s morphTable[TWINMOLD_HEAD_LIMB_MAX];
|
||||
/* 0x1670 */ Boss02ActionFunc actionFunc;
|
||||
/* 0x1674 */ struct Boss02* unk_1674; // points to the other's instance
|
||||
/* 0x1674 */ struct Boss02* otherTwinmold; // points to the other's instance
|
||||
/* 0x1678 */ s32 unk_1678;
|
||||
/* 0x167C */ Vec3f unk_167C;
|
||||
/* 0x1688 */ ColliderJntSph colliderSphere1;
|
||||
|
|
|
|||
|
|
@ -9306,11 +9306,11 @@
|
|||
0x809DAAA8:("func_809DAAA8",),
|
||||
0x809DAB78:("func_809DAB78",),
|
||||
0x809DBFB4:("func_809DBFB4",),
|
||||
0x809DC218:("func_809DC218",),
|
||||
0x809DC320:("Boss02_Update",),
|
||||
0x809DC78C:("func_809DC78C",),
|
||||
0x809DCA00:("Boss02_Draw",),
|
||||
0x809DD0A8:("func_809DD0A8",),
|
||||
0x809DC218:("Boss02_Tail_Update",),
|
||||
0x809DC320:("Boss02_Twinmold_Update",),
|
||||
0x809DC78C:("Boss02_Static_Update",),
|
||||
0x809DCA00:("Boss02_Twinmold_Draw",),
|
||||
0x809DD0A8:("Boss02_Static_Draw",),
|
||||
0x809DD0CC:("Boss02_UpdateEffects",),
|
||||
0x809DD2F8:("Boss02_DrawEffects",),
|
||||
0x809DD934:("func_809DD934",),
|
||||
|
|
|
|||
|
|
@ -10232,12 +10232,12 @@
|
|||
0x809E0420:("D_809E0420","UNK_TYPE1","",0x1),
|
||||
0x809E0421:("D_809E0421","UNK_TYPE1","",0x1),
|
||||
0x809E0422:("D_809E0422","UNK_TYPE1","",0x1),
|
||||
0x809E0424:("D_809E0424","UNK_TYPE4","",0x4),
|
||||
0x809E0428:("D_809E0428","UNK_TYPE4","",0x4),
|
||||
0x809E042C:("D_809E042C","UNK_TYPE4","",0x4),
|
||||
0x809E0430:("D_809E0430","UNK_TYPE1","",0x1),
|
||||
0x809E0434:("D_809E0434","UNK_TYPE4","",0x4),
|
||||
0x809E0438:("D_809E0438","UNK_TYPE1","",0x1),
|
||||
0x809E0424:("sRedTwinmold","UNK_TYPE4","",0x4),
|
||||
0x809E0428:("sBlueTwinmold","UNK_TYPE4","",0x4),
|
||||
0x809E042C:("sTwinmoldStatic","UNK_TYPE4","",0x4),
|
||||
0x809E0430:("sMusicStartTimer","UNK_TYPE1","",0x1),
|
||||
0x809E0434:("sBlueWarp","UNK_TYPE4","",0x4),
|
||||
0x809E0438:("sEffects","UNK_TYPE1","",0x1),
|
||||
0x809E8EA0:("D_809E8EA0","UNK_TYPE4","",0x4),
|
||||
0x809E8EAC:("Boss_03_InitVars","UNK_TYPE1","",0x1),
|
||||
0x809E8ECC:("D_809E8ECC","UNK_TYPE1","",0x1),
|
||||
|
|
|
|||
Loading…
Reference in New Issue