summaryrefslogtreecommitdiff
path: root/mm/src/code
diff options
context:
space:
mode:
authorQlonever <42286723+Qlonever@users.noreply.github.com>2024-05-30 22:36:14 -0400
committerGitHub <noreply@github.com>2024-05-30 22:36:14 -0400
commite484e0ba825e67402e4ca0e2b49eaaa2c2fbecdc (patch)
treea1e84b6387e12515d74112e5b2d74e45d8557aa6 /mm/src/code
parent291973fffeb9c5c41e9269d5731c296edd2f1771 (diff)
fix control code logic (#586)
Diffstat (limited to 'mm/src/code')
-rw-r--r--mm/src/code/z_message_nes.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/mm/src/code/z_message_nes.c b/mm/src/code/z_message_nes.c
index 7e6b43852..266549e83 100644
--- a/mm/src/code/z_message_nes.c
+++ b/mm/src/code/z_message_nes.c
@@ -431,7 +431,10 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255;
}
- if ((i + 1) == msgCtx->textDrawPos) {
+ if ((i + 1) == msgCtx->textDrawPos ||
+ // 2S2H [Enhancement] To match how PAL and GC fixed character parsing, any code that checks for
+ // (i + 1) == msgCtx->textDrawPos should also check for (i + 2) == msgCtx->textDrawPos
+ ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) {
msgCtx->textDrawPos++;
}
break;
@@ -495,7 +498,8 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
msgCtx->textColorB = D_801D080C[(s16)((u8)character - 1)].b;
}
- if ((i + 1) == msgCtx->textDrawPos) {
+ if ((i + 1) == msgCtx->textDrawPos ||
+ ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) {
msgCtx->textDrawPos++;
}
break;
@@ -554,7 +558,8 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
return;
case 0x17: // MESSAGE_QUICKTEXT_ENABLE
- if ((i + 1) == msgCtx->textDrawPos) {
+ if ((i + 1) == msgCtx->textDrawPos ||
+ ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) {
if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) ||
((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26))) {
j = i;
@@ -621,19 +626,24 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
return;
case 0x1E: // MESSAGE_SFX
- if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
+ if (((i + 1) == msgCtx->textDrawPos ||
+ ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) &&
+ (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8;
stateTimerHi += (uint8_t)msgCtx->decodedBuffer.schar[i + 2];
Audio_PlaySfx(stateTimerHi);
}
- if ((i + 1) == msgCtx->textDrawPos) {
+ if ((i + 1) == msgCtx->textDrawPos ||
+ ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) {
msgCtx->textDrawPos += 2;
}
i += 2;
break;
case 0x1F:
- if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
+ if (((i + 1) == msgCtx->textDrawPos ||
+ ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) &&
+ (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
msgCtx->msgMode = MSGMODE_9;
stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8;
stateTimerHi += msgCtx->decodedBuffer.schar[i + 2];
@@ -654,7 +664,9 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
case 0x5:
case 0x6:
msgCtx->textDelay = (u8)character - 0x0;
- if ((i + 1) == msgCtx->textDrawPos) {
+ if ((i + 1) == msgCtx->textDrawPos ||
+ ((i + 2) == msgCtx->textDrawPos &&
+ CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) {
msgCtx->textDrawPos++;
}
break;
@@ -851,7 +863,9 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
default:
break;
}
- if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) {
+ if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) &&
+ ((i + 1) == msgCtx->textDrawPos ||
+ ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0)))) {
Audio_PlaySfx(NA_SE_NONE);
}