add OoT hint, sheik is crashing without hint due to an unrelated bug

This commit is contained in:
Pepper0ni 2024-05-13 23:10:57 +01:00
parent baf7691fbd
commit 29de006dbd
10 changed files with 28 additions and 4 deletions

View File

@ -504,6 +504,7 @@ const std::vector<const char*> randomizerCvars = {
CVAR_RANDOMIZER_SETTING("SariaHint"),
CVAR_RANDOMIZER_ENHANCEMENT("RandomizeRupeeNames"),
CVAR_RANDOMIZER_SETTING("FrogsHint"),
CVAR_RANDOMIZER_SETTING("OoTHint"),
CVAR_RANDOMIZER_ENHANCEMENT("RandoRelevantNavi"),
CVAR_RANDOMIZER_ENHANCEMENT("QuestItemFanfares"),
};

View File

@ -2856,6 +2856,9 @@ void StaticData::HintTable_Init() {
/*french*/ "Des grenouilles se trouvant sous l'eau vous fixent attentivement, tenant fermement #[[1]]#.",
{QM_GREEN}));
hintTextTable[RHT_OOT_HINT] = HintText(CustomMessage("@! Remember to gather the #Spiritual Stones# so you can recieve #[[1]]# from Zelda in the past and learn #[[2]]#!",
{QM_BLUE, QM_GREEN, QM_GREEN}));
hintTextTable[RHT_SKULLS_HINT] = HintText(CustomMessage("Yeaaarrgh! I'm cursed!!^Please save me by destroying #[[d]] Spiders of the Curse# and I will give you my #[[1]]#!",
/*german*/ "Yeaaarrgh! Ich bin verflucht!^Bitte rette mich, indem du #[[d]] Skulltulas# zerstörst und ich werde dir dafür #[[1]]# geben!",
/*french*/ "Yeaaarrgh! Je suis maudit!^Détruit encore #[[d]] Araignées de la Malédiction# et j'aurai quelque chose à te donner! #([[1]])#",

View File

@ -279,7 +279,10 @@ std::vector<std::pair<RandomizerCheck, std::function<bool()>>> conditionalAlways
auto ctx = Rando::Context::GetInstance();
return !ctx->GetOption(RSK_COMPLETE_MASK_QUEST);
}),
std::make_pair(RC_SONG_FROM_OCARINA_OF_TIME, []() { return StonesRequiredBySettings() < 2; }),
std::make_pair(RC_SONG_FROM_OCARINA_OF_TIME, []() {
auto ctx = Rando::Context::GetInstance();
return StonesRequiredBySettings() < 2 && !ctx->GetOption(RSK_OOT_HINT);
}),
std::make_pair(RC_HF_OCARINA_OF_TIME_ITEM, []() { return StonesRequiredBySettings() < 2; }),
std::make_pair(RC_SHEIK_IN_KAKARIKO, []() { return MedallionsRequiredBySettings() < 5; }),
std::make_pair(RC_DMT_TRADE_CLAIM_CHECK, []() {

View File

@ -53,6 +53,7 @@ void AreaTable_Init_CastleTown() {
LocationAccess(RC_TOT_LIGHT_ARROWS_CUTSCENE, {[]{return logic->IsAdult && logic->CanTriggerLACS;}}),
LocationAccess(RC_ALTAR_HINT_CHILD, {[]{return logic->IsChild;}}),
LocationAccess(RC_ALTAR_HINT_ADULT, {[]{return logic->IsAdult;}}),
LocationAccess(RC_TOT_SHEIK_HINT, {[]{return logic->IsAdult;}}),
}, {
//Exits
Entrance(RR_TOT_ENTRANCE, {[]{return true;}}),

View File

@ -558,7 +558,8 @@ std::vector<RandomizerCheck> Rando::StaticData::staticHintLocations = {
RC_SARIA_SONG_HINT,
RC_ALTAR_HINT_CHILD,
RC_ALTAR_HINT_ADULT,
RC_FISHING_POLE_HINT
RC_FISHING_POLE_HINT,
RC_TOT_SHEIK_HINT,
};
std::vector<RandomizerCheck> Rando::StaticData::pondFishLocations = {
@ -1564,7 +1565,8 @@ void Rando::StaticData::InitLocationTable() { //
locationTable[RC_ALTAR_HINT_CHILD] = Location::OtherHint(RC_ALTAR_HINT_CHILD, RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, "ToT Child Altar Hint");
locationTable[RC_ALTAR_HINT_ADULT] = Location::OtherHint(RC_ALTAR_HINT_ADULT, RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, "ToT Adult Altar Hint");
locationTable[RC_FISHING_POLE_HINT] = Location::OtherHint(RC_FISHING_POLE_HINT, RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, "Fishing Pole Hint");
locationTable[RC_TOT_SHEIK_HINT] = Location::OtherHint(RC_TOT_SHEIK_HINT, RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_MARKET, ACTOR_EN_XC, SCENE_TEMPLE_OF_TIME, "Ocarina of Time Hint");
locationTable[RC_TRIFORCE_COMPLETED] = Location::Reward(RC_TRIFORCE_COMPLETED, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, 0x00, "Completed Triforce", "Completed Triforce", RHT_NONE, RG_NONE, {}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_NO_GROUP);
// clang-format on

View File

@ -516,6 +516,7 @@ void Settings::CreateOptionDescriptions() {
mOptionDescriptions[RSK_SARIA_HINT] = "Talking to Saria either in person or through Saria's Song will tell you the "
"location of a progressive magic meter.";
mOptionDescriptions[RSK_FISHING_POLE_HINT] = "Talking to the fishing pond owner without the fishing pole will tell you its location.";
mOptionDescriptions[RSK_OOT_HINT] = "Sheik in the Temple of Time will tell you the item and song on the Ocarina of Time.";
mOptionDescriptions[RSK_FROGS_HINT] = "Standing near the pedestal for the frogs in Zora's River will tell you the "
"reward for the frogs' ocarina game.";
mOptionDescriptions[RSK_BIGGORON_HINT] = "Talking to Biggoron will tell you the item he will give you in exchange for the Claim Check.";

View File

@ -2396,7 +2396,9 @@ CustomMessage Randomizer::GetSheikMessage(s16 scene, u16 originalTextId) {
CustomMessage messageEntry;
switch (scene) {
case SCENE_TEMPLE_OF_TIME:
if (!CHECK_DUNGEON_ITEM(DUNGEON_KEY_BOSS, SCENE_GANONS_TOWER)) {
if (ctx->GetOption(RSK_OOT_HINT) && !ctx->GetItemLocation(RC_SONG_FROM_OCARINA_OF_TIME)->HasObtained()){
messageEntry = ctx->GetHint(RH_OOT_HINT)->GetHintMessage(MF_AUTO_FORMAT);
} else if (!CHECK_DUNGEON_ITEM(DUNGEON_KEY_BOSS, SCENE_GANONS_TOWER)) {
messageEntry = CustomMessage(
"@,&meet me at %gGanon's Castle%w&once you obtain the %rkey to his lair%w.",
"@, wir treffen uns bei %gGanons Schloß%w,&sobald Du den %rSchlüssel zu&seinem Verließ%w hast.",

View File

@ -1489,6 +1489,7 @@ typedef enum {
RC_ALTAR_HINT_CHILD,
RC_ALTAR_HINT_ADULT,
RC_FISHING_POLE_HINT,
RC_TOT_SHEIK_HINT,
RC_DMC_UPPER_GROTTO_FISH,
RC_DMT_STORMS_GROTTO_FISH,
RC_HF_SOUTHEAST_GROTTO_FISH,
@ -2080,6 +2081,7 @@ typedef enum {
RH_BIG_POES_HINT,
RH_BIGGORON_HINT,
RH_FROGS_HINT,
RH_OOT_HINT,
RH_KAK_10_SKULLS_HINT,
RH_KAK_20_SKULLS_HINT,
RH_KAK_30_SKULLS_HINT,
@ -3446,6 +3448,7 @@ typedef enum {
RHT_BIG_POES_HINT,
RHT_BIGGORON_HINT,
RHT_FROGS_HINT,
RHT_OOT_HINT,
RHT_SKULLS_HINT,
// Ganon Line
RHT_GANON_JOKE01,
@ -3601,6 +3604,7 @@ typedef enum {
RSK_GREG_HINT,
RSK_SARIA_HINT,
RSK_FROGS_HINT,
RSK_OOT_HINT,
RSK_KAK_10_SKULLS_HINT,
RSK_KAK_20_SKULLS_HINT,
RSK_KAK_30_SKULLS_HINT,

View File

@ -164,6 +164,7 @@ void Settings::CreateOptions() {
mOptions[RSK_SARIA_HINT] = Option::Bool("Saria's Hint", CVAR_RANDOMIZER_SETTING("SariaHint"), mOptionDescriptions[RSK_SARIA_HINT], IMFLAG_NONE);
mOptions[RSK_FISHING_POLE_HINT] = Option::Bool("Fishing Pole Hint", CVAR_RANDOMIZER_SETTING("FishingPoleHint"), mOptionDescriptions[RSK_FISHING_POLE_HINT], IMFLAG_NONE);
mOptions[RSK_FROGS_HINT] = Option::Bool("Frog Ocarina Game Hint", CVAR_RANDOMIZER_SETTING("FrogsHint"), mOptionDescriptions[RSK_FROGS_HINT], IMFLAG_NONE);
mOptions[RSK_OOT_HINT] = Option::Bool("Ocarina of Time Hint", CVAR_RANDOMIZER_SETTING("OoTHint"), mOptionDescriptions[RSK_OOT_HINT], IMFLAG_NONE);
mOptions[RSK_BIGGORON_HINT] = Option::Bool("Biggoron's Hint", CVAR_RANDOMIZER_SETTING("BiggoronHint"), mOptionDescriptions[RSK_BIGGORON_HINT], IMFLAG_NONE);
mOptions[RSK_BIG_POES_HINT] = Option::Bool("Big Poes Hint", CVAR_RANDOMIZER_SETTING("BigPoesHint"), mOptionDescriptions[RSK_BIG_POES_HINT], IMFLAG_NONE);
mOptions[RSK_CHICKENS_HINT] = Option::Bool("Chickens Hint", CVAR_RANDOMIZER_SETTING("ChickensHint"), mOptionDescriptions[RSK_CHICKENS_HINT], IMFLAG_NONE);
@ -732,6 +733,7 @@ void Settings::CreateOptions() {
&mOptions[RSK_GREG_HINT],
&mOptions[RSK_SARIA_HINT],
&mOptions[RSK_FROGS_HINT],
&mOptions[RSK_OOT_HINT],
&mOptions[RSK_BIGGORON_HINT],
&mOptions[RSK_BIG_POES_HINT],
&mOptions[RSK_CHICKENS_HINT],
@ -962,6 +964,7 @@ void Settings::CreateOptions() {
&mOptions[RSK_GREG_HINT],
&mOptions[RSK_SARIA_HINT],
&mOptions[RSK_FROGS_HINT],
&mOptions[RSK_OOT_HINT],
&mOptions[RSK_WARP_SONG_HINTS],
&mOptions[RSK_BIGGORON_HINT],
&mOptions[RSK_BIG_POES_HINT],
@ -1180,6 +1183,7 @@ void Settings::CreateOptions() {
{ "Miscellaneous Settings:Greg the Rupee Hint", RSK_GREG_HINT },
{ "Miscellaneous Settings:Saria's Hint", RSK_SARIA_HINT },
{ "Miscellaneous Settings:Frog Ocarina Game Hint", RSK_FROGS_HINT },
{ "Miscellaneous Settings:Ocarina of Time Hint", RSK_OOT_HINT },
{ "Miscellaneous Settings:10 GS Hint", RSK_KAK_10_SKULLS_HINT },
{ "Miscellaneous Settings:20 GS Hint", RSK_KAK_20_SKULLS_HINT },
{ "Miscellaneous Settings:30 GS Hint", RSK_KAK_30_SKULLS_HINT },
@ -2288,6 +2292,7 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) {
case RSK_GREG_HINT:
case RSK_SARIA_HINT:
case RSK_FROGS_HINT:
case RSK_OOT_HINT:
case RSK_KAK_10_SKULLS_HINT:
case RSK_KAK_20_SKULLS_HINT:
case RSK_KAK_30_SKULLS_HINT:

View File

@ -88,6 +88,7 @@ std::unordered_map<uint32_t, CustomMessage> StaticData::hintNames = {
{RH_BIG_POES_HINT, CustomMessage("Big Poe Reward Hint")},
{RH_BIGGORON_HINT, CustomMessage("Biggoron Claim Check Hint")},
{RH_FROGS_HINT, CustomMessage("Final Frogs in River Hint")},
{RH_OOT_HINT, CustomMessage("Sheik in Temple of Time Hint")},
{RH_KAK_10_SKULLS_HINT, CustomMessage("10 Skulls Hint")},
{RH_KAK_20_SKULLS_HINT, CustomMessage("20 Skulls Hint")},
{RH_KAK_30_SKULLS_HINT, CustomMessage("30 Skulls Hint")},
@ -208,6 +209,7 @@ std::unordered_map<RandomizerHint, StaticHintInfo> StaticData::staticHintInfoMap
{RH_CHICKENS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_CHICKENS_HINT}, RSK_CHICKENS_HINT, true, {RC_KAK_ANJU_AS_CHILD})},
{RH_BIGGORON_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_BIGGORON_HINT}, RSK_BIGGORON_HINT, true, {RC_DMT_TRADE_CLAIM_CHECK})},
{RH_FROGS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_FROGS_HINT}, RSK_FROGS_HINT, true, {RC_ZR_FROGS_OCARINA_GAME})},
{RH_OOT_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_OOT_HINT}, RSK_OOT_HINT, true, {RC_HF_OCARINA_OF_TIME_ITEM, RC_SONG_FROM_OCARINA_OF_TIME}, {}, {RC_TOT_SHEIK_HINT})},
{RH_KAK_10_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_10_SKULLS_HINT, true, {RC_KAK_10_GOLD_SKULLTULA_REWARD}, {}, {}, false, 10)},
{RH_KAK_20_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_20_SKULLS_HINT, true, {RC_KAK_20_GOLD_SKULLTULA_REWARD}, {}, {}, false, 20)},
{RH_KAK_30_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_30_SKULLS_HINT, true, {RC_KAK_30_GOLD_SKULLTULA_REWARD}, {}, {}, false, 30)},