Add option for Navi to hint location of boss key at boss doors (#6058)
This commit is contained in:
@@ -78,6 +78,7 @@ typedef enum {
|
|||||||
TEXT_SARIAS_SONG_IMPRISON_GANONDORF = 0x016C,
|
TEXT_SARIAS_SONG_IMPRISON_GANONDORF = 0x016C,
|
||||||
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_NEED_SPECIAL_KEY = 0x0204,
|
||||||
TEXT_MASK_SHOP_SIGN = 0x0207,
|
TEXT_MASK_SHOP_SIGN = 0x0207,
|
||||||
TEXT_WATERFALL = 0x022D,
|
TEXT_WATERFALL = 0x022D,
|
||||||
TEXT_FROGS_UNDERWATER = 0x022E,
|
TEXT_FROGS_UNDERWATER = 0x022E,
|
||||||
|
|||||||
@@ -2237,6 +2237,11 @@ void StaticData::HintTable_Init() {
|
|||||||
/*french*/ "J'ai entendu dire que Ganondorf aurait caché les #Flèches de Lumière# dans #[[1]]#.",
|
/*french*/ "J'ai entendu dire que Ganondorf aurait caché les #Flèches de Lumière# dans #[[1]]#.",
|
||||||
{QM_YELLOW, QM_RED}));
|
{QM_YELLOW, QM_RED}));
|
||||||
|
|
||||||
|
hintTextTable[RHT_BOSS_KEY_HINT] = HintText(CustomMessage("The #boss key# for this door is in #[[1]]#!",
|
||||||
|
/*german*/ TODO_TRANSLATE,
|
||||||
|
/*french*/ TODO_TRANSLATE,
|
||||||
|
{QM_GREEN, QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_DAMPE_DIARY] = HintText(CustomMessage("Whoever reads this, please enter #[[1]]#. I will let you have my #stretching, shrinking keepsake#.^I'm waiting for you.&--Dampé",
|
hintTextTable[RHT_DAMPE_DIARY] = HintText(CustomMessage("Whoever reads this, please enter #[[1]]#. I will let you have my #stretching, shrinking keepsake#.^I'm waiting for you.&--Dampé",
|
||||||
/*german*/ "Wer immer dies liest, der möge #[[1]]# nach meinem #langen, kurzen Schatz# suchen.^Ich warte!&Boris",
|
/*german*/ "Wer immer dies liest, der möge #[[1]]# nach meinem #langen, kurzen Schatz# suchen.^Ich warte!&Boris",
|
||||||
/*french*/ "Toi qui lit ce journal, rends-toi dans #[[1]]#. Et peut-être auras-tu droit à mon précieux #trésor#.^Je t'attends...&--Igor",
|
/*french*/ "Toi qui lit ce journal, rends-toi dans #[[1]]#. Et peut-être auras-tu droit à mon précieux #trésor#.^Je t'attends...&--Igor",
|
||||||
|
|||||||
@@ -223,10 +223,7 @@ size_t Hint::GetNumberOfMessages() const {
|
|||||||
if (StaticData::staticHintInfoMap.contains(ownKey)) {
|
if (StaticData::staticHintInfoMap.contains(ownKey)) {
|
||||||
numMessages = std::max(StaticData::staticHintInfoMap[ownKey].hintKeys.size(), numMessages);
|
numMessages = std::max(StaticData::staticHintInfoMap[ownKey].hintKeys.size(), numMessages);
|
||||||
}
|
}
|
||||||
if (numMessages == 0) {
|
return std::max(numMessages, (size_t)1);
|
||||||
numMessages = 1; // RANDOTODO make std::max actually fucking work for 3 arguments
|
|
||||||
}
|
|
||||||
return numMessages;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<std::string> Hint::GetAllMessageStrings(MessageFormat format) const {
|
const std::vector<std::string> Hint::GetAllMessageStrings(MessageFormat format) const {
|
||||||
@@ -251,7 +248,6 @@ const HintText Hint::GetHintText(size_t id) const {
|
|||||||
switch (hintType) {
|
switch (hintType) {
|
||||||
case HINT_TYPE_HINT_KEY:
|
case HINT_TYPE_HINT_KEY:
|
||||||
return StaticData::hintTextTable[0];
|
return StaticData::hintTextTable[0];
|
||||||
break;
|
|
||||||
case HINT_TYPE_TRIAL:
|
case HINT_TYPE_TRIAL:
|
||||||
if (ctx->GetTrial(trials[0])->IsRequired()) {
|
if (ctx->GetTrial(trials[0])->IsRequired()) {
|
||||||
return StaticData::hintTextTable[RHT_TRIAL_ON];
|
return StaticData::hintTextTable[RHT_TRIAL_ON];
|
||||||
|
|||||||
@@ -704,6 +704,7 @@ void Settings::CreateOptionDescriptions() {
|
|||||||
"Talking to the chest game owner after buying a key will tell you the location of Greg the Green Rupee.";
|
"Talking to the chest game owner after buying a key will tell you the location of Greg the Green Rupee.";
|
||||||
mOptionDescriptions[RSK_LOACH_HINT] = "Talking to the fishing pond owner and asking to talk about something will "
|
mOptionDescriptions[RSK_LOACH_HINT] = "Talking to the fishing pond owner and asking to talk about something will "
|
||||||
"tell you what's the reward for the Hyrule Loach.";
|
"tell you what's the reward for the Hyrule Loach.";
|
||||||
|
mOptionDescriptions[RSK_BOSS_KEY_HINT] = "Navi will tell where boss key can be found when prompted at boss door.";
|
||||||
mOptionDescriptions[RSK_SARIA_HINT] = "Talking to Saria either in person or through Saria's Song will tell you the "
|
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.";
|
"location of a progressive magic meter.";
|
||||||
mOptionDescriptions[RSK_MIDO_HINT] = "Talking to Mido as child will tell you the location of the Kokiri Sword.";
|
mOptionDescriptions[RSK_MIDO_HINT] = "Talking to Mido as child will tell you the location of the Kokiri Sword.";
|
||||||
|
|||||||
@@ -4547,6 +4547,12 @@ typedef enum {
|
|||||||
RH_GREG_RUPEE,
|
RH_GREG_RUPEE,
|
||||||
RH_ALTAR_CHILD,
|
RH_ALTAR_CHILD,
|
||||||
RH_ALTAR_ADULT,
|
RH_ALTAR_ADULT,
|
||||||
|
RH_FOREST_BOSS_KEY_HINT,
|
||||||
|
RH_FIRE_BOSS_KEY_HINT,
|
||||||
|
RH_WATER_BOSS_KEY_HINT,
|
||||||
|
RH_SPIRIT_BOSS_KEY_HINT,
|
||||||
|
RH_SHADOW_BOSS_KEY_HINT,
|
||||||
|
RH_GANONS_BOSS_KEY_HINT,
|
||||||
RH_SARIA_HINT,
|
RH_SARIA_HINT,
|
||||||
RH_MIDO_HINT,
|
RH_MIDO_HINT,
|
||||||
RH_LOACH_HINT,
|
RH_LOACH_HINT,
|
||||||
@@ -5813,6 +5819,7 @@ typedef enum {
|
|||||||
RHT_GANONDORF_HINT_MS_ONLY,
|
RHT_GANONDORF_HINT_MS_ONLY,
|
||||||
RHT_GANONDORF_HINT_LA_AND_MS,
|
RHT_GANONDORF_HINT_LA_AND_MS,
|
||||||
RHT_SHEIK_HINT_LA_ONLY,
|
RHT_SHEIK_HINT_LA_ONLY,
|
||||||
|
RHT_BOSS_KEY_HINT,
|
||||||
RHT_DAMPE_DIARY,
|
RHT_DAMPE_DIARY,
|
||||||
RHT_GREG_HINT,
|
RHT_GREG_HINT,
|
||||||
RHT_SARIA_TALK_HINT,
|
RHT_SARIA_TALK_HINT,
|
||||||
@@ -6282,6 +6289,7 @@ typedef enum {
|
|||||||
RSK_TOT_ALTAR_HINT,
|
RSK_TOT_ALTAR_HINT,
|
||||||
RSK_GANONDORF_HINT,
|
RSK_GANONDORF_HINT,
|
||||||
RSK_SHEIK_LA_HINT,
|
RSK_SHEIK_LA_HINT,
|
||||||
|
RSK_BOSS_KEY_HINT,
|
||||||
RSK_DAMPES_DIARY_HINT,
|
RSK_DAMPES_DIARY_HINT,
|
||||||
RSK_GREG_HINT,
|
RSK_GREG_HINT,
|
||||||
RSK_LOACH_HINT,
|
RSK_LOACH_HINT,
|
||||||
|
|||||||
@@ -1202,6 +1202,7 @@ void Settings::CreateOptions() {
|
|||||||
OPT_BOOL(RSK_TOT_ALTAR_HINT, "ToT Altar Hint", {"Off", "On"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("AltarHint"), mOptionDescriptions[RSK_TOT_ALTAR_HINT], WIDGET_CVAR_CHECKBOX, RO_GENERIC_ON, false, nullptr, IMFLAG_INDENT);
|
OPT_BOOL(RSK_TOT_ALTAR_HINT, "ToT Altar Hint", {"Off", "On"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("AltarHint"), mOptionDescriptions[RSK_TOT_ALTAR_HINT], WIDGET_CVAR_CHECKBOX, RO_GENERIC_ON, false, nullptr, IMFLAG_INDENT);
|
||||||
OPT_BOOL(RSK_GANONDORF_HINT, "Ganondorf Hint", {"Off", "On"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("GanondorfHint"), mOptionDescriptions[RSK_GANONDORF_HINT], WIDGET_CVAR_CHECKBOX, RO_GENERIC_ON, false, nullptr, IMFLAG_NONE);
|
OPT_BOOL(RSK_GANONDORF_HINT, "Ganondorf Hint", {"Off", "On"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("GanondorfHint"), mOptionDescriptions[RSK_GANONDORF_HINT], WIDGET_CVAR_CHECKBOX, RO_GENERIC_ON, false, nullptr, IMFLAG_NONE);
|
||||||
OPT_BOOL(RSK_SHEIK_LA_HINT, "Sheik Light Arrow Hint", {"Off", "On"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("SheikLAHint"), mOptionDescriptions[RSK_SHEIK_LA_HINT], WIDGET_CVAR_CHECKBOX, RO_GENERIC_ON, false, nullptr, IMFLAG_NONE);
|
OPT_BOOL(RSK_SHEIK_LA_HINT, "Sheik Light Arrow Hint", {"Off", "On"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("SheikLAHint"), mOptionDescriptions[RSK_SHEIK_LA_HINT], WIDGET_CVAR_CHECKBOX, RO_GENERIC_ON, false, nullptr, IMFLAG_NONE);
|
||||||
|
OPT_BOOL(RSK_BOSS_KEY_HINT, "Boss Door Hints", CVAR_RANDOMIZER_SETTING("BossKeyHint"), mOptionDescriptions[RSK_BOSS_KEY_HINT], IMFLAG_NONE);
|
||||||
OPT_BOOL(RSK_DAMPES_DIARY_HINT, "Dampe's Diary Hint", CVAR_RANDOMIZER_SETTING("DampeHint"), mOptionDescriptions[RSK_DAMPES_DIARY_HINT], IMFLAG_NONE);
|
OPT_BOOL(RSK_DAMPES_DIARY_HINT, "Dampe's Diary Hint", CVAR_RANDOMIZER_SETTING("DampeHint"), mOptionDescriptions[RSK_DAMPES_DIARY_HINT], IMFLAG_NONE);
|
||||||
OPT_BOOL(RSK_GREG_HINT, "Greg the Green Rupee Hint", CVAR_RANDOMIZER_SETTING("GregHint"), mOptionDescriptions[RSK_GREG_HINT], IMFLAG_NONE);
|
OPT_BOOL(RSK_GREG_HINT, "Greg the Green Rupee Hint", CVAR_RANDOMIZER_SETTING("GregHint"), mOptionDescriptions[RSK_GREG_HINT], IMFLAG_NONE);
|
||||||
OPT_BOOL(RSK_LOACH_HINT, "Hyrule Loach Hint", CVAR_RANDOMIZER_SETTING("LoachHint"), mOptionDescriptions[RSK_LOACH_HINT], IMFLAG_NONE);
|
OPT_BOOL(RSK_LOACH_HINT, "Hyrule Loach Hint", CVAR_RANDOMIZER_SETTING("LoachHint"), mOptionDescriptions[RSK_LOACH_HINT], IMFLAG_NONE);
|
||||||
@@ -2409,32 +2410,19 @@ void Settings::CreateOptions() {
|
|||||||
&mOptionGroups[RSG_MENU_SECTION_TRAPS] },
|
&mOptionGroups[RSG_MENU_SECTION_TRAPS] },
|
||||||
WidgetContainerType::COLUMN);
|
WidgetContainerType::COLUMN);
|
||||||
mOptionGroups[RSG_MENU_SECTION_STATIC_HINTS] = OptionGroup::SubGroup(
|
mOptionGroups[RSG_MENU_SECTION_STATIC_HINTS] = OptionGroup::SubGroup(
|
||||||
"Static Hints",
|
"Static Hints", { &mOptions[RSK_TOT_ALTAR_HINT], &mOptions[RSK_GANONDORF_HINT],
|
||||||
{ &mOptions[RSK_TOT_ALTAR_HINT],
|
&mOptions[RSK_SHEIK_LA_HINT], &mOptions[RSK_BOSS_KEY_HINT],
|
||||||
&mOptions[RSK_GANONDORF_HINT],
|
&mOptions[RSK_DAMPES_DIARY_HINT], &mOptions[RSK_GREG_HINT],
|
||||||
&mOptions[RSK_SHEIK_LA_HINT],
|
&mOptions[RSK_LOACH_HINT], &mOptions[RSK_SARIA_HINT],
|
||||||
&mOptions[RSK_DAMPES_DIARY_HINT],
|
&mOptions[RSK_MIDO_HINT], &mOptions[RSK_FROGS_HINT],
|
||||||
&mOptions[RSK_GREG_HINT],
|
&mOptions[RSK_OOT_HINT], &mOptions[RSK_BIGGORON_HINT],
|
||||||
&mOptions[RSK_LOACH_HINT],
|
&mOptions[RSK_BIG_POES_HINT], &mOptions[RSK_CHICKENS_HINT],
|
||||||
&mOptions[RSK_SARIA_HINT],
|
&mOptions[RSK_MALON_HINT], &mOptions[RSK_HBA_HINT],
|
||||||
&mOptions[RSK_MIDO_HINT],
|
&mOptions[RSK_FISHING_POLE_HINT], &mOptions[RSK_WARP_SONG_HINTS],
|
||||||
&mOptions[RSK_FROGS_HINT],
|
&mOptions[RSK_SCRUB_TEXT_HINT], &mOptions[RSK_MERCHANT_TEXT_HINT],
|
||||||
&mOptions[RSK_OOT_HINT],
|
&mOptions[RSK_KAK_10_SKULLS_HINT], &mOptions[RSK_KAK_20_SKULLS_HINT],
|
||||||
&mOptions[RSK_BIGGORON_HINT],
|
&mOptions[RSK_KAK_30_SKULLS_HINT], &mOptions[RSK_KAK_40_SKULLS_HINT],
|
||||||
&mOptions[RSK_BIG_POES_HINT],
|
&mOptions[RSK_KAK_50_SKULLS_HINT], &mOptions[RSK_KAK_100_SKULLS_HINT],
|
||||||
&mOptions[RSK_CHICKENS_HINT],
|
|
||||||
&mOptions[RSK_MALON_HINT],
|
|
||||||
&mOptions[RSK_HBA_HINT],
|
|
||||||
&mOptions[RSK_FISHING_POLE_HINT],
|
|
||||||
&mOptions[RSK_WARP_SONG_HINTS],
|
|
||||||
&mOptions[RSK_SCRUB_TEXT_HINT],
|
|
||||||
&mOptions[RSK_MERCHANT_TEXT_HINT],
|
|
||||||
&mOptions[RSK_KAK_10_SKULLS_HINT],
|
|
||||||
&mOptions[RSK_KAK_20_SKULLS_HINT],
|
|
||||||
&mOptions[RSK_KAK_30_SKULLS_HINT],
|
|
||||||
&mOptions[RSK_KAK_40_SKULLS_HINT],
|
|
||||||
&mOptions[RSK_KAK_50_SKULLS_HINT],
|
|
||||||
&mOptions[RSK_KAK_100_SKULLS_HINT],
|
|
||||||
&mOptions[RSK_MASK_SHOP_HINT] },
|
&mOptions[RSK_MASK_SHOP_HINT] },
|
||||||
WidgetContainerType::SECTION, "This setting adds some hints at locations other than Gossip Stones.");
|
WidgetContainerType::SECTION, "This setting adds some hints at locations other than Gossip Stones.");
|
||||||
mOptionGroups[RSG_MENU_COLUMN_STATIC_HINTS] =
|
mOptionGroups[RSG_MENU_COLUMN_STATIC_HINTS] =
|
||||||
@@ -2702,6 +2690,7 @@ void Settings::CreateOptions() {
|
|||||||
&mOptions[RSK_TOT_ALTAR_HINT],
|
&mOptions[RSK_TOT_ALTAR_HINT],
|
||||||
&mOptions[RSK_GANONDORF_HINT],
|
&mOptions[RSK_GANONDORF_HINT],
|
||||||
&mOptions[RSK_SHEIK_LA_HINT],
|
&mOptions[RSK_SHEIK_LA_HINT],
|
||||||
|
&mOptions[RSK_BOSS_KEY_HINT],
|
||||||
&mOptions[RSK_DAMPES_DIARY_HINT],
|
&mOptions[RSK_DAMPES_DIARY_HINT],
|
||||||
&mOptions[RSK_GREG_HINT],
|
&mOptions[RSK_GREG_HINT],
|
||||||
&mOptions[RSK_LOACH_HINT],
|
&mOptions[RSK_LOACH_HINT],
|
||||||
|
|||||||
@@ -70,6 +70,12 @@ std::unordered_map<uint32_t, CustomMessage> StaticData::hintNames = {
|
|||||||
{ RH_GREG_RUPEE, CustomMessage("Treasure Chest Game Greg Hint") },
|
{ RH_GREG_RUPEE, CustomMessage("Treasure Chest Game Greg Hint") },
|
||||||
{ RH_ALTAR_CHILD, CustomMessage("ToT Altar as Child") },
|
{ RH_ALTAR_CHILD, CustomMessage("ToT Altar as Child") },
|
||||||
{ RH_ALTAR_ADULT, CustomMessage("ToT Altar as Adult") },
|
{ RH_ALTAR_ADULT, CustomMessage("ToT Altar as Adult") },
|
||||||
|
{ RH_FOREST_BOSS_KEY_HINT, CustomMessage("Forest Temple Boss Key Hint") },
|
||||||
|
{ RH_FIRE_BOSS_KEY_HINT, CustomMessage("Fire Temple Boss Key Hint") },
|
||||||
|
{ RH_WATER_BOSS_KEY_HINT, CustomMessage("Water Temple Boss Key Hint") },
|
||||||
|
{ RH_SPIRIT_BOSS_KEY_HINT, CustomMessage("Spirit Temple Boss Key Hint") },
|
||||||
|
{ RH_SHADOW_BOSS_KEY_HINT, CustomMessage("Shadow Temple Boss Key Hint") },
|
||||||
|
{ RH_GANONS_BOSS_KEY_HINT, CustomMessage("Ganon's Boss Key Hint") },
|
||||||
{ RH_SARIA_HINT, CustomMessage("Saria's Magic Hint") },
|
{ RH_SARIA_HINT, CustomMessage("Saria's Magic Hint") },
|
||||||
{ RH_MIDO_HINT, CustomMessage("Mido's Kokiri Sword Hint") },
|
{ RH_MIDO_HINT, CustomMessage("Mido's Kokiri Sword Hint") },
|
||||||
{ RH_LOACH_HINT, CustomMessage("Loach Hint") },
|
{ RH_LOACH_HINT, CustomMessage("Loach Hint") },
|
||||||
@@ -192,6 +198,12 @@ std::unordered_map<RandomizerHint, StaticHintInfo> StaticData::staticHintInfoMap
|
|||||||
// warp song hints are special cased due to entrances not being done properly yet
|
// warp song hints are special cased due to entrances not being done properly yet
|
||||||
// Ganondorf Joke is special cased as the text is random
|
// Ganondorf Joke is special cased as the text is random
|
||||||
{RH_SHEIK_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SHEIK_HINT_LA_ONLY}, RSK_SHEIK_LA_HINT, true, {}, {RG_LIGHT_ARROWS}, {RC_SHEIK_HINT_GC, RC_SHEIK_HINT_MQ_GC}, true)},
|
{RH_SHEIK_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SHEIK_HINT_LA_ONLY}, RSK_SHEIK_LA_HINT, true, {}, {RG_LIGHT_ARROWS}, {RC_SHEIK_HINT_GC, RC_SHEIK_HINT_MQ_GC}, true)},
|
||||||
|
{RH_FOREST_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_FOREST_TEMPLE_BOSS_KEY}, {}, true)},
|
||||||
|
{RH_FIRE_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_FIRE_TEMPLE_BOSS_KEY}, {}, true)},
|
||||||
|
{RH_WATER_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_WATER_TEMPLE_BOSS_KEY}, {}, true)},
|
||||||
|
{RH_SPIRIT_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_SPIRIT_TEMPLE_BOSS_KEY}, {}, true)},
|
||||||
|
{RH_SHADOW_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_SHADOW_TEMPLE_BOSS_KEY}, {}, true)},
|
||||||
|
{RH_GANONS_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_GANONS_CASTLE_BOSS_KEY}, {}, true)},
|
||||||
{RH_DAMPES_DIARY, StaticHintInfo(HINT_TYPE_AREA, {RHT_DAMPE_DIARY}, RSK_DAMPES_DIARY_HINT, true, {}, {RG_PROGRESSIVE_HOOKSHOT}, {RC_DAMPE_HINT})},
|
{RH_DAMPES_DIARY, StaticHintInfo(HINT_TYPE_AREA, {RHT_DAMPE_DIARY}, RSK_DAMPES_DIARY_HINT, true, {}, {RG_PROGRESSIVE_HOOKSHOT}, {RC_DAMPE_HINT})},
|
||||||
{RH_GREG_RUPEE, StaticHintInfo(HINT_TYPE_AREA, {RHT_GREG_HINT}, RSK_GREG_HINT, true, {}, {RG_GREG_RUPEE}, {RC_GREG_HINT})},
|
{RH_GREG_RUPEE, StaticHintInfo(HINT_TYPE_AREA, {RHT_GREG_HINT}, RSK_GREG_HINT, true, {}, {RG_GREG_RUPEE}, {RC_GREG_HINT})},
|
||||||
{RH_SARIA_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SARIA_TALK_HINT, RHT_SARIA_SONG_HINT}, RSK_SARIA_HINT, true, {}, {RG_PROGRESSIVE_MAGIC_METER}, {RC_SARIA_SONG_HINT, RC_SONG_FROM_SARIA}, true)},
|
{RH_SARIA_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SARIA_TALK_HINT, RHT_SARIA_SONG_HINT}, RSK_SARIA_HINT, true, {}, {RG_PROGRESSIVE_MAGIC_METER}, {RC_SARIA_SONG_HINT, RC_SONG_FROM_SARIA}, true)},
|
||||||
@@ -211,8 +223,7 @@ std::unordered_map<RandomizerHint, StaticHintInfo> StaticData::staticHintInfoMap
|
|||||||
{RH_KAK_40_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_40_SKULLS_HINT, true, {RC_KAK_40_GOLD_SKULLTULA_REWARD}, {}, {}, false, 40)},
|
{RH_KAK_40_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_40_SKULLS_HINT, true, {RC_KAK_40_GOLD_SKULLTULA_REWARD}, {}, {}, false, 40)},
|
||||||
{RH_KAK_50_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_50_SKULLS_HINT, true, {RC_KAK_50_GOLD_SKULLTULA_REWARD}, {}, {}, false, 50)},
|
{RH_KAK_50_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_50_SKULLS_HINT, true, {RC_KAK_50_GOLD_SKULLTULA_REWARD}, {}, {}, false, 50)},
|
||||||
{RH_KAK_100_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_100_SKULLS_HINT, true, {RC_KAK_100_GOLD_SKULLTULA_REWARD}, {}, {}, false, 100)},
|
{RH_KAK_100_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_100_SKULLS_HINT, true, {RC_KAK_100_GOLD_SKULLTULA_REWARD}, {}, {}, false, 100)},
|
||||||
{RH_MASK_SHOP_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_MASK_SHOP_HINT}, RSK_MASK_SHOP_HINT, true, {RC_DEKU_THEATER_SKULL_MASK, RC_DEKU_THEATER_MASK_OF_TRUTH}, {}, {RC_MASK_SHOP_HINT})}
|
{RH_MASK_SHOP_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_MASK_SHOP_HINT}, RSK_MASK_SHOP_HINT, true, {RC_DEKU_THEATER_SKULL_MASK, RC_DEKU_THEATER_MASK_OF_TRUTH}, {}, {RC_MASK_SHOP_HINT})},
|
||||||
|
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2451,6 +2451,31 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
|||||||
messageEntry = Randomizer_GetCustomGetItemMessage(player);
|
messageEntry = Randomizer_GetCustomGetItemMessage(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (textId == TEXT_NEED_SPECIAL_KEY && ctx->GetOption(RSK_BOSS_KEY_HINT)) {
|
||||||
|
auto rh = RH_NONE;
|
||||||
|
switch (gPlayState->sceneNum) {
|
||||||
|
case SCENE_FOREST_TEMPLE:
|
||||||
|
rh = RH_FOREST_BOSS_KEY_HINT;
|
||||||
|
break;
|
||||||
|
case SCENE_FIRE_TEMPLE:
|
||||||
|
rh = RH_FIRE_BOSS_KEY_HINT;
|
||||||
|
break;
|
||||||
|
case SCENE_WATER_TEMPLE:
|
||||||
|
rh = RH_WATER_BOSS_KEY_HINT;
|
||||||
|
break;
|
||||||
|
case SCENE_SHADOW_TEMPLE:
|
||||||
|
rh = RH_SHADOW_BOSS_KEY_HINT;
|
||||||
|
break;
|
||||||
|
case SCENE_SPIRIT_TEMPLE:
|
||||||
|
rh = RH_SPIRIT_BOSS_KEY_HINT;
|
||||||
|
break;
|
||||||
|
case SCENE_GANONS_TOWER:
|
||||||
|
rh = RH_GANONS_BOSS_KEY_HINT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (rh != RH_NONE) {
|
||||||
|
messageEntry = ctx->GetHint(rh)->GetHintMessage(MF_AUTO_FORMAT);
|
||||||
|
}
|
||||||
} else if (textId == TEXT_RANDOMIZER_GOSSIP_STONE_HINTS &&
|
} else if (textId == TEXT_RANDOMIZER_GOSSIP_STONE_HINTS &&
|
||||||
Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) != RO_GOSSIP_STONES_NONE &&
|
Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) != RO_GOSSIP_STONES_NONE &&
|
||||||
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == RO_GOSSIP_STONES_NEED_NOTHING ||
|
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == RO_GOSSIP_STONES_NEED_NOTHING ||
|
||||||
|
|||||||
Reference in New Issue
Block a user