summaryrefslogtreecommitdiff
path: root/soh/assets
diff options
context:
space:
mode:
authorMalkierian <malkierian@gmail.com>2025-05-23 14:57:49 -0700
committerGitHub <noreply@github.com>2025-05-23 14:57:49 -0700
commit99c3fa600672c656dc39d2eb5efaff1b7ff8041c (patch)
treeea3851f56e3ffe042ccd90fcfd7000e2f5b9ae12 /soh/assets
parent3a069e621eed36a3c9fd801e87567f4fb13b1c31 (diff)
Preset Manager (#5459)
* Add presets sidebar, proof of concept row-based listing. * Complete and unify section check/x drawing. * Add error state to InputString, and corresponding members and builders to InputOptions. Implement saving and loading of preset files. * Implement `Config::SetBlock()`. Implement Apply. Implement Delete. Some json structure changes. * Apply `CVarClear()` calls in CVar-prefixed widget functions. * Comment out satellite preset pickers for now. * clang * Fix ButtonOptions initializer list. * I hate clang... * Loop new preset checkbox creation. Restore auto-resizing to new preset popup. Remove errant BeginDisabled in randomizer (merge artifact?). * Add BlockInfo struct to make array with all info for each block. Setup loops for all other same-ish situations (applying presets, setting up columns, etc) based on blockInfo. * Save tracker windows info for later restoration. Lay the groundwork for said restoration. * Complete tracker window restoration on preset application. * Fix RadioButtonsOptions builder parameter type. Add race lockout to new and apply buttons. * Revert application of CVarClear on UIWidgets widgets (need to preserve manually-set default states). * Remove enhancements satellite picker. Swap randomizer satellite picker to use the manager presets, only displays presets with randomizer section included. Move built-in presets to the asset archive, and remove delete button on them. Remove PresetEntries.cpp. * Fix locations and tricks tabs not updating live when applying preset with new system. * Apply RandoGenerating lockout to rando preset Apply button. * Fix new presets not being properly filtered in satellite selectors. * Fix currently selected presets getting deleted still being selected in satellite selectors. * Change BigPoeTargetCount in preset files to 1.
Diffstat (limited to 'soh/assets')
-rw-r--r--soh/assets/custom/presets/Main Default.json11
-rw-r--r--soh/assets/custom/presets/Main Enhanced.json56
-rw-r--r--soh/assets/custom/presets/Main Randomizer.json135
-rw-r--r--soh/assets/custom/presets/Main Vanilla+.json56
-rw-r--r--soh/assets/custom/presets/Rando Advanced.json69
-rw-r--r--soh/assets/custom/presets/Rando Beginner.json51
-rw-r--r--soh/assets/custom/presets/Rando Default.json9
-rw-r--r--soh/assets/custom/presets/Rando Hell Mode.json80
-rw-r--r--soh/assets/custom/presets/Rando Standard.json63
9 files changed, 530 insertions, 0 deletions
diff --git a/soh/assets/custom/presets/Main Default.json b/soh/assets/custom/presets/Main Default.json
new file mode 100644
index 000000000..7d87c3d95
--- /dev/null
+++ b/soh/assets/custom/presets/Main Default.json
@@ -0,0 +1,11 @@
+{
+ "blocks": {
+ "enhancements": {
+ "gCheats": null,
+ "gEnhancements": null,
+ "gRandoEnhancements": null
+ }
+ },
+ "presetName": "Main Default",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Main Enhanced.json b/soh/assets/custom/presets/Main Enhanced.json
new file mode 100644
index 000000000..026a78de7
--- /dev/null
+++ b/soh/assets/custom/presets/Main Enhanced.json
@@ -0,0 +1,56 @@
+{
+ "blocks": {
+ "enhancements": {
+ "gCheats": null,
+ "gEnhancements": {
+ "AssignableTunicsAndBoots": 1,
+ "Autosave": 1,
+ "BetterOwl": 1,
+ "CreditsFix": 1,
+ "CustomizeFrogsOcarinaGame": 1,
+ "DekuNutUpgradeFix": 1,
+ "DisableLOD": 1,
+ "DpadEquips": 1,
+ "DpadNoDropOcarinaInput": 1,
+ "DynamicWalletIcon": 1,
+ "EnemySpawnsOverWaterboxes": 1,
+ "FasterRupeeAccumulator": 1,
+ "FixBrokenGiantsKnife": 1,
+ "FixDaruniaDanceSpeed": 1,
+ "FixDungeonMinimapIcon": 1,
+ "FixEyesOpenWhileSleeping": 1,
+ "FixFloorSwitches": 1,
+ "FixHammerHand": 1,
+ "FixMenuLR": 1,
+ "FixSawSoftlock": 1,
+ "FixTexturesOOB": 1,
+ "FixVineFall": 1,
+ "FixZoraHintDialogue": 1,
+ "FrogsModifyFailTime": 2,
+ "GerudoWarriorClothingFix": 1,
+ "GravediggingTourFix": 1,
+ "InjectItemCounts": {
+ "GoldSkulltula": 1,
+ "HeartContainer": 1,
+ "HeartPiece": 1
+ },
+ "NaviTextFix": 1,
+ "PulsateBossIcon": 1,
+ "RedGanonBlood": 1,
+ "RememberMapToggleState": 1,
+ "SceneSpecificDirtPathFix": 1,
+ "SilverRupeeJingleExtend": 1,
+ "SkipSaveConfirmation": 1,
+ "SkipText": 1,
+ "TextSpeed": 5,
+ "TimeFlowFileSelect": 1,
+ "TwoHandedIdle": 1,
+ "VisualAgony": 1,
+ "WidescreenActorCulling": 1
+ },
+ "gRandoEnhancements": null
+ }
+ },
+ "presetName": "Main Enhanced",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Main Randomizer.json b/soh/assets/custom/presets/Main Randomizer.json
new file mode 100644
index 000000000..59c24e982
--- /dev/null
+++ b/soh/assets/custom/presets/Main Randomizer.json
@@ -0,0 +1,135 @@
+{
+ "blocks": {
+ "enhancements": {
+ "gCheats": {
+ "EasyFrameAdvance": 1
+ },
+ "gEnhancements": {
+ "AdultMasks": 1,
+ "AssignableTunicsAndBoots": 1,
+ "Autosave": 1,
+ "BetterAmmoRendering": 1,
+ "BetterBombchuShopping": 1,
+ "BetterFarore": 1,
+ "BetterOwl": 1,
+ "BombchusOOB": 1,
+ "ClimbSpeed": 3,
+ "CrawlSpeed": 2,
+ "CreditsFix": 1,
+ "CustomizeFishing": 1,
+ "CustomizeFrogsOcarinaGame": 1,
+ "CustomizeOcarinaGame": 1,
+ "DampeAllNight": 1,
+ "DampeWin": 1,
+ "DayGravePull": 1,
+ "DekuNutUpgradeFix": 1,
+ "DisableCritWiggle": 1,
+ "DisableFirstPersonChus": 1,
+ "DisableLOD": 1,
+ "DpadEquips": 1,
+ "DpadNoDropOcarinaInput": 1,
+ "DynamicWalletIcon": 1,
+ "EarlyEyeballFrog": 1,
+ "EnemySpawnsOverWaterboxes": 1,
+ "EquipmentCanBeRemoved": 1,
+ "ExtendedCullingExcludeGlitchActors": 1,
+ "FastBoomerang": 1,
+ "FastChests": 1,
+ "FastDrops": 1,
+ "FastFarores": 1,
+ "FastOcarinaPlayback": 1,
+ "FasterBlockPush": 5,
+ "FasterHeavyBlockLift": 1,
+ "FasterRupeeAccumulator": 1,
+ "FileSelectMoreInfo": 1,
+ "FishNeverEscape": 1,
+ "FixBrokenGiantsKnife": 1,
+ "FixDaruniaDanceSpeed": 1,
+ "FixDungeonMinimapIcon": 1,
+ "FixFloorSwitches": 1,
+ "FixHammerHand": 1,
+ "FixMenuLR": 1,
+ "FixSawSoftlock": 1,
+ "FixTexturesOOB": 1,
+ "FixVineFall": 1,
+ "FixZoraHintDialogue": 1,
+ "ForgeTime": 0,
+ "FrogsModifyFailTime": 2,
+ "GerudoWarriorClothingFix": 1,
+ "GoronPot": 1,
+ "GravediggingTourFix": 1,
+ "GuaranteeFishingBite": 1,
+ "HoverFishing": 1,
+ "IncludeHeldInputsBufferWindow": 1,
+ "InjectItemCounts": {
+ "GoldSkulltula": 1,
+ "HeartContainer": 1,
+ "HeartPiece": 1
+ },
+ "InstantPutaway": 1,
+ "InstantScarecrow": 1,
+ "MMBunnyHood": 1,
+ "MarketSneak": 1,
+ "MaskSelect": 1,
+ "MinimumFishWeightAdult": 6,
+ "MinimumFishWeightChild": 3,
+ "MweepSpeed": 5.0,
+ "N64WeirdFrames": 1,
+ "NaviTextFix": 1,
+ "NewDrops": 1,
+ "NoInputForCredits": 1,
+ "NutsExplodeBombs": 1,
+ "OcarinaGame": {
+ "StartingNotes": 5
+ },
+ "PauseMenuAnimatedLink": 1,
+ "PauseWarp": 1,
+ "PersistentMasks": 1,
+ "PulsateBossIcon": 1,
+ "QuickBongoKill": 1,
+ "QuickPutaway": 1,
+ "QuitFishingAtDoor": 1,
+ "RedGanonBlood": 1,
+ "RememberMapToggleState": 1,
+ "SceneSpecificDirtPathFix": 1,
+ "SeparateArrows": 1,
+ "ShowDoorLocksOnBothSides": 1,
+ "SilverRupeeJingleExtend": 1,
+ "SkipArrowAnimation": 1,
+ "SkipSaveConfirmation": 1,
+ "SkipSwimDeepEndAnim": 1,
+ "SkipText": 1,
+ "SlowTextSpeed": 5,
+ "SwordToggle": 1,
+ "TextSpeed": 5,
+ "TimeFlowFileSelect": 1,
+ "TimeSavers": {
+ "DisableTitleCard": 1,
+ "SkipChildStealth": 1,
+ "SkipCutscene": {
+ "BossIntro": 1,
+ "Entrances": 1,
+ "Intro": 1,
+ "LearnSong": 1,
+ "OnePoint": 1,
+ "QuickBossDeaths": 1,
+ "Story": 1
+ },
+ "SkipForcedDialog": 3,
+ "SkipMiscInteractions": 1,
+ "SkipOwlInteractions": 1,
+ "SkipTowerEscape": 1,
+ "SleepingWaterfall": 1
+ },
+ "ToTMedallionsColors": 1,
+ "ToggleStrength": 1,
+ "TwoHandedIdle": 1,
+ "VisualAgony": 1,
+ "WidescreenActorCulling": 1
+ },
+ "gRandoEnhancements": null
+ }
+ },
+ "presetName": "Main Randomizer",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Main Vanilla+.json b/soh/assets/custom/presets/Main Vanilla+.json
new file mode 100644
index 000000000..0f6c1741a
--- /dev/null
+++ b/soh/assets/custom/presets/Main Vanilla+.json
@@ -0,0 +1,56 @@
+{
+ "blocks": {
+ "enhancements": {
+ "gCheats": null,
+ "gEnhancements": {
+ "AssignableTunicsAndBoots": 1,
+ "Autosave": 1,
+ "BetterOwl": 1,
+ "CreditsFix": 1,
+ "CustomizeFrogsOcarinaGame": 1,
+ "DekuNutUpgradeFix": 1,
+ "DisableLOD": 1,
+ "DpadEquips": 1,
+ "DpadNoDropOcarinaInput": 1,
+ "DynamicWalletIcon": 1,
+ "EnemySpawnsOverWaterboxes": 1,
+ "FasterRupeeAccumulator": 1,
+ "FixBrokenGiantsKnife": 1,
+ "FixDaruniaDanceSpeed": 1,
+ "FixDungeonMinimapIcon": 1,
+ "FixEyesOpenWhileSleeping": 1,
+ "FixFloorSwitches": 1,
+ "FixHammerHand": 1,
+ "FixMenuLR": 1,
+ "FixSawSoftlock": 1,
+ "FixTexturesOOB": 1,
+ "FixVineFall": 1,
+ "FixZoraHintDialogue": 1,
+ "FrogsModifyFailTime": 2,
+ "GerudoWarriorClothingFix": 1,
+ "GravediggingTourFix": 1,
+ "InjectItemCounts": {
+ "GoldSkulltula": 1,
+ "HeartContainer": 1,
+ "HeartPiece": 1
+ },
+ "NaviTextFix": 1,
+ "PulsateBossIcon": 1,
+ "RedGanonBlood": 1,
+ "RememberMapToggleState": 1,
+ "SceneSpecificDirtPathFix": 1,
+ "SilverRupeeJingleExtend": 1,
+ "SkipSaveConfirmation": 1,
+ "SkipText": 1,
+ "TextSpeed": 5,
+ "TimeFlowFileSelect": 1,
+ "TwoHandedIdle": 1,
+ "VisualAgony": 1,
+ "WidescreenActorCulling": 1
+ },
+ "gRandoEnhancements": null
+ }
+ },
+ "presetName": "Main Vanilla+",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Rando Advanced.json b/soh/assets/custom/presets/Rando Advanced.json
new file mode 100644
index 000000000..4042c0688
--- /dev/null
+++ b/soh/assets/custom/presets/Rando Advanced.json
@@ -0,0 +1,69 @@
+{
+ "blocks": {
+ "rando": {
+ "gRandoSettings": {
+ "40GSHint": 1,
+ "50GSHint": 1,
+ "BigPoeTargetCount": 1,
+ "BlueFireArrows": 1,
+ "BombchuBag": 1,
+ "BossKeysanity": 5,
+ "ClosedForest": 2,
+ "CompleteMaskQuest": 1,
+ "CuccosToReturn": 1,
+ "DampeHint": 1,
+ "DoorOfTime": 2,
+ "EnableBombchuDrops": 1,
+ "FortressCarpenters": 1,
+ "FrogsHint": 1,
+ "FullWallets": 1,
+ "GanonTrial": 0,
+ "GerudoKeys": 3,
+ "GregHint": 1,
+ "HBAHint": 1,
+ "IncludeTycoonWallet": 1,
+ "KakarikoGate": 1,
+ "Keysanity": 5,
+ "LacsRewardCount": 8,
+ "MalonHint": 1,
+ "MerchantText": 1,
+ "RainbowBridge": 7,
+ "SariaHint": 1,
+ "ScrubsFixedPrice": 2,
+ "ScrubsPrices": 3,
+ "SheikLAHint": 0,
+ "Shopsanity": 1,
+ "ShopsanityCount": 7,
+ "ShopsanityPrices": 2,
+ "ShuffleAdultTrade": 1,
+ "ShuffleBossEntrances": 2,
+ "ShuffleCows": 1,
+ "ShuffleDekuNutBag": 1,
+ "ShuffleDekuStickBag": 1,
+ "ShuffleDungeonsEntrances": 2,
+ "ShuffleFrogSongRupees": 1,
+ "ShuffleGanonBossKey": 9,
+ "ShuffleGerudoToken": 1,
+ "ShuffleKeyRings": 2,
+ "ShuffleKeyRingsRandomCount": 4,
+ "ShuffleKokiriSword": 1,
+ "ShuffleMasterSword": 1,
+ "ShuffleMerchants": 3,
+ "ShuffleOcarinas": 1,
+ "ShuffleOverworldSpawns": 1,
+ "ShuffleScrubs": 2,
+ "ShuffleSongs": 2,
+ "ShuffleSwim": 1,
+ "ShuffleTokens": 3,
+ "SkipChildZelda": 1,
+ "SkipEponaRace": 1,
+ "SkipScarecrowsSong": 1,
+ "StartingAge": 2,
+ "StartingMapsCompasses": 0,
+ "SunlightArrows": 1
+ }
+ }
+ },
+ "presetName": "Rando Advanced",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Rando Beginner.json b/soh/assets/custom/presets/Rando Beginner.json
new file mode 100644
index 000000000..595734fe0
--- /dev/null
+++ b/soh/assets/custom/presets/Rando Beginner.json
@@ -0,0 +1,51 @@
+{
+ "blocks": {
+ "rando": {
+ "gRandoSettings": {
+ "10GSHint": 1,
+ "20GSHint": 1,
+ "30GSHint": 1,
+ "40GSHint": 1,
+ "50GSHint": 1,
+ "BigPoeTargetCount": 1,
+ "BiggoronHint": 1,
+ "BlueFireArrows": 1,
+ "BossKeysanity": 2,
+ "ClosedForest": 2,
+ "CompleteMaskQuest": 1,
+ "CuccosToReturn": 1,
+ "DampeHint": 1,
+ "DoorOfTime": 2,
+ "EnableBombchuDrops": 1,
+ "ExcludedLocations": "147,148,233,323,",
+ "FortressCarpenters": 1,
+ "FrogsHint": 1,
+ "FullWallets": 1,
+ "GanonTrial": 0,
+ "GregHint": 1,
+ "HBAHint": 1,
+ "IncludeTycoonWallet": 1,
+ "KakarikoGate": 1,
+ "Keysanity": 2,
+ "LacsRewardCount": 6,
+ "MalonHint": 1,
+ "MerchantText": 1,
+ "RainbowBridge": 7,
+ "SariaHint": 1,
+ "SheikLAHint": 0,
+ "ShuffleGanonBossKey": 9,
+ "ShuffleOcarinas": 1,
+ "SkipChildZelda": 1,
+ "SkipEponaRace": 1,
+ "SkipScarecrowsSong": 1,
+ "StartingKokiriSword": 1,
+ "StartingMapsCompasses": 0,
+ "StartingOcarina": 1,
+ "SunlightArrows": 1,
+ "ZorasFountain": 1
+ }
+ }
+ },
+ "presetName": "Rando Beginner",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Rando Default.json b/soh/assets/custom/presets/Rando Default.json
new file mode 100644
index 000000000..f5c5818e9
--- /dev/null
+++ b/soh/assets/custom/presets/Rando Default.json
@@ -0,0 +1,9 @@
+{
+ "blocks": {
+ "rando": {
+ "gRandoSettings": null
+ }
+ },
+ "presetName": "Rando Default",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Rando Hell Mode.json b/soh/assets/custom/presets/Rando Hell Mode.json
new file mode 100644
index 000000000..d42727127
--- /dev/null
+++ b/soh/assets/custom/presets/Rando Hell Mode.json
@@ -0,0 +1,80 @@
+{
+ "blocks": {
+ "rando": {
+ "gRandoSettings": {
+ "BigPoeTargetCount": 1,
+ "BlueFireArrows": 1,
+ "BombchuBag": 1,
+ "BossKeysanity": 5,
+ "ClosedForest": 2,
+ "CuccosToReturn": 1,
+ "DecoupleEntrances": 1,
+ "DoorOfTime": 2,
+ "EnableBombchuDrops": 1,
+ "Fishsanity": 4,
+ "FishsanityAgeSplit": 1,
+ "FishsanityPondCount": 17,
+ "GerudoKeys": 3,
+ "IncludeTycoonWallet": 1,
+ "KakarikoGate": 1,
+ "Keysanity": 5,
+ "LacsRewardCount": 10,
+ "LacsRewardOptions": 1,
+ "LockOverworldDoors": 1,
+ "MixBosses": 1,
+ "MixDungeons": 1,
+ "MixGrottos": 1,
+ "MixInteriors": 1,
+ "MixOverworld": 1,
+ "MixedEntrances": 1,
+ "RainbowBridge": 7,
+ "ScrubsPrices": 2,
+ "Shopsanity": 1,
+ "ShopsanityCount": 7,
+ "ShopsanityPrices": 2,
+ "Shuffle100GSReward": 1,
+ "ShuffleAdultTrade": 1,
+ "ShuffleBeehives": 1,
+ "ShuffleBossEntrances": 2,
+ "ShuffleBossSouls": 2,
+ "ShuffleChildWallet": 1,
+ "ShuffleCows": 1,
+ "ShuffleCrates": 3,
+ "ShuffleDekuNutBag": 1,
+ "ShuffleDekuStickBag": 1,
+ "ShuffleDungeonsEntrances": 2,
+ "ShuffleFairies": 1,
+ "ShuffleFishingPole": 1,
+ "ShuffleFreestanding": 3,
+ "ShuffleFrogSongRupees": 1,
+ "ShuffleGanonBossKey": 9,
+ "ShuffleGerudoToken": 1,
+ "ShuffleGrass": 3,
+ "ShuffleGrottosEntrances": 1,
+ "ShuffleInteriorsEntrances": 2,
+ "ShuffleKokiriSword": 1,
+ "ShuffleMasterSword": 1,
+ "ShuffleMerchants": 3,
+ "ShuffleOcarinaButtons": 1,
+ "ShuffleOcarinas": 1,
+ "ShuffleOverworldEntrances": 1,
+ "ShuffleOverworldSpawns": 1,
+ "ShuffleOwlDrops": 1,
+ "ShufflePots": 3,
+ "ShuffleScrubs": 2,
+ "ShuffleSongs": 2,
+ "ShuffleSwim": 1,
+ "ShuffleTokens": 3,
+ "ShuffleWarpSongs": 1,
+ "ShuffleWeirdEgg": 1,
+ "SkipEponaRace": 1,
+ "StartingAge": 2,
+ "StartingHearts": 0,
+ "StartingMapsCompasses": 5,
+ "SunlightArrows": 1
+ }
+ }
+ },
+ "presetName": "Rando Hell Mode",
+ "isBuiltIn": true
+} \ No newline at end of file
diff --git a/soh/assets/custom/presets/Rando Standard.json b/soh/assets/custom/presets/Rando Standard.json
new file mode 100644
index 000000000..ad91912de
--- /dev/null
+++ b/soh/assets/custom/presets/Rando Standard.json
@@ -0,0 +1,63 @@
+{
+ "blocks": {
+ "rando": {
+ "gRandoSettings": {
+ "10GSHint": 1,
+ "20GSHint": 1,
+ "30GSHint": 1,
+ "40GSHint": 1,
+ "50GSHint": 1,
+ "BigPoeTargetCount": 1,
+ "BiggoronHint": 1,
+ "BlueFireArrows": 1,
+ "BombchuBag": 1,
+ "BossKeysanity": 2,
+ "ClosedForest": 2,
+ "CompleteMaskQuest": 1,
+ "CuccosToReturn": 1,
+ "DampeHint": 1,
+ "DoorOfTime": 2,
+ "EnableBombchuDrops": 1,
+ "FortressCarpenters": 1,
+ "FrogsHint": 1,
+ "FullWallets": 1,
+ "GanonTrial": 0,
+ "GregHint": 1,
+ "HBAHint": 1,
+ "IncludeTycoonWallet": 1,
+ "KakarikoGate": 1,
+ "Keysanity": 5,
+ "LacsRewardCount": 7,
+ "MalonHint": 1,
+ "MerchantText": 1,
+ "RainbowBridge": 7,
+ "SariaHint": 1,
+ "ScrubsFixedPrice": 2,
+ "ScrubsPrices": 3,
+ "SheikLAHint": 0,
+ "Shopsanity": 1,
+ "ShopsanityCount": 4,
+ "ShopsanityPrices": 2,
+ "ShuffleGanonBossKey": 9,
+ "ShuffleGerudoToken": 1,
+ "ShuffleKeyRings": 2,
+ "ShuffleKeyRingsRandomCount": 8,
+ "ShuffleKokiriSword": 1,
+ "ShuffleMerchants": 1,
+ "ShuffleOcarinas": 1,
+ "ShuffleScrubs": 2,
+ "ShuffleSongs": 2,
+ "ShuffleTokens": 3,
+ "SkipChildZelda": 1,
+ "SkipEponaRace": 1,
+ "SkipScarecrowsSong": 1,
+ "StartingMapsCompasses": 0,
+ "StartingOcarina": 1,
+ "SunlightArrows": 1,
+ "ZorasFountain": 1
+ }
+ }
+ },
+ "presetName": "Rando Standard",
+ "isBuiltIn": true
+} \ No newline at end of file