From db0111e781cc8ef96ce2bd4d11946e188052393d Mon Sep 17 00:00:00 2001 From: angie Date: Mon, 9 Oct 2023 18:59:35 -0300 Subject: [PATCH] object stuff --- assets/xml/objects/object_an1.xml | 113 +++---- assets/xml/objects/object_an2.xml | 3 + assets/xml/objects/object_an3.xml | 4 +- assets/xml/objects/object_mask_kerfay.xml | 3 +- assets/xml/objects/object_msmo.xml | 1 + src/code/z_player_lib.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 22 +- src/overlays/actors/ovl_Dm_An/z_dm_an.h | 4 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 22 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h | 4 +- src/overlays/actors/ovl_En_An/z_en_an.c | 347 +++++++++++----------- src/overlays/actors/ovl_En_An/z_en_an.h | 6 +- tools/disasm/variables.txt | 8 +- 13 files changed, 282 insertions(+), 257 deletions(-) diff --git a/assets/xml/objects/object_an1.xml b/assets/xml/objects/object_an1.xml index d0f5f73c5..b99f2769b 100644 --- a/assets/xml/objects/object_an1.xml +++ b/assets/xml/objects/object_an1.xml @@ -11,77 +11,86 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_an2.xml b/assets/xml/objects/object_an2.xml index a1785e5dd..c288af6f6 100644 --- a/assets/xml/objects/object_an2.xml +++ b/assets/xml/objects/object_an2.xml @@ -2,8 +2,11 @@ + + + diff --git a/assets/xml/objects/object_an3.xml b/assets/xml/objects/object_an3.xml index 2fa21dadc..e3814aae4 100644 --- a/assets/xml/objects/object_an3.xml +++ b/assets/xml/objects/object_an3.xml @@ -2,10 +2,12 @@ + - + + diff --git a/assets/xml/objects/object_mask_kerfay.xml b/assets/xml/objects/object_mask_kerfay.xml index 282aa8029..a57bf48b9 100644 --- a/assets/xml/objects/object_mask_kerfay.xml +++ b/assets/xml/objects/object_mask_kerfay.xml @@ -1,6 +1,7 @@  - + + diff --git a/assets/xml/objects/object_msmo.xml b/assets/xml/objects/object_msmo.xml index 6bfd0e46d..a440cfce7 100644 --- a/assets/xml/objects/object_msmo.xml +++ b/assets/xml/objects/object_msmo.xml @@ -2,6 +2,7 @@ + diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 3a5d69a34..9f7a72a28 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -2515,7 +2515,7 @@ u8 D_801C0B1C[] = { Gfx* D_801C0B20[] = { object_mask_truth_DL_0001A0, // PLAYER_MASK_TRUTH - object_mask_kerfay_DL_000D40, // PLAYER_MASK_KAFEIS_MASK + gKafeiMaskDL, // PLAYER_MASK_KAFEIS_MASK object_mask_yofukasi_DL_000490, // PLAYER_MASK_ALL_NIGHT object_mask_rabit_DL_000610, // PLAYER_MASK_BUNNY object_mask_ki_tan_DL_0004A0, // PLAYER_MASK_KEATON diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index 3b05c6e56..55da3d7ea 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -194,8 +194,8 @@ void func_80C1C958(DmAn* this, PlayState* play) { if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) && (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, - OBJECT_AN1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gAnju1Skel, NULL, this->jointTable, this->morphTable, + ANJU1_LIMB_MAX); this->animIndex = DMAN_ANIM_NONE; DmAn_ChangeAnim(this, play, DMAN_ANIM_0); @@ -305,7 +305,7 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto s8 objectSlot = this->actor.objectSlot; s8 msmoObjectSlot = this->msmoObjectSlot; - if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { + if ((limbIndex == ANJU1_LIMB_LEFT_HAND) && this->didAnimChangeInCs) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -321,7 +321,7 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { Matrix_MultVec3f(&D_80C1D2DC, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } @@ -344,7 +344,7 @@ void func_80C1CEFC(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { SubS_UpdateLimb(this->unk_2BE + this->unk_2C2 + 0x4000, this->unk_2C0 + this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_18C, &this->unk_1A4, stepRot, overrideRot); @@ -355,7 +355,7 @@ void func_80C1CEFC(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_RotateXS(this->unk_1A4.x, MTXMODE_APPLY); Matrix_RotateZS(this->unk_1A4.z, MTXMODE_APPLY); Matrix_Push(); - } else if (limbIndex == OBJECT_AN1_LIMB_02) { + } else if (limbIndex == ANJU1_LIMB_TORSO) { SubS_UpdateLimb(this->unk_2C2 + 0x4000, this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_194, &this->unk_1AA, stepRot, overrideRot); Matrix_Pop(); @@ -369,14 +369,14 @@ void func_80C1CEFC(PlayState* play, s32 limbIndex, Actor* thisx) { } TexturePtr D_80C1D2E8[] = { - object_an1_Tex_00E6E0, - object_an1_Tex_00F7A0, - object_an1_Tex_0101A0, + gAnju1Mouth00E6E0Tex, + gAnju1MouthHappyTex, + gAnju1Mouth0101A0Tex, }; TexturePtr D_80C1D2F4[] = { - object_an1_Tex_00E1E0, object_an1_Tex_00EFA0, object_an1_Tex_00F3A0, object_an1_Tex_00EFA0, - object_an1_Tex_00FDA0, object_an1_Tex_00F9A0, object_an1_Tex_0103A0, + gAnju1EyeOpenTex, gAnju1EyeHalfTex, gAnju1EyeClosedTex, gAnju1EyeHalfTex, + gAnju1Eye00FDA0Tex, gAnju1EyeSadTex, gAnju1EyeAngryTex, }; void func_80C1D0B0(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.h b/src/overlays/actors/ovl_Dm_An/z_dm_an.h index 00931d731..175206ec8 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h @@ -16,8 +16,8 @@ typedef struct DmAn { /* 0x18C */ Vec3f unk_194; /* 0x1A4 */ Vec3s unk_1A4; /* 0x1A4 */ Vec3s unk_1AA; - /* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX]; - /* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX]; + /* 0x1B0 */ Vec3s jointTable[ANJU1_LIMB_MAX]; + /* 0x22E */ Vec3s morphTable[ANJU1_LIMB_MAX]; /* 0x2AC */ s8 an4ObjectSlot; /* 0x2AD */ s8 msmoObjectSlot; /* 0x2AE */ u16 unk_2AE; diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 3994c8fce..65e275607 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -194,8 +194,8 @@ void func_80C248A8(DmGm* this, PlayState* play) { if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) && (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, - OBJECT_AN1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gAnju1Skel, NULL, this->jointTable, this->morphTable, + ANJU1_LIMB_MAX); this->animIndex = DMGM_ANIM_NONE; DmGm_ChangeAnim(this, play, DMGM_ANIM_0); @@ -305,7 +305,7 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, s8 sp2B = this->actor.objectSlot; s8 sp2A = this->msmoObjectSlot; - if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { + if ((limbIndex == ANJU1_LIMB_LEFT_HAND) && this->didAnimChangeInCs) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -321,7 +321,7 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { Matrix_MultVec3f(&D_80C2522C, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } @@ -344,7 +344,7 @@ void DmGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { SubS_UpdateLimb(this->unk_2BE + this->unk_2C2 + 0x4000, this->unk_2C0 + this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_18C, &this->unk_1A4, stepRot, overrideRot); @@ -355,7 +355,7 @@ void DmGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_RotateXS(this->unk_1A4.x, MTXMODE_APPLY); Matrix_RotateZS(this->unk_1A4.z, MTXMODE_APPLY); Matrix_Push(); - } else if (limbIndex == OBJECT_AN1_LIMB_02) { + } else if (limbIndex == ANJU1_LIMB_TORSO) { SubS_UpdateLimb(this->unk_2C2 + 0x4000, this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_194, &this->unk_1AA, stepRot, overrideRot); Matrix_Pop(); @@ -369,14 +369,14 @@ void DmGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } TexturePtr D_80C25238[] = { - object_an1_Tex_00E6E0, - object_an1_Tex_00F7A0, - object_an1_Tex_0101A0, + gAnju1Mouth00E6E0Tex, + gAnju1MouthHappyTex, + gAnju1Mouth0101A0Tex, }; TexturePtr D_80C25244[] = { - object_an1_Tex_00E1E0, object_an1_Tex_00EFA0, object_an1_Tex_00F3A0, object_an1_Tex_00EFA0, - object_an1_Tex_00FDA0, object_an1_Tex_00F9A0, object_an1_Tex_0103A0, + gAnju1EyeOpenTex, gAnju1EyeHalfTex, gAnju1EyeClosedTex, gAnju1EyeHalfTex, + gAnju1Eye00FDA0Tex, gAnju1EyeSadTex, gAnju1EyeAngryTex, }; void func_80C25000(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h index 8abcba712..f28e251f5 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h @@ -16,8 +16,8 @@ typedef struct DmGm { /* 0x18C */ Vec3f unk_194; /* 0x1A4 */ Vec3s unk_1A4; /* 0x1A4 */ Vec3s unk_1AA; - /* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX]; - /* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX]; + /* 0x1B0 */ Vec3s jointTable[ANJU1_LIMB_MAX]; + /* 0x22E */ Vec3s morphTable[ANJU1_LIMB_MAX]; /* 0x2AC */ s8 an4ObjectSlot; /* 0x2AD */ s8 msmoObjectSlot; /* 0x2AE */ u16 unk_2AE; diff --git a/src/overlays/actors/ovl_En_An/z_en_an.c b/src/overlays/actors/ovl_En_An/z_en_an.c index b88cdd044..15333c616 100644 --- a/src/overlays/actors/ovl_En_An/z_en_an.c +++ b/src/overlays/actors/ovl_En_An/z_en_an.c @@ -486,11 +486,12 @@ s32 func_80B53840(EnAn* this, PlayState* play) { return false; } - if (((this->an2ObjectSlot >= 0) && (SubS_IsObjectLoaded(this->an2ObjectSlot, play) == 0)) || - ((this->an3ObjectSlot >= 0) && (SubS_IsObjectLoaded(this->an3ObjectSlot, play) == 0)) || - ((this->maskKerfayObjectSlot >= 0) && (SubS_IsObjectLoaded(this->maskKerfayObjectSlot, play) == 0)) || - ((this->an4ObjectSlot >= 0) && (SubS_IsObjectLoaded(this->an4ObjectSlot, play) == 0)) || - ((this->msmoObjectSlot >= 0) && (SubS_IsObjectLoaded(this->msmoObjectSlot, play) == 0))) { + if (((this->an2ObjectSlot > OBJECT_SLOT_NONE) && (SubS_IsObjectLoaded(this->an2ObjectSlot, play) == 0)) || + ((this->an3ObjectSlot > OBJECT_SLOT_NONE) && (SubS_IsObjectLoaded(this->an3ObjectSlot, play) == 0)) || + ((this->maskKerfayObjectSlot > OBJECT_SLOT_NONE) && + (SubS_IsObjectLoaded(this->maskKerfayObjectSlot, play) == 0)) || + ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && (SubS_IsObjectLoaded(this->an4ObjectSlot, play) == 0)) || + ((this->msmoObjectSlot > OBJECT_SLOT_NONE) && (SubS_IsObjectLoaded(this->msmoObjectSlot, play) == 0))) { ret = true; } else { this->actor.draw = EnAn_Draw; @@ -589,35 +590,12 @@ EnDoor* EnAn_FindDoor(PlayState* play, s32 scheduleOutputResult) { return SubS_FindDoor(play, switchFlag); } -s32 func_80B53BA8(EnAn* this, PlayState* play) { - s8 originalObjectSlot = this->actor.objectSlot; - s8 otherObjectSlot = -1; - s32 ret = 0; - - if ((this->animIndex >= 0x19) && (this->an4ObjectSlot >= 0)) { - otherObjectSlot = this->an4ObjectSlot; - } else if ((this->animIndex >= 0x15) && (this->an3ObjectSlot >= 0)) { - otherObjectSlot = this->an3ObjectSlot; - } else if ((this->animIndex >= 0x11) && (this->an2ObjectSlot >= 0)) { - otherObjectSlot = this->an2ObjectSlot; - } else if (this->animIndex < 0x11) { - otherObjectSlot = originalObjectSlot; - } - - if (otherObjectSlot < 0) { - return 0; - } - - if (otherObjectSlot >= 0) { - gSegments[0x6] = OS_K0_TO_PHYSICAL(play->objectCtx.slots[otherObjectSlot].segment); - this->skelAnime.playSpeed = this->unk_368; - ret = SkelAnime_Update(&this->skelAnime); - gSegments[0x6] = OS_K0_TO_PHYSICAL(play->objectCtx.slots[originalObjectSlot].segment); - } - - return ret; -} - +/** + * Anju stores her animations across 4 objects and all of them are put together right next to each other in the + * sAnimationInfo array. Due to this, animation functions check which object to load by comparing index ranges. To make + * this a bit easier to read, this enum includes `ENAN_ANIMOBJ_*` values that mark when a range of animations of a + * certain object start + */ typedef enum EnAnAnimation { /* -1 */ ENAN_ANIM_NONE = -1, /* 0 */ ENAN_ANIM_0, @@ -638,17 +616,20 @@ typedef enum EnAnAnimation { /* 15 */ ENAN_ANIM_15, /* 16 */ ENAN_ANIM_16, - /* 17 */ ENAN_ANIM_17, + /* 17 */ ENAN_ANIMOBJ_AN2, + /* 17 */ ENAN_ANIM_17 = ENAN_ANIMOBJ_AN2, /* 18 */ ENAN_ANIM_18, /* 19 */ ENAN_ANIM_19, /* 20 */ ENAN_ANIM_20, - /* 21 */ ENAN_ANIM_21, + /* 21 */ ENAN_ANIMOBJ_AN3, + /* 21 */ ENAN_ANIM_21 = ENAN_ANIMOBJ_AN3, /* 22 */ ENAN_ANIM_22, - /* 23 */ ENAN_ANIM_23, + /* 23 */ ENAN_ANIM_SWEEP, /* 24 */ ENAN_ANIM_24, - /* 25 */ ENAN_ANIM_25, + /* 25 */ ENAN_ANIMOBJ_AN4, + /* 25 */ ENAN_ANIM_25 = ENAN_ANIMOBJ_AN4, /* 26 */ ENAN_ANIM_26, /* 27 */ ENAN_ANIM_27, /* 28 */ ENAN_ANIM_28, @@ -662,8 +643,7 @@ typedef enum EnAnAnimation { /* 36 */ ENAN_ANIM_MAX } EnAnAnimation; -// sAnimationInfo -AnimationInfoS D_80B58BF4[ENAN_ANIM_MAX] = { +static AnimationInfoS sAnimationInfo[ENAN_ANIM_MAX] = { { &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_0 { &object_an1_Anim_008B6C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_1 { &object_an1_Anim_008B6C, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // ENAN_ANIM_2 @@ -689,7 +669,7 @@ AnimationInfoS D_80B58BF4[ENAN_ANIM_MAX] = { { &object_an3_Anim_00201C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_21 { &object_an3_Anim_002A4C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_22 - { &object_an3_Anim_0012C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_23 + { &gAnju3SweepAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_SWEEP //! @bug Uses symbol from OBJECT_AN2 instead of OBJECT_AN3 { &object_an2_Anim_0038A0, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_24 @@ -706,23 +686,52 @@ AnimationInfoS D_80B58BF4[ENAN_ANIM_MAX] = { { &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_35 }; -s32 EnAn_ChangeAnim(EnAn* this, PlayState* play, EnAnAnimation animIndex) { +s32 func_80B53BA8(EnAn* this, PlayState* play) { s8 originalObjectSlot = this->actor.objectSlot; - s8 otherObjectSlot = -1; - s32 var_t0 = 0; - s32 var_t2 = 0; + s8 otherObjectSlot = OBJECT_SLOT_NONE; + s32 ret = 0; - if ((animIndex >= 25) && (this->an4ObjectSlot >= 0)) { + if ((this->animIndex >= ENAN_ANIMOBJ_AN4) && (this->an4ObjectSlot > OBJECT_SLOT_NONE)) { otherObjectSlot = this->an4ObjectSlot; - } else if ((animIndex >= 21) && (this->an3ObjectSlot >= 0)) { + } else if ((this->animIndex >= ENAN_ANIMOBJ_AN3) && (this->an3ObjectSlot > OBJECT_SLOT_NONE)) { otherObjectSlot = this->an3ObjectSlot; - } else if ((animIndex >= 17) && (this->an2ObjectSlot >= 0)) { + } else if ((this->animIndex >= ENAN_ANIMOBJ_AN2) && (this->an2ObjectSlot > OBJECT_SLOT_NONE)) { otherObjectSlot = this->an2ObjectSlot; - } else if (animIndex < 17) { + } else if (this->animIndex < ENAN_ANIMOBJ_AN2) { otherObjectSlot = originalObjectSlot; } - if (otherObjectSlot < 0) { + if (otherObjectSlot <= OBJECT_SLOT_NONE) { + return 0; + } + + if (otherObjectSlot > OBJECT_SLOT_NONE) { + gSegments[0x6] = OS_K0_TO_PHYSICAL(play->objectCtx.slots[otherObjectSlot].segment); + this->skelAnime.playSpeed = this->unk_368; + ret = SkelAnime_Update(&this->skelAnime); + gSegments[0x6] = OS_K0_TO_PHYSICAL(play->objectCtx.slots[originalObjectSlot].segment); + } + + return ret; +} + +s32 EnAn_ChangeAnim(EnAn* this, PlayState* play, EnAnAnimation animIndex) { + s8 originalObjectSlot = this->actor.objectSlot; + s8 otherObjectSlot = OBJECT_SLOT_NONE; + s32 changeAnim = false; + s32 ret = false; + + if ((animIndex >= ENAN_ANIMOBJ_AN4) && (this->an4ObjectSlot > OBJECT_SLOT_NONE)) { + otherObjectSlot = this->an4ObjectSlot; + } else if ((animIndex >= ENAN_ANIMOBJ_AN3) && (this->an3ObjectSlot > OBJECT_SLOT_NONE)) { + otherObjectSlot = this->an3ObjectSlot; + } else if ((animIndex >= ENAN_ANIMOBJ_AN2) && (this->an2ObjectSlot > OBJECT_SLOT_NONE)) { + otherObjectSlot = this->an2ObjectSlot; + } else if (animIndex < ENAN_ANIMOBJ_AN2) { + otherObjectSlot = originalObjectSlot; + } + + if (otherObjectSlot <= OBJECT_SLOT_NONE) { return 0; } @@ -730,40 +739,40 @@ s32 EnAn_ChangeAnim(EnAn* this, PlayState* play, EnAnAnimation animIndex) { case ENAN_ANIM_1: case ENAN_ANIM_2: if ((this->animIndex != ENAN_ANIM_1) && (this->animIndex != ENAN_ANIM_2)) { - var_t0 = 1; + changeAnim = true; } break; case ENAN_ANIM_7: case ENAN_ANIM_8: if ((this->animIndex != ENAN_ANIM_7) && (this->animIndex != ENAN_ANIM_8)) { - var_t0 = 1; + changeAnim = true; } break; case ENAN_ANIM_9: case ENAN_ANIM_10: if ((this->animIndex != ENAN_ANIM_9) && (this->animIndex != ENAN_ANIM_10)) { - var_t0 = 1; + changeAnim = true; } break; default: if (animIndex != this->animIndex) { - var_t0 = 1; + changeAnim = true; } break; } - if ((var_t0 != 0) && (otherObjectSlot >= 0)) { + if (changeAnim && (otherObjectSlot > OBJECT_SLOT_NONE)) { gSegments[0x6] = OS_K0_TO_PHYSICAL(play->objectCtx.slots[otherObjectSlot].segment); this->animIndex = animIndex; - var_t2 = SubS_ChangeAnimationByInfoS(&this->skelAnime, D_80B58BF4, animIndex); + ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); this->unk_368 = this->skelAnime.playSpeed; gSegments[0x6] = OS_K0_TO_PHYSICAL(play->objectCtx.slots[originalObjectSlot].segment); } - return var_t2; + return ret; } Vec3f D_80B58E34 = { 0.0f, 0.0f, 8.0f }; @@ -787,19 +796,19 @@ void func_80B53ED4(EnAn* this, PlayState* play) { } typedef enum EnAnEyes { - /* 0 */ ENAN_EYES_0, - /* 1 */ ENAN_EYES_1, - /* 2 */ ENAN_EYES_2, - /* 3 */ ENAN_EYES_3, + /* 0 */ ENAN_EYES_OPEN, + /* 1 */ ENAN_EYES_HALF1, + /* 2 */ ENAN_EYES_CLOSED, + /* 3 */ ENAN_EYES_HALF2, /* 4 */ ENAN_EYES_4, - /* 5 */ ENAN_EYES_5, - /* 6 */ ENAN_EYES_6, + /* 5 */ ENAN_EYES_SAD, + /* 6 */ ENAN_EYES_ANGRY, /* 7 */ ENAN_EYES_MAX } EnAnEyes; typedef enum EnAnMouth { /* 0 */ ENAN_MOUTH_0, - /* 1 */ ENAN_MOUTH_1, + /* 1 */ ENAN_MOUTH_HAPPY, /* 2 */ ENAN_MOUTH_2, /* 3 */ ENAN_MOUTH_MAX } EnAnMouth; @@ -818,76 +827,76 @@ typedef enum EnAnFace { /* 10 */ ENAN_FACE_MAX } EnAnFace; -s16 D_80B58E40[ENAN_FACE_MAX] = { - ENAN_MOUTH_0, // ENAN_FACE_0 - ENAN_MOUTH_2, // ENAN_FACE_1 - ENAN_MOUTH_0, // ENAN_FACE_2 - ENAN_MOUTH_1, // ENAN_FACE_3 - ENAN_MOUTH_2, // ENAN_FACE_4 - ENAN_MOUTH_0, // ENAN_FACE_5 - ENAN_MOUTH_1, // ENAN_FACE_6 - ENAN_MOUTH_2, // ENAN_FACE_7 - ENAN_MOUTH_1, // ENAN_FACE_8 - ENAN_MOUTH_1, // ENAN_FACE_9 +static s16 sMouthIndices[ENAN_FACE_MAX] = { + ENAN_MOUTH_0, // ENAN_FACE_0 + ENAN_MOUTH_2, // ENAN_FACE_1 + ENAN_MOUTH_0, // ENAN_FACE_2 + ENAN_MOUTH_HAPPY, // ENAN_FACE_3 + ENAN_MOUTH_2, // ENAN_FACE_4 + ENAN_MOUTH_0, // ENAN_FACE_5 + ENAN_MOUTH_HAPPY, // ENAN_FACE_6 + ENAN_MOUTH_2, // ENAN_FACE_7 + ENAN_MOUTH_HAPPY, // ENAN_FACE_8 + ENAN_MOUTH_HAPPY, // ENAN_FACE_9 }; void EnAn_UpdateFace(EnAn* this) { - s32 var_a1 = false; + s32 skipBlink = false; if (this->stateFlags & ENAN_STATE_100) { - if (DECR(this->unk_38E) == 0) { + if (DECR(this->eyeTimer) == 0) { // default case doesn't match switch (this->faceIndex) { case ENAN_FACE_2: case ENAN_FACE_4: case ENAN_FACE_6: - if ((this->eyeTexIndex == ENAN_EYES_5) || (this->eyeTexIndex == ENAN_EYES_2)) { - var_a1 = true; - this->eyeTexIndex = ENAN_EYES_5; + if ((this->eyeTexIndex == ENAN_EYES_SAD) || (this->eyeTexIndex == ENAN_EYES_CLOSED)) { + skipBlink = true; + this->eyeTexIndex = ENAN_EYES_SAD; } break; case ENAN_FACE_5: case ENAN_FACE_7: - if ((this->eyeTexIndex == ENAN_EYES_6) || (this->eyeTexIndex == ENAN_EYES_1)) { - var_a1 = true; - this->eyeTexIndex = ENAN_EYES_6; + if ((this->eyeTexIndex == ENAN_EYES_ANGRY) || (this->eyeTexIndex == ENAN_EYES_HALF1)) { + skipBlink = true; + this->eyeTexIndex = ENAN_EYES_ANGRY; } break; case ENAN_FACE_8: - if ((this->eyeTexIndex == ENAN_EYES_4) || (this->eyeTexIndex == ENAN_EYES_2)) { - var_a1 = true; + if ((this->eyeTexIndex == ENAN_EYES_4) || (this->eyeTexIndex == ENAN_EYES_CLOSED)) { + skipBlink = true; this->eyeTexIndex = ENAN_EYES_4; } break; } - if (!var_a1) { - if ((this->eyeTexIndex == ENAN_EYES_4) || (this->eyeTexIndex == ENAN_EYES_5)) { - this->eyeTexIndex = ENAN_EYES_0; - } else if (this->eyeTexIndex == ENAN_EYES_6) { - this->eyeTexIndex = ENAN_EYES_1; + if (!skipBlink) { + if ((this->eyeTexIndex == ENAN_EYES_4) || (this->eyeTexIndex == ENAN_EYES_SAD)) { + this->eyeTexIndex = ENAN_EYES_OPEN; + } else if (this->eyeTexIndex == ENAN_EYES_ANGRY) { + this->eyeTexIndex = ENAN_EYES_HALF1; } } - if (!var_a1) { + if (!skipBlink) { this->eyeTexIndex++; - if (this->eyeTexIndex >= ENAN_EYES_4) { + if (this->eyeTexIndex > ENAN_EYES_HALF2) { if ((this->faceIndex == ENAN_FACE_0) || (this->faceIndex == ENAN_FACE_1) || (this->faceIndex == ENAN_FACE_3)) { - this->unk_38E = Rand_S16Offset(0x1E, 0x1E); + this->eyeTimer = Rand_S16Offset(0x1E, 0x1E); } else { - this->unk_38E = 8; + this->eyeTimer = 8; } - this->eyeTexIndex = ENAN_EYES_0; + this->eyeTexIndex = ENAN_EYES_OPEN; } } } } - this->mouthTexIndex = D_80B58E40[this->faceIndex]; + this->mouthTexIndex = sMouthIndices[this->faceIndex]; } Vec3f D_80B58E54 = { 190.0f, -130.0f, 0.0f }; @@ -924,21 +933,21 @@ void func_80B54124(EnAn* this, PlayState* play, u32 arg2) { case 0x1: otherObjectSlot = this->maskKerfayObjectSlot; - if ((this->stateFlags & ENAN_STATE_4000) && !this->unk_3B0 && (otherObjectSlot >= 0)) { + if ((this->stateFlags & ENAN_STATE_4000) && !this->unk_3B0 && (otherObjectSlot > OBJECT_SLOT_NONE)) { gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.slots[otherObjectSlot].segment); Matrix_TranslateRotateZYX(&D_80B58E54, &D_80B58E60); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, object_mask_kerfay_DL_000D40); + gSPDisplayList(POLY_OPA_DISP++, gKafeiMaskDL); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[originalObjectSlot].segment); } break; case 0x2: otherObjectSlot = this->an2ObjectSlot; - if ((this->stateFlags & ENAN_STATE_1000) && !this->unk_3B0 && (otherObjectSlot >= 0)) { + if ((this->stateFlags & ENAN_STATE_1000) && !this->unk_3B0 && (otherObjectSlot > OBJECT_SLOT_NONE)) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[otherObjectSlot].segment); gSPDisplayList(POLY_OPA_DISP++, object_an2_DL_000378); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[originalObjectSlot].segment); @@ -947,7 +956,7 @@ void func_80B54124(EnAn* this, PlayState* play, u32 arg2) { case 0x3: otherObjectSlot = this->an3ObjectSlot; - if ((this->stateFlags & ENAN_STATE_2000) && !this->unk_3B0 && (otherObjectSlot >= 0)) { + if ((this->stateFlags & ENAN_STATE_2000) && !this->unk_3B0 && (otherObjectSlot > OBJECT_SLOT_NONE)) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[otherObjectSlot].segment); gSPDisplayList(POLY_OPA_DISP++, object_an3_DL_000308); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[originalObjectSlot].segment); @@ -956,13 +965,13 @@ void func_80B54124(EnAn* this, PlayState* play, u32 arg2) { case 0x4: if ((this->stateFlags & ENAN_STATE_8000) && !this->unk_3B0) { - gSPDisplayList(POLY_OPA_DISP++, object_an1_DL_012478); + gSPDisplayList(POLY_OPA_DISP++, gAnju1ChopsticksDL); } break; case 0x5: otherObjectSlot = this->msmoObjectSlot; - if (this->unk_3B4 && (otherObjectSlot >= 0)) { + if (this->unk_3B4 && (otherObjectSlot > OBJECT_SLOT_NONE)) { Matrix_TranslateRotateZYX(&D_80B58E68, &D_80B58E74); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), @@ -1411,16 +1420,16 @@ s32 func_80B55180(EnAn* this, PlayState* play) { } s32 func_80B552E4(EnAn* this, PlayState* play) { - u16 temp_v0 = play->csCtx.scriptIndex; + u16 scriptIndex = play->csCtx.scriptIndex; s32 ret = false; - if ((play->csCtx.state != 0) && (play->sceneId == 0x61) && (gSaveContext.sceneLayer == 0) && - ((temp_v0 == 0) || (temp_v0 == 1))) { + if ((play->csCtx.state != 0) && (play->sceneId == SCENE_YADOYA) && (gSaveContext.sceneLayer == 0) && + ((scriptIndex == 0) || (scriptIndex == 1))) { if (!this->unk_3B0) { this->unk_38A = ENAN_FACE_0; this->faceIndex = ENAN_FACE_0; this->stateFlags |= ENAN_STATE_100 | ENAN_STATE_200; - this->unk_38E = 8; + this->eyeTimer = 8; this->cueId = -1; this->unk_3B0 = true; this->unk_3B4 = false; @@ -1500,7 +1509,7 @@ s32 func_80B555C8(EnAn* this, PlayState* play) { break; case ANJU_SCH_16: - EnAn_ChangeAnim(this, play, ENAN_ANIM_23); + EnAn_ChangeAnim(this, play, ENAN_ANIM_SWEEP); this->stateFlags |= ENAN_STATE_2000; break; @@ -1573,7 +1582,7 @@ void func_80B55860(EnAn* this, PlayState* play) { this->stateFlags |= ENAN_STATE_200; this->stateFlags &= ~ENAN_STATE_20; this->unk_396++; - } else if ((this->unk_396 == 1) && (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) != 0)) { + } else if ((this->unk_396 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnAn_ChangeAnim(this, play, ENAN_ANIM_2); this->stateFlags &= ~ENAN_STATE_200; this->stateFlags |= ENAN_STATE_20; @@ -1730,7 +1739,7 @@ s32 func_80B55914(EnAn* this, PlayState* play) { if (this->animIndex == ENAN_ANIM_18) { EnAn_ChangeAnim(this, play, ENAN_ANIM_17); } - if ((this->animIndex == ENAN_ANIM_22) || (this->animIndex == ENAN_ANIM_23)) { + if ((this->animIndex == ENAN_ANIM_22) || (this->animIndex == ENAN_ANIM_SWEEP)) { EnAn_ChangeAnim(this, play, ENAN_ANIM_21); } if ((this->animIndex == ENAN_ANIM_7) || (this->animIndex == ENAN_ANIM_8)) { @@ -1747,7 +1756,7 @@ s32 func_80B55914(EnAn* this, PlayState* play) { case 0x28AA: case 0x28F8: this->faceIndex = ENAN_FACE_0; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x1885: @@ -1756,7 +1765,7 @@ s32 func_80B55914(EnAn* this, PlayState* play) { case 0x28AF: case 0x28C1: this->faceIndex = ENAN_FACE_3; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28A2: @@ -1771,25 +1780,25 @@ s32 func_80B55914(EnAn* this, PlayState* play) { case 0x28E7: case 0x28ED: this->faceIndex = ENAN_FACE_1; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28AD: this->faceIndex = ENAN_FACE_8; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28C0: case 0x28D7: case 0x28DE: this->faceIndex = ENAN_FACE_2; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28E6: case 0x28F7: this->faceIndex = ENAN_FACE_6; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28A3: @@ -1803,7 +1812,7 @@ s32 func_80B55914(EnAn* this, PlayState* play) { case 0x28E3: case 0x28E4: this->faceIndex = ENAN_FACE_4; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28EC: @@ -1814,18 +1823,18 @@ s32 func_80B55914(EnAn* this, PlayState* play) { case 0x28F2: case 0x28F9: this->faceIndex = ENAN_FACE_5; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28F6: this->faceIndex = ENAN_FACE_9; - this->unk_38E = 8; + this->eyeTimer = 8; break; case 0x28A4: case 0x28A9: this->faceIndex = ENAN_FACE_7; - this->unk_38E = 8; + this->eyeTimer = 8; break; } } @@ -1836,7 +1845,7 @@ s32 func_80B55914(EnAn* this, PlayState* play) { this->prevTextId = 0; this->stateFlags &= ~ENAN_STATE_400; this->faceIndex = this->unk_38A; - this->unk_38E = 4; + this->eyeTimer = 4; func_80B555C8(this, play); } @@ -1873,7 +1882,7 @@ Actor* func_80B55D20(EnAn* this, PlayState* play) { s32 func_80B55D98(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput, u8 actorCategory, s16 actorId) { u8 pathIndex = ENAN_GET_PATH_INDEX(&this->actor); - Vec3s* temp_v0_3; + Vec3s* points; Vec3f sp3C; Vec3f sp30; Actor* actor; @@ -1889,9 +1898,9 @@ s32 func_80B55D98(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput, u if ((actor != NULL) && (actor->update != NULL)) { if (this->timePath != NULL) { - temp_v0_3 = Lib_SegmentedToVirtual(this->timePath->points); - Math_Vec3s_ToVec3f(&sp3C, &temp_v0_3[this->timePath->count - 2]); - Math_Vec3s_ToVec3f(&sp30, &temp_v0_3[this->timePath->count - 1]); + points = Lib_SegmentedToVirtual(this->timePath->points); + Math_Vec3s_ToVec3f(&sp3C, &points[this->timePath->count - 2]); + Math_Vec3s_ToVec3f(&sp30, &points[this->timePath->count - 1]); this->actor.shape.shadowDraw = NULL; this->actor.world.rot.y = Math_Vec3f_Yaw(&sp3C, &sp30); Math_Vec3f_Copy(&this->actor.world.pos, &sp30); @@ -1935,7 +1944,7 @@ s32 func_80B55F8C(PlayState* play) { s32 func_80B5600C(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; - if (func_80B55D98(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_PM) != 0) { + if (func_80B55D98(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_PM)) { EnAn_ChangeAnim(this, play, ENAN_ANIM_1); SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); ret = true; @@ -1950,7 +1959,7 @@ s32 func_80B5600C(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80B56094(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; - if (func_80B55D98(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_IG) != 0) { + if (func_80B55D98(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_IG)) { EnAn_ChangeAnim(this, play, ENAN_ANIM_1); SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); ret = true; @@ -1965,7 +1974,7 @@ s32 func_80B56094(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80B5611C(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; - if (func_80B55D98(this, play, scheduleOutput, 4, 0x243) != 0) { + if (func_80B55D98(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_NB)) { EnAn_ChangeAnim(this, play, ENAN_ANIM_15); SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); ret = true; @@ -1981,7 +1990,7 @@ s32 func_80B561A4(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp56 = SCHEDULE_TIME_NOW; u8 pathIndex = ENAN_GET_PATH_INDEX(&this->actor); EnDoor* door; - Vec3s* temp_v0_2; + Vec3s* points; Vec3f sp40; Vec3f sp34; s32 limit; @@ -1997,9 +2006,9 @@ s32 func_80B561A4(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (this->timePath != NULL) { - temp_v0_2 = Lib_SegmentedToVirtual(this->timePath->points); - Math_Vec3s_ToVec3f(&sp40, &temp_v0_2[0]); - Math_Vec3s_ToVec3f(&sp34, &temp_v0_2[1]); + points = Lib_SegmentedToVirtual(this->timePath->points); + Math_Vec3s_ToVec3f(&sp40, &points[0]); + Math_Vec3s_ToVec3f(&sp34, &points[1]); Math_Vec3f_Copy(&this->unk_228, &sp40); Math_Vec3f_Copy(&this->unk_234, &sp34); this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34); @@ -2025,7 +2034,7 @@ s32 func_80B561A4(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { case ANJU_SCH_26: this->unk_38A = ENAN_FACE_2; this->faceIndex = ENAN_FACE_2; - this->unk_38E = 8; + this->eyeTimer = 8; break; } @@ -2060,7 +2069,7 @@ s32 func_80B561A4(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80B56418(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { - u16 temp_t0 = (gSaveContext.save.time - 0x3FFC); + u16 now = SCHEDULE_TIME_NOW; u16 var_v1_2; u8 pathIndex = ENAN_GET_PATH_INDEX(&this->actor); s32 pad; @@ -2079,8 +2088,9 @@ s32 func_80B56418(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { } if (this->timePath != NULL) { - if ((this->scheduleResult < ANJU_SCH_28) && (this->scheduleResult != ANJU_SCH_NONE) && (this->timePathTimeSpeed >= 0)) { - var_v1_2 = temp_t0; + if ((this->scheduleResult < ANJU_SCH_28) && (this->scheduleResult != ANJU_SCH_NONE) && + (this->timePathTimeSpeed >= 0)) { + var_v1_2 = now; } else { var_v1_2 = scheduleOutput->time0; } @@ -2091,7 +2101,7 @@ s32 func_80B56418(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePathTotalTime = scheduleOutput->time1 - var_v1_2; } - this->timePathElapsedTime = temp_t0 - var_v1_2; + this->timePathElapsedTime = now - var_v1_2; var_v1_2 = (this->timePath->count - 2); this->timePathWaypointTime = this->timePathTotalTime / var_v1_2; @@ -2116,7 +2126,7 @@ s32 func_80B56418(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { case ANJU_SCH_3F: this->unk_38A = ENAN_FACE_2; this->faceIndex = ENAN_FACE_2; - this->unk_38E = 8; + this->eyeTimer = 8; break; } @@ -2206,7 +2216,7 @@ s32 func_80B56744(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &sp40); Math_Vec3f_Copy(&this->actor.prevPos, &sp40); if (scheduleOutput->result == ANJU_SCH_16) { - EnAn_ChangeAnim(this, play, ENAN_ANIM_23); + EnAn_ChangeAnim(this, play, ENAN_ANIM_SWEEP); SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->stateFlags |= ENAN_STATE_100 | ENAN_STATE_200; @@ -2276,7 +2286,7 @@ s32 func_80B56880(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_38A = ENAN_FACE_2; this->faceIndex = ENAN_FACE_2; - this->unk_38E = 8; + this->eyeTimer = 8; break; case ANJU_SCH_E: @@ -2312,7 +2322,7 @@ s32 func_80B56B00(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_38A = ENAN_FACE_5; this->faceIndex = ENAN_FACE_5; - this->unk_38E = 8; + this->eyeTimer = 8; } return true; @@ -2338,7 +2348,7 @@ s32 func_80B56BC0(EnAn* this, PlayState* play, ScheduleOutput* scheduleOutput) { EnAn_ChangeAnim(this, play, ENAN_ANIM_11); this->unk_38A = ENAN_FACE_5; this->faceIndex = ENAN_FACE_5; - this->unk_38E = 8; + this->eyeTimer = 8; break; } @@ -2371,7 +2381,7 @@ s32 EnAn_ProcessScheduleOutput(EnAn* this, PlayState* play, ScheduleOutput* sche this->stateFlags = 0; this->unk_38A = ENAN_FACE_0; this->faceIndex = ENAN_FACE_0; - this->unk_38E = 8; + this->eyeTimer = 8; this->unk_374 = 40.0f; switch (scheduleOutput->result) { @@ -2523,8 +2533,9 @@ s32 func_80B5702C(EnAn* this, PlayState* play) { if (!(this->stateFlags & ENAN_STATE_8)) { timePathTargetPos = gZeroVec3f; - SubS_TimePathing_Update(this->timePath, &this->timePathProgress, &this->timePathElapsedTime, this->timePathWaypointTime, this->timePathTotalTime, - &this->timePathWaypoint, knots, &timePathTargetPos, this->timePathTimeSpeed); + SubS_TimePathing_Update(this->timePath, &this->timePathProgress, &this->timePathElapsedTime, + this->timePathWaypointTime, this->timePathTotalTime, &this->timePathWaypoint, knots, + &timePathTargetPos, this->timePathTimeSpeed); SubS_TimePathing_ComputeInitialY(play, this->timePath, this->timePathWaypoint, &timePathTargetPos); this->actor.world.pos.y = timePathTargetPos.y; this->stateFlags |= ENAN_STATE_8; @@ -2542,8 +2553,9 @@ s32 func_80B5702C(EnAn* this, PlayState* play) { } this->timePathTargetPos = gZeroVec3f; - if (SubS_TimePathing_Update(this->timePath, &this->timePathProgress, &this->timePathElapsedTime, this->timePathWaypointTime, this->timePathTotalTime, - &this->timePathWaypoint, knots, &this->timePathTargetPos, this->timePathTimeSpeed)) { + if (SubS_TimePathing_Update(this->timePath, &this->timePathProgress, &this->timePathElapsedTime, + this->timePathWaypointTime, this->timePathTotalTime, &this->timePathWaypoint, knots, + &this->timePathTargetPos, this->timePathTimeSpeed)) { this->stateFlags |= ENAN_STATE_10; } else { sp70 = this->actor.world.pos; @@ -2590,7 +2602,7 @@ s32 func_80B572D4(EnAn* this, PlayState* play) { break; case ANJU_SCH_16: - if (Animation_OnFrame(&this->skelAnime, 6.0f) && (this->animIndex == ENAN_ANIM_23)) { + if (Animation_OnFrame(&this->skelAnime, 6.0f) && (this->animIndex == ENAN_ANIM_SWEEP)) { Actor_PlaySfx(&this->actor, NA_SE_EV_SWEEP); } break; @@ -2758,8 +2770,7 @@ void func_80B57718(EnAn* this, PlayState* play) { void func_80B577F0(EnAn* this, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 14.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, - OBJECT_AN1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gAnju1Skel, NULL, this->jointTable, this->morphTable, ANJU1_LIMB_MAX); this->animIndex = ENAN_ANIM_NONE; EnAn_ChangeAnim(this, play, ENAN_ANIM_1); @@ -2947,16 +2958,16 @@ Vec3f D_80B58ED4 = { 1000.0f, 0.0f, 0.0f }; void EnAn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnAn* this = THIS; - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { Matrix_MultVec3f(&D_80B58ED4, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); func_80B54124(this, play, 1U); - } else if (limbIndex == OBJECT_AN1_LIMB_08) { + } else if (limbIndex == ANJU1_LIMB_RIGHT_HAND) { func_80B54124(this, play, 0U); func_80B54124(this, play, 4U); func_80B54124(this, play, 2U); func_80B54124(this, play, 3U); - } else if (limbIndex == OBJECT_AN1_LIMB_05) { + } else if (limbIndex == ANJU1_LIMB_LEFT_HAND) { func_80B54124(this, play, 5U); } } @@ -2978,7 +2989,7 @@ void EnAn_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { stepRot = false; } - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { SubS_UpdateLimb(this->unk_37C + 0x4000, this->unk_37E + this->actor.shape.rot.y + 0x4000, &this->unk_240, &this->unk_258, stepRot, overrideRot); Matrix_Pop(); @@ -2991,22 +3002,20 @@ void EnAn_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } } -// mouth textures -TexturePtr D_80B58EE0[ENAN_MOUTH_MAX] = { - object_an1_Tex_00E6E0, // ENAN_MOUTH_0 - object_an1_Tex_00F7A0, // ENAN_MOUTH_1 - object_an1_Tex_0101A0, // ENAN_MOUTH_2 +static TexturePtr sMouthTextures[ENAN_MOUTH_MAX] = { + gAnju1Mouth00E6E0Tex, // ENAN_MOUTH_0 + gAnju1MouthHappyTex, // ENAN_MOUTH_HAPPY + gAnju1Mouth0101A0Tex, // ENAN_MOUTH_2 }; -// eye textures -TexturePtr D_80B58EEC[ENAN_EYES_MAX] = { - object_an1_Tex_00E1E0, // ENAN_EYES_0 - object_an1_Tex_00EFA0, // ENAN_EYES_1 - object_an1_Tex_00F3A0, // ENAN_EYES_2 - object_an1_Tex_00EFA0, // ENAN_EYES_3 - object_an1_Tex_00FDA0, // ENAN_EYES_4 - object_an1_Tex_00F9A0, // ENAN_EYES_5 - object_an1_Tex_0103A0, // ENAN_EYES_6 +static TexturePtr sEyeTextures[ENAN_EYES_MAX] = { + gAnju1EyeOpenTex, // ENAN_EYES_OPEN + gAnju1EyeHalfTex, // ENAN_EYES_HALF1 + gAnju1EyeClosedTex, // ENAN_EYES_CLOSED + gAnju1EyeHalfTex, // ENAN_EYES_HALF2 + gAnju1Eye00FDA0Tex, // ENAN_EYES_4 + gAnju1EyeSadTex, // ENAN_EYES_SAD + gAnju1EyeAngryTex, // ENAN_EYES_ANGRY }; void EnAn_Draw(Actor* thisx, PlayState* play) { @@ -3017,8 +3026,8 @@ void EnAn_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B58EEC[this->eyeTexIndex])); - gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80B58EE0[this->mouthTexIndex])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); + gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[this->mouthTexIndex])); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnAn_PostLimbDraw, EnAn_TransformLimbDraw, diff --git a/src/overlays/actors/ovl_En_An/z_en_an.h b/src/overlays/actors/ovl_En_An/z_en_an.h index 81dcd27bd..cea2363c1 100644 --- a/src/overlays/actors/ovl_En_An/z_en_an.h +++ b/src/overlays/actors/ovl_En_An/z_en_an.h @@ -59,8 +59,8 @@ typedef struct EnAn { /* 0x24C */ UNK_TYPE1 unk_24C[0xC]; /* 0x258 */ Vec3s unk_258; // some limb rot /* 0x25E */ UNK_TYPE1 unk_25E[0x6]; - /* 0x264 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX]; - /* 0x2E2 */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX]; + /* 0x264 */ Vec3s jointTable[ANJU1_LIMB_MAX]; + /* 0x2E2 */ Vec3s morphTable[ANJU1_LIMB_MAX]; /* 0x360 */ u16 stateFlags; /* 0x362 */ u16 prevTextId; /* 0x364 */ u8 cueId; @@ -77,7 +77,7 @@ typedef struct EnAn { /* 0x388 */ s16 unk_388; // timer /* 0x38A */ s16 unk_38A; // face enum /* 0x38C */ s16 faceIndex; // face enum - /* 0x38E */ s16 unk_38E; // timer + /* 0x38E */ s16 eyeTimer; /* 0x390 */ s16 eyeTexIndex; /* 0x392 */ s16 mouthTexIndex; /* 0x394 */ s16 unk_394; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f8cc38d96..6c2b63be4 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -14474,9 +14474,9 @@ 0x80B58B9C:("En_An_InitVars","UNK_TYPE1","",0x1), 0x80B58BBC:("D_80B58BBC","UNK_TYPE1","",0x1), 0x80B58BE8:("D_80B58BE8","UNK_TYPE1","",0x1), - 0x80B58BF4:("D_80B58BF4","UNK_TYPE1","",0x1), + 0x80B58BF4:("sAnimationInfo","UNK_TYPE1","",0x1), 0x80B58E34:("D_80B58E34","UNK_TYPE1","",0x1), - 0x80B58E40:("D_80B58E40","UNK_TYPE1","",0x1), + 0x80B58E40:("sMouthIndices","UNK_TYPE1","",0x1), 0x80B58E54:("D_80B58E54","UNK_TYPE1","",0x1), 0x80B58E60:("D_80B58E60","UNK_TYPE1","",0x1), 0x80B58E68:("D_80B58E68","UNK_TYPE1","",0x1), @@ -14488,8 +14488,8 @@ 0x80B58EA4:("D_80B58EA4","UNK_TYPE1","",0x1), 0x80B58EAC:("D_80B58EAC","UNK_TYPE4","",0x4), 0x80B58ED4:("D_80B58ED4","UNK_TYPE1","",0x1), - 0x80B58EE0:("D_80B58EE0","UNK_TYPE1","",0x1), - 0x80B58EEC:("D_80B58EEC","UNK_TYPE1","",0x1), + 0x80B58EE0:("sMouthTextures","UNK_TYPE1","",0x1), + 0x80B58EEC:("sEyeTextures","UNK_TYPE1","",0x1), 0x80B58F10:("jtbl_80B58F10","UNK_PTR","",0x4), 0x80B58F48:("jtbl_80B58F48","UNK_PTR","",0x4), 0x80B58F70:("jtbl_80B58F70","UNK_PTR","",0x4),