607 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			607 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
Option definitions for Pokemon Emerald
 | 
						|
"""
 | 
						|
from dataclasses import dataclass
 | 
						|
from typing import Dict, Type
 | 
						|
 | 
						|
from Options import Choice, DefaultOnToggle, Option, OptionSet, Range, Toggle, FreeText, PerGameCommonOptions
 | 
						|
 | 
						|
from .data import data
 | 
						|
 | 
						|
 | 
						|
class Goal(Choice):
 | 
						|
    """
 | 
						|
    Determines what your goal is to consider the game beaten
 | 
						|
 | 
						|
    Champion: Become the champion and enter the hall of fame
 | 
						|
    Steven: Defeat Steven in Meteor Falls
 | 
						|
    Norman: Defeat Norman in Petalburg Gym
 | 
						|
    """
 | 
						|
    display_name = "Goal"
 | 
						|
    default = 0
 | 
						|
    option_champion = 0
 | 
						|
    option_steven = 1
 | 
						|
    option_norman = 2
 | 
						|
 | 
						|
 | 
						|
class RandomizeBadges(Choice):
 | 
						|
    """
 | 
						|
    Adds Badges to the pool
 | 
						|
 | 
						|
    Vanilla: Gym leaders give their own badge
 | 
						|
    Shuffle: Gym leaders give a random badge
 | 
						|
    Completely Random: Badges can be found anywhere
 | 
						|
    """
 | 
						|
    display_name = "Randomize Badges"
 | 
						|
    default = 2
 | 
						|
    option_vanilla = 0
 | 
						|
    option_shuffle = 1
 | 
						|
    option_completely_random = 2
 | 
						|
 | 
						|
 | 
						|
class RandomizeHms(Choice):
 | 
						|
    """
 | 
						|
    Adds HMs to the pool
 | 
						|
 | 
						|
    Vanilla: HMs are at their vanilla locations
 | 
						|
    Shuffle: HMs are shuffled among vanilla HM locations
 | 
						|
    Completely Random: HMs can be found anywhere
 | 
						|
    """
 | 
						|
    display_name = "Randomize HMs"
 | 
						|
    default = 2
 | 
						|
    option_vanilla = 0
 | 
						|
    option_shuffle = 1
 | 
						|
    option_completely_random = 2
 | 
						|
 | 
						|
 | 
						|
class RandomizeKeyItems(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    Adds most key items to the pool. These are usually required to unlock
 | 
						|
    a location or region (e.g. Devon Scope, Letter, Basement Key)
 | 
						|
    """
 | 
						|
    display_name = "Randomize Key Items"
 | 
						|
 | 
						|
 | 
						|
class RandomizeBikes(Toggle):
 | 
						|
    """
 | 
						|
    Adds the mach bike and acro bike to the pool
 | 
						|
    """
 | 
						|
    display_name = "Randomize Bikes"
 | 
						|
 | 
						|
 | 
						|
class RandomizeRods(Toggle):
 | 
						|
    """
 | 
						|
    Adds fishing rods to the pool
 | 
						|
    """
 | 
						|
    display_name = "Randomize Fishing Rods"
 | 
						|
 | 
						|
 | 
						|
class RandomizeOverworldItems(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    Adds items on the ground with a Pokeball sprite to the pool
 | 
						|
    """
 | 
						|
    display_name = "Randomize Overworld Items"
 | 
						|
 | 
						|
 | 
						|
class RandomizeHiddenItems(Toggle):
 | 
						|
    """
 | 
						|
    Adds hidden items to the pool
 | 
						|
    """
 | 
						|
    display_name = "Randomize Hidden Items"
 | 
						|
 | 
						|
 | 
						|
class RandomizeNpcGifts(Toggle):
 | 
						|
    """
 | 
						|
    Adds most gifts received from NPCs to the pool (not including key items or HMs)
 | 
						|
    """
 | 
						|
    display_name = "Randomize NPC Gifts"
 | 
						|
 | 
						|
 | 
						|
class ItemPoolType(Choice):
 | 
						|
    """
 | 
						|
    Determines which non-progression items get put into the item pool
 | 
						|
 | 
						|
    Shuffled: Item pool consists of shuffled vanilla items
 | 
						|
    Diverse Balanced: Item pool consists of random items approximately proportioned
 | 
						|
    according to what they're replacing (i.e. more pokeballs, fewer X items, etc...)
 | 
						|
    Diverse: Item pool consists of uniformly random (non-unique) items
 | 
						|
    """
 | 
						|
    display_name = "Item Pool Type"
 | 
						|
    default = 0
 | 
						|
    option_shuffled = 0
 | 
						|
    option_diverse_balanced = 1
 | 
						|
    option_diverse = 2
 | 
						|
 | 
						|
 | 
						|
class HiddenItemsRequireItemfinder(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    The Itemfinder is logically required to pick up hidden items
 | 
						|
    """
 | 
						|
    display_name = "Require Itemfinder"
 | 
						|
 | 
						|
 | 
						|
class DarkCavesRequireFlash(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    The lower floors of Granite Cave and Victory Road logically require use of HM05 Flash
 | 
						|
    """
 | 
						|
    display_name = "Require Flash"
 | 
						|
 | 
						|
 | 
						|
class EnableFerry(Toggle):
 | 
						|
    """
 | 
						|
    The ferry between Slateport, Lilycove, and the Battle Frontier can be used if you have the S.S. Ticket
 | 
						|
    """
 | 
						|
    display_name = "Enable Ferry"
 | 
						|
 | 
						|
 | 
						|
class EliteFourRequirement(Choice):
 | 
						|
    """
 | 
						|
    Sets the requirements to challenge the elite four
 | 
						|
 | 
						|
    Badges: Obtain some number of badges
 | 
						|
    Gyms: Defeat some number of gyms
 | 
						|
    """
 | 
						|
    display_name = "Elite Four Requirement"
 | 
						|
    default = 0
 | 
						|
    option_badges = 0
 | 
						|
    option_gyms = 1
 | 
						|
 | 
						|
 | 
						|
class EliteFourCount(Range):
 | 
						|
    """
 | 
						|
    Sets the number of badges/gyms required to challenge the elite four
 | 
						|
    """
 | 
						|
    display_name = "Elite Four Count"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 8
 | 
						|
    default = 8
 | 
						|
 | 
						|
 | 
						|
class NormanRequirement(Choice):
 | 
						|
    """
 | 
						|
    Sets the requirements to challenge the Petalburg Gym
 | 
						|
 | 
						|
    Badges: Obtain some number of badges
 | 
						|
    Gyms: Defeat some number of gyms
 | 
						|
    """
 | 
						|
    display_name = "Norman Requirement"
 | 
						|
    default = 0
 | 
						|
    option_badges = 0
 | 
						|
    option_gyms = 1
 | 
						|
 | 
						|
 | 
						|
class NormanCount(Range):
 | 
						|
    """
 | 
						|
    Sets the number of badges/gyms required to challenge the Petalburg Gym
 | 
						|
    """
 | 
						|
    display_name = "Norman Count"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 7
 | 
						|
    default = 4
 | 
						|
 | 
						|
 | 
						|
class RandomizeWildPokemon(Choice):
 | 
						|
    """
 | 
						|
    Randomizes wild pokemon encounters (grass, caves, water, fishing)
 | 
						|
 | 
						|
    Vanilla: Wild encounters are unchanged
 | 
						|
    Match Base Stats: Wild pokemon are replaced with species with approximately the same bst
 | 
						|
    Match Type: Wild pokemon are replaced with species that share a type with the original
 | 
						|
    Match Base Stats and Type: Apply both Match Base Stats and Match Type
 | 
						|
    Completely Random: There are no restrictions
 | 
						|
    """
 | 
						|
    display_name = "Randomize Wild Pokemon"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_match_base_stats = 1
 | 
						|
    option_match_type = 2
 | 
						|
    option_match_base_stats_and_type = 3
 | 
						|
    option_completely_random = 4
 | 
						|
 | 
						|
 | 
						|
class AllowWildLegendaries(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    Wild encounters can be replaced by legendaries. Only applied if Randomize Wild Pokemon is not Vanilla.
 | 
						|
    """
 | 
						|
    display_name = "Allow Wild Legendaries"
 | 
						|
 | 
						|
 | 
						|
class RandomizeStarters(Choice):
 | 
						|
    """
 | 
						|
    Randomizes the starter pokemon in Professor Birch's bag
 | 
						|
 | 
						|
    Vanilla: Starters are unchanged
 | 
						|
    Match Base Stats: Starters are replaced with species with approximately the same bst
 | 
						|
    Match Type: Starters are replaced with species that share a type with the original
 | 
						|
    Match Base Stats and Type: Apply both Match Base Stats and Match Type
 | 
						|
    Completely Random: There are no restrictions
 | 
						|
    """
 | 
						|
    display_name = "Randomize Starters"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_match_base_stats = 1
 | 
						|
    option_match_type = 2
 | 
						|
    option_match_base_stats_and_type = 3
 | 
						|
    option_completely_random = 4
 | 
						|
 | 
						|
 | 
						|
class AllowStarterLegendaries(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    Starters can be replaced by legendaries. Only applied if Randomize Starters is not Vanilla.
 | 
						|
    """
 | 
						|
    display_name = "Allow Starter Legendaries"
 | 
						|
 | 
						|
 | 
						|
class RandomizeTrainerParties(Choice):
 | 
						|
    """
 | 
						|
    Randomizes the parties of all trainers.
 | 
						|
 | 
						|
    Vanilla: Parties are unchanged
 | 
						|
    Match Base Stats: Trainer pokemon are replaced with species with approximately the same bst
 | 
						|
    Match Type: Trainer pokemon are replaced with species that share a type with the original
 | 
						|
    Match Base Stats and Type: Apply both Match Base Stats and Match Type
 | 
						|
    Completely Random: There are no restrictions
 | 
						|
    """
 | 
						|
    display_name = "Randomize Trainer Parties"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_match_base_stats = 1
 | 
						|
    option_match_type = 2
 | 
						|
    option_match_base_stats_and_type = 3
 | 
						|
    option_completely_random = 4
 | 
						|
 | 
						|
 | 
						|
class AllowTrainerLegendaries(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    Enemy trainer pokemon can be replaced by legendaries. Only applied if Randomize Trainer Parties is not Vanilla.
 | 
						|
    """
 | 
						|
    display_name = "Allow Trainer Legendaries"
 | 
						|
 | 
						|
 | 
						|
class RandomizeStaticEncounters(Choice):
 | 
						|
    """
 | 
						|
    Randomizes static encounters (Rayquaza, hidden Kekleons, fake Voltorb pokeballs, etc...)
 | 
						|
 | 
						|
    Vanilla: Static encounters are unchanged
 | 
						|
    Shuffle: Static encounters are shuffled between each other
 | 
						|
    Match Base Stats: Static encounters are replaced with species with approximately the same bst
 | 
						|
    Match Type: Static encounters are replaced with species that share a type with the original
 | 
						|
    Match Base Stats and Type: Apply both Match Base Stats and Match Type
 | 
						|
    Completely Random: There are no restrictions
 | 
						|
    """
 | 
						|
    display_name = "Randomize Static Encounters"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_shuffle = 1
 | 
						|
    option_match_base_stats = 2
 | 
						|
    option_match_type = 3
 | 
						|
    option_match_base_stats_and_type = 4
 | 
						|
    option_completely_random = 5
 | 
						|
 | 
						|
 | 
						|
class RandomizeTypes(Choice):
 | 
						|
    """
 | 
						|
    Randomizes the type(s) of every pokemon. Each species will have the same number of types.
 | 
						|
 | 
						|
    Vanilla: Types are unchanged
 | 
						|
    Shuffle: Types are shuffled globally for all species (e.g. every Water-type pokemon becomes Fire-type)
 | 
						|
    Completely Random: Each species has its type(s) randomized
 | 
						|
    Follow Evolutions: Types are randomized per evolution line instead of per species
 | 
						|
    """
 | 
						|
    display_name = "Randomize Types"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_shuffle = 1
 | 
						|
    option_completely_random = 2
 | 
						|
    option_follow_evolutions = 3
 | 
						|
 | 
						|
 | 
						|
class RandomizeAbilities(Choice):
 | 
						|
    """
 | 
						|
    Randomizes abilities of every species. Each species will have the same number of abilities.
 | 
						|
 | 
						|
    Vanilla: Abilities are unchanged
 | 
						|
    Completely Random: Each species has its abilities randomized
 | 
						|
    Follow Evolutions: Abilities are randomized, but if a pokemon would normally retain its ability
 | 
						|
    when evolving, the random ability will also be retained
 | 
						|
    """
 | 
						|
    display_name = "Randomize Abilities"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_completely_random = 1
 | 
						|
    option_follow_evolutions = 2
 | 
						|
 | 
						|
 | 
						|
class AbilityBlacklist(OptionSet):
 | 
						|
    """
 | 
						|
    A list of abilities which no pokemon should have if abilities are randomized.
 | 
						|
    For example, you could exclude Wonder Guard and Arena Trap like this:
 | 
						|
    ["Wonder Guard", "Arena Trap"]
 | 
						|
    """
 | 
						|
    display_name = "Ability Blacklist"
 | 
						|
    valid_keys = frozenset([ability.label for ability in data.abilities])
 | 
						|
 | 
						|
 | 
						|
class LevelUpMoves(Choice):
 | 
						|
    """
 | 
						|
    Randomizes the moves a pokemon learns when they reach a level where they would learn a move.
 | 
						|
    Your starter is guaranteed to have a usable damaging move.
 | 
						|
 | 
						|
    Vanilla: Learnset is unchanged
 | 
						|
    Randomized: Moves are randomized
 | 
						|
    Start with Four Moves: Moves are randomized and all Pokemon know 4 moves at level 1
 | 
						|
    """
 | 
						|
    display_name = "Level Up Moves"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_randomized = 1
 | 
						|
    option_start_with_four_moves = 2
 | 
						|
 | 
						|
 | 
						|
class MoveMatchTypeBias(Range):
 | 
						|
    """
 | 
						|
    Sets the probability that a learned move will be forced match one of the types of a pokemon.
 | 
						|
 | 
						|
    If a move is not forced to match type, it will roll for Normal type bias.
 | 
						|
    """
 | 
						|
    display_name = "Move Match Type Bias"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class MoveNormalTypeBias(Range):
 | 
						|
    """
 | 
						|
    After it has been decided that a move will not be forced to match types, sets the probability that a learned move
 | 
						|
    will be forced to be the Normal type.
 | 
						|
 | 
						|
    If a move is not forced to be Normal, it will be completely random.
 | 
						|
    """
 | 
						|
    display_name = "Move Normal Type Bias"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class HmCompatibility(Choice):
 | 
						|
    """
 | 
						|
    Modifies the compatibility of HMs
 | 
						|
 | 
						|
    Vanilla: Compatibility is unchanged
 | 
						|
    Fully Compatible: Every species can learn any HM
 | 
						|
    Completely Random: Compatibility is 50/50 for every HM (does not remain consistent across evolution)
 | 
						|
    """
 | 
						|
    display_name = "HM Compatibility"
 | 
						|
    default = 1
 | 
						|
    option_vanilla = 0
 | 
						|
    option_fully_compatible = 1
 | 
						|
    option_completely_random = 2
 | 
						|
 | 
						|
 | 
						|
class TmCompatibility(Choice):
 | 
						|
    """
 | 
						|
    Modifies the compatibility of TMs
 | 
						|
 | 
						|
    Vanilla: Compatibility is unchanged
 | 
						|
    Fully Compatible: Every species can learn any TM
 | 
						|
    Completely Random: Compatibility is 50/50 for every TM (does not remain consistent across evolution)
 | 
						|
    """
 | 
						|
    display_name = "TM Compatibility"
 | 
						|
    default = 0
 | 
						|
    option_vanilla = 0
 | 
						|
    option_fully_compatible = 1
 | 
						|
    option_completely_random = 2
 | 
						|
 | 
						|
 | 
						|
class TmMoves(Toggle):
 | 
						|
    """
 | 
						|
    Randomizes the moves taught by TMs
 | 
						|
    """
 | 
						|
    display_name = "TM Moves"
 | 
						|
 | 
						|
 | 
						|
class ReusableTms(Toggle):
 | 
						|
    """
 | 
						|
    Sets TMs to not break after use (they remain sellable)
 | 
						|
    """
 | 
						|
    display_name = "Reusable TMs"
 | 
						|
 | 
						|
 | 
						|
class MinCatchRate(Range):
 | 
						|
    """
 | 
						|
    Sets the minimum catch rate a pokemon can have. Any pokemon with a catch rate below this floor will have it raised to this value.
 | 
						|
 | 
						|
    Legendaries are often in the single digits
 | 
						|
    Fully evolved pokemon are often double digits
 | 
						|
    Pidgey is 255
 | 
						|
    """
 | 
						|
    display_name = "Minimum Catch Rate"
 | 
						|
    range_start = 3
 | 
						|
    range_end = 255
 | 
						|
    default = 3
 | 
						|
 | 
						|
 | 
						|
class GuaranteedCatch(Toggle):
 | 
						|
    """
 | 
						|
    Every throw is guaranteed to catch a wild pokemon
 | 
						|
    """
 | 
						|
    display_name = "Guaranteed Catch"
 | 
						|
 | 
						|
 | 
						|
class ExpModifier(Range):
 | 
						|
    """
 | 
						|
    Multiplies gained experience by a percentage
 | 
						|
 | 
						|
    100 is default
 | 
						|
    50 is half
 | 
						|
    200 is double
 | 
						|
    etc...
 | 
						|
    """
 | 
						|
    display_name = "Exp Modifier"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 1000
 | 
						|
    default = 100
 | 
						|
 | 
						|
 | 
						|
class BlindTrainers(Toggle):
 | 
						|
    """
 | 
						|
    Causes trainers to not start a battle with you unless you talk to them
 | 
						|
    """
 | 
						|
    display_name = "Blind Trainers"
 | 
						|
 | 
						|
 | 
						|
class DoubleBattleChance(Range):
 | 
						|
    """
 | 
						|
    The percent chance that a trainer with more than 1 pokemon will be converted into a double battle.
 | 
						|
    If these trainers would normally approach you, they will only do so if you have 2 unfainted pokemon.
 | 
						|
    They can be battled by talking to them no matter what.
 | 
						|
    """
 | 
						|
    display_name = "Double Battle Chance"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class BetterShops(Toggle):
 | 
						|
    """
 | 
						|
    Pokemarts sell every item that can be obtained in a pokemart (except mail, which is still unique to the relevant city)
 | 
						|
    """
 | 
						|
    display_name = "Better Shops"
 | 
						|
 | 
						|
 | 
						|
class RemoveRoadblocks(OptionSet):
 | 
						|
    """
 | 
						|
    Removes specific NPCs that normally stand in your way until certain events are completed.
 | 
						|
 | 
						|
    This can open up the world a bit and make your playthrough less linear, but careful how many you remove; it may make too much of your world accessible upon receiving Surf.
 | 
						|
 | 
						|
    Possible values are:
 | 
						|
    "Route 110 Aqua Grunts"
 | 
						|
    "Route 112 Magma Grunts"
 | 
						|
    "Route 119 Aqua Grunts"
 | 
						|
    "Safari Zone Construction Workers"
 | 
						|
    "Lilycove City Wailmer"
 | 
						|
    "Aqua Hideout Grunts"
 | 
						|
    "Seafloor Cavern Aqua Grunt"
 | 
						|
    """
 | 
						|
    display_name = "Remove Roadblocks"
 | 
						|
    valid_keys = frozenset([
 | 
						|
        "Route 110 Aqua Grunts",
 | 
						|
        "Route 112 Magma Grunts",
 | 
						|
        "Route 119 Aqua Grunts",
 | 
						|
        "Safari Zone Construction Workers",
 | 
						|
        "Lilycove City Wailmer",
 | 
						|
        "Aqua Hideout Grunts",
 | 
						|
        "Seafloor Cavern Aqua Grunt"
 | 
						|
    ])
 | 
						|
 | 
						|
 | 
						|
class ExtraBoulders(Toggle):
 | 
						|
    """
 | 
						|
    Places strength boulders on Route 115 which block access to Meteor Falls from the beach.
 | 
						|
    This aims to take some power away from Surf as a tool for access.
 | 
						|
    """
 | 
						|
    display_name = "Extra Boulders"
 | 
						|
 | 
						|
 | 
						|
class FreeFlyLocation(Toggle):
 | 
						|
    """
 | 
						|
    Enables flying to one random location when Mom gives you the running shoes (excluding cities reachable with no items)
 | 
						|
    """
 | 
						|
    display_name = "Free Fly Location"
 | 
						|
 | 
						|
 | 
						|
class FlyWithoutBadge(DefaultOnToggle):
 | 
						|
    """
 | 
						|
    Fly does not require the Feather Badge to use in the field
 | 
						|
    """
 | 
						|
    display_name = "Fly Without Badge"
 | 
						|
 | 
						|
 | 
						|
class TurboA(Toggle):
 | 
						|
    """
 | 
						|
    Holding A will advance most text automatically
 | 
						|
    """
 | 
						|
    display_name = "Turbo A"
 | 
						|
 | 
						|
 | 
						|
class ReceiveItemMessages(Choice):
 | 
						|
    """
 | 
						|
    Determines whether you receive an in-game notification when receiving an item. Items can still only be received in the overworld.
 | 
						|
 | 
						|
    All: Every item shows a message
 | 
						|
    Progression: Only progression items show a message
 | 
						|
    None: All items are added to your bag silently (badges will still show)
 | 
						|
    """
 | 
						|
    display_name = "Receive Item Messages"
 | 
						|
    default = 0
 | 
						|
    option_all = 0
 | 
						|
    option_progression = 1
 | 
						|
    option_none = 2
 | 
						|
 | 
						|
 | 
						|
class EasterEgg(FreeText):
 | 
						|
    """
 | 
						|
    ???
 | 
						|
    """
 | 
						|
    default = "Example Passphrase"
 | 
						|
 | 
						|
 | 
						|
@dataclass
 | 
						|
class PokemonEmeraldOptions(PerGameCommonOptions):
 | 
						|
    goal: Goal
 | 
						|
 | 
						|
    badges: RandomizeBadges
 | 
						|
    hms: RandomizeHms
 | 
						|
    key_items: RandomizeKeyItems
 | 
						|
    bikes: RandomizeBikes
 | 
						|
    rods: RandomizeRods
 | 
						|
    overworld_items: RandomizeOverworldItems
 | 
						|
    hidden_items: RandomizeHiddenItems
 | 
						|
    npc_gifts: RandomizeNpcGifts
 | 
						|
    item_pool_type: ItemPoolType
 | 
						|
 | 
						|
    require_itemfinder: HiddenItemsRequireItemfinder
 | 
						|
    require_flash: DarkCavesRequireFlash
 | 
						|
    elite_four_requirement: EliteFourRequirement
 | 
						|
    elite_four_count: EliteFourCount
 | 
						|
    norman_requirement: NormanRequirement
 | 
						|
    norman_count: NormanCount
 | 
						|
 | 
						|
    wild_pokemon: RandomizeWildPokemon
 | 
						|
    allow_wild_legendaries: AllowWildLegendaries
 | 
						|
    starters: RandomizeStarters
 | 
						|
    allow_starter_legendaries: AllowStarterLegendaries
 | 
						|
    trainer_parties: RandomizeTrainerParties
 | 
						|
    allow_trainer_legendaries: AllowTrainerLegendaries
 | 
						|
    static_encounters: RandomizeStaticEncounters
 | 
						|
    types: RandomizeTypes
 | 
						|
    abilities: RandomizeAbilities
 | 
						|
    ability_blacklist: AbilityBlacklist
 | 
						|
 | 
						|
    level_up_moves: LevelUpMoves
 | 
						|
    move_match_type_bias: MoveMatchTypeBias
 | 
						|
    move_normal_type_bias: MoveNormalTypeBias
 | 
						|
    tm_compatibility: TmCompatibility
 | 
						|
    hm_compatibility: HmCompatibility
 | 
						|
    tm_moves: TmMoves
 | 
						|
    reusable_tms: ReusableTms
 | 
						|
 | 
						|
    min_catch_rate: MinCatchRate
 | 
						|
    guaranteed_catch: GuaranteedCatch
 | 
						|
    exp_modifier: ExpModifier
 | 
						|
    blind_trainers: BlindTrainers
 | 
						|
    double_battle_chance: DoubleBattleChance
 | 
						|
    better_shops: BetterShops
 | 
						|
 | 
						|
    enable_ferry: EnableFerry
 | 
						|
    remove_roadblocks: RemoveRoadblocks
 | 
						|
    extra_boulders: ExtraBoulders
 | 
						|
    free_fly_location: FreeFlyLocation
 | 
						|
    fly_without_badge: FlyWithoutBadge
 | 
						|
 | 
						|
    turbo_a: TurboA
 | 
						|
    receive_item_messages: ReceiveItemMessages
 | 
						|
 | 
						|
    easter_egg: EasterEgg
 |