From 9f6ffc9f2aba47d21dff466d7bd4a0b71f1af188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Thu, 19 Mar 2026 01:38:56 +0000 Subject: [PATCH] z_en_ko.c: port over more improvements from decomp, add hook to fix vanilla forest quest state bug (#6373) --- ...ncements - Curated First Time Vanilla.json | 1 + .../Enhancements - Curated Randomizer.json | 1 + ...ancements - Curated Returning Vanilla.json | 1 + .../Fixes/FixKokiriForestQuestState.cpp | 20 +++ .../vanilla-behavior/GIVanillaBehavior.h | 8 + soh/soh/SohGui/SohMenuEnhancements.cpp | 4 + soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c | 155 ++++++++++-------- 7 files changed, 125 insertions(+), 65 deletions(-) create mode 100644 soh/soh/Enhancements/Fixes/FixKokiriForestQuestState.cpp diff --git a/soh/assets/custom/presets/Enhancements - Curated First Time Vanilla.json b/soh/assets/custom/presets/Enhancements - Curated First Time Vanilla.json index 3b483d5ce..76aee067a 100644 --- a/soh/assets/custom/presets/Enhancements - Curated First Time Vanilla.json +++ b/soh/assets/custom/presets/Enhancements - Curated First Time Vanilla.json @@ -27,6 +27,7 @@ "FixTexturesOOB": 1, "FixVineFall": 1, "FixZoraHintDialogue": 1, + "FixKokiriForestQuestStage": 1, "FrogsModifyFailTime": 2, "GerudoWarriorClothingFix": 1, "GravediggingTourFix": 1, diff --git a/soh/assets/custom/presets/Enhancements - Curated Randomizer.json b/soh/assets/custom/presets/Enhancements - Curated Randomizer.json index 78d1e5d75..d7d660cae 100644 --- a/soh/assets/custom/presets/Enhancements - Curated Randomizer.json +++ b/soh/assets/custom/presets/Enhancements - Curated Randomizer.json @@ -55,6 +55,7 @@ "FixTexturesOOB": 1, "FixVineFall": 1, "FixZoraHintDialogue": 1, + "FixKokiriForestQuestStage": 1, "ForgeTime": 0, "FrogsModifyFailTime": 2, "GerudoWarriorClothingFix": 1, diff --git a/soh/assets/custom/presets/Enhancements - Curated Returning Vanilla.json b/soh/assets/custom/presets/Enhancements - Curated Returning Vanilla.json index 8a00f87f3..501661a9e 100644 --- a/soh/assets/custom/presets/Enhancements - Curated Returning Vanilla.json +++ b/soh/assets/custom/presets/Enhancements - Curated Returning Vanilla.json @@ -27,6 +27,7 @@ "FixTexturesOOB": 1, "FixVineFall": 1, "FixZoraHintDialogue": 1, + "FixKokiriForestQuestStage": 1, "FrogsModifyFailTime": 2, "GerudoWarriorClothingFix": 1, "GravediggingTourFix": 1, diff --git a/soh/soh/Enhancements/Fixes/FixKokiriForestQuestState.cpp b/soh/soh/Enhancements/Fixes/FixKokiriForestQuestState.cpp new file mode 100644 index 000000000..abf79c140 --- /dev/null +++ b/soh/soh/Enhancements/Fixes/FixKokiriForestQuestState.cpp @@ -0,0 +1,20 @@ +#include "soh/Enhancements/game-interactor/GameInteractor.h" +#include "soh/ShipInit.hpp" + +extern "C" { +#include "z64.h" +#include "src/overlays/actors/ovl_En_Ko/z_en_ko.h" +s32 EnKo_GetForestQuestState(EnKo*); +} + +void RegisterFixKokiriForestQuestState() { + COND_VB_SHOULD(VB_KOKIRI_GET_FOREST_QUEST_STATE2, CVarGetInteger(CVAR_ENHANCEMENT("FixKokiriForestQuestState"), 0), + { + EnKo* enKo = va_arg(args, EnKo*); + enKo->forestQuestState = EnKo_GetForestQuestState(enKo); + *should = false; + }); +} + +static RegisterShipInitFunc initFunc(RegisterFixKokiriForestQuestState, + { CVAR_ENHANCEMENT("FixKokiriForestQuestState") }); diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 2d70dd02b..c55d830c1 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -610,6 +610,14 @@ typedef enum { // - `*Actor` VB_FADE_KOKIRI, + // #### `result` + // ```c + // EnKo_GetForestQuestState2(this) + // ``` + // #### `args` + // - `*EnKo` + VB_KOKIRI_GET_FOREST_QUEST_STATE2, + // #### `result` // ```c // true diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp index 284155d69..e0574ca53 100644 --- a/soh/soh/SohGui/SohMenuEnhancements.cpp +++ b/soh/soh/SohGui/SohMenuEnhancements.cpp @@ -990,6 +990,10 @@ void SohMenu::AddMenuEnhancements() { .CVar(CVAR_ENHANCEMENT("FixDampeGoingBackwards")) .Options(CheckboxOptions().Tooltip( "Fixes Dampé going backwards in certain circumstances when the player is going backwards.")); + AddWidget(path, "Fix Kokiri Forest Quest State", WIDGET_CVAR_CHECKBOX) + .CVar(CVAR_ENHANCEMENT("FixKokiriForestQuestState")) + .Options(CheckboxOptions().Tooltip("Fixes kokiri animation state to match their text state when getting " + "Zelda's Letter before Kokiri Emerald.")); AddWidget(path, "Fix Raised Floor Switches", WIDGET_CVAR_CHECKBOX) .CVar(CVAR_ENHANCEMENT("FixFloorSwitches")) .Options(CheckboxOptions().Tooltip( diff --git a/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c b/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c index 825d27990..4b2280d7e 100644 --- a/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c +++ b/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c @@ -93,40 +93,40 @@ static EnKoSkeleton sSkeleton[2] = { }; typedef enum { - /* 0 */ ENKO_ANIM_0, - /* 1 */ ENKO_ANIM_1, - /* 2 */ ENKO_ANIM_2, - /* 3 */ ENKO_ANIM_3, - /* 4 */ ENKO_ANIM_4, - /* 5 */ ENKO_ANIM_5, - /* 6 */ ENKO_ANIM_6, - /* 7 */ ENKO_ANIM_7, - /* 8 */ ENKO_ANIM_8, - /* 9 */ ENKO_ANIM_9, - /* 10 */ ENKO_ANIM_10, - /* 11 */ ENKO_ANIM_11, - /* 12 */ ENKO_ANIM_12, - /* 13 */ ENKO_ANIM_13, - /* 14 */ ENKO_ANIM_14, - /* 15 */ ENKO_ANIM_15, - /* 16 */ ENKO_ANIM_16, - /* 17 */ ENKO_ANIM_17, - /* 18 */ ENKO_ANIM_18, - /* 19 */ ENKO_ANIM_19, - /* 20 */ ENKO_ANIM_20, - /* 21 */ ENKO_ANIM_21, - /* 22 */ ENKO_ANIM_22, - /* 23 */ ENKO_ANIM_23, - /* 24 */ ENKO_ANIM_24, - /* 25 */ ENKO_ANIM_25, - /* 26 */ ENKO_ANIM_26, - /* 27 */ ENKO_ANIM_27, - /* 28 */ ENKO_ANIM_28, - /* 29 */ ENKO_ANIM_29, - /* 30 */ ENKO_ANIM_30, - /* 31 */ ENKO_ANIM_31, - /* 32 */ ENKO_ANIM_32, - /* 33 */ ENKO_ANIM_33 + /* 0 */ ENKO_ANIM_BLOCKING_NOMORPH, + /* 1 */ ENKO_ANIM_BLOCKING_NOMORPH_STATIC, + /* 2 */ ENKO_ANIM_STANDUP_1, + /* 3 */ ENKO_ANIM_STANDUP_2, + /* 4 */ ENKO_ANIM_STANDUP_3, + /* 5 */ ENKO_ANIM_IDLE_NOMORPH, + /* 6 */ ENKO_ANIM_IDLE, + /* 7 */ ENKO_ANIM_LAUGHING, + /* 8 */ ENKO_ANIM_LIFTING_ROCK_NOMORPH, + /* 9 */ ENKO_ANIM_RECLINED_STANDING, + /* 10 */ ENKO_ANIM_RECLINED_SITTING_UP, + /* 11 */ ENKO_ANIM_PUNCHING_NOMORPH, + /* 12 */ ENKO_ANIM_STANDING_HAND_ON_CHEST, + /* 13 */ ENKO_ANIM_STANDING_HANDS_ON_HIPS, + /* 14 */ ENKO_ANIM_SITTING, + /* 15 */ ENKO_ANIM_SITTING_CROSSED_ARMS_LEGS, + /* 16 */ ENKO_ANIM_STANDING_APPREHENSIVE, + /* 17 */ ENKO_ANIM_LEANING_ON_ARMS, + /* 18 */ ENKO_ANIM_RECLINED_LEANING_BACK, + /* 19 */ ENKO_ANIM_CUTTING_GRASS_NOMORPH, + /* 20 */ ENKO_ANIM_BACKFLIP, + /* 21 */ ENKO_ANIM_LEANING_FORWARD, + /* 22 */ ENKO_ANIM_STANDING_RIGHT_ARM_UP, + /* 23 */ ENKO_ANIM_STANDING_ARMS_BEHIND_BACK, + /* 24 */ ENKO_ANIM_STANDING, + /* 25 */ ENKO_ANIM_SITTING_CROSSED_LEGS, + /* 26 */ ENKO_ANIM_SITTING_ARMS_UP, + /* 27 */ ENKO_ANIM_SITTING_HEAD_ON_HAND, + /* 28 */ ENKO_ANIM_SITTING_DIGGING, + /* 29 */ ENKO_ANIM_BLOCKING_STATIC, + /* 30 */ ENKO_ANIM_CUTTING_GRASS, + /* 31 */ ENKO_ANIM_PUNCHING, + /* 32 */ ENKO_ANIM_WIPING_FOREHEAD, + /* 33 */ ENKO_ANIM_LIFTING_ROCK } EnKoAnimation; static AnimationInfo sAnimationInfo[] = { @@ -167,19 +167,42 @@ static AnimationInfo sAnimationInfo[] = { }; static u8 sOsAnimeLookup[13][5] = { - /* ENKO_TYPE_CHILD_0 */ { ENKO_ANIM_8, ENKO_ANIM_9, ENKO_ANIM_9, ENKO_ANIM_14, ENKO_ANIM_11 }, - /* ENKO_TYPE_CHILD_1 */ { ENKO_ANIM_2, ENKO_ANIM_12, ENKO_ANIM_2, ENKO_ANIM_13, ENKO_ANIM_13 }, - /* ENKO_TYPE_CHILD_2 */ { ENKO_ANIM_11, ENKO_ANIM_11, ENKO_ANIM_11, ENKO_ANIM_15, ENKO_ANIM_9 }, - /* ENKO_TYPE_CHILD_3 */ { ENKO_ANIM_0, ENKO_ANIM_16, ENKO_ANIM_16, ENKO_ANIM_17, ENKO_ANIM_18 }, - /* ENKO_TYPE_CHILD_4 */ { ENKO_ANIM_19, ENKO_ANIM_19, ENKO_ANIM_20, ENKO_ANIM_10, ENKO_ANIM_9 }, - /* ENKO_TYPE_CHILD_5 */ { ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3 }, - /* ENKO_TYPE_CHILD_6 */ { ENKO_ANIM_4, ENKO_ANIM_22, ENKO_ANIM_22, ENKO_ANIM_4, ENKO_ANIM_23 }, - /* ENKO_TYPE_CHILD_7 */ { ENKO_ANIM_24, ENKO_ANIM_16, ENKO_ANIM_16, ENKO_ANIM_25, ENKO_ANIM_16 }, - /* ENKO_TYPE_CHILD_8 */ { ENKO_ANIM_26, ENKO_ANIM_15, ENKO_ANIM_15, ENKO_ANIM_26, ENKO_ANIM_15 }, - /* ENKO_TYPE_CHILD_9 */ { ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_27, ENKO_ANIM_27 }, - /* ENKO_TYPE_CHILD_10 */ { ENKO_ANIM_2, ENKO_ANIM_2, ENKO_ANIM_2, ENKO_ANIM_2, ENKO_ANIM_22 }, - /* ENKO_TYPE_CHILD_11 */ { ENKO_ANIM_14, ENKO_ANIM_14, ENKO_ANIM_14, ENKO_ANIM_14, ENKO_ANIM_14 }, - /* ENKO_TYPE_CHILD_FADO */ { ENKO_ANIM_5, ENKO_ANIM_5, ENKO_ANIM_5, ENKO_ANIM_5, ENKO_ANIM_5 }, + /* ENKO_TYPE_CHILD_0 */ { ENKO_ANIM_LIFTING_ROCK_NOMORPH, ENKO_ANIM_RECLINED_STANDING, + ENKO_ANIM_RECLINED_STANDING, ENKO_ANIM_SITTING, ENKO_ANIM_PUNCHING_NOMORPH }, + /* ENKO_TYPE_CHILD_1 */ + { ENKO_ANIM_STANDUP_1, ENKO_ANIM_STANDING_HAND_ON_CHEST, ENKO_ANIM_STANDUP_1, ENKO_ANIM_STANDING_HANDS_ON_HIPS, + ENKO_ANIM_STANDING_HANDS_ON_HIPS }, + /* ENKO_TYPE_CHILD_2 */ + { ENKO_ANIM_PUNCHING_NOMORPH, ENKO_ANIM_PUNCHING_NOMORPH, ENKO_ANIM_PUNCHING_NOMORPH, + ENKO_ANIM_SITTING_CROSSED_ARMS_LEGS, ENKO_ANIM_RECLINED_STANDING }, + /* ENKO_TYPE_CHILD_3 */ + { ENKO_ANIM_BLOCKING_NOMORPH, ENKO_ANIM_STANDING_APPREHENSIVE, ENKO_ANIM_STANDING_APPREHENSIVE, + ENKO_ANIM_LEANING_ON_ARMS, ENKO_ANIM_RECLINED_LEANING_BACK }, + /* ENKO_TYPE_CHILD_4 */ + { ENKO_ANIM_CUTTING_GRASS_NOMORPH, ENKO_ANIM_CUTTING_GRASS_NOMORPH, ENKO_ANIM_BACKFLIP, + ENKO_ANIM_RECLINED_SITTING_UP, ENKO_ANIM_RECLINED_STANDING }, + /* ENKO_TYPE_CHILD_5 */ + { ENKO_ANIM_STANDUP_2, ENKO_ANIM_STANDUP_2, ENKO_ANIM_STANDUP_2, ENKO_ANIM_STANDUP_2, ENKO_ANIM_STANDUP_2 }, + /* ENKO_TYPE_CHILD_6 */ + { ENKO_ANIM_STANDUP_3, ENKO_ANIM_STANDING_RIGHT_ARM_UP, ENKO_ANIM_STANDING_RIGHT_ARM_UP, ENKO_ANIM_STANDUP_3, + ENKO_ANIM_STANDING_ARMS_BEHIND_BACK }, + /* ENKO_TYPE_CHILD_7 */ + { ENKO_ANIM_STANDING, ENKO_ANIM_STANDING_APPREHENSIVE, ENKO_ANIM_STANDING_APPREHENSIVE, + ENKO_ANIM_SITTING_CROSSED_LEGS, ENKO_ANIM_STANDING_APPREHENSIVE }, + /* ENKO_TYPE_CHILD_8 */ + { ENKO_ANIM_SITTING_ARMS_UP, ENKO_ANIM_SITTING_CROSSED_ARMS_LEGS, ENKO_ANIM_SITTING_CROSSED_ARMS_LEGS, + ENKO_ANIM_SITTING_ARMS_UP, ENKO_ANIM_SITTING_CROSSED_ARMS_LEGS }, + /* ENKO_TYPE_CHILD_9 */ + { ENKO_ANIM_STANDUP_2, ENKO_ANIM_STANDUP_2, ENKO_ANIM_STANDUP_2, ENKO_ANIM_SITTING_HEAD_ON_HAND, + ENKO_ANIM_SITTING_HEAD_ON_HAND }, + /* ENKO_TYPE_CHILD_10 */ + { ENKO_ANIM_STANDUP_1, ENKO_ANIM_STANDUP_1, ENKO_ANIM_STANDUP_1, ENKO_ANIM_STANDUP_1, + ENKO_ANIM_STANDING_RIGHT_ARM_UP }, + /* ENKO_TYPE_CHILD_11 */ + { ENKO_ANIM_SITTING, ENKO_ANIM_SITTING, ENKO_ANIM_SITTING, ENKO_ANIM_SITTING, ENKO_ANIM_SITTING }, + /* ENKO_TYPE_CHILD_FADO */ + { ENKO_ANIM_IDLE_NOMORPH, ENKO_ANIM_IDLE_NOMORPH, ENKO_ANIM_IDLE_NOMORPH, ENKO_ANIM_IDLE_NOMORPH, + ENKO_ANIM_IDLE_NOMORPH }, }; typedef struct { @@ -284,7 +307,7 @@ s32 EnKo_IsOsAnimeLoaded(EnKo* this, PlayState* play) { return true; } -u16 func_80A96FD0(PlayState* play, Actor* thisx) { +u16 EnKo_GetTextIdChild(PlayState* play, Actor* thisx) { EnKo* this = (EnKo*)thisx; switch (ENKO_TYPE) { case ENKO_TYPE_CHILD_FADO: @@ -383,7 +406,7 @@ u16 func_80A96FD0(PlayState* play, Actor* thisx) { return 0; } -u16 func_80A97338(PlayState* play, Actor* thisx) { +u16 EnKo_GetTextIdAdult(PlayState* play, Actor* thisx) { Player* player = GET_PLAYER(play); EnKo* this = (EnKo*)thisx; @@ -468,7 +491,7 @@ u16 func_80A97338(PlayState* play, Actor* thisx) { } } -u16 func_80A97610(PlayState* play, Actor* thisx) { +u16 EnKo_GetTextId(PlayState* play, Actor* thisx) { u16 faceReaction; EnKo* this = (EnKo*)thisx; @@ -488,12 +511,12 @@ u16 func_80A97610(PlayState* play, Actor* thisx) { return faceReaction; } if (LINK_IS_ADULT) { - return func_80A97338(play, thisx); + return EnKo_GetTextIdAdult(play, thisx); } - return func_80A96FD0(play, thisx); + return EnKo_GetTextIdChild(play, thisx); } -s16 func_80A97738(PlayState* play, Actor* thisx) { +s16 EnKo_UpdateTalkState(PlayState* play, Actor* thisx) { EnKo* this = (EnKo*)thisx; switch (Message_GetState(&play->msgCtx)) { @@ -668,12 +691,12 @@ s32 func_80A97D68(EnKo* this, PlayState* play) { if (this->interactInfo.talkState != NPC_TALK_STATE_IDLE) { if ((this->skelAnime.animation == &gKokiriWipingForeheadAnim) == false) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_32); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_WIPING_FOREHEAD); } trackingMode = NPC_TRACKING_HEAD_AND_TORSO; } else { if ((this->skelAnime.animation == &gKokiriLiftingRockAnim) == false) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_33); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_LIFTING_ROCK); } trackingMode = NPC_TRACKING_NONE; } @@ -721,13 +744,13 @@ s32 func_80A97F70(EnKo* this, PlayState* play) { if (this->interactInfo.talkState != NPC_TALK_STATE_IDLE) { if ((this->skelAnime.animation == &gKokiriBlockingAnim) == false) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_29); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_BLOCKING_STATIC); } func_80034F54(play, this->unk_2E4, this->unk_304, 16); trackingMode = NPC_TRACKING_HEAD_AND_TORSO; } else { if ((this->skelAnime.animation == &gKokiriCuttingGrassAnim) == false) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_30); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_CUTTING_GRASS); } trackingMode = NPC_TRACKING_NONE; } @@ -741,14 +764,14 @@ s32 func_80A98034(EnKo* this, PlayState* play) { if (this->interactInfo.talkState != NPC_TALK_STATE_IDLE) { if ((this->skelAnime.animation == &gKokiriBlockingAnim) == false) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_29); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_BLOCKING_STATIC); } func_80034F54(play, this->unk_2E4, this->unk_304, 16); result = EnKo_IsWithinTalkAngle(this); trackingMode = (result == true) ? NPC_TRACKING_HEAD_AND_TORSO : NPC_TRACKING_NONE; } else { if ((this->skelAnime.animation == &gKokiriPunchingAnim) == false) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_31); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_PUNCHING); } trackingMode = NPC_TRACKING_NONE; result = EnKo_IsWithinTalkAngle(this); @@ -950,8 +973,8 @@ void func_80A9877C(EnKo* this, PlayState* play) { return; } } - if (Npc_UpdateTalking(play, &this->actor, &this->interactInfo.talkState, this->lookDist, func_80A97610, - func_80A97738) && + if (Npc_UpdateTalking(play, &this->actor, &this->interactInfo.talkState, this->lookDist, EnKo_GetTextId, + EnKo_UpdateTalkState) && ENKO_TYPE == ENKO_TYPE_CHILD_FADO && play->sceneNum == SCENE_LOST_WOODS) { this->actor.textId = INV_CONTENT(ITEM_TRADE_ADULT) > ITEM_ODD_POTION ? 0x10B9 : 0x10DF; @@ -1160,7 +1183,9 @@ void func_80A99048(EnKo* this, PlayState* play) { if (ENKO_TYPE == ENKO_TYPE_CHILD_5) { this->collider.base.ocFlags1 |= 0x40; } - this->forestQuestState = EnKo_GetForestQuestState2(this); + if (GameInteractor_Should(VB_KOKIRI_GET_FOREST_QUEST_STATE2, false, this)) { + this->forestQuestState = EnKo_GetForestQuestState2(this); + } Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, sOsAnimeLookup[ENKO_TYPE][this->forestQuestState]); Actor_SetScale(&this->actor, 0.01f); func_80A98CD8(this); @@ -1183,7 +1208,7 @@ void func_80A99048(EnKo* this, PlayState* play) { void func_80A99384(EnKo* this, PlayState* play) { if (ENKO_TYPE == ENKO_TYPE_CHILD_FADO && this->interactInfo.talkState != NPC_TALK_STATE_IDLE && this->actor.textId == 0x10B9) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_7); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_LAUGHING); this->actionFunc = func_80A99438; } else if (ENKO_TYPE == ENKO_TYPE_CHILD_FADO && this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { this->actionFunc = func_80A99504; @@ -1194,12 +1219,12 @@ void func_80A99384(EnKo* this, PlayState* play) { void func_80A99438(EnKo* this, PlayState* play) { if (ENKO_TYPE == ENKO_TYPE_CHILD_FADO && this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_6); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_IDLE); this->actionFunc = func_80A99504; play->msgCtx.stateTimer = 4; play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; } else if (this->interactInfo.talkState == NPC_TALK_STATE_IDLE || this->actor.textId != 0x10B9) { - Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_6); + Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_IDLE); this->actionFunc = func_80A99384; } }