From fedd5ac1c1105865ff333eff07f5e5e20d37c0b5 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sun, 30 Mar 2025 16:27:12 +0000 Subject: [PATCH 1/8] entrance shuffle: sign hints --- .../custom-message/CustomMessageTypes.h | 30 +++++ soh/soh/OTRGlobals.cpp | 127 +++++++++++++++++- soh/src/code/z_message_PAL.c | 1 - 3 files changed, 156 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h index b5bc0fd6e..ada40d730 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h +++ b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h @@ -79,8 +79,38 @@ typedef enum { TEXT_SARIAS_SONG_CHANNELING_POWER = 0x016D, TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI = 0x01B3, // 0x1yy for Navi msg range TEXT_MASK_SHOP_SIGN = 0x0207, + TEXT_WATERFALL = 0x022D, TEXT_FROGS_UNDERWATER = 0x022E, + TEXT_OUTSIDE_FISHING_POND = 0x023A, + TEXT_HF_SIGN = 0x0301, + TEXT_HC_GF = 0x0304, + TEXT_KAK_SIGN = 0x0305, + TEXT_KAK_GY = 0x0306, + TEXT_KAK_WELL = 0x0307, + TEXT_KAK_DMT = 0x0308, + TEXT_DMT_DC = 0x030A, + TEXT_GC_SIGN = 0x030B, + TEXT_HF_ZR = 0x030C, + TEXT_ZD_SIGN = 0x030E, + TEXT_ZF_JABU_SIGN = 0x030F, + TEXT_KF_LW = 0x0314, + TEXT_HF_LON_LON = 0x0315, + TEXT_LA_SIGN = 0x0317, + TEXT_LA_LAB = 0x0318, + TEXT_GV_SIGN = 0x0319, TEXT_GF_HBA_SIGN = 0x031A, + TEXT_KF_SHOP_SIGN = 0x031E, + TEXT_LINKS_HOUSE_SIGN = 0x031F, + TEXT_KOKIRI_EXIT_SIGN = 0x0320, + TEXT_DMT_DMC = 0x0323, + TEXT_ZD_SHOP_SIGN = 0x0333, + TEXT_OUTSIDE_KOKIRI_SIGN = 0x0339, + TEXT_OUTSIDE_MARKET_SIGN = 0x033A, + TEXT_MIDO_HOUSE_SIGN = 0x033C, + TEXT_KNOW_IT_ALL_HOUSE = 0x033D, + TEXT_TWINS_HOUSE_SIGN = 0x033E, + TEXT_SARIAS_HOUSE_SIGN = 0x033F, + TEXT_NO_DIVING_SIGN = 0x0342, TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN = 0x0346, // 0x3yy for cuttable sign range TEXT_WARP_MINUET_OF_FOREST = 0x088D, TEXT_WARP_BOLERO_OF_FIRE = 0x088E, diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index bc9b3106e..8b80b54d9 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -26,6 +26,8 @@ #include "Enhancements/audio/AudioCollection.h" #include "Enhancements/enhancementTypes.h" #include "Enhancements/debugconsole.h" +#include "Enhancements/randomizer/entrance.h" +#include "Enhancements/randomizer/location_access.h" #include "Enhancements/randomizer/randomizer.h" #include "Enhancements/randomizer/randomizer_entrance_tracker.h" #include "Enhancements/randomizer/randomizer_item_tracker.h" @@ -2254,6 +2256,129 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { s16 actorParams = 0; if (IS_RANDO) { auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES)) { + s16 entrance = -1; + switch (textId) { + case TEXT_WATERFALL: + entrance = ENTR_ZORAS_DOMAIN_ENTRANCE; + break; + case TEXT_OUTSIDE_FISHING_POND: + entrance = ENTR_FISHING_POND_0; + break; + case TEXT_HF_SIGN: + if (gPlayState->sceneNum == SCENE_KAKARIKO_VILLAGE) { + entrance = ENTR_HYRULE_FIELD_STAIRS_EXIT; + } else if (gPlayState->sceneNum == SCENE_GERUDO_VALLEY) { + entrance = ENTR_HYRULE_FIELD_ROCKY_PATH; + } else if (gPlayState->sceneNum == SCENE_LAKE_HYLIA) { + entrance = ENTR_HYRULE_FIELD_FENCE_EXIT; + } + break; + case TEXT_HC_GF: + entrance = ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_DINS_HC; + break; + case TEXT_KAK_SIGN: + if (gPlayState->sceneNum == SCENE_HYRULE_FIELD) { + entrance = ENTR_KAKARIKO_VILLAGE_FRONT_GATE; + } else { + entrance = ENTR_KAKARIKO_VILLAGE_GUARD_GATE; + } + break; + case TEXT_KAK_GY: + entrance = ENTR_GRAVEYARD_ENTRANCE; + break; + case TEXT_KAK_WELL: + entrance = ENTR_BOTTOM_OF_THE_WELL_ENTRANCE; + break; + case TEXT_KAK_DMT: + entrance = ENTR_DEATH_MOUNTAIN_TRAIL_BOTTOM_EXIT; + break; + case TEXT_DMT_DC: + entrance = ENTR_DEATH_MOUNTAIN_CRATER_UPPER_EXIT; + break; + case TEXT_GC_SIGN: + if (gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_TRAIL) { + entrance = ENTR_GORON_CITY_UPPER_EXIT; + } else { + entrance = ENTR_GORON_CITY_DARUNIA_ROOM_EXIT; + } + break; + case TEXT_HF_ZR: + entrance = ENTR_ZORAS_RIVER_WEST_EXIT; + break; + case TEXT_KF_SHOP_SIGN: + entrance = ENTR_KOKIRI_SHOP_0; + break; + case TEXT_LINKS_HOUSE_SIGN: + entrance = ENTR_LINKS_HOUSE_1; + break; + case TEXT_KOKIRI_EXIT_SIGN: + entrance = ENTR_LOST_WOODS_BRIDGE_WEST_EXIT; + break; + case TEXT_ZD_SIGN: + if (gPlayState->sceneNum == SCENE_ZORAS_DOMAIN) { + entrance = ENTR_ZORAS_RIVER_WATERFALL_EXIT; + } else { + entrance = ENTR_ZORAS_DOMAIN_KING_ZORA_EXIT; + } + break; + case TEXT_ZF_JABU_SIGN: + entrance = ENTR_JABU_JABU_ENTRANCE; + break; + case TEXT_KF_LW: + entrance = ENTR_LOST_WOODS_SOUTH_EXIT; + break; + case TEXT_HF_LON_LON: + entrance = ENTR_LON_LON_RANCH_ENTRANCE; + break; + case TEXT_LA_SIGN: + entrance = ENTR_LAKE_HYLIA_NORTH_EXIT; + break; + case TEXT_LA_LAB: + entrance = ENTR_LAKESIDE_LABORATORY_0; + break; + case TEXT_GV_SIGN: + if (gPlayState->sceneNum == SCENE_HYRULE_FIELD) { + entrance = ENTR_GERUDO_VALLEY_EAST_EXIT; + } else { + entrance = ENTR_GERUDO_VALLEY_WEST_EXIT; + } + break; + case TEXT_ZD_SHOP_SIGN: + entrance = ENTR_ZORA_SHOP_0; + break; + case TEXT_OUTSIDE_KOKIRI_SIGN: + entrance = ENTR_MARKET_ENTRANCE_OUTSIDE_GUARD_HOUSE; + break; + case TEXT_OUTSIDE_MARKET_SIGN: + entrance = ENTR_LON_LON_RANCH_ENTRANCE; + break; + case TEXT_MIDO_HOUSE_SIGN: + entrance = ENTR_MIDOS_HOUSE_0; + break; + case TEXT_KNOW_IT_ALL_HOUSE: + entrance = ENTR_KNOW_IT_ALL_BROS_HOUSE_0; + break; + case TEXT_TWINS_HOUSE_SIGN: + entrance = ENTR_TWINS_HOUSE_0; + break; + case TEXT_SARIAS_HOUSE_SIGN: + entrance = ENTR_SARIAS_HOUSE_0; + break; + case TEXT_NO_DIVING_SIGN: + entrance = ENTR_LAKE_HYLIA_RIVER_EXIT; + break; + } + if (entrance != -1) { + auto data = GetEntranceData(Entrance_GetOverride(entrance)); + if (data != nullptr) { + font->charTexBuf[0] = (TEXTBOX_TYPE_WOODEN << 4) | TEXTBOX_POS_BOTTOM; + return msgCtx->msgLength = font->msgLength = SohUtils::CopyStringToCharBuffer( + buffer, data->destination + CustomMessage::MESSAGE_END(), maxBufferSize); + } + } + } + bool nonBeanMerchants = ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL); Player* player = GET_PLAYER(play); @@ -2329,7 +2454,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { } else { messageEntry = ctx->GetHint(stoneHint)->GetHintMessage(MF_AUTO_FORMAT); } - } else if ((textId == TEXT_ALTAR_CHILD || textId == TEXT_ALTAR_ADULT)) { + } else if (textId == TEXT_ALTAR_CHILD || textId == TEXT_ALTAR_ADULT) { // rando hints at altar messageEntry = (LINK_IS_ADULT) ? ctx->GetHint(RH_ALTAR_ADULT)->GetHintMessage(MF_AUTO_FORMAT) : ctx->GetHint(RH_ALTAR_CHILD)->GetHintMessage(MF_AUTO_FORMAT); diff --git a/soh/src/code/z_message_PAL.c b/soh/src/code/z_message_PAL.c index fc63f96c8..6c357c612 100644 --- a/soh/src/code/z_message_PAL.c +++ b/soh/src/code/z_message_PAL.c @@ -2782,7 +2782,6 @@ void Message_OpenText(PlayState* play, u16 textId) { gSaveContext.eventInf[0] = gSaveContext.eventInf[1] = gSaveContext.eventInf[2] = gSaveContext.eventInf[3] = 0; } - // RANDOTODO: Use this for ice trap messages if (CustomMessage_RetrieveIfExists(play)) { osSyncPrintf("Found custom message"); if (gSaveContext.language == LANGUAGE_JPN) { From a6c615502c233bcd8f5284512a355f31d3552f36 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Fri, 11 Apr 2025 13:29:00 +0000 Subject: [PATCH 2/8] update entrance tracker with hint --- soh/soh/OTRGlobals.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 8b80b54d9..89e3eaef8 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2372,6 +2372,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { if (entrance != -1) { auto data = GetEntranceData(Entrance_GetOverride(entrance)); if (data != nullptr) { + Entrance_SetEntranceDiscovered(entrance, false); font->charTexBuf[0] = (TEXTBOX_TYPE_WOODEN << 4) | TEXTBOX_POS_BOTTOM; return msgCtx->msgLength = font->msgLength = SohUtils::CopyStringToCharBuffer( buffer, data->destination + CustomMessage::MESSAGE_END(), maxBufferSize); From 65c3e16b7f06f36f48e7822d3839897e12d2eb47 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sat, 24 May 2025 02:19:57 +0000 Subject: [PATCH 3/8] show sign hints when any entrances shuffled --- soh/soh/OTRGlobals.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 89e3eaef8..7210b1f30 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2256,7 +2256,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { s16 actorParams = 0; if (IS_RANDO) { auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES)) { + if (ctx->GetOption(RSK_SHUFFLE_ENTRANCES)) { s16 entrance = -1; switch (textId) { case TEXT_WATERFALL: From 48677acaf4707f2b662dd513cef9314ed2430165 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sat, 24 May 2025 03:44:41 +0000 Subject: [PATCH 4/8] only hint when entrance shuffled --- .../randomizer_entrance_tracker.cpp | 6 +++--- soh/soh/OTRGlobals.cpp | 21 ++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp index 1a635f58e..719758b03 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp @@ -739,7 +739,7 @@ void EntranceTrackerSettingsWindow::DrawElement() { ImGui::BeginDisabled(CVarGetInteger(CVAR_SETTING("DisableChanges"), 0)); UIWidgets::CVarCheckbox( "Show Source", CVAR_TRACKER_ENTRANCE("ShowFrom"), - UIWidgets::CheckboxOptions().Tooltip("Reveal the sourcefor undiscovered entrances").Color(THEME_COLOR)); + UIWidgets::CheckboxOptions().Tooltip("Reveal the source for undiscovered entrances").Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Show Destination", CVAR_TRACKER_ENTRANCE("ShowTo"), UIWidgets::CheckboxOptions() .Tooltip("Reveal the destination for undiscovered entrances") @@ -836,7 +836,7 @@ void EntranceTrackerWindow::DrawElement() { ImGui::BeginChild("ChildEntranceTrackerLocations", ImVec2(0, -8)); bool showTo = CVarGetInteger(CVAR_TRACKER_ENTRANCE("ShowTo"), 0); bool showFrom = CVarGetInteger(CVAR_TRACKER_ENTRANCE("ShowFrom"), 0); - bool collapsUndiscovered = CVarGetInteger(CVAR_TRACKER_ENTRANCE("CollapseUndiscovered"), 0); + bool collapseUndiscovered = CVarGetInteger(CVAR_TRACKER_ENTRANCE("CollapseUndiscovered"), 0); bool highlightPrevious = CVarGetInteger(CVAR_TRACKER_ENTRANCE("HighlightPrevious"), 0); bool highlightAvailable = CVarGetInteger(CVAR_TRACKER_ENTRANCE("HighlightAvailable"), 0); bool hideReverse = CVarGetInteger(CVAR_TRACKER_ENTRANCE("HideReverseEntrances"), 1); @@ -892,7 +892,7 @@ void EntranceTrackerWindow::DrawElement() { const char* rplcDstName = showOverride ? override->destination.c_str() : ""; // Filter for entrances by group name, type, source/destination names, and meta tags - if ((!locationSearch.IsActive() && (showOriginal || showOverride || !collapsUndiscovered)) || + if ((!locationSearch.IsActive() && (showOriginal || showOverride || !collapseUndiscovered)) || ((showOriginal && (locationSearch.PassFilter(origSrcName) || locationSearch.PassFilter(origSrcAreaName) || locationSearch.PassFilter(origTypeName) || locationSearch.PassFilter(original->metaTag.c_str()))) || diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 7210b1f30..e44e8c07b 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2294,7 +2294,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { entrance = ENTR_DEATH_MOUNTAIN_TRAIL_BOTTOM_EXIT; break; case TEXT_DMT_DC: - entrance = ENTR_DEATH_MOUNTAIN_CRATER_UPPER_EXIT; + entrance = ENTR_DEATH_MOUNTAIN_TRAIL_OUTSIDE_DODONGOS_CAVERN; break; case TEXT_GC_SIGN: if (gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_TRAIL) { @@ -2370,12 +2370,19 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { break; } if (entrance != -1) { - auto data = GetEntranceData(Entrance_GetOverride(entrance)); - if (data != nullptr) { - Entrance_SetEntranceDiscovered(entrance, false); - font->charTexBuf[0] = (TEXTBOX_TYPE_WOODEN << 4) | TEXTBOX_POS_BOTTOM; - return msgCtx->msgLength = font->msgLength = SohUtils::CopyStringToCharBuffer( - buffer, data->destination + CustomMessage::MESSAGE_END(), maxBufferSize); + auto entranceCtx = ctx->GetEntranceShuffler(); + for (size_t i = 0; i < ENTRANCE_OVERRIDES_MAX_COUNT; i++) { + if (Entrance_EntranceIsNull(&entranceCtx->entranceOverrides[i])) { + break; + } + if (entranceCtx->entranceOverrides[i].index == entrance) { + s16 overrideIndex = entranceCtx->entranceOverrides[i].override; + Entrance_SetEntranceDiscovered(entrance, false); + auto data = GetEntranceData(overrideIndex); + font->charTexBuf[0] = (TEXTBOX_TYPE_WOODEN << 4) | TEXTBOX_POS_BOTTOM; + return msgCtx->msgLength = font->msgLength = SohUtils::CopyStringToCharBuffer( + buffer, data->source + CustomMessage::MESSAGE_END(), maxBufferSize); + } } } } From c946502b12ac1f07cf5c2949309c13e4cb876a9f Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Mon, 30 Jun 2025 00:21:22 +0000 Subject: [PATCH 5/8] avoid crash when loading rando file --- soh/soh/Enhancements/randomizer/3drando/fill.cpp | 1 - soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 2ac5a3592..579fd4179 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -9,7 +9,6 @@ #include "hints.hpp" #include "shops.hpp" #include "pool_functions.hpp" -//#include "debug.hpp" #include "soh/Enhancements/randomizer/static_data.h" #include "soh/Enhancements/debugger/performanceTimer.h" diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index d6334b6a0..34ba27d9a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -2017,6 +2017,7 @@ void RecalculateAvailableChecks(RandomizerRegion startingRegion /* = RR_ROOT */) StartPerformanceTimer(PT_RECALCULATE_AVAILABLE_CHECKS); const auto& ctx = Rando::Context::GetInstance(); + logic = ctx->GetLogic(); std::vector targetLocations; targetLocations.reserve(RC_MAX); From c708517346d63089396c6cf4e66b2bbf156a944e Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Mon, 30 Jun 2025 02:35:57 +0000 Subject: [PATCH 6/8] fix kf exit --- soh/soh/Enhancements/randomizer/randomizer_grotto.c | 2 +- soh/soh/OTRGlobals.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizer_grotto.c b/soh/soh/Enhancements/randomizer/randomizer_grotto.c index 042efadf4..96105728a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_grotto.c +++ b/soh/soh/Enhancements/randomizer/randomizer_grotto.c @@ -184,7 +184,7 @@ s16 Grotto_GetEntranceValueHandlingGrottoRando(s16 nextEntranceIndex) { } // Translates and overrides the passed in entrance index if it corresponds to a -// special grotto entrance (grotto load or returnpoint) and updates player respawn data correctly. +// special grotto entrance (grotto load or return point) and updates player respawn data correctly. s16 Grotto_OverrideSpecialEntrance(s16 nextEntranceIndex) { // Don't change anything unless grotto shuffle has been enabled diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index e44e8c07b..620e473af 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2313,7 +2313,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { entrance = ENTR_LINKS_HOUSE_1; break; case TEXT_KOKIRI_EXIT_SIGN: - entrance = ENTR_LOST_WOODS_BRIDGE_WEST_EXIT; + entrance = ENTR_LOST_WOODS_BRIDGE_EAST_EXIT; break; case TEXT_ZD_SIGN: if (gPlayState->sceneNum == SCENE_ZORAS_DOMAIN) { From 3e8c60fd8ced8178ae583aef87da3415db5cfe90 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Thu, 3 Jul 2025 03:31:48 +0000 Subject: [PATCH 7/8] correct hint from sign outside kokiri forest --- soh/soh/OTRGlobals.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 620e473af..795b335d2 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2348,7 +2348,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { entrance = ENTR_ZORA_SHOP_0; break; case TEXT_OUTSIDE_KOKIRI_SIGN: - entrance = ENTR_MARKET_ENTRANCE_OUTSIDE_GUARD_HOUSE; + entrance = ENTR_MARKET_ENTRANCE_NEAR_GUARD_EXIT; break; case TEXT_OUTSIDE_MARKET_SIGN: entrance = ENTR_LON_LON_RANCH_ENTRANCE; From 777f6a376f9c58b6ebc0f47bcbf98b75e6b7b617 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Thu, 3 Jul 2025 05:58:27 +0000 Subject: [PATCH 8/8] 3 signs on DMT --- soh/soh/Enhancements/custom-message/CustomMessageTypes.h | 2 ++ soh/soh/OTRGlobals.cpp | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h index ada40d730..d3037164e 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h +++ b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h @@ -88,6 +88,7 @@ typedef enum { TEXT_KAK_GY = 0x0306, TEXT_KAK_WELL = 0x0307, TEXT_KAK_DMT = 0x0308, + TEXT_DMT_DMT = 0x309, TEXT_DMT_DC = 0x030A, TEXT_GC_SIGN = 0x030B, TEXT_HF_ZR = 0x030C, @@ -103,6 +104,7 @@ typedef enum { TEXT_LINKS_HOUSE_SIGN = 0x031F, TEXT_KOKIRI_EXIT_SIGN = 0x0320, TEXT_DMT_DMC = 0x0323, + TEXT_DMT_SUMMIT = 0x032D, TEXT_ZD_SHOP_SIGN = 0x0333, TEXT_OUTSIDE_KOKIRI_SIGN = 0x0339, TEXT_OUTSIDE_MARKET_SIGN = 0x033A, diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 795b335d2..6c5129fe2 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2293,6 +2293,9 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { case TEXT_KAK_DMT: entrance = ENTR_DEATH_MOUNTAIN_TRAIL_BOTTOM_EXIT; break; + case TEXT_DMT_DMT: + entrance = ENTR_GROTTOS_13; + break; case TEXT_DMT_DC: entrance = ENTR_DEATH_MOUNTAIN_TRAIL_OUTSIDE_DODONGOS_CAVERN; break; @@ -2303,6 +2306,12 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { entrance = ENTR_GORON_CITY_DARUNIA_ROOM_EXIT; } break; + case TEXT_DMT_DMC: + entrance = ENTR_DEATH_MOUNTAIN_CRATER_UPPER_EXIT; + break; + case TEXT_DMT_SUMMIT: + entrance = ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_DMT; + break; case TEXT_HF_ZR: entrance = ENTR_ZORAS_RIVER_WEST_EXIT; break;