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 |