#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

// This should probably go in a less rando-specific location
// but the best location will probably be in the modding engine
// which doesn't exist yet.
RANDO_ENUM_BEGIN(ModIndex)
RANDO_ENUM_ITEM(MOD_NONE)
RANDO_ENUM_ITEM(MOD_RANDOMIZER)
RANDO_ENUM_END(ModIndex)

RANDO_ENUM_BEGIN(TableIndex)
RANDO_ENUM_ITEM(TABLE_VANILLA, MOD_NONE)
RANDO_ENUM_ITEM(TABLE_RANDOMIZER, MOD_RANDOMIZER)
RANDO_ENUM_END(TableIndex)

RANDO_ENUM_BEGIN(HintType)
RANDO_ENUM_ITEM(HINT_TYPE_HINT_KEY)
RANDO_ENUM_ITEM(HINT_TYPE_AREA)
RANDO_ENUM_ITEM(HINT_TYPE_ITEM)
RANDO_ENUM_ITEM(HINT_TYPE_TRIAL)
RANDO_ENUM_ITEM(HINT_TYPE_ENTRANCE)
RANDO_ENUM_ITEM(HINT_TYPE_ITEM_AREA)
RANDO_ENUM_ITEM(HINT_TYPE_ALTAR_CHILD)
RANDO_ENUM_ITEM(HINT_TYPE_ALTAR_ADULT)
RANDO_ENUM_ITEM(HINT_TYPE_WOTH) // Way of the Hero
RANDO_ENUM_ITEM(HINT_TYPE_FOOLISH)
RANDO_ENUM_ITEM(HINT_TYPE_MESSAGE)
RANDO_ENUM_ITEM(HINT_TYPE_MAX)
RANDO_ENUM_END(HintType)

RANDO_ENUM_BEGIN(RandomizerArea)
RANDO_ENUM_ITEM(RA_NONE)
RANDO_ENUM_ITEM(RA_LINKS_POCKET)
RANDO_ENUM_ITEM(RA_KOKIRI_FOREST)
RANDO_ENUM_ITEM(RA_THE_LOST_WOODS)
RANDO_ENUM_ITEM(RA_SACRED_FOREST_MEADOW)
RANDO_ENUM_ITEM(RA_HYRULE_FIELD)
RANDO_ENUM_ITEM(RA_LAKE_HYLIA)
RANDO_ENUM_ITEM(RA_GERUDO_VALLEY)
RANDO_ENUM_ITEM(RA_GERUDO_FORTRESS)
RANDO_ENUM_ITEM(RA_HAUNTED_WASTELAND)
RANDO_ENUM_ITEM(RA_DESERT_COLOSSUS)
RANDO_ENUM_ITEM(RA_THE_MARKET)
RANDO_ENUM_ITEM(RA_TEMPLE_OF_TIME)
RANDO_ENUM_ITEM(RA_HYRULE_CASTLE)
RANDO_ENUM_ITEM(RA_OUTSIDE_GANONS_CASTLE)
RANDO_ENUM_ITEM(RA_CASTLE_GROUNDS)
RANDO_ENUM_ITEM(RA_KAKARIKO_VILLAGE)
RANDO_ENUM_ITEM(RA_THE_GRAVEYARD)
RANDO_ENUM_ITEM(RA_DEATH_MOUNTAIN_TRAIL)
RANDO_ENUM_ITEM(RA_GORON_CITY)
RANDO_ENUM_ITEM(RA_DEATH_MOUNTAIN_CRATER)
RANDO_ENUM_ITEM(RA_ZORAS_RIVER)
RANDO_ENUM_ITEM(RA_ZORAS_DOMAIN)
RANDO_ENUM_ITEM(RA_ZORAS_FOUNTAIN)
RANDO_ENUM_ITEM(RA_LON_LON_RANCH)
RANDO_ENUM_ITEM(RA_DEKU_TREE)
RANDO_ENUM_ITEM(RA_DODONGOS_CAVERN)
RANDO_ENUM_ITEM(RA_JABU_JABUS_BELLY)
RANDO_ENUM_ITEM(RA_FOREST_TEMPLE)
RANDO_ENUM_ITEM(RA_FIRE_TEMPLE)
RANDO_ENUM_ITEM(RA_WATER_TEMPLE)
RANDO_ENUM_ITEM(RA_SPIRIT_TEMPLE)
RANDO_ENUM_ITEM(RA_SHADOW_TEMPLE)
RANDO_ENUM_ITEM(RA_BOTTOM_OF_THE_WELL)
RANDO_ENUM_ITEM(RA_ICE_CAVERN)
RANDO_ENUM_ITEM(RA_GERUDO_TRAINING_GROUND)
RANDO_ENUM_ITEM(RA_GANONS_CASTLE)
RANDO_ENUM_ITEM(RA_MAX)
RANDO_ENUM_END(RandomizerArea)

RANDO_ENUM_BEGIN(TrialKey)
RANDO_ENUM_ITEM(TK_LIGHT_TRIAL)
RANDO_ENUM_ITEM(TK_FOREST_TRIAL)
RANDO_ENUM_ITEM(TK_FIRE_TRIAL)
RANDO_ENUM_ITEM(TK_WATER_TRIAL)
RANDO_ENUM_ITEM(TK_SPIRIT_TRIAL)
RANDO_ENUM_ITEM(TK_SHADOW_TRIAL)
RANDO_ENUM_ITEM(TK_MAX)
RANDO_ENUM_END(TrialKey)

// Check types based on main settings
RANDO_ENUM_BEGIN(RandomizerCheckType)
RANDO_ENUM_ITEM(RCTYPE_STANDARD)       // Base set of rando checks
RANDO_ENUM_ITEM(RCTYPE_SKULL_TOKEN)    // Gold Skulltulas
RANDO_ENUM_ITEM(RCTYPE_COW)            // Cows
RANDO_ENUM_ITEM(RCTYPE_ADULT_TRADE)    // Adult trade quest checks
RANDO_ENUM_ITEM(RCTYPE_FROG_SONG)      // Frog song purple rupee checks
RANDO_ENUM_ITEM(RCTYPE_MAP)            // Maps
RANDO_ENUM_ITEM(RCTYPE_COMPASS)        // Compasses
RANDO_ENUM_ITEM(RCTYPE_SMALL_KEY)      // Small Keys
RANDO_ENUM_ITEM(RCTYPE_GF_KEY)         // Gerudo Fortress Keys
RANDO_ENUM_ITEM(RCTYPE_BOSS_KEY)       // Boss Keys
RANDO_ENUM_ITEM(RCTYPE_GANON_BOSS_KEY) // Ganon's boss key
RANDO_ENUM_ITEM(RCTYPE_SHOP)           // Shops
RANDO_ENUM_ITEM(RCTYPE_SCRUB)          // Scrubs
RANDO_ENUM_ITEM(RCTYPE_MERCHANT)       // Merchants
RANDO_ENUM_ITEM(RCTYPE_CHEST_GAME)     // RANDOTODO replace this once we implement it, just using it to exclude for now
RANDO_ENUM_ITEM(RCTYPE_LINKS_POCKET)   // RANDOTODO this feels hacky, replace with better starting items
RANDO_ENUM_ITEM(RCTYPE_GOSSIP_STONE)   // RANDOTODO make these into event access
RANDO_ENUM_ITEM(RCTYPE_STATIC_HINT)    // RANDOTODO make these into event access
RANDO_ENUM_ITEM(RCTYPE_SONG_LOCATION)  // Song locations
RANDO_ENUM_ITEM(RCTYPE_BOSS_HEART_OR_OTHER_REWARD) // Boss heart container or lesser dungeon rewards (lens, ice arrow)
RANDO_ENUM_ITEM(RCTYPE_POT)                        // Pots
RANDO_ENUM_ITEM(RCTYPE_CRATE)                      // Crates
RANDO_ENUM_ITEM(RCTYPE_NLCRATE)                    // NL Crates
RANDO_ENUM_ITEM(RCTYPE_SMALL_CRATE)                // Small crates
RANDO_ENUM_ITEM(RCTYPE_ROCK)                       // Rocks
RANDO_ENUM_ITEM(RCTYPE_BOULDER)                    // Boulders
RANDO_ENUM_ITEM(RCTYPE_TREE)                       // Trees
RANDO_ENUM_ITEM(RCTYPE_NLTREE)                     // NL Trees
RANDO_ENUM_ITEM(RCTYPE_BUSH)                       // Bushes
RANDO_ENUM_ITEM(RCTYPE_WONDER_ITEM)                // Wonder Items
RANDO_ENUM_ITEM(RCTYPE_DUNGEON_REWARD)             // Dungeon rewards (blue warps)
RANDO_ENUM_ITEM(RCTYPE_OCARINA)                    // Ocarina locations
RANDO_ENUM_ITEM(RCTYPE_BEEHIVE)                    // Beehives
RANDO_ENUM_ITEM(RCTYPE_FISH)                       // Fishes
RANDO_ENUM_ITEM(RCTYPE_FREESTANDING)               // Freestanding rupees and hearts
RANDO_ENUM_ITEM(RCTYPE_FOUNTAIN_FAIRY)             // Fairies in Fountains
RANDO_ENUM_ITEM(RCTYPE_STONE_FAIRY)                // Fairies from Gossip Stones
RANDO_ENUM_ITEM(RCTYPE_BEAN_FAIRY)                 // Fairies from Beans
RANDO_ENUM_ITEM(RCTYPE_SONG_FAIRY)                 // Fairies from Songs
RANDO_ENUM_ITEM(RCTYPE_BUTTERFLY_FAIRY)            // Fairies from Butterflies
RANDO_ENUM_ITEM(RCTYPE_GRASS)                      // Grass
RANDO_ENUM_ITEM(RCTYPE_SIGN)                       // Signs
RANDO_ENUM_ITEM(RCTYPE_BEGGAR)                     // Beggar
RANDO_ENUM_ITEM(RCTYPE_ICICLE)                     // Icicles
RANDO_ENUM_ITEM(RCTYPE_RED_ICE)                    // Red Ice
RANDO_ENUM_END(RandomizerCheckType)

RANDO_ENUM_BEGIN(RandomizerCheckQuest)
RANDO_ENUM_ITEM(RCQUEST_VANILLA)
RANDO_ENUM_ITEM(RCQUEST_MQ)
RANDO_ENUM_ITEM(RCQUEST_BOTH)
RANDO_ENUM_END(RandomizerCheckQuest)

RANDO_ENUM_BEGIN(RandomizerCheckArea)
RANDO_ENUM_ITEM(RCAREA_KOKIRI_FOREST)
RANDO_ENUM_ITEM(RCAREA_LOST_WOODS)
RANDO_ENUM_ITEM(RCAREA_SACRED_FOREST_MEADOW)
RANDO_ENUM_ITEM(RCAREA_HYRULE_FIELD)
RANDO_ENUM_ITEM(RCAREA_LAKE_HYLIA)
RANDO_ENUM_ITEM(RCAREA_GERUDO_VALLEY)
RANDO_ENUM_ITEM(RCAREA_GERUDO_FORTRESS)
RANDO_ENUM_ITEM(RCAREA_WASTELAND)
RANDO_ENUM_ITEM(RCAREA_DESERT_COLOSSUS)
RANDO_ENUM_ITEM(RCAREA_MARKET)
RANDO_ENUM_ITEM(RCAREA_HYRULE_CASTLE)
RANDO_ENUM_ITEM(RCAREA_KAKARIKO_VILLAGE)
RANDO_ENUM_ITEM(RCAREA_GRAVEYARD)
RANDO_ENUM_ITEM(RCAREA_DEATH_MOUNTAIN_TRAIL)
RANDO_ENUM_ITEM(RCAREA_GORON_CITY)
RANDO_ENUM_ITEM(RCAREA_DEATH_MOUNTAIN_CRATER)
RANDO_ENUM_ITEM(RCAREA_ZORAS_RIVER)
RANDO_ENUM_ITEM(RCAREA_ZORAS_DOMAIN)
RANDO_ENUM_ITEM(RCAREA_ZORAS_FOUNTAIN)
RANDO_ENUM_ITEM(RCAREA_LON_LON_RANCH)
RANDO_ENUM_ITEM(RCAREA_DEKU_TREE)
RANDO_ENUM_ITEM(RCAREA_DODONGOS_CAVERN)
RANDO_ENUM_ITEM(RCAREA_JABU_JABUS_BELLY)
RANDO_ENUM_ITEM(RCAREA_FOREST_TEMPLE)
RANDO_ENUM_ITEM(RCAREA_FIRE_TEMPLE)
RANDO_ENUM_ITEM(RCAREA_WATER_TEMPLE)
RANDO_ENUM_ITEM(RCAREA_SPIRIT_TEMPLE)
RANDO_ENUM_ITEM(RCAREA_SHADOW_TEMPLE)
RANDO_ENUM_ITEM(RCAREA_BOTTOM_OF_THE_WELL)
RANDO_ENUM_ITEM(RCAREA_ICE_CAVERN)
RANDO_ENUM_ITEM(RCAREA_GERUDO_TRAINING_GROUND)
RANDO_ENUM_ITEM(RCAREA_GANONS_CASTLE)
// If adding any more RANDO_ENUM_ITEM(areas) Check Tracker will need a refactor
RANDO_ENUM_ITEM(RCAREA_INVALID)
RANDO_ENUM_END(RandomizerCheckArea)

// Check tracker check visibility categories
RANDO_ENUM_BEGIN(RandomizerCheckStatus)
RANDO_ENUM_ITEM(RCSHOW_UNCHECKED)
RANDO_ENUM_ITEM(RCSHOW_SEEN)
RANDO_ENUM_ITEM(RCSHOW_IDENTIFIED)
RANDO_ENUM_ITEM(RCSHOW_SCUMMED)
RANDO_ENUM_ITEM(RCSHOW_COLLECTED)
RANDO_ENUM_ITEM(RCSHOW_SAVED)
RANDO_ENUM_END(RandomizerCheckStatus)

RANDO_ENUM_BEGIN(RandomizerHint)
RANDO_ENUM_ITEM(RH_NONE)
RANDO_ENUM_ITEM(RH_KF_DEKU_TREE_LEFT_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_KF_DEKU_TREE_RIGHT_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_KF_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_KF_STORMS_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_LW_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_SFM_MAZE_NEAR_LW_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_SFM_MAZE_CENTER_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_SFM_SARIA_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_HF_COW_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_HF_OPEN_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_HF_SOUTHEAST_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_TOT_LEFT_CENTER_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_TOT_LEFTMOST_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_TOT_RIGHT_CENTER_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_TOT_RIGHTMOST_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_HC_MALON_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_HC_ROCK_WALL_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_HC_STORMS_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_KAK_OPEN_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_GRAVEYARD_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_DMT_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_DMT_STORMS_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_GC_MAZE_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_GC_MEDIGORON_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_DMC_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_DMC_UPPER_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_ZR_NEAR_DOMAIN_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_ZR_NEAR_GROTTOS_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_ZR_OPEN_GROTTO_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_ZD_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_ZF_JABU_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_ZF_FAIRY_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_LH_LAB_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_LH_SOUTHEAST_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_LH_SOUTHWEST_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_GV_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_COLOSSUS_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_DODONGOS_CAVERN_GOSSIP_STONE)
RANDO_ENUM_ITEM(RH_GANONDORF_HINT)
RANDO_ENUM_ITEM(RH_GANONDORF_JOKE)
RANDO_ENUM_ITEM(RH_SHEIK_HINT)
RANDO_ENUM_ITEM(RH_DAMPES_DIARY)
RANDO_ENUM_ITEM(RH_GREG_RUPEE)
RANDO_ENUM_ITEM(RH_ALTAR_CHILD)
RANDO_ENUM_ITEM(RH_ALTAR_ADULT)
RANDO_ENUM_ITEM(RH_FOREST_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RH_FIRE_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RH_WATER_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RH_SPIRIT_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RH_SHADOW_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RH_GANONS_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RH_SARIA_HINT)
RANDO_ENUM_ITEM(RH_MIDO_HINT)
RANDO_ENUM_ITEM(RH_LOACH_HINT)
RANDO_ENUM_ITEM(RH_FISHING_POLE)
RANDO_ENUM_ITEM(RH_MINUET_WARP_LOC)
RANDO_ENUM_ITEM(RH_BOLERO_WARP_LOC)
RANDO_ENUM_ITEM(RH_SERENADE_WARP_LOC)
RANDO_ENUM_ITEM(RH_REQUIEM_WARP_LOC)
RANDO_ENUM_ITEM(RH_NOCTURNE_WARP_LOC)
RANDO_ENUM_ITEM(RH_PRELUDE_WARP_LOC)
RANDO_ENUM_ITEM(RH_HBA_HINT)
RANDO_ENUM_ITEM(RH_MALON_HINT)
RANDO_ENUM_ITEM(RH_CHICKENS_HINT)
RANDO_ENUM_ITEM(RH_BIG_POES_HINT)
RANDO_ENUM_ITEM(RH_BIGGORON_HINT)
RANDO_ENUM_ITEM(RH_FROGS_HINT)
RANDO_ENUM_ITEM(RH_OOT_HINT)
RANDO_ENUM_ITEM(RH_MASK_SHOP_HINT)
RANDO_ENUM_ITEM(RH_MAX)
RANDO_ENUM_END(RandomizerHint)

RANDO_ENUM_BEGIN(RandomizerSettingGroupKey)
RANDO_ENUM_ITEM(RSG_NONE)
RANDO_ENUM_ITEM(RSG_LOGIC)
RANDO_ENUM_ITEM(RSG_EXCLUDES_KOKIRI_FOREST)
RANDO_ENUM_ITEM(RSG_EXCLUDES_LOST_WOODS)
RANDO_ENUM_ITEM(RSG_EXCLUDES_SACRED_FOREST_MEADOW)
RANDO_ENUM_ITEM(RSG_EXCLUDES_DEKU_TREE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_FOREST_TEMPLE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_KAKARIKO_VILLAGE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_GRAVEYARD)
RANDO_ENUM_ITEM(RSG_EXCLUDES_BOTTOM_OF_THE_WELL)
RANDO_ENUM_ITEM(RSG_EXCLUDES_SHADOW_TEMPLE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_DEATH_MOUNTAIN_TRAIL)
RANDO_ENUM_ITEM(RSG_EXCLUDES_DEATH_MOUNTAIN_CRATER)
RANDO_ENUM_ITEM(RSG_EXCLUDES_GORON_CITY)
RANDO_ENUM_ITEM(RSG_EXCLUDES_DODONGOS_CAVERN)
RANDO_ENUM_ITEM(RSG_EXCLUDES_FIRE_TEMPLE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_ZORAS_RIVER)
RANDO_ENUM_ITEM(RSG_EXCLUDES_ZORAS_DOMAIN)
RANDO_ENUM_ITEM(RSG_EXCLUDES_ZORAS_FOUNTAIN)
RANDO_ENUM_ITEM(RSG_EXCLUDES_JABU_JABU)
RANDO_ENUM_ITEM(RSG_EXCLUDES_ICE_CAVERN)
RANDO_ENUM_ITEM(RSG_EXCLUDES_HYRULE_FIELD)
RANDO_ENUM_ITEM(RSG_EXCLUDES_LON_LON_RANCH)
RANDO_ENUM_ITEM(RSG_EXCLUDES_LAKE_HYLIA)
RANDO_ENUM_ITEM(RSG_EXCLUDES_WATER_TEMPLE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_GERUDO_VALLEY)
RANDO_ENUM_ITEM(RSG_EXCLUDES_GERUDO_FORTRESS)
RANDO_ENUM_ITEM(RSG_EXCLUDES_HAUNTED_WASTELAND)
RANDO_ENUM_ITEM(RSG_EXCLUDES_DESERT_COLOSSUS)
RANDO_ENUM_ITEM(RSG_EXCLUDES_GERUDO_TRAINING_GROUND)
RANDO_ENUM_ITEM(RSG_EXCLUDES_SPIRIT_TEMPLE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_HYRULE_CASTLE)
RANDO_ENUM_ITEM(RSG_EXCLUDES_MARKET)
RANDO_ENUM_ITEM(RSG_EXCLUDES_GANONS_CASTLE)
RANDO_ENUM_ITEM(RSG_EXCLUDES)
RANDO_ENUM_ITEM(RSG_TRICKS)
RANDO_ENUM_ITEM(RSG_GLITCHES)
RANDO_ENUM_ITEM(RSG_MENU_SIDEBAR_LOGIC_ACCESS)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_LOGIC_WINCON)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_LOGIC)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_WINCON)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_AREA_ACCESS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_AREA_ACCESS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_ENTRANCES)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_ENTRANCES)
RANDO_ENUM_ITEM(RSG_MENU_SIDEBAR_DUNGEONS)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_DUNGEON_ITEMS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_DUNGEON_ITEMS)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_KEYRINGS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_KEYRINGS)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_MQ)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_MQ)
RANDO_ENUM_ITEM(RSG_MENU_SIDEBAR_SHUFFLES)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_BASIC_SHUFFLES)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_BASIC_SHUFFLES)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_SHOP_SHUFFLES)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_SHOP_SHUFFLES)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_ADDITIONAL_ITEMS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_ADDITIONAL_ITEMS)
RANDO_ENUM_ITEM(RSG_MENU_SIDEBAR_HINTS_TRAPS)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_HINTS_TRAPS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_HINTS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_TRAPS)
RANDO_ENUM_ITEM(RSG_MENU_COLUMN_STATIC_HINTS)
RANDO_ENUM_ITEM(RSG_MENU_SECTION_STATIC_HINTS)
RANDO_ENUM_ITEM(RSG_OPEN)
RANDO_ENUM_ITEM(RSG_WORLD)
RANDO_ENUM_ITEM(RSG_SHUFFLE)
RANDO_ENUM_ITEM(RSG_SHUFFLE_DUNGEON_ITEMS)
RANDO_ENUM_ITEM(RSG_SHUFFLE_DUNGEON_QUESTS)
RANDO_ENUM_ITEM(RSG_DETAILED_LOGIC)
RANDO_ENUM_ITEM(RSG_STARTING_ITEMS)
RANDO_ENUM_ITEM(RSG_STARTING_SONGS)
RANDO_ENUM_ITEM(RSG_STARTING_OTHER)
RANDO_ENUM_ITEM(RSG_STARTING_INVENTORY)
RANDO_ENUM_ITEM(RSG_TIMESAVERS)
RANDO_ENUM_ITEM(RSG_MISC)
RANDO_ENUM_ITEM(RSG_ITEM_POOL)
RANDO_ENUM_ITEM(RSG_MAX)
RANDO_ENUM_END(RandomizerSettingGroupKey)

RANDO_ENUM_BEGIN(ItemObtainability)
RANDO_ENUM_ITEM(CAN_OBTAIN)
RANDO_ENUM_ITEM(CANT_OBTAIN_MISC)
RANDO_ENUM_ITEM(CANT_OBTAIN_ALREADY_HAVE)
RANDO_ENUM_ITEM(CANT_OBTAIN_NEED_UPGRADE)
RANDO_ENUM_ITEM(CANT_OBTAIN_NEED_EMPTY_BOTTLE)
RANDO_ENUM_END(ItemObtainability)

RANDO_ENUM_BEGIN(TrackerWindowType)
RANDO_ENUM_ITEM(TRACKER_WINDOW_FLOATING)
RANDO_ENUM_ITEM(TRACKER_WINDOW_WINDOW)
RANDO_ENUM_END(TrackerWindowType)

RANDO_ENUM_BEGIN(TrackerDisplayType)
RANDO_ENUM_ITEM(TRACKER_DISPLAY_ALWAYS)
RANDO_ENUM_ITEM(TRACKER_DISPLAY_COMBO_BUTTON)
RANDO_ENUM_END(TrackerDisplayType)

RANDO_ENUM_BEGIN(TrackerComboButton)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_A)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_B)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_C_UP)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_C_DOWN)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_C_LEFT)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_C_RIGHT)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_L)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_Z)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_R)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_START)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_D_UP)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_D_DOWN)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_D_LEFT)
RANDO_ENUM_ITEM(TRACKER_COMBO_BUTTON_D_RIGHT)
RANDO_ENUM_END(TrackerComboButton)

RANDO_ENUM_BEGIN(TriforceHuntMessages)
RANDO_ENUM_ITEM(TH_MESSAGE_START)
RANDO_ENUM_ITEM(TH_MESSAGE_PROGRESS)
RANDO_ENUM_ITEM(TH_MESSAGE_HALFWAY)
RANDO_ENUM_ITEM(TH_MESSAGE_ALMOSTDONE)
RANDO_ENUM_ITEM(TH_MESSAGE_FINISHED)
RANDO_ENUM_ITEM(TH_MESSAGE_SURPLUS)
RANDO_ENUM_END(TriforceHuntMessages)

RANDO_ENUM_BEGIN(RandomizerEnemy)
RANDO_ENUM_ITEM(RE_GOLD_SKULLTULA)
RANDO_ENUM_ITEM(RE_BIG_SKULLTULA)
RANDO_ENUM_ITEM(RE_DODONGO)
RANDO_ENUM_ITEM(RE_LIZALFOS)
RANDO_ENUM_ITEM(RE_GOHMA_LARVA)
RANDO_ENUM_ITEM(RE_KEESE)
RANDO_ENUM_ITEM(RE_FIRE_KEESE)
RANDO_ENUM_ITEM(RE_GUAY)
RANDO_ENUM_ITEM(RE_MAD_SCRUB)
RANDO_ENUM_ITEM(RE_BLUE_BUBBLE)
RANDO_ENUM_ITEM(RE_POE)
RANDO_ENUM_ITEM(RE_DEAD_HAND)
RANDO_ENUM_ITEM(RE_DEKU_BABA)
RANDO_ENUM_ITEM(RE_WITHERED_DEKU_BABA)
RANDO_ENUM_ITEM(RE_LIKE_LIKE)
RANDO_ENUM_ITEM(RE_STALFOS)
RANDO_ENUM_ITEM(RE_IRON_KNUCKLE)
RANDO_ENUM_ITEM(RE_FLARE_DANCER)
RANDO_ENUM_ITEM(RE_WOLFOS)
RANDO_ENUM_ITEM(RE_FLOORMASTER)
RANDO_ENUM_ITEM(RE_REDEAD)
RANDO_ENUM_ITEM(RE_MEG)
RANDO_ENUM_ITEM(RE_ARMOS)
RANDO_ENUM_ITEM(RE_GREEN_BUBBLE)
RANDO_ENUM_ITEM(RE_DINOLFOS)
RANDO_ENUM_ITEM(RE_TORCH_SLUG)
RANDO_ENUM_ITEM(RE_FREEZARD)
RANDO_ENUM_ITEM(RE_SHELL_BLADE)
RANDO_ENUM_ITEM(RE_SPIKE)
RANDO_ENUM_ITEM(RE_WHITE_WOLFOS)
RANDO_ENUM_ITEM(RE_STINGER)
RANDO_ENUM_ITEM(RE_BIG_OCTO)
RANDO_ENUM_ITEM(RE_GERUDO_WARRIOR)
RANDO_ENUM_ITEM(RE_GERUDO_GUARD)
RANDO_ENUM_ITEM(RE_BREAK_ROOM_GUARD)
RANDO_ENUM_ITEM(RE_GIBDO)
RANDO_ENUM_ITEM(RE_GOHMA)
RANDO_ENUM_ITEM(RE_KING_DODONGO)
RANDO_ENUM_ITEM(RE_BARINADE)
RANDO_ENUM_ITEM(RE_PHANTOM_GANON)
RANDO_ENUM_ITEM(RE_VOLVAGIA)
RANDO_ENUM_ITEM(RE_MORPHA)
RANDO_ENUM_ITEM(RE_BONGO_BONGO)
RANDO_ENUM_ITEM(RE_TWINROVA)
RANDO_ENUM_ITEM(RE_GANONDORF)
RANDO_ENUM_ITEM(RE_GANON)
RANDO_ENUM_ITEM(RE_DARK_LINK)
RANDO_ENUM_ITEM(RE_ANUBIS)
RANDO_ENUM_ITEM(RE_BEAMOS)
RANDO_ENUM_ITEM(RE_WALLMASTER)
RANDO_ENUM_ITEM(RE_PURPLE_LEEVER)
RANDO_ENUM_ITEM(RE_TENTACLE)
RANDO_ENUM_ITEM(RE_BARI)
RANDO_ENUM_ITEM(RE_SHABOM)
RANDO_ENUM_ITEM(RE_OCTOROK)
RANDO_ENUM_ITEM(RE_WALLTULA)
RANDO_ENUM_END(RandomizerEnemy)

// RANDOTODO compare child long jumpslash range with adult short
RANDO_ENUM_BEGIN(EnemyDistance)
RANDO_ENUM_ITEM(ED_CLOSE)
// hammer or kokiri sword
RANDO_ENUM_ITEM(ED_SHORT_JUMPSLASH)
RANDO_ENUM_ITEM(ED_MASTER_SWORD_JUMPSLASH)
// sticks or BGS
RANDO_ENUM_ITEM(ED_LONG_JUMPSLASH)
RANDO_ENUM_ITEM(ED_BOMB_THROW)
RANDO_ENUM_ITEM(ED_BOOMERANG)
RANDO_ENUM_ITEM(ED_HOOKSHOT)
RANDO_ENUM_ITEM(ED_LONGSHOT)
RANDO_ENUM_ITEM(ED_FAR)
RANDO_ENUM_END(EnemyDistance)

RANDO_ENUM_BEGIN(RandoWaterLevel)
RANDO_ENUM_ITEM(WL_LOW)
RANDO_ENUM_ITEM(WL_MID)
RANDO_ENUM_ITEM(WL_HIGH)
RANDO_ENUM_ITEM(WL_LOW_OR_MID)
RANDO_ENUM_ITEM(WL_HIGH_OR_MID)
RANDO_ENUM_END(RandoWaterLevel)

RANDO_ENUM_BEGIN(RandoAgeTime)
RANDO_ENUM_ITEM(RAT_NONE)
RANDO_ENUM_ITEM(RAT_CHILD_DAY)
RANDO_ENUM_ITEM(RAT_CHILD_NIGHT)
RANDO_ENUM_ITEM(RAT_ADULT_DAY)
RANDO_ENUM_ITEM(RAT_ADULT_NIGHT)
RANDO_ENUM_ITEM(RAT_MAX)
RANDO_ENUM_END(RandoAgeTime)

RANDO_ENUM_BEGIN(GrottoEntranceOffsets)
/* 0x00 */ RANDO_ENUM_ITEM(GROTTO_COLOSSUS_OFFSET)
/* 0x01 */ RANDO_ENUM_ITEM(GROTTO_LH_OFFSET)
/* 0x02 */ RANDO_ENUM_ITEM(GROTTO_ZR_STORMS_OFFSET)
/* 0x03 */ RANDO_ENUM_ITEM(GROTTO_ZR_FAIRY_OFFSET)
/* 0x04 */ RANDO_ENUM_ITEM(GROTTO_ZR_OPEN_OFFSET)
/* 0x05 */ RANDO_ENUM_ITEM(GROTTO_DMC_HAMMER_OFFSET)
/* 0x06 */ RANDO_ENUM_ITEM(GROTTO_DMC_UPPER_OFFSET)
/* 0x07 */ RANDO_ENUM_ITEM(GROTTO_GORON_CITY_OFFSET)
/* 0x08 */ RANDO_ENUM_ITEM(GROTTO_DMT_STORMS_OFFSET)
/* 0x09 */ RANDO_ENUM_ITEM(GROTTO_DMT_COW_OFFSET)
/* 0x0A */ RANDO_ENUM_ITEM(GROTTO_KAK_OPEN_OFFSET)
/* 0x0B */ RANDO_ENUM_ITEM(GROTTO_KAK_REDEAD_OFFSET)
/* 0x0C */ RANDO_ENUM_ITEM(GROTTO_HC_STORMS_OFFSET)
/* 0x0D */ RANDO_ENUM_ITEM(GROTTO_HF_TEKTITE_OFFSET)
/* 0x0E */ RANDO_ENUM_ITEM(GROTTO_HF_NEAR_KAK_OFFSET)
/* 0x0F */ RANDO_ENUM_ITEM(GROTTO_HF_FAIRY_OFFSET)
/* 0x10 */ RANDO_ENUM_ITEM(GROTTO_HF_NEAR_MARKET_OFFSET)
/* 0x11 */ RANDO_ENUM_ITEM(GROTTO_HF_COW_OFFSET)
/* 0x12 */ RANDO_ENUM_ITEM(GROTTO_HF_INSIDE_FENCE_OFFSET)
/* 0x13 */ RANDO_ENUM_ITEM(GROTTO_HF_OPEN_OFFSET)
/* 0x14 */ RANDO_ENUM_ITEM(GROTTO_HF_SOUTHEAST_OFFSET)
/* 0x15 */ RANDO_ENUM_ITEM(GROTTO_LLR_OFFSET)
/* 0x16 */ RANDO_ENUM_ITEM(GROTTO_SFM_WOLFOS_OFFSET)
/* 0x17 */ RANDO_ENUM_ITEM(GROTTO_SFM_STORMS_OFFSET)
/* 0x18 */ RANDO_ENUM_ITEM(GROTTO_SFM_FAIRY_OFFSET)
/* 0x19 */ RANDO_ENUM_ITEM(GROTTO_LW_SCRUBS_OFFSET)
/* 0x1A */ RANDO_ENUM_ITEM(GROTTO_LW_NEAR_SHORTCUTS_OFFSET)
/* 0x1B */ RANDO_ENUM_ITEM(GROTTO_KF_STORMS_OFFSET)
/* 0x1C */ RANDO_ENUM_ITEM(GROTTO_ZD_STORMS_OFFSET)
/* 0x1D */ RANDO_ENUM_ITEM(GROTTO_GF_STORMS_OFFSET)
/* 0x1E */ RANDO_ENUM_ITEM(GROTTO_GV_STORMS_OFFSET)
/* 0x1F */ RANDO_ENUM_ITEM(GROTTO_GV_OCTOROK_OFFSET)
/* 0x20 */ RANDO_ENUM_ITEM(GROTTO_LW_DEKU_THEATRE_OFFSET)
/* 0x21 */ RANDO_ENUM_ITEM(GROTTO_OFFSET_MAX)
RANDO_ENUM_END(GrottoEntranceOffsets)

#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
