diff --git a/soh/include/z64.h b/soh/include/z64.h index 47f01845336..18676078315 100644 --- a/soh/include/z64.h +++ b/soh/include/z64.h @@ -541,12 +541,10 @@ typedef enum { LANGUAGE_ENG, LANGUAGE_GER, LANGUAGE_FRA, + LANGUAGE_JPN, LANGUAGE_MAX } Language; -// hacky fix to get rando to work -#define LANGUAGE_JPN 3 - // TODO get these properties from the textures themselves #define FONT_CHAR_TEX_WIDTH 16 #define FONT_CHAR_TEX_HEIGHT 16 diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 107e23e83d1..acb6fd73bce 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -140,6 +140,7 @@ Randomizer::Randomizer() { item.GetName().english, item.GetName().english, item.GetName().french, + item.GetName().english, }; } } @@ -5335,6 +5336,7 @@ CustomMessage Randomizer::GetFrogsMessage(u16 originalTextId) { if (frogsGet == RG_ICE_TRAP) { frogsGet = this->itemLocations[RC_ZR_FROGS_OCARINA_GAME].fakeRgID; frogItemName = { + this->itemLocations[RC_ZR_FROGS_OCARINA_GAME].trickName, this->itemLocations[RC_ZR_FROGS_OCARINA_GAME].trickName, this->itemLocations[RC_ZR_FROGS_OCARINA_GAME].trickName, this->itemLocations[RC_ZR_FROGS_OCARINA_GAME].trickName @@ -5430,6 +5432,7 @@ CustomMessage Randomizer::GetMerchantMessage(RandomizerInf randomizerInf, u16 te } else if (shopItemGet == RG_ICE_TRAP) { shopItemGet = this->itemLocations[rc].fakeRgID; shopItemName = { + std::string(this->itemLocations[rc].trickName), std::string(this->itemLocations[rc].trickName), std::string(this->itemLocations[rc].trickName), std::string(this->itemLocations[rc].trickName) @@ -5461,6 +5464,7 @@ CustomMessage Randomizer::GetCursedSkullMessage(s16 params) { if (itemGet == RG_ICE_TRAP) { itemGet = this->itemLocations[rc].fakeRgID; itemName = { + std::string(this->itemLocations[rc].trickName), std::string(this->itemLocations[rc].trickName), std::string(this->itemLocations[rc].trickName), std::string(this->itemLocations[rc].trickName) diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index ce8f5c45be9..746ad3343f9 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -58,7 +58,7 @@ class Randomizer { std::unordered_map trialsRequired; std::unordered_set masterQuestDungeons; std::unordered_map merchantPrices; - std::unordered_map> EnumToSpoilerfileGetName; + std::unordered_map> EnumToSpoilerfileGetName; static Sprite* GetSeedTexture(uint8_t index); s16 GetItemModelFromId(s16 itemId); diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index aca75ef93dc..8d0f7a86bde 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -1466,7 +1466,7 @@ void DrawLocation(RandomizerCheckObject rcObj) { txt = OTRGlobals::Instance->gRandomizer->EnumToSpoilerfileGetName[gSaveContext.itemLocations[rcObj.rc].get.rgID][gSaveContext.language]; } else { if (IsHeartPiece(rcObj.ogItemId)) { - if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER) { + if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER || gSaveContext.language == LANGUAGE_JPN) { txt = ItemFromGIID(rcObj.ogItemId).GetName().english; } else if (gSaveContext.language == LANGUAGE_FRA) { txt = ItemFromGIID(rcObj.ogItemId).GetName().french; @@ -1491,7 +1491,7 @@ void DrawLocation(RandomizerCheckObject rcObj) { } } else { if (IsHeartPiece(rcObj.ogItemId)) { - if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER) { + if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER || gSaveContext.language == LANGUAGE_JPN) { txt = ItemFromGIID(rcObj.ogItemId).GetName().english; } else if (gSaveContext.language == LANGUAGE_FRA) { txt = ItemFromGIID(rcObj.ogItemId).GetName().french; diff --git a/soh/soh/Enhancements/tts/tts.cpp b/soh/soh/Enhancements/tts/tts.cpp index 23196cee3d6..5f203b66e73 100644 --- a/soh/soh/Enhancements/tts/tts.cpp +++ b/soh/soh/Enhancements/tts/tts.cpp @@ -813,9 +813,10 @@ void RegisterOnUpdateMainMenuSelection() { GameInteractor::Instance->RegisterGameHook([](uint8_t optionIndex, uint8_t optionValue) { if (!CVarGetInteger(CVAR_SETTING("A11yTTS"), 0)) return; + uint8_t language = (gSaveContext.language == LANGUAGE_JPN) ? LANGUAGE_ENG : gSaveContext.language; - auto optionName = BossRush_GetSettingName(optionIndex, gSaveContext.language); - auto optionValueName = BossRush_GetSettingChoiceName(optionIndex, optionValue, gSaveContext.language); + auto optionName = BossRush_GetSettingName(optionIndex, language); + auto optionValueName = BossRush_GetSettingChoiceName(optionIndex, optionValue, language); auto translation = optionName + std::string(" - ") + optionValueName; SpeechSynthesizer::Instance->Speak(translation.c_str(), GetLanguageCode()); }); diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index ee0354e243f..7644673de5a 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1256,6 +1256,7 @@ extern "C" uint64_t GetUnixTimestamp() { } extern bool ToggleAltAssetsAtEndOfFrame; +extern bool gDisplayNextMessageAsEnglish; extern "C" void Graph_StartFrame() { #ifndef __WIIU__ diff --git a/soh/src/code/z_message_PAL.c b/soh/src/code/z_message_PAL.c index c70285dd049..f51d4a398e6 100644 --- a/soh/src/code/z_message_PAL.c +++ b/soh/src/code/z_message_PAL.c @@ -1899,13 +1899,9 @@ void Message_Decode(PlayState* play) { sTextFade = false; // #region SOH [NTSC] - Originally this is all in one function, but for ease of reading, the JP decoding will be separated out - if (!gDisplayNextMessageAsEnglish) { - if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits) { - Message_DecodeJPN(play); - return; - } - } else { - gDisplayNextMessageAsEnglish = false; + if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !gDisplayNextMessageAsEnglish) { + Message_DecodeJPN(play); + return; } // #endregion @@ -2368,6 +2364,9 @@ void Message_OpenText(PlayState* play, u16 textId) { // RANDOTODO: Use this for ice trap messages if (CustomMessage_RetrieveIfExists(play)) { osSyncPrintf("Found custom message"); + if (gSaveContext.language == LANGUAGE_JPN) { + gDisplayNextMessageAsEnglish = true; + } } else if (sTextIsCredits) { Message_FindCreditsMessage(play, textId); msgCtx->msgLength = font->msgLength; @@ -2901,7 +2900,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { for (j = 0, i = 0; i < 48; i++, j += 0x80) { func_8006EE50(&play->msgCtx.font, 0x8140, j); } - if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits) { + if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -2910,7 +2909,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { break; case MSGMODE_TEXT_DISPLAYING: case MSGMODE_TEXT_DELAYED_BREAK: - if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits) { + if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -2918,7 +2917,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { break; case MSGMODE_TEXT_AWAIT_INPUT: case MSGMODE_TEXT_AWAIT_NEXT: - if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits) { + if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -2965,7 +2964,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { } if (msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY && msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP) { - if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits) { + if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3062,7 +3061,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { } if (msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY && msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP) { - if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits) { + if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3124,7 +3123,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { play->msgCtx.ocarinaMode = OCARINA_MODE_03; } } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3132,7 +3131,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { break; case MSGMODE_OCARINA_FAIL: case MSGMODE_SONG_PLAYBACK_FAIL: - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3200,7 +3199,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { play->msgCtx.lastPlayedSong == OCARINA_SONG_TIME || play->msgCtx.lastPlayedSong == OCARINA_SONG_STORMS || play->msgCtx.lastPlayedSong == OCARINA_SONG_SUNS) { - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3248,7 +3247,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { sOcarinaNoteBufPos = 0; msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION; } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3267,7 +3266,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { msgCtx->stateTimer = 1; } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3278,7 +3277,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { if (msgCtx->stateTimer == 0) { msgCtx->msgMode = MSGMODE_SONG_PLAYED_ACT_BEGIN; } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3289,7 +3288,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { Message_ResetOcarinaNoteState(); msgCtx->msgMode = MSGMODE_SONG_PLAYED_ACT; msgCtx->stateTimer = 2; - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3372,7 +3371,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { } } case MSGMODE_SONG_DEMONSTRATION_DONE: - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3408,14 +3407,14 @@ void Message_DrawMain(PlayState* play, Gfx** p) { msgCtx->stateTimer = 10; msgCtx->msgMode = MSGMODE_SONG_PLAYBACK_FAIL; } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); } break; case MSGMODE_OCARINA_AWAIT_INPUT: - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3434,7 +3433,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { sOcarinaNoteBufLen = 0; Message_ResetOcarinaNoteState(); msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_ONGOING; - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3486,7 +3485,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { osSyncPrintf(VT_RST); osSyncPrintf("\n====================================================================\n"); } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3526,7 +3525,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { Audio_OcaSetRecordingState(2); Audio_OcaSetInstrument(1); msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_ONGOING; - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3565,7 +3564,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { Message_CloseTextbox(play); msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_FAILED; } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3646,7 +3645,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { msgCtx->msgMode = MSGMODE_MEMORY_GAME_ROUND_SUCCESS; msgCtx->stateTimer = 30; } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3672,7 +3671,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { play->msgCtx.ocarinaMode = OCARINA_MODE_0F; } } - if (gSaveContext.language == LANGUAGE_JPN) { + if (gSaveContext.language == LANGUAGE_JPN && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3706,7 +3705,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { case MSGMODE_FROGS_WAITING: break; case MSGMODE_TEXT_DONE: - if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits) { + if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !gDisplayNextMessageAsEnglish) { Message_DrawTextJPN(play, &gfx); } else { Message_DrawText(play, &gfx); @@ -3738,6 +3737,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) { } break; case MSGMODE_TEXT_CLOSING: + if (gDisplayNextMessageAsEnglish) { + gDisplayNextMessageAsEnglish = false; + } + /* fallthrough */ case MSGMODE_PAUSED: break; case MSGMODE_UNK_20: