Child Ruto Actions Part 5: Speakable (#2619)

* Child Ruto Actions Part 5: Speakable

* Rename to "Speakable Jabu"
This commit is contained in:
Jordan Longstaff
2026-02-21 15:21:41 -05:00
committed by GitHub
parent 5ab42786f4
commit 6f9b62bd4a
3 changed files with 79 additions and 79 deletions
+2 -2
View File
@@ -892,8 +892,8 @@ typedef enum LinkAge {
#define INFTABLE_139 0x139
#define INFTABLE_140 0x140
#define INFTABLE_MET_RUTO_FIRST_TIME 0x141
#define INFTABLE_142 0x142
#define INFTABLE_143 0x143
#define INFTABLE_LEARNED_WHY_RUTO_IN_JABU_JABU 0x142
#define INFTABLE_BECAME_CARRIER_FOR_RUTO 0x143
#define INFTABLE_144 0x144
#define INFTABLE_RUTO_HAS_SAPPHIRE 0x145
#define INFTABLE_RUTO_ABDUCTED 0x146
+70 -70
View File
@@ -59,11 +59,11 @@ void EnRu1_BossRoom_WaitInsideBlueWarp(EnRu1* this, PlayState* play);
void EnRu1_BossRoom_LinkWalksToPointInBlueWarp(EnRu1* this, PlayState* play);
void EnRu1_BossRoom_WhatTookYouSoLong(EnRu1* this, PlayState* play);
void EnRu1_BossRoom_WarpingOut(EnRu1* this, PlayState* play);
void func_80AEF29C(EnRu1* this, PlayState* play);
void func_80AEF2AC(EnRu1* this, PlayState* play);
void func_80AEF2D0(EnRu1* this, PlayState* play);
void func_80AEF354(EnRu1* this, PlayState* play);
void func_80AEF3A8(EnRu1* this, PlayState* play);
void EnRu1_SpeakableJabu_PreSpawn(EnRu1* this, PlayState* play);
void EnRu1_SpeakableJabu_Spawn(EnRu1* this, PlayState* play);
void EnRu1_SpeakableJabu_Idle(EnRu1* this, PlayState* play);
void EnRu1_SpeakableJabu_Talking(EnRu1* this, PlayState* play);
void EnRu1_SpeakableJabu_TakingSeat(EnRu1* this, PlayState* play);
void func_80AEEBD4(EnRu1* this, PlayState* play);
void func_80AEEC5C(EnRu1* this, PlayState* play);
void func_80AEECF0(EnRu1* this, PlayState* play);
@@ -81,8 +81,8 @@ void EnRu1_SapphireRoom_MissionAccomplished(EnRu1* this, PlayState* play);
void EnRu1_SapphireRoom_Waiting(EnRu1* this, PlayState* play);
void EnRu1_SapphireRoom_ReadyToGoHome(EnRu1* this, PlayState* play);
void EnRu1_SapphireRoom_BeingAbducted(EnRu1* this, PlayState* play);
void func_80AEFECC(EnRu1* this, PlayState* play);
void func_80AEFF40(EnRu1* this, PlayState* play);
void EnRu1_ThroneRoom_Idle(EnRu1* this, PlayState* play);
void EnRu1_ThroneRoom_Talk(EnRu1* this, PlayState* play);
void EnRu1_PreLimbDraw(EnRu1* this, PlayState* play, s32 limbIndex, Vec3s* rot);
@@ -168,11 +168,11 @@ static EnRu1ActionFunc sActionFuncs[] = {
EnRu1_BossRoom_LinkWalksToPointInBlueWarp, // ENRU1_ACTION_LINK_WALKS_TO_POINT_IN_BLUE_WARP
EnRu1_BossRoom_WhatTookYouSoLong, // ENRU1_ACTION_WHAT_TOOK_YOU_SO_LONG
EnRu1_BossRoom_WarpingOut, // ENRU1_ACTION_WARPING_OUT
func_80AEF29C, // ENRU1_ACTION_22
func_80AEF2AC, // ENRU1_ACTION_23
func_80AEF2D0, // ENRU1_ACTION_24
func_80AEF354, // ENRU1_ACTION_25
func_80AEF3A8, // ENRU1_ACTION_26
EnRu1_SpeakableJabu_PreSpawn, // ENRU1_ACTION_SPEAK_JABU_PRE_SPAWN
EnRu1_SpeakableJabu_Spawn, // ENRU1_ACTION_SPEAK_JABU_SPAWN
EnRu1_SpeakableJabu_Idle, // ENRU1_ACTION_SPEAK_JABU_IDLE
EnRu1_SpeakableJabu_Talking, // ENRU1_ACTION_SPEAK_JABU_TALKING
EnRu1_SpeakableJabu_TakingSeat, // ENRU1_ACTION_SPEAK_JABU_SIT_DOWN
func_80AEEBD4, // ENRU1_ACTION_27
func_80AEEC5C, // ENRU1_ACTION_28
func_80AEECF0, // ENRU1_ACTION_29
@@ -190,8 +190,8 @@ static EnRu1ActionFunc sActionFuncs[] = {
EnRu1_SapphireRoom_Waiting, // ENRU1_ACTION_WAITING_IN_SAPPHIRE_ROOM
EnRu1_SapphireRoom_ReadyToGoHome, // ENRU1_ACTION_READY_TO_GO_HOME
EnRu1_SapphireRoom_BeingAbducted, // ENRU1_ACTION_BEING_ABDUCTED
func_80AEFECC, // ENRU1_ACTION_44
func_80AEFF40, // ENRU1_ACTION_45
EnRu1_ThroneRoom_Idle, // ENRU1_ACTION_THRONE_IDLE
EnRu1_ThroneRoom_Talk, // ENRU1_ACTION_THRONE_TALK
};
static EnRu1PreLimbDrawFunc sPreLimbDrawFuncs[] = {
@@ -357,7 +357,7 @@ s32 func_80AEB020(EnRu1* this, PlayState* play) {
someEnRu1 = (EnRu1*)actorIt;
if (someEnRu1 != this) {
if ((someEnRu1->action == ENRU1_ACTION_31) || (someEnRu1->action == ENRU1_ACTION_32) ||
(someEnRu1->action == ENRU1_ACTION_24)) {
(someEnRu1->action == ENRU1_ACTION_SPEAK_JABU_IDLE)) {
return true;
}
}
@@ -407,7 +407,7 @@ Actor* func_80AEB124(PlayState* play) {
return NULL;
}
int func_80AEB174(PlayState* play) {
int EnRu1_MessageShouldAdvance(PlayState* play) {
return (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play);
}
@@ -855,7 +855,7 @@ void EnRu1_InitInJabuJabuHolesRoom(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
actorRoom = this->actor.room;
this->action = ENRU1_ACTION_22;
this->action = ENRU1_ACTION_SPEAK_JABU_PRE_SPAWN;
this->actor.room = -1;
this->drawConfig = ENRU1_DRAW_NOTHING;
this->roomNum1 = actorRoom;
@@ -1285,7 +1285,7 @@ void EnRu1_InitInJabuJabuBasement(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
actorRoom = this->actor.room;
this->action = ENRU1_ACTION_22;
this->action = ENRU1_ACTION_SPEAK_JABU_PRE_SPAWN;
this->actor.room = -1;
this->roomNum1 = actorRoom;
this->roomNum3 = actorRoom;
@@ -1609,13 +1609,13 @@ void EnRu1_UpdateWaterState(EnRu1* this) {
}
}
s32 func_80AEE264(EnRu1* this, PlayState* play) {
s32 EnRu1_TalkOfferAccepted(EnRu1* this, PlayState* play) {
if (!Actor_TalkOfferAccepted(&this->actor, play)) {
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY;
if (GET_INFTABLE(INFTABLE_143)) {
if (GET_INFTABLE(INFTABLE_BECAME_CARRIER_FOR_RUTO)) {
this->actor.textId = 0x404E;
Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play);
} else if (GET_INFTABLE(INFTABLE_142)) {
} else if (GET_INFTABLE(INFTABLE_LEARNED_WHY_RUTO_IN_JABU_JABU)) {
this->actor.textId = 0x404D;
Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play);
} else {
@@ -1909,7 +1909,7 @@ void func_80AEEF08(EnRu1* this, PlayState* play) {
void func_80AEEF5C(EnRu1* this, PlayState* play) {
}
void func_80AEEF68(EnRu1* this, PlayState* play) {
void EnRu1_TurnUpperBodyTowardPlayer(EnRu1* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 trackingPreset;
@@ -1919,7 +1919,7 @@ void func_80AEEF68(EnRu1* this, PlayState* play) {
Npc_TrackPoint(&this->actor, &this->interactInfo, trackingPreset, NPC_TRACKING_HEAD_AND_TORSO);
}
void func_80AEEFEC(EnRu1* this, PlayState* play) {
void EnRu1_TurnFullBodyTowardPlayer(EnRu1* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 trackingPreset;
@@ -1930,45 +1930,45 @@ void func_80AEEFEC(EnRu1* this, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
}
void func_80AEF080(EnRu1* this) {
void EnRu1_PlaySittingSfx(EnRu1* this) {
if (Animation_OnFrame(&this->skelAnime, 11.0f)) {
Sfx_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_LAND_DIRT);
}
}
s32 func_80AEF0BC(EnRu1* this, PlayState* play) {
if (GET_INFTABLE(INFTABLE_142)) {
s32 EnRu1_BecomingCarrier(EnRu1* this, PlayState* play) {
if (GET_INFTABLE(INFTABLE_LEARNED_WHY_RUTO_IN_JABU_JABU)) {
f32 frameCount = Animation_GetLastFrame(&gRutoChildSitAnim);
Animation_Change(&this->skelAnime, &gRutoChildSitAnim, 1.0f, 0, frameCount, ANIMMODE_ONCE, -8.0f);
play->msgCtx.msgMode = MSGMODE_PAUSED;
this->action = ENRU1_ACTION_26;
this->action = ENRU1_ACTION_SPEAK_JABU_SIT_DOWN;
this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY);
return true;
}
return false;
}
void func_80AEF170(EnRu1* this, PlayState* play, s32 cond) {
if (cond) {
this->action = ENRU1_ACTION_25;
void EnRu1_CheckJabuTalk(EnRu1* this, PlayState* play, s32 isTalking) {
if (isTalking) {
this->action = ENRU1_ACTION_SPEAK_JABU_TALKING;
}
}
void func_80AEF188(EnRu1* this, PlayState* play) {
if (func_80AEB174(play) && !func_80AEF0BC(this, play)) {
void EnRu1_EndJabuTalk(EnRu1* this, PlayState* play) {
if (EnRu1_MessageShouldAdvance(play) && !EnRu1_BecomingCarrier(this, play)) {
Message_CloseTextbox(play);
SET_INFTABLE(INFTABLE_142);
this->action = ENRU1_ACTION_24;
SET_INFTABLE(INFTABLE_LEARNED_WHY_RUTO_IN_JABU_JABU);
this->action = ENRU1_ACTION_SPEAK_JABU_IDLE;
}
}
void func_80AEF1F0(EnRu1* this, PlayState* play, UNK_TYPE arg2) {
if (arg2 != 0) {
void EnRu1_HoldSittingPose(EnRu1* this, PlayState* play, s32 isFullySeated) {
if (isFullySeated) {
Animation_Change(&this->skelAnime, &gRutoChildSittingAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gRutoChildSittingAnim), ANIMMODE_LOOP, 0.0f);
Message_CloseTextbox(play);
SET_INFTABLE(INFTABLE_143);
SET_INFTABLE(INFTABLE_BECAME_CARRIER_FOR_RUTO);
func_80AED6DC(this, play);
Actor_OfferCarry(&this->actor, play);
this->action = ENRU1_ACTION_27;
@@ -1976,46 +1976,46 @@ void func_80AEF1F0(EnRu1* this, PlayState* play, UNK_TYPE arg2) {
}
}
void func_80AEF29C(EnRu1* this, PlayState* play) {
this->action = ENRU1_ACTION_23;
void EnRu1_SpeakableJabu_PreSpawn(EnRu1* this, PlayState* play) {
this->action = ENRU1_ACTION_SPEAK_JABU_SPAWN;
}
void func_80AEF2AC(EnRu1* this, PlayState* play) {
this->action = ENRU1_ACTION_24;
void EnRu1_SpeakableJabu_Spawn(EnRu1* this, PlayState* play) {
this->action = ENRU1_ACTION_SPEAK_JABU_IDLE;
this->drawConfig = ENRU1_DRAW_OPA;
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY;
}
void func_80AEF2D0(EnRu1* this, PlayState* play) {
s32 cond;
void EnRu1_SpeakableJabu_Idle(EnRu1* this, PlayState* play) {
s32 isTalking;
func_80AEEF68(this, play);
EnRu1_TurnUpperBodyTowardPlayer(this, play);
EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
EnRu1_UpdateStandingOC(this, play);
func_80AEAECC(this, play);
cond = func_80AEE264(this, play);
isTalking = EnRu1_TalkOfferAccepted(this, play);
func_80AED624(this, play);
func_80AEF170(this, play, cond);
EnRu1_CheckJabuTalk(this, play, isTalking);
}
void func_80AEF354(EnRu1* this, PlayState* play) {
func_80AEEFEC(this, play);
void EnRu1_SpeakableJabu_Talking(EnRu1* this, PlayState* play) {
EnRu1_TurnFullBodyTowardPlayer(this, play);
EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
func_80AEAECC(this, play);
func_80AEF188(this, play);
EnRu1_EndJabuTalk(this, play);
}
void func_80AEF3A8(EnRu1* this, PlayState* play) {
s32 something;
void EnRu1_SpeakableJabu_TakingSeat(EnRu1* this, PlayState* play) {
s32 doneAnim;
func_80AED83C(this);
something = EnRu1_UpdateSkelAnime(this);
func_80AEF080(this);
doneAnim = EnRu1_UpdateSkelAnime(this);
EnRu1_PlaySittingSfx(this);
EnRu1_UpdateEyes(this);
func_80AEAECC(this, play);
func_80AEF1F0(this, play, something);
EnRu1_HoldSittingPose(this, play, doneAnim);
}
void EnRu1_PlayStepSoundNearSapphire(EnRu1* this) {
@@ -2264,14 +2264,14 @@ void EnRu1_InitBesideKingZora(EnRu1* this, PlayState* play) {
if (GET_EVENTCHKINF(EVENTCHKINF_37) && LINK_IS_CHILD) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->action = ENRU1_ACTION_44;
this->action = ENRU1_ACTION_THRONE_IDLE;
this->drawConfig = ENRU1_DRAW_OPA;
} else {
Actor_Kill(&this->actor);
}
}
s32 func_80AEFDC0(EnRu1* this, PlayState* play) {
s32 EnRu1_ThroneRoomTalkOfferAccepted(EnRu1* this, PlayState* play) {
if (!Actor_TalkOfferAccepted(&this->actor, play)) {
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY;
this->actor.textId = MaskReaction_GetTextId(play, MASK_REACTION_SET_RUTO);
@@ -2284,7 +2284,7 @@ s32 func_80AEFDC0(EnRu1* this, PlayState* play) {
return true;
}
s32 func_80AEFE38(EnRu1* this, PlayState* play) {
s32 EnRu1_IsThroneRoomTextClosing(EnRu1* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY);
return true;
@@ -2292,33 +2292,33 @@ s32 func_80AEFE38(EnRu1* this, PlayState* play) {
return false;
}
void func_80AEFE84(EnRu1* this, PlayState* play, s32 cond) {
if (cond) {
this->action = ENRU1_ACTION_45;
void EnRu1_StartThroneRoomTalk(EnRu1* this, PlayState* play, s32 isTalking) {
if (isTalking) {
this->action = ENRU1_ACTION_THRONE_TALK;
}
}
void func_80AEFE9C(EnRu1* this, PlayState* play) {
if (func_80AEFE38(this, play)) {
this->action = ENRU1_ACTION_44;
void EnRu1_EndThroneRoomTalk(EnRu1* this, PlayState* play) {
if (EnRu1_IsThroneRoomTextClosing(this, play)) {
this->action = ENRU1_ACTION_THRONE_IDLE;
}
}
void func_80AEFECC(EnRu1* this, PlayState* play) {
func_80AEEF68(this, play);
void EnRu1_ThroneRoom_Idle(EnRu1* this, PlayState* play) {
EnRu1_TurnUpperBodyTowardPlayer(this, play);
EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
EnRu1_UpdateStandingOC(this, play);
func_80AEAECC(this, play);
func_80AEFE84(this, play, func_80AEFDC0(this, play));
EnRu1_StartThroneRoomTalk(this, play, EnRu1_ThroneRoomTalkOfferAccepted(this, play));
}
void func_80AEFF40(EnRu1* this, PlayState* play) {
func_80AEEFEC(this, play);
void EnRu1_ThroneRoom_Talk(EnRu1* this, PlayState* play) {
EnRu1_TurnFullBodyTowardPlayer(this, play);
EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
func_80AEAECC(this, play);
func_80AEFE9C(this, play);
EnRu1_EndThroneRoomTalk(this, play);
}
/**
@@ -2331,7 +2331,7 @@ void EnRu1_InitBesideDoorSwitch(EnRu1* this, PlayState* play) {
!GET_INFTABLE(INFTABLE_RUTO_HAS_SAPPHIRE) && (!(func_80AEB020(this, play)))) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
actorRoom = this->actor.room;
this->action = ENRU1_ACTION_22;
this->action = ENRU1_ACTION_SPEAK_JABU_PRE_SPAWN;
this->actor.room = -1;
this->drawConfig = ENRU1_DRAW_NOTHING;
this->roomNum1 = actorRoom;
+7 -7
View File
@@ -83,11 +83,11 @@ typedef enum EnRu1Action {
/* 19 */ ENRU1_ACTION_LINK_WALKS_TO_POINT_IN_BLUE_WARP,
/* 20 */ ENRU1_ACTION_WHAT_TOOK_YOU_SO_LONG,
/* 21 */ ENRU1_ACTION_WARPING_OUT,
/* 22 */ ENRU1_ACTION_22,
/* 23 */ ENRU1_ACTION_23,
/* 24 */ ENRU1_ACTION_24,
/* 25 */ ENRU1_ACTION_25,
/* 26 */ ENRU1_ACTION_26,
/* 22 */ ENRU1_ACTION_SPEAK_JABU_PRE_SPAWN,
/* 23 */ ENRU1_ACTION_SPEAK_JABU_SPAWN,
/* 24 */ ENRU1_ACTION_SPEAK_JABU_IDLE,
/* 25 */ ENRU1_ACTION_SPEAK_JABU_TALKING,
/* 26 */ ENRU1_ACTION_SPEAK_JABU_SIT_DOWN,
/* 27 */ ENRU1_ACTION_27,
/* 28 */ ENRU1_ACTION_28,
/* 29 */ ENRU1_ACTION_29,
@@ -105,8 +105,8 @@ typedef enum EnRu1Action {
/* 41 */ ENRU1_ACTION_WAITING_IN_SAPPHIRE_ROOM,
/* 42 */ ENRU1_ACTION_READY_TO_GO_HOME,
/* 43 */ ENRU1_ACTION_BEING_ABDUCTED,
/* 44 */ ENRU1_ACTION_44,
/* 45 */ ENRU1_ACTION_45
/* 44 */ ENRU1_ACTION_THRONE_IDLE,
/* 45 */ ENRU1_ACTION_THRONE_TALK
} EnRu1Action;
typedef enum EnRu1DrawConfig {