Merge 23570e2963
into 67ee5f8d0e
This commit is contained in:
commit
223f0ee8d2
|
@ -136,7 +136,15 @@ typedef enum {
|
|||
TEXT_BEAN_SALESMAN_SOLD_OUT = 0x406B,
|
||||
TEXT_BEAN_SALESMAN_WANT_TO_PLANT = 0x406C,
|
||||
TEXT_FISHING_POND_START = 0x407B,
|
||||
TEXT_FISHING_TALK_ABOUT_SOMETHING = 0x4088,
|
||||
TEXT_FISHING_TRY_ANOTHER_LURE = 0x408D,
|
||||
TEXT_FISHING_SECRETS = 0x408E,
|
||||
TEXT_FISHING_GOOD_FISHERMAN = 0x408F,
|
||||
TEXT_FISHING_POND_START_MET = 0x4093,
|
||||
TEXT_FISHING_DIFFERENT_POND = 0x4094,
|
||||
TEXT_FISHING_SCRATCHING = 0x4095,
|
||||
TEXT_FISHING_CLOUDY = 0x4096,
|
||||
TEXT_FISHING_TRY_ANOTHER_LURE_WITH_SINKING_LURE = 0x40AF,
|
||||
TEXT_DAMPES_DIARY = 0x5003,
|
||||
TEXT_GRANNYS_SHOP = 0x500C,
|
||||
TEXT_ANJU_PLEASE_BRING_MY_CUCCOS_BACK = 0x5036,
|
||||
|
|
|
@ -523,6 +523,8 @@ const std::vector<FlagTable> flagTables = {
|
|||
{ RAND_INF_HAS_OCARINA_C_LEFT, "RAND_INF_HAS_OCARINA_C_LEFT"},
|
||||
{ RAND_INF_HAS_OCARINA_C_RIGHT, "RAND_INF_HAS_OCARINA_C_RIGHT"},
|
||||
|
||||
{ RAND_INF_CAUGHT_LOACH, "RAND_INF_CAUGHT_LOACH" },
|
||||
|
||||
{ RAND_INF_CAN_SWIM, "RAND_INF_CAN_SWIM" },
|
||||
|
||||
{ RAND_INF_HAS_WALLET, "RAND_INF_HAS_WALLET" },
|
||||
|
|
|
@ -281,15 +281,13 @@ void HintTable_Init_Exclude_Overworld() {
|
|||
});
|
||||
|
||||
// TODO: needs french translation
|
||||
hintTable[RHT_LH_HYRULE_LOACH] = HintText::Exclude(
|
||||
{
|
||||
// obscure text
|
||||
Text{ "#fishing the legend# bestows", /*french*/ "!!!", /*spanish*/ "#pescar a la leyenda# conduce a" },
|
||||
},
|
||||
{},
|
||||
// clear text
|
||||
Text{ "#fishing the hyrule loach# will give you", /*french*/ "!!!",
|
||||
/*spanish*/ "si #pescas a la Locha de Hyrule# encontrarás" });
|
||||
hintTable[RHT_LH_HYRULE_LOACH] = HintText::Exclude({
|
||||
// obscure text
|
||||
Text{"#fishing the legend# bestows", /*french*/"!!!", /*spanish*/"#pescar a la leyenda# conduce a"},
|
||||
{},
|
||||
// clear text
|
||||
Text{"#fishing the hyrule loach# will give you", /*french*/"!!!", /*spanish*/"si #pescas a la Locha de Hyrule# encontrarás"}
|
||||
});
|
||||
|
||||
|
||||
hintTable[RHT_LH_ADULT_FISHING] = HintText::Exclude({
|
||||
|
|
|
@ -832,6 +832,12 @@ void GenerateItemPool() {
|
|||
} else {
|
||||
PlaceVanillaOverworldFish();
|
||||
}
|
||||
|
||||
if (fsMode.Is(RO_FISHSANITY_HYRULE_LOACH)) {
|
||||
AddItemToMainPool(RG_PURPLE_RUPEE);
|
||||
} else {
|
||||
ctx->PlaceItemInLocation(RC_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, false, true);
|
||||
}
|
||||
} else {
|
||||
PlaceVanillaOverworldFish();
|
||||
}
|
||||
|
|
|
@ -202,6 +202,7 @@ void AreaTable_Init_HyruleField() {
|
|||
LocationAccess(RC_LH_ADULT_FISH_14, {[]{return logic->CanGetAdultFish;}}),
|
||||
LocationAccess(RC_LH_ADULT_FISH_15, {[]{return logic->CanGetAdultFish;}}),
|
||||
LocationAccess(RC_LH_ADULT_LOACH, {[]{return logic->CanGetAdultFish;}}),
|
||||
LocationAccess(RC_LH_HYRULE_LOACH, {[]{return logic->CanFish;}}),
|
||||
LocationAccess(RC_FISHING_POLE_HINT,{[]{return true;}}),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -155,6 +155,7 @@ std::vector<RandomizerCheck> Rando::StaticData::overworldLocations = {
|
|||
// Lake Hylia
|
||||
RC_LH_CHILD_FISHING,
|
||||
RC_LH_ADULT_FISHING,
|
||||
RC_LH_HYRULE_LOACH,
|
||||
RC_LH_LAB_DIVE,
|
||||
RC_LH_TRADE_FROG,
|
||||
RC_LH_UNDERWATER_ITEM,
|
||||
|
@ -634,6 +635,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||
// Lake Hylia
|
||||
locationTable[RC_LH_CHILD_FISHING] = Location::Base(RC_LH_CHILD_FISHING, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_FISHING_POND, 0x00, 0x3E, "Child Fishing", "LH Child Fishing", RHT_LH_CHILD_FISHING, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheck::RandomizerInf(SCENE_FISHING_POND, RAND_INF_CHILD_FISHING), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||
locationTable[RC_LH_ADULT_FISHING] = Location::Base(RC_LH_ADULT_FISHING, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_FISHING_POND, 0x00, 0x38, "Adult Fishing", "LH Adult Fishing", RHT_LH_ADULT_FISHING, RG_PROGRESSIVE_SCALE, {}, SpoilerCollectionCheck::RandomizerInf(SCENE_FISHING_POND, RAND_INF_ADULT_FISHING), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||
locationTable[RC_LH_HYRULE_LOACH] = Location::Base(RC_LH_HYRULE_LOACH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_FISHING_POND, 0x00, 0x00, "Hyrule Loach Reward", "LH Hyrule Loach Reward", RHT_LH_HYRULE_LOACH, RG_PROGRESSIVE_SCALE, {}, SpoilerCollectionCheck::RandomizerInf(SCENE_FISHING_POND, RAND_INF_CAUGHT_LOACH), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||
locationTable[RC_LH_LAB_DIVE] = Location::Base(RC_LH_LAB_DIVE, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_LAKESIDE_LABORATORY, 0x00, 0x3E, "Lab Dive", "LH Lab Dive", RHT_LH_LAB_DIVE, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheck::ItemGetInf(24), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||
locationTable[RC_LH_TRADE_FROG] = Location::Base(RC_LH_TRADE_FROG, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_LAKESIDE_LABORATORY, 0x00, 0x25, "Lab Trade Eyeball Frog", "LH Lab Trade Eyeball Frog", RHT_LH_TRADE_FROG, RG_EYEDROPS, { Category::cAdultTrade }, SpoilerCollectionCheck::RandomizerInf(0x38, 0x1F), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||
locationTable[RC_LH_UNDERWATER_ITEM] = Location::Base(RC_LH_UNDERWATER_ITEM, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, 0x15, "Underwater Item", "LH Underwater Item", RHT_LH_UNDERWATER_ITEM, RG_RUTOS_LETTER, {}, SpoilerCollectionCheck::EventChkInf(0x31), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||
|
|
|
@ -267,6 +267,7 @@ void Settings::CreateOptionDescriptions() {
|
|||
"Affordable prices per tier: starter = 10, adult = 105, giant = 205, tycoon = 505\n\n"
|
||||
"Use this to enable wallet tier locking, but make shop items not as expensive as they could be.";
|
||||
mOptionDescriptions[RSK_FISHSANITY] = "Off - Fish will not be shuffled. No changes will be made to fishing behavior.\n\n"
|
||||
"Shuffle only Hyrule Loach - Allows you to earn an item by catching the hyrule loach at the fishing pond and giving it to the owner.\n\n"
|
||||
"Shuffle Fishing Pond - The fishing pond's fish will be shuffled. Catching a fish in the fishing pond will grant a reward.\n\n"
|
||||
"Shuffle Overworld Fish - Fish in generic grottos and Zora's Domain will be shuffled. Catching a fish in a bottle will give a reward.\n\n"
|
||||
"Shuffle Both - Both overworld fish and fish in the fishing pond will be shuffled.";
|
||||
|
@ -512,6 +513,8 @@ void Settings::CreateOptionDescriptions() {
|
|||
"Reading the diary of Dampé the gravekeeper as adult will tell you the location of one of the Hookshots.";
|
||||
mOptionDescriptions[RSK_GREG_HINT] =
|
||||
"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 tell you what's the reward for the Hyrule Loach.";
|
||||
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.";
|
||||
|
|
|
@ -87,7 +87,7 @@ static const char* englishRupeeNames[171] = {
|
|||
"Frog Coins", "Gald", "Gekz", "Gems", "Geo",
|
||||
"Gil", "Glimmer", "Glitches", "Gold", "Gold Dragons",
|
||||
"Goober Dollars", "Green Herbs", "Greg Siblings", "Gummybears", "Hell",
|
||||
"Hylian Loaches", "Ice Traps", "ISK", "Jiggies", "KF7 Ammo",
|
||||
"Hyrule Loaches", "Ice Traps", "ISK", "Jiggies", "KF7 Ammo",
|
||||
"Kinstones", "Kremcoins", "Kroner", "Leaves ", "Lemmings",
|
||||
"Lien", "Lira", "Lumber", "Lungmen Dollars", "Macca",
|
||||
"Mana", "Mann Co. Keys", "Meat", "Meat Stacks", "Medaparts",
|
||||
|
@ -312,6 +312,15 @@ void Randomizer::LoadHintMessages() {
|
|||
ctx->GetHint(RH_FROGS)->GetText().GetGerman(),
|
||||
ctx->GetHint(RH_FROGS)->GetText().GetFrench(), TEXTBOX_TYPE_BLUE)
|
||||
);
|
||||
CustomMessageManager::Instance->CreateMessage(
|
||||
Randomizer::randoMiscHintsTableID,
|
||||
TEXT_FISHING_TALK_ABOUT_SOMETHING,
|
||||
CustomMessage(
|
||||
"What?^You wanna know about the&%rHyrule Loach%w?^It's a big fish, but it's so rare that&I'll give my %g{{item}}%w&to anyone who catches it. Seriously!",
|
||||
"%g{{item}}%w",//TODO: Translations
|
||||
"%g{{item}}%w"
|
||||
)
|
||||
);
|
||||
CustomMessageManager::Instance->CreateMessage(Randomizer::randoMiscHintsTableID, TEXT_WARP_MINUET_OF_FOREST,
|
||||
CustomMessage(ctx->GetHint(RH_MINUET_WARP_LOC)->GetText().GetEnglish(),
|
||||
ctx->GetHint(RH_MINUET_WARP_LOC)->GetText().GetGerman(),
|
||||
|
@ -2639,6 +2648,12 @@ CustomMessage Randomizer::ReplaceWithItemName(CustomMessage message, std::string
|
|||
return message;
|
||||
}
|
||||
|
||||
CustomMessage Randomizer::GetLoachMessage() {
|
||||
auto ctx = Rando::Context::GetInstance();
|
||||
CustomMessage messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::randoMiscHintsTableID, TEXT_FISHING_TALK_ABOUT_SOMETHING);
|
||||
messageEntry = ReplaceWithItemName(messageEntry, "{{item}}", RC_LH_HYRULE_LOACH);
|
||||
return messageEntry;
|
||||
}
|
||||
|
||||
CustomMessage Randomizer::GetMiscHintMessage(TextIDs textToGet, RandomizerCheck hintedCheck, RandomizerCheck otherCheck) {
|
||||
CustomMessage messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::randoMiscHintsTableID, textToGet);
|
||||
|
|
|
@ -63,6 +63,7 @@ class Randomizer {
|
|||
ItemObtainability GetItemObtainabilityFromRandomizerGet(RandomizerGet randomizerCheck);
|
||||
CustomMessage GetSheikMessage(s16 scene, u16 originalTextId);
|
||||
CustomMessage ReplaceWithItemName(CustomMessage message, std::string&& toReplace, RandomizerCheck hintedCheck);
|
||||
CustomMessage GetLoachMessage();
|
||||
CustomMessage GetMiscHintMessage(TextIDs textToGet, RandomizerCheck hintedCheck, RandomizerCheck otherCheck = RC_UNKNOWN_CHECK);
|
||||
CustomMessage GetSariaMessage(u16 originalTextId);
|
||||
CustomMessage GetFishingPondOwnerMessage(u16 originalTextId);
|
||||
|
|
|
@ -926,6 +926,7 @@ typedef enum {
|
|||
RC_LH_CHILD_LOACH_1,
|
||||
RC_LH_CHILD_LOACH_2,
|
||||
RC_LH_ADULT_FISHING,
|
||||
RC_LH_HYRULE_LOACH,
|
||||
RC_LH_ADULT_FISH_1,
|
||||
RC_LH_ADULT_FISH_2,
|
||||
RC_LH_ADULT_FISH_3,
|
||||
|
@ -3556,6 +3557,7 @@ typedef enum {
|
|||
RSK_LIGHT_ARROWS_HINT,
|
||||
RSK_DAMPES_DIARY_HINT,
|
||||
RSK_GREG_HINT,
|
||||
RSK_LOACH_HINT,
|
||||
RSK_SARIA_HINT,
|
||||
RSK_FROGS_HINT,
|
||||
RSK_KAK_10_SKULLS_HINT,
|
||||
|
@ -3792,9 +3794,10 @@ typedef enum {
|
|||
RO_BOSS_SOULS_ON_PLUS_GANON,
|
||||
} RandoOptionBossSouls;
|
||||
|
||||
//Fishsanity settings (off, pond only, grottos only, both)
|
||||
//Fishsanity settings (off, loach only, pond only, grottos only, both)
|
||||
typedef enum {
|
||||
RO_FISHSANITY_OFF,
|
||||
RO_FISHSANITY_HYRULE_LOACH,
|
||||
RO_FISHSANITY_POND,
|
||||
RO_FISHSANITY_OVERWORLD,
|
||||
RO_FISHSANITY_BOTH
|
||||
|
|
|
@ -160,6 +160,8 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() {
|
|||
CVarGetInteger("gRandomizeShuffleAdultTrade", RO_GENERIC_NO)) &&
|
||||
(location.GetRandomizerCheck() != RC_KF_KOKIRI_SWORD_CHEST ||
|
||||
CVarGetInteger("gRandomizeShuffleKokiriSword", RO_GENERIC_NO)) &&
|
||||
(location.GetRandomizerCheck() != RC_LH_HYRULE_LOACH ||
|
||||
CVarGetInteger("gRandomizeFishsanity", RO_GENERIC_NO) == RO_FISHSANITY_HYRULE_LOACH) &&
|
||||
(location.GetRandomizerCheck() != RC_ZR_MAGIC_BEAN_SALESMAN ||
|
||||
CVarGetInteger("gRandomizeShuffleBeans", RO_GENERIC_NO)) &&
|
||||
(location.GetRandomizerCheck() != RC_HC_MALON_EGG ||
|
||||
|
|
|
@ -64,6 +64,7 @@ bool showCows;
|
|||
bool showAdultTrade;
|
||||
bool showKokiriSword;
|
||||
bool showMasterSword;
|
||||
bool showHyruleLoach;
|
||||
bool showWeirdEgg;
|
||||
bool showGerudoCard;
|
||||
bool showFrogSongRupees;
|
||||
|
@ -1106,6 +1107,9 @@ void LoadSettings() {
|
|||
showMasterSword = IS_RANDO ?
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MASTER_SWORD) == RO_GENERIC_YES
|
||||
: true;
|
||||
showHyruleLoach = IS_RANDO ?
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY) == RO_FISHSANITY_HYRULE_LOACH
|
||||
: false;
|
||||
showWeirdEgg = IS_RANDO ?
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_WEIRD_EGG) == RO_GENERIC_YES
|
||||
: true;
|
||||
|
@ -1226,6 +1230,7 @@ bool IsVisibleInCheckTracker(RandomizerCheck rc) {
|
|||
) &&
|
||||
(rc != RC_KF_KOKIRI_SWORD_CHEST || showKokiriSword) &&
|
||||
(rc != RC_TOT_MASTER_SWORD || showMasterSword) &&
|
||||
(rc != RC_LH_HYRULE_LOACH || showHyruleLoach) &&
|
||||
(rc != RC_ZR_MAGIC_BEAN_SALESMAN || showBeans) &&
|
||||
(rc != RC_HC_MALON_EGG || showWeirdEgg) &&
|
||||
(loc->GetRCType() != RCTYPE_FROG_SONG || showFrogSongRupees) &&
|
||||
|
|
|
@ -212,6 +212,8 @@ typedef enum {
|
|||
RAND_INF_HAS_OCARINA_C_LEFT,
|
||||
RAND_INF_HAS_OCARINA_C_RIGHT,
|
||||
|
||||
RAND_INF_CAUGHT_LOACH,
|
||||
|
||||
RAND_INF_CAN_SWIM,
|
||||
|
||||
RAND_INF_HAS_WALLET,
|
||||
|
|
|
@ -120,7 +120,7 @@ void Settings::CreateOptions() {
|
|||
mOptions[RSK_SHUFFLE_CHEST_MINIGAME] = Option::U8("Shuffle Chest Minigame", {"Off", "On (Separate)", "On (Pack)"});
|
||||
mOptions[RSK_SHUFFLE_100_GS_REWARD] = Option::Bool("Shuffle 100 GS Reward", "gRandomizeShuffle100GSReward", mOptionDescriptions[RSK_SHUFFLE_100_GS_REWARD], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF);
|
||||
mOptions[RSK_SHUFFLE_BOSS_SOULS] = Option::U8("Shuffle Boss Souls", {"Off", "On", "On + Ganon"}, OptionCategory::Setting, "gRandomizeShuffleBossSouls", mOptionDescriptions[RSK_SHUFFLE_BOSS_SOULS], WidgetType::Combobox);
|
||||
mOptions[RSK_FISHSANITY] = Option::U8("Fishsanity", {"Off", "Shuffle Fishing Pond", "Shuffle Overworld Fish", "Shuffle Both"}, OptionCategory::Setting, "gRandomizeFishsanity", mOptionDescriptions[RSK_FISHSANITY], WidgetType::Combobox, RO_FISHSANITY_OFF);
|
||||
mOptions[RSK_FISHSANITY] = Option::U8("Fishsanity", {"Off", "Shuffle only Hyrule Loach", "Shuffle Fishing Pond", "Shuffle Overworld Fish", "Shuffle Both"}, OptionCategory::Setting, "gRandomizeFishsanity", mOptionDescriptions[RSK_FISHSANITY], WidgetType::Combobox, RO_FISHSANITY_OFF);
|
||||
mOptions[RSK_FISHSANITY_POND_COUNT] = Option::U8("Pond Fish Count", {NumOpts(0,17,1)}, OptionCategory::Setting, "gRandomizeFishsanityPondCount", mOptionDescriptions[RSK_FISHSANITY_POND_COUNT], WidgetType::Slider, 0, true, IMFLAG_NONE);
|
||||
mOptions[RSK_FISHSANITY_AGE_SPLIT] = Option::Bool("Pond Age Split", "gRandomizeFishsanityAgeSplit", mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT]);
|
||||
mOptions[RSK_SHUFFLE_MAPANDCOMPASS] = Option::U8("Maps/Compasses", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeStartingMapsCompasses", mOptionDescriptions[RSK_SHUFFLE_MAPANDCOMPASS], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
|
||||
|
@ -161,6 +161,7 @@ void Settings::CreateOptions() {
|
|||
mOptions[RSK_LIGHT_ARROWS_HINT] = Option::Bool("Light Arrow Hint", {"Off", "On"}, OptionCategory::Setting, "gRandomizeLAHint", mOptionDescriptions[RSK_LIGHT_ARROWS_HINT], WidgetType::Checkbox, RO_GENERIC_ON, false, IMFLAG_NONE);
|
||||
mOptions[RSK_DAMPES_DIARY_HINT] = Option::Bool("Dampe's Diary Hint", "gRandomizeDampeHint", mOptionDescriptions[RSK_DAMPES_DIARY_HINT], IMFLAG_NONE);
|
||||
mOptions[RSK_GREG_HINT] = Option::Bool("Greg the Green Rupee Hint", "gRandomizeGregHint", mOptionDescriptions[RSK_GREG_HINT], IMFLAG_NONE);
|
||||
mOptions[RSK_LOACH_HINT] = Option::Bool("Hyrule Loach Hint", "gRandomizeLoachHint", mOptionDescriptions[RSK_LOACH_HINT], IMFLAG_NONE);
|
||||
mOptions[RSK_SARIA_HINT] = Option::Bool("Saria's Hint", "gRandomizeSariaHint", mOptionDescriptions[RSK_SARIA_HINT], IMFLAG_NONE);
|
||||
mOptions[RSK_FISHING_POLE_HINT] = Option::Bool("Fishing Pole Hint", "gRandomizeFishingPoleHint", mOptionDescriptions[RSK_FISHING_POLE_HINT], IMFLAG_NONE);
|
||||
mOptions[RSK_FROGS_HINT] = Option::Bool("Frog Ocarina Game Hint", "gRandomizeFrogsHint", mOptionDescriptions[RSK_FROGS_HINT], IMFLAG_NONE);
|
||||
|
@ -732,6 +733,7 @@ void Settings::CreateOptions() {
|
|||
&mOptions[RSK_LIGHT_ARROWS_HINT],
|
||||
&mOptions[RSK_DAMPES_DIARY_HINT],
|
||||
&mOptions[RSK_GREG_HINT],
|
||||
&mOptions[RSK_LOACH_HINT],
|
||||
&mOptions[RSK_SARIA_HINT],
|
||||
&mOptions[RSK_FROGS_HINT],
|
||||
&mOptions[RSK_BIGGORON_HINT],
|
||||
|
@ -959,6 +961,7 @@ void Settings::CreateOptions() {
|
|||
&mOptions[RSK_LIGHT_ARROWS_HINT],
|
||||
&mOptions[RSK_DAMPES_DIARY_HINT],
|
||||
&mOptions[RSK_GREG_HINT],
|
||||
&mOptions[RSK_LOACH_HINT],
|
||||
&mOptions[RSK_SARIA_HINT],
|
||||
&mOptions[RSK_FROGS_HINT],
|
||||
&mOptions[RSK_WARP_SONG_HINTS],
|
||||
|
@ -1176,6 +1179,7 @@ void Settings::CreateOptions() {
|
|||
{ "Miscellaneous Settings:Light Arrow Hint", RSK_LIGHT_ARROWS_HINT },
|
||||
{ "Miscellaneous Settings:Dampe's Diary Hint", RSK_DAMPES_DIARY_HINT },
|
||||
{ "Miscellaneous Settings:Greg the Rupee Hint", RSK_GREG_HINT },
|
||||
{ "Miscellaneous Settings:Hyrule Loach Hint", RSK_LOACH_HINT },
|
||||
{ "Miscellaneous Settings:Saria's Hint", RSK_SARIA_HINT },
|
||||
{ "Miscellaneous Settings:Frog Ocarina Game Hint", RSK_FROGS_HINT },
|
||||
{ "Miscellaneous Settings:10 GS Hint", RSK_KAK_10_SKULLS_HINT },
|
||||
|
@ -2283,6 +2287,7 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) {
|
|||
case RSK_LIGHT_ARROWS_HINT:
|
||||
case RSK_DAMPES_DIARY_HINT:
|
||||
case RSK_GREG_HINT:
|
||||
case RSK_LOACH_HINT:
|
||||
case RSK_SARIA_HINT:
|
||||
case RSK_FROGS_HINT:
|
||||
case RSK_KAK_10_SKULLS_HINT:
|
||||
|
|
|
@ -2619,6 +2619,17 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
|||
} else if (textId == TEXT_FIRE_TEMPLE_GORON_OWE_YOU_BIG_TIME || (textId >= TEXT_FIRE_TEMPLE_GORON_FALLING_DOORS_SECRET && textId <= TEXT_FIRE_TEMPLE_GORON_SOUNDS_DIFFERENT_SECRET)) {
|
||||
u16 choice = Random(0, NUM_GORON_MESSAGES);
|
||||
messageEntry = OTRGlobals::Instance->gRandomizer->GetGoronMessage(choice);
|
||||
} else if (Randomizer_GetSettingValue(RSK_LOACH_HINT) &&
|
||||
(
|
||||
textId == TEXT_FISHING_CLOUDY ||
|
||||
textId == TEXT_FISHING_TRY_ANOTHER_LURE ||
|
||||
textId == TEXT_FISHING_SECRETS ||
|
||||
textId == TEXT_FISHING_GOOD_FISHERMAN ||
|
||||
textId == TEXT_FISHING_DIFFERENT_POND ||
|
||||
textId == TEXT_FISHING_SCRATCHING ||
|
||||
textId == TEXT_FISHING_TRY_ANOTHER_LURE_WITH_SINKING_LURE
|
||||
)) {
|
||||
messageEntry = OTRGlobals::Instance->gRandomizer->GetLoachMessage();
|
||||
} else if (Randomizer_GetSettingValue(RSK_FROGS_HINT) && textId == TEXT_FROGS_UNDERWATER) {
|
||||
messageEntry = OTRGlobals::Instance->gRandomizer->GetMiscHintMessage(TEXT_FROGS_UNDERWATER, RC_ZR_FROGS_OCARINA_GAME);
|
||||
} else if (Randomizer_GetSettingValue(RSK_FISHING_POLE_HINT) && !Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND) &&
|
||||
|
|
|
@ -864,6 +864,8 @@ void DrawEnhancementsMenu() {
|
|||
UIWidgets::Tooltip("The minimum weight for the unique fishing reward as a child");
|
||||
UIWidgets::PaddedEnhancementSliderInt("Adult Minimum Weight: %d", "##aMinimumWeight", "gAdultMinimumWeightFish", 6, 13, "", 13, true, true, false, disabled, disabledTooltip);
|
||||
UIWidgets::Tooltip("The minimum weight for the unique fishing reward as an adult");
|
||||
UIWidgets::PaddedEnhancementCheckbox("All fish are Hyrule Loaches", "gEnhancements.AllHyruleLoaches", true, false, disabled, disabledTooltip);
|
||||
UIWidgets::Tooltip("Every fish in the fishing pond will always be a Hyrule Loach");
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
UIWidgets::Spacer(0);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#define WATER_SURFACE_Y(play) play->colCtx.colHeader->waterBoxes->ySurface
|
||||
#define IS_FISHSANITY (IS_RANDO && Randomizer_GetPondFishShuffled())
|
||||
#define FISHID(params) (Randomizer_IdentifyFish(play->sceneNum, params))
|
||||
bool getShouldSpawnLoaches();
|
||||
|
||||
void Fishing_Init(Actor* thisx, PlayState* play);
|
||||
void Fishing_Destroy(Actor* thisx, PlayState* play);
|
||||
|
@ -26,8 +27,6 @@ void Fishing_DrawFish(Actor* thisx, PlayState* play);
|
|||
void Fishing_DrawOwner(Actor* thisx, PlayState* play);
|
||||
void Fishing_Reset(void);
|
||||
|
||||
bool getShouldSpawnLoaches();
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 isLoach;
|
||||
/* 0x02 */ Vec3s pos;
|
||||
|
@ -1001,7 +1000,8 @@ void Fishing_Init(Actor* thisx, PlayState* play2) {
|
|||
sFishInits[i].pos.z, 0, Rand_ZeroFloat(0x10000), 0, 100 + i, true);
|
||||
}
|
||||
} else {
|
||||
if ((thisx->params < (EN_FISH_PARAM + 15)) || (thisx->params == EN_FISH_AQUARIUM)) {
|
||||
u8 allHyruleLoaches = CVarGetInteger("gCustomizeFishing", 0) && CVarGetInteger("gEnhancements.AllHyruleLoaches", 0);
|
||||
if ((thisx->params < (EN_FISH_PARAM + 15) && !allHyruleLoaches) || (thisx->params == EN_FISH_AQUARIUM)) {
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gFishingFishSkel, &gFishingFishAnim, NULL, NULL, 0);
|
||||
Animation_MorphToLoop(&this->skelAnime, &gFishingFishAnim, 0.0f);
|
||||
} else {
|
||||
|
@ -1021,7 +1021,7 @@ void Fishing_Init(Actor* thisx, PlayState* play2) {
|
|||
this->fishState = 10;
|
||||
this->fishStateNext = 10;
|
||||
|
||||
this->isLoach = sFishInits[thisx->params - EN_FISH_PARAM].isLoach;
|
||||
this->isLoach = allHyruleLoaches ? 1 : sFishInits[thisx->params - EN_FISH_PARAM].isLoach;
|
||||
this->perception = sFishInits[thisx->params - EN_FISH_PARAM].perception;
|
||||
this->fishLength = sFishInits[thisx->params - EN_FISH_PARAM].baseLength;
|
||||
|
||||
|
@ -5011,14 +5011,10 @@ void Fishing_HandleOwnerDialog(Fishing* this, PlayState* play) {
|
|||
this->actor.textId = 0x408B;
|
||||
this->stateAndTimer = 20;
|
||||
}
|
||||
} else if (!IS_RANDO) {
|
||||
} else {
|
||||
this->actor.textId = 0x409B;
|
||||
this->stateAndTimer = 11;
|
||||
}
|
||||
else {
|
||||
this->actor.textId = 0x4086;
|
||||
this->stateAndTimer = 11;
|
||||
}
|
||||
Message_ContinueTextbox(play, this->actor.textId);
|
||||
break;
|
||||
case 1:
|
||||
|
@ -5154,7 +5150,13 @@ void Fishing_HandleOwnerDialog(Fishing* this, PlayState* play) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
getItemId = GI_RUPEE_PURPLE;
|
||||
if (IS_RANDO && !Flags_GetRandomizerInf(RAND_INF_CAUGHT_LOACH)) {
|
||||
Flags_SetRandomizerInf(RAND_INF_CAUGHT_LOACH);
|
||||
getItemEntry = Randomizer_GetItemFromKnownCheck(RC_LH_HYRULE_LOACH, GI_RUPEE_PURPLE);
|
||||
getItemId = getItemEntry.getItemId;
|
||||
} else {
|
||||
getItemId = GI_RUPEE_PURPLE;
|
||||
}
|
||||
sFishOnHandLength = 0.0f; // doesn't record loach
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue