From ee505fc47db09834a885f547c20ea1cbb92b9f8a Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 26 Sep 2022 03:01:58 -0400 Subject: [PATCH] Fixes ocarina textbox flashing (#1589) --- soh/src/code/z_message_PAL.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/soh/src/code/z_message_PAL.c b/soh/src/code/z_message_PAL.c index 4ed8a3f62..c004d8656 100644 --- a/soh/src/code/z_message_PAL.c +++ b/soh/src/code/z_message_PAL.c @@ -1281,8 +1281,15 @@ void Message_Decode(GlobalContext* globalCtx) { MessageContext* msgCtx = &globalCtx->msgCtx; Font* font = &globalCtx->msgCtx.font; - for (u32 i = 0; i < FONT_CHAR_TEX_SIZE * 120; i += FONT_CHAR_TEX_SIZE) { - gSPInvalidateTexCache(globalCtx->state.gfxCtx->polyOpa.p++, &font->charTexBuf[i]); + if ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING && msgCtx->msgMode <= MSGMODE_OCARINA_AWAIT_INPUT) || msgCtx->textBoxType == TEXTBOX_TYPE_OCARINA) { + // TODO: Figure out what specific textures to invalidate to prevent the ocarina textboxes from flashing + gSPInvalidateTexCache(globalCtx->state.gfxCtx->polyOpa.p++, NULL); + } else { + for (u32 i = 0; i < FONT_CHAR_TEX_SIZE * 120; i += FONT_CHAR_TEX_SIZE) { + if (&font->charTexBuf[i] != NULL) { + gSPInvalidateTexCache(globalCtx->state.gfxCtx->polyOpa.p++, &font->charTexBuf[i]); + } + } } globalCtx->msgCtx.textDelayTimer = 0; @@ -1680,6 +1687,17 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) { } sMessageHasSetSfx = D_8014B2F4 = sTextboxSkipped = sTextIsCredits = 0; + if ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING && msgCtx->msgMode <= MSGMODE_OCARINA_AWAIT_INPUT) || + msgCtx->textBoxType == TEXTBOX_TYPE_OCARINA) { + // TODO: Figure out what specific textures to invalidate to prevent the ocarina textboxes from flashing + gSPInvalidateTexCache(globalCtx->state.gfxCtx->polyOpa.p++, NULL); + } else { + for (u32 i = 0; i < FONT_CHAR_TEX_SIZE * 120; i += FONT_CHAR_TEX_SIZE) { + if (&font->charTexBuf[i] != NULL) { + gSPInvalidateTexCache(globalCtx->state.gfxCtx->polyOpa.p++, &font->charTexBuf[i]); + } + } + } if (textId >= 0x0500 && textId < 0x0600) { // text ids 0500 to 0600 are reserved for credits sTextIsCredits = true;