diff --git a/include/z64actor.h b/include/z64actor.h index e05a9d6188..ea6acb198a 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -161,14 +161,18 @@ typedef struct ActorShape { // #define ACTOR_FLAG_15 (1 << 15) -// -#define ACTOR_FLAG_16 (1 << 16) +// Player automatically accepts a Talk Offer without needing to press the A button. +// Player still has to meet all conditions to be able to receive a talk offer (for example, being in range). +#define ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED (1 << 16) // #define ACTOR_FLAG_17 (1 << 17) -// -#define ACTOR_FLAG_18 (1 << 18) +// When locked onto an actor with this flag set, the C-Up button can be used to talk to this actor. +// A C-Up button labeled "Navi" will appear on the HUD when locked on which indicates the actor can be checked with Navi. +// With this flag Player talks directly to the actor with C-Up. It is expected that the resulting dialog should appear +// to be coming from Navi, even though she is not involved at all with this interaction. +#define ACTOR_FLAG_TALK_WITH_C_UP (1 << 18) // Flags controlling the use of `Actor.sfx`. Do not use directly. #define ACTOR_FLAG_SFX_ACTOR_POS_2 (1 << 19) // see Actor_PlaySfx_Flagged2 diff --git a/src/code/z_message.c b/src/code/z_message.c index 0f3502f367..920fd9bad0 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -4320,7 +4320,7 @@ void Message_Update(PlayState* play) { // Later, if the ocarina has not been played and another textbox is closed, this handling // for Saria's song will be carried out. player->naviTextId = -0xE0; - player->naviActor->flags |= ACTOR_FLAG_16; + player->naviActor->flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE && (play->msgCtx.ocarinaMode == OCARINA_MODE_01 || play->msgCtx.ocarinaMode == OCARINA_MODE_0B)) { diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c index db594cfac5..58271dd259 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -88,8 +88,7 @@ void ElfMsg2_Init(Actor* thisx, PlayState* play) { ElfMsg2_SetupAction(this, ElfMsg2_WaitUntilActivated); } else { ElfMsg2_SetupAction(this, ElfMsg2_WaitForTextRead); - this->actor.flags |= - ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_18; // Make actor targetable and Navi-checkable + this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP; this->actor.textId = ElfMsg2_GetMessageId(this); } this->actor.shape.rot.x = this->actor.shape.rot.y = this->actor.shape.rot.z = 0; @@ -141,7 +140,7 @@ void ElfMsg2_WaitUntilActivated(ElfMsg2* this, PlayState* play) { if ((this->actor.world.rot.y >= 0x41) && (this->actor.world.rot.y <= 0x80) && (Flags_GetSwitch(play, (this->actor.world.rot.y - 0x41)))) { ElfMsg2_SetupAction(this, ElfMsg2_WaitForTextRead); - this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_18; // Make actor targetable and Navi-checkable + this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP; this->actor.textId = ElfMsg2_GetMessageId(this); } } diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index a1c6b3a380..30d16077f5 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -217,7 +217,7 @@ void EnCow_UpdateAnimation(EnCow* this, PlayState* play) { void EnCow_TalkEnd(EnCow* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Message_CloseTextbox(play); this->actionFunc = EnCow_Idle; } @@ -225,7 +225,7 @@ void EnCow_TalkEnd(EnCow* this, PlayState* play) { void EnCow_GiveMilkEnd(EnCow* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnCow_Idle; } } @@ -241,7 +241,7 @@ void EnCow_GiveMilkWait(EnCow* this, PlayState* play) { void EnCow_GiveMilk(EnCow* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Message_CloseTextbox(play); this->actionFunc = EnCow_GiveMilkWait; Actor_OfferGetItem(&this->actor, play, GI_MILK, 10000.0f, 100.0f); @@ -264,7 +264,7 @@ void EnCow_Talk(EnCow* this, PlayState* play) { if (Actor_TalkOfferAccepted(&this->actor, play)) { this->actionFunc = EnCow_CheckForEmptyBottle; } else { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalk(&this->actor, play, 170.0f); this->actor.textId = 0x2006; } @@ -290,7 +290,7 @@ void EnCow_Idle(EnCow* this, PlayState* play) { (ABS((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y)) < 25000)) { R_EPONAS_SONG_PLAYED = false; this->actionFunc = EnCow_Talk; - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalk(&this->actor, play, 170.0f); this->actor.textId = 0x2006; } else { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index 101209eb60..c4bf246d1f 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -347,9 +347,9 @@ void EnDns_Idle(EnDns* this, PlayState* play) { this->actionFunc = EnDns_Talk; } else { if ((this->collider.base.ocFlags1 & OC1_HIT) || this->actor.isLockedOn) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } if (this->actor.xzDistToPlayer < 130.0f) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); diff --git a/src/overlays/actors/ovl_En_Ds/z_en_ds.c b/src/overlays/actors/ovl_En_Ds/z_en_ds.c index eaf1fd0d01..b3899ae0b8 100644 --- a/src/overlays/actors/ovl_En_Ds/z_en_ds.c +++ b/src/overlays/actors/ovl_En_Ds/z_en_ds.c @@ -53,7 +53,7 @@ void EnDs_Destroy(Actor* thisx, PlayState* play) { void EnDs_Talk(EnDs* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { this->actionFunc = EnDs_Wait; - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } this->unk_1E8 |= 1; } @@ -70,7 +70,7 @@ void EnDs_TalkAfterGiveOddPotion(EnDs* this, PlayState* play) { if (Actor_TalkOfferAccepted(&this->actor, play)) { this->actionFunc = EnDs_Talk; } else { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalk(&this->actor, play, 1000.0f); } } @@ -188,7 +188,7 @@ void EnDs_OfferBluePotion(EnDs* this, PlayState* play) { return; case 2: // have 100 rupees and empty bottle Rupees_ChangeBy(-100); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferGetItem(&this->actor, play, GI_BOTTLE_POTION_BLUE, 10000.0f, 50.0f); this->actionFunc = EnDs_GiveBluePotion; return; diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index a3e4bb5e17..95677f121a 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1397,7 +1397,7 @@ void func_80A053F0(Actor* thisx, PlayState* play) { } } else if (player->naviTextId < 0) { // trigger dialog instantly for negative message IDs - thisx->flags |= ACTOR_FLAG_16; + thisx->flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } if (Actor_TalkOfferAccepted(thisx, play)) { @@ -1418,7 +1418,7 @@ void func_80A053F0(Actor* thisx, PlayState* play) { this->elfMsg->actor.flags |= ACTOR_FLAG_TALK; } - thisx->flags &= ~ACTOR_FLAG_16; + thisx->flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else { this->actionFunc(this, play); thisx->shape.rot.y = this->unk_2BC; diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 527df5b1fb..798d7e509d 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -167,11 +167,11 @@ void func_80A1DBD4(EnFu* this, PlayState* play) { if (play->msgCtx.ocarinaMode >= OCARINA_MODE_04) { this->actionFunc = EnFu_WaitAdult; play->msgCtx.ocarinaMode = OCARINA_MODE_04; - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_03) { Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); this->actionFunc = func_80A1DB60; - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; play->csCtx.script = SEGMENTED_TO_VIRTUAL(gSongOfStormsCs); gSaveContext.cutsceneTrigger = 1; Item_Give(play, ITEM_SONG_STORMS); diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index 492d9d6bc7..6147ab7a25 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -518,7 +518,7 @@ void EnGe1_BeginGiveItem_Archery(EnGe1* this, PlayState* play) { s32 getItemId; if (Actor_TextboxIsClosing(&this->actor, play)) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnGe1_WaitTillItemGiven_Archery; } @@ -545,7 +545,7 @@ void EnGe1_BeginGiveItem_Archery(EnGe1* this, PlayState* play) { void EnGe1_TalkWinPrize_Archery(EnGe1* this, PlayState* play) { if (Actor_TalkOfferAccepted(&this->actor, play)) { this->actionFunc = EnGe1_BeginGiveItem_Archery; - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else { Actor_OfferTalk(&this->actor, play, 200.0f); } @@ -567,7 +567,7 @@ void EnGe1_BeginGame_Archery(EnGe1* this, PlayState* play) { Actor* horse; if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; switch (play->msgCtx.choiceIndex) { case 0: @@ -627,7 +627,7 @@ void EnGe1_TalkAfterGame_Archery(EnGe1* this, PlayState* play) { // With the current `SaveContext` struct definition, the expression in the debug string is an out-of-bounds read, // see the other occurrence of this for more details. LOG_NUM("z_common_data.memory.information.room_inf[127][ 0 ]", HIGH_SCORE(HS_HBA), "../z_en_ge1.c", 1111); - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; if (HIGH_SCORE(HS_HBA) < gSaveContext.minigameScore) { HIGH_SCORE(HS_HBA) = gSaveContext.minigameScore; diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c index 332dfc9d17..da5b380082 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -438,7 +438,7 @@ void EnGe2_SetActionAfterTalk(EnGe2* this, PlayState* play) { break; } this->actor.update = EnGe2_UpdateFriendly; - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } EnGe2_TurnToFacePlayer(this, play); } @@ -459,7 +459,7 @@ void EnGe2_WaitTillCardGiven(EnGe2* this, PlayState* play) { void EnGe2_GiveCard(EnGe2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnGe2_WaitTillCardGiven; Actor_OfferGetItem(&this->actor, play, GI_GERUDOS_CARD, 10000.0f, 50.0f); } @@ -471,7 +471,7 @@ void EnGe2_ForceTalk(EnGe2* this, PlayState* play) { this->actionFunc = EnGe2_GiveCard; } else { this->actor.textId = 0x6004; - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalkExchange(&this->actor, play, 300.0f, 300.0f, EXCH_ITEM_NONE); } EnGe2_LookAtPlayer(this, play); diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c index df1619bf3c..c49252ace7 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -128,7 +128,7 @@ void EnGe3_Wait(EnGe3* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { this->actionFunc = EnGe3_WaitLookAtPlayer; this->actor.update = EnGe3_UpdateWhenNotTalking; - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } EnGe3_TurnToFacePlayer(this, play); } @@ -149,7 +149,7 @@ void EnGe3_WaitTillCardGiven(EnGe3* this, PlayState* play) { void EnGe3_GiveCard(EnGe3* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnGe3_WaitTillCardGiven; Actor_OfferGetItem(&this->actor, play, GI_GERUDOS_CARD, 10000.0f, 50.0f); } @@ -164,7 +164,7 @@ void EnGe3_ForceTalk(EnGe3* this, PlayState* play) { this->unk_30C |= 4; } this->actor.textId = 0x6004; - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalkExchange(&this->actor, play, 300.0f, 300.0f, EXCH_ITEM_NONE); } EnGe3_LookAtPlayer(this, play); diff --git a/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c b/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c index 078ce5db13..b1ee099721 100644 --- a/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c +++ b/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c @@ -640,7 +640,7 @@ void func_80A544AC(EnHeishi2* this, PlayState* play) { this->actor.world.rot.z = this->actor.shape.rot.z; if (this->actor.shape.rot.z < -6000) { Message_StartTextbox(play, 0x708F, NULL); - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = func_80A5455C; this->unk_2E4 = 0.0f; } diff --git a/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c b/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c index 2e7a8a16fb..2b2b65d392 100644 --- a/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c +++ b/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c @@ -324,9 +324,9 @@ void EnHintnuts_BeginFreeze(EnHintnuts* this, PlayState* play) { void EnHintnuts_CheckProximity(EnHintnuts* this, PlayState* play) { if (this->actor.category != ACTORCAT_ENEMY) { if ((this->collider.base.ocFlags1 & OC1_HIT) || this->actor.isLockedOn) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } if (this->actor.xzDistToPlayer < 130.0f) { this->actor.textId = this->textIdCopy; @@ -377,7 +377,8 @@ void EnHintnuts_Run(EnHintnuts* this, PlayState* play) { fabsf(this->actor.world.pos.y - this->actor.home.pos.y) < 2.0f) { this->actor.speed = 0.0f; if (this->actor.category == ACTORCAT_BG) { - this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_16); + this->actor.flags &= + ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED); this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE; Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); } diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 351d61fb72..acb7c46e39 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -699,10 +699,10 @@ void func_80A7A568(EnIn* this, PlayState* play) { void func_80A7A770(EnIn* this, PlayState* play) { if (this->interactInfo.talkState == NPC_TALK_STATE_IDLE) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { Rupees_ChangeBy(-50); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; EnIn_ChangeAnim(this, ENIN_ANIM_3); this->actionFunc = func_80A7A848; SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_7); @@ -737,7 +737,7 @@ void func_80A7A848(EnIn* this, PlayState* play) { void func_80A7A940(EnIn* this, PlayState* play) { if (this->interactInfo.talkState == NPC_TALK_STATE_IDLE) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; return; } if (this->unk_1EC != 0) { @@ -747,7 +747,7 @@ void func_80A7A940(EnIn* this, PlayState* play) { } } if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; func_80A79BAC(this, play, 2, TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_BLACK, TCS_FAST)); SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_2); SET_EVENTINF_HORSES_0F(1); diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index ec0820043c..6cd5163aec 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -103,7 +103,7 @@ void func_80A89008(EnJs* this) { void func_80A89078(EnJs* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { func_80A89008(this); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } } @@ -119,7 +119,7 @@ void func_80A8910C(EnJs* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { this->actor.textId = 0x6078; En_Js_SetupAction(this, func_80A890C0); - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } } diff --git a/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c b/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c index 24644bb5ef..403613d826 100644 --- a/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c +++ b/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c @@ -348,7 +348,7 @@ void EnMa1_IdleTeachSong(EnMa1* this, PlayState* play) { this->actor.textId = 0x2061; Message_StartTextbox(play, this->actor.textId, NULL); this->interactInfo.talkState = NPC_TALK_STATE_TALKING; - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnMa1_StartTeachSong; } else if (this->actor.xzDistToPlayer < 30.0f + this->collider.dim.radius) { player->stateFlags2 |= PLAYER_STATE2_23; @@ -361,7 +361,7 @@ void EnMa1_StartTeachSong(EnMa1* this, PlayState* play) { if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_MALON); Message_StartOcarina(play, OCARINA_ACTION_TEACH_EPONA); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnMa1_TeachSong; } } diff --git a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c index 868b523728..10ed772e4c 100644 --- a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c +++ b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c @@ -255,7 +255,7 @@ void EnMa2_Destroy(Actor* thisx, PlayState* play) { void func_80AA2018(EnMa2* this, PlayState* play) { if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->interactInfo.talkState = NPC_TALK_STATE_IDLE; } } @@ -298,10 +298,10 @@ void func_80AA21C8(EnMa2* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_23; } else { if (this->interactInfo.talkState == NPC_TALK_STATE_IDLE) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Message_CloseTextbox(play); } else { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = func_80AA2018; } } diff --git a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c index 27f0d1174a..6b7297223a 100644 --- a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c +++ b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c @@ -78,7 +78,7 @@ u16 EnMa3_GetTextId(PlayState* play, Actor* thisx) { if (GET_EVENTINF(EVENTINF_HORSES_0A)) { gSaveContext.timerSeconds = gSaveContext.timerSeconds; - thisx->flags |= ACTOR_FLAG_16; + thisx->flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; if (((void)0, gSaveContext.timerSeconds) > 210) { return 0x208E; @@ -156,7 +156,7 @@ s16 EnMa3_UpdateTalkState(PlayState* play, Actor* thisx) { FALLTHROUGH; case 0x208E: CLEAR_EVENTINF(EVENTINF_HORSES_0A); - thisx->flags &= ~ACTOR_FLAG_16; + thisx->flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; talkState = NPC_TALK_STATE_IDLE; gSaveContext.timerState = TIMER_STATE_STOP; break; @@ -283,7 +283,7 @@ void EnMa3_Destroy(Actor* thisx, PlayState* play) { void func_80AA3200(EnMa3* this, PlayState* play) { if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->interactInfo.talkState = NPC_TALK_STATE_IDLE; } } diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index 42bb01c703..ba73bf7732 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -81,7 +81,7 @@ void EnMk_Destroy(Actor* thisx, PlayState* play) { void func_80AACA40(EnMk* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnMk_Wait; } diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index 7a3cf46d80..78b170c63d 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -276,7 +276,7 @@ s32 EnOwl_CheckInitTalk(EnOwl* this, PlayState* play, u16 textId, f32 targetDist this->actor.textId = textId; distCheck = (flags & 2) ? 200.0f : 1000.0f; if (this->actor.xzDistToPlayer < targetDist) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalkExchange(&this->actor, play, targetDist, distCheck, EXCH_ITEM_NONE); } return false; @@ -342,7 +342,7 @@ void func_80ACA76C(EnOwl* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); func_80ACA62C(this, play); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } } @@ -358,7 +358,7 @@ void func_80ACA7E0(EnOwl* this, PlayState* play) { func_80ACA71C(this); this->actionFunc = func_80ACA690; } - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } } @@ -552,7 +552,7 @@ void func_80ACB03C(EnOwl* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); func_80ACA62C(this, play); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } } diff --git a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c index 8018015ea4..8c694c46fd 100644 --- a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c +++ b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c @@ -195,7 +195,7 @@ void EnPoField_SetupWaitForSpawn(EnPoField* this, PlayState* play) { Lights_PointSetColorAndRadius(&this->lightInfo, 0, 0, 0, 0); this->actionTimer = 200; Actor_SetScale(&this->actor, 0.0f); - this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_16); + this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED); this->collider.base.acFlags &= ~AC_ON; this->collider.base.ocFlags1 = OC1_ON | OC1_TYPE_ALL; this->actor.colChkInfo.health = D_80AD70D8.health; @@ -655,15 +655,15 @@ void func_80AD58D4(EnPoField* this, PlayState* play) { } if (this->actionTimer == 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; EnPoField_SetupSoulDisappear(this); return; } if (this->collider.base.ocFlags1 & OC1_HIT) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } else { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } this->actor.world.pos.y = Math_SinS(this->unk_194 * 0x800) * 5.0f + this->actor.home.pos.y; diff --git a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c index f0322a91a7..e79cec70c7 100644 --- a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c +++ b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c @@ -8,8 +8,9 @@ #include "overlays/actors/ovl_En_Honotrap/z_en_honotrap.h" #include "assets/objects/object_tk/object_tk.h" -#define FLAGS \ - (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_16) +#define FLAGS \ + (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | \ + ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED) void EnPoRelay_Init(Actor* thisx, PlayState* play); void EnPoRelay_Destroy(Actor* thisx, PlayState* play); @@ -161,10 +162,10 @@ void EnPoRelay_CorrectY(EnPoRelay* this) { void EnPoRelay_Idle(EnPoRelay* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x100); if (Actor_TalkOfferAccepted(&this->actor, play)) { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actionFunc = EnPoRelay_Talk; } else if (this->actor.xzDistToPlayer < 250.0f) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; this->actor.textId = this->textId; Actor_OfferTalk(&this->actor, play, 250.0f); } diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c index 9e8f56721e..7a415baff6 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -773,14 +773,14 @@ void func_80ADFE80(EnPoh* this, PlayState* play) { } if (this->unk_198 == 0) { func_80ADE950(this, 1); - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; return; } if (this->colliderCyl.base.ocFlags1 & OC1_HIT) { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } else { - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCyl.base); } this->actor.world.pos.y = Math_SinS(this->unk_195 * 0x800) * 5.0f + this->actor.home.pos.y; diff --git a/src/overlays/actors/ovl_En_Ta/z_en_ta.c b/src/overlays/actors/ovl_En_Ta/z_en_ta.c index 65c46c3b10..6990af1ac8 100644 --- a/src/overlays/actors/ovl_En_Ta/z_en_ta.c +++ b/src/overlays/actors/ovl_En_Ta/z_en_ta.c @@ -668,7 +668,7 @@ void EnTa_IdleFoundSuperCucco(EnTa* this, PlayState* play) { if (Actor_TalkOfferAccepted(&this->actor, play)) { this->actionFunc = EnTa_TalkFoundSuperCucco; // Unset auto-talking - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else { Actor_OfferTalk(&this->actor, play, 1000.0f); } @@ -784,7 +784,7 @@ void EnTa_RunCuccoGame(EnTa* this, PlayState* play) { this->actionFunc = EnTa_IdleFoundSuperCucco; // Automatically talk to player - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalk(&this->actor, play, 1000.0f); return; } @@ -1130,9 +1130,9 @@ void EnTa_IdleAfterCuccoGameFinished(EnTa* this, PlayState* play) { this->actionFunc = EnTa_TalkAfterCuccoGameWon; break; } - this->actor.flags &= ~ACTOR_FLAG_16; + this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; } else { - this->actor.flags |= ACTOR_FLAG_16; + this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; Actor_OfferTalk(&this->actor, play, 1000.0f); } this->stateFlags |= TALON_STATE_FLAG_TRACKING_PLAYER; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index abae124c3e..2b02fd736a 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -5996,8 +5996,9 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { s32 canTalkToLockOnWithCUp; canTalkToLockOnWithCUp = - (lockOnActor != NULL) && (CHECK_FLAG_ALL(lockOnActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_18) || - (lockOnActor->naviEnemyId != NAVI_ENEMY_NONE)); + (lockOnActor != NULL) && + (CHECK_FLAG_ALL(lockOnActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP) || + (lockOnActor->naviEnemyId != NAVI_ENEMY_NONE)); if (canTalkToLockOnWithCUp || (this->naviTextId != 0)) { // If `naviTextId` is negative and outside the 0x2XX range, talk to Navi instantly @@ -6027,7 +6028,7 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { if (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { if ((this->heldActor == NULL) || (!forceTalkToNavi && (talkOfferActor != this->heldActor) && (cUpTalkActor != this->heldActor) && - ((talkOfferActor == NULL) || !(talkOfferActor->flags & ACTOR_FLAG_16)))) { + ((talkOfferActor == NULL) || !(talkOfferActor->flags & ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED)))) { goto dont_talk; } } @@ -6044,7 +6045,9 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { // "Speak" or "Check" will appear on the A button in the HUD. this->stateFlags2 |= PLAYER_STATE2_CAN_ACCEPT_TALK_OFFER; - if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) || (talkOfferActor->flags & ACTOR_FLAG_16)) { + if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) || + (talkOfferActor->flags & ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED)) { + // Talk Offer has been accepted. // Clearing `cUpTalkActor` guarantees that `talkOfferActor` is the actor that will be spoken to cUpTalkActor = NULL; } else if (cUpTalkActor == NULL) { @@ -6109,7 +6112,7 @@ s32 Player_ActionHandler_0(Player* this, PlayState* play) { } if ((this->focusActor != NULL) && - (CHECK_FLAG_ALL(this->focusActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_18) || + (CHECK_FLAG_ALL(this->focusActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP) || (this->focusActor->naviEnemyId != NAVI_ENEMY_NONE))) { this->stateFlags2 |= PLAYER_STATE2_21; } else if ((this->naviTextId == 0) && !Player_CheckHostileLockOn(this) && @@ -15805,7 +15808,7 @@ void func_80853148(PlayState* play, Actor* actor) { s32 pad; if ((this->talkActor != NULL) || (actor == this->naviActor) || - CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_18)) { + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP)) { actor->flags |= ACTOR_FLAG_TALK; }