Document object_boss04 (Wart and Bubbles) (#915)

* Document object_boss04 (Wart and Bubbles)

* Use WART_LIMB_MAX

* Fix include error
This commit is contained in:
Tom Overton 2022-07-11 19:56:12 -07:00 committed by GitHub
parent acb9216daa
commit 0fbc8ec9fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 119 additions and 103 deletions

View File

@ -1,30 +1,46 @@
<Root>
<!-- Assets for Wart and its Bubbles -->
<File Name="object_boss04" Segment="6">
<Animation Name="object_boss04_Anim_00004C" Offset="0x4C" />
<DList Name="object_boss04_DL_0019B0" Offset="0x19B0" />
<DList Name="object_boss04_DL_001E58" Offset="0x1E58" />
<DList Name="object_boss04_DL_001FC8" Offset="0x1FC8" />
<DList Name="object_boss04_DL_002138" Offset="0x2138" />
<Texture Name="object_boss04_TLUT_002328" OutName="tlut_002328" Format="rgba16" Width="4" Height="4" Offset="0x2328" />
<Texture Name="object_boss04_TLUT_002348" OutName="tlut_002348" Format="rgba16" Width="4" Height="4" Offset="0x2348" />
<Texture Name="object_boss04_Tex_002368" OutName="tex_002368" Format="ci4" Width="64" Height="64" Offset="0x2368" />
<Texture Name="object_boss04_Tex_002B68" OutName="tex_002B68" Format="ci4" Width="8" Height="16" Offset="0x2B68" />
<Texture Name="object_boss04_Tex_002BA8" OutName="tex_002BA8" Format="rgba16" Width="32" Height="32" Offset="0x2BA8" />
<DList Name="object_boss04_DL_0033D8" Offset="0x33D8" />
<DList Name="object_boss04_DL_003450" Offset="0x3450" />
<DList Name="object_boss04_DL_0034C8" Offset="0x34C8" />
<Texture Name="object_boss04_Tex_0034E0" OutName="tex_0034E0" Format="rgba16" Width="32" Height="32" Offset="0x34E0" />
<Texture Name="object_boss04_Tex_003D10" OutName="tex_003D10" Format="ia16" Width="32" Height="32" Offset="0x3D10" />
<DList Name="object_boss04_DL_004510" Offset="0x4510" />
<DList Name="object_boss04_DL_004550" Offset="0x4550" />
<Limb Name="object_boss04_Standardlimb_004568" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_01" Offset="0x4568" />
<Limb Name="object_boss04_Standardlimb_004574" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_02" Offset="0x4574" />
<Limb Name="object_boss04_Standardlimb_004580" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_03" Offset="0x4580" />
<Limb Name="object_boss04_Standardlimb_00458C" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_04" Offset="0x458C" />
<Limb Name="object_boss04_Standardlimb_004598" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_05" Offset="0x4598" />
<Limb Name="object_boss04_Standardlimb_0045A4" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_06" Offset="0x45A4" />
<Limb Name="object_boss04_Standardlimb_0045B0" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_07" Offset="0x45B0" />
<Limb Name="object_boss04_Standardlimb_0045BC" Type="Standard" EnumName="OBJECT_BOSS04_LIMB_08" Offset="0x45BC" />
<Skeleton Name="object_boss04_Skel_0045E8" Type="Flex" LimbType="Standard" LimbNone="OBJECT_BOSS04_LIMB_NONE" LimbMax="OBJECT_BOSS04_LIMB_MAX" EnumName="object_boss04_Limbs" Offset="0x45E8" />
<!-- Wart Animation -->
<Animation Name="gWartIdleAnim" Offset="0x4C" /> <!-- Original name might be "wart". A 20-frame animation where he doesn't move at all. -->
<!-- Wart Limb DisplayLists -->
<DList Name="gWartShellDL" Offset="0x19B0" />
<DList Name="gWartBottomEyelidDL" Offset="0x1E58" />
<DList Name="gWartTopEyelidDL" Offset="0x1FC8" />
<DList Name="gWartEyeDL" Offset="0x2138" />
<!-- Wart Textures -->
<Texture Name="gWartShellTLUT" OutName="wart_shell_tlut" Format="rgba16" Width="4" Height="4" Offset="0x2328" />
<Texture Name="gWartRidgesTLUT" OutName="wart_ridges_tlut" Format="rgba16" Width="4" Height="4" Offset="0x2348" />
<Texture Name="gWartShellTex" OutName="wart_shell" Format="ci4" Width="64" Height="64" Offset="0x2368" />
<Texture Name="gWartRidgesTex" OutName="wart_ridges" Format="ci4" Width="8" Height="16" Offset="0x2B68" />
<Texture Name="gWartEyeTex" OutName="wart_eye" Format="rgba16" Width="32" Height="32" Offset="0x2BA8" />
<!-- Unused DisplayList that can be used to make Bubbles opaque -->
<DList Name="gWartBubbleOpaqueMaterialDL" Offset="0x33D8" />
<!-- Wart Bubble Texture and DisplayLists-->
<DList Name="gWartBubbleMaterialDL" Offset="0x3450" />
<DList Name="gWartBubbleModelDL" Offset="0x34C8" />
<Texture Name="gWartBubbleTex" OutName="wart_bubble" Format="rgba16" Width="32" Height="32" Offset="0x34E0" />
<!-- Wart and Bubble Shadow Texture and DisplayLists -->
<Texture Name="gWartShadowTex" OutName="wart_shadow" Format="ia16" Width="32" Height="32" Offset="0x3D10" />
<DList Name="gWartShadowMaterialDL" Offset="0x4510" />
<DList Name="gWartShadowModelDL" Offset="0x4550" />
<!-- Wart Limbs -->
<Limb Name="gWartRootLimb" Type="Standard" EnumName="WART_LIMB_ROOT" Offset="0x4568" />
<Limb Name="gWartBodyLimb" Type="Standard" EnumName="WART_LIMB_BODY" Offset="0x4574" />
<Limb Name="gWartEyeRootLimb" Type="Standard" EnumName="WART_LIMB_EYE_ROOT" Offset="0x4580" />
<Limb Name="gWartEyeLimb" Type="Standard" EnumName="WART_LIMB_EYE" Offset="0x458C" />
<Limb Name="gWartTopEyelidRootLimb" Type="Standard" EnumName="WART_LIMB_TOP_EYELID_ROOT" Offset="0x4598" />
<Limb Name="gWartTopEyelidLimb" Type="Standard" EnumName="WART_LIMB_TOP_EYELID" Offset="0x45A4" />
<Limb Name="gWartBottomEyelidRootLimb" Type="Standard" EnumName="WART_LIMB_BOTTOM_EYELID_ROOT" Offset="0x45B0" />
<Limb Name="gWartBottomEyelidLimb" Type="Standard" EnumName="WART_LIMB_BOTTOM_EYELID" Offset="0x45BC" />
<!-- Wart Skeleton -->
<Skeleton Name="gWartSkel" Type="Flex" LimbType="Standard" LimbNone="WART_LIMB_NONE" LimbMax="WART_LIMB_MAX" EnumName="WartLimbs" Offset="0x45E8" />
</File>
</Root>

View File

@ -5,7 +5,6 @@
*/
#include "z_boss_04.h"
#include "objects/object_boss04/object_boss04.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20)
@ -172,8 +171,8 @@ void Boss04_Init(Actor* thisx, PlayState* play2) {
this->unk_6F8 = 1.0f;
Collider_InitAndSetJntSph(play, &this->collider1, &this->actor, &sJntSphInit1, this->collider1Elements);
Collider_InitAndSetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, this->collider2Elements);
SkelAnime_InitFlex(play, &this->skelAnime, &object_boss04_Skel_0045E8, &object_boss04_Anim_00004C, this->jointTable,
this->morphtable, 9);
SkelAnime_InitFlex(play, &this->skelAnime, &gWartSkel, &gWartIdleAnim, this->jointTable, this->morphtable,
WART_LIMB_MAX);
spA8.y = this->actor.world.pos.y + 200.0f;
for (i = 0; i < ARRAY_COUNT(D_809EE1F8); i++) {
@ -781,11 +780,11 @@ s32 Boss04_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
rot->z += KREG(35) * 256;
}
if ((limbIndex == 5) || (limbIndex == 7)) {
if ((limbIndex == WART_LIMB_TOP_EYELID_ROOT) || (limbIndex == WART_LIMB_BOTTOM_EYELID_ROOT)) {
rot->y = (rot->y + (s16)this->unk_2CC) - 0x500;
}
if (limbIndex == 4) {
if (limbIndex == WART_LIMB_EYE) {
rot->y += this->unk_2D8;
rot->z += this->unk_2D4;
if (this->unk_2DA != 0) {
@ -803,7 +802,7 @@ void Boss04_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
Boss04* this = THIS;
Vec3f sp18;
if (limbIndex == 1) {
if (limbIndex == WART_LIMB_ROOT) {
Matrix_MultVecY(-500.0f, &this->actor.focus.pos);
Matrix_MultVec3f(&D_809EE228, &sp18);
func_809EC040(0, &this->collider1, &sp18);
@ -834,7 +833,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) {
func_8012C448(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150);
gSPDisplayList(POLY_XLU_DISP++, object_boss04_DL_004510);
gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL);
Matrix_Translate(this->unk_6BC.x, this->actor.floorHeight, this->unk_6BC.z, MTXMODE_NEW);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
@ -842,7 +841,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) {
Matrix_Scale(this->unk_6F8 * 1.8f, 0.0f, this->unk_700 * 2.8f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_boss04_DL_004550);
gSPDisplayList(POLY_XLU_DISP++, gWartShadowModelDL);
}
CLOSE_DISPS(play->state.gfxCtx);

View File

@ -2,77 +2,78 @@
#define Z_BOSS_04_H
#include "global.h"
#include "objects/object_boss04/object_boss04.h"
struct Boss04;
typedef void (*Boss04ActionFunc)(struct Boss04*, PlayState*);
typedef struct Boss04 {
/* 0x0000 */ Actor actor;
/* 0x0144 */ SkelAnime skelAnime;
/* 0x0188 */ Vec3s jointTable[9];
/* 0x01BE */ Vec3s morphtable[9];
/* 0x01F4 */ s16 unk_1F4;
/* 0x01F6 */ u8 unk_1F6;
/* 0x01F7 */ u8 unk_1F7;
/* 0x01F8 */ s16 unk_1F8;
/* 0x01FA */ s16 unk_1FA;
/* 0x01FC */ UNK_TYPE1 unk_1FC[2];
/* 0x01FE */ s16 unk_1FE;
/* 0x0200 */ s16 unk_200;
/* 0x0204 */ Boss04ActionFunc actionFunc;
/* 0x0208 */ ColliderJntSph collider1;
/* 0x0228 */ ColliderJntSphElement collider1Elements[1];
/* 0x0268 */ ColliderJntSph collider2;
/* 0x0288 */ ColliderJntSphElement collider2Elements[1];
/* 0x02C8 */ s16 unk_2C8;
/* 0x02CC */ f32 unk_2CC;
/* 0x02D0 */ f32 unk_2D0;
/* 0x02D4 */ s16 unk_2D4;
/* 0x02D6 */ s16 unk_2D6;
/* 0x02D8 */ s16 unk_2D8;
/* 0x02DA */ s16 unk_2DA;
/* 0x02DC */ s16 unk_2DC;
/* 0x02DE */ s16 unk_2DE;
/* 0x02E0 */ s16 unk_2E0;
/* 0x02E2 */ s16 unk_2E2;
/* 0x02E4 */ Vec3f unk_2E4[16];
/* 0x02E4 */ Vec3f unk_3A4[15];
/* 0x02E4 */ Vec3f unk_458[15];
/* 0x02E4 */ Vec3f unk_50C[11];
/* 0x02E4 */ Vec3f unk_590[11];
/* 0x02E4 */ Vec3f unk_614[6];
/* 0x02E4 */ Vec3f unk_65C[6];
/* 0x02E4 */ Vec3f unk_6A4;
/* 0x02E4 */ Vec3f unk_6B0;
/* 0x06BC */ Vec3f unk_6BC;
/* 0x06C8 */ Vec3f unk_6C8;
/* 0x06D4 */ f32 unk_6D4;
/* 0x06D8 */ f32 unk_6D8;
/* 0x06DC */ f32 unk_6DC;
/* 0x06E0 */ f32 unk_6E0;
/* 0x06E4 */ f32 unk_6E4;
/* 0x06E8 */ f32 unk_6E8;
/* 0x06EC */ UNK_TYPE1 unk_6EC[4];
/* 0x06F0 */ f32 unk_6F0;
/* 0x06F4 */ s16 unk_6F4;
/* 0x06F6 */ s16 unk_6F6;
/* 0x06F8 */ f32 unk_6F8;
/* 0x06FC */ f32 unk_6FC;
/* 0x0700 */ f32 unk_700;
/* 0x0704 */ u32 unk_704;
/* 0x0708 */ s16 unk_708;
/* 0x070A */ s16 unk_70A;
/* 0x070C */ Vec3f unk_70C;
/* 0x0718 */ Vec3f unk_718;
/* 0x0724 */ UNK_TYPE1 unk_724[4];
/* 0x0728 */ f32 unk_728;
/* 0x072C */ UNK_TYPE1 unk_72C[0x10];
/* 0x073C */ f32 unk_73C;
/* 0x0740 */ UNK_TYPE1 unk_740[4];
/* 0x0744 */ f32 unk_744;
/* 0x0748 */ s16 unk_748;
/* 0x074A */ u8 unk_74A;
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[WART_LIMB_MAX];
/* 0x1BE */ Vec3s morphtable[WART_LIMB_MAX];
/* 0x1F4 */ s16 unk_1F4;
/* 0x1F6 */ u8 unk_1F6;
/* 0x1F7 */ u8 unk_1F7;
/* 0x1F8 */ s16 unk_1F8;
/* 0x1FA */ s16 unk_1FA;
/* 0x1FC */ UNK_TYPE1 unk_1FC[2];
/* 0x1FE */ s16 unk_1FE;
/* 0x200 */ s16 unk_200;
/* 0x204 */ Boss04ActionFunc actionFunc;
/* 0x208 */ ColliderJntSph collider1;
/* 0x228 */ ColliderJntSphElement collider1Elements[1];
/* 0x268 */ ColliderJntSph collider2;
/* 0x288 */ ColliderJntSphElement collider2Elements[1];
/* 0x2C8 */ s16 unk_2C8;
/* 0x2CC */ f32 unk_2CC;
/* 0x2D0 */ f32 unk_2D0;
/* 0x2D4 */ s16 unk_2D4;
/* 0x2D6 */ s16 unk_2D6;
/* 0x2D8 */ s16 unk_2D8;
/* 0x2DA */ s16 unk_2DA;
/* 0x2DC */ s16 unk_2DC;
/* 0x2DE */ s16 unk_2DE;
/* 0x2E0 */ s16 unk_2E0;
/* 0x2E2 */ s16 unk_2E2;
/* 0x2E4 */ Vec3f unk_2E4[16];
/* 0x2E4 */ Vec3f unk_3A4[15];
/* 0x2E4 */ Vec3f unk_458[15];
/* 0x2E4 */ Vec3f unk_50C[11];
/* 0x2E4 */ Vec3f unk_590[11];
/* 0x2E4 */ Vec3f unk_614[6];
/* 0x2E4 */ Vec3f unk_65C[6];
/* 0x2E4 */ Vec3f unk_6A4;
/* 0x2E4 */ Vec3f unk_6B0;
/* 0x6BC */ Vec3f unk_6BC;
/* 0x6C8 */ Vec3f unk_6C8;
/* 0x6D4 */ f32 unk_6D4;
/* 0x6D8 */ f32 unk_6D8;
/* 0x6DC */ f32 unk_6DC;
/* 0x6E0 */ f32 unk_6E0;
/* 0x6E4 */ f32 unk_6E4;
/* 0x6E8 */ f32 unk_6E8;
/* 0x6EC */ UNK_TYPE1 unk_6EC[4];
/* 0x6F0 */ f32 unk_6F0;
/* 0x6F4 */ s16 unk_6F4;
/* 0x6F6 */ s16 unk_6F6;
/* 0x6F8 */ f32 unk_6F8;
/* 0x6FC */ f32 unk_6FC;
/* 0x700 */ f32 unk_700;
/* 0x704 */ u32 unk_704;
/* 0x708 */ s16 unk_708;
/* 0x70A */ s16 unk_70A;
/* 0x70C */ Vec3f unk_70C;
/* 0x718 */ Vec3f unk_718;
/* 0x724 */ UNK_TYPE1 unk_724[4];
/* 0x728 */ f32 unk_728;
/* 0x72C */ UNK_TYPE1 unk_72C[0x10];
/* 0x73C */ f32 unk_73C;
/* 0x740 */ UNK_TYPE1 unk_740[4];
/* 0x744 */ f32 unk_744;
/* 0x748 */ s16 unk_748;
/* 0x74A */ u8 unk_74A;
} Boss04; // size = 0x74C
extern const ActorInit Boss_04_InitVars;

View File

@ -594,7 +594,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) {
func_8012C2DC(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, object_boss04_DL_003450);
gSPDisplayList(POLY_XLU_DISP++, gWartBubbleMaterialDL);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 150);
tanron2 = play->actorCtx.actorLists[ACTORCAT_BOSS].first;
@ -633,14 +633,14 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) {
Matrix_RotateZS(-D_80BB8458[i]->unk_14A, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_boss04_DL_0034C8);
gSPDisplayList(POLY_XLU_DISP++, gWartBubbleModelDL);
}
}
func_8012C448(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150);
gSPDisplayList(POLY_XLU_DISP++, object_boss04_DL_004510);
gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL);
tanron2 = play->actorCtx.actorLists[ACTORCAT_BOSS].first;
while (tanron2 != NULL) {
@ -649,7 +649,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) {
Matrix_Scale(0.6f, 0.0f, 0.6f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_boss04_DL_004550);
gSPDisplayList(POLY_XLU_DISP++, gWartShadowModelDL);
}
tanron2 = tanron2->next;
}