Document object_tl (Snapper) (#1349)

* Document object_tl (Snapper)

* Rename skelAnimes/jointTables/morphTables
This commit is contained in:
Tom Overton 2023-08-12 00:31:46 -07:00 committed by GitHub
parent 93dbe1a02a
commit 138dd55662
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 184 additions and 156 deletions

View File

@ -1,61 +1,87 @@
<Root>
<!-- Assets for Snappers. There are two variants: the regular Snapper with four legs, and a Spiked Snapper with spikes instead of legs that spins to attack. -->
<File Name="object_tl" Segment="6">
<Animation Name="object_tl_Anim_000440" Offset="0x440" />
<Animation Name="object_tl_Anim_0008B4" Offset="0x8B4" />
<Animation Name="object_tl_Anim_000AF4" Offset="0xAF4" />
<Animation Name="object_tl_Anim_000B30" Offset="0xB30" />
<DList Name="object_tl_DL_001550" Offset="0x1550" />
<DList Name="object_tl_DL_001800" Offset="0x1800" />
<DList Name="object_tl_DL_0018E0" Offset="0x18E0" />
<Limb Name="object_tl_Standardlimb_001A20" Type="Standard" EnumName="OBJECT_TL_1_LIMB_01" Offset="0x1A20" />
<Limb Name="object_tl_Standardlimb_001A2C" Type="Standard" EnumName="OBJECT_TL_1_LIMB_02" Offset="0x1A2C" />
<Limb Name="object_tl_Standardlimb_001A38" Type="Standard" EnumName="OBJECT_TL_1_LIMB_03" Offset="0x1A38" />
<Skeleton Name="object_tl_Skel_001A50" Type="Flex" LimbType="Standard" LimbNone="OBJECT_TL_1_LIMB_NONE" LimbMax="OBJECT_TL_1_LIMB_MAX" EnumName="ObjectTl1Limb" Offset="0x1A50" />
<Animation Name="object_tl_Anim_001C68" Offset="0x1C68" />
<Animation Name="object_tl_Anim_002510" Offset="0x2510" />
<Animation Name="object_tl_Anim_0027D8" Offset="0x27D8" />
<Animation Name="object_tl_Anim_002F88" Offset="0x2F88" />
<Animation Name="object_tl_Anim_0031DC" Offset="0x31DC" />
<Animation Name="object_tl_Anim_0035EC" Offset="0x35EC" />
<TextureAnimation Name="object_tl_Matanimheader_003624" Offset="0x3624" />
<Animation Name="object_tl_Anim_0039C0" Offset="0x39C0" />
<Animation Name="object_tl_Anim_004210" Offset="0x4210" />
<Texture Name="object_tl_Tex_004220" OutName="tex_004220" Format="rgba16" Width="16" Height="32" Offset="0x4220" />
<Texture Name="object_tl_Tex_004620" OutName="tex_004620" Format="rgba16" Width="16" Height="16" Offset="0x4620" />
<Texture Name="object_tl_Tex_004820" OutName="tex_004820" Format="rgba16" Width="16" Height="32" Offset="0x4820" />
<Texture Name="object_tl_Tex_004C20" OutName="tex_004C20" Format="rgba16" Width="32" Height="16" Offset="0x4C20" />
<Texture Name="object_tl_Tex_005020" OutName="tex_005020" Format="rgba16" Width="8" Height="8" Offset="0x5020" />
<Texture Name="object_tl_Tex_0050A0" OutName="tex_0050A0" Format="rgba16" Width="16" Height="16" Offset="0x50A0" />
<Texture Name="object_tl_Tex_0052A0" OutName="tex_0052A0" Format="rgba16" Width="16" Height="8" Offset="0x52A0" />
<Texture Name="object_tl_Tex_0053A0" OutName="tex_0053A0" Format="rgba16" Width="16" Height="16" Offset="0x53A0" />
<Texture Name="object_tl_Tex_0055A0" OutName="tex_0055A0" Format="rgba16" Width="16" Height="16" Offset="0x55A0" />
<Texture Name="object_tl_Tex_0057A0" OutName="tex_0057A0" Format="rgba16" Width="16" Height="16" Offset="0x57A0" />
<Texture Name="object_tl_Tex_0059A0" OutName="tex_0059A0" Format="rgba16" Width="16" Height="16" Offset="0x59A0" />
<DList Name="object_tl_DL_006C50" Offset="0x6C50" />
<DList Name="object_tl_DL_006DE8" Offset="0x6DE8" />
<DList Name="object_tl_DL_006F30" Offset="0x6F30" />
<DList Name="object_tl_DL_007040" Offset="0x7040" />
<DList Name="object_tl_DL_007188" Offset="0x7188" />
<DList Name="object_tl_DL_007298" Offset="0x7298" />
<DList Name="object_tl_DL_0073E0" Offset="0x73E0" />
<DList Name="object_tl_DL_0074F0" Offset="0x74F0" />
<DList Name="object_tl_DL_007638" Offset="0x7638" />
<DList Name="object_tl_DL_007748" Offset="0x7748" />
<DList Name="object_tl_DL_007938" Offset="0x7938" />
<DList Name="object_tl_DL_0079C8" Offset="0x79C8" />
<Limb Name="object_tl_Standardlimb_007BB0" Type="Standard" EnumName="OBJECT_TL_2_LIMB_01" Offset="0x7BB0" />
<Limb Name="object_tl_Standardlimb_007BBC" Type="Standard" EnumName="OBJECT_TL_2_LIMB_02" Offset="0x7BBC" />
<Limb Name="object_tl_Standardlimb_007BC8" Type="Standard" EnumName="OBJECT_TL_2_LIMB_03" Offset="0x7BC8" />
<Limb Name="object_tl_Standardlimb_007BD4" Type="Standard" EnumName="OBJECT_TL_2_LIMB_04" Offset="0x7BD4" />
<Limb Name="object_tl_Standardlimb_007BE0" Type="Standard" EnumName="OBJECT_TL_2_LIMB_05" Offset="0x7BE0" />
<Limb Name="object_tl_Standardlimb_007BEC" Type="Standard" EnumName="OBJECT_TL_2_LIMB_06" Offset="0x7BEC" />
<Limb Name="object_tl_Standardlimb_007BF8" Type="Standard" EnumName="OBJECT_TL_2_LIMB_07" Offset="0x7BF8" />
<Limb Name="object_tl_Standardlimb_007C04" Type="Standard" EnumName="OBJECT_TL_2_LIMB_08" Offset="0x7C04" />
<Limb Name="object_tl_Standardlimb_007C10" Type="Standard" EnumName="OBJECT_TL_2_LIMB_09" Offset="0x7C10" />
<Limb Name="object_tl_Standardlimb_007C1C" Type="Standard" EnumName="OBJECT_TL_2_LIMB_0A" Offset="0x7C1C" />
<Limb Name="object_tl_Standardlimb_007C28" Type="Standard" EnumName="OBJECT_TL_2_LIMB_0B" Offset="0x7C28" />
<Limb Name="object_tl_Standardlimb_007C34" Type="Standard" EnumName="OBJECT_TL_2_LIMB_0C" Offset="0x7C34" />
<Skeleton Name="object_tl_Skel_007C70" Type="Flex" LimbType="Standard" LimbNone="OBJECT_TL_2_LIMB_NONE" LimbMax="OBJECT_TL_2_LIMB_MAX" EnumName="ObjectTl2Limb" Offset="0x7C70" />
<Animation Name="object_tl_Anim_00823C" Offset="0x823C" />
<!-- Snapper Animations -->
<Animation Name="gSnapperRearUpAnim" Offset="0x440" /> <!-- Original name is "tl_aisatsuDEMO" ("greeting") -->
<Animation Name="gSnapperDamageAnim" Offset="0x8B4" /> <!-- Original name is "tl_damage" -->
<Animation Name="gSnapperDeathAnim" Offset="0xAF4" /> <!-- Original name is "tl_dead" -->
<!-- Spiked Snapper Animation -->
<Animation Name="gSpikedSnapperIdleAnim" Offset="0xB30" /> <!-- Original name is "tl_default" -->
<!-- Spiked Snapper Limb DisplayLists -->
<DList Name="gSpikedSnapperBodyDL" Offset="0x1550" />
<DList Name="gSpikedSnapperShellDL" Offset="0x1800" />
<DList Name="gSpikedSnapperSpikesDL" Offset="0x18E0" />
<!-- Spiked Snapper Limbs -->
<Limb Name="gSpikedSnapperBodyLimb" Type="Standard" EnumName="SPIKED_SNAPPER_LIMB_BODY" Offset="0x1A20" />
<Limb Name="gSpikedSnapperShellLimb" Type="Standard" EnumName="SPIKED_SNAPPER_LIMB_SHELL" Offset="0x1A2C" />
<Limb Name="gSpikedSnapperSpikesLimb" Type="Standard" EnumName="SPIKED_SNAPPER_LIMB_SPIKES" Offset="0x1A38" />
<!-- Spiked Snapper Skeleton -->
<Skeleton Name="gSpikedSnapperSkel" Type="Flex" LimbType="Standard" LimbNone="SPIKED_SNAPPER_LIMB_NONE" LimbMax="SPIKED_SNAPPER_LIMB_MAX" EnumName="SpikedSnapperLimb" Offset="0x1A50" />
<!-- Snapper Animations -->
<Animation Name="gSnapperRetreatIntoShellAnim" Offset="0x1C68" /> <!-- Original name is "tl_hikkomi" ("retreat") -->
<Animation Name="gSnapperFlipUprightAnim" Offset="0x2510" /> <!-- Original name is "tl_modoru" ("to rebound; to spring back"). Used for when the Snapper flips itself upright. -->
<Animation Name="gSnapperWiggleLegsAnim" Offset="0x27D8" /> <!-- Original name is "tl_mogaki01" ("struggle; writhing; wriggling; floundering") -->
<Animation Name="gSnapperFailToFlipUprightAnim" Offset="0x2F88" /> <!-- Original name is "tl_mogaki02" -->
<Animation Name="gSnapperEmergeFromShellAnim" Offset="0x31DC" /> <!-- Original name is "tl_nyokkiri" ("sticking out prominently; rising up") -->
<Animation Name="gSnapperBouncedUprightAnim" Offset="0x35EC" /> <!-- Original name is "tl_omotegaeshi" ("omote" = "surface; face", "gaeshi" = "to turn over"). Used for when a Goron Pound flips the Snapper upright. -->
<!-- Unused Eye Texture Animation -->
<TextureAnimation Name="gSnapperEyeTexAnim" Offset="0x3624" />
<!-- Snapper Animations -->
<Animation Name="gSnapperFlipOverAnim" Offset="0x39C0" /> <!-- Original name is "tl_uragaeshi" ("ura" = "opposite side; bottom; other side")-->
<Animation Name="gSnapperIdleAnim" Offset="0x4210" /> <!-- Original name is "tl_wait" -->
<!-- Snapper and Spiked Snapper Textures -->
<Texture Name="gSnapperShellTex" OutName="snapper_shell" Format="rgba16" Width="16" Height="32" Offset="0x4220" />
<Texture Name="gSnapperBodyTex" OutName="snapper_body" Format="rgba16" Width="16" Height="16" Offset="0x4620" />
<Texture Name="gSnapperLegTex" OutName="snapper_leg" Format="rgba16" Width="16" Height="32" Offset="0x4820" />
<Texture Name="gSnapperHeadTex" OutName="snapper_head" Format="rgba16" Width="32" Height="16" Offset="0x4C20" />
<Texture Name="gSnapperMouthTex" OutName="snapper_mouth" Format="rgba16" Width="8" Height="8" Offset="0x5020" />
<Texture Name="gSnapperHoleTex" OutName="snapper_hole" Format="rgba16" Width="16" Height="16" Offset="0x50A0" />
<Texture Name="gSnapperSpikeSkinTex" OutName="snapper_spike_skin" Format="rgba16" Width="16" Height="8" Offset="0x52A0" />
<Texture Name="gSnapperSpikeTex" OutName="snapper_spike" Format="rgba16" Width="16" Height="16" Offset="0x53A0" />
<Texture Name="gSnapperEyeOpenTex" OutName="snapper_eye_open" Format="rgba16" Width="16" Height="16" Offset="0x55A0" />
<Texture Name="gSnapperEyeHalfTex" OutName="snapper_eye_half" Format="rgba16" Width="16" Height="16" Offset="0x57A0" />
<Texture Name="gSnapperEyeClosedTex" OutName="snapper_eye_closed" Format="rgba16" Width="16" Height="16" Offset="0x59A0" />
<!-- Snapper Limb DisplayLists -->
<DList Name="gSnapperBodyDL" Offset="0x6C50" />
<DList Name="gSnapperBackRightLegDL" Offset="0x6DE8" />
<DList Name="gSnapperBackRightFootDL" Offset="0x6F30" />
<DList Name="gSnapperBackLeftLegDL" Offset="0x7040" />
<DList Name="gSnapperBackLeftFootDL" Offset="0x7188" />
<DList Name="gSnapperFrontRightLegDL" Offset="0x7298" />
<DList Name="gSnapperFrontRightFootDL" Offset="0x73E0" />
<DList Name="gSnapperFrontLeftLegDL" Offset="0x74F0" />
<DList Name="gSnapperFrontLeftFootDL" Offset="0x7638" />
<DList Name="gSnapperHeadDL" Offset="0x7748" />
<DList Name="gSnapperEyesDL" Offset="0x7938" />
<DList Name="gSnapperJawDL" Offset="0x79C8" />
<!-- Snapper Limbs -->
<Limb Name="gSnapperBodyLimb" Type="Standard" EnumName="SNAPPER_LIMB_BODY" Offset="0x7BB0" />
<Limb Name="gSnapperHeadLimb" Type="Standard" EnumName="SNAPPER_LIMB_HEAD" Offset="0x7BBC" />
<Limb Name="gSnapperJawLimb" Type="Standard" EnumName="SNAPPER_LIMB_JAW" Offset="0x7BC8" />
<Limb Name="gSnapperEyesLimb" Type="Standard" EnumName="SNAPPER_LIMB_EYES" Offset="0x7BD4" />
<Limb Name="gSnapperFrontLeftLegLimb" Type="Standard" EnumName="SNAPPER_LIMB_FRONT_LEFT_LEG" Offset="0x7BE0" />
<Limb Name="gSnapperFrontLeftFootLimb" Type="Standard" EnumName="SNAPPER_LIMB_FRONT_LEFT_FOOT" Offset="0x7BEC" />
<Limb Name="gSnapperFrontRightLegLimb" Type="Standard" EnumName="SNAPPER_LIMB_FRONT_RIGHT_LEG" Offset="0x7BF8" />
<Limb Name="gSnapperFrontRightFootLimb" Type="Standard" EnumName="SNAPPER_LIMB_FRONT_RIGHT_FOOT" Offset="0x7C04" />
<Limb Name="gSnapperBackLeftLegLimb" Type="Standard" EnumName="SNAPPER_LIMB_BACK_LEFT_LEG" Offset="0x7C10" />
<Limb Name="gSnapperBackLeftFootLimb" Type="Standard" EnumName="SNAPPER_LIMB_BACK_LEFT_FOOT" Offset="0x7C1C" />
<Limb Name="gSnapperBackRightLegLimb" Type="Standard" EnumName="SNAPPER_LIMB_BACK_RIGHT_LEG" Offset="0x7C28" />
<Limb Name="gSnapperBackRightFootLimb" Type="Standard" EnumName="SNAPPER_LIMB_BACK_RIGHT_FOOT" Offset="0x7C34" />
<!-- Snapper Skeleton -->
<Skeleton Name="gSnapperSkel" Type="Flex" LimbType="Standard" LimbNone="SNAPPER_LIMB_NONE" LimbMax="SNAPPER_LIMB_MAX" EnumName="SnapperLimb" Offset="0x7C70" />
<!-- Snapper Animation-->
<Animation Name="gSnapperWalkAnim" Offset="0x823C" /> <!-- Original name is "tl_walk" -->
</File>
</Root>

View File

@ -116,10 +116,10 @@ static DamageTable sDamageTable = {
};
TexturePtr D_80A29754[] = {
object_tl_Tex_0055A0,
object_tl_Tex_0057A0,
object_tl_Tex_0059A0,
object_tl_Tex_0057A0,
gSnapperEyeOpenTex,
gSnapperEyeHalfTex,
gSnapperEyeClosedTex,
gSnapperEyeHalfTex,
};
static InitChainEntry sInitChain[] = {
@ -139,10 +139,10 @@ void EnBigpamet_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
SkelAnime_InitFlex(play, &this->skelAnime2, &object_tl_Skel_007C70, &object_tl_Anim_004210, this->jointTable2,
this->morphTable2, OBJECT_TL_2_LIMB_MAX);
SkelAnime_InitFlex(play, &this->skelAnime1, &object_tl_Skel_001A50, &object_tl_Anim_000B30, this->jointTable1,
this->morphTable1, OBJECT_TL_1_LIMB_MAX);
SkelAnime_InitFlex(play, &this->snapperSkelAnime, &gSnapperSkel, &gSnapperIdleAnim, this->snapperJointTable,
this->snapperMorphTable, SNAPPER_LIMB_MAX);
SkelAnime_InitFlex(play, &this->spikedSnapperSkelAnime, &gSpikedSnapperSkel, &gSpikedSnapperIdleAnim,
this->spikedSnapperJointTable, this->spikedSnapperMorphTable, SPIKED_SNAPPER_LIMB_MAX);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 55.0f);
@ -386,7 +386,7 @@ void func_80A281DC(EnBigpamet* this, PlayState* play) {
}
void func_80A28274(EnBigpamet* this) {
Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_004210);
Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperIdleAnim);
this->actor.draw = EnBigpamet_Draw;
this->unk_29E = 20;
this->actionFunc = func_80A282C8;
@ -413,14 +413,14 @@ void func_80A28378(EnBigpamet* this) {
}
void func_80A283A0(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
SkelAnime_Update(&this->snapperSkelAnime);
if (this->actor.parent->params == GEKKO_ON_SNAPPER) {
func_80A28E40(this);
}
}
void func_80A283F0(EnBigpamet* this) {
Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_00823C);
Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperWalkAnim);
this->actor.speed = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.params = ENBIGPAMET_1;
@ -428,7 +428,7 @@ void func_80A283F0(EnBigpamet* this) {
}
void func_80A2844C(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
SkelAnime_Update(&this->snapperSkelAnime);
if (this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) {
Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->actor.parent),
@ -442,7 +442,7 @@ void func_80A2844C(EnBigpamet* this, PlayState* play) {
}
void func_80A284E4(EnBigpamet* this) {
Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_001C68, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRetreatIntoShellAnim, -3.0f);
this->unk_29E = 0;
this->unk_2A8 = 1.0f;
this->unk_2A4 = 1.0f;
@ -453,13 +453,13 @@ void func_80A284E4(EnBigpamet* this) {
}
void func_80A2855C(EnBigpamet* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime2)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
func_80A28618(this);
} else if (this->skelAnime2.curFrame > 2.0f) {
this->unk_2A8 = 1.5f - ((this->skelAnime2.curFrame - 2.0f) * 0.23333333f);
this->unk_2A4 = 1.5f - ((this->skelAnime2.curFrame - 2.0f) * 0.083333336f);
} else if (this->snapperSkelAnime.curFrame > 2.0f) {
this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * 0.23333333f);
this->unk_2A4 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * 0.083333336f);
} else {
f32 curFrame = this->skelAnime2.curFrame;
f32 curFrame = this->snapperSkelAnime.curFrame;
this->unk_2A4 = this->unk_2A8 = (0.25f * curFrame) + 1.0f;
}
@ -575,7 +575,7 @@ void func_80A289C8(EnBigpamet* this, PlayState* play) {
void func_80A28A28(EnBigpamet* this) {
this->actor.draw = EnBigpamet_Draw;
Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_0031DC, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperEmergeFromShellAnim, -3.0f);
this->unk_2A8 = 0.1f;
this->unk_2A4 = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
@ -587,7 +587,7 @@ void func_80A28A98(EnBigpamet* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x600);
if (SkelAnime_Update(&this->skelAnime2)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
if ((this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) ||
(this->actor.parent->params == GEKKO_JUMP_ON_SNAPPER)) {
func_80A283F0(this);
@ -595,7 +595,7 @@ void func_80A28A98(EnBigpamet* this, PlayState* play) {
func_80A284E4(this);
}
} else {
curFrame = this->skelAnime2.curFrame;
curFrame = this->snapperSkelAnime.curFrame;
if (curFrame > 7.0f) {
this->unk_2A8 = 1.5f - ((curFrame - 7.0f) * (1.0f / 6.0f));
@ -610,7 +610,7 @@ void func_80A28A98(EnBigpamet* this, PlayState* play) {
void func_80A28B98(EnBigpamet* this, PlayState* play) {
Actor* collectible;
Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_000AF4);
Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperDeathAnim);
this->collider.base.atFlags &= ~AT_ON;
this->collider.info.bumper.dmgFlags = 0xF7CFFFFF;
@ -647,7 +647,7 @@ void func_80A28B98(EnBigpamet* this, PlayState* play) {
}
void func_80A28D0C(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
SkelAnime_Update(&this->snapperSkelAnime);
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND);
func_80A27FE8(this, play);
@ -679,14 +679,14 @@ void func_80A28DC0(EnBigpamet* this, PlayState* play) {
}
void func_80A28E40(EnBigpamet* this) {
Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_000440, -2.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRearUpAnim, -2.0f);
this->actor.flags |= ACTOR_FLAG_1;
this->actor.speed = 0.0f;
this->actionFunc = func_80A28E98;
}
void func_80A28E98(EnBigpamet* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime2)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
func_80A284E4(this);
}
}
@ -811,10 +811,10 @@ s32 EnBigpamet_OverrideLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Ve
EnBigpamet* this = THIS;
if ((this->actionFunc == func_80A2855C) || (this->actionFunc == func_80A28A98)) {
if (limbIndex == OBJECT_TL_2_LIMB_02) {
if (limbIndex == SNAPPER_LIMB_HEAD) {
Matrix_Scale(this->unk_2A4, this->unk_2A8, this->unk_2A4, MTXMODE_APPLY);
} else if ((limbIndex == OBJECT_TL_2_LIMB_0B) || (limbIndex == OBJECT_TL_2_LIMB_09) ||
(limbIndex == OBJECT_TL_2_LIMB_07) || (limbIndex == OBJECT_TL_2_LIMB_05)) {
} else if ((limbIndex == SNAPPER_LIMB_BACK_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_BACK_LEFT_LEG) ||
(limbIndex == SNAPPER_LIMB_FRONT_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_LEFT_LEG)) {
Matrix_Scale(this->unk_2A4, this->unk_2A8, this->unk_2A8, MTXMODE_APPLY);
}
}
@ -824,7 +824,7 @@ s32 EnBigpamet_OverrideLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Ve
void EnBigpamet_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnBigpamet* this = THIS;
if (limbIndex == OBJECT_TL_2_LIMB_01) {
if (limbIndex == SNAPPER_LIMB_BODY) {
this->unk_2AC = Matrix_GetCurrent()->yw;
}
}
@ -838,8 +838,9 @@ void EnBigpamet_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x08, D_80A29754[this->unk_29C]);
SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount,
EnBigpamet_OverrideLimbDraw2, EnBigpamet_PostLimbDraw2, &this->actor);
SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable,
this->snapperSkelAnime.dListCount, EnBigpamet_OverrideLimbDraw2, EnBigpamet_PostLimbDraw2,
&this->actor);
func_80A292A8(this, play);
CLOSE_DISPS(play->state.gfxCtx);
@ -848,7 +849,7 @@ void EnBigpamet_Draw(Actor* thisx, PlayState* play) {
s32 EnBigpamet_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnBigpamet* this = THIS;
if (limbIndex == OBJECT_TL_1_LIMB_01) {
if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) {
if (this->actionFunc == func_80A28D0C) {
pos->y -= 2500.0f;
} else {
@ -856,7 +857,7 @@ s32 EnBigpamet_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Ve
}
}
if ((this->unk_2A8 != 1.0f) && (limbIndex == OBJECT_TL_1_LIMB_03)) {
if ((this->unk_2A8 != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) {
Matrix_Scale(1.0f, this->unk_2A8, this->unk_2A8, MTXMODE_APPLY);
}
@ -866,7 +867,7 @@ s32 EnBigpamet_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Ve
void EnBigpamet_PostLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnBigpamet* this = THIS;
if (limbIndex == OBJECT_TL_1_LIMB_01) {
if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) {
this->unk_2AC = Matrix_GetCurrent()->yw;
}
}
@ -875,7 +876,8 @@ void func_80A2966C(Actor* thisx, PlayState* play) {
EnBigpamet* this = THIS;
Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount,
EnBigpamet_OverrideLimbDraw1, EnBigpamet_PostLimbDraw1, &this->actor);
SkelAnime_DrawFlexOpa(play, this->spikedSnapperSkelAnime.skeleton, this->spikedSnapperSkelAnime.jointTable,
this->spikedSnapperSkelAnime.dListCount, EnBigpamet_OverrideLimbDraw1,
EnBigpamet_PostLimbDraw1, &this->actor);
func_80A292A8(this, play);
}

View File

@ -22,12 +22,12 @@ typedef struct {
typedef struct EnBigpamet {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime2;
/* 0x188 */ Vec3s jointTable2[OBJECT_TL_2_LIMB_MAX];
/* 0x1D6 */ Vec3s morphTable2[OBJECT_TL_2_LIMB_MAX];
/* 0x224 */ SkelAnime skelAnime1;
/* 0x268 */ Vec3s jointTable1[OBJECT_TL_1_LIMB_MAX];
/* 0x280 */ Vec3s morphTable1[OBJECT_TL_1_LIMB_MAX];
/* 0x144 */ SkelAnime snapperSkelAnime;
/* 0x188 */ Vec3s snapperJointTable[SNAPPER_LIMB_MAX];
/* 0x1D6 */ Vec3s snapperMorphTable[SNAPPER_LIMB_MAX];
/* 0x224 */ SkelAnime spikedSnapperSkelAnime;
/* 0x268 */ Vec3s spikedSnapperJointTable[SPIKED_SNAPPER_LIMB_MAX];
/* 0x280 */ Vec3s spikedSnapperMorphTable[SPIKED_SNAPPER_LIMB_MAX];
/* 0x298 */ EnBigpametActionFunc actionFunc;
/* 0x29C */ u8 unk_29C;
/* 0x29E */ s16 unk_29E;

View File

@ -6,7 +6,6 @@
#include "z_en_kame.h"
#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h"
#include "objects/object_tl/object_tl.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400)
@ -111,8 +110,7 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
static TexturePtr D_80AD8E34[] = { object_tl_Tex_0055A0, object_tl_Tex_0057A0, object_tl_Tex_0059A0,
object_tl_Tex_0057A0 };
static TexturePtr D_80AD8E34[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex };
static InitChainEntry sInitChain[] = {
ICHAIN_S8(hintId, TATL_HINT_ID_SNAPPER, ICHAIN_CONTINUE),
@ -126,10 +124,10 @@ void EnKame_Init(Actor* thisx, PlayState* play) {
EnKame* this = THIS;
Actor_ProcessInitChain(&this->actor, sInitChain);
SkelAnime_InitFlex(play, &this->skelAnime1, &object_tl_Skel_007C70, &object_tl_Anim_004210, this->jointTable1,
this->morphTable1, 13);
SkelAnime_InitFlex(play, &this->skelAnime2, &object_tl_Skel_001A50, &object_tl_Anim_000B30, this->jointTable2,
this->morphTable2, 4);
SkelAnime_InitFlex(play, &this->snapperSkelAnime, &gSnapperSkel, &gSnapperIdleAnim, this->snapperJointTable,
this->snapperMorphTable, SNAPPER_LIMB_MAX);
SkelAnime_InitFlex(play, &this->spikedSnapperSkelAnime, &gSpikedSnapperSkel, &gSpikedSnapperIdleAnim,
this->spikedSnapperJointTable, this->spikedSnapperMorphTable, SPIKED_SNAPPER_LIMB_MAX);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 55.0f);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
@ -185,7 +183,7 @@ void func_80AD7018(EnKame* this, PlayState* play) {
}
void func_80AD70A0(EnKame* this) {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_004210, -5.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperIdleAnim, -5.0f);
this->actor.speed = 0.0f;
this->actionFunc = func_80AD70EC;
}
@ -193,7 +191,7 @@ void func_80AD70A0(EnKame* this) {
void func_80AD70EC(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Animation_OnFrame(&this->skelAnime1, 10.0f)) {
if (Animation_OnFrame(&this->snapperSkelAnime, 10.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE);
this->unk_2A0 = 40;
}
@ -201,15 +199,15 @@ void func_80AD70EC(EnKame* this, PlayState* play) {
if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
(this->actor.xzDistToPlayer < 240.0f)) {
func_80AD73A8(this);
} else if (SkelAnime_Update(&this->skelAnime1)) {
} else if (SkelAnime_Update(&this->snapperSkelAnime)) {
func_80AD71B4(this);
}
}
void func_80AD71B4(EnKame* this) {
Animation_MorphToLoop(&this->skelAnime1, &object_tl_Anim_00823C, -5.0f);
Animation_MorphToLoop(&this->snapperSkelAnime, &gSnapperWalkAnim, -5.0f);
this->actor.speed = 0.5f;
this->unk_29E = Animation_GetLastFrame(&object_tl_Anim_00823C) * ((s32)Rand_ZeroFloat(5.0f) + 3);
this->unk_29E = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3);
this->unk_2A4 = this->actor.shape.rot.y;
this->collider.base.acFlags |= (AC_HARD | AC_ON);
this->collider.base.colType = COLTYPE_HARD;
@ -225,7 +223,7 @@ void func_80AD7254(EnKame* this, PlayState* play) {
return;
}
SkelAnime_Update(&this->skelAnime1);
SkelAnime_Update(&this->snapperSkelAnime);
if (this->unk_2A4 != this->actor.shape.rot.y) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk_2A4, 0x100);
@ -237,13 +235,13 @@ void func_80AD7254(EnKame* this, PlayState* play) {
this->unk_29E--;
if (this->unk_29E == 0) {
func_80AD70A0(this);
} else if (Animation_OnFrame(&this->skelAnime1, 0.0f) || Animation_OnFrame(&this->skelAnime1, 15.0f)) {
} else if (Animation_OnFrame(&this->snapperSkelAnime, 0.0f) || Animation_OnFrame(&this->snapperSkelAnime, 15.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WALK);
}
}
void func_80AD73A8(EnKame* this) {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_001C68, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRetreatIntoShellAnim, -3.0f);
this->unk_29E = 0;
this->unk_2AC = 1.0f;
this->unk_2A8 = 1.0f;
@ -257,7 +255,7 @@ void func_80AD73A8(EnKame* this) {
void func_80AD7424(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (SkelAnime_Update(&this->skelAnime1)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
((this->unk_29E == 0) || (this->actor.xzDistToPlayer < 120.0f))) {
func_80AD76CC(this);
@ -267,11 +265,11 @@ void func_80AD7424(EnKame* this, PlayState* play) {
func_80AD7B18(this);
}
}
} else if (this->skelAnime1.curFrame > 2.0f) {
this->unk_2AC = 1.5f - ((this->skelAnime1.curFrame - 2.0f) * (7.0f / 30));
this->unk_2A8 = 1.5f - ((this->skelAnime1.curFrame - 2.0f) * (1.0f / 12));
} else if (this->snapperSkelAnime.curFrame > 2.0f) {
this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30));
this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12));
} else {
f32 frame = this->skelAnime1.curFrame;
f32 frame = this->snapperSkelAnime.curFrame;
this->unk_2AC = (0.25f * frame) + 1.0f;
this->unk_2A8 = (0.25f * frame) + 1.0f;
@ -402,7 +400,7 @@ void func_80AD7948(EnKame* this, PlayState* play) {
void func_80AD7B18(EnKame* this) {
this->actor.draw = EnKame_Draw;
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0031DC, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperEmergeFromShellAnim, -3.0f);
this->actor.speed = 0.0f;
this->unk_2AC = 0.1f;
this->unk_2A8 = 1.0f;
@ -411,13 +409,13 @@ void func_80AD7B18(EnKame* this) {
}
void func_80AD7B90(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime1)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
func_80AD71B4(this);
} else if (this->skelAnime1.curFrame > 7.0f) {
this->unk_2AC = 1.5f - ((this->skelAnime1.curFrame - 7.0f) * (1.0f / 6));
this->unk_2A8 = 1.5f - ((this->skelAnime1.curFrame - 7.0f) * (1.0f / 6));
} else if (this->snapperSkelAnime.curFrame > 7.0f) {
this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6));
this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6));
} else {
f32 frame = this->skelAnime1.curFrame;
f32 frame = this->snapperSkelAnime.curFrame;
this->unk_2AC = (0.2f * frame) + 0.1f;
this->unk_2A8 = ((1.0f / 14) * frame) + 1.0f;
@ -426,11 +424,11 @@ void func_80AD7B90(EnKame* this, PlayState* play) {
void func_80AD7C54(EnKame* this) {
if (this->actionFunc == func_80AD7E0C) {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0035EC, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperBouncedUprightAnim, -3.0f);
this->unk_29E = 1;
this->collider.info.bumper.dmgFlags &= ~0x8000;
} else {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0039C0, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipOverAnim, -3.0f);
this->unk_29E = 0;
this->collider.info.bumper.dmgFlags |= 0x8000;
}
@ -447,7 +445,7 @@ void func_80AD7C54(EnKame* this) {
}
void func_80AD7D40(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime1)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
if (this->unk_29E == 1) {
func_80AD71B4(this);
} else {
@ -458,7 +456,7 @@ void func_80AD7D40(EnKame* this, PlayState* play) {
}
void func_80AD7DA4(EnKame* this) {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0027D8, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim, -3.0f);
this->collider.base.acFlags |= AC_ON;
this->collider.base.acFlags &= ~AC_HARD;
this->collider.base.colType = COLTYPE_HIT6;
@ -469,11 +467,11 @@ void func_80AD7DA4(EnKame* this) {
void func_80AD7E0C(EnKame* this, PlayState* play) {
if (this->unk_29E > 0) {
this->unk_29E--;
if (SkelAnime_Update(&this->skelAnime1)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
if (Rand_ZeroOne() > 0.5f) {
Animation_PlayOnce(&this->skelAnime1, &object_tl_Anim_0027D8);
Animation_PlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim);
} else {
Animation_PlayOnce(&this->skelAnime1, &object_tl_Anim_002F88);
Animation_PlayOnce(&this->snapperSkelAnime, &gSnapperFailToFlipUprightAnim);
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_ROAR);
}
}
@ -483,16 +481,16 @@ void func_80AD7E0C(EnKame* this, PlayState* play) {
}
void func_80AD7EC0(EnKame* this) {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_002510, -3.0f);
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipUprightAnim, -3.0f);
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WAKEUP);
this->actionFunc = func_80AD7F10;
}
void func_80AD7F10(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime1)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
func_80AD71B4(this);
} else if (this->skelAnime1.curFrame >= 10.0f) {
} else if (this->snapperSkelAnime.curFrame >= 10.0f) {
this->actor.shape.shadowDraw = NULL;
this->collider.base.acFlags &= ~AC_ON;
this->collider.info.bumper.dmgFlags &= ~0x8000;
@ -525,9 +523,9 @@ void func_80AD7FF8(EnKame* this, PlayState* play) {
}
void func_80AD8060(EnKame* this) {
s16 lastFrame = Animation_GetLastFrame(&object_tl_Anim_0008B4);
s16 lastFrame = Animation_GetLastFrame(&gSnapperDamageAnim);
Animation_Change(&this->skelAnime1, &object_tl_Anim_0008B4, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f);
Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f);
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame);
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE);
this->collider.base.acFlags &= ~AC_ON;
@ -535,13 +533,13 @@ void func_80AD8060(EnKame* this) {
}
void func_80AD810C(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime1)) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
func_80AD7DA4(this);
}
}
void func_80AD8148(EnKame* this, PlayState* play) {
Animation_PlayLoop(&this->skelAnime1, &object_tl_Anim_000AF4);
Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperDeathAnim);
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
this->collider.base.acFlags &= ~AC_ON;
this->collider.base.atFlags &= ~AT_ON;
@ -565,7 +563,7 @@ void func_80AD8148(EnKame* this, PlayState* play) {
}
void func_80AD825C(EnKame* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime1);
SkelAnime_Update(&this->snapperSkelAnime);
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND);
func_80AD8364(this);
@ -590,7 +588,7 @@ void func_80AD8364(EnKame* this) {
void func_80AD8388(EnKame* this, PlayState* play) {
Vec3f sp34;
SkelAnime_Update(&this->skelAnime1);
SkelAnime_Update(&this->snapperSkelAnime);
this->actor.colorFilterTimer = 100;
if (this->unk_29E > 0) {
this->unk_29E--;
@ -756,9 +754,10 @@ s32 func_80AD8A48(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
EnKame* this = THIS;
if ((this->actionFunc == func_80AD7424) || (this->actionFunc == func_80AD7B90)) {
if (limbIndex == 2) {
if (limbIndex == SNAPPER_LIMB_HEAD) {
Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2A8, MTXMODE_APPLY);
} else if ((limbIndex == 11) || (limbIndex == 9) || (limbIndex == 7) || (limbIndex == 5)) {
} else if ((limbIndex == SNAPPER_LIMB_BACK_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_BACK_LEFT_LEG) ||
(limbIndex == SNAPPER_LIMB_FRONT_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_LEFT_LEG)) {
Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY);
}
}
@ -777,7 +776,7 @@ void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
Matrix_MultZero(&this->limbPos[D_80AD8EA4[limbIndex]]);
}
if (limbIndex == 1) {
if (limbIndex == SNAPPER_LIMB_BODY) {
s32 i;
Vec3f* ptr;
Vec3f* ptr2;
@ -810,8 +809,8 @@ void EnKame_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]);
SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount,
func_80AD8A48, func_80AD8AF8, &this->actor);
SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable,
this->snapperSkelAnime.dListCount, func_80AD8A48, func_80AD8AF8, &this->actor);
Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
@ -828,11 +827,11 @@ void EnKame_Draw(Actor* thisx, PlayState* play) {
s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnKame* this = THIS;
if (limbIndex == 1) {
if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) {
pos->y -= 700.0f;
}
if ((this->unk_2AC != 1.0f) && (limbIndex == 3)) {
if ((this->unk_2AC != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) {
Matrix_Scale(1.0f, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY);
}
return false;
@ -842,6 +841,6 @@ void func_80AD8D64(Actor* thisx, PlayState* play) {
EnKame* this = THIS;
Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount,
Enkame_OverrideLimbDraw, NULL, &this->actor);
SkelAnime_DrawFlexOpa(play, this->spikedSnapperSkelAnime.skeleton, this->spikedSnapperSkelAnime.jointTable,
this->spikedSnapperSkelAnime.dListCount, Enkame_OverrideLimbDraw, NULL, &this->actor);
}

View File

@ -2,6 +2,7 @@
#define Z_EN_KAME_H
#include "global.h"
#include "objects/object_tl/object_tl.h"
struct EnKame;
@ -9,12 +10,12 @@ typedef void (*EnKameActionFunc)(struct EnKame*, PlayState*);
typedef struct EnKame {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime1;
/* 0x188 */ Vec3s jointTable1[13];
/* 0x1D6 */ Vec3s morphTable1[13];
/* 0x224 */ SkelAnime skelAnime2;
/* 0x268 */ Vec3s jointTable2[4];
/* 0x280 */ Vec3s morphTable2[4];
/* 0x144 */ SkelAnime snapperSkelAnime;
/* 0x188 */ Vec3s snapperJointTable[SNAPPER_LIMB_MAX];
/* 0x1D6 */ Vec3s snapperMorphTable[SNAPPER_LIMB_MAX];
/* 0x224 */ SkelAnime spikedSnapperSkelAnime;
/* 0x268 */ Vec3s spikedSnapperJointTable[SPIKED_SNAPPER_LIMB_MAX];
/* 0x280 */ Vec3s spikedSnapperMorphTable[SPIKED_SNAPPER_LIMB_MAX];
/* 0x298 */ EnKameActionFunc actionFunc;
/* 0x29C */ u8 unk_29C;
/* 0x29D */ u8 drawDmgEffType;