Shipwright/soh/soh/Enhancements/presets.h

1198 lines
46 KiB
C++

#pragma once
#include <map>
#include <string>
#include <vector>
#include <variant>
#include <cstdint>
#include "soh/Enhancements/randomizer/randomizerTypes.h"
#include "soh/Enhancements/enhancementTypes.h"
#include "soh/OTRGlobals.h"
enum PresetEntryType {
PRESET_ENTRY_TYPE_S32,
PRESET_ENTRY_TYPE_FLOAT,
PRESET_ENTRY_TYPE_STRING,
PRESET_ENTRY_TYPE_CPP_STRING,
};
enum PresetType {
PRESET_TYPE_ENHANCEMENTS,
PRESET_TYPE_RANDOMIZER,
};
enum EnhancementPreset {
ENHANCEMENT_PRESET_DEFAULT,
ENHANCEMENT_PRESET_VANILLA_PLUS,
ENHANCEMENT_PRESET_ENHANCED,
ENHANCEMENT_PRESET_RANDOMIZER,
};
enum RandomizerPreset {
RANDOMIZER_PRESET_DEFAULT,
RANDOMIZER_PRESET_SPOCK_RACE,
RANDOMIZER_PRESET_SPOCK_RACE_NO_LOGIC,
RANDOMIZER_PRESET_S6,
RANDOMIZER_PRESET_HELL_MODE,
};
typedef struct PresetEntry {
const char* cvar;
PresetEntryType type;
std::variant<int32_t, float, const char*, std::string> value;
} PresetEntry;
std::string FormatLocations(std::vector<RandomizerCheck> locs);
#define PRESET_ENTRY_S32(cvar, value) \
{ cvar, PRESET_ENTRY_TYPE_S32, value }
#define PRESET_ENTRY_FLOAT(cvar, value) \
{ cvar, PRESET_ENTRY_TYPE_FLOAT, value }
#define PRESET_ENTRY_STRING(cvar, value) \
{ cvar, PRESET_ENTRY_TYPE_STRING, value }
#define PRESET_ENTRY_CPP_STRING(cvar, value) \
{ cvar, PRESET_ENTRY_TYPE_CPP_STRING, value }
void DrawPresetSelector(PresetType presetType);
void clearCvars(std::vector<const char*> cvarsToClear);
void applyPreset(std::vector<PresetEntry> entries);
// TODO: Ideally everything below this point will come from one/many JSON files
const std::vector<const char*> enhancementsCvars = {
"gDpadPause",
"gDpadText",
"gDpadOcarina",
"gRStickOcarina",
"gDpadEquips",
"gPauseAnyCursor",
"gDpadNoDropOcarinaInput",
"gNaviOnL",
"gInvertXAxis",
"gInvertYAxis",
"gRightStickAiming",
"gDisableAutoCenterViewFirstPerson",
"gTextSpeed",
"gMweepSpeed",
"gForgeTime",
"gClimbSpeed",
"gFasterBlockPush",
"gCrawlSpeed",
"gFasterHeavyBlockLift",
"gNoForcedNavi",
"gSkulltulaFreeze",
"gMMBunnyHood",
"gAdultBunnyHood",
"gFastChests",
"gChestSizeAndTextureMatchesContents",
"gFastDrops",
"gBetterOwl",
"gFastOcarinaPlayback",
"gInstantPutaway",
"gFastBoomerang",
"gAskToEquip",
"gMaskSelect",
"gRememberSaveLocation",
"gDamageMul",
"gFallDamageMul",
"gVoidDamageMul",
"gBonkDamageMul",
"gNoRandomDrops",
"gNoHeartDrops",
"gBombchuDrops",
"gGoronPot",
"gFullHealthSpawn",
"gDampeWin",
"gRedPotionEffect",
"gRedPotionHealth",
"gRedPercentRestore",
"gGreenPotionEffect",
"gGreenPotionMana",
"gGreenPercentRestore",
"gBluePotionEffects",
"gBluePotionHealth",
"gBlueHealthPercentRestore",
"gBluePotionMana",
"gBlueManaPercentRestore",
"gMilkEffect",
"gMilkHealth",
"gMilkPercentRestore",
"gSeparateHalfMilkEffect",
"gHalfMilkHealth",
"gHalfMilkPercentRestore",
"gFairyEffect",
"gFairyHealth",
"gFairyPercentRestore",
"gFairyReviveEffect",
"gFairyReviveHealth",
"gFairyRevivePercentRestore",
"gCustomizeFishing",
"gInstantFishing",
"gGuaranteeFishingBite",
"gFishNeverEscape",
"gChildMinimumWeightFish",
"gAdultMinimumWeightFish",
"gLowHpAlarm",
"gMinimalUI",
"gDisableNaviCallAudio",
"gVisualAgony",
"gAssignableTunicsAndBoots",
"gEquipmentCanBeRemoved",
"gCowOfTime",
"gGuardVision",
"gTimeFlowFileSelect",
"gInjectItemCounts",
"gDayGravePull",
"gDampeAllNight",
"gQuitFishingAtDoor",
"gSkipSwimDeepEndAnim",
"gSkipScarecrow",
"gBlueFireArrows",
"gSunlightArrows",
"gPauseLiveLinkRotation",
"gPauseLiveLink",
"gMinFrameCount",
"gN64Mode",
"gNewDrops",
"gDisableBlackBars",
"gDynamicWalletIcon",
"gAlwaysShowDungeonMinimapIcon",
"gUniformLR",
"gNGCKaleidoSwitcher",
"gFixDungeonMinimapIcon",
"gTwoHandedIdle",
"gGravediggingTourFix",
"gDekuNutUpgradeFix",
"gNaviTextFix",
"gAnubisFix",
"gCrouchStabHammerFix",
"gCrouchStabFix",
"gGerudoWarriorClothingFix",
"gFixCameraDrift",
"gFixCameraSwing",
"gFixHangingLedgeSwingRate",
"gRedGanonBlood",
"gHoverFishing",
"gN64WeirdFrames",
"gBombchusOOB",
"gQuickPutaway",
"gGsCutscene",
"gRestoreRBAValues",
"gSkipSaveConfirmation",
"gAutosave",
"gDisableCritWiggle",
"gChestSizeDependsStoneOfAgony",
"gSkipArrowAnimation",
"gSeparateArrows",
"gCustomizeShootingGallery",
"gInstantShootingGalleryWin",
"gConstantAdultGallery",
"gChildShootingGalleryAmmunition",
"gAdultShootingGalleryAmmunition",
"gCustomizeBombchuBowling",
"gBombchuBowlingNoSmallCucco",
"gBombchuBowlingNoBigCucco",
"gBombchuBowlingAmmunition",
"gCustomizeOcarinaGame",
"gInstantOcarinaGameWin",
"gOcarinaGameNoteSpeed",
"gOcarinaUnlimitedFailTime",
"gOcarinaGameStartingNotes",
"gOcarinaGameRoundOneNotes",
"gOcarinaGameRoundTwoNotes",
"gOcarinaGameRoundThreeNotes",
"gCreditsFix",
"gSilverRupeeJingleExtend",
"gStaticExplosionRadius",
"gNoInputForCredits",
"gFastFarores",
"gNightGSAlwaysSpawn",
"gSkipText",
"gLinkDefaultName",
"gMarketSneak",
"gTimeTravel",
"gNutsExplodeBombs",
"gBowSlingShotAmmoFix",
"gBetterFW",
"gDisableFirstPersonChus",
"gHyperBosses",
"gRupeeDash",
"gDashInterval",
"gDogFollowsEverywhere",
"gDisableTunicWarningText",
"gDisableLOD",
"gDisableDrawDistance",
"gDisableKokiriDrawDistance",
"gLowResMode",
"gDrawLineupTick",
"gQuickBongoKill",
"gFPSGauntlets",
"gSceneSpecificDirtPathFix",
"gZFightingMode",
"gAuthenticLogo",
"gPauseLiveLinkRotationSpeed",
"gBowReticle",
"gFixTexturesOOB",
"gIvanCoopModeEnabled",
"gEnemySpawnsOverWaterboxes",
"gTreeStickDrops",
"gShadowTag",
"gRandomizedEnemySizes",
"gRandomizedEnemies",
"gMirroredWorldMode",
"gMirroredWorld",
"gHyperEnemies",
"gHookshotableReticle",
"gHideBunnyHood",
"gFixVineFall",
"gFileSelectMoreInfo",
"gEnemyHealthBar",
"gBushDropFix",
"gAllDogsRichard",
"gAddTraps.enabled",
"gAddTraps.Ammo",
"gAddTraps.Bomb",
"gAddTraps.Burn",
"gAddTraps.Ice",
"gAddTraps.Kill",
"gAddTraps.Knock",
"gAddTraps.Shock",
"gAddTraps.Speed",
"gAddTraps.Tele",
"gAddTraps.Void",
"gToTMedallionsColors",
"gCuccoStayDurationMultiplier",
"gDeleteFileOnDeath",
"gEnemySizeScalesHealth",
"gEnhancements.BetterAmmoRendering",
"gEnhancements.EquimentAlwaysVisible",
"gEnhancements.FixDaruniaDanceSpeed",
"gEnhancements.OpenAllHours",
"gEnhancements.ResetNaviTimer",
"gEnhancements.ScaleAdultEquimentAsChild",
"gEnhancements.LeeverSpawnRate",
"gEnhancements.SwordToggle",
"gEnhancements.FixFloorSwitches",
"gFixZoraHintDialogue",
"gHurtContainer",
"gPauseWarp",
"gPermanentHeartLoss",
"gRemoveExplosiveLimit",
"gToggleStrength",
};
const std::vector<const char*> cheatCvars = {
"gConsoleEnabled",
"gActorViewerEnabled",
"gCollisionViewerEnabled",
"gDLViewerEnabled",
"gSaveEditorEnabled",
"gEnableWalkModify",
"gWalkSpeedToggle",
"gWalkModifierOne",
"gWalkModifierTwo",
"gSwimModifierOne",
"gSwimModifierTwo",
"gGoronPot",
"gDampeWin",
"gCustomizeShootingGallery",
"gCustomizeBombchuBowling",
"gCustomizeFishing",
"gInfiniteAmmo",
"gInfiniteEpona",
"gInfiniteHealth",
"gInfiniteMagic",
"gInfiniteMoney",
"gInfiniteNayru",
"gNoClip",
"gClimbEverything",
"gHookshotEverything",
"gCheatHookshotReachMultiplier",
"gMoonJumpOnL",
"gSuperTunic",
"gEzISG",
"gEzQPA",
"gTimelessEquipment",
"gCheatEasyPauseBufferEnabled",
"gCheatEasyInputBufferingEnabled",
"gNoRestrictItems",
"gFreezeTime",
"gPrevTime",
"gDropsDontDie",
"gFireproofDekuShield",
"gShieldTwoHanded",
"gTimeSync",
"gDebugEnabled",
"gSkulltulaDebugEnabled",
"gSkipLogoTitle",
"gSaveFileID",
"gEnableBetaQuest",
"gBetterDebugWarpScreen",
"gSwitchAge",
"gSwitchTimeline",
"gNoRedeadFreeze",
"gNoKeeseGuayTarget",
"gBombTimerMultiplier",
"gNoFishDespawn",
"gNoBugsDespawn",
"gWalkModifierDoesntChangeJump",
"gStatsEnabled",
"gSaveStatesEnabled",
"gSaveStatePromise",
"gRegEditEnabled",
"gPreset0",
"gPreset1",
"gDekuStickCheat",
"gDebugWarpScreenTranslation",
"gDebugSaveFileMode",
"gCosmetics.Link_BodyScale.Changed",
"gCosmetics.Link_BodyScale.Value",
"gCosmetics.Link_HeadScale.Changed",
"gCosmetics.Link_HeadScale.Value",
"gCosmetics.Link_SwordScale.Changed",
"gCosmetics.Link_SwordScale.Value",
"gEnhancements.RememberMapToggleState",
};
const std::vector<const char*> randomizerCvars = {
RANDOMIZER_SEED_CVAR("10GSHint"),
RANDOMIZER_SEED_CVAR("20GSHint"),
RANDOMIZER_SEED_CVAR("30GSHint"),
RANDOMIZER_SEED_CVAR("40GSHint"),
RANDOMIZER_SEED_CVAR("50GSHint"),
RANDOMIZER_SEED_CVAR("AllLocationsReachable"),
RANDOMIZER_SEED_CVAR("AltarHint"),
RANDOMIZER_SEED_CVAR("BigPoeTargetCount"),
RANDOMIZER_SEED_CVAR("BlueFireArrows"),
RANDOMIZER_SEED_CVAR("BombchusInLogic"),
RANDOMIZER_SEED_CVAR("BossKeysanity"),
RANDOMIZER_SEED_CVAR("BridgeRewardOptions"),
RANDOMIZER_SEED_CVAR("CompleteMaskQuest"),
RANDOMIZER_SEED_CVAR("CuccosToReturn"),
RANDOMIZER_SEED_CVAR("DampeHint"),
RANDOMIZER_SEED_CVAR("DecoupleEntrances"),
RANDOMIZER_SEED_CVAR("DoorOfTime"),
RANDOMIZER_SEED_CVAR("DungeonCount"),
RANDOMIZER_SEED_CVAR("EnableBombchuDrops"),
RANDOMIZER_SEED_CVAR("EnableGlitchCutscenes"),
RANDOMIZER_SEED_CVAR("EnabledGlitches"),
RANDOMIZER_SEED_CVAR("EnabledTricks"),
RANDOMIZER_SEED_CVAR("ExcludedLocations"),
RANDOMIZER_SEED_CVAR("Forest"),
RANDOMIZER_SEED_CVAR("FullWallets"),
RANDOMIZER_SEED_CVAR("GanonTrial"),
RANDOMIZER_SEED_CVAR("GanonTrialCount"),
RANDOMIZER_SEED_CVAR("GerudoFortress"),
RANDOMIZER_SEED_CVAR("GerudoKeys"),
RANDOMIZER_SEED_CVAR("GossipStoneHints"),
RANDOMIZER_SEED_CVAR("GsExpectSunsSong"),
RANDOMIZER_SEED_CVAR("HintClarity"),
RANDOMIZER_SEED_CVAR("HintDistribution"),
RANDOMIZER_SEED_CVAR("IceTraps"),
RANDOMIZER_SEED_CVAR("ItemPool"),
RANDOMIZER_SEED_CVAR("KakarikoGate"),
RANDOMIZER_SEED_CVAR("Keysanity"),
RANDOMIZER_SEED_CVAR("LacsDungeonCount"),
RANDOMIZER_SEED_CVAR("LacsMedallionCount"),
RANDOMIZER_SEED_CVAR("LacsRewardCount"),
RANDOMIZER_SEED_CVAR("LacsRewardOptions"),
RANDOMIZER_SEED_CVAR("LacsStoneCount"),
RANDOMIZER_SEED_CVAR("LacsTokenCount"),
RANDOMIZER_SEED_CVAR("LAHint"),
RANDOMIZER_SEED_CVAR("LinksPocket"),
RANDOMIZER_SEED_CVAR("LogicRules"),
RANDOMIZER_SEED_CVAR("MedallionCount"),
RANDOMIZER_SEED_CVAR("MixDungeons"),
RANDOMIZER_SEED_CVAR("MixedEntrances"),
RANDOMIZER_SEED_CVAR("MixGrottos"),
RANDOMIZER_SEED_CVAR("MixInteriors"),
RANDOMIZER_SEED_CVAR("MixOverworld"),
RANDOMIZER_SEED_CVAR("MQDungeonCount"),
RANDOMIZER_SEED_CVAR("MQDungeons"),
RANDOMIZER_SEED_CVAR("RainbowBridge"),
RANDOMIZER_SEED_CVAR("RewardCount"),
RANDOMIZER_SEED_CVAR("ScrubText"),
RANDOMIZER_SEED_CVAR("Shopsanity"),
RANDOMIZER_SEED_CVAR("ShopsanityPrices"),
RANDOMIZER_SEED_CVAR("ShopsanityPricesAffordable"),
RANDOMIZER_SEED_CVAR("ShuffleAdultTrade"),
RANDOMIZER_SEED_CVAR("ShuffleBeans"),
RANDOMIZER_SEED_CVAR("ShuffleBossEntrances"),
RANDOMIZER_SEED_CVAR("ShuffleCows"),
RANDOMIZER_SEED_CVAR("ShuffleDungeonReward"),
RANDOMIZER_SEED_CVAR("ShuffleDungeonsEntrances"),
RANDOMIZER_SEED_CVAR("ShuffleFrogSongRupees"),
RANDOMIZER_SEED_CVAR("ShuffleGanonBossKey"),
RANDOMIZER_SEED_CVAR("ShuffleGerudoToken"),
RANDOMIZER_SEED_CVAR("ShuffleGrottosEntrances"),
RANDOMIZER_SEED_CVAR("ShuffleInteriorsEntrances"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRings"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsBottomOfTheWell"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsFireTemple"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsForestTemple"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsGanonsCastle"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsGerudoFortress"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsGTG"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsRandomCount"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsShadowTemple"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsSpiritTemple"),
RANDOMIZER_SEED_CVAR("ShuffleKeyRingsWaterTemple"),
RANDOMIZER_SEED_CVAR("ShuffleKokiriSword"),
RANDOMIZER_SEED_CVAR("ShuffleMerchants"),
RANDOMIZER_SEED_CVAR("ShuffleOcarinas"),
RANDOMIZER_SEED_CVAR("ShuffleOverworldEntrances"),
RANDOMIZER_SEED_CVAR("ShuffleOverworldSpawns"),
RANDOMIZER_SEED_CVAR("ShuffleOwlDrops"),
RANDOMIZER_SEED_CVAR("ShuffleScrubs"),
RANDOMIZER_SEED_CVAR("ShuffleSongs"),
RANDOMIZER_SEED_CVAR("ShuffleTokens"),
RANDOMIZER_SEED_CVAR("ShuffleWarpSongs"),
RANDOMIZER_SEED_CVAR("ShuffleWeirdEgg"),
RANDOMIZER_SEED_CVAR("SkipChildStealth"),
RANDOMIZER_SEED_CVAR("SkipChildZelda"),
RANDOMIZER_SEED_CVAR("SkipEponaRace"),
RANDOMIZER_SEED_CVAR("SkipScarecrowsSong"),
RANDOMIZER_SEED_CVAR("SkipTowerEscape"),
RANDOMIZER_SEED_CVAR("StartingAge"),
RANDOMIZER_SEED_CVAR("StartingConsumables"),
RANDOMIZER_SEED_CVAR("StartingBoleroOfFire"),
RANDOMIZER_SEED_CVAR("StartingDekuShield"),
RANDOMIZER_SEED_CVAR("StartingEponasSong"),
RANDOMIZER_SEED_CVAR("StartingKokiriSword"),
RANDOMIZER_SEED_CVAR("StartingMapsCompasses"),
RANDOMIZER_SEED_CVAR("StartingMinuetOfForest"),
RANDOMIZER_SEED_CVAR("StartingNocturneOfShadow"),
RANDOMIZER_SEED_CVAR("StartingOcarina"),
RANDOMIZER_SEED_CVAR("StartingPreludeOfLight"),
RANDOMIZER_SEED_CVAR("StartingRequiemOfSpirit"),
RANDOMIZER_SEED_CVAR("StartingSariasSong"),
RANDOMIZER_SEED_CVAR("StartingSerenadeOfWater"),
RANDOMIZER_SEED_CVAR("StartingSkulltulaToken"),
RANDOMIZER_SEED_CVAR("StartingSongOfStorms"),
RANDOMIZER_SEED_CVAR("StartingSongOfTime"),
RANDOMIZER_SEED_CVAR("StartingSunsSong"),
RANDOMIZER_SEED_CVAR("StartingZeldasLullaby"),
RANDOMIZER_SEED_CVAR("StoneCount"),
RANDOMIZER_SEED_CVAR("SunlightArrows"),
RANDOMIZER_SEED_CVAR("TokenCount"),
RANDOMIZER_SEED_CVAR("WarpSongText"),
RANDOMIZER_SEED_CVAR("ZorasFountain"),
RANDOMIZER_SEED_CVAR("Shuffle100GSReward"),
RANDOMIZER_SEED_CVAR("GregHint"),
RANDOMIZER_SEED_CVAR("ManualSeedEntry"),
RANDOMIZER_SEED_CVAR("TriforceHuntTotalPieces"),
RANDOMIZER_SEED_CVAR("TriforceHuntRequiredPieces"),
RANDOMIZER_SEED_CVAR("TriforceHunt"),
RANDOMIZER_SEED_CVAR("ShuffleMasterSword"),
RANDOMIZER_SEED_CVAR("SariaHint"),
"gRandomizeRupeeNames",
RANDOMIZER_SEED_CVAR("FrogsHint"),
"gRandoRelevantNavi",
"gRandoQuestItemFanfares",
};
const std::vector<PresetEntry> vanillaPlusPresetEntries = {
// D-pad Support in text and file select
PRESET_ENTRY_S32("gDpadText", 1),
// Play Ocarina with D-pad
PRESET_ENTRY_S32("gDpadOcarina", 1),
// Play Ocarina with Right Stick
PRESET_ENTRY_S32("gRStickOcarina", 1),
// D-pad as Equip Items
PRESET_ENTRY_S32("gDpadEquips", 1),
// Prevent Dropped Ocarina Inputs
PRESET_ENTRY_S32("gDpadNoDropOcarinaInput", 1),
// Right Stick Aiming
PRESET_ENTRY_S32("gRightStickAiming", 1),
// Text Speed (1 to 5)
PRESET_ENTRY_S32("gTextSpeed", 5),
// Skip Text
PRESET_ENTRY_S32("gSkipText", 1),
// King Zora Speed (1 to 5)
PRESET_ENTRY_S32("gMweepSpeed", 2),
// Faster Block Push (+0 to +5)
PRESET_ENTRY_S32("gFasterBlockPush", 5),
// Better Owl
PRESET_ENTRY_S32("gBetterOwl", 1),
// Assignable Tunics and Boots
PRESET_ENTRY_S32("gAssignableTunicsAndBoots", 1),
// Enable passage of time on file select
PRESET_ENTRY_S32("gTimeFlowFileSelect", 1),
// Inject Item Counts in messages
PRESET_ENTRY_S32("gInjectItemCounts", 1),
// Pause link animation (0 to 16)
PRESET_ENTRY_S32("gPauseLiveLink", 1),
// Dynamic Wallet Icon
PRESET_ENTRY_S32("gDynamicWalletIcon", 1),
// Always show dungeon entrances
PRESET_ENTRY_S32("gAlwaysShowDungeonMinimapIcon", 1),
// Fix L&R Pause menu
PRESET_ENTRY_S32("gUniformLR", 1),
// Fix Dungeon entrances
PRESET_ENTRY_S32("gFixDungeonMinimapIcon", 1),
// Fix Two Handed idle animations
PRESET_ENTRY_S32("gTwoHandedIdle", 1),
// Fix the Gravedigging Tour Glitch
PRESET_ENTRY_S32("gGravediggingTourFix", 1),
// Fix Deku Nut upgrade
PRESET_ENTRY_S32("gDekuNutUpgradeFix", 1),
// Fix Navi text HUD position
PRESET_ENTRY_S32("gNaviTextFix", 1),
// Extend Silver Rupee Jingle
PRESET_ENTRY_S32("gSilverRupeeJingleExtend", 1),
// Fix some Floor Switches
PRESET_ENTRY_S32("gEnhancements.FixFloorSwitches", 1),
// Red Ganon blood
PRESET_ENTRY_S32("gRedGanonBlood", 1),
// Fish while hovering
PRESET_ENTRY_S32("gHoverFishing", 1),
// N64 Weird Frames
PRESET_ENTRY_S32("gN64WeirdFrames", 1),
// Bombchus out of bounds
PRESET_ENTRY_S32("gBombchusOOB", 1),
// Quick Putaway
PRESET_ENTRY_S32("gQuickPutaway", 1),
// Skip save confirmation
PRESET_ENTRY_S32("gSkipSaveConfirmation", 1),
};
const std::vector<PresetEntry> enhancedPresetEntries = {
// D-pad Support in text and file select
PRESET_ENTRY_S32("gDpadText", 1),
// Play Ocarina with D-pad
PRESET_ENTRY_S32("gDpadOcarina", 1),
// Play Ocarina with Right Stick
PRESET_ENTRY_S32("gRStickOcarina", 1),
// D-pad as Equip Items
PRESET_ENTRY_S32("gDpadEquips", 1),
// Prevent Dropped Ocarina Inputs
PRESET_ENTRY_S32("gDpadNoDropOcarinaInput", 1),
// Right Stick Aiming
PRESET_ENTRY_S32("gRightStickAiming", 1),
// Text Speed (1 to 5)
PRESET_ENTRY_S32("gTextSpeed", 5),
// Skip Text
PRESET_ENTRY_S32("gSkipText", 1),
// King Zora Speed (1 to 5)
PRESET_ENTRY_S32("gMweepSpeed", 5),
// Faster Block Push (+0 to +5)
PRESET_ENTRY_S32("gFasterBlockPush", 5),
// Better Owl
PRESET_ENTRY_S32("gBetterOwl", 1),
// Assignable Tunics and Boots
PRESET_ENTRY_S32("gAssignableTunicsAndBoots", 1),
// Enable passage of time on file select
PRESET_ENTRY_S32("gTimeFlowFileSelect", 1),
// Inject Item Counts in messages
PRESET_ENTRY_S32("gInjectItemCounts", 1),
// Pause link animation (0 to 16)
PRESET_ENTRY_S32("gPauseLiveLink", 1),
// Dynamic Wallet Icon
PRESET_ENTRY_S32("gDynamicWalletIcon", 1),
// Always show dungeon entrances
PRESET_ENTRY_S32("gAlwaysShowDungeonMinimapIcon", 1),
// Fix L&R Pause menu
PRESET_ENTRY_S32("gUniformLR", 1),
// Fix Dungeon entrances
PRESET_ENTRY_S32("gFixDungeonMinimapIcon", 1),
// Fix Two Handed idle animations
PRESET_ENTRY_S32("gTwoHandedIdle", 1),
// Fix the Gravedigging Tour Glitch
PRESET_ENTRY_S32("gGravediggingTourFix", 1),
// Fix Deku Nut upgrade
PRESET_ENTRY_S32("gDekuNutUpgradeFix", 1),
// Fix Navi text HUD position
PRESET_ENTRY_S32("gNaviTextFix", 1),
// Extend Silver Rupee Jingle
PRESET_ENTRY_S32("gSilverRupeeJingleExtend", 1),
// Fix enemies not spawning on ground over water
PRESET_ENTRY_S32("gEnemySpawnsOverWaterboxes", 1),
// Fix some Floor Switches
PRESET_ENTRY_S32("gEnhancements.FixFloorSwitches", 1),
// Red Ganon blood
PRESET_ENTRY_S32("gRedGanonBlood", 1),
// Fish while hovering
PRESET_ENTRY_S32("gHoverFishing", 1),
// N64 Weird Frames
PRESET_ENTRY_S32("gN64WeirdFrames", 1),
// Bombchus out of bounds
PRESET_ENTRY_S32("gBombchusOOB", 1),
// Quick Putaway
PRESET_ENTRY_S32("gQuickPutaway", 1),
// Skip save confirmation
PRESET_ENTRY_S32("gSkipSaveConfirmation", 1),
// Biggoron Forge Time (0 to 3)
PRESET_ENTRY_S32("gForgeTime", 0),
// Vine/Ladder Climb speed (+0 to +12)
PRESET_ENTRY_S32("gClimbSpeed", 3),
// Faster Heavy Block Lift
PRESET_ENTRY_S32("gFasterHeavyBlockLift", 1),
// No Forced Navi
PRESET_ENTRY_S32("gNoForcedNavi", 1),
// No Skulltula Freeze
PRESET_ENTRY_S32("gSkulltulaFreeze", 1),
// MM Bunny Hood
PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST_AND_JUMP),
// Adult Bunny Hood
PRESET_ENTRY_S32("gAdultBunnyHood", 1),
// Fast Chests
PRESET_ENTRY_S32("gFastChests", 1),
// Fast Drops
PRESET_ENTRY_S32("gFastDrops", 1),
// Fast Ocarina Playback
PRESET_ENTRY_S32("gFastOcarinaPlayback", 1),
// Instant Putaway
PRESET_ENTRY_S32("gInstantPutaway", 1),
// Instant Boomerang Recall
PRESET_ENTRY_S32("gFastBoomerang", 1),
// Nuts Explode Bombs
PRESET_ENTRY_S32("gNutsExplodeBombs", 1),
// Ask to Equip New Items
PRESET_ENTRY_S32("gAskToEquip", 1),
// Mask Select in Inventory
PRESET_ENTRY_S32("gMaskSelect", 1),
// Always Win Goron Pot
PRESET_ENTRY_S32("gGoronPot", 1),
// Always Win Dampe Digging
PRESET_ENTRY_S32("gDampeWin", 1),
// Skip Magic Arrow Equip Animation
PRESET_ENTRY_S32("gSkipArrowAnimation", 1),
// Equip arrows on multiple slots
PRESET_ENTRY_S32("gSeparateArrows", 1),
// Disable Navi Call Audio
PRESET_ENTRY_S32("gDisableNaviCallAudio", 1),
// Equipment Toggle
PRESET_ENTRY_S32("gEquipmentCanBeRemoved", 1),
// Link's Cow in Both Time Periods
PRESET_ENTRY_S32("gCowOfTime", 1),
// Enable 3D Dropped items/projectiles
PRESET_ENTRY_S32("gNewDrops", 1),
// Fix Anubis fireballs
PRESET_ENTRY_S32("gAnubisFix", 1),
// Autosave
PRESET_ENTRY_S32("gAutosave", AUTOSAVE_LOCATION_AND_MAJOR_ITEMS),
};
const std::vector<PresetEntry> randomizerPresetEntries = {
// D-pad Support in text and file select
PRESET_ENTRY_S32("gDpadText", 1),
// Play Ocarina with D-pad
PRESET_ENTRY_S32("gDpadOcarina", 1),
// Play Ocarina with Right Stick
PRESET_ENTRY_S32("gRStickOcarina", 1),
// D-pad as Equip Items
PRESET_ENTRY_S32("gDpadEquips", 1),
// Prevent Dropped Ocarina Inputs
PRESET_ENTRY_S32("gDpadNoDropOcarinaInput", 1),
// Right Stick Aiming
PRESET_ENTRY_S32("gRightStickAiming", 1),
// Text Speed (1 to 5)
PRESET_ENTRY_S32("gTextSpeed", 5),
// Skip Text
PRESET_ENTRY_S32("gSkipText", 1),
// King Zora Speed (1 to 5)
PRESET_ENTRY_S32("gMweepSpeed", 5),
// Faster Block Push (+0 to +5)
PRESET_ENTRY_S32("gFasterBlockPush", 5),
// Better Owl
PRESET_ENTRY_S32("gBetterOwl", 1),
// Assignable Tunics and Boots
PRESET_ENTRY_S32("gAssignableTunicsAndBoots", 1),
// Enable passage of time on file select
PRESET_ENTRY_S32("gTimeFlowFileSelect", 1),
// Inject Item Counts in messages
PRESET_ENTRY_S32("gInjectItemCounts", 1),
// Dynamic Wallet Icon
PRESET_ENTRY_S32("gDynamicWalletIcon", 1),
// Always show dungeon entrances
PRESET_ENTRY_S32("gAlwaysShowDungeonMinimapIcon", 1),
// Fix L&R Pause menu
PRESET_ENTRY_S32("gUniformLR", 1),
// Fix Dungeon entrances
PRESET_ENTRY_S32("gFixDungeonMinimapIcon", 1),
// Fix Two Handed idle animations
PRESET_ENTRY_S32("gTwoHandedIdle", 1),
// Fix the Gravedigging Tour Glitch
PRESET_ENTRY_S32("gGravediggingTourFix", 1),
// Fix Deku Nut upgrade
PRESET_ENTRY_S32("gDekuNutUpgradeFix", 1),
// Fix Navi text HUD position
PRESET_ENTRY_S32("gNaviTextFix", 1),
// Extend Silver Rupee Jingle
PRESET_ENTRY_S32("gSilverRupeeJingleExtend", 1),
// Fix some Floor Switches
PRESET_ENTRY_S32("gEnhancements.FixFloorSwitches", 1),
// Red Ganon blood
PRESET_ENTRY_S32("gRedGanonBlood", 1),
// Fish while hovering
PRESET_ENTRY_S32("gHoverFishing", 1),
// N64 Weird Frames
PRESET_ENTRY_S32("gN64WeirdFrames", 1),
// Bombchus out of bounds
PRESET_ENTRY_S32("gBombchusOOB", 1),
// Quick Putaway
PRESET_ENTRY_S32("gQuickPutaway", 1),
// Skip save confirmation
PRESET_ENTRY_S32("gSkipSaveConfirmation", 1),
// Biggoron Forge Time (0 to 3)
PRESET_ENTRY_S32("gForgeTime", 0),
// Vine/Ladder Climb speed (+0 to +12)
PRESET_ENTRY_S32("gClimbSpeed", 3),
// Faster Heavy Block Lift
PRESET_ENTRY_S32("gFasterHeavyBlockLift", 1),
// No Forced Navi
PRESET_ENTRY_S32("gNoForcedNavi", 1),
// No Skulltula Freeze
PRESET_ENTRY_S32("gSkulltulaFreeze", 1),
// MM Bunny Hood
PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST_AND_JUMP),
// Adult Bunny Hood
PRESET_ENTRY_S32("gAdultBunnyHood", 1),
// Fast Chests
PRESET_ENTRY_S32("gFastChests", 1),
// Fast Drops
PRESET_ENTRY_S32("gFastDrops", 1),
// Fast Ocarina Playback
PRESET_ENTRY_S32("gFastOcarinaPlayback", 1),
// Instant Putaway
PRESET_ENTRY_S32("gInstantPutaway", 1),
// Instant Boomerang Recall
PRESET_ENTRY_S32("gFastBoomerang", 1),
// Nuts Explode Bombs
PRESET_ENTRY_S32("gNutsExplodeBombs", 1),
// Ask to Equip New Items
PRESET_ENTRY_S32("gAskToEquip", 1),
// Mask Select in Inventory
PRESET_ENTRY_S32("gMaskSelect", 1),
// Always Win Goron Pot
PRESET_ENTRY_S32("gGoronPot", 1),
// Always Win Dampe Digging
PRESET_ENTRY_S32("gDampeWin", 1),
// Skip Magic Arrow Equip Animation
PRESET_ENTRY_S32("gSkipArrowAnimation", 1),
// Exit Market at Night
PRESET_ENTRY_S32("gMarketSneak", 1),
// Equip arrows on multiple slots
PRESET_ENTRY_S32("gSeparateArrows", 1),
// Disable Navi Call Audio
PRESET_ENTRY_S32("gDisableNaviCallAudio", 1),
// Equipment Toggle
PRESET_ENTRY_S32("gEquipmentCanBeRemoved", 1),
// Link's Cow in Both Time Periods
PRESET_ENTRY_S32("gCowOfTime", 1),
// Enable 3D Dropped items/projectiles
PRESET_ENTRY_S32("gNewDrops", 1),
// Fix Anubis fireballs
PRESET_ENTRY_S32("gAnubisFix", 1),
// Autosave
PRESET_ENTRY_S32("gAutosave", AUTOSAVE_LOCATION_AND_MAJOR_ITEMS),
// Customize Fishing Behaviour
PRESET_ENTRY_S32("gCustomizeFishing", 1),
// Guarantee Bite
PRESET_ENTRY_S32("gGuaranteeFishingBite", 1),
// Fish Never Escape
PRESET_ENTRY_S32("gFishNeverEscape", 1),
// Child Minimum Weight (6 to 10)
PRESET_ENTRY_S32("gChildMinimumWeightFish", 3),
// Adult Minimum Weight (8 to 13)
PRESET_ENTRY_S32("gAdultMinimumWeightFish", 6),
// Customize Lost Woods Ocarina Game Behavior
PRESET_ENTRY_S32("gCustomizeOcarinaGame", 1),
// Start With Five Notes
PRESET_ENTRY_S32("gOcarinaGameStartingNotes", 5),
// Round One Notes
PRESET_ENTRY_S32("gOcarinaGameRoundOneNotes", 5),
// Visual Stone of Agony
PRESET_ENTRY_S32("gVisualAgony", 1),
// Pull grave during the day
PRESET_ENTRY_S32("gDayGravePull", 1),
// Pull out Ocarina to Summon Scarecrow
PRESET_ENTRY_S32("gSkipScarecrow", 1),
// Chest size & texture matches contents
PRESET_ENTRY_S32("gChestSizeAndTextureMatchesContents", CSMC_BOTH),
// Color Temple of Time's Medallions
PRESET_ENTRY_S32("gToTMedallionsColors", 1),
// Pause link animation (0 to 16)
PRESET_ENTRY_S32("gPauseLiveLink", 16),
// Frames to wait
PRESET_ENTRY_S32("gMinFrameCount", 200),
PRESET_ENTRY_S32("gNoInputForCredits", 1),
PRESET_ENTRY_S32("gFastFarores", 1),
};
const std::vector<PresetEntry> spockRacePresetEntries = {
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("LogicRules"), 0),
PRESET_ENTRY_S32("gTextSpeed", 5),
PRESET_ENTRY_S32("gMweepSpeed", 5),
PRESET_ENTRY_S32("gClimbSpeed", 4),
PRESET_ENTRY_S32("gFasterBlockPush", 5),
PRESET_ENTRY_S32("gFasterHeavyBlockLift", 1),
PRESET_ENTRY_S32("gNoForcedNavi", 1),
PRESET_ENTRY_S32("gDisableNaviCallAudio", 1),
PRESET_ENTRY_S32("gFastChests", 1),
PRESET_ENTRY_S32("gFastDrops", 1),
PRESET_ENTRY_S32("gDpadText", 1),
PRESET_ENTRY_S32("gDpadOcarina", 1),
PRESET_ENTRY_S32("gRStickOcarina", 1),
PRESET_ENTRY_S32("gDpadEquips", 1),
PRESET_ENTRY_S32("gFastOcarinaPlayback", 1),
PRESET_ENTRY_S32("gSkipScarecrow", 1),
PRESET_ENTRY_S32("gMarketSneak", 1),
PRESET_ENTRY_S32("gInstantPutaway", 1),
PRESET_ENTRY_S32("gFastBoomerang", 1),
PRESET_ENTRY_S32("gAdultBunnyHood", 1),
PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST),
PRESET_ENTRY_S32("gSeparateArrows", 1),
PRESET_ENTRY_S32("gAssignableTunicsAndBoots", 1),
PRESET_ENTRY_S32("gEquipmentCanBeRemoved", 1),
PRESET_ENTRY_S32("gDayGravePull", 1),
PRESET_ENTRY_S32("gNewDrops", 1),
PRESET_ENTRY_S32("gCreditsFix", 1),
PRESET_ENTRY_S32("gSkipText", 1),
PRESET_ENTRY_S32("gSkulltulaFreeze", 1),
PRESET_ENTRY_S32("gPauseAnyCursor", 1),
PRESET_ENTRY_S32("gFastFarores", 1),
PRESET_ENTRY_S32("gNoInputForCredits", 1),
PRESET_ENTRY_S32("gMaskSelect", 1),
PRESET_ENTRY_S32("gInjectItemCounts", 1),
PRESET_ENTRY_S32("gCustomizeFishing", 1),
PRESET_ENTRY_S32("gFishNeverEscape", 1),
PRESET_ENTRY_S32("gInstantFishing", 1),
PRESET_ENTRY_S32("gGuaranteeFishingBite", 1),
PRESET_ENTRY_S32("gAdultMinimumWeightFish", 6),
PRESET_ENTRY_S32("gChildMinimumWeightFish", 3),
PRESET_ENTRY_S32("gGoronPot", 1),
PRESET_ENTRY_S32("gForgeTime", 0),
PRESET_ENTRY_S32("gCheatEasyPauseBufferEnabled", 1),
PRESET_ENTRY_S32("gDampeAllNight", 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("10GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("20GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("30GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("40GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("50GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("AllLocationsReachable"), 0),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BlueFireArrows"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BombchusInLogic"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("CompleteMaskQuest"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("CuccosToReturn"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("DampeHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("DoorOfTime"), RO_DOOROFTIME_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("EnableBombchuDrops"), 1),
PRESET_ENTRY_CPP_STRING(RANDOMIZER_SEED_CVAR("ExcludedLocations"), FormatLocations(
{ RC_MARKET_10_BIG_POES, RC_KAK_40_GOLD_SKULLTULA_REWARD, RC_KAK_50_GOLD_SKULLTULA_REWARD, RC_ZR_FROGS_OCARINA_GAME })),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Forest"), RO_FOREST_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("FullWallets"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GanonTrial"), RO_GANONS_TRIALS_SKIP),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GerudoFortress"), RO_GF_FAST),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GregHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GsExpectSunsSong"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("KakarikoGate"), RO_KAK_GATE_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("LacsRewardCount"), 5),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("RainbowBridge"), RO_BRIDGE_GREG),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ScrubText"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Shopsanity"), RO_SHOPSANITY_RANDOM),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleKeyRings"), RO_KEYRINGS_COUNT),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleKokiriSword"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleOcarinas"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleScrubs"), RO_SCRUBS_AFFORDABLE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipChildStealth"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipChildZelda"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipEponaRace"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipScarecrowsSong"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipTowerEscape"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingConsumables"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingOcarina"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SunlightArrows"), 1),
};
const std::vector<PresetEntry> spockRaceNoLogicPresetEntries = {
PRESET_ENTRY_S32("gAdultBunnyHood", 1),
PRESET_ENTRY_S32("gAdultMinimumWeightFish", 6),
PRESET_ENTRY_S32("gAssignableTunicsAndBoots", 1),
PRESET_ENTRY_S32("gCheatEasyPauseBufferEnabled", 1),
PRESET_ENTRY_S32("gChildMinimumWeightFish", 3),
PRESET_ENTRY_S32("gClimbSpeed", 4),
PRESET_ENTRY_S32("gCosmetics.Goron_NeckLength", 1000),
PRESET_ENTRY_S32("gCreditsFix", 1),
PRESET_ENTRY_S32("gCustomizeFishing", 1),
PRESET_ENTRY_S32("gDampeAllNight", 1),
PRESET_ENTRY_S32("gDayGravePull", 1),
PRESET_ENTRY_S32("gDisableNaviCallAudio", 1),
PRESET_ENTRY_S32("gDpadNoDropOcarinaInput", 1),
PRESET_ENTRY_S32("gEquipmentCanBeRemoved", 1),
PRESET_ENTRY_S32("gFastBoomerang", 1),
PRESET_ENTRY_S32("gFastChests", 1),
PRESET_ENTRY_S32("gFastDrops", 1),
PRESET_ENTRY_S32("gFastFarores", 1),
PRESET_ENTRY_S32("gFastOcarinaPlayback", 1),
PRESET_ENTRY_S32("gFasterBlockPush", 5),
PRESET_ENTRY_S32("gFasterHeavyBlockLift", 1),
PRESET_ENTRY_S32("gFishNeverEscape", 1),
PRESET_ENTRY_S32("gForgeTime", 0),
PRESET_ENTRY_S32("gGoronPot", 1),
PRESET_ENTRY_S32("gGuaranteeFishingBite", 1),
PRESET_ENTRY_S32("gHideBuildInfo", 1),
PRESET_ENTRY_S32("gInjectItemCounts", 1),
PRESET_ENTRY_S32("gInstantFishing", 1),
PRESET_ENTRY_S32("gInstantPutaway", 1),
PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST),
PRESET_ENTRY_S32("gMarketSneak", 1),
PRESET_ENTRY_S32("gMaskSelect", 1),
PRESET_ENTRY_S32("gMweepSpeed", 5),
PRESET_ENTRY_S32("gNoForcedNavi", 1),
PRESET_ENTRY_S32("gNoInputForCredits", 1),
PRESET_ENTRY_S32("gPauseAnyCursor", 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("10GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("20GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("30GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("40GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("50GSHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("AllLocationsReachable"), 0),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BlueFireArrows"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BombchusInLogic"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BossKeysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("CompleteMaskQuest"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("CuccosToReturn"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("DampeHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("DoorOfTime"), RO_DOOROFTIME_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("EnableBombchuDrops"), 1),
PRESET_ENTRY_CPP_STRING(RANDOMIZER_SEED_CVAR("ExcludedLocations"), FormatLocations(
{ RC_MARKET_10_BIG_POES, RC_KAK_40_GOLD_SKULLTULA_REWARD, RC_KAK_50_GOLD_SKULLTULA_REWARD, RC_ZR_FROGS_OCARINA_GAME })),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Forest"), RO_FOREST_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("FullWallets"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GanonTrial"), RO_GANONS_TRIALS_SKIP),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GerudoFortress"), RO_GF_FAST),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GerudoKeys"), RO_GERUDO_KEYS_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GregHint"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GsExpectSunsSong"), 0),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("KakarikoGate"), RO_KAK_GATE_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Keysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("LacsRewardCount"), 5),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("LogicRules"), RO_LOGIC_NO_LOGIC),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("RainbowBridge"), RO_BRIDGE_GREG),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ScrubText"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Shopsanity"), RO_SHOPSANITY_RANDOM),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleAdultTrade"), 0),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleBeans"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleGerudoToken"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleKeyRings"), RO_KEYRINGS_COUNT),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleKokiriSword"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleOcarinas"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleScrubs"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleTokens"), RO_TOKENSANITY_ALL),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipChildStealth"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipChildZelda"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipEponaRace"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipScarecrowsSong"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipTowerEscape"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingConsumables"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingOcarina"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SunlightArrows"), 1),
PRESET_ENTRY_S32("gSeparateArrows", 1),
PRESET_ENTRY_S32("gSkipScarecrow", 1),
PRESET_ENTRY_S32("gSkulltulaFreeze", 1),
};
const std::vector<PresetEntry> s6PresetEntries = {
PRESET_ENTRY_S32("gChestSizeAndTextureMatchesContents", CSMC_BOTH),
PRESET_ENTRY_S32("gFastChests", 1),
PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST),
PRESET_ENTRY_S32("gAdultBunnyHood", 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BigPoeTargetCount"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("CuccosToReturn"), 4),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("DoorOfTime"), RO_DOOROFTIME_OPEN),
PRESET_ENTRY_CPP_STRING(RANDOMIZER_SEED_CVAR("ExcludedLocations"), FormatLocations({ RC_DEKU_THEATER_MASK_OF_TRUTH })),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Forest"), RO_FOREST_CLOSED_DEKU),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GanonTrial"), RO_GANONS_TRIALS_SKIP),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GerudoFortress"), RO_GF_FAST),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("IceTraps"), RO_ICE_TRAPS_OFF),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("KakarikoGate"), RO_KAK_GATE_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("MedallionCount"), 6),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("MQDungeons"), RO_MQ_DUNGEONS_NONE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("RainbowBridge"), RO_BRIDGE_MEDALLIONS),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleAdultTrade"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleDungeonReward"), RO_DUNGEON_REWARDS_END_OF_DUNGEON),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_STARTWITH),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleKokiriSword"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleOverworldSpawns"), RO_GENERIC_ON),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipChildStealth"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipChildZelda"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipEponaRace"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipTowerEscape"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingAge"), RO_AGE_RANDOM),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingConsumables"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingDekuShield"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingOcarina"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ZorasFountain"), 0),
};
const std::vector<PresetEntry> hellModePresetEntries = {
PRESET_ENTRY_S32("gChestSizeAndTextureMatchesContents", CSMC_BOTH),
PRESET_ENTRY_S32("gFastChests", 1),
PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST),
PRESET_ENTRY_S32("gAdultBunnyHood", 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BigPoeTargetCount"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BlueFireArrows"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("BossKeysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("CompleteMaskQuest"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("CuccosToReturn"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("DoorOfTime"), RO_DOOROFTIME_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("EnableBombchuDrops"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("EnableGlitchCutscenes"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Forest"), RO_FOREST_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GanonTrial"), RO_GANONS_TRIALS_SET_NUMBER),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GanonTrialCount"), 6),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GerudoKeys"), RO_GERUDO_KEYS_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("GsExpectSunsSong"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("IceTraps"), RO_ICE_TRAPS_ONSLAUGHT),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ItemPool"), RO_ITEM_POOL_MINIMAL),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("KakarikoGate"), RO_KAK_GATE_OPEN),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Keysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("LinksPocket"), RO_LINKS_POCKET_NOTHING),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("MQDungeons"), RO_MQ_DUNGEONS_RANDOM_NUMBER),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("RainbowBridge"), RO_BRIDGE_DUNGEON_REWARDS),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("Shopsanity"), RO_SHOPSANITY_FOUR_ITEMS),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShopsanityPrices"), RO_SHOPSANITY_PRICE_TYCOON),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleAdultTrade"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleBeans"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleCows"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleDungeonReward"), RO_DUNGEON_REWARDS_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleFrogSongRupees"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_DUNGEONS),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleGerudoToken"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleKeyRings"), RO_KEYRINGS_RANDOM),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleKokiriSword"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleMasterSword"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleOcarinas"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleScrubs"), RO_SCRUBS_RANDOM),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleTokens"), RO_TOKENSANITY_ALL),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ShuffleWeirdEgg"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipChildStealth"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipEponaRace"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipScarecrowsSong"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SkipTowerEscape"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingAge"), RO_AGE_RANDOM),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_ANYWHERE),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("SunlightArrows"), 1),
PRESET_ENTRY_S32(RANDOMIZER_SEED_CVAR("ZorasFountain"), 2),
};
typedef struct PresetDefinition {
const char* label;
const char* description;
std::vector<PresetEntry> entries;
} PresetDefinition;
typedef struct PresetTypeDefinition {
std::vector<const char*> cvarsToClear;
std::map<uint16_t, PresetDefinition> presets;
} PresetTypeDefinition;
const std::map<PresetType, PresetTypeDefinition> presetTypes = {
{ PRESET_TYPE_ENHANCEMENTS, { enhancementsCvars, {
{ ENHANCEMENT_PRESET_DEFAULT, {
"Default",
"Reset all options to their default values.",
{},
} },
{ ENHANCEMENT_PRESET_VANILLA_PLUS, {
"Vanilla Plus",
"Adds Quality of Life features that enhance your experience, but don't alter gameplay. Recommended for a first playthrough of OoT.",
vanillaPlusPresetEntries,
} },
{ ENHANCEMENT_PRESET_ENHANCED, {
"Enhanced",
"The \"Vanilla Plus\" preset, but with more quality of life enhancements that might alter gameplay slightly. Recommended for returning players.",
enhancedPresetEntries
} },
{ ENHANCEMENT_PRESET_RANDOMIZER, {
"Randomizer",
"The \"Enhanced\" preset, plus any other enhancements that are recommended for playing Randomizer.",
randomizerPresetEntries
} },
} } },
{ PRESET_TYPE_RANDOMIZER, { randomizerCvars, {
{ RANDOMIZER_PRESET_DEFAULT, {
"Default",
"Reset all options to their default values.",
{},
} },
{ RANDOMIZER_PRESET_SPOCK_RACE, {
"Spock Race",
"Race preset used for the official Ship of Harkinian race on June 3rd 2023. The following settings are notable:\n" \
"- Rainbow Bridge is set to Greg\n" \
"- Ganons Boss Key is 5 dungeon rewards\n" \
"- Shopsanity and Scrubsanity enabled\n" \
"- All locations reachable is off\n", \
spockRacePresetEntries,
} },
{ RANDOMIZER_PRESET_SPOCK_RACE_NO_LOGIC, {
"Spock Race - No Logic",
"No Logic Race preset used for official Ship of Harkinian No Logic races. The following settings are "
"notable:\n"
"- Rainbow Bridge is set to Greg\n"
"- Ganons Boss Key is 5 dungeon rewards\n"
"- Shopsanity and Scrubsanity enabled\n"
"- All locations reachable is off\n",
spockRaceNoLogicPresetEntries,
} },
{ RANDOMIZER_PRESET_S6, {
"S6 Tournament (Adapted)",
"Matches OOTR S6 tournament settings as close as we can get with the options available in SoH. The following differences are notable:\n" \
"- Both child and adult overworld spawns are randomized\n" \
"- Dungeon rewards are shuffled at the end of dungeons, rather than at the end of their own dungeon\n" \
"- Full adult trade sequence is shuffled instead of the selected 4\n" \
"- Hint distribution no \"tournament\" mode, falling back to balanced",
s6PresetEntries,
} },
{ RANDOMIZER_PRESET_HELL_MODE, {
"Hell Mode",
"All settings maxed but still using glitchless logic. Expect pain.",
hellModePresetEntries
} },
} } }
};