diff --git a/assets/xml/objects/object_ani.xml b/assets/xml/objects/object_ani.xml index f9915c8800..f039e01140 100644 --- a/assets/xml/objects/object_ani.xml +++ b/assets/xml/objects/object_ani.xml @@ -1,62 +1,67 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spec b/spec index 084c06895f..20f30c61f0 100644 --- a/spec +++ b/spec @@ -1729,8 +1729,7 @@ beginseg name "ovl_En_Ani" compress include "build/src/overlays/actors/ovl_En_Ani/z_en_ani.o" - include "build/data/ovl_En_Ani/ovl_En_Ani.data.o" - include "build/data/ovl_En_Ani/ovl_En_Ani.reloc.o" + include "build/src/overlays/actors/ovl_En_Ani/ovl_En_Ani_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c index c125784207..d2320bfd60 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -1,21 +1,44 @@ /* * File: z_en_ani.c * Overlay: ovl_En_Ani - * Description: Part-time worker + * Description: Man in Tree in South Termina Field + * version in shop at night is EnOssan actor using object_ani */ #include "z_en_ani.h" -#define FLAGS 0x00000009 +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) #define THIS ((EnAni*)thisx) +// clang-format off +#define ANI_STATE_STANDING (0) +#define ANI_STATE_UNK (1 << 0) +#define ANI_STATE_WRITHING (1 << 1) +#define ANI_STATE_CLIMBING (1 << 2) +#define ANI_STATE_FALLING (1 << 3) +// clang-format on + void EnAni_Init(Actor* thisx, GlobalContext* globalCtx); void EnAni_Destroy(Actor* thisx, GlobalContext* globalCtx); void EnAni_Update(Actor* thisx, GlobalContext* globalCtx); void EnAni_Draw(Actor* thisx, GlobalContext* globalCtx); -#if 0 +void EnAni_DefaultBlink(EnAni* this); +void EnAni_WaitForEyeClose(EnAni* this); +void EnAni_WaitForEyeOpen(EnAni* this); + +void EnAni_SetText(EnAni* this, GlobalContext* globalCtx, u16 textId); + +void EnAni_HangInTree(EnAni* this, GlobalContext* globalCtx); +void EnAni_LoseBalance(EnAni* this, GlobalContext* globalCtx); +void EnAni_FallToGround(EnAni* this, GlobalContext* globalCtx); +void EnAni_LandOnFoot(EnAni* this, GlobalContext* globalCtx); +void EnAni_FallOverInPain(EnAni* this, GlobalContext* globalCtx); +void EnAni_IdleInPain(EnAni* this, GlobalContext* globalCtx); +void EnAni_Talk(EnAni* this, GlobalContext* globalCtx); +void EnAni_IdleStanding(EnAni* this, GlobalContext* globalCtx); + const ActorInit En_Ani_InitVars = { ACTOR_EN_ANI, ACTORCAT_NPC, @@ -28,62 +51,304 @@ const ActorInit En_Ani_InitVars = { (ActorFunc)EnAni_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80968670 = { - { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_ENEMY, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, +// two different colliders, but only one init for both +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_ON | AC_TYPE_ENEMY, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, { 30, 40, 0, { 0, 0, 0 } }, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_8096869C[] = { +static InitChainEntry sInitChain[] = { ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 850, ICHAIN_STOP), }; -#endif +void EnAni_DefaultBlink(EnAni* this) { + if (DECR(this->blinkTimer) == 0) { + this->blinkTimer = Rand_S16Offset(60, 60); + } -extern ColliderCylinderInit D_80968670; -extern InitChainEntry D_8096869C[]; + this->eyeState = this->blinkTimer; + if (this->eyeState >= 3) { + this->eyeState = 0; + } +} -extern UNK_TYPE D_06000C14; -extern UNK_TYPE D_060011CC; -extern UNK_TYPE D_060027A0; -extern UNK_TYPE D_06009220; -extern UNK_TYPE D_06009D34; +void EnAni_WaitForEyeClose(EnAni* this) { + if (this->blinkTimer > 0) { + this->blinkTimer--; + } else if (this->eyeState < 2) { + this->eyeState++; + } else { + this->blinkFunc = EnAni_WaitForEyeOpen; + this->blinkTimer = Rand_S16Offset(20, 20); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_809679D0.s") +void EnAni_WaitForEyeOpen(EnAni* this) { + if (this->blinkTimer > 0) { + this->blinkTimer--; + } else if (this->eyeState > 0) { + this->eyeState--; + } else { + this->blinkFunc = EnAni_WaitForEyeClose; + this->blinkTimer = Rand_S16Offset(10, 10); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967A48.s") +void EnAni_Init(Actor* thisx, GlobalContext* globalCtx) { + s32 pad; + EnAni* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967AB4.s") + Actor_ProcessInitChain(&this->actor, sInitChain); + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); + SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable, + this->morphTable, ANI_LIMB_MAX); + Animation_PlayOnce(&this->skelAnime, &gAniStandingNormalAnim); + Collider_InitAndSetCylinder(globalCtx, &this->collider1, &this->actor, &sCylinderInit); + Collider_InitAndSetCylinder(globalCtx, &this->collider2, &this->actor, &sCylinderInit); + Collider_UpdateCylinder(&this->actor, &this->collider2); + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + this->stateFlags = ANI_STATE_STANDING; + this->unk2EE = 0; + this->treeReachTimer = 0; + this->blinkFunc = EnAni_DefaultBlink; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/EnAni_Init.s") + if (GET_ANI_TYPE(thisx) == ANI_TYPE_TREE_HANGING) { + Animation_Change(&this->skelAnime, &gAniTreeHangingAnim, 1.0f, 0.0f, + Animation_GetLastFrame(&gAniTreeHangingAnim), ANIMMODE_ONCE, 0.0f); + this->actionFunc = EnAni_HangInTree; + this->actor.velocity.y = 0.0f; + this->actor.terminalVelocity = 0.0f; + this->actor.gravity = 0.0f; + this->actor.flags |= ACTOR_FLAG_10; + this->stateFlags |= ANI_STATE_CLIMBING; + gSaveContext.eventInf[1] &= (u8)~0x10; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/EnAni_Destroy.s") + } else { // ANI_TYPE_STANDING + // ( unused code ) + // for some reason standing he has a large collider + // possibly he was meant to be a blocking npc like bomber + this->collider2.dim.radius = 60; + this->actionFunc = EnAni_IdleStanding; + this->actor.velocity.y = -25.0f; + this->actor.terminalVelocity = -25.0f; + this->actor.gravity = -5.0f; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967D20.s") +void EnAni_Destroy(Actor* thisx, GlobalContext* globalCtx) { + EnAni* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967DA0.s") + Collider_DestroyCylinder(globalCtx, &this->collider1); + Collider_DestroyCylinder(globalCtx, &this->collider2); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967DCC.s") +void EnAni_SetText(EnAni* this, GlobalContext* globalCtx, u16 textId) { + s16 diffAngle = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967E34.s") + this->actor.textId = textId; + if ((this->stateFlags & ANI_STATE_WRITHING) || ABS_ALT(diffAngle) <= 0x4300) { + if (this->actor.xzDistToPlayer < 100.0f) { + func_800B8614(&this->actor, globalCtx, 120.0f); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967E90.s") +void EnAni_IdleStanding(EnAni* this, GlobalContext* globalCtx) { + SkelAnime_Update(&this->skelAnime); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967F20.s") +void EnAni_Talk(EnAni* this, GlobalContext* globalCtx) { + SkelAnime_Update(&this->skelAnime); + if (Message_GetState(&globalCtx->msgCtx) == 2 && globalCtx->msgCtx.unk11F04 == 0x6DE) { + this->actionFunc = EnAni_IdleInPain; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80967FA4.s") +void EnAni_IdleInPain(EnAni* this, GlobalContext* globalCtx) { + SkelAnime_Update(&this->skelAnime); + if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) { + this->actionFunc = EnAni_Talk; + } else { + // telling you not to take his rupees you knocked from the tree + EnAni_SetText(this, globalCtx, 0x6DE); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_809680B0.s") +void EnAni_FallOverInPain(EnAni* this, GlobalContext* globalCtx) { + if (SkelAnime_Update(&this->skelAnime)) { + this->blinkFunc = EnAni_WaitForEyeOpen; + this->actionFunc = EnAni_IdleInPain; + Animation_Change(&this->skelAnime, &gAniHoldingFootWrithingInPainAnim, 1.0f, 0.0f, + Animation_GetLastFrame(&gAniHoldingFootWrithingInPainAnim), ANIMMODE_LOOP, 0.0f); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80968164.s") +void EnAni_LandOnFoot(EnAni* this, GlobalContext* globalCtx) { + if (SkelAnime_Update(&this->skelAnime)) { + this->actionFunc = EnAni_FallOverInPain; + Animation_Change(&this->skelAnime, &gAniFallOverHoldingFootAnim, 1.0f, 0.0f, + Animation_GetLastFrame(&gAniFallOverHoldingFootAnim), ANIMMODE_ONCE, 0.0f); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/EnAni_Update.s") +void EnAni_FallToGround(EnAni* this, GlobalContext* globalCtx) { + s32 pad; + s16 quakeValue; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_80968504.s") + if (this->actor.bgCheckFlags & 1) { // hit the ground + this->actor.flags &= ~ACTOR_FLAG_10; + this->actionFunc = EnAni_LandOnFoot; + this->actor.velocity.x = 0.0f; + this->actor.velocity.z = 0.0f; + // the animation gets cut short, (first 16 frames only) only the landing part is seen + Animation_Change(&this->skelAnime, &gAniLandingThenStandingUpAnim, 1.0f, 0.0f, 16.0f, ANIMMODE_ONCE, 0.0f); + this->stateFlags |= ANI_STATE_WRITHING; + quakeValue = Quake_Add(globalCtx->cameraPtrs[0], 3); + Quake_SetSpeed(quakeValue, 0x6978); + Quake_SetQuakeValues(quakeValue, 7, 0, 0, 0); + Quake_SetCountdown(quakeValue, 0x14); + Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_HAMMER_HIT); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/func_8096854C.s") + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x2, 0x7D0, 0x100); + this->actor.world.rot.y = this->actor.shape.rot.y; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ani/EnAni_Draw.s") +void EnAni_LoseBalance(EnAni* this, GlobalContext* globalCtx) { + s32 pad; + + if (SkelAnime_Update(&this->skelAnime)) { + this->actor.terminalVelocity = -20.0f; + this->actor.gravity = -5.0f; + this->actor.velocity.y = 0.0f; + this->actor.velocity.z = -4.0f; + // frame count : 0.0f, only first frame, rest is handled in next action func + Animation_Change(&this->skelAnime, &gAniLandingThenStandingUpAnim, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 5.0f); + this->actionFunc = EnAni_FallToGround; + gSaveContext.eventInf[1] |= 0x10; + } +} + +void EnAni_HangInTree(EnAni* this, GlobalContext* globalCtx) { + if (SkelAnime_Update(&this->skelAnime)) { + if (this->treeReachTimer > 0) { + this->treeReachTimer--; + if (this->treeReachTimer > 0) { + Animation_PlayOnce(&this->skelAnime, &gAniTreeHangingReachAnim); + } else { + Animation_PlayOnce(&this->skelAnime, &gAniTreeHangingAnim); + } + } else if (Rand_ZeroFloat(1.0f) < 0.4f) { + Animation_PlayOnce(&this->skelAnime, &gAniTreeHangingReachAnim); + this->treeReachTimer = 2; + } else { + Animation_PlayOnce(&this->skelAnime, &gAniTreeHangingAnim); + } + } + + // his bonk detection is based on his tilt, neat + if (this->actor.home.rot.x != 0) { + this->stateFlags |= ANI_STATE_FALLING; + this->actionFunc = EnAni_LoseBalance; + Animation_Change(&this->skelAnime, &gAniTreeHangLosingBalanceAnim, 1.0f, 0.0f, + Animation_GetLastFrame(&gAniTreeHangLosingBalanceAnim), ANIMMODE_ONCE, -5.0f); + } +} + +void EnAni_Update(Actor* thisx, GlobalContext* globalCtx) { + EnAni* this = THIS; + f32 minVelocity; + + Collider_UpdateCylinder(&this->actor, &this->collider1); + Collider_UpdateCylinder(&this->actor, &this->collider2); + CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider1.base); + if (!(this->stateFlags & ANI_STATE_UNK)) { + CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider2.base); + } + + this->actor.velocity.y += this->actor.gravity; + minVelocity = this->actor.terminalVelocity; + if (this->actor.velocity.y < minVelocity) { + this->actor.velocity.y = minVelocity; + } + + Actor_UpdatePos(&this->actor); + Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4); + this->actionFunc(this, globalCtx); + if (this->actor.xzDistToPlayer < 100.0f && !(this->stateFlags & ANI_STATE_CLIMBING)) { + func_800E9250(globalCtx, &this->actor, &this->headRot, &this->chestRot, this->actor.focus.pos); + this->chestRot.x = this->chestRot.y = this->chestRot.z = 0; + } else { + Math_SmoothStepToS(&this->headRot.x, 0, 0x6, 0x1838, 0x64); + Math_SmoothStepToS(&this->headRot.y, 0, 0x6, 0x1838, 0x64); + Math_SmoothStepToS(&this->chestRot.x, 0, 0x6, 0x1838, 0x64); + Math_SmoothStepToS(&this->chestRot.y, 0, 0x6, 0x1838, 0x64); + } + + this->blinkFunc(this); + if (this->stateFlags & ANI_STATE_FALLING) { + if (this->actor.cutscene == -1) { + this->stateFlags &= ~ANI_STATE_FALLING; + } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + func_800E02AC(Play_GetCamera(globalCtx, ActorCutscene_GetCurrentCamera(this->actor.cutscene)), + &this->actor); + } else { + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } + } +} + +s32 EnAni_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnAni* this = THIS; + + if (limbIndex == ANI_LIMB_HEAD) { + rot->x += this->headRot.y; + rot->z += this->headRot.x; + } + + return false; +} + +void EnAni_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + static Vec3f D_809686A4 = { 800.0f, 500.0f, 0.0f }; + + if (limbIndex == ANI_LIMB_HEAD) { + Matrix_MultiplyVector3fByState(&D_809686A4, &thisx->focus.pos); + } +} + +void EnAni_Draw(Actor* thisx, GlobalContext* globalCtx) { + static TexturePtr sEyeTextures[] = { gAniOpenEyeTex, gAniClosingEyeTex, gAniClosedEyeTex }; + s32 pad; + EnAni* this = THIS; + + OPEN_DISPS(globalCtx->state.gfxCtx); + + Matrix_InsertTranslation(0.0f, 0.0f, -1000.0f, MTXMODE_APPLY); + func_8012C5B0(globalCtx->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); + + SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnAni_OverrideLimbDraw, EnAni_PostLimbDraw, &this->actor); + + CLOSE_DISPS(globalCtx->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.h b/src/overlays/actors/ovl_En_Ani/z_en_ani.h index 554c1bc8af..21dced2c18 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.h +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.h @@ -2,18 +2,37 @@ #define Z_EN_ANI_H #include "global.h" +#include "objects/object_ani/object_ani.h" struct EnAni; typedef void (*EnAniActionFunc)(struct EnAni*, GlobalContext*); +typedef void (*EnAniBlinkFunc)(struct EnAni*); + typedef struct EnAni { - /* 0x0000 */ Actor actor; - /* 0x0144 */ char unk_144[0x1B0]; - /* 0x02F4 */ EnAniActionFunc actionFunc; - /* 0x02F8 */ char unk_2F8[0x8]; + /* 0x000 */ Actor actor; + /* 0x144 */ ColliderCylinder collider1; + /* 0x190 */ ColliderCylinder collider2; + /* 0x1DC */ SkelAnime skelAnime; + /* 0x220 */ Vec3s jointTable[ANI_LIMB_MAX]; + /* 0x280 */ Vec3s morphTable[ANI_LIMB_MAX]; + /* 0x2E0 */ Vec3s headRot; + /* 0x2E6 */ Vec3s chestRot; // unused + /* 0x2EC */ u16 stateFlags; + /* 0x2EE */ s16 unk2EE; // assigned to zero in init, never used after + /* 0x2F0 */ s16 treeReachTimer; + /* 0x2F4 */ EnAniBlinkFunc blinkFunc; + /* 0x2F8 */ s16 eyeState; + /* 0x2FA */ s16 blinkTimer; + /* 0x2FC */ EnAniActionFunc actionFunc; } EnAni; // size = 0x300 -extern const ActorInit En_Ani_InitVars; +enum EnAniType { + /* else */ ANI_TYPE_STANDING, // unfinshed and unused + /* 1 */ ANI_TYPE_TREE_HANGING = 1, +}; + +#define GET_ANI_TYPE(thisx) (thisx->params & 0xFF) #endif // Z_EN_ANI_H diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 9bf1abcfe6..eb82a0fddb 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -82,18 +82,18 @@ static AnimationInfoS sAnimationsCuriosityShopMan[] = { }; static AnimationInfoS sAnimationsPartTimeWorker[] = { - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_ani_Anim_009D34, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_ani_Anim_00A460, 1.0f, 0, -1, ANIMMODE_ONCE, -5 }, - { &object_ani_Anim_00A460, 1.0f, 0, -1, ANIMMODE_LOOP, -5 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_ani_Anim_009D34, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gAniStandingNormalAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAniHandBehindHeadApologyAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -5 }, + { &gAniHandBehindHeadApologyAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -5 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gAniStandingNormalAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, }; static s16 sObjectIds[] = { OBJECT_FSN, OBJECT_ANI }; @@ -1331,7 +1331,7 @@ void EnOssan_InitCuriosityShopMan(EnOssan* this, GlobalContext* globalCtx) { } void EnOssan_InitPartTimeWorker(EnOssan* this, GlobalContext* globalCtx) { - SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_ani_Skel_0028A0, &object_ani_Anim_009D34, this->jointTable, + SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable, this->morphTable, 16); this->actor.draw = EnOssan_DrawPartTimeWorker; } @@ -1690,7 +1690,7 @@ void EnOssan_DrawCuriosityShopMan(Actor* thisx, GlobalContext* globalCtx) { } void EnOssan_DrawPartTimeWorker(Actor* thisx, GlobalContext* globalCtx) { - static TexturePtr sEyeTextures[] = { object_ani_Tex_006498, object_ani_Tex_006B18, object_ani_Tex_006F18 }; + static TexturePtr sEyeTextures[] = { gAniOpenEyeTex, gAniClosingEyeTex, gAniClosedEyeTex }; EnOssan* this = THIS; s32 pad; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 8e58c7435d..e7b722168d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -7929,23 +7929,23 @@ 0x80967608:("func_80967608",), 0x809676A4:("EnWeatherTag_Update",), 0x80967784:("EnWeatherTag_Draw",), - 0x809679D0:("func_809679D0",), - 0x80967A48:("func_80967A48",), - 0x80967AB4:("func_80967AB4",), + 0x809679D0:("EnAni_DefaultBlink",), + 0x80967A48:("EnAni_WaitForEyeClose",), + 0x80967AB4:("EnAni_WaitForEyeOpen",), 0x80967B1C:("EnAni_Init",), 0x80967CE0:("EnAni_Destroy",), - 0x80967D20:("func_80967D20",), - 0x80967DA0:("func_80967DA0",), - 0x80967DCC:("func_80967DCC",), - 0x80967E34:("func_80967E34",), - 0x80967E90:("func_80967E90",), - 0x80967F20:("func_80967F20",), - 0x80967FA4:("func_80967FA4",), - 0x809680B0:("func_809680B0",), - 0x80968164:("func_80968164",), + 0x80967D20:("EnAni_SetText",), + 0x80967DA0:("EnAni_IdleStanding",), + 0x80967DCC:("EnAni_Talk",), + 0x80967E34:("EnAni_IdleInPain",), + 0x80967E90:("EnAni_FallOverInPain",), + 0x80967F20:("EnAni_LandOnFoot",), + 0x80967FA4:("EnAni_FallToGround",), + 0x809680B0:("EnAni_LoseBalance",), + 0x80968164:("EnAni_HangInTree",), 0x809682A8:("EnAni_Update",), - 0x80968504:("func_80968504",), - 0x8096854C:("func_8096854C",), + 0x80968504:("EnAni_OverrideLimbDraw",), + 0x8096854C:("EnAni_PostLimbDraw",), 0x8096858C:("EnAni_Draw",), 0x809687B0:("EnJs_Init",), 0x809689D4:("EnJs_Destroy",),