From 8c5370c772ad6c5efedec4a60a3390d4daf6922e Mon Sep 17 00:00:00 2001 From: mzxrules Date: Sun, 29 Dec 2024 19:12:36 -0500 Subject: [PATCH 1/3] Haggling Townsfolk flags --- include/z64save.h | 26 +++++++++++++++++++------ src/overlays/actors/ovl_En_Mu/z_en_mu.c | 24 +++++++++++------------ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/include/z64save.h b/include/z64save.h index 3d61f485f82..891f13d000f 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -964,12 +964,26 @@ typedef enum IngoRaceState { #define EVENTINF_MARATHON_ACTIVE 0x10 // EVENTINF 0x20-0x24 -#define EVENTINF_INDEX_20_21_22_23_24 2 -#define EVENTINF_20_MASK (1 << 0) -#define EVENTINF_21_MASK (1 << 1) -#define EVENTINF_22_MASK (1 << 2) -#define EVENTINF_23_MASK (1 << 3) -#define EVENTINF_24_MASK (1 << 4) +#define EVENTINF_INDEX_HAGGLING_TOWNSFOLK 0x2 +#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_0 0x20 +#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_1 0x21 +#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_2 0x22 +#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_3 0x23 +#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_4 0x24 + +#define EVENTINF_HAGGLING_TOWNSFOLK_MASK \ + (EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_0) | EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_1) | \ + EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_2) | EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_3) | \ + EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_4)) + +#define ENMU_GET_TALK_FLAGS() \ + gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] & EVENTINF_HAGGLING_TOWNSFOLK_MASK + +#define ENMU_SET_TALK_FLAGS(talkFlags) \ + gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] |= (talkFlags); + +#define ENMU_RESET_TALK_FLAGS() \ + gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] &= ~(EVENTINF_HAGGLING_TOWNSFOLK_MASK); #define EVENTINF_30 0x30 diff --git a/src/overlays/actors/ovl_En_Mu/z_en_mu.c b/src/overlays/actors/ovl_En_Mu/z_en_mu.c index dbe5e1b15c8..d18be73b6f3 100644 --- a/src/overlays/actors/ovl_En_Mu/z_en_mu.c +++ b/src/overlays/actors/ovl_En_Mu/z_en_mu.c @@ -58,21 +58,21 @@ void EnMu_SetupAction(EnMu* this, EnMuActionFunc actionFunc) { void EnMu_Interact(EnMu* this, PlayState* play) { u8 textIdOffset[] = { 0x42, 0x43, 0x3F, 0x41, 0x3E }; u8 bitmask[] = { - EVENTINF_20_MASK, EVENTINF_21_MASK, EVENTINF_22_MASK, EVENTINF_23_MASK, EVENTINF_24_MASK, + EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_0), EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_1), + EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_2), EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_3), + EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_4), }; - u8 textFlags; + u8 talkFlags; s32 randomIndex; s32 i; - textFlags = gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] & - (EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK); - gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] &= - ~(EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK); + talkFlags = ENMU_GET_TALK_FLAGS(); + ENMU_RESET_TALK_FLAGS(); randomIndex = (play->state.frames + (s32)(Rand_ZeroOne() * 5.0f)) % 5; + // Starting at randomIndex, scan sequentially for the next unspoken message for (i = 0; i < 5; i++) { - - if (!(textFlags & bitmask[randomIndex])) { + if (!(talkFlags & bitmask[randomIndex])) { break; } @@ -82,6 +82,7 @@ void EnMu_Interact(EnMu* this, PlayState* play) { } } + // If all 5 messages have been spoken, we reset but make sure the last message isn't repeated again if (i == 5) { if (this->defaultTextId == (textIdOffset[randomIndex] | 0x7000)) { randomIndex++; @@ -89,13 +90,12 @@ void EnMu_Interact(EnMu* this, PlayState* play) { randomIndex = 0; } } - textFlags = 0; + talkFlags = 0; } - textFlags |= bitmask[randomIndex]; + talkFlags |= (u8)bitmask[randomIndex]; this->defaultTextId = textIdOffset[randomIndex] | 0x7000; - textFlags &= EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK | 0xE0; - gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] |= textFlags; + ENMU_SET_TALK_FLAGS(talkFlags); } u16 EnMu_GetTextId(PlayState* play, Actor* thisx) { From 0c013f52f4e1c7b8c4478dd76c25a5ad2bb83277 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 30 Dec 2024 13:40:46 -0500 Subject: [PATCH 2/3] suggestion --- include/z64save.h | 6 +++--- src/overlays/actors/ovl_En_Mu/z_en_mu.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/z64save.h b/include/z64save.h index 891f13d000f..6ec7697fbc4 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -976,13 +976,13 @@ typedef enum IngoRaceState { EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_2) | EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_3) | \ EVENTINF_MASK(EVENTINF_HAGGLING_TOWNSFOLK_MESG_4)) -#define ENMU_GET_TALK_FLAGS() \ +#define GET_EVENTINF_ENMU_TALK_FLAGS() \ gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] & EVENTINF_HAGGLING_TOWNSFOLK_MASK -#define ENMU_SET_TALK_FLAGS(talkFlags) \ +#define SET_EVENTINF_ENMU_TALK_FLAGS(talkFlags) \ gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] |= (talkFlags); -#define ENMU_RESET_TALK_FLAGS() \ +#define RESET_EVENTINF_ENMU_TALK_FLAGS() \ gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] &= ~(EVENTINF_HAGGLING_TOWNSFOLK_MASK); #define EVENTINF_30 0x30 diff --git a/src/overlays/actors/ovl_En_Mu/z_en_mu.c b/src/overlays/actors/ovl_En_Mu/z_en_mu.c index d18be73b6f3..c88eb625317 100644 --- a/src/overlays/actors/ovl_En_Mu/z_en_mu.c +++ b/src/overlays/actors/ovl_En_Mu/z_en_mu.c @@ -66,8 +66,8 @@ void EnMu_Interact(EnMu* this, PlayState* play) { s32 randomIndex; s32 i; - talkFlags = ENMU_GET_TALK_FLAGS(); - ENMU_RESET_TALK_FLAGS(); + talkFlags = GET_EVENTINF_ENMU_TALK_FLAGS(); + RESET_EVENTINF_ENMU_TALK_FLAGS(); randomIndex = (play->state.frames + (s32)(Rand_ZeroOne() * 5.0f)) % 5; // Starting at randomIndex, scan sequentially for the next unspoken message @@ -95,7 +95,7 @@ void EnMu_Interact(EnMu* this, PlayState* play) { talkFlags |= (u8)bitmask[randomIndex]; this->defaultTextId = textIdOffset[randomIndex] | 0x7000; - ENMU_SET_TALK_FLAGS(talkFlags); + SET_EVENTINF_ENMU_TALK_FLAGS(talkFlags); } u16 EnMu_GetTextId(PlayState* play, Actor* thisx) { From f170bec4e6f54e4bf36f53c90a567c7e220157b8 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Fri, 17 Jan 2025 09:32:03 -0500 Subject: [PATCH 3/3] so there's not going to be a We U? --- src/overlays/actors/ovl_En_Mu/z_en_mu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Mu/z_en_mu.c b/src/overlays/actors/ovl_En_Mu/z_en_mu.c index c88eb625317..4f4221820fa 100644 --- a/src/overlays/actors/ovl_En_Mu/z_en_mu.c +++ b/src/overlays/actors/ovl_En_Mu/z_en_mu.c @@ -82,7 +82,7 @@ void EnMu_Interact(EnMu* this, PlayState* play) { } } - // If all 5 messages have been spoken, we reset but make sure the last message isn't repeated again + // If all 5 messages have been spoken, reset but prevent the last message from being repeated if (i == 5) { if (this->defaultTextId == (textIdOffset[randomIndex] | 0x7000)) { randomIndex++;