Change numbered tricks in preset and settings to use codes. (#6267)

This commit is contained in:
Pepper0ni
2026-02-17 16:34:38 +00:00
committed by GitHub
parent 8e1f1aea82
commit 4cae79fd89
9 changed files with 496 additions and 290 deletions

View File

@@ -47,7 +47,7 @@ int Playthrough_Init(uint32_t seed, std::set<RandomizerCheck> excludedLocations,
auto locationOption = static_cast<Rando::LocationOption*>(option);
settingsStr += option->GetOptionText(ctx->GetLocationOption(locationOption->GetKey()).Get());
} 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());
} else {
settingsStr += option->GetOptionText(ctx->GetOption(option->GetKey()).Get());

View File

@@ -357,35 +357,41 @@ RandomizerCheck LocationOption::GetKey() const {
return static_cast<RandomizerCheck>(key);
}
TrickOption::TrickOption(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_,
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_)
TrickSetting::TrickSetting(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_,
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_),
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_,
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_) {
return { key_, quest_, area_, std::move(tags_), name_, std::move(description_) };
TrickSetting TrickSetting::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
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);
}
RandomizerCheckQuest TrickOption::GetQuest() const {
RandomizerCheckQuest TrickSetting::GetQuest() const {
return mQuest;
}
RandomizerArea TrickOption::GetArea() const {
RandomizerArea TrickSetting::GetArea() const {
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);
}
const std::set<Tricks::Tag>& TrickOption::GetTags() const {
const std::set<Tricks::Tag>& TrickSetting::GetTags() const {
return mTags;
}

View File

@@ -346,9 +346,9 @@ class LocationOption : public Option {
RandomizerCheck GetKey() const;
};
class TrickOption : public Option {
class TrickSetting : public Option {
public:
TrickOption() = default;
TrickSetting() = default;
/**
* @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 area_ The area the trick is relevant for.
* @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.
* @return Option
*/
static TrickOption LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_);
static TrickSetting LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
std::string description_);
RandomizerTrick GetKey() const;
@@ -379,6 +381,13 @@ class TrickOption : public Option {
*/
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
*
@@ -390,10 +399,11 @@ class TrickOption : public Option {
const std::set<Tricks::Tag>& GetTags() const;
private:
TrickOption(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set<Tricks::Tag> tags_,
const std::string& name_, std::string description_);
TrickSetting(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set<Tricks::Tag> tags_,
const std::string& name_, const std::string nameTag_, std::string description_);
RandomizerCheckQuest mQuest;
RandomizerArea mArea;
std::string mNameTag;
std::set<Tricks::Tag> mTags;
};

View File

@@ -46,8 +46,6 @@ std::unordered_map<std::string, RandomizerCheckArea> SpoilerfileAreaNameToEnum;
std::unordered_map<std::string, HintType> SpoilerfileHintTypeNameToEnum;
std::set<RandomizerCheck> excludedLocations;
std::set<RandomizerCheck> spoilerExcludedLocations;
std::set<RandomizerTrick> enabledTricks;
std::set<RandomizerTrick> enabledGlitches;
u8 generated;
char* seedString;
@@ -3477,7 +3475,9 @@ void GenerateRandomizerImgui(std::string seed = "") {
std::stringstream enabledTrickStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), ""));
std::string 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)

File diff suppressed because it is too large Load Diff

View File

@@ -58,7 +58,7 @@ class Settings {
* @param key
* @return Option&
*/
TrickOption& GetTrickOption(RandomizerTrick key);
TrickSetting& GetTrickSetting(RandomizerTrick key);
/**
* @brief Get the RandomizerTrick corresponding to the provided name.
@@ -147,7 +147,7 @@ class Settings {
std::array<Option, RSK_MAX> mOptions = {};
std::array<std::string, RSK_MAX> mOptionDescriptions = {};
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::unordered_map<std::string, RandomizerTrick> mTrickNameToEnum;
};

View File

@@ -304,6 +304,185 @@ std::unordered_map<u32, RandomizerHint> StaticData::grottoChestParamsToHint{
{ 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::vector<RandomizerGet> StaticData::normalBottles = {

View File

@@ -82,6 +82,7 @@ class StaticData {
static std::unordered_map<RandomizerHint, StaticHintInfo> staticHintInfoMap;
static std::unordered_map<u32, RandomizerHint> stoneParamsToHint;
static std::unordered_map<u32, RandomizerHint> grottoChestParamsToHint;
static std::unordered_map<std::string, RandomizerTrick> trickToEnum;
static std::array<HintText, RHT_MAX> hintTextTable;
static std::vector<RandomizerGet> normalBottles;
static std::vector<RandomizerGet> beanSouls;

View File

@@ -28,6 +28,22 @@ static std::set<RandomizerCheck> excludedLocations;
static std::set<RandomizerTrick> enabledTricks;
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) {
auto ctx = OTRGlobals::Instance->gRandoContext;
int32_t currMQDungeonSetting = CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), 0) |
@@ -177,7 +193,9 @@ void UpdateMenuTricks() {
std::string enabledTrickString;
enabledTricks.clear();
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::string enabledGlitchString;
@@ -279,6 +297,7 @@ void DrawTricksMenu(WidgetInfo& info) {
{ Rando::Tricks::Tag::EXTREME, true }, { Rando::Tricks::Tag::EXPERIMENTAL, true },
{ Rando::Tricks::Tag::GLITCH, false },
};
static ImGuiTextFilter trickSearch;
UIWidgets::PushStyleInput(THEME_COLOR);
trickSearch.Draw("Filter (inc,-exc)", 490.0f);
@@ -292,14 +311,7 @@ void DrawTricksMenu(WidgetInfo& info) {
enabledTricks.erase(etfound);
}
}
std::string enabledTrickString = "";
for (auto enabledTrickIt : enabledTricks) {
enabledTrickString += std::to_string(enabledTrickIt);
enabledTrickString += ",";
}
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
tricksDirty = true;
SaveEnabledTricks();
}
ImGui::SameLine();
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));
}
}
std::string enabledTrickString = "";
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;
SaveEnabledTricks();
}
}
if (ImGui::BeginTable("trickTags", static_cast<int>(showTag.size()),
@@ -364,21 +369,14 @@ void DrawTricksMenu(WidgetInfo& info) {
if (UIWidgets::Button("Enable Visible",
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
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)) &&
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeDisabled[option.GetArea()] &&
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
enabledTricks.insert(static_cast<RandomizerTrick>(i));
}
}
std::string enabledTrickString = "";
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;
SaveEnabledTricks();
}
ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
@@ -386,7 +384,7 @@ void DrawTricksMenu(WidgetInfo& info) {
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
bool hasTricks = false;
for (auto rt : trickIds) {
auto option = randoSettings->GetTrickOption(rt);
auto option = randoSettings->GetTrickSetting(rt);
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
hasTricks = true;
@@ -399,7 +397,7 @@ void DrawTricksMenu(WidgetInfo& info) {
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##disabled").c_str())) {
for (auto rt : trickIds) {
auto option = randoSettings->GetTrickOption(rt);
auto option = randoSettings->GetTrickSetting(rt);
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
ImGui::TreeNodeSetOpen(
@@ -409,17 +407,7 @@ void DrawTricksMenu(WidgetInfo& info) {
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Right)) {
enabledTricks.insert(rt);
std::string enabledTrickString = "";
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;
SaveEnabledTricks();
}
UIWidgets::PopStyleButton();
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());
@@ -458,25 +446,14 @@ void DrawTricksMenu(WidgetInfo& info) {
if (UIWidgets::Button("Disable Visible",
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
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)) &&
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeEnabled[option.GetArea()] &&
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
enabledTricks.erase(static_cast<RandomizerTrick>(i));
}
}
std::string enabledTrickString = "";
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;
SaveEnabledTricks();
}
ImGui::BeginChild("ChildTricksEnabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
@@ -484,7 +461,7 @@ void DrawTricksMenu(WidgetInfo& info) {
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
bool hasTricks = false;
for (auto rt : trickIds) {
auto option = randoSettings->GetTrickOption(rt);
auto option = randoSettings->GetTrickSetting(rt);
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
hasTricks = true;
@@ -497,7 +474,7 @@ void DrawTricksMenu(WidgetInfo& info) {
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##enabled").c_str())) {
for (auto rt : trickIds) {
auto option = randoSettings->GetTrickOption(rt);
auto option = randoSettings->GetTrickSetting(rt);
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
ImGui::TreeNodeSetOpen(
@@ -507,22 +484,7 @@ void DrawTricksMenu(WidgetInfo& info) {
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Left)) {
enabledTricks.erase(rt);
std::string enabledTrickString = "";
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;
SaveEnabledTricks();
}
UIWidgets::PopStyleButton();
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());