#ifndef RANDO_ENUM_BEGIN
#define RANDO_ENUM_BEGIN(...)
#define RANDO_ENUM_BEGIN_CLEANUP
#endif
#ifndef RANDO_ENUM_ITEM
#define RANDO_ENUM_ITEM(...)
#define RANDO_ENUM_ITEM_CLEANUP
#endif
#ifndef RANDO_ENUM_END
#define RANDO_ENUM_END(...)
#define RANDO_ENUM_END_CLEANUP
#endif

// Generic Settings (any binary option can use this)
//  off/on
RANDO_ENUM_BEGIN(RandoOptionGenericOffOn)
RANDO_ENUM_ITEM(RO_GENERIC_OFF)
RANDO_ENUM_ITEM(RO_GENERIC_ON)
RANDO_ENUM_END(RandoOptionGenericOffOn)

// no/yes
RANDO_ENUM_BEGIN(RandoOptionGenericNoYes)
RANDO_ENUM_ITEM(RO_GENERIC_NO)
RANDO_ENUM_ITEM(RO_GENERIC_YES)
RANDO_ENUM_END(RandoOptionGenericNoYes)

// don't skip/skip
RANDO_ENUM_BEGIN(RandoOptionGenericSkip)
RANDO_ENUM_ITEM(RO_GENERIC_DONT_SKIP)
RANDO_ENUM_ITEM(RO_GENERIC_SKIP)
RANDO_ENUM_END(RandoOptionGenericSkip)

// Closed Forest settings (On, Deku Only, Off)
RANDO_ENUM_BEGIN(RandoOptionForest)
RANDO_ENUM_ITEM(RO_CLOSED_FOREST_ON)
RANDO_ENUM_ITEM(RO_CLOSED_FOREST_DEKU_ONLY)
RANDO_ENUM_ITEM(RO_CLOSED_FOREST_OFF)
RANDO_ENUM_END(RandoOptionForest)

// Door of Time settings (closed, song only, open)
RANDO_ENUM_BEGIN(RandoOptionDoorOfTime)
RANDO_ENUM_ITEM(RO_DOOROFTIME_CLOSED)
RANDO_ENUM_ITEM(RO_DOOROFTIME_SONGONLY)
RANDO_ENUM_ITEM(RO_DOOROFTIME_OPEN)
RANDO_ENUM_END(RandoOptionDoorOfTime)

// Zora's Fountain settings (closed, closed as child, open)
RANDO_ENUM_BEGIN(RandoOptionZorasFountain)
RANDO_ENUM_ITEM(RO_ZF_CLOSED)
RANDO_ENUM_ITEM(RO_ZF_CLOSED_CHILD)
RANDO_ENUM_ITEM(RO_ZF_OPEN)
RANDO_ENUM_END(RandoOptionZorasFountain)

// Sleeping Waterfall settings (closed, open)
RANDO_ENUM_BEGIN(RandoOptionSleepingWaterfall)
RANDO_ENUM_ITEM(RO_WATERFALL_CLOSED)
RANDO_ENUM_ITEM(RO_WATERFALL_OPEN)
RANDO_ENUM_END(RandoOptionSleepingWaterfall)

// Jabu-Jabu settings (closed, open)
RANDO_ENUM_BEGIN(RandoOptionJabu)
RANDO_ENUM_ITEM(RO_JABU_CLOSED)
RANDO_ENUM_ITEM(RO_JABU_OPEN)
RANDO_ENUM_END(RandoOptionJabu)

// Starting Age settings (child, adult, random)
RANDO_ENUM_BEGIN(RandoOptionStartingAge)
RANDO_ENUM_ITEM(RO_AGE_CHILD)
RANDO_ENUM_ITEM(RO_AGE_ADULT)
RANDO_ENUM_ITEM(RO_AGE_RANDOM)
RANDO_ENUM_END(RandoOptionStartingAge)

// Fortress Carpenters settings (normal, fast, free)
RANDO_ENUM_BEGIN(RandoOptionGerudoFortress)
RANDO_ENUM_ITEM(RO_GF_CARPENTERS_NORMAL)
RANDO_ENUM_ITEM(RO_GF_CARPENTERS_FAST)
RANDO_ENUM_ITEM(RO_GF_CARPENTERS_FREE)
RANDO_ENUM_END(RandoOptionGerudoFortress)

// Kakariko Gate settings (closed/open)
RANDO_ENUM_BEGIN(RandoOptionKakarikoGate)
RANDO_ENUM_ITEM(RO_KAK_GATE_CLOSED)
RANDO_ENUM_ITEM(RO_KAK_GATE_OPEN)
RANDO_ENUM_END(RandoOptionKakarikoGate)

// Rainbow Bridge settings (vanilla, always open, stones, medallions, dungeon rewards, dungeons, tokens)
RANDO_ENUM_BEGIN(RandoOptionRainbowBridge)
RANDO_ENUM_ITEM(RO_BRIDGE_VANILLA)
RANDO_ENUM_ITEM(RO_BRIDGE_ALWAYS_OPEN)
RANDO_ENUM_ITEM(RO_BRIDGE_STONES)
RANDO_ENUM_ITEM(RO_BRIDGE_MEDALLIONS)
RANDO_ENUM_ITEM(RO_BRIDGE_DUNGEON_REWARDS)
RANDO_ENUM_ITEM(RO_BRIDGE_DUNGEONS)
RANDO_ENUM_ITEM(RO_BRIDGE_TOKENS)
RANDO_ENUM_ITEM(RO_BRIDGE_TRIFORCE_PIECES)
RANDO_ENUM_ITEM(RO_BRIDGE_GREG)
RANDO_ENUM_END(RandoOptionRainbowBridge)

// Bridge Reward Options settings (Standard rewards, Greg as reward, Greg as wildcard)
RANDO_ENUM_BEGIN(RandoOptionBridgeRewards)
RANDO_ENUM_ITEM(RO_BRIDGE_STANDARD_REWARD)
RANDO_ENUM_ITEM(RO_BRIDGE_GREG_REWARD)
RANDO_ENUM_ITEM(RO_BRIDGE_WILDCARD_REWARD)
RANDO_ENUM_END(RandoOptionBridgeRewards)

// Shopsanity settings (off, specific count, random)
RANDO_ENUM_BEGIN(RandoOptionShopsanity)
RANDO_ENUM_ITEM(RO_SHOPSANITY_OFF)
RANDO_ENUM_ITEM(RO_SHOPSANITY_SPECIFIC_COUNT)
RANDO_ENUM_ITEM(RO_SHOPSANITY_RANDOM)
RANDO_ENUM_END(RandoOptionShopsanity)

// Shopsanity count settings (0-7 items)
RANDO_ENUM_BEGIN(RandoOptionShopsanityCount)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_ZERO_ITEMS)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_ONE_ITEM)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_TWO_ITEMS)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_THREE_ITEMS)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_FOUR_ITEMS)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_FIVE_ITEMS)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_SIX_ITEMS)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_SEVEN_ITEMS)
RANDO_ENUM_ITEM(RO_SHOPSANITY_COUNT_EIGHT_ITEMS)
RANDO_ENUM_END(RandoOptionShopsanityCount)

// Shopsanity price ranges
RANDO_ENUM_BEGIN(RandoOptionPrices)
RANDO_ENUM_ITEM(RO_PRICE_VANILLA)
RANDO_ENUM_ITEM(RO_PRICE_CHEAP_BALANCED) // Balanced random from 0-95, favoring lower numbers
RANDO_ENUM_ITEM(RO_PRICE_BALANCED)       // Random from 0-300, favoring lower numbers
RANDO_ENUM_ITEM(RO_PRICE_FIXED)
RANDO_ENUM_ITEM(RO_PRICE_RANGE)
RANDO_ENUM_ITEM(RO_PRICE_SET_BY_WALLET)
RANDO_ENUM_END(RandoOptionPrices)

// Scrubsanity settings (off, affordable, expensive, random)
RANDO_ENUM_BEGIN(RandoOptionScrubsanity)
RANDO_ENUM_ITEM(RO_SCRUBS_OFF)
RANDO_ENUM_ITEM(RO_SCRUBS_ONE_TIME_ONLY)
RANDO_ENUM_ITEM(RO_SCRUBS_ALL)
RANDO_ENUM_END(RandoOptionScrubsanity)

// Ammo drop settings (on, "on+bombchu", off)
RANDO_ENUM_BEGIN(RandoOptionAmmoDrops)
RANDO_ENUM_ITEM(RO_AMMO_DROPS_OFF)
// RANDO_ENUM_ITEM(RO_AMMO_DROPS_ON_PLUS_BOMBCHU)
RANDO_ENUM_ITEM(RO_AMMO_DROPS_ON)
RANDO_ENUM_END(RandoOptionAmmoDrops)

RANDO_ENUM_BEGIN(RandoOptionBombchuBag)
RANDO_ENUM_ITEM(RO_BOMBCHU_BAG_NONE)
RANDO_ENUM_ITEM(RO_BOMBCHU_BAG_SINGLE)
RANDO_ENUM_ITEM(RO_BOMBCHU_BAG_PROGRESSIVE)
RANDO_ENUM_END(RandoOptionBombchuBag)

RANDO_ENUM_BEGIN(RandoOptionBossSouls)
RANDO_ENUM_ITEM(RO_BOSS_SOULS_OFF)
RANDO_ENUM_ITEM(RO_BOSS_SOULS_ON)
RANDO_ENUM_END(RandoOptionBossSouls)

// Fishsanity settings (off, loach only, pond only, grottos only, both)
RANDO_ENUM_BEGIN(RandoOptionsFishsanity)
RANDO_ENUM_ITEM(RO_FISHSANITY_OFF)
RANDO_ENUM_ITEM(RO_FISHSANITY_HYRULE_LOACH)
RANDO_ENUM_ITEM(RO_FISHSANITY_POND)
RANDO_ENUM_ITEM(RO_FISHSANITY_OVERWORLD)
RANDO_ENUM_ITEM(RO_FISHSANITY_BOTH)
RANDO_ENUM_END(RandoOptionsFishsanity)

// Infinite Upgrades settings (off, progressive, condensed progressive)
RANDO_ENUM_BEGIN(RandoOptionInfiniteUpgrades)
RANDO_ENUM_ITEM(RO_INF_UPGRADES_OFF)
RANDO_ENUM_ITEM(RO_INF_UPGRADES_PROGRESSIVE)
RANDO_ENUM_ITEM(RO_INF_UPGRADES_CONDENSED_PROGRESSIVE)
RANDO_ENUM_END(RandoOptionInfiniteUpgrades)

// Any Dungeon Item (start with, vanilla, own dungeon, any dungeon,
// overworld, anywhere)
RANDO_ENUM_BEGIN(RandoOptionDungeonItemLocation)
RANDO_ENUM_ITEM(RO_DUNGEON_ITEM_LOC_STARTWITH)
RANDO_ENUM_ITEM(RO_DUNGEON_ITEM_LOC_VANILLA)
RANDO_ENUM_ITEM(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON)
RANDO_ENUM_ITEM(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON)
RANDO_ENUM_ITEM(RO_DUNGEON_ITEM_LOC_OVERWORLD)
RANDO_ENUM_ITEM(RO_DUNGEON_ITEM_LOC_ANYWHERE)
RANDO_ENUM_END(RandoOptionDungeonItemLocation)

// Dungeon reward settings
RANDO_ENUM_BEGIN(RandoOptionDungeonRewards)
RANDO_ENUM_ITEM(RO_DUNGEON_REWARDS_VANILLA)
RANDO_ENUM_ITEM(RO_DUNGEON_REWARDS_END_OF_DUNGEON)
RANDO_ENUM_ITEM(RO_DUNGEON_REWARDS_OWN_DUNGEON)
RANDO_ENUM_ITEM(RO_DUNGEON_REWARDS_ANY_DUNGEON)
RANDO_ENUM_ITEM(RO_DUNGEON_REWARDS_OVERWORLD)
RANDO_ENUM_ITEM(RO_DUNGEON_REWARDS_ANYWHERE)
RANDO_ENUM_END(RandoOptionDungeonRewards)

// Keyring Settings
RANDO_ENUM_BEGIN(RandoOptionKeyrings)
RANDO_ENUM_ITEM(RO_KEYRINGS_OFF)
RANDO_ENUM_ITEM(RO_KEYRINGS_RANDOM)
RANDO_ENUM_ITEM(RO_KEYRINGS_COUNT)
RANDO_ENUM_ITEM(RO_KEYRINGS_SELECTION)
RANDO_ENUM_END(RandoOptionKeyrings)

RANDO_ENUM_BEGIN(RandoOptionKeyringForDungeon)
RANDO_ENUM_ITEM(RO_KEYRING_FOR_DUNGEON_OFF)
RANDO_ENUM_ITEM(RO_KEYRING_FOR_DUNGEON_RANDOM)
RANDO_ENUM_ITEM(RO_KEYRING_FOR_DUNGEON_ON)
RANDO_ENUM_END(RandoOptionKeyringForDungeon)

// Ganon's Boss Key Settings
RANDO_ENUM_BEGIN(RandoOptionGanonsBossKey)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_VANILLA)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_OWN_DUNGEON)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_STARTWITH)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_ANY_DUNGEON)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_OVERWORLD)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_ANYWHERE)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_STONES)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_MEDALLIONS)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_REWARDS)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_DUNGEONS)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_TOKENS)
RANDO_ENUM_ITEM(RO_GANON_BOSS_KEY_TRIFORCE_PIECES)
RANDO_ENUM_END(RandoOptionGanonsBossKey)

// Ganon's Soul Settings
RANDO_ENUM_BEGIN(RandoOptionGanonsSoul)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_STARTWITH)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_ANY_DUNGEON)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_OVERWORLD)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_ANYWHERE)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_STONES)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_MEDALLIONS)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_REWARDS)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_DUNGEONS)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_TOKENS)
RANDO_ENUM_ITEM(RO_GANONS_SOUL_TRIFORCE_PIECES)
RANDO_ENUM_END(RandoOptionGanonsSoul)

// Wincon Triggers
RANDO_ENUM_BEGIN(RandoOptionWincon)
RANDO_ENUM_ITEM(RO_WINCON_DEFEAT_GANON)
RANDO_ENUM_ITEM(RO_WINCON_ANYWHERE)
RANDO_ENUM_ITEM(RO_WINCON_STONES)
RANDO_ENUM_ITEM(RO_WINCON_MEDALLIONS)
RANDO_ENUM_ITEM(RO_WINCON_REWARDS)
RANDO_ENUM_ITEM(RO_WINCON_DUNGEONS)
RANDO_ENUM_ITEM(RO_WINCON_TOKENS)
RANDO_ENUM_ITEM(RO_WINCON_TRIFORCE_PIECES)
RANDO_ENUM_END(RandoOptionWincon)

// Reward Triggers
RANDO_ENUM_BEGIN(RandoOptionCheckTrigger)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_NONE)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_STONES)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_MEDALLIONS)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_REWARDS)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_DUNGEONS)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_TOKENS)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_TRIFORCE_PIECES)
RANDO_ENUM_END(RandoOptionCheckTrigger)

// Reward Options settings (Standard rewards, Greg as reward, Greg as wildcard)
RANDO_ENUM_BEGIN(RandoOptionCheckTriggerRewards)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_STANDARD_REWARD)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_GREG_REWARD)
RANDO_ENUM_ITEM(RO_CHECK_TRIGGER_WILDCARD_REWARD)
RANDO_ENUM_END(RandoOptionCheckTriggerRewards)

// Ganon's Trials
RANDO_ENUM_BEGIN(RandoOptionGanonsTrials)
RANDO_ENUM_ITEM(RO_GANONS_TRIALS_SKIP)
RANDO_ENUM_ITEM(RO_GANONS_TRIALS_SET_NUMBER)
RANDO_ENUM_ITEM(RO_GANONS_TRIALS_RANDOM_NUMBER)
RANDO_ENUM_END(RandoOptionGanonsTrials)

// Shuffle Dungeon Entrance Settings (Off, on, plus ganon)
RANDO_ENUM_BEGIN(RandoOptionDungeonEntranceShuffle)
RANDO_ENUM_ITEM(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)
RANDO_ENUM_ITEM(RO_DUNGEON_ENTRANCE_SHUFFLE_ON)
RANDO_ENUM_ITEM(RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON)
RANDO_ENUM_END(RandoOptionDungeonEntranceShuffle)

// Shuffle Boss Room Entrance Settings (Off, Age Restricted, Full)
RANDO_ENUM_BEGIN(RandoOptionBossRoomEntranceShuffle)
RANDO_ENUM_ITEM(RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF)
RANDO_ENUM_ITEM(RO_BOSS_ROOM_ENTRANCE_SHUFFLE_AGE_RESTRICTED)
RANDO_ENUM_ITEM(RO_BOSS_ROOM_ENTRANCE_SHUFFLE_FULL)
RANDO_ENUM_END(RandoOptionBossRoomEntranceShuffle)

// Shuffle Interior Entrance Settings (Off, simple, all)
RANDO_ENUM_BEGIN(RandoOptionInteriorEntranceShuffle)
RANDO_ENUM_ITEM(RO_INTERIOR_ENTRANCE_SHUFFLE_OFF)
RANDO_ENUM_ITEM(RO_INTERIOR_ENTRANCE_SHUFFLE_SIMPLE)
RANDO_ENUM_ITEM(RO_INTERIOR_ENTRANCE_SHUFFLE_ALL)
RANDO_ENUM_END(RandoOptionInteriorEntranceShuffle)

// Song shuffle Settings (Song locations, Dungeon rewards, anywhere)
RANDO_ENUM_BEGIN(RandoOptionSongShuffle)
RANDO_ENUM_ITEM(RO_SONG_SHUFFLE_OFF)
RANDO_ENUM_ITEM(RO_SONG_SHUFFLE_SONG_LOCATIONS)
RANDO_ENUM_ITEM(RO_SONG_SHUFFLE_DUNGEON_REWARDS)
RANDO_ENUM_ITEM(RO_SONG_SHUFFLE_ANYWHERE)
RANDO_ENUM_END(RandoOptionSongShuffle)

// Shuffle Merchants Settings (Off, Beans Only, All but Beans, All)
RANDO_ENUM_BEGIN(RandoOptionShuffleMerchants)
RANDO_ENUM_ITEM(RO_SHUFFLE_MERCHANTS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_MERCHANTS_BEANS_ONLY)
RANDO_ENUM_ITEM(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS)
RANDO_ENUM_ITEM(RO_SHUFFLE_MERCHANTS_ALL)
RANDO_ENUM_END(RandoOptionShuffleMerchants)

// Starting Ocarina Settings (off, fairy, oot)
RANDO_ENUM_BEGIN(RandoOptionStartingOcarina)
RANDO_ENUM_ITEM(RO_STARTING_OCARINA_OFF)
RANDO_ENUM_ITEM(RO_STARTING_OCARINA_FAIRY)
RANDO_ENUM_ITEM(RO_STARTING_OCARINA_TIME)
RANDO_ENUM_END(RandoOptionStartingOcarina)

// Starting Bottle Settings (off, empty bottle, bottle with big poe, ruto's letter (bottle 1 only))
RANDO_ENUM_BEGIN(RandoOptionStartingBottle)
RANDO_ENUM_ITEM(RO_STARTING_BOTTLE_OFF)
RANDO_ENUM_ITEM(RO_STARTING_BOTTLE_EMPTY)
RANDO_ENUM_ITEM(RO_STARTING_BOTTLE_BIG_POE)
RANDO_ENUM_ITEM(RO_STARTING_BOTTLE_RUTOS_LETTER)
RANDO_ENUM_END(RandoOptionStartingBottle)

// Starting Biggoron's Sword Settings (off, giant's knife, biggoron's sword)
RANDO_ENUM_BEGIN(RandoOptionStartingBiggoronSword)
RANDO_ENUM_ITEM(RO_STARTING_BGS_OFF)
RANDO_ENUM_ITEM(RO_STARTING_BGS_GIANTS_KNIFE)
RANDO_ENUM_ITEM(RO_STARTING_BGS_BIGGORON_SWORD)
RANDO_ENUM_END(RandoOptionStartingBiggoronSword)

// Mask Quest Settings (vanilla, completed, shuffle)
RANDO_ENUM_BEGIN(RandoOptionMaskQuest)
RANDO_ENUM_ITEM(RO_MASK_QUEST_VANILLA)
RANDO_ENUM_ITEM(RO_MASK_QUEST_COMPLETED)
RANDO_ENUM_ITEM(RO_MASK_QUEST_SHUFFLE)
RANDO_ENUM_END(RandoOptionMaskQuest)

// Item Pool Settings
RANDO_ENUM_BEGIN(RandoOptionItemPool)
RANDO_ENUM_ITEM(RO_ITEM_POOL_PLENTIFUL)
RANDO_ENUM_ITEM(RO_ITEM_POOL_BALANCED)
RANDO_ENUM_ITEM(RO_ITEM_POOL_SCARCE)
RANDO_ENUM_ITEM(RO_ITEM_POOL_MINIMAL)
RANDO_ENUM_END(RandoOptionItemPool)

// Ice Trap Settings
RANDO_ENUM_BEGIN(RandoOptionIceTraps)
RANDO_ENUM_ITEM(RO_ICE_TRAPS_OFF)
RANDO_ENUM_ITEM(RO_ICE_TRAPS_NORMAL)
RANDO_ENUM_ITEM(RO_ICE_TRAPS_COUNT)
RANDO_ENUM_ITEM(RO_ICE_TRAPS_PERCENT)
RANDO_ENUM_END(RandoOptionIceTraps)

// Gossip Stone Hint Settings (no hints, needs nothing,
// needs mask of truth, needs stone of agony)
RANDO_ENUM_BEGIN(RandoOptionGossipStones)
RANDO_ENUM_ITEM(RO_GOSSIP_STONES_NONE)
RANDO_ENUM_ITEM(RO_GOSSIP_STONES_NEED_NOTHING)
RANDO_ENUM_ITEM(RO_GOSSIP_STONES_NEED_TRUTH)
RANDO_ENUM_ITEM(RO_GOSSIP_STONES_NEED_STONE)
RANDO_ENUM_END(RandoOptionGossipStones)

// Hint Clarity Settings (obscure, ambiguous, clear)
RANDO_ENUM_BEGIN(RandoOptionHintClarity)
RANDO_ENUM_ITEM(RO_HINT_CLARITY_OBSCURE)
RANDO_ENUM_ITEM(RO_HINT_CLARITY_AMBIGUOUS)
RANDO_ENUM_ITEM(RO_HINT_CLARITY_CLEAR)
RANDO_ENUM_END(RandoOptionHintClarity)

// Hint Distribution Settings (useless, balanced, strong, very strong)
RANDO_ENUM_BEGIN(RandoOptionHintDistribution)
RANDO_ENUM_ITEM(RO_HINT_DIST_USELESS)
RANDO_ENUM_ITEM(RO_HINT_DIST_BALANCED)
RANDO_ENUM_ITEM(RO_HINT_DIST_STRONG)
RANDO_ENUM_ITEM(RO_HINT_DIST_VERY_STRONG)
RANDO_ENUM_END(RandoOptionHintDistribution)

// Gerudo Fortress Key Settings (vanilla, any dungeon, overworld,
// anywhere)
RANDO_ENUM_BEGIN(RandoOptionGerudoKeys)
RANDO_ENUM_ITEM(RO_GERUDO_KEYS_VANILLA)
RANDO_ENUM_ITEM(RO_GERUDO_KEYS_ANY_DUNGEON)
RANDO_ENUM_ITEM(RO_GERUDO_KEYS_OVERWORLD)
RANDO_ENUM_ITEM(RO_GERUDO_KEYS_ANYWHERE)
RANDO_ENUM_END(RandoOptionGerudoKeys)

// Tokensanity settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionTokensanity)
RANDO_ENUM_ITEM(RO_TOKENSANITY_OFF)
RANDO_ENUM_ITEM(RO_TOKENSANITY_DUNGEONS)
RANDO_ENUM_ITEM(RO_TOKENSANITY_OVERWORLD)
RANDO_ENUM_ITEM(RO_TOKENSANITY_ALL)
RANDO_ENUM_END(RandoOptionTokensanity)

// Freestanding Hearts/Rupees settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionFreestanding)
RANDO_ENUM_ITEM(RO_SHUFFLE_FREESTANDING_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_FREESTANDING_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_FREESTANDING_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_FREESTANDING_ALL)
RANDO_ENUM_END(RandoOptionFreestanding)

// Wonder Items settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionWonderItems)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_ALL)
RANDO_ENUM_END(RandoOptionWonderItems)

// Shuffle Pots settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShufflePots)
RANDO_ENUM_ITEM(RO_SHUFFLE_POTS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_POTS_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_POTS_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_POTS_ALL)
RANDO_ENUM_END(RandoOptionShufflePots)

// Shuffle Grass settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShuffleGrass)
RANDO_ENUM_ITEM(RO_SHUFFLE_GRASS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_GRASS_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_GRASS_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_GRASS_ALL)
RANDO_ENUM_END(RandoOptionShuffleGrass)

// Shuffle Crates settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShuffleCrates)
RANDO_ENUM_ITEM(RO_SHUFFLE_CRATES_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_CRATES_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_CRATES_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_CRATES_ALL)
RANDO_ENUM_END(RandoOptionShuffleCrates)

// Shuffle Boulder settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShuffleBoulders)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_ALL)
RANDO_ENUM_END(RandoOptionShuffleBoulders)

// Shuffle Signs settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShuffleSigns)
RANDO_ENUM_ITEM(RO_SHUFFLE_SIGNS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_SIGNS_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_SIGNS_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_SIGNS_ALL)
RANDO_ENUM_END(RandoOptionShuffleSigns)

// Link's Pocket Settings (dungeon reward, advancement, anything, nothing)
RANDO_ENUM_BEGIN(RandoOptionLinksPocket)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_DUNGEON_REWARD)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_ADVANCEMENT)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_ANYTHING)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_NOTHING)
RANDO_ENUM_END(RandoOptionLinksPocket)

// Link's Pocket Dungeon Reward Settings (dungeon reward, stone, medallion)
RANDO_ENUM_BEGIN(RandoOptionLinksPocketReward)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_ANY_REWARD)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_ANY_STONE)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_ANY_MEDALLION)
RANDO_ENUM_ITEM(RO_LINKS_POCKET_LIGHT_MEDALLION)
RANDO_ENUM_END(RandoOptionLinksPocketReward)

// Logic (glitchless/no logic)
RANDO_ENUM_BEGIN(RandoOptionLogic)
RANDO_ENUM_ITEM(RO_LOGIC_GLITCHLESS)
RANDO_ENUM_ITEM(RO_LOGIC_NO_LOGIC)
RANDO_ENUM_END(RandoOptionLogic)

// Damage Multiplier
RANDO_ENUM_BEGIN(RandoOptionDamageMultiplier)
RANDO_ENUM_ITEM(RO_DAMAGE_MULTIPLIER_HALF)
RANDO_ENUM_ITEM(RO_DAMAGE_MULTIPLIER_DEFAULT)
RANDO_ENUM_ITEM(RO_DAMAGE_MULTIPLIER_DOUBLE)
RANDO_ENUM_ITEM(RO_DAMAGE_MULTIPLIER_QUADRUPLE)
RANDO_ENUM_ITEM(RO_DAMAGE_MULTIPLIER_OCTUPLE)
RANDO_ENUM_ITEM(RO_DAMAGE_MULTIPLIER_SEXDECUPLE)
RANDO_ENUM_ITEM(RO_DAMAGE_MULTIPLIER_OHKO)
RANDO_ENUM_END(RandoOptionDamageMultiplier)

// MQ Dungeons
RANDO_ENUM_BEGIN(RandoOptionMQDungeons)
RANDO_ENUM_ITEM(RO_MQ_DUNGEONS_NONE)
RANDO_ENUM_ITEM(RO_MQ_DUNGEONS_SET_NUMBER)
RANDO_ENUM_ITEM(RO_MQ_DUNGEONS_RANDOM_NUMBER)
RANDO_ENUM_ITEM(RO_MQ_DUNGEONS_SELECTION)
RANDO_ENUM_END(RandoOptionMQDungeons)

// Trifoce Hunt location
RANDO_ENUM_BEGIN(RandoOptionTriforceHuntLocation)
RANDO_ENUM_ITEM(RO_TRIFORCE_HUNT_LOCATION_ANY_DUNGEON)
RANDO_ENUM_ITEM(RO_TRIFORCE_HUNT_LOCATION_OVERWORLD)
RANDO_ENUM_ITEM(RO_TRIFORCE_HUNT_LOCATION_ANYWHERE)
RANDO_ENUM_END(RandoOptionTriforceHuntLocation)

RANDO_ENUM_BEGIN(RandoOptionLocationInclusion)
RANDO_ENUM_ITEM(RO_LOCATION_INCLUDE)
RANDO_ENUM_ITEM(RO_LOCATION_EXCLUDE)
RANDO_ENUM_END(RandoOptionLocationInclusion)

RANDO_ENUM_BEGIN(RandoOptionChestGame)
RANDO_ENUM_ITEM(RO_CHEST_GAME_OFF)
RANDO_ENUM_ITEM(RO_CHEST_GAME_SINGLE_KEYS)
RANDO_ENUM_ITEM(RO_CHEST_GAME_PACK)
RANDO_ENUM_END(RandoOptionChestGame)

RANDO_ENUM_BEGIN(RandoOptionMQSet)
RANDO_ENUM_ITEM(RO_MQ_SET_VANILLA)
RANDO_ENUM_ITEM(RO_MQ_SET_MQ)
RANDO_ENUM_ITEM(RO_MQ_SET_RANDOM)
RANDO_ENUM_END(RandoOptionMQSet)

#ifdef RANDO_ENUM_BEGIN_CLEANUP
#undef RANDO_ENUM_BEGIN
#undef RANDO_ENUM_BEGIN_CLEANUP
#endif
#ifdef RANDO_ENUM_ITEM_CLEANUP
#undef RANDO_ENUM_ITEM
#undef RANDO_ENUM_ITEM_CLEANUP
#endif
#ifdef RANDO_ENUM_END_CLEANUP
#undef RANDO_ENUM_END
#undef RANDO_ENUM_END_CLEANUP
#endif
