Boss05 (Bio Deku Baba) OK and documented (#1510)

* Init, Destroy, Update, easy actions

* Just the hard 3 + 1 left

* One left

* OK

Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>

* Data/bss in, extract colheader

* Clean up externs

* Better match for func_809EECBC

* Sfx

* Lot of naming

* fix build

* Name skel stuff

* name limbdraws

* name colliders

* Document `object_boss05`

* Port some names from Odolwa

* Name bio baba types (and relatedly clean up EnPp)

* Better names for the LimbDraw functions + some related vars

* Name all functions

* Name a lot of struct vars

* Colliders and body parts

* Name all struct vars (might come back for a few of these though)

* Name most stack vars

* Fragment states, ice data

* Limb rot index

* Damage effects

* Enum for hit reactions

* Enums for movement state/attack state

* Finish up

* Missed this in EnPp

* Respond to reviews

* Fix comment

* Reverse order for postlimbdraw, etc. functions

* Remove blank line at the top

* Respond to review

* Make a "getter" macro for the force detach timer

* Respond to review

---------

Co-authored-by: Elliptic Ellipsis <elliptic.ellipsis@gmail.com>
Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>
Co-authored-by: angie <angheloalf95@gmail.com>
This commit is contained in:
Tom Overton 2023-11-23 04:37:16 -08:00 committed by GitHub
parent c75d3b97d3
commit 3a952a655d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 1861 additions and 350 deletions

View File

@ -0,0 +1,6 @@
<Root>
<!-- Contains the collision for the Bio Deku Baba's lily pad. -->
<File Name="ovl_Boss_05" BaseAddress="0x809EE4E0" RangeStart="0x3540" RangeEnd="0x364C">
<Collision Name="sBioBabaLilypadCol" Offset="0x3620" />
</File>
</Root>

View File

@ -349,7 +349,7 @@ typedef struct {
/* 0x10 */ UNK_TYPE1 pad10[0x4]; /* 0x10 */ UNK_TYPE1 pad10[0x4];
} Room; // size = 0x14 } Room; // size = 0x14
typedef struct { typedef struct RoomContext {
/* 0x00 */ Room curRoom; /* 0x00 */ Room curRoom;
/* 0x14 */ Room prevRoom; /* 0x14 */ Room prevRoom;
/* 0x28 */ void* roomMemPages[2]; // In a scene with transitions, roomMemory is split between two pages that toggle each transition. This is one continuous range, as the second page allocates from the end /* 0x28 */ void* roomMemPages[2]; // In a scene with transitions, roomMemory is split between two pages that toggle each transition. This is one continuous range, as the second page allocates from the end

4
spec
View File

@ -2316,9 +2316,7 @@ beginseg
name "ovl_Boss_05" name "ovl_Boss_05"
compress compress
include "build/src/overlays/actors/ovl_Boss_05/z_boss_05.o" include "build/src/overlays/actors/ovl_Boss_05/z_boss_05.o"
include "build/data/ovl_Boss_05/ovl_Boss_05.data.o" include "build/src/overlays/actors/ovl_Boss_05/ovl_Boss_05_reloc.o"
include "build/data/ovl_Boss_05/ovl_Boss_05.bss.o"
include "build/data/ovl_Boss_05/ovl_Boss_05.reloc.o"
endseg endseg
beginseg beginseg

View File

@ -1953,17 +1953,17 @@ void Boss01_UpdateDamage(Boss01* this, PlayState* play) {
if (this->shieldCollider.elements[ODOLWA_SHIELD_COLLIDER_SHIELD].info.bumperFlags & BUMP_HIT) { if (this->shieldCollider.elements[ODOLWA_SHIELD_COLLIDER_SHIELD].info.bumperFlags & BUMP_HIT) {
this->bodyInvincibilityTimer = 5; this->bodyInvincibilityTimer = 5;
if (this->damageTimer == 0) { if (this->damagedTimer == 0) {
ColliderInfo* acHitInfo = this->shieldCollider.elements[ODOLWA_SHIELD_COLLIDER_SHIELD].info.acHitInfo; ColliderInfo* acHitInfo = this->shieldCollider.elements[ODOLWA_SHIELD_COLLIDER_SHIELD].info.acHitInfo;
if (acHitInfo->toucher.dmgFlags == DMG_SWORD_BEAM) { if (acHitInfo->toucher.dmgFlags == DMG_SWORD_BEAM) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, this->actor.focus.pos.y, Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, this->actor.focus.pos.y,
this->actor.focus.pos.z, 0, 0, 3, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); this->actor.focus.pos.z, 0, 0, 3, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS));
Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_BOUND); Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_BOUND);
this->damageTimer = 5; this->damagedTimer = 5;
} }
} }
} else if (this->damageTimer == 0) { } else if (this->damagedTimer == 0) {
for (i = 0; i < ODOLWA_SWORD_COLLIDER_MAX; i++) { for (i = 0; i < ODOLWA_SWORD_COLLIDER_MAX; i++) {
if (this->swordCollider.elements[i].info.toucherFlags & TOUCH_HIT) { if (this->swordCollider.elements[i].info.toucherFlags & TOUCH_HIT) {
this->swordCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT; this->swordCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT;
@ -2014,7 +2014,7 @@ void Boss01_UpdateDamage(Boss01* this, PlayState* play) {
case ODOLWA_DMGEFF_STUN: case ODOLWA_DMGEFF_STUN:
stunned: stunned:
Boss01_SetupStunned(this, play); Boss01_SetupStunned(this, play);
this->damageTimer = 15; this->damagedTimer = 15;
Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE); Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->canGuardOrEvade = false; this->canGuardOrEvade = false;
return; return;
@ -2030,14 +2030,14 @@ void Boss01_UpdateDamage(Boss01* this, PlayState* play) {
//! @bug: unreachable code. If Odolwa's damage effect is ODOLWA_DMGEFF_STUN, we early-return out of //! @bug: unreachable code. If Odolwa's damage effect is ODOLWA_DMGEFF_STUN, we early-return out of
//! the function in the above switch statement. //! the function in the above switch statement.
Boss01_SetupStunned(this, play); Boss01_SetupStunned(this, play);
this->damageTimer = 15; this->damagedTimer = 15;
} else if (this->actor.colChkInfo.damageEffect == ODOLWA_DMGEFF_DAZE) { } else if (this->actor.colChkInfo.damageEffect == ODOLWA_DMGEFF_DAZE) {
Boss01_SetupDazed(this, play); Boss01_SetupDazed(this, play);
Audio_PlaySfx_AtPos(&sOdolwaDamageSfxPos, NA_SE_EN_MIBOSS_DAMAGE_OLD); Audio_PlaySfx_AtPos(&sOdolwaDamageSfxPos, NA_SE_EN_MIBOSS_DAMAGE_OLD);
this->damageTimer = 15; this->damagedTimer = 15;
} else { } else {
this->damageFlashTimer = 15; this->damagedFlashTimer = 15;
this->damageTimer = 5; this->damagedTimer = 5;
this->actor.colChkInfo.health -= damage; this->actor.colChkInfo.health -= damage;
if ((s8)this->actor.colChkInfo.health <= 0) { if ((s8)this->actor.colChkInfo.health <= 0) {
Boss01_SetupDeathCutscene(this, play); Boss01_SetupDeathCutscene(this, play);
@ -2382,8 +2382,8 @@ void Boss01_Update(Actor* thisx, PlayState* play2) {
DECR(this->timers[i]); DECR(this->timers[i]);
} }
DECR(this->damageTimer); DECR(this->damagedTimer);
DECR(this->damageFlashTimer); DECR(this->damagedFlashTimer);
this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_TARGETABLE;
this->actionFunc(this, play); this->actionFunc(this, play);
@ -2896,7 +2896,7 @@ void Boss01_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx);
Gfx_SetupDL25_Xlu(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (this->damageFlashTimer & 1) { if ((this->damagedFlashTimer % 2) != 0) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099); POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099);
} }
@ -3252,16 +3252,16 @@ void Boss01_Bug_UpdateDamage(Boss01* this, PlayState* play) {
this->bugACCollider.base.acFlags &= ~AC_HIT; this->bugACCollider.base.acFlags &= ~AC_HIT;
acHitInfo = this->bugACCollider.info.acHitInfo; acHitInfo = this->bugACCollider.info.acHitInfo;
if (this->damageTimer == 0) { if (this->damagedTimer == 0) {
Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW); Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW);
if (acHitInfo->toucher.dmgFlags & 0x300000) { if (acHitInfo->toucher.dmgFlags & 0x300000) {
this->damageTimer = 10; this->damagedTimer = 10;
Matrix_MultVecZ(-10.0f, &additionalVelocity); Matrix_MultVecZ(-10.0f, &additionalVelocity);
this->additionalVelocityX = additionalVelocity.x; this->additionalVelocityX = additionalVelocity.x;
this->additionalVelocityZ = additionalVelocity.z; this->additionalVelocityZ = additionalVelocity.z;
} else { } else {
this->damageTimer = 15; this->damagedTimer = 15;
this->damageFlashTimer = 15; this->damagedFlashTimer = 15;
Matrix_MultVecZ(-20.0f, &additionalVelocity); Matrix_MultVecZ(-20.0f, &additionalVelocity);
this->additionalVelocityX = additionalVelocity.x; this->additionalVelocityX = additionalVelocity.x;
this->additionalVelocityZ = additionalVelocity.z; this->additionalVelocityZ = additionalVelocity.z;
@ -3294,7 +3294,7 @@ void Boss01_Bug_UpdateDamage(Boss01* this, PlayState* play) {
if ((distXZ < (KREG(49) + 210.0f)) && (distXZ > (KREG(49) + 190.0f))) { if ((distXZ < (KREG(49) + 210.0f)) && (distXZ > (KREG(49) + 190.0f))) {
Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA2_DAMAGE); Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA2_DAMAGE);
Boss01_Bug_SetupDead(this, play); Boss01_Bug_SetupDead(this, play);
this->damageFlashTimer = 15; this->damagedFlashTimer = 15;
this->bugDrawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->bugDrawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->actor.speed = 0.0f; this->actor.speed = 0.0f;
this->actor.velocity.y = 5.0f; this->actor.velocity.y = 5.0f;
@ -3313,8 +3313,8 @@ void Boss01_Bug_Update(Actor* thisx, PlayState* play) {
DECR(this->timers[i]); DECR(this->timers[i]);
} }
DECR(this->damageTimer); DECR(this->damagedTimer);
DECR(this->damageFlashTimer); DECR(this->damagedFlashTimer);
this->actionFunc(this, play); this->actionFunc(this, play);
@ -3366,7 +3366,7 @@ void Boss01_Bug_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->damageFlashTimer & 1) { if ((this->damagedFlashTimer % 2) != 0) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099); POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099);
} }

View File

@ -85,8 +85,8 @@ typedef struct Boss01 {
/* 0x14E */ s16 timers[3]; /* 0x14E */ s16 timers[3];
/* 0x154 */ f32 animMorphFrames1; /* 0x154 */ f32 animMorphFrames1;
/* 0x158 */ f32 animMorphFrames2; /* 0x158 */ f32 animMorphFrames2;
/* 0x15C */ s16 damageTimer; /* 0x15C */ s16 damagedTimer;
/* 0x15E */ s16 damageFlashTimer; /* 0x15E */ s16 damagedFlashTimer;
/* 0x160 */ u8 isPerformingVerticalSlash; // set, but never checked /* 0x160 */ u8 isPerformingVerticalSlash; // set, but never checked
/* 0x160 */ u8 landedFromJump; /* 0x160 */ u8 landedFromJump;
/* 0x162 */ u8 waitType; /* 0x162 */ u8 waitType;

File diff suppressed because it is too large Load Diff

View File

@ -2,16 +2,119 @@
#define Z_BOSS_05_H #define Z_BOSS_05_H
#include "global.h" #include "global.h"
#include "assets/objects/object_boss05/object_boss05.h"
struct Boss05; struct Boss05;
typedef void (*Boss05ActionFunc)(struct Boss05*, PlayState*); typedef void (*Boss05ActionFunc)(struct Boss05*, PlayState*);
typedef enum BioDekuBabaType {
/* 0 */ BIO_BABA_TYPE_LILY_PAD_WITH_HEAD,
/* 1 */ BIO_BABA_TYPE_NO_LEAF_LILY_PAD_WITH_HEAD,
/* 2 */ BIO_BABA_TYPE_LILY_PAD,
/* 3 */ BIO_BABA_TYPE_FALLING_HEAD,
/* 4 */ BIO_BABA_TYPE_WALKING_HEAD,
/* 10 */ BIO_BABA_TYPE_FRAGMENT_BASE = 10,
/* 10 */ BIO_BABA_TYPE_FRAGMENT_LOWER_JAW = BIO_BABA_TYPE_FRAGMENT_BASE,
/* 11 */ BIO_BABA_TYPE_FRAGMENT_UPPER_JAW,
/* 12 */ BIO_BABA_TYPE_FRAGMENT_BODY,
/* 13 */ BIO_BABA_TYPE_FRAGMENT_BACK_UPPER_LEG,
/* 14 */ BIO_BABA_TYPE_FRAGMENT_BACK_LOWER_LEG,
/* 15 */ BIO_BABA_TYPE_FRAGMENT_LEFT_UPPER_LEG,
/* 16 */ BIO_BABA_TYPE_FRAGMENT_LEFT_LOWER_LEG,
/* 17 */ BIO_BABA_TYPE_FRAGMENT_LEFT_LOWER_EYESTALK,
/* 18 */ BIO_BABA_TYPE_FRAGMENT_LEFT_UPPER_EYESTALK,
/* 19 */ BIO_BABA_TYPE_FRAGMENT_RIGHT_LOWER_EYESTALK,
/* 20 */ BIO_BABA_TYPE_FRAGMENT_RIGHT_UPPER_EYESTALK,
/* 21 */ BIO_BABA_TYPE_FRAGMENT_RIGHT_UPPER_LEG,
/* 22 */ BIO_BABA_TYPE_FRAGMENT_RIGHT_LOWER_LEG,
/* 23 */ BIO_BABA_TYPE_FRAGMENT_LEAVES,
/* 24 */ BIO_BABA_TYPE_MAX
} BioDekuBabaType;
typedef enum BioDekuBabaBodyPart {
/* 0 */ BIO_BABA_BODYPART_HEAD,
/* 1 */ BIO_BABA_BODYPART_MAX
} BioDekuBabaBodyPart;
typedef enum BioDekuBabaHeadCollider {
/* 0 */ BIO_BABA_HEAD_COLLIDER_HEAD,
/* 1 */ BIO_BABA_HEAD_COLLIDER_MAX
} BioDekuBabaHeadCollider;
typedef enum BioDekuBabaLilyPadCollider {
/* 0 */ BIO_BABA_LILY_PAD_COLLIDER_UPPER_STEM,
/* 1 */ BIO_BABA_LILY_PAD_COLLIDER_MIDDLE_STEM,
/* 2 */ BIO_BABA_LILY_PAD_COLLIDER_MAX
} BioDekuBabaLilyPadCollider;
typedef enum BioDekuBabaLilyPadWithHeadLimbRotIndex {
/* -1 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_NONE = -1,
/* 0 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_UPPER_STEM,
/* 1 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_MIDDLE_STEM,
/* 2 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_LOWER_STEM,
/* 3 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_LEFT_UPPER_ARM,
/* 4 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_LEFT_LOWER_ARM,
/* 5 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_RIGHT_UPPER_ARM,
/* 6 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_RIGHT_LOWER_ARM,
/* 7 */ BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_MAX
} BioDekuBabaLilyPadWithHeadLimbRotIndex;
#define BIO_BABA_GET_TYPE(thisx) ((thisx)->params)
#define BIO_BABA_GET_FRAGMENT_INDEX(thisx) ((thisx)->params - BIO_BABA_TYPE_FRAGMENT_BASE)
#define BIO_BABA_FORCE_DETACH_TIMER(thisx) ((thisx)->world.rot.z)
typedef struct Boss05 { typedef struct Boss05 {
/* 0x000 */ Actor actor; /* 0x000 */ DynaPolyActor dyna;
/* 0x144 */ char unk_144[0x2C]; /* 0x15C */ union {
u8 lilyPadWithHeadAttackState;
u8 fragmentState;
};
/* 0x15E */ s16 flipAttackFrameCounter;
/* 0x160 */ s16 frameCounter;
/* 0x162 */ s16 timers[3];
/* 0x168 */ s16 forceDetachTimer;
/* 0x16A */ s16 damagedTimer;
/* 0x16C */ s16 damagedFlashTimer;
/* 0x170 */ Boss05ActionFunc actionFunc; /* 0x170 */ Boss05ActionFunc actionFunc;
/* 0x174 */ char unk_174[0x394]; /* 0x174 */ u8 lilyPadWithHeadMovementState;
/* 0x176 */ s16 lilyPadRotY;
/* 0x178 */ s16 lilyPadRotX;
/* 0x17A */ s16 drawDmgEffTimer;
/* 0x17C */ f32 drawDmgEffScale;
/* 0x180 */ f32 drawDmgEffFrozenSteamScale;
/* 0x184 */ f32 drawDmgEffAlpha;
/* 0x188 */ u8 drawDmgEffState;
/* 0x189 */ u8 drawDmgEffType;
/* 0x18C */ Vec3f bodyPartsPos[BIO_BABA_BODYPART_MAX];
/* 0x198 */ f32 fallingHeadLilyPadLimbScale;
/* 0x19C */ s16 lilyPadWithHeadStemRotX;
/* 0x19E */ Vec3s lilyPadWithHeadLimbRot[BIO_BABA_LILY_PAD_WITH_HEAD_LIMB_ROT_INDEX_MAX];
/* 0x1C8 */ ColliderJntSph lilyPadCollider;
/* 0x1E8 */ ColliderJntSphElement lilyPadColliderElements[BIO_BABA_LILY_PAD_COLLIDER_MAX];
/* 0x268 */ SkelAnime lilyPadSkelAnime;
/* 0x2AC */ Vec3s lilyPadJointTable[BIO_DEKU_BABA_LILY_PAD_LIMB_MAX];
/* 0x2E8 */ Vec3s lilyPadMorphTable[BIO_DEKU_BABA_LILY_PAD_LIMB_MAX];
/* 0x324 */ union {
Vec3f headPos;
Vec3f fragmentPos;
};
/* 0x330 */ Vec3s headRot;
/* 0x338 */ f32 knockbackMagnitude;
/* 0x33C */ Vec3f knockbackVelocity;
/* 0x348 */ s16 knockbackAngle;
/* 0x34C */ Vec3f walkTargetPos;
/* 0x35C */ f32 walkAngularVelocityY;
/* 0x35C */ f32 lowerJawScaleXZ;
/* 0x360 */ f32 headBodyScale;
/* 0x364 */ f32 headLimbScale;
/* 0x368 */ ColliderJntSph headCollider;
/* 0x388 */ ColliderJntSphElement headColliderElements[BIO_BABA_HEAD_COLLIDER_MAX];
/* 0x3C8 */ SkelAnime headSkelAnime;
/* 0x40C */ Vec3s headJointTable[BIO_DEKU_BABA_HEAD_LIMB_MAX];
/* 0x484 */ Vec3s headMorphTable[BIO_DEKU_BABA_HEAD_LIMB_MAX];
/* 0x4FC */ f32 animEndFrame;
/* 0x500 */ Vec3s fragmentAngularVelocity;
} Boss05; // size = 0x508 } Boss05; // size = 0x508
#endif // Z_BOSS_05_H #endif // Z_BOSS_05_H

View File

@ -34,8 +34,8 @@ void EnPp_Damaged(EnPp* this, PlayState* play);
void EnPp_SetupDead(EnPp* this, PlayState* play); void EnPp_SetupDead(EnPp* this, PlayState* play);
void EnPp_Dead(EnPp* this, PlayState* play); void EnPp_Dead(EnPp* this, PlayState* play);
void EnPp_Mask_Detach(EnPp* this, PlayState* play); void EnPp_Mask_Detach(EnPp* this, PlayState* play);
void EnPp_BodyPart_SetupMove(EnPp* this); void EnPp_Fragment_SetupMove(EnPp* this);
void EnPp_BodyPart_Move(EnPp* this, PlayState* play); void EnPp_Fragment_Move(EnPp* this, PlayState* play);
typedef enum { typedef enum {
/* 0 */ EN_PP_COLLISION_RESULT_OK, /* 0 */ EN_PP_COLLISION_RESULT_OK,
@ -66,7 +66,7 @@ typedef enum {
/* 2 */ EN_PP_MASK_DETACH_STATE_DIE /* 2 */ EN_PP_MASK_DETACH_STATE_DIE
} EnPpMaskDetachState; } EnPpMaskDetachState;
static s32 sCurrentDeadBodyPartIndex = 0; static s32 sCurrentFragmentIndex = 0;
typedef enum { typedef enum {
/* 0x0 */ EN_PP_DMGEFF_JUMP, // Forces the Hiploop to jump /* 0x0 */ EN_PP_DMGEFF_JUMP, // Forces the Hiploop to jump
@ -233,12 +233,12 @@ void EnPp_Init(Actor* thisx, PlayState* play) {
this->actor.params = EN_PP_TYPE_MASKED; this->actor.params = EN_PP_TYPE_MASKED;
} }
if (EN_PP_GET_TYPE(&this->actor) >= EN_PP_TYPE_BODY_PART_BASE) { if (EN_PP_GET_TYPE(&this->actor) >= EN_PP_TYPE_FRAGMENT_BASE) {
this->deadBodyPartIndex = sCurrentDeadBodyPartIndex; this->fragmentIndex = sCurrentFragmentIndex;
sCurrentDeadBodyPartIndex++; sCurrentFragmentIndex++;
this->actor.shape.rot.y = this->actor.world.rot.y; this->actor.shape.rot.y = this->actor.world.rot.y;
Actor_SetScale(&this->actor, 0.03f); Actor_SetScale(&this->actor, 0.03f);
EnPp_BodyPart_SetupMove(this); EnPp_Fragment_SetupMove(this);
} else { } else {
Collider_InitAndSetJntSph(play, &this->maskCollider, &this->actor, &sMaskColliderJntSphInit, Collider_InitAndSetJntSph(play, &this->maskCollider, &this->actor, &sMaskColliderJntSphInit,
this->maskColliderElements); this->maskColliderElements);
@ -304,7 +304,7 @@ void EnPp_Init(Actor* thisx, PlayState* play) {
void EnPp_Destroy(Actor* thisx, PlayState* play) { void EnPp_Destroy(Actor* thisx, PlayState* play) {
EnPp* this = THIS; EnPp* this = THIS;
if (EN_PP_GET_TYPE(&this->actor) < EN_PP_TYPE_BODY_PART_BASE) { if (EN_PP_GET_TYPE(&this->actor) < EN_PP_TYPE_FRAGMENT_BASE) {
Collider_DestroyJntSph(play, &this->maskCollider); Collider_DestroyJntSph(play, &this->maskCollider);
Collider_DestroyJntSph(play, &this->bodyCollider); Collider_DestroyJntSph(play, &this->bodyCollider);
Collider_DestroyQuad(play, &this->hornCollider); Collider_DestroyQuad(play, &this->hornCollider);
@ -1175,26 +1175,26 @@ void EnPp_Mask_Detach(EnPp* this, PlayState* play) {
} }
} }
void EnPp_BodyPart_SetupMove(EnPp* this) { void EnPp_Fragment_SetupMove(EnPp* this) {
EnPp_ChangeAnim(this, EN_PP_ANIM_DAMAGE); EnPp_ChangeAnim(this, EN_PP_ANIM_DAMAGE);
this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 13.0f; this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 13.0f;
this->actor.gravity = -2.0f; this->actor.gravity = -2.0f;
this->timer = Rand_S16Offset(30, 30); this->timer = Rand_S16Offset(30, 30);
this->deadBodyPartAngularVelocity.x = (this->deadBodyPartIndex * 0x2E) + 0xFF00; this->fragmentAngularVelocity.x = (this->fragmentIndex * 0x2E) + 0xFF00;
this->deadBodyPartAngularVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00; this->fragmentAngularVelocity.z = (this->fragmentIndex * 0x2E) + 0xFF00;
if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_BODY_PART_BODY) { if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_FRAGMENT_BODY) {
this->actor.speed = Rand_ZeroFloat(4.0f) + 4.0f; this->actor.speed = Rand_ZeroFloat(4.0f) + 4.0f;
this->actor.world.rot.y = ((s32)Rand_CenteredFloat(223.0f) + 0x1999) * this->deadBodyPartIndex; this->actor.world.rot.y = ((s32)Rand_CenteredFloat(223.0f) + 0x1999) * this->fragmentIndex;
} }
this->action = EN_PP_ACTION_BODY_PART_MOVE; this->action = EN_PP_ACTION_BODY_PART_MOVE;
this->actionFunc = EnPp_BodyPart_Move; this->actionFunc = EnPp_Fragment_Move;
} }
/** /**
* Makes the body part fly through the air. If it touches water, it will make a splash. * Makes the fragment fly through the air. If it touches water, it will make a splash.
*/ */
void EnPp_BodyPart_Move(EnPp* this, PlayState* play) { void EnPp_Fragment_Move(EnPp* this, PlayState* play) {
s32 pad; s32 pad;
Vec3f splashPos; Vec3f splashPos;
WaterBox* waterBox; WaterBox* waterBox;
@ -1202,26 +1202,29 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) {
s32 i; s32 i;
SkelAnime_Update(&this->skelAnime); SkelAnime_Update(&this->skelAnime);
if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) {
this->deadBodyPartCount = EN_PP_DEAD_BODYPART_MAX; // Updates the positions of the blue flames for this fragment. The body fragment has 10 flames, while all other
for (i = 0; i < EN_PP_DEAD_BODYPART_MAX; i++) { // fragments only have a single flame.
Math_Vec3f_Copy(&this->deadBodyPartsPos[i], &this->deadBodyPartPos); if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_FRAGMENT_BODY) {
this->deadBodyPartsPos[i].x += Math_SinS(0xCCC * i) * 15.0f; this->fragmentFlameCount = ARRAY_COUNT(this->fragmentFlamesPos);
this->deadBodyPartsPos[i].y += -5.0f; for (i = 0; i < ARRAY_COUNT(this->fragmentFlamesPos); i++) {
this->deadBodyPartsPos[i].z += Math_CosS(0xCCC * i) * 15.0f; Math_Vec3f_Copy(&this->fragmentFlamesPos[i], &this->fragmentPos);
this->fragmentFlamesPos[i].x += Math_SinS(0xCCC * i) * 15.0f;
this->fragmentFlamesPos[i].y += -5.0f;
this->fragmentFlamesPos[i].z += Math_CosS(0xCCC * i) * 15.0f;
} }
} else { } else {
Math_Vec3f_Copy(&this->deadBodyPartsPos[0], &this->deadBodyPartPos); Math_Vec3f_Copy(&this->fragmentFlamesPos[0], &this->fragmentPos);
this->deadBodyPartCount = 1; this->fragmentFlameCount = 1;
this->actor.shape.rot.x += this->deadBodyPartAngularVelocity.x; this->actor.shape.rot.x += this->fragmentAngularVelocity.x;
this->actor.shape.rot.z += this->deadBodyPartAngularVelocity.z; this->actor.shape.rot.z += this->fragmentAngularVelocity.z;
} }
if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface, if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface,
&waterBox) && &waterBox) &&
(this->actor.world.pos.y < (waterSurface + 5.0f))) { (this->actor.world.pos.y < (waterSurface + 5.0f))) {
this->timer = 0; this->timer = 0;
if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) { if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_FRAGMENT_BODY) {
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
Math_Vec3f_Copy(&splashPos, &this->actor.world.pos); Math_Vec3f_Copy(&splashPos, &this->actor.world.pos);
splashPos.x += Rand_CenteredFloat(10 + (5 * i)); splashPos.x += Rand_CenteredFloat(10 + (5 * i));
@ -1485,7 +1488,7 @@ s32 EnPp_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
pos->y += this->maskPos.y; pos->y += this->maskPos.y;
pos->z += this->maskPos.z; pos->z += this->maskPos.z;
} }
} else if ((limbIndex + EN_PP_TYPE_BODY_PART_BASE) != EN_PP_GET_TYPE(&this->actor)) { } else if ((limbIndex + EN_PP_TYPE_FRAGMENT_BASE) != EN_PP_GET_TYPE(&this->actor)) {
*dList = NULL; *dList = NULL;
} }
@ -1538,9 +1541,9 @@ void EnPp_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
} }
} }
} else { } else {
if ((EN_PP_GET_TYPE(&this->actor) >= EN_PP_TYPE_BODY_PART_BASE) && if ((EN_PP_GET_TYPE(&this->actor) >= EN_PP_TYPE_FRAGMENT_BASE) &&
((limbIndex + EN_PP_TYPE_BODY_PART_BASE) == EN_PP_GET_TYPE(&this->actor))) { ((limbIndex + EN_PP_TYPE_FRAGMENT_BASE) == EN_PP_GET_TYPE(&this->actor))) {
Matrix_MultVec3f(&gZeroVec3f, &this->deadBodyPartPos); Matrix_MultVec3f(&gZeroVec3f, &this->fragmentPos);
} }
} }
@ -1561,15 +1564,16 @@ void EnPp_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
this->bodyPartIndex = 0; this->bodyPartIndex = 0;
} }
if ((this->action == EN_PP_ACTION_SPAWN_BODY_PARTS) && (this->deadBodyPartsSpawnedCount < 6) && if ((this->action == EN_PP_ACTION_SPAWN_BODY_PARTS) && (this->fragmentsSpawnedCount < 6) &&
((limbIndex == HIPLOOP_LIMB_BODY) || (limbIndex == HIPLOOP_LIMB_FRONT_LEFT_LOWER_LEG) || ((limbIndex == HIPLOOP_LIMB_BODY) || (limbIndex == HIPLOOP_LIMB_FRONT_LEFT_LOWER_LEG) ||
(limbIndex == HIPLOOP_LIMB_FRONT_RIGHT_LOWER_LEG) || (limbIndex == HIPLOOP_LIMB_LEFT_WING_MIDDLE) || (limbIndex == HIPLOOP_LIMB_FRONT_RIGHT_LOWER_LEG) || (limbIndex == HIPLOOP_LIMB_LEFT_WING_MIDDLE) ||
(limbIndex == HIPLOOP_LIMB_RIGHT_WING_MIDDLE) || (limbIndex == HIPLOOP_LIMB_CENTER_WING_MIDDLE))) { (limbIndex == HIPLOOP_LIMB_RIGHT_WING_MIDDLE) || (limbIndex == HIPLOOP_LIMB_CENTER_WING_MIDDLE))) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_PP, this->actor.world.pos.x, this->actor.world.pos.y, Actor_Spawn(&play->actorCtx, play, ACTOR_EN_PP, 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.pos.z, this->actor.world.rot.x, this->actor.world.rot.y,
this->actor.world.rot.z, limbIndex + 7); this->actor.world.rot.z, limbIndex + EN_PP_TYPE_FRAGMENT_BASE);
this->deadBodyPartsSpawnedCount++;
if (this->deadBodyPartsSpawnedCount >= 6) { this->fragmentsSpawnedCount++;
if (this->fragmentsSpawnedCount >= 6) {
this->action = EN_PP_ACTION_DONE_SPAWNING_BODY_PARTS; this->action = EN_PP_ACTION_DONE_SPAWNING_BODY_PARTS;
} }
} }
@ -1589,14 +1593,14 @@ void EnPp_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnPp_OverrideLimbDraw, EnPp_PostLimbDraw, &this->actor); EnPp_OverrideLimbDraw, EnPp_PostLimbDraw, &this->actor);
if (this->deadBodyPartCount != 0) { if (this->fragmentFlameCount != 0) {
scale = 0.4f; scale = 0.4f;
if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) { if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_FRAGMENT_BODY) {
scale = 0.6f; scale = 0.6f;
} }
Actor_DrawDamageEffects(play, &this->actor, this->deadBodyPartsPos, this->deadBodyPartCount, scale, scale, 1.0f, Actor_DrawDamageEffects(play, &this->actor, this->fragmentFlamesPos, this->fragmentFlameCount, scale, scale,
ACTOR_DRAW_DMGEFF_BLUE_FIRE); 1.0f, ACTOR_DRAW_DMGEFF_BLUE_FIRE);
} }
if (this->drawDmgEffTimer != 0) { if (this->drawDmgEffTimer != 0) {

View File

@ -16,44 +16,30 @@ typedef enum {
/* 0 */ EN_PP_TYPE_MASKED, /* 0 */ EN_PP_TYPE_MASKED,
/* 1 */ EN_PP_TYPE_NO_MASK, /* 1 */ EN_PP_TYPE_NO_MASK,
/* 2 */ EN_PP_TYPE_UNMASKED, /* 2 */ EN_PP_TYPE_UNMASKED,
/* 7 */ EN_PP_TYPE_BODY_PART_BASE = 7, /* 7 */ EN_PP_TYPE_FRAGMENT_BASE = 7,
/* 8 */ EN_PP_TYPE_BODY_PART_BODY, /* 8 */ EN_PP_TYPE_FRAGMENT_BODY = HIPLOOP_LIMB_BODY + EN_PP_TYPE_FRAGMENT_BASE,
/* 10 */ EN_PP_TYPE_BODY_PART_FRONT_LEFT_LOWER_LEG = 10, /* 10 */ EN_PP_TYPE_FRAGMENT_FRONT_LEFT_LOWER_LEG = HIPLOOP_LIMB_FRONT_LEFT_LOWER_LEG + EN_PP_TYPE_FRAGMENT_BASE,
/* 13 */ EN_PP_TYPE_BODY_PART_FRONT_RIGHT_LOWER_LEG = 13, /* 13 */ EN_PP_TYPE_FRAGMENT_FRONT_RIGHT_LOWER_LEG = HIPLOOP_LIMB_FRONT_RIGHT_LOWER_LEG + EN_PP_TYPE_FRAGMENT_BASE,
/* 17 */ EN_PP_TYPE_BODY_PART_LEFT_WING_MIDDLE = 17, /* 17 */ EN_PP_TYPE_FRAGMENT_LEFT_WING_MIDDLE = HIPLOOP_LIMB_LEFT_WING_MIDDLE + EN_PP_TYPE_FRAGMENT_BASE,
/* 23 */ EN_PP_TYPE_BODY_PART_RIGHT_WING_MIDDLE = 23, /* 23 */ EN_PP_TYPE_FRAGMENT_RIGHT_WING_MIDDLE = HIPLOOP_LIMB_RIGHT_WING_MIDDLE + EN_PP_TYPE_FRAGMENT_BASE,
/* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26 /* 26 */ EN_PP_TYPE_FRAGMENT_CENTER_WING_MIDDLE = HIPLOOP_LIMB_CENTER_WING_MIDDLE + EN_PP_TYPE_FRAGMENT_BASE
} EnPpType; } EnPpType;
typedef enum EnPpBodyPart { typedef enum EnPpBodyPart {
/* 0 */ EN_PP_BODYPART_0, /* 0 */ EN_PP_BODYPART_BODY,
/* 1 */ EN_PP_BODYPART_1, /* 1 */ EN_PP_BODYPART_FRONT_LEFT_LOWER_LEG,
/* 2 */ EN_PP_BODYPART_2, /* 2 */ EN_PP_BODYPART_FRONT_LEFT_UPPER_LEG,
/* 3 */ EN_PP_BODYPART_3, /* 3 */ EN_PP_BODYPART_LEFT_WING_MIDDLE,
/* 4 */ EN_PP_BODYPART_4, /* 4 */ EN_PP_BODYPART_BACK_RIGHT_LOWER_LEG,
/* 5 */ EN_PP_BODYPART_5, /* 5 */ EN_PP_BODYPART_RIGHT_WING_MIDDLE,
/* 6 */ EN_PP_BODYPART_6, /* 6 */ EN_PP_BODYPART_CENTER_WING_BASE,
/* 7 */ EN_PP_BODYPART_7, /* 7 */ EN_PP_BODYPART_CENTER_WING_MIDDLE,
/* 8 */ EN_PP_BODYPART_8, /* 8 */ EN_PP_BODYPART_BACK_LEFT_LOWER_LEG,
/* 9 */ EN_PP_BODYPART_9, /* 9 */ EN_PP_BODYPART_RIGHT_EYE,
/* 10 */ EN_PP_BODYPART_10, /* 10 */ EN_PP_BODYPART_LEFT_EYE,
/* 11 */ EN_PP_BODYPART_MAX /* 11 */ EN_PP_BODYPART_MAX
} EnPpBodyPart; } EnPpBodyPart;
typedef enum EnPpDeadBodyPart {
/* 0 */ EN_PP_DEAD_BODYPART_0,
/* 1 */ EN_PP_DEAD_BODYPART_1,
/* 2 */ EN_PP_DEAD_BODYPART_2,
/* 3 */ EN_PP_DEAD_BODYPART_3,
/* 4 */ EN_PP_DEAD_BODYPART_4,
/* 5 */ EN_PP_DEAD_BODYPART_5,
/* 6 */ EN_PP_DEAD_BODYPART_6,
/* 7 */ EN_PP_DEAD_BODYPART_7,
/* 8 */ EN_PP_DEAD_BODYPART_8,
/* 9 */ EN_PP_DEAD_BODYPART_9,
/* 10 */ EN_PP_DEAD_BODYPART_MAX
} EnPpDeadBodyPart;
typedef struct EnPp { typedef struct EnPp {
/* 0x000 */ Actor actor; /* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime; /* 0x144 */ SkelAnime skelAnime;
@ -61,7 +47,7 @@ typedef struct EnPp {
/* 0x224 */ Vec3s morphTable[HIPLOOP_LIMB_MAX]; /* 0x224 */ Vec3s morphTable[HIPLOOP_LIMB_MAX];
/* 0x2C0 */ EnPpActionFunc actionFunc; /* 0x2C0 */ EnPpActionFunc actionFunc;
/* 0x2C4 */ s16 chargesInStraightLines; // If false, the Hiploop will instead charge directly at the player. /* 0x2C4 */ s16 chargesInStraightLines; // If false, the Hiploop will instead charge directly at the player.
/* 0x2C6 */ s16 deadBodyPartIndex; /* 0x2C6 */ s16 fragmentIndex;
/* 0x2C8 */ s16 action; /* 0x2C8 */ s16 action;
/* 0x2CA */ s16 timer; /* 0x2CA */ s16 timer;
/* 0x2CC */ s16 secondaryTimer; /* 0x2CC */ s16 secondaryTimer;
@ -74,7 +60,7 @@ typedef struct EnPp {
s16 maskDetachState; s16 maskDetachState;
} actionVar; } actionVar;
/* 0x2D4 */ s16 maskBounceAngularVelocity; // Controls the speed that the Hiploop rotates to face the player when an attack bounces off the mask. /* 0x2D4 */ s16 maskBounceAngularVelocity; // Controls the speed that the Hiploop rotates to face the player when an attack bounces off the mask.
/* 0x2D6 */ s16 deadBodyPartsSpawnedCount; /* 0x2D6 */ s16 fragmentsSpawnedCount;
/* 0x2D8 */ f32 animEndFrame; /* 0x2D8 */ f32 animEndFrame;
/* 0x2DC */ f32 chargeAndBounceSpeed; /* 0x2DC */ f32 chargeAndBounceSpeed;
/* 0x2DC */ Vec3f ledgeCheckPos[3]; /* 0x2DC */ Vec3f ledgeCheckPos[3];
@ -85,10 +71,10 @@ typedef struct EnPp {
/* 0x340 */ Vec3f maskRot; /* 0x340 */ Vec3f maskRot;
/* 0x34C */ Vec3f maskVelocity; /* 0x34C */ Vec3f maskVelocity;
/* 0x358 */ Vec3f targetPos; /* 0x358 */ Vec3f targetPos;
/* 0x364 */ Vec3f deadBodyPartPos; /* 0x364 */ Vec3f fragmentPos;
/* 0x370 */ s32 deadBodyPartCount; /* 0x370 */ s32 fragmentFlameCount;
/* 0x374 */ Vec3f deadBodyPartsPos[EN_PP_DEAD_BODYPART_MAX]; /* 0x374 */ Vec3f fragmentFlamesPos[10];
/* 0x3EC */ Vec3s deadBodyPartAngularVelocity; /* 0x3EC */ Vec3s fragmentAngularVelocity;
/* 0x3F2 */ s16 drawDmgEffTimer; /* 0x3F2 */ s16 drawDmgEffTimer;
/* 0x3F4 */ s16 drawDmgEffType; /* 0x3F4 */ s16 drawDmgEffType;
/* 0x3F8 */ f32 drawDmgEffScale; /* 0x3F8 */ f32 drawDmgEffScale;

View File

@ -9378,47 +9378,47 @@
0x809EDCCC:("Boss04_OverrideLimbDraw",), 0x809EDCCC:("Boss04_OverrideLimbDraw",),
0x809EDECC:("Boss04_PostLimbDraw",), 0x809EDECC:("Boss04_PostLimbDraw",),
0x809EDF58:("Boss04_Draw",), 0x809EDF58:("Boss04_Draw",),
0x809EE4E0:("func_809EE4E0",), 0x809EE4E0:("Boss05_WalkingHead_Thaw",),
0x809EE668:("func_809EE668",), 0x809EE668:("Boss05_SetColliderSphere",),
0x809EE6F8:("Boss05_Init",), 0x809EE6F8:("Boss05_Init",),
0x809EEC70:("Boss05_Destroy",), 0x809EEC70:("Boss05_Destroy",),
0x809EECBC:("func_809EECBC",), 0x809EECBC:("Boss05_LilyPadWithHead_UpdateDamage",),
0x809EEDD0:("func_809EEDD0",), 0x809EEDD0:("Boss05_LilyPadWithHead_SetupMove",),
0x809EEDE8:("func_809EEDE8",), 0x809EEDE8:("Boss05_LilyPadWithHead_Move",),
0x809EF9BC:("func_809EF9BC",), 0x809EF9BC:("Boss05_LilyPad_Idle",),
0x809EFAB4:("func_809EFAB4",), 0x809EFAB4:("Boss05_FallingHead_Fall",),
0x809EFE50:("func_809EFE50",), 0x809EFE50:("Boss05_WalkingHead_UpdateDamage",),
0x809F0014:("func_809F0014",), 0x809F0014:("Boss05_WalkingHead_IsLookingAtPlayer",),
0x809F0058:("func_809F0058",), 0x809F0058:("Boss05_WalkingHead_TrySpottingPlayer",),
0x809F00CC:("func_809F00CC",), 0x809F00CC:("Boss05_WalkingHead_SetupTransform",),
0x809F010C:("func_809F010C",), 0x809F010C:("Boss05_WalkingHead_Transform",),
0x809F01CC:("func_809F01CC",), 0x809F01CC:("Boss05_WalkingHead_SetupIdle",),
0x809F0244:("func_809F0244",), 0x809F0244:("Boss05_WalkingHead_Idle",),
0x809F02D0:("func_809F02D0",), 0x809F02D0:("Boss05_WalkingHead_SetupWalk",),
0x809F0374:("func_809F0374",), 0x809F0374:("Boss05_WalkingHead_Walk",),
0x809F0474:("func_809F0474",), 0x809F0474:("Boss05_WalkingHead_SetupSpottedPlayer",),
0x809F04C0:("func_809F04C0",), 0x809F04C0:("Boss05_WalkingHead_SpottedPlayer",),
0x809F0538:("func_809F0538",), 0x809F0538:("Boss05_WalkingHead_SetupCharge",),
0x809F0590:("func_809F0590",), 0x809F0590:("Boss05_WalkingHead_Charge",),
0x809F0650:("func_809F0650",), 0x809F0650:("Boss05_WalkingHead_SetupAttack",),
0x809F06B8:("func_809F06B8",), 0x809F06B8:("Boss05_WalkingHead_Attack",),
0x809F0708:("func_809F0708",), 0x809F0708:("Boss05_WalkingHead_SetupDamaged",),
0x809F0780:("func_809F0780",), 0x809F0780:("Boss05_WalkingHead_Damaged",),
0x809F0A0C:("func_809F0A0C",), 0x809F0A0C:("Boss05_WalkingHead_SetupStunned",),
0x809F0A64:("func_809F0A64",), 0x809F0A64:("Boss05_WalkingHead_SetupFreeze",),
0x809F0ABC:("func_809F0ABC",), 0x809F0ABC:("Boss05_WalkingHead_Stunned",),
0x809F0B0C:("func_809F0B0C",), 0x809F0B0C:("Boss05_Fragment_Move",),
0x809F0CCC:("Boss05_Update",), 0x809F0CCC:("Boss05_Update",),
0x809F1050:("func_809F1050",), 0x809F1050:("Boss05_LilyPadWithHead_OverrideLimbDraw",),
0x809F1170:("func_809F1170",), 0x809F1170:("Boss05_LilyPad_PostLimbDraw",),
0x809F1284:("func_809F1284",), 0x809F1284:("Boss05_Head_OverrideLimbDraw",),
0x809F12A0:("func_809F12A0",), 0x809F12A0:("Boss05_Head_PostLimbDraw",),
0x809F135C:("func_809F135C",), 0x809F135C:("Boss05_Head_TransformLimbDraw",),
0x809F1404:("func_809F1404",), 0x809F1404:("Boss05_LilyPad_OverrideLimbDraw",),
0x809F1430:("func_809F1430",), 0x809F1430:("Boss05_FallingHeadLilyPad_OverrideLimbDraw",),
0x809F1464:("func_809F1464",), 0x809F1464:("Boss05_FallingHeadLilyPad_TransformLimbDraw",),
0x809F14AC:("func_809F14AC",), 0x809F14AC:("Boss05_Fragment_OverrideLimbDraw",),
0x809F1550:("func_809F1550",), 0x809F1550:("Boss05_Fragment_PostLimbDraw",),
0x809F159C:("Boss05_Draw",), 0x809F159C:("Boss05_Draw",),
0x809F2120:("func_809F2120",), 0x809F2120:("func_809F2120",),
0x809F2140:("func_809F2140",), 0x809F2140:("func_809F2140",),
@ -13227,8 +13227,8 @@
0x80B1FC7C:("EnPp_Dead",), 0x80B1FC7C:("EnPp_Dead",),
0x80B1FF20:("EnPp_Mask_SetupDetach",), 0x80B1FF20:("EnPp_Mask_SetupDetach",),
0x80B20030:("EnPp_Mask_Detach",), 0x80B20030:("EnPp_Mask_Detach",),
0x80B202B8:("EnPp_BodyPart_SetupMove",), 0x80B202B8:("EnPp_Fragment_SetupMove",),
0x80B203BC:("EnPp_BodyPart_Move",), 0x80B203BC:("EnPp_Fragment_Move",),
0x80B20668:("EnPp_UpdateDamage",), 0x80B20668:("EnPp_UpdateDamage",),
0x80B20B40:("EnPp_Update",), 0x80B20B40:("EnPp_Update",),
0x80B20E6C:("EnPp_OverrideLimbDraw",), 0x80B20E6C:("EnPp_OverrideLimbDraw",),

View File

@ -10196,25 +10196,25 @@
0x809F1A30:("D_809F1A30","UNK_TYPE1","",0x1), 0x809F1A30:("D_809F1A30","UNK_TYPE1","",0x1),
0x809F1AD0:("D_809F1AD0","UNK_TYPE1","",0x1), 0x809F1AD0:("D_809F1AD0","UNK_TYPE1","",0x1),
0x809F1B00:("D_809F1B00","UNK_TYPE1","",0x1), 0x809F1B00:("D_809F1B00","UNK_TYPE1","",0x1),
0x809F1B2C:("D_809F1B2C","UNK_TYPE1","",0x1), 0x809F1B2C:("sLilyPadJntSphElementsInit","ColliderJntSphElementInit","[2]",0x48),
0x809F1B74:("D_809F1B74","UNK_TYPE1","",0x1), 0x809F1B74:("sLilyPadJntSphInit","ColliderJntSphInit","",0x10),
0x809F1B84:("D_809F1B84","UNK_TYPE1","",0x1), 0x809F1B84:("sHeadJntSphElementsInit","ColliderJntSphElementInit","[1]",0x24),
0x809F1BA8:("D_809F1BA8","UNK_TYPE1","",0x1), 0x809F1BA8:("sHeadJntSphInit","ColliderJntSphInit","",0x10),
0x809F1BB8:("D_809F1BB8","UNK_TYPE1","",0x1), 0x809F1BB8:("sWalkingHeadJntSphElementsInit","ColliderJntSphElementInit","[1]",0x24),
0x809F1BDC:("D_809F1BDC","UNK_TYPE1","",0x1), 0x809F1BDC:("sWalkingHeadJntSphInit","ColliderJntSphInit","",0x10),
0x809F1BEC:("D_809F1BEC","UNK_TYPE1","",0x1), 0x809F1BEC:("sIcePrimColor","Color_RGBA8","",0x4),
0x809F1BF0:("D_809F1BF0","UNK_TYPE1","",0x1), 0x809F1BF0:("sIceEnvColor","Color_RGBA8","",0x4),
0x809F1BF4:("D_809F1BF4","UNK_TYPE1","",0x1), 0x809F1BF4:("sIceAccel","Vec3f","",0xC),
0x809F1C00:("D_809F1C00","UNK_TYPE1","",0x1), 0x809F1C00:("sLilyPadWithHeadDamageTable","DamageTable","",0x20),
0x809F1C20:("D_809F1C20","UNK_TYPE1","",0x1), 0x809F1C20:("sWalkingHeadDamageTable","DamageTable","",0x20),
0x809F1C40:("Boss_05_InitVars","UNK_TYPE1","",0x1), 0x809F1C40:("Boss_05_InitVars","ActorInit","",0x20),
0x809F1C60:("D_809F1C60","UNK_TYPE2","",0x2), 0x809F1C60:("sWindUpLimbRot","Vec3s","[7]",0x2A),
0x809F1C8C:("D_809F1C8C","UNK_TYPE2","",0x2), 0x809F1C8C:("sLungeAttackLimbRot","Vec3s","[7]",0x2A),
0x809F1CB8:("D_809F1CB8","UNK_TYPE1","",0x1), 0x809F1CB8:("sLimbIndexToLimbRotIndex","s8","[12]",0xC),
0x809F1CC0:("D_809F1CC0","UNK_TYPE1","",0x1), 0x809F1CC4:("sHeadOffset","Vec3f","",0xC),
0x809F1CC4:("D_809F1CC4","UNK_TYPE1","",0x1), 0x809F1CD0:("sHeadColliderOffset","Vec3f","",0xC),
0x809F1CD0:("D_809F1CD0","UNK_TYPE1","",0x1), 0x809F1CDC:("sHeadOffset","Vec3f","",0xC),
0x809F1CDC:("D_809F1CDC","UNK_TYPE1","",0x1), 0x809F1CE8:("sFragmentIndexToLimbIndex","s32","[14]",0x38),
0x809F1D20:("D_809F1D20","f32","",0x4), 0x809F1D20:("D_809F1D20","f32","",0x4),
0x809F1D24:("D_809F1D24","f32","",0x4), 0x809F1D24:("D_809F1D24","f32","",0x4),
0x809F1D28:("D_809F1D28","f32","",0x4), 0x809F1D28:("D_809F1D28","f32","",0x4),
@ -10230,7 +10230,7 @@
0x809F1DA4:("D_809F1DA4","f32","",0x4), 0x809F1DA4:("D_809F1DA4","f32","",0x4),
0x809F1DA8:("D_809F1DA8","f32","",0x4), 0x809F1DA8:("D_809F1DA8","f32","",0x4),
0x809F1DAC:("D_809F1DAC","f32","",0x4), 0x809F1DAC:("D_809F1DAC","f32","",0x4),
0x809F2110:("D_809F2110","UNK_TYPE1","",0x1), 0x809F2110:("sBioDekuBabaHeadColliderPos","Vec3f","",0xC),
0x809F4080:("D_809F4080","UNK_TYPE1","",0x1), 0x809F4080:("D_809F4080","UNK_TYPE1","",0x1),
0x809F40A0:("Boss_06_InitVars","UNK_TYPE1","",0x1), 0x809F40A0:("Boss_06_InitVars","UNK_TYPE1","",0x1),
0x809F40C0:("D_809F40C0","UNK_TYPE1","",0x1), 0x809F40C0:("D_809F40C0","UNK_TYPE1","",0x1),
@ -13708,7 +13708,7 @@
0x80B1DB54:("D_80B1DB54","f32","",0x4), 0x80B1DB54:("D_80B1DB54","f32","",0x4),
0x80B1DB58:("D_80B1DB58","f32","",0x4), 0x80B1DB58:("D_80B1DB58","f32","",0x4),
0x80B1DB5C:("D_80B1DB5C","f32","",0x4), 0x80B1DB5C:("D_80B1DB5C","f32","",0x4),
0x80B21620:("sCurrentDeadBodyPartIndex","UNK_TYPE4","",0x4), 0x80B21620:("sCurrentFragmentIndex","UNK_TYPE4","",0x4),
0x80B21624:("sDamageTable","UNK_TYPE1","",0x1), 0x80B21624:("sDamageTable","UNK_TYPE1","",0x1),
0x80B21644:("En_Pp_InitVars","UNK_TYPE1","",0x1), 0x80B21644:("En_Pp_InitVars","UNK_TYPE1","",0x1),
0x80B21664:("sMaskColliderJntSphElementsInit","UNK_TYPE1","",0x1), 0x80B21664:("sMaskColliderJntSphElementsInit","UNK_TYPE1","",0x1),

View File

@ -196,21 +196,6 @@ D_060005C4 = 0x060005C4;
D_06000A20 = 0x06000A20; D_06000A20 = 0x06000A20;
D_06000040 = 0x06000040; D_06000040 = 0x06000040;
// ovl_Boss_05
D_060006A4 = 0x060006A4;
D_06000A5C = 0x06000A5C;
D_06000ABC = 0x06000ABC;
D_060024E0 = 0x060024E0;
D_06002F0C = 0x06002F0C;
D_06003448 = 0x06003448;
D_06006240 = 0x06006240;
D_06006378 = 0x06006378;
D_06006484 = 0x06006484;
D_06006E50 = 0x06006E50;
D_06007488 = 0x06007488;
D_06007908 = 0x06007908;
// ovl_Boss_07 // ovl_Boss_07
D_06000194 = 0x06000194; D_06000194 = 0x06000194;