Skip to content

Commit

Permalink
rando and custom messages working!
Browse files Browse the repository at this point in the history
  • Loading branch information
inspectredc committed May 31, 2024
1 parent 526a32c commit 3066a60
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 37 deletions.
4 changes: 1 addition & 3 deletions soh/include/z64.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions soh/soh/Enhancements/randomizer/randomizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ Randomizer::Randomizer() {
item.GetName().english,
item.GetName().english,
item.GetName().french,
item.GetName().english,
};
}
}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion soh/soh/Enhancements/randomizer/randomizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class Randomizer {
std::unordered_map<RandomizerInf, bool> trialsRequired;
std::unordered_set<uint16_t> masterQuestDungeons;
std::unordered_map<RandomizerCheck, u16> merchantPrices;
std::unordered_map<RandomizerGet, std::array<std::string, 3>> EnumToSpoilerfileGetName;
std::unordered_map<RandomizerGet, std::array<std::string, 4>> EnumToSpoilerfileGetName;

static Sprite* GetSeedTexture(uint8_t index);
s16 GetItemModelFromId(s16 itemId);
Expand Down
4 changes: 2 additions & 2 deletions soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
5 changes: 3 additions & 2 deletions soh/soh/Enhancements/tts/tts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -813,9 +813,10 @@ void RegisterOnUpdateMainMenuSelection() {

GameInteractor::Instance->RegisterGameHook<GameInteractor::OnUpdateFileBossRushOptionSelection>([](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());
});
Expand Down
1 change: 1 addition & 0 deletions soh/soh/OTRGlobals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1256,6 +1256,7 @@ extern "C" uint64_t GetUnixTimestamp() {
}

extern bool ToggleAltAssetsAtEndOfFrame;
extern bool gDisplayNextMessageAsEnglish;

extern "C" void Graph_StartFrame() {
#ifndef __WIIU__
Expand Down
61 changes: 32 additions & 29 deletions soh/src/code/z_message_PAL.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -2910,15 +2909,15 @@ 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);
}
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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -3124,15 +3123,15 @@ 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);
}
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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 3066a60

Please sign in to comment.