mirror of
https://github.com/zeldaret/oot.git
synced 2025-02-05 11:44:31 +00:00
Restructure event flags in z64save.h (4/?): Haggling Townsfolk (#2395)
* Haggling Townsfolk flags * suggestion * so there's not going to be a We U?
This commit is contained in:
parent
260d92dfb6
commit
161c789886
2 changed files with 32 additions and 18 deletions
|
@ -968,12 +968,26 @@ typedef enum IngoRaceState {
|
||||||
#define EVENTINF_MARATHON_ACTIVE 0x10
|
#define EVENTINF_MARATHON_ACTIVE 0x10
|
||||||
|
|
||||||
// EVENTINF 0x20-0x24
|
// EVENTINF 0x20-0x24
|
||||||
#define EVENTINF_INDEX_20_21_22_23_24 2
|
#define EVENTINF_INDEX_HAGGLING_TOWNSFOLK 0x2
|
||||||
#define EVENTINF_20_MASK (1 << 0)
|
#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_0 0x20
|
||||||
#define EVENTINF_21_MASK (1 << 1)
|
#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_1 0x21
|
||||||
#define EVENTINF_22_MASK (1 << 2)
|
#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_2 0x22
|
||||||
#define EVENTINF_23_MASK (1 << 3)
|
#define EVENTINF_HAGGLING_TOWNSFOLK_MESG_3 0x23
|
||||||
#define EVENTINF_24_MASK (1 << 4)
|
#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 GET_EVENTINF_ENMU_TALK_FLAGS() \
|
||||||
|
gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] & EVENTINF_HAGGLING_TOWNSFOLK_MASK
|
||||||
|
|
||||||
|
#define SET_EVENTINF_ENMU_TALK_FLAGS(talkFlags) \
|
||||||
|
gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] |= (talkFlags);
|
||||||
|
|
||||||
|
#define RESET_EVENTINF_ENMU_TALK_FLAGS() \
|
||||||
|
gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] &= ~(EVENTINF_HAGGLING_TOWNSFOLK_MASK);
|
||||||
|
|
||||||
#define EVENTINF_30 0x30
|
#define EVENTINF_30 0x30
|
||||||
|
|
||||||
|
|
|
@ -58,21 +58,21 @@ void EnMu_SetupAction(EnMu* this, EnMuActionFunc actionFunc) {
|
||||||
void EnMu_Interact(EnMu* this, PlayState* play) {
|
void EnMu_Interact(EnMu* this, PlayState* play) {
|
||||||
u8 textIdOffset[] = { 0x42, 0x43, 0x3F, 0x41, 0x3E };
|
u8 textIdOffset[] = { 0x42, 0x43, 0x3F, 0x41, 0x3E };
|
||||||
u8 bitmask[] = {
|
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 randomIndex;
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
textFlags = gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] &
|
talkFlags = GET_EVENTINF_ENMU_TALK_FLAGS();
|
||||||
(EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK);
|
RESET_EVENTINF_ENMU_TALK_FLAGS();
|
||||||
gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] &=
|
|
||||||
~(EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK);
|
|
||||||
randomIndex = (play->state.frames + (s32)(Rand_ZeroOne() * 5.0f)) % 5;
|
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++) {
|
for (i = 0; i < 5; i++) {
|
||||||
|
if (!(talkFlags & bitmask[randomIndex])) {
|
||||||
if (!(textFlags & bitmask[randomIndex])) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@ void EnMu_Interact(EnMu* this, PlayState* play) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If all 5 messages have been spoken, reset but prevent the last message from being repeated
|
||||||
if (i == 5) {
|
if (i == 5) {
|
||||||
if (this->defaultTextId == (textIdOffset[randomIndex] | 0x7000)) {
|
if (this->defaultTextId == (textIdOffset[randomIndex] | 0x7000)) {
|
||||||
randomIndex++;
|
randomIndex++;
|
||||||
|
@ -89,13 +90,12 @@ void EnMu_Interact(EnMu* this, PlayState* play) {
|
||||||
randomIndex = 0;
|
randomIndex = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
textFlags = 0;
|
talkFlags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
textFlags |= bitmask[randomIndex];
|
talkFlags |= (u8)bitmask[randomIndex];
|
||||||
this->defaultTextId = textIdOffset[randomIndex] | 0x7000;
|
this->defaultTextId = textIdOffset[randomIndex] | 0x7000;
|
||||||
textFlags &= EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK | 0xE0;
|
SET_EVENTINF_ENMU_TALK_FLAGS(talkFlags);
|
||||||
gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] |= textFlags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 EnMu_GetTextId(PlayState* play, Actor* thisx) {
|
u16 EnMu_GetTextId(PlayState* play, Actor* thisx) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue