Change numbered tricks in preset and settings to use codes. (#6267)
This commit is contained in:
@@ -47,7 +47,7 @@ int Playthrough_Init(uint32_t seed, std::set<RandomizerCheck> excludedLocations,
|
|||||||
auto locationOption = static_cast<Rando::LocationOption*>(option);
|
auto locationOption = static_cast<Rando::LocationOption*>(option);
|
||||||
settingsStr += option->GetOptionText(ctx->GetLocationOption(locationOption->GetKey()).Get());
|
settingsStr += option->GetOptionText(ctx->GetLocationOption(locationOption->GetKey()).Get());
|
||||||
} else if (i == RSG_TRICKS) {
|
} else if (i == RSG_TRICKS) {
|
||||||
auto trickOption = static_cast<Rando::TrickOption*>(option);
|
auto trickOption = static_cast<Rando::TrickSetting*>(option);
|
||||||
settingsStr += option->GetOptionText(ctx->GetTrickOption(trickOption->GetKey()).Get());
|
settingsStr += option->GetOptionText(ctx->GetTrickOption(trickOption->GetKey()).Get());
|
||||||
} else {
|
} else {
|
||||||
settingsStr += option->GetOptionText(ctx->GetOption(option->GetKey()).Get());
|
settingsStr += option->GetOptionText(ctx->GetOption(option->GetKey()).Get());
|
||||||
|
|||||||
@@ -357,35 +357,41 @@ RandomizerCheck LocationOption::GetKey() const {
|
|||||||
return static_cast<RandomizerCheck>(key);
|
return static_cast<RandomizerCheck>(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrickOption::TrickOption(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_,
|
TrickSetting::TrickSetting(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_,
|
||||||
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_)
|
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
|
||||||
|
std::string description_)
|
||||||
: Option(key_, name_, { "Disabled", "Enabled" }, OptionCategory::Setting, "", std::move(description_),
|
: Option(key_, name_, { "Disabled", "Enabled" }, OptionCategory::Setting, "", std::move(description_),
|
||||||
WIDGET_CVAR_CHECKBOX, 0, false, nullptr, IMFLAG_NONE),
|
WIDGET_CVAR_CHECKBOX, 0, false, nullptr, IMFLAG_NONE),
|
||||||
mQuest(quest_), mArea(area_), mTags(std::move(tags_)) {
|
mQuest(quest_), mArea(area_), mNameTag(nameTag_), mTags(std::move(tags_)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TrickOption TrickOption::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
TrickSetting TrickSetting::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
||||||
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_) {
|
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
|
||||||
return { key_, quest_, area_, std::move(tags_), name_, std::move(description_) };
|
std::string description_) {
|
||||||
|
return { key_, quest_, area_, std::move(tags_), name_, nameTag_, std::move(description_) };
|
||||||
}
|
}
|
||||||
|
|
||||||
RandomizerTrick TrickOption::GetKey() const {
|
RandomizerTrick TrickSetting::GetKey() const {
|
||||||
return static_cast<RandomizerTrick>(key);
|
return static_cast<RandomizerTrick>(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
RandomizerCheckQuest TrickOption::GetQuest() const {
|
RandomizerCheckQuest TrickSetting::GetQuest() const {
|
||||||
return mQuest;
|
return mQuest;
|
||||||
}
|
}
|
||||||
|
|
||||||
RandomizerArea TrickOption::GetArea() const {
|
RandomizerArea TrickSetting::GetArea() const {
|
||||||
return mArea;
|
return mArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TrickOption::HasTag(const Tricks::Tag tag) const {
|
std::string TrickSetting::GetNameTag() const {
|
||||||
|
return mNameTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TrickSetting::HasTag(const Tricks::Tag tag) const {
|
||||||
return mTags.contains(tag);
|
return mTags.contains(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::set<Tricks::Tag>& TrickOption::GetTags() const {
|
const std::set<Tricks::Tag>& TrickSetting::GetTags() const {
|
||||||
return mTags;
|
return mTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -346,9 +346,9 @@ class LocationOption : public Option {
|
|||||||
RandomizerCheck GetKey() const;
|
RandomizerCheck GetKey() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TrickOption : public Option {
|
class TrickSetting : public Option {
|
||||||
public:
|
public:
|
||||||
TrickOption() = default;
|
TrickSetting() = default;
|
||||||
/**
|
/**
|
||||||
* @brief A convenience function for constructing the Option for a trick.
|
* @brief A convenience function for constructing the Option for a trick.
|
||||||
*
|
*
|
||||||
@@ -356,12 +356,14 @@ class TrickOption : public Option {
|
|||||||
* @param quest_ MQ, Vanilla, or Both.
|
* @param quest_ MQ, Vanilla, or Both.
|
||||||
* @param area_ The area the trick is relevant for.
|
* @param area_ The area the trick is relevant for.
|
||||||
* @param tags_ The set of RandomizerTrickTags for this trick.
|
* @param tags_ The set of RandomizerTrickTags for this trick.
|
||||||
* @param name_ The name of the trick. Appears in the spoiler/patch file.
|
* @param name_ The name of the trick. Appears in the menus and spoiler
|
||||||
|
* @param nameTag_ The 3-8 long name tag of the trick. Appears in the settings and presets file.
|
||||||
* @param description_ A brief description of the trick.
|
* @param description_ A brief description of the trick.
|
||||||
* @return Option
|
* @return Option
|
||||||
*/
|
*/
|
||||||
static TrickOption LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
static TrickSetting LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
||||||
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_);
|
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
|
||||||
|
std::string description_);
|
||||||
|
|
||||||
RandomizerTrick GetKey() const;
|
RandomizerTrick GetKey() const;
|
||||||
|
|
||||||
@@ -379,6 +381,13 @@ class TrickOption : public Option {
|
|||||||
*/
|
*/
|
||||||
RandomizerArea GetArea() const;
|
RandomizerArea GetArea() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the NameTag of the trick
|
||||||
|
*
|
||||||
|
* @return std::string
|
||||||
|
*/
|
||||||
|
std::string GetNameTag() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Check if this Trick has the given tag
|
* @brief Check if this Trick has the given tag
|
||||||
*
|
*
|
||||||
@@ -390,10 +399,11 @@ class TrickOption : public Option {
|
|||||||
const std::set<Tricks::Tag>& GetTags() const;
|
const std::set<Tricks::Tag>& GetTags() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TrickOption(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set<Tricks::Tag> tags_,
|
TrickSetting(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set<Tricks::Tag> tags_,
|
||||||
const std::string& name_, std::string description_);
|
const std::string& name_, const std::string nameTag_, std::string description_);
|
||||||
RandomizerCheckQuest mQuest;
|
RandomizerCheckQuest mQuest;
|
||||||
RandomizerArea mArea;
|
RandomizerArea mArea;
|
||||||
|
std::string mNameTag;
|
||||||
std::set<Tricks::Tag> mTags;
|
std::set<Tricks::Tag> mTags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,8 +46,6 @@ std::unordered_map<std::string, RandomizerCheckArea> SpoilerfileAreaNameToEnum;
|
|||||||
std::unordered_map<std::string, HintType> SpoilerfileHintTypeNameToEnum;
|
std::unordered_map<std::string, HintType> SpoilerfileHintTypeNameToEnum;
|
||||||
std::set<RandomizerCheck> excludedLocations;
|
std::set<RandomizerCheck> excludedLocations;
|
||||||
std::set<RandomizerCheck> spoilerExcludedLocations;
|
std::set<RandomizerCheck> spoilerExcludedLocations;
|
||||||
std::set<RandomizerTrick> enabledTricks;
|
|
||||||
std::set<RandomizerTrick> enabledGlitches;
|
|
||||||
|
|
||||||
u8 generated;
|
u8 generated;
|
||||||
char* seedString;
|
char* seedString;
|
||||||
@@ -3477,7 +3475,9 @@ void GenerateRandomizerImgui(std::string seed = "") {
|
|||||||
std::stringstream enabledTrickStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), ""));
|
std::stringstream enabledTrickStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), ""));
|
||||||
std::string enabledTrickString;
|
std::string enabledTrickString;
|
||||||
while (getline(enabledTrickStringStream, enabledTrickString, ',')) {
|
while (getline(enabledTrickStringStream, enabledTrickString, ',')) {
|
||||||
enabledTricks.insert((RandomizerTrick)std::stoi(enabledTrickString));
|
if (Rando::StaticData::trickToEnum.contains(enabledTrickString)) {
|
||||||
|
enabledTricks.insert(Rando::StaticData::trickToEnum[enabledTrickString]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the visibilitiy before removing conflicting excludes (in case the locations tab wasn't viewed)
|
// Update the visibilitiy before removing conflicting excludes (in case the locations tab wasn't viewed)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -58,7 +58,7 @@ class Settings {
|
|||||||
* @param key
|
* @param key
|
||||||
* @return Option&
|
* @return Option&
|
||||||
*/
|
*/
|
||||||
TrickOption& GetTrickOption(RandomizerTrick key);
|
TrickSetting& GetTrickSetting(RandomizerTrick key);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the RandomizerTrick corresponding to the provided name.
|
* @brief Get the RandomizerTrick corresponding to the provided name.
|
||||||
@@ -147,7 +147,7 @@ class Settings {
|
|||||||
std::array<Option, RSK_MAX> mOptions = {};
|
std::array<Option, RSK_MAX> mOptions = {};
|
||||||
std::array<std::string, RSK_MAX> mOptionDescriptions = {};
|
std::array<std::string, RSK_MAX> mOptionDescriptions = {};
|
||||||
std::array<OptionGroup, RSG_MAX> mOptionGroups = {};
|
std::array<OptionGroup, RSG_MAX> mOptionGroups = {};
|
||||||
std::array<TrickOption, RT_MAX> mTrickOptions = {};
|
std::array<TrickSetting, RT_MAX> mTrickSettings = {};
|
||||||
std::vector<std::vector<Option*>> mExcludeLocationsOptionsAreas = {};
|
std::vector<std::vector<Option*>> mExcludeLocationsOptionsAreas = {};
|
||||||
std::unordered_map<std::string, RandomizerTrick> mTrickNameToEnum;
|
std::unordered_map<std::string, RandomizerTrick> mTrickNameToEnum;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -304,6 +304,185 @@ std::unordered_map<u32, RandomizerHint> StaticData::grottoChestParamsToHint{
|
|||||||
{ 22988, RH_KF_STORMS_GROTTO_GOSSIP_STONE },
|
{ 22988, RH_KF_STORMS_GROTTO_GOSSIP_STONE },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// preexisting entries are for compatibility with Copper Charlie and should not be updated
|
||||||
|
std::unordered_map<std::string, RandomizerTrick> StaticData::trickToEnum = {
|
||||||
|
{ "0", RT_VISIBLE_COLLISION },
|
||||||
|
{ "1", RT_GROTTOS_WITHOUT_AGONY },
|
||||||
|
{ "2", RT_FEWER_TUNIC_REQUIREMENTS },
|
||||||
|
{ "3", RT_RUSTED_SWITCHES },
|
||||||
|
{ "4", RT_FLAMING_CHESTS },
|
||||||
|
{ "6", RT_DAMAGE_BOOST_SIMPLE },
|
||||||
|
{ "7", RT_HOVER_BOOST_SIMPLE },
|
||||||
|
{ "8", RT_BOMBCHU_BEEHIVES },
|
||||||
|
{ "9", RT_BLUE_FIRE_MUD_WALLS },
|
||||||
|
{ "10", RT_OPEN_UNDERWATER_CHEST },
|
||||||
|
{ "11", RT_HOOKSHOT_EXTENSION },
|
||||||
|
{ "12", RT_KF_ADULT_GS },
|
||||||
|
{ "13", RT_LW_BRIDGE },
|
||||||
|
{ "14", RT_LW_MIDO_BACKFLIP },
|
||||||
|
{ "15", RT_LW_GS_BEAN },
|
||||||
|
{ "16", RT_HC_STORMS_GS },
|
||||||
|
{ "17", RT_HF_BIG_POE_WITHOUT_EPONA },
|
||||||
|
{ "19", RT_KAK_TOWER_GS },
|
||||||
|
{ "21", RT_KAK_CHILD_WINDMILL_POH },
|
||||||
|
{ "22", RT_KAK_ROOFTOP_GS },
|
||||||
|
{ "23", RT_GY_POH },
|
||||||
|
{ "24", RT_GY_CHILD_DAMPE_RACE_POH },
|
||||||
|
{ "25", RT_GY_SHADOW_FIRE_ARROWS },
|
||||||
|
{ "26", RT_DMT_SOIL_GS },
|
||||||
|
{ "27", RT_DMT_BOMBABLE },
|
||||||
|
{ "28", RT_DMT_HOVERS_LOWER_GS },
|
||||||
|
{ "29", RT_DMT_BEAN_LOWER_GS },
|
||||||
|
{ "30", RT_DMT_JS_LOWER_GS },
|
||||||
|
{ "31", RT_DMT_CLIMB_HOVERS },
|
||||||
|
{ "32", RT_DMT_UPPER_GS },
|
||||||
|
{ "34", RT_GC_POT },
|
||||||
|
{ "35", RT_GC_POT_STRENGTH },
|
||||||
|
{ "36", RT_GC_ROLLING_STRENGTH },
|
||||||
|
{ "37", RT_GC_LEFTMOST },
|
||||||
|
{ "38", RT_GC_GROTTO },
|
||||||
|
{ "39", RT_GC_LINK_GORON_DINS },
|
||||||
|
{ "40", RT_DMC_HOVER_BEAN_POH },
|
||||||
|
{ "41", RT_DMC_BOLERO_JUMP },
|
||||||
|
{ "42", RT_DMC_BOULDER_JS },
|
||||||
|
{ "43", RT_DMC_BOULDER_SKIP },
|
||||||
|
{ "44", RT_ZR_LOWER },
|
||||||
|
{ "45", RT_ZR_UPPER },
|
||||||
|
{ "46", RT_ZR_HOVERS },
|
||||||
|
{ "47", RT_ZR_CUCCO },
|
||||||
|
{ "48", RT_ZD_KING_ZORA_SKIP },
|
||||||
|
{ "49", RT_ZD_GS },
|
||||||
|
{ "50", RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES },
|
||||||
|
{ "51", RT_LH_LAB_WALL_GS },
|
||||||
|
{ "52", RT_LH_LAB_DIVING },
|
||||||
|
{ "53", RT_LH_WATER_HOOKSHOT },
|
||||||
|
{ "54", RT_GV_CRATE_HOVERS },
|
||||||
|
{ "55", RT_PASS_GUARDS_WITH_NOTHING },
|
||||||
|
{ "57", RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON },
|
||||||
|
{ "58", RT_GF_LEDGE_CLIP_INTO_GTG },
|
||||||
|
{ "60", RT_HW_CROSSING },
|
||||||
|
{ "61", RT_LENS_HW },
|
||||||
|
{ "62", RT_HW_REVERSE },
|
||||||
|
{ "63", RT_COLOSSUS_GS },
|
||||||
|
{ "64", RT_DEKU_BASEMENT_GS },
|
||||||
|
{ "65", RT_DEKU_B1_SKIP },
|
||||||
|
{ "66", RT_DEKU_B1_BOW_WEBS },
|
||||||
|
{ "67", RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG },
|
||||||
|
{ "68", RT_DEKU_MQ_COMPASS_GS },
|
||||||
|
{ "69", RT_DEKU_MQ_LOG },
|
||||||
|
{ "70", RT_DC_SCARECROW_GS },
|
||||||
|
{ "71", RT_DC_VINES_GS },
|
||||||
|
{ "72", RT_DC_STAIRS_WITH_BOW },
|
||||||
|
{ "73", RT_DC_SLINGSHOT_SKIP },
|
||||||
|
{ "74", RT_DC_SCRUB_ROOM },
|
||||||
|
{ "76", RT_DC_HAMMER_FLOOR },
|
||||||
|
{ "77", RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH },
|
||||||
|
{ "78", RT_DC_MQ_CHILD_BOMBS },
|
||||||
|
{ "79", RT_DC_MQ_CHILD_EYES },
|
||||||
|
{ "80", RT_DC_MQ_ADULT_EYES },
|
||||||
|
{ "81", RT_DC_DODONGO_CHU },
|
||||||
|
{ "83", RT_JABU_BOSS_HOVER },
|
||||||
|
{ "84", RT_JABU_NEAR_BOSS_RANGED },
|
||||||
|
{ "85", RT_JABU_NEAR_BOSS_EXPLOSIVES },
|
||||||
|
{ "86", RT_LENS_JABU_MQ },
|
||||||
|
{ "87", RT_JABU_MQ_RANG_JUMP },
|
||||||
|
{ "88", RT_JABU_MQ_SOT_GS },
|
||||||
|
{ "89", RT_LENS_BOTW },
|
||||||
|
{ "90", RT_BOTW_CHILD_DEADHAND },
|
||||||
|
{ "91", RT_BOTW_BASEMENT },
|
||||||
|
{ "92", RT_BOTW_PITS },
|
||||||
|
{ "93", RT_BOTW_MQ_DEADHAND_KEY },
|
||||||
|
{ "94", RT_FOREST_FIRST_GS },
|
||||||
|
{ "95", RT_FOREST_COURTYARD_EAST_GS },
|
||||||
|
{ "96", RT_FOREST_VINES },
|
||||||
|
{ "97", RT_FOREST_COURTYARD_LEDGE },
|
||||||
|
{ "98", RT_FOREST_DOORFRAME },
|
||||||
|
{ "99", RT_FOREST_OUTSIDE_BACKDOOR },
|
||||||
|
{ "100", RT_FOREST_COURTYARD_HEARTS_BOOMERANG },
|
||||||
|
{ "101", RT_FOREST_WELL_SWIM },
|
||||||
|
{ "102", RT_FOREST_MQ_BLOCK_PUZZLE },
|
||||||
|
{ "103", RT_FOREST_MQ_JS_HALLWAY_SWITCH },
|
||||||
|
{ "104", RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH },
|
||||||
|
{ "105", RT_FOREST_MQ_RANG_HALLWAY_SWITCH },
|
||||||
|
{ "107", RT_FIRE_SOT },
|
||||||
|
{ "108", RT_FIRE_STRENGTH },
|
||||||
|
{ "109", RT_FIRE_SCARECROW },
|
||||||
|
{ "111", RT_FIRE_MQ_NEAR_BOSS },
|
||||||
|
{ "112", RT_FIRE_MQ_BLOCKED_CHEST },
|
||||||
|
{ "113", RT_FIRE_MQ_BK_CHEST },
|
||||||
|
{ "114", RT_FIRE_MQ_CLIMB },
|
||||||
|
{ "115", RT_FIRE_MQ_MAZE_SIDE_ROOM },
|
||||||
|
{ "116", RT_FIRE_MQ_MAZE_HOVERS },
|
||||||
|
{ "117", RT_FIRE_MQ_MAZE_JUMP },
|
||||||
|
{ "118", RT_FIRE_MQ_ABOVE_MAZE_GS },
|
||||||
|
{ "120", RT_WATER_LONGSHOT_TORCH },
|
||||||
|
{ "121", RT_WATER_CRACKED_WALL_HOVERS },
|
||||||
|
{ "122", RT_WATER_CRACKED_WALL },
|
||||||
|
{ "123", RT_WATER_BK_REGION },
|
||||||
|
{ "124", RT_WATER_NORTH_BASEMENT_LEDGE_JUMP },
|
||||||
|
{ "126", RT_WATER_FW_CENTRAL_GS },
|
||||||
|
{ "127", RT_WATER_IRONS_CENTRAL_GS },
|
||||||
|
{ "128", RT_WATER_CENTRAL_BOW },
|
||||||
|
{ "129", RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS },
|
||||||
|
{ "130", RT_WATER_RANG_FALLING_PLATFORM_GS },
|
||||||
|
{ "131", RT_WATER_RIVER_GS },
|
||||||
|
{ "132", RT_WATER_DRAGON_JUMP_DIVE },
|
||||||
|
{ "133", RT_WATER_ADULT_DRAGON },
|
||||||
|
{ "134", RT_WATER_CHILD_DRAGON },
|
||||||
|
{ "135", RT_WATER_MQ_CENTRAL_PILLAR },
|
||||||
|
{ "136", RT_WATER_INVISIBLE_HOOKSHOT_TARGET },
|
||||||
|
{ "137", RT_WATER_MORPHA_WITHOUT_HOOKSHOT },
|
||||||
|
{ "138", RT_LENS_SHADOW },
|
||||||
|
{ "139", RT_LENS_SHADOW_PLATFORM },
|
||||||
|
{ "140", RT_LENS_BONGO },
|
||||||
|
{ "141", RT_SHADOW_UMBRELLA_HOVER },
|
||||||
|
{ "142", RT_SHADOW_UMBRELLA_CLIP },
|
||||||
|
{ "143", RT_SHADOW_UMBRELLA_GS },
|
||||||
|
{ "144", RT_SHADOW_FREESTANDING_KEY },
|
||||||
|
{ "145", RT_SHADOW_STATUE },
|
||||||
|
{ "146", RT_SHADOW_BONGO },
|
||||||
|
{ "147", RT_LENS_SHADOW_MQ },
|
||||||
|
{ "148", RT_LENS_SHADOW_MQ_INVISIBLE_BLADES },
|
||||||
|
{ "149", RT_LENS_SHADOW_MQ_PLATFORM },
|
||||||
|
{ "150", RT_LENS_SHADOW_MQ_DEADHAND },
|
||||||
|
{ "151", RT_SHADOW_MQ_GAP },
|
||||||
|
{ "152", RT_SHADOW_MQ_INVISIBLE_BLADES },
|
||||||
|
{ "153", RT_SHADOW_MQ_HUGE_PIT },
|
||||||
|
{ "154", RT_SHADOW_MQ_WINDY_WALKWAY },
|
||||||
|
{ "155", RT_LENS_SPIRIT },
|
||||||
|
{ "156", RT_SPIRIT_CHILD_CHU },
|
||||||
|
{ "157", RT_SPIRIT_WEST_LEDGE },
|
||||||
|
{ "158", RT_SPIRIT_LOWER_ADULT_SWITCH },
|
||||||
|
{ "159", RT_SPIRIT_STATUE_JUMP },
|
||||||
|
{ "161", RT_SPIRIT_MAP_CHEST },
|
||||||
|
{ "162", RT_SPIRIT_SUN_CHEST },
|
||||||
|
{ "163", RT_SPIRIT_WALL },
|
||||||
|
{ "164", RT_LENS_SPIRIT_MQ },
|
||||||
|
{ "165", RT_SPIRIT_MQ_SUN_BLOCK_SOT },
|
||||||
|
{ "166", RT_SPIRIT_MQ_SUN_BLOCK_GS },
|
||||||
|
{ "167", RT_SPIRIT_MQ_LOWER_ADULT },
|
||||||
|
{ "168", RT_SPIRIT_MQ_FROZEN_EYE },
|
||||||
|
{ "169", RT_ICE_BLOCK_GS },
|
||||||
|
{ "170", RT_ICE_MQ_RED_ICE_GS },
|
||||||
|
{ "171", RT_ICE_MQ_SCARECROW },
|
||||||
|
{ "172", RT_LENS_GTG },
|
||||||
|
{ "173", RT_GTG_WITHOUT_HOOKSHOT },
|
||||||
|
{ "174", RT_GTG_FAKE_WALL },
|
||||||
|
{ "175", RT_LENS_GTG_MQ },
|
||||||
|
{ "176", RT_GTG_MQ_WITH_HOOKSHOT },
|
||||||
|
{ "177", RT_GTG_MQ_WITHOUT_HOOKSHOT },
|
||||||
|
{ "178", RT_LENS_GANON },
|
||||||
|
{ "179", RT_GANON_SPIRIT_TRIAL_HOOKSHOT },
|
||||||
|
{ "180", RT_LENS_GANON_MQ },
|
||||||
|
{ "181", RT_GANON_MQ_FIRE_TRIAL },
|
||||||
|
{ "182", RT_GANON_MQ_SHADOW_TRIAL },
|
||||||
|
{ "183", RT_GANON_MQ_LIGHT_TRIAL },
|
||||||
|
{ "201", RT_GROUND_JUMP },
|
||||||
|
{ "202", RT_GROUND_JUMP_HARD },
|
||||||
|
{ "223", RT_BOTTOM_OF_THE_WELL_NAVI_DIVE },
|
||||||
|
{ "224", RT_LOST_WOOD_NAVI_DIVE },
|
||||||
|
};
|
||||||
|
|
||||||
std::array<HintText, RHT_MAX> StaticData::hintTextTable = {};
|
std::array<HintText, RHT_MAX> StaticData::hintTextTable = {};
|
||||||
|
|
||||||
std::vector<RandomizerGet> StaticData::normalBottles = {
|
std::vector<RandomizerGet> StaticData::normalBottles = {
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ class StaticData {
|
|||||||
static std::unordered_map<RandomizerHint, StaticHintInfo> staticHintInfoMap;
|
static std::unordered_map<RandomizerHint, StaticHintInfo> staticHintInfoMap;
|
||||||
static std::unordered_map<u32, RandomizerHint> stoneParamsToHint;
|
static std::unordered_map<u32, RandomizerHint> stoneParamsToHint;
|
||||||
static std::unordered_map<u32, RandomizerHint> grottoChestParamsToHint;
|
static std::unordered_map<u32, RandomizerHint> grottoChestParamsToHint;
|
||||||
|
static std::unordered_map<std::string, RandomizerTrick> trickToEnum;
|
||||||
static std::array<HintText, RHT_MAX> hintTextTable;
|
static std::array<HintText, RHT_MAX> hintTextTable;
|
||||||
static std::vector<RandomizerGet> normalBottles;
|
static std::vector<RandomizerGet> normalBottles;
|
||||||
static std::vector<RandomizerGet> beanSouls;
|
static std::vector<RandomizerGet> beanSouls;
|
||||||
|
|||||||
@@ -28,6 +28,22 @@ static std::set<RandomizerCheck> excludedLocations;
|
|||||||
static std::set<RandomizerTrick> enabledTricks;
|
static std::set<RandomizerTrick> enabledTricks;
|
||||||
static std::set<RandomizerTrick> enabledGlitches;
|
static std::set<RandomizerTrick> enabledGlitches;
|
||||||
|
|
||||||
|
void SaveEnabledTricks() {
|
||||||
|
std::string enabledTrickString = "";
|
||||||
|
for (auto enabledTrickIt : enabledTricks) {
|
||||||
|
enabledTrickString += Rando::Settings::GetInstance()->GetTrickSetting(enabledTrickIt).GetNameTag();
|
||||||
|
enabledTrickString += ",";
|
||||||
|
}
|
||||||
|
if (enabledTricks.size() == 0) {
|
||||||
|
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
||||||
|
} else {
|
||||||
|
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
||||||
|
}
|
||||||
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
|
tricksDirty = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void DrawLocationsMenu(WidgetInfo& info) {
|
void DrawLocationsMenu(WidgetInfo& info) {
|
||||||
auto ctx = OTRGlobals::Instance->gRandoContext;
|
auto ctx = OTRGlobals::Instance->gRandoContext;
|
||||||
int32_t currMQDungeonSetting = CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), 0) |
|
int32_t currMQDungeonSetting = CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), 0) |
|
||||||
@@ -177,7 +193,9 @@ void UpdateMenuTricks() {
|
|||||||
std::string enabledTrickString;
|
std::string enabledTrickString;
|
||||||
enabledTricks.clear();
|
enabledTricks.clear();
|
||||||
while (getline(enabledTrickStringStream, enabledTrickString, ',')) {
|
while (getline(enabledTrickStringStream, enabledTrickString, ',')) {
|
||||||
enabledTricks.insert((RandomizerTrick)std::stoi(enabledTrickString));
|
if (Rando::StaticData::trickToEnum.contains(enabledTrickString)) {
|
||||||
|
enabledTricks.insert(Rando::StaticData::trickToEnum[enabledTrickString]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
std::stringstream enabledGlitchStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledGlitches"), ""));
|
std::stringstream enabledGlitchStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledGlitches"), ""));
|
||||||
std::string enabledGlitchString;
|
std::string enabledGlitchString;
|
||||||
@@ -279,6 +297,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
{ Rando::Tricks::Tag::EXTREME, true }, { Rando::Tricks::Tag::EXPERIMENTAL, true },
|
{ Rando::Tricks::Tag::EXTREME, true }, { Rando::Tricks::Tag::EXPERIMENTAL, true },
|
||||||
{ Rando::Tricks::Tag::GLITCH, false },
|
{ Rando::Tricks::Tag::GLITCH, false },
|
||||||
};
|
};
|
||||||
|
|
||||||
static ImGuiTextFilter trickSearch;
|
static ImGuiTextFilter trickSearch;
|
||||||
UIWidgets::PushStyleInput(THEME_COLOR);
|
UIWidgets::PushStyleInput(THEME_COLOR);
|
||||||
trickSearch.Draw("Filter (inc,-exc)", 490.0f);
|
trickSearch.Draw("Filter (inc,-exc)", 490.0f);
|
||||||
@@ -292,14 +311,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
enabledTricks.erase(etfound);
|
enabledTricks.erase(etfound);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string enabledTrickString = "";
|
SaveEnabledTricks();
|
||||||
for (auto enabledTrickIt : enabledTricks) {
|
|
||||||
enabledTrickString += std::to_string(enabledTrickIt);
|
|
||||||
enabledTrickString += ",";
|
|
||||||
}
|
|
||||||
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
|
||||||
tricksDirty = true;
|
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (UIWidgets::Button("Enable All", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(250.f, 0.f)))) {
|
if (UIWidgets::Button("Enable All", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(250.f, 0.f)))) {
|
||||||
@@ -308,14 +320,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
enabledTricks.insert(static_cast<RandomizerTrick>(i));
|
enabledTricks.insert(static_cast<RandomizerTrick>(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string enabledTrickString = "";
|
SaveEnabledTricks();
|
||||||
for (auto enabledTrickIt : enabledTricks) {
|
|
||||||
enabledTrickString += std::to_string(enabledTrickIt);
|
|
||||||
enabledTrickString += ",";
|
|
||||||
}
|
|
||||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
|
||||||
tricksDirty = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ImGui::BeginTable("trickTags", static_cast<int>(showTag.size()),
|
if (ImGui::BeginTable("trickTags", static_cast<int>(showTag.size()),
|
||||||
@@ -364,21 +369,14 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
if (UIWidgets::Button("Enable Visible",
|
if (UIWidgets::Button("Enable Visible",
|
||||||
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
|
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
|
||||||
for (int i = 0; i < RT_MAX; i++) {
|
for (int i = 0; i < RT_MAX; i++) {
|
||||||
auto option = randoSettings->GetTrickOption(static_cast<RandomizerTrick>(i));
|
auto option = randoSettings->GetTrickSetting(static_cast<RandomizerTrick>(i));
|
||||||
if (!enabledTricks.count(static_cast<RandomizerTrick>(i)) &&
|
if (!enabledTricks.count(static_cast<RandomizerTrick>(i)) &&
|
||||||
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeDisabled[option.GetArea()] &&
|
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeDisabled[option.GetArea()] &&
|
||||||
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||||
enabledTricks.insert(static_cast<RandomizerTrick>(i));
|
enabledTricks.insert(static_cast<RandomizerTrick>(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string enabledTrickString = "";
|
SaveEnabledTricks();
|
||||||
for (auto enabledTrickIt : enabledTricks) {
|
|
||||||
enabledTrickString += std::to_string(enabledTrickIt);
|
|
||||||
enabledTrickString += ",";
|
|
||||||
}
|
|
||||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
|
||||||
tricksDirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
|
ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||||||
@@ -386,7 +384,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
|
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
|
||||||
bool hasTricks = false;
|
bool hasTricks = false;
|
||||||
for (auto rt : trickIds) {
|
for (auto rt : trickIds) {
|
||||||
auto option = randoSettings->GetTrickOption(rt);
|
auto option = randoSettings->GetTrickSetting(rt);
|
||||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||||
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||||
hasTricks = true;
|
hasTricks = true;
|
||||||
@@ -399,7 +397,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
||||||
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##disabled").c_str())) {
|
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##disabled").c_str())) {
|
||||||
for (auto rt : trickIds) {
|
for (auto rt : trickIds) {
|
||||||
auto option = randoSettings->GetTrickOption(rt);
|
auto option = randoSettings->GetTrickSetting(rt);
|
||||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||||
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||||
ImGui::TreeNodeSetOpen(
|
ImGui::TreeNodeSetOpen(
|
||||||
@@ -409,17 +407,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
|
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
|
||||||
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Right)) {
|
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Right)) {
|
||||||
enabledTricks.insert(rt);
|
enabledTricks.insert(rt);
|
||||||
std::string enabledTrickString = "";
|
SaveEnabledTricks();
|
||||||
for (auto enabledTrickIt : enabledTricks) {
|
|
||||||
enabledTrickString += std::to_string(enabledTrickIt);
|
|
||||||
enabledTrickString += ",";
|
|
||||||
}
|
|
||||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
|
||||||
Ship::Context::GetInstance()
|
|
||||||
->GetWindow()
|
|
||||||
->GetGui()
|
|
||||||
->SaveConsoleVariablesNextFrame();
|
|
||||||
tricksDirty = true;
|
|
||||||
}
|
}
|
||||||
UIWidgets::PopStyleButton();
|
UIWidgets::PopStyleButton();
|
||||||
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());
|
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());
|
||||||
@@ -458,25 +446,14 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
if (UIWidgets::Button("Disable Visible",
|
if (UIWidgets::Button("Disable Visible",
|
||||||
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
|
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
|
||||||
for (int i = 0; i < RT_MAX; i++) {
|
for (int i = 0; i < RT_MAX; i++) {
|
||||||
auto option = randoSettings->GetTrickOption(static_cast<RandomizerTrick>(i));
|
auto option = randoSettings->GetTrickSetting(static_cast<RandomizerTrick>(i));
|
||||||
if (enabledTricks.count(static_cast<RandomizerTrick>(i)) &&
|
if (enabledTricks.count(static_cast<RandomizerTrick>(i)) &&
|
||||||
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeEnabled[option.GetArea()] &&
|
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeEnabled[option.GetArea()] &&
|
||||||
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||||
enabledTricks.erase(static_cast<RandomizerTrick>(i));
|
enabledTricks.erase(static_cast<RandomizerTrick>(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string enabledTrickString = "";
|
SaveEnabledTricks();
|
||||||
for (auto enabledTrickIt : enabledTricks) {
|
|
||||||
enabledTrickString += std::to_string(enabledTrickIt);
|
|
||||||
enabledTrickString += ",";
|
|
||||||
}
|
|
||||||
if (enabledTricks.size() == 0) {
|
|
||||||
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
|
||||||
} else {
|
|
||||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
|
||||||
}
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
|
||||||
tricksDirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::BeginChild("ChildTricksEnabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
|
ImGui::BeginChild("ChildTricksEnabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||||||
@@ -484,7 +461,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
|
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
|
||||||
bool hasTricks = false;
|
bool hasTricks = false;
|
||||||
for (auto rt : trickIds) {
|
for (auto rt : trickIds) {
|
||||||
auto option = randoSettings->GetTrickOption(rt);
|
auto option = randoSettings->GetTrickSetting(rt);
|
||||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||||
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||||
hasTricks = true;
|
hasTricks = true;
|
||||||
@@ -497,7 +474,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
||||||
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##enabled").c_str())) {
|
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##enabled").c_str())) {
|
||||||
for (auto rt : trickIds) {
|
for (auto rt : trickIds) {
|
||||||
auto option = randoSettings->GetTrickOption(rt);
|
auto option = randoSettings->GetTrickSetting(rt);
|
||||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||||
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||||
ImGui::TreeNodeSetOpen(
|
ImGui::TreeNodeSetOpen(
|
||||||
@@ -507,22 +484,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
|||||||
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
|
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
|
||||||
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Left)) {
|
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Left)) {
|
||||||
enabledTricks.erase(rt);
|
enabledTricks.erase(rt);
|
||||||
std::string enabledTrickString = "";
|
SaveEnabledTricks();
|
||||||
for (auto enabledTrickIt : enabledTricks) {
|
|
||||||
enabledTrickString += std::to_string(enabledTrickIt);
|
|
||||||
enabledTrickString += ",";
|
|
||||||
}
|
|
||||||
if (enabledTrickString == "") {
|
|
||||||
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
|
||||||
} else {
|
|
||||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"),
|
|
||||||
enabledTrickString.c_str());
|
|
||||||
}
|
|
||||||
Ship::Context::GetInstance()
|
|
||||||
->GetWindow()
|
|
||||||
->GetGui()
|
|
||||||
->SaveConsoleVariablesNextFrame();
|
|
||||||
tricksDirty = true;
|
|
||||||
}
|
}
|
||||||
UIWidgets::PopStyleButton();
|
UIWidgets::PopStyleButton();
|
||||||
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());
|
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());
|
||||||
|
|||||||
Reference in New Issue
Block a user