Pokemon Emerald: Adjust options (#3278)
This commit is contained in:
parent
4cab3b6371
commit
f40b10dc97
|
@ -5,6 +5,8 @@
|
||||||
- When you blacklist species from wild encounters and turn on dexsanity, blacklisted species are not added as locations
|
- When you blacklist species from wild encounters and turn on dexsanity, blacklisted species are not added as locations
|
||||||
and won't show up in the wild. Previously they would be forced to show up exactly once.
|
and won't show up in the wild. Previously they would be forced to show up exactly once.
|
||||||
- Added support for some new autotracking events.
|
- Added support for some new autotracking events.
|
||||||
|
- Updated option descriptions.
|
||||||
|
- Added `full` alias for `100` on TM and HM compatibility options.
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ Option definitions for Pokemon Emerald
|
||||||
"""
|
"""
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from Options import (Choice, DeathLink, DefaultOnToggle, TextChoice, OptionSet, NamedRange, Range, Toggle, FreeText,
|
from Options import (Choice, DeathLink, DefaultOnToggle, OptionSet, NamedRange, Range, Toggle, FreeText,
|
||||||
PerGameCommonOptions)
|
PerGameCommonOptions)
|
||||||
|
|
||||||
from .data import data
|
from .data import data
|
||||||
|
@ -11,12 +11,12 @@ from .data import data
|
||||||
|
|
||||||
class Goal(Choice):
|
class Goal(Choice):
|
||||||
"""
|
"""
|
||||||
Determines what your goal is to consider the game beaten
|
Determines what your goal is to consider the game beaten.
|
||||||
|
|
||||||
Champion: Become the champion and enter the hall of fame
|
- Champion: Become the champion and enter the hall of fame
|
||||||
Steven: Defeat Steven in Meteor Falls
|
- Steven: Defeat Steven in Meteor Falls
|
||||||
Norman: Defeat Norman in Petalburg Gym
|
- Norman: Defeat Norman in Petalburg Gym
|
||||||
Legendary Hunt: Defeat or catch legendary pokemon (or whatever was randomized into their encounters)
|
- Legendary Hunt: Defeat or catch legendary pokemon (or whatever was randomized into their encounters)
|
||||||
"""
|
"""
|
||||||
display_name = "Goal"
|
display_name = "Goal"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -28,11 +28,11 @@ class Goal(Choice):
|
||||||
|
|
||||||
class RandomizeBadges(Choice):
|
class RandomizeBadges(Choice):
|
||||||
"""
|
"""
|
||||||
Adds Badges to the pool
|
Adds Badges to the pool.
|
||||||
|
|
||||||
Vanilla: Gym leaders give their own badge
|
- Vanilla: Gym leaders give their own badge
|
||||||
Shuffle: Gym leaders give a random badge
|
- Shuffle: Gym leaders give a random badge
|
||||||
Completely Random: Badges can be found anywhere
|
- Completely Random: Badges can be found anywhere
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Badges"
|
display_name = "Randomize Badges"
|
||||||
default = 2
|
default = 2
|
||||||
|
@ -43,11 +43,11 @@ class RandomizeBadges(Choice):
|
||||||
|
|
||||||
class RandomizeHms(Choice):
|
class RandomizeHms(Choice):
|
||||||
"""
|
"""
|
||||||
Adds HMs to the pool
|
Adds HMs to the pool.
|
||||||
|
|
||||||
Vanilla: HMs are at their vanilla locations
|
- Vanilla: HMs are at their vanilla locations
|
||||||
Shuffle: HMs are shuffled among vanilla HM locations
|
- Shuffle: HMs are shuffled among vanilla HM locations
|
||||||
Completely Random: HMs can be found anywhere
|
- Completely Random: HMs can be found anywhere
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize HMs"
|
display_name = "Randomize HMs"
|
||||||
default = 2
|
default = 2
|
||||||
|
@ -58,50 +58,51 @@ class RandomizeHms(Choice):
|
||||||
|
|
||||||
class RandomizeKeyItems(DefaultOnToggle):
|
class RandomizeKeyItems(DefaultOnToggle):
|
||||||
"""
|
"""
|
||||||
Adds most key items to the pool. These are usually required to unlock
|
Adds most key items to the pool.
|
||||||
a location or region (e.g. Devon Scope, Letter, Basement Key)
|
|
||||||
|
These are usually required to unlock a location or region (e.g. Devon Scope, Letter, Basement Key).
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Key Items"
|
display_name = "Randomize Key Items"
|
||||||
|
|
||||||
|
|
||||||
class RandomizeBikes(Toggle):
|
class RandomizeBikes(Toggle):
|
||||||
"""
|
"""
|
||||||
Adds the mach bike and acro bike to the pool
|
Adds the Mach Bike and Acro Bike to the pool.
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Bikes"
|
display_name = "Randomize Bikes"
|
||||||
|
|
||||||
|
|
||||||
class RandomizeEventTickets(Toggle):
|
class RandomizeEventTickets(Toggle):
|
||||||
"""
|
"""
|
||||||
Adds the event tickets to the pool, which let you access legendaries by sailing from Lilycove
|
Adds the event tickets to the pool, which let you access legendaries by sailing from Lilycove.
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Event Tickets"
|
display_name = "Randomize Event Tickets"
|
||||||
|
|
||||||
|
|
||||||
class RandomizeRods(Toggle):
|
class RandomizeRods(Toggle):
|
||||||
"""
|
"""
|
||||||
Adds fishing rods to the pool
|
Adds fishing rods to the pool.
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Fishing Rods"
|
display_name = "Randomize Fishing Rods"
|
||||||
|
|
||||||
|
|
||||||
class RandomizeOverworldItems(DefaultOnToggle):
|
class RandomizeOverworldItems(DefaultOnToggle):
|
||||||
"""
|
"""
|
||||||
Adds items on the ground with a Pokeball sprite to the pool
|
Adds items on the ground with a Pokeball sprite to the pool.
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Overworld Items"
|
display_name = "Randomize Overworld Items"
|
||||||
|
|
||||||
|
|
||||||
class RandomizeHiddenItems(Toggle):
|
class RandomizeHiddenItems(Toggle):
|
||||||
"""
|
"""
|
||||||
Adds hidden items to the pool
|
Adds hidden items to the pool.
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Hidden Items"
|
display_name = "Randomize Hidden Items"
|
||||||
|
|
||||||
|
|
||||||
class RandomizeNpcGifts(Toggle):
|
class RandomizeNpcGifts(Toggle):
|
||||||
"""
|
"""
|
||||||
Adds most gifts received from NPCs to the pool (not including key items or HMs)
|
Adds most gifts received from NPCs to the pool (not including key items or HMs).
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize NPC Gifts"
|
display_name = "Randomize NPC Gifts"
|
||||||
|
|
||||||
|
@ -115,7 +116,9 @@ class RandomizeBerryTrees(Toggle):
|
||||||
|
|
||||||
class Dexsanity(Toggle):
|
class Dexsanity(Toggle):
|
||||||
"""
|
"""
|
||||||
Adding a "caught" pokedex entry gives you an item (catching, evolving, trading, etc.).
|
Adding a "caught" pokedex entry gives you an item (catching, evolving, trading, etc.). Only wild encounters are considered logical access to a species.
|
||||||
|
|
||||||
|
Blacklisting wild encounters removes the dexsanity location.
|
||||||
|
|
||||||
Defeating gym leaders provides dex info, allowing you to see where on the map you can catch species you need.
|
Defeating gym leaders provides dex info, allowing you to see where on the map you can catch species you need.
|
||||||
|
|
||||||
|
@ -126,21 +129,20 @@ class Dexsanity(Toggle):
|
||||||
|
|
||||||
class Trainersanity(Toggle):
|
class Trainersanity(Toggle):
|
||||||
"""
|
"""
|
||||||
Defeating a trainer for the first time gives you an item. Trainers are no longer missable.
|
Defeating a trainer gives you an item.
|
||||||
|
|
||||||
Trainers no longer give you money for winning. Each trainer adds a valuable item (nugget, stardust, etc.) to the pool.
|
Trainers are no longer missable. Trainers no longer give you money for winning. Each trainer adds a valuable item (Nugget, Stardust, etc.) to the pool.
|
||||||
"""
|
"""
|
||||||
display_name = "Trainersanity"
|
display_name = "Trainersanity"
|
||||||
|
|
||||||
|
|
||||||
class ItemPoolType(Choice):
|
class ItemPoolType(Choice):
|
||||||
"""
|
"""
|
||||||
Determines which non-progression items get put into the item pool
|
Determines which non-progression items get put into the item pool.
|
||||||
|
|
||||||
Shuffled: Item pool consists of shuffled vanilla items
|
- Shuffled: Item pool consists of shuffled vanilla items
|
||||||
Diverse Balanced: Item pool consists of random items approximately proportioned
|
- Diverse Balanced: Item pool consists of random items approximately proportioned according to what they're replacing
|
||||||
according to what they're replacing (i.e. more pokeballs, fewer X items, etc.)
|
- Diverse: Item pool consists of uniformly random (non-unique) items
|
||||||
Diverse: Item pool consists of uniformly random (non-unique) items
|
|
||||||
"""
|
"""
|
||||||
display_name = "Item Pool Type"
|
display_name = "Item Pool Type"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -151,14 +153,14 @@ class ItemPoolType(Choice):
|
||||||
|
|
||||||
class HiddenItemsRequireItemfinder(DefaultOnToggle):
|
class HiddenItemsRequireItemfinder(DefaultOnToggle):
|
||||||
"""
|
"""
|
||||||
The Itemfinder is logically required to pick up hidden items
|
The Itemfinder is logically required to pick up hidden items.
|
||||||
"""
|
"""
|
||||||
display_name = "Require Itemfinder"
|
display_name = "Require Itemfinder"
|
||||||
|
|
||||||
|
|
||||||
class DarkCavesRequireFlash(Choice):
|
class DarkCavesRequireFlash(Choice):
|
||||||
"""
|
"""
|
||||||
Determines whether HM05 Flash is logically required to navigate a dark cave
|
Determines whether HM05 Flash is logically required to navigate a dark cave.
|
||||||
"""
|
"""
|
||||||
display_name = "Require Flash"
|
display_name = "Require Flash"
|
||||||
default = 3
|
default = 3
|
||||||
|
@ -170,10 +172,10 @@ class DarkCavesRequireFlash(Choice):
|
||||||
|
|
||||||
class EliteFourRequirement(Choice):
|
class EliteFourRequirement(Choice):
|
||||||
"""
|
"""
|
||||||
Sets the requirements to challenge the elite four
|
Sets the requirements to challenge the elite four.
|
||||||
|
|
||||||
Badges: Obtain some number of badges
|
- Badges: Obtain some number of badges
|
||||||
Gyms: Defeat some number of gyms
|
- Gyms: Defeat some number of gyms
|
||||||
"""
|
"""
|
||||||
display_name = "Elite Four Requirement"
|
display_name = "Elite Four Requirement"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -183,7 +185,7 @@ class EliteFourRequirement(Choice):
|
||||||
|
|
||||||
class EliteFourCount(Range):
|
class EliteFourCount(Range):
|
||||||
"""
|
"""
|
||||||
Sets the number of badges/gyms required to challenge the elite four
|
Sets the number of badges/gyms required to challenge the elite four.
|
||||||
"""
|
"""
|
||||||
display_name = "Elite Four Count"
|
display_name = "Elite Four Count"
|
||||||
range_start = 0
|
range_start = 0
|
||||||
|
@ -193,10 +195,10 @@ class EliteFourCount(Range):
|
||||||
|
|
||||||
class NormanRequirement(Choice):
|
class NormanRequirement(Choice):
|
||||||
"""
|
"""
|
||||||
Sets the requirements to challenge the Petalburg Gym
|
Sets the requirements to challenge the Petalburg Gym.
|
||||||
|
|
||||||
Badges: Obtain some number of badges
|
- Badges: Obtain some number of badges
|
||||||
Gyms: Defeat some number of gyms
|
- Gyms: Defeat some number of gym leaders
|
||||||
"""
|
"""
|
||||||
display_name = "Norman Requirement"
|
display_name = "Norman Requirement"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -206,7 +208,7 @@ class NormanRequirement(Choice):
|
||||||
|
|
||||||
class NormanCount(Range):
|
class NormanCount(Range):
|
||||||
"""
|
"""
|
||||||
Sets the number of badges/gyms required to challenge the Petalburg Gym
|
Sets the number of badges/gyms required to challenge the Petalburg Gym.
|
||||||
"""
|
"""
|
||||||
display_name = "Norman Count"
|
display_name = "Norman Count"
|
||||||
range_start = 0
|
range_start = 0
|
||||||
|
@ -216,14 +218,16 @@ class NormanCount(Range):
|
||||||
|
|
||||||
class LegendaryHuntCatch(Toggle):
|
class LegendaryHuntCatch(Toggle):
|
||||||
"""
|
"""
|
||||||
Sets whether legendaries need to be caught to satisfy the Legendary Hunt win condition. Defeated legendaries can be respawned by defeating the Elite 4.
|
Sets whether legendaries need to be caught to satisfy the Legendary Hunt win condition.
|
||||||
|
|
||||||
|
Defeated legendaries can be respawned by defeating the Elite 4.
|
||||||
"""
|
"""
|
||||||
display_name = "Legendary Hunt Requires Catching"
|
display_name = "Legendary Hunt Requires Catching"
|
||||||
|
|
||||||
|
|
||||||
class LegendaryHuntCount(Range):
|
class LegendaryHuntCount(Range):
|
||||||
"""
|
"""
|
||||||
Sets the number of legendaries that must be caught/defeated for the Legendary Hunt goal
|
Sets the number of legendaries that must be caught/defeated for the Legendary Hunt goal.
|
||||||
"""
|
"""
|
||||||
display_name = "Legendary Hunt Count"
|
display_name = "Legendary Hunt Count"
|
||||||
range_start = 1
|
range_start = 1
|
||||||
|
@ -235,24 +239,12 @@ class AllowedLegendaryHuntEncounters(OptionSet):
|
||||||
"""
|
"""
|
||||||
Sets which legendary encounters can contribute to the Legendary Hunt goal.
|
Sets which legendary encounters can contribute to the Legendary Hunt goal.
|
||||||
|
|
||||||
Latios will always be the roamer. Latias will always be at Southern Island.
|
Latias will always be at Southern Island. Latios will always be the roamer. The TV broadcast describing the roamer gives you "seen" info for Latios.
|
||||||
|
|
||||||
Possible values are:
|
The braille puzzle in Sealed Chamber gives you "seen" info for Wailord and Relicanth. The move tutor in Fortree City always teaches Dig.
|
||||||
"Groudon"
|
|
||||||
"Kyogre"
|
|
||||||
"Rayquaza"
|
|
||||||
"Latios"
|
|
||||||
"Latias"
|
|
||||||
"Regirock"
|
|
||||||
"Registeel"
|
|
||||||
"Regice"
|
|
||||||
"Ho-Oh"
|
|
||||||
"Lugia"
|
|
||||||
"Deoxys"
|
|
||||||
"Mew"
|
|
||||||
"""
|
"""
|
||||||
display_name = "Allowed Legendary Hunt Encounters"
|
display_name = "Allowed Legendary Hunt Encounters"
|
||||||
valid_keys = frozenset([
|
valid_keys = [
|
||||||
"Groudon",
|
"Groudon",
|
||||||
"Kyogre",
|
"Kyogre",
|
||||||
"Rayquaza",
|
"Rayquaza",
|
||||||
|
@ -265,19 +257,19 @@ class AllowedLegendaryHuntEncounters(OptionSet):
|
||||||
"Lugia",
|
"Lugia",
|
||||||
"Deoxys",
|
"Deoxys",
|
||||||
"Mew",
|
"Mew",
|
||||||
])
|
]
|
||||||
default = valid_keys.copy()
|
default = valid_keys.copy()
|
||||||
|
|
||||||
|
|
||||||
class RandomizeWildPokemon(Choice):
|
class RandomizeWildPokemon(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes wild pokemon encounters (grass, caves, water, fishing)
|
Randomizes wild pokemon encounters (grass, caves, water, fishing).
|
||||||
|
|
||||||
Vanilla: Wild encounters are unchanged
|
- Vanilla: Wild encounters are unchanged
|
||||||
Match Base Stats: Wild pokemon are replaced with species with approximately the same bst
|
- 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 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
|
- Match Base Stats and Type: Apply both Match Base Stats and Match Type
|
||||||
Completely Random: There are no restrictions
|
- Completely Random: There are no restrictions
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Wild Pokemon"
|
display_name = "Randomize Wild Pokemon"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -294,21 +286,21 @@ class WildEncounterBlacklist(OptionSet):
|
||||||
|
|
||||||
May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
|
May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
|
||||||
|
|
||||||
Use "_Legendaries" as a shortcut for legendary pokemon.
|
Use "_Legendaries" as a shortcut for all legendary pokemon.
|
||||||
"""
|
"""
|
||||||
display_name = "Wild Encounter Blacklist"
|
display_name = "Wild Encounter Blacklist"
|
||||||
valid_keys = frozenset(species.label for species in data.species.values()) | {"_Legendaries"}
|
valid_keys = ["_Legendaries"] + sorted([species.label for species in data.species.values()])
|
||||||
|
|
||||||
|
|
||||||
class RandomizeStarters(Choice):
|
class RandomizeStarters(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes the starter pokemon in Professor Birch's bag
|
Randomizes the starter pokemon in Professor Birch's bag.
|
||||||
|
|
||||||
Vanilla: Starters are unchanged
|
- Vanilla: Starters are unchanged
|
||||||
Match Base Stats: Starters are replaced with species with approximately the same bst
|
- 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 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
|
- Match Base Stats and Type: Apply both Match Base Stats and Match Type
|
||||||
Completely Random: There are no restrictions
|
- Completely Random: There are no restrictions
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Starters"
|
display_name = "Randomize Starters"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -325,21 +317,21 @@ class StarterBlacklist(OptionSet):
|
||||||
|
|
||||||
May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
|
May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
|
||||||
|
|
||||||
Use "_Legendaries" as a shortcut for legendary pokemon.
|
Use "_Legendaries" as a shortcut for all legendary pokemon.
|
||||||
"""
|
"""
|
||||||
display_name = "Starter Blacklist"
|
display_name = "Starter Blacklist"
|
||||||
valid_keys = frozenset(species.label for species in data.species.values()) | {"_Legendaries"}
|
valid_keys = ["_Legendaries"] + sorted([species.label for species in data.species.values()])
|
||||||
|
|
||||||
|
|
||||||
class RandomizeTrainerParties(Choice):
|
class RandomizeTrainerParties(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes the parties of all trainers.
|
Randomizes the parties of all trainers.
|
||||||
|
|
||||||
Vanilla: Parties are unchanged
|
- Vanilla: Parties are unchanged
|
||||||
Match Base Stats: Trainer pokemon are replaced with species with approximately the same bst
|
- 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 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
|
- Match Base Stats and Type: Apply both Match Base Stats and Match Type
|
||||||
Completely Random: There are no restrictions
|
- Completely Random: There are no restrictions
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Trainer Parties"
|
display_name = "Randomize Trainer Parties"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -356,10 +348,10 @@ class TrainerPartyBlacklist(OptionSet):
|
||||||
|
|
||||||
May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
|
May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
|
||||||
|
|
||||||
Use "_Legendaries" as a shortcut for legendary pokemon.
|
Use "_Legendaries" as a shortcut for all legendary pokemon.
|
||||||
"""
|
"""
|
||||||
display_name = "Trainer Party Blacklist"
|
display_name = "Trainer Party Blacklist"
|
||||||
valid_keys = frozenset(species.label for species in data.species.values()) | {"_Legendaries"}
|
valid_keys = ["_Legendaries"] + sorted([species.label for species in data.species.values()])
|
||||||
|
|
||||||
|
|
||||||
class ForceFullyEvolved(Range):
|
class ForceFullyEvolved(Range):
|
||||||
|
@ -376,12 +368,12 @@ class RandomizeLegendaryEncounters(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes legendary encounters (Rayquaza, Regice, Latias, etc.). The roamer will always be Latios during legendary hunts.
|
Randomizes legendary encounters (Rayquaza, Regice, Latias, etc.). The roamer will always be Latios during legendary hunts.
|
||||||
|
|
||||||
Vanilla: Legendary encounters are unchanged
|
- Vanilla: Legendary encounters are unchanged
|
||||||
Shuffle: Legendary encounters are shuffled between each other
|
- Shuffle: Legendary encounters are shuffled between each other
|
||||||
Match Base Stats: Legendary encounters are replaced with species with approximately the same bst
|
- Match Base Stats: Legendary encounters are replaced with species with approximately the same bst
|
||||||
Match Type: Legendary encounters are replaced with species that share a type with the original
|
- Match Type: Legendary 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
|
- Match Base Stats and Type: Apply both Match Base Stats and Match Type
|
||||||
Completely Random: There are no restrictions
|
- Completely Random: There are no restrictions
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Legendary Encounters"
|
display_name = "Randomize Legendary Encounters"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -397,12 +389,12 @@ class RandomizeMiscPokemon(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes non-legendary static encounters. May grow to include other pokemon like trades or gifts.
|
Randomizes non-legendary static encounters. May grow to include other pokemon like trades or gifts.
|
||||||
|
|
||||||
Vanilla: Species are unchanged
|
- Vanilla: Species are unchanged
|
||||||
Shuffle: Species are shuffled between each other
|
- Shuffle: Species are shuffled between each other
|
||||||
Match Base Stats: Species are replaced with species with approximately the same bst
|
- Match Base Stats: Species are replaced with species with approximately the same bst
|
||||||
Match Type: Species are replaced with species that share a type with the original
|
- Match Type: Species are replaced with species that share a type with the original
|
||||||
Match Base Stats and Type: Apply both Match Base Stats and Match Type
|
- Match Base Stats and Type: Apply both Match Base Stats and Match Type
|
||||||
Completely Random: There are no restrictions
|
- Completely Random: There are no restrictions
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Misc Pokemon"
|
display_name = "Randomize Misc Pokemon"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -418,10 +410,10 @@ class RandomizeTypes(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes the type(s) of every pokemon. Each species will have the same number of types.
|
Randomizes the type(s) of every pokemon. Each species will have the same number of types.
|
||||||
|
|
||||||
Vanilla: Types are unchanged
|
- Vanilla: Types are unchanged
|
||||||
Shuffle: Types are shuffled globally for all species (e.g. every Water-type pokemon becomes Fire-type)
|
- 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
|
- Completely Random: Each species has its type(s) randomized
|
||||||
Follow Evolutions: Types are randomized per evolution line instead of per species
|
- Follow Evolutions: Types are randomized per evolution line instead of per species
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Types"
|
display_name = "Randomize Types"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -435,10 +427,9 @@ class RandomizeAbilities(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes abilities of every species. Each species will have the same number of abilities.
|
Randomizes abilities of every species. Each species will have the same number of abilities.
|
||||||
|
|
||||||
Vanilla: Abilities are unchanged
|
- Vanilla: Abilities are unchanged
|
||||||
Completely Random: Each species has its abilities randomized
|
- Completely Random: Each species has its abilities randomized
|
||||||
Follow Evolutions: Abilities are randomized, but if a pokemon would normally retain its ability
|
- Follow Evolutions: Abilities are randomized, but if a pokemon would normally retain its ability when evolving, the random ability will also be retained
|
||||||
when evolving, the random ability will also be retained
|
|
||||||
"""
|
"""
|
||||||
display_name = "Randomize Abilities"
|
display_name = "Randomize Abilities"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -449,22 +440,21 @@ class RandomizeAbilities(Choice):
|
||||||
|
|
||||||
class AbilityBlacklist(OptionSet):
|
class AbilityBlacklist(OptionSet):
|
||||||
"""
|
"""
|
||||||
A list of abilities which no pokemon should have if abilities are randomized.
|
Prevent species from being given these abilities.
|
||||||
For example, you could exclude Wonder Guard and Arena Trap like this:
|
|
||||||
["Wonder Guard", "Arena Trap"]
|
Has no effect if abilities are not randomized.
|
||||||
"""
|
"""
|
||||||
display_name = "Ability Blacklist"
|
display_name = "Ability Blacklist"
|
||||||
valid_keys = frozenset([ability.label for ability in data.abilities])
|
valid_keys = sorted([ability.label for ability in data.abilities])
|
||||||
|
|
||||||
|
|
||||||
class LevelUpMoves(Choice):
|
class LevelUpMoves(Choice):
|
||||||
"""
|
"""
|
||||||
Randomizes the moves a pokemon learns when they reach a level where they would learn a move.
|
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.
|
||||||
Your starter is guaranteed to have a usable damaging move.
|
|
||||||
|
|
||||||
Vanilla: Learnset is unchanged
|
- Vanilla: Learnset is unchanged
|
||||||
Randomized: Moves are randomized
|
- Randomized: Moves are randomized
|
||||||
Start with Four Moves: Moves are randomized and all Pokemon know 4 moves at level 1
|
- Start with Four Moves: Moves are randomized and all Pokemon know 4 moves at level 1
|
||||||
"""
|
"""
|
||||||
display_name = "Level Up Moves"
|
display_name = "Level Up Moves"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -487,8 +477,7 @@ class MoveMatchTypeBias(Range):
|
||||||
|
|
||||||
class MoveNormalTypeBias(Range):
|
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
|
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.
|
||||||
will be forced to be the Normal type.
|
|
||||||
|
|
||||||
If a move is not forced to be Normal, it will be completely random.
|
If a move is not forced to be Normal, it will be completely random.
|
||||||
"""
|
"""
|
||||||
|
@ -500,41 +489,51 @@ class MoveNormalTypeBias(Range):
|
||||||
|
|
||||||
class MoveBlacklist(OptionSet):
|
class MoveBlacklist(OptionSet):
|
||||||
"""
|
"""
|
||||||
A list of moves which should be excluded from learnsets, TMs, and move tutors.
|
Prevents species from learning these moves via learnsets, TMs, and move tutors.
|
||||||
|
|
||||||
|
HM moves are already banned.
|
||||||
"""
|
"""
|
||||||
display_name = "Move Blacklist"
|
display_name = "Move Blacklist"
|
||||||
valid_keys = frozenset(data.move_labels.keys())
|
valid_keys = sorted(data.move_labels.keys())
|
||||||
|
|
||||||
|
|
||||||
class HmCompatibility(NamedRange):
|
class HmCompatibility(NamedRange):
|
||||||
"""
|
"""
|
||||||
Sets the percent chance that a given HM is compatible with a species
|
Sets the percent chance that a given HM is compatible with a species.
|
||||||
|
|
||||||
|
Some opponents like gym leaders are allowed to use HMs. This option can affect the moves they know.
|
||||||
"""
|
"""
|
||||||
display_name = "HM Compatibility"
|
display_name = "HM Compatibility"
|
||||||
default = -1
|
default = -1
|
||||||
range_start = 50
|
range_start = 50
|
||||||
range_end = 100
|
range_end = 100
|
||||||
special_range_names = {
|
special_range_names = {
|
||||||
"vanilla": -1
|
"vanilla": -1,
|
||||||
|
"full": 100,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class TmTutorCompatibility(NamedRange):
|
class TmTutorCompatibility(NamedRange):
|
||||||
"""
|
"""
|
||||||
Sets the percent chance that a given TM or move tutor is compatible with a species
|
Sets the percent chance that a given TM or move tutor is compatible with a species.
|
||||||
|
|
||||||
|
Some opponents like gym leaders are allowed to use TMs. This option can affect the moves they know.
|
||||||
"""
|
"""
|
||||||
display_name = "TM/Tutor Compatibility"
|
display_name = "TM/Tutor Compatibility"
|
||||||
default = -1
|
default = -1
|
||||||
range_start = 0
|
range_start = 0
|
||||||
range_end = 100
|
range_end = 100
|
||||||
special_range_names = {
|
special_range_names = {
|
||||||
"vanilla": -1
|
"vanilla": -1,
|
||||||
|
"full": 100,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class TmTutorMoves(Toggle):
|
class TmTutorMoves(Toggle):
|
||||||
"""
|
"""
|
||||||
Randomizes the moves taught by TMs and move tutors
|
Randomizes the moves taught by TMs and move tutors.
|
||||||
|
|
||||||
|
Some opponents like gym leaders are allowed to use TMs. This option can affect the moves they know.
|
||||||
"""
|
"""
|
||||||
display_name = "TM/Tutor Moves"
|
display_name = "TM/Tutor Moves"
|
||||||
|
|
||||||
|
@ -562,7 +561,7 @@ class MinCatchRate(Range):
|
||||||
|
|
||||||
class GuaranteedCatch(Toggle):
|
class GuaranteedCatch(Toggle):
|
||||||
"""
|
"""
|
||||||
Every throw is guaranteed to catch a wild pokemon
|
Every throw is guaranteed to catch a wild pokemon.
|
||||||
"""
|
"""
|
||||||
display_name = "Guaranteed Catch"
|
display_name = "Guaranteed Catch"
|
||||||
|
|
||||||
|
@ -571,14 +570,16 @@ class NormalizeEncounterRates(Toggle):
|
||||||
"""
|
"""
|
||||||
Make every slot on an encounter table approximately equally likely.
|
Make every slot on an encounter table approximately equally likely.
|
||||||
|
|
||||||
This does NOT mean every species is equally likely. But it will make rarer encounters less rare overall.
|
This does NOT mean each species is equally likely. In the vanilla game, each species may occupy more than one slot, and slots vary in probability.
|
||||||
|
|
||||||
|
Species will still occupy the same slots as vanilla, but the slots will be equally weighted. The minimum encounter rate will be 8% (higher in water).
|
||||||
"""
|
"""
|
||||||
display_name = "Normalize Encounter Rates"
|
display_name = "Normalize Encounter Rates"
|
||||||
|
|
||||||
|
|
||||||
class ExpModifier(Range):
|
class ExpModifier(Range):
|
||||||
"""
|
"""
|
||||||
Multiplies gained experience by a percentage
|
Multiplies gained experience by a percentage.
|
||||||
|
|
||||||
100 is default
|
100 is default
|
||||||
50 is half
|
50 is half
|
||||||
|
@ -593,14 +594,14 @@ class ExpModifier(Range):
|
||||||
|
|
||||||
class BlindTrainers(Toggle):
|
class BlindTrainers(Toggle):
|
||||||
"""
|
"""
|
||||||
Causes trainers to not start a battle with you unless you talk to them
|
Trainers will not start a battle with you unless you talk to them.
|
||||||
"""
|
"""
|
||||||
display_name = "Blind Trainers"
|
display_name = "Blind Trainers"
|
||||||
|
|
||||||
|
|
||||||
class PurgeSpinners(Toggle):
|
class PurgeSpinners(Toggle):
|
||||||
"""
|
"""
|
||||||
Trainers will rotate in predictable patterns on a set interval instead of randomly and don't turn toward you when you run
|
Trainers will rotate in predictable patterns on a set interval instead of randomly and don't turn toward you when you run.
|
||||||
"""
|
"""
|
||||||
display_name = "Purge Spinners"
|
display_name = "Purge Spinners"
|
||||||
|
|
||||||
|
@ -613,9 +614,9 @@ class MatchTrainerLevels(Choice):
|
||||||
|
|
||||||
This is a pseudo-replacement for a level cap and makes every trainer battle a fair fight while still allowing you to level up.
|
This is a pseudo-replacement for a level cap and makes every trainer battle a fair fight while still allowing you to level up.
|
||||||
|
|
||||||
Off: The vanilla experience
|
- Off: The vanilla experience
|
||||||
Additive: The modifier you apply to your team is a flat bonus
|
- Additive: The modifier you apply to your team is a flat bonus
|
||||||
Multiplicative: The modifier you apply to your team is a percent bonus
|
- Multiplicative: The modifier you apply to your team is a percent bonus
|
||||||
"""
|
"""
|
||||||
display_name = "Match Trainer Levels"
|
display_name = "Match Trainer Levels"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -629,10 +630,10 @@ class MatchTrainerLevelsBonus(Range):
|
||||||
A level bonus (or penalty) to apply to your team when matching an opponent's levels.
|
A level bonus (or penalty) to apply to your team when matching an opponent's levels.
|
||||||
|
|
||||||
When the match trainer levels option is "additive", this value is added to your team's levels during a battle.
|
When the match trainer levels option is "additive", this value is added to your team's levels during a battle.
|
||||||
For example, if this value is 5 (+5 levels), you'll have a level 25 team against a level 20 team, and a level 45 team against a level 40 team.
|
For example, if this value is 5 (+5 levels), you'll have a level 25 team against a level 20 team, and a level 45 team against a level 40 team.
|
||||||
|
|
||||||
When the match trainer levels option is "multiplicative", this is a percent bonus.
|
When the match trainer levels option is "multiplicative", this is a percent bonus.
|
||||||
For example, if this value is 5 (+5%), you'll have a level 21 team against a level 20 team, and a level 42 team against a level 40 team.
|
For example, if this value is 5 (+5%), you'll have a level 21 team against a level 20 team, and a level 42 team against a level 40 team.
|
||||||
"""
|
"""
|
||||||
display_name = "Match Trainer Levels Modifier"
|
display_name = "Match Trainer Levels Modifier"
|
||||||
range_start = -100
|
range_start = -100
|
||||||
|
@ -643,7 +644,9 @@ class MatchTrainerLevelsBonus(Range):
|
||||||
class DoubleBattleChance(Range):
|
class DoubleBattleChance(Range):
|
||||||
"""
|
"""
|
||||||
The percent chance that a trainer with more than 1 pokemon will be converted into a double battle.
|
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.
|
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.
|
They can be battled by talking to them no matter what.
|
||||||
"""
|
"""
|
||||||
display_name = "Double Battle Chance"
|
display_name = "Double Battle Chance"
|
||||||
|
@ -654,7 +657,7 @@ class DoubleBattleChance(Range):
|
||||||
|
|
||||||
class BetterShops(Toggle):
|
class BetterShops(Toggle):
|
||||||
"""
|
"""
|
||||||
Pokemarts sell every item that can be obtained in a pokemart (except mail, which is still unique to the relevant city)
|
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"
|
display_name = "Better Shops"
|
||||||
|
|
||||||
|
@ -663,19 +666,10 @@ class RemoveRoadblocks(OptionSet):
|
||||||
"""
|
"""
|
||||||
Removes specific NPCs that normally stand in your way until certain events are completed.
|
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.
|
This can open up the world a bit and make your playthrough less linear, but be 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"
|
display_name = "Remove Roadblocks"
|
||||||
valid_keys = frozenset([
|
valid_keys = [
|
||||||
"Route 110 Aqua Grunts",
|
"Route 110 Aqua Grunts",
|
||||||
"Route 112 Magma Grunts",
|
"Route 112 Magma Grunts",
|
||||||
"Route 119 Aqua Grunts",
|
"Route 119 Aqua Grunts",
|
||||||
|
@ -683,12 +677,13 @@ class RemoveRoadblocks(OptionSet):
|
||||||
"Lilycove City Wailmer",
|
"Lilycove City Wailmer",
|
||||||
"Aqua Hideout Grunts",
|
"Aqua Hideout Grunts",
|
||||||
"Seafloor Cavern Aqua Grunt",
|
"Seafloor Cavern Aqua Grunt",
|
||||||
])
|
]
|
||||||
|
|
||||||
|
|
||||||
class ExtraBoulders(Toggle):
|
class ExtraBoulders(Toggle):
|
||||||
"""
|
"""
|
||||||
Places strength boulders on Route 115 which block access to Meteor Falls from the beach.
|
Places strength boulders on Route 115 which block access to Meteor Falls from the beach.
|
||||||
|
|
||||||
This aims to take some power away from Surf by restricting how much it allows you to access.
|
This aims to take some power away from Surf by restricting how much it allows you to access.
|
||||||
"""
|
"""
|
||||||
display_name = "Extra Boulders"
|
display_name = "Extra Boulders"
|
||||||
|
@ -697,6 +692,7 @@ class ExtraBoulders(Toggle):
|
||||||
class ExtraBumpySlope(Toggle):
|
class ExtraBumpySlope(Toggle):
|
||||||
"""
|
"""
|
||||||
Adds a bumpy slope to Route 115 which allows access to Meteor Falls if you have the Acro Bike.
|
Adds a bumpy slope to Route 115 which allows access to Meteor Falls if you have the Acro Bike.
|
||||||
|
|
||||||
This aims to take some power away from Surf by adding a new way to exit the Rustboro area.
|
This aims to take some power away from Surf by adding a new way to exit the Rustboro area.
|
||||||
"""
|
"""
|
||||||
display_name = "Extra Bumpy Slope"
|
display_name = "Extra Bumpy Slope"
|
||||||
|
@ -705,6 +701,7 @@ class ExtraBumpySlope(Toggle):
|
||||||
class ModifyRoute118(Toggle):
|
class ModifyRoute118(Toggle):
|
||||||
"""
|
"""
|
||||||
Changes the layout of Route 118 so that it must be crossed with the Acro Bike instead of Surf.
|
Changes the layout of Route 118 so that it must be crossed with the Acro Bike instead of Surf.
|
||||||
|
|
||||||
This aims to take some power away from Surf by restricting how much it allows you to access.
|
This aims to take some power away from Surf by restricting how much it allows you to access.
|
||||||
"""
|
"""
|
||||||
display_name = "Modify Route 118"
|
display_name = "Modify Route 118"
|
||||||
|
@ -712,14 +709,14 @@ class ModifyRoute118(Toggle):
|
||||||
|
|
||||||
class FreeFlyLocation(Toggle):
|
class FreeFlyLocation(Toggle):
|
||||||
"""
|
"""
|
||||||
Enables flying to one random location when Mom gives you the running shoes (excluding cities reachable with no items)
|
Enables flying to one random location (excluding cities reachable with no items).
|
||||||
"""
|
"""
|
||||||
display_name = "Free Fly Location"
|
display_name = "Free Fly Location"
|
||||||
|
|
||||||
|
|
||||||
class HmRequirements(TextChoice):
|
class HmRequirements(Choice):
|
||||||
"""
|
"""
|
||||||
Sets the requirements to use HMs outside of battle
|
Sets the requirements to use HMs outside of battle.
|
||||||
"""
|
"""
|
||||||
display_name = "HM Requirements"
|
display_name = "HM Requirements"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -729,7 +726,7 @@ class HmRequirements(TextChoice):
|
||||||
|
|
||||||
class TurboA(Toggle):
|
class TurboA(Toggle):
|
||||||
"""
|
"""
|
||||||
Holding A will advance most text automatically
|
Holding A will advance most text automatically.
|
||||||
"""
|
"""
|
||||||
display_name = "Turbo A"
|
display_name = "Turbo A"
|
||||||
|
|
||||||
|
@ -738,9 +735,9 @@ class ReceiveItemMessages(Choice):
|
||||||
"""
|
"""
|
||||||
Determines whether you receive an in-game notification when receiving an item. Items can still only be received in the overworld.
|
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
|
- All: Every item shows a message
|
||||||
Progression: Only progression items show a message
|
- Progression: Only progression items show a message
|
||||||
None: All items are added to your bag silently (badges will still show)
|
- None: All items are added to your bag silently (badges will still show).
|
||||||
"""
|
"""
|
||||||
display_name = "Receive Item Messages"
|
display_name = "Receive Item Messages"
|
||||||
default = 0
|
default = 0
|
||||||
|
@ -754,6 +751,7 @@ class RemoteItems(Toggle):
|
||||||
Instead of placing your own items directly into the ROM, all items are received from the server, including items you find for yourself.
|
Instead of placing your own items directly into the ROM, all items are received from the server, including items you find for yourself.
|
||||||
|
|
||||||
This enables co-op of a single slot and recovering more items after a lost save file (if you're so unlucky).
|
This enables co-op of a single slot and recovering more items after a lost save file (if you're so unlucky).
|
||||||
|
|
||||||
But it changes pickup behavior slightly and requires connection to the server to receive any items.
|
But it changes pickup behavior slightly and requires connection to the server to receive any items.
|
||||||
"""
|
"""
|
||||||
display_name = "Remote Items"
|
display_name = "Remote Items"
|
||||||
|
@ -781,9 +779,10 @@ class WonderTrading(DefaultOnToggle):
|
||||||
|
|
||||||
Wonder trading NEVER affects logic.
|
Wonder trading NEVER affects logic.
|
||||||
|
|
||||||
Certain aspects of a pokemon species are per-game, not per-pokemon.
|
Certain aspects of a pokemon species are per-game, not per-pokemon. As a result, some things are not retained during a trade, including type, ability, level up learnset, and so on.
|
||||||
As a result, some things are not retained during a trade, including type, ability, level up learnset, and so on.
|
|
||||||
Receiving a pokemon this way does not mark it as found in your pokedex.
|
Receiving a pokemon this way does not mark it as found in your pokedex.
|
||||||
|
|
||||||
Trade evolutions do not evolve this way; they retain their modified methods (level ups and item use).
|
Trade evolutions do not evolve this way; they retain their modified methods (level ups and item use).
|
||||||
"""
|
"""
|
||||||
display_name = "Wonder Trading"
|
display_name = "Wonder Trading"
|
||||||
|
@ -795,6 +794,7 @@ class EasterEgg(FreeText):
|
||||||
|
|
||||||
All secret phrases are something that could be a trendy phrase in Dewford Town. They are case insensitive.
|
All secret phrases are something that could be a trendy phrase in Dewford Town. They are case insensitive.
|
||||||
"""
|
"""
|
||||||
|
display_name = "Easter Egg"
|
||||||
default = "EMERALD SECRET"
|
default = "EMERALD SECRET"
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue