entrance shuffle: sign hints

This commit is contained in:
Demur Rumed 2025-03-30 16:27:12 +00:00
parent 237dcfec74
commit fedd5ac1c1
3 changed files with 156 additions and 2 deletions

View file

@ -79,8 +79,38 @@ typedef enum {
TEXT_SARIAS_SONG_CHANNELING_POWER = 0x016D, TEXT_SARIAS_SONG_CHANNELING_POWER = 0x016D,
TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI = 0x01B3, // 0x1yy for Navi msg range TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI = 0x01B3, // 0x1yy for Navi msg range
TEXT_MASK_SHOP_SIGN = 0x0207, TEXT_MASK_SHOP_SIGN = 0x0207,
TEXT_WATERFALL = 0x022D,
TEXT_FROGS_UNDERWATER = 0x022E, 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_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_LAKE_HYLIA_WATER_SWITCH_SIGN = 0x0346, // 0x3yy for cuttable sign range
TEXT_WARP_MINUET_OF_FOREST = 0x088D, TEXT_WARP_MINUET_OF_FOREST = 0x088D,
TEXT_WARP_BOLERO_OF_FIRE = 0x088E, TEXT_WARP_BOLERO_OF_FIRE = 0x088E,

View file

@ -26,6 +26,8 @@
#include "Enhancements/audio/AudioCollection.h" #include "Enhancements/audio/AudioCollection.h"
#include "Enhancements/enhancementTypes.h" #include "Enhancements/enhancementTypes.h"
#include "Enhancements/debugconsole.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.h"
#include "Enhancements/randomizer/randomizer_entrance_tracker.h" #include "Enhancements/randomizer/randomizer_entrance_tracker.h"
#include "Enhancements/randomizer/randomizer_item_tracker.h" #include "Enhancements/randomizer/randomizer_item_tracker.h"
@ -2254,6 +2256,129 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
s16 actorParams = 0; s16 actorParams = 0;
if (IS_RANDO) { if (IS_RANDO) {
auto ctx = Rando::Context::GetInstance(); 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) || bool nonBeanMerchants = ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) ||
ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL); ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL);
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
@ -2329,7 +2454,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
} else { } else {
messageEntry = ctx->GetHint(stoneHint)->GetHintMessage(MF_AUTO_FORMAT); 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 // rando hints at altar
messageEntry = (LINK_IS_ADULT) ? ctx->GetHint(RH_ALTAR_ADULT)->GetHintMessage(MF_AUTO_FORMAT) messageEntry = (LINK_IS_ADULT) ? ctx->GetHint(RH_ALTAR_ADULT)->GetHintMessage(MF_AUTO_FORMAT)
: ctx->GetHint(RH_ALTAR_CHILD)->GetHintMessage(MF_AUTO_FORMAT); : ctx->GetHint(RH_ALTAR_CHILD)->GetHintMessage(MF_AUTO_FORMAT);

View file

@ -2782,7 +2782,6 @@ void Message_OpenText(PlayState* play, u16 textId) {
gSaveContext.eventInf[0] = gSaveContext.eventInf[1] = gSaveContext.eventInf[2] = gSaveContext.eventInf[3] = 0; gSaveContext.eventInf[0] = gSaveContext.eventInf[1] = gSaveContext.eventInf[2] = gSaveContext.eventInf[3] = 0;
} }
// RANDOTODO: Use this for ice trap messages
if (CustomMessage_RetrieveIfExists(play)) { if (CustomMessage_RetrieveIfExists(play)) {
osSyncPrintf("Found custom message"); osSyncPrintf("Found custom message");
if (gSaveContext.language == LANGUAGE_JPN) { if (gSaveContext.language == LANGUAGE_JPN) {