Pokémon R/B: Version 3 (#1520)

* Coin items received or found in the Game Corner are now shuffled, locations require Coin Case
* Prizesanity option (shuffle Game Corner Prizes)
* DexSanity option: location checks for marking Pokémon as caught in your Pokédex. Also an option to set all Pokémon in your Pokédex as seen from the start, to aid in locating them.
* Option to randomize the layout of the Rock Tunnel.
* Area 1-to-1 mapping: When one instance of a Wild Pokémon in a given area is randomized, all instances of that Pokémon will be the same. So that if a route had 3 different Pokémon before, it will have 3 after randomization.
* Option to randomize the moves taught by TMs.
* Exact controls for TM/HM compatibility chances.
* Option to randomize Pokémon's pallets or set them based on primary type.
* Added Cinnabar Gym trainers to Trainersanity and randomized the quiz questions and answers. Getting a correct answer will flag the trainer as defeated so that you can obtain the Trainersanity check without defeating the trainer if you answer correctly.
This commit is contained in:
Alchav
2023-03-13 18:40:55 -04:00
committed by GitHub
parent 4d7bd929bc
commit df55455fc0
18 changed files with 2025 additions and 918 deletions

View File

@@ -65,7 +65,7 @@ class CeruleanCaveCondition(Range):
If extra_key_items is turned on, the number chosen will be increased by 4."""
display_name = "Cerulean Cave Condition"
range_start = 0
range_end = 25
range_end = 26
default = 20
@@ -155,6 +155,12 @@ class RandomizeHiddenItems(Choice):
default = 0
class PrizeSanity(Toggle):
"""Shuffles the TM prizes at the Celadon Prize Corner into the item pool."""
display_name = "Prizesanity"
default = 0
class TrainerSanity(Toggle):
"""Add a location check to every trainer in the game, which can be obtained by talking to a trainer after defeating
them. Does not affect gym leaders and some scripted event battles (including all Rival, Giovanni, and
@@ -163,12 +169,44 @@ class TrainerSanity(Toggle):
default = 0
class RequirePokedex(Toggle):
"""Require the Pokedex to obtain items from Oak's Aides or from Dexsanity checks."""
display_name = "Require Pokedex"
default = 1
class AllPokemonSeen(Toggle):
"""Start with all Pokemon "seen" in your Pokedex. This allows you to see where Pokemon can be encountered in the
wild. Pokemon found by fishing or in the Cerulean Cave are not displayed."""
default = 0
class DexSanity(Toggle):
"""Adds a location check for each Pokemon flagged "Owned" on your Pokedex. If accessibility is set to `locations`
and randomize_wild_pokemon is off, catch_em_all is not `all_pokemon` or randomize_legendary_pokemon is not `any`,
accessibility will be forced to `items` instead, as not all Dexsanity locations can be guaranteed to be considered
reachable in logic.
If Pokedex is required, the items for Pokemon acquired before acquiring the Pokedex can be found by talking to
Professor Oak or evaluating the Pokedex via Oak's PC."""
display_name = "Dexsanity"
default = 0
class FreeFlyLocation(Toggle):
"""One random fly destination will be unlocked by default."""
display_name = "Free Fly Location"
default = 1
class RandomizeRockTunnel(Toggle):
"""Randomize the layout of Rock Tunnel. This is highly experimental, if you encounter any issues (items or trainers
unreachable, trainers walking over walls, inability to reach end of tunnel, anything looking strange) to
Alchav#8826 in the Archipelago Discord (directly or in #pkmn-red-blue) along with the seed number found on the
signs outside the tunnel."""
display_name = "Randomize Rock Tunnel"
default = 0
class OaksAidRt2(Range):
"""Number of Pokemon registered in the Pokedex required to receive the item from Oak's Aide on Route 2.
Vanilla is 10."""
@@ -229,6 +267,12 @@ class RandomizeWildPokemon(Choice):
option_completely_random = 4
class Area1To1Mapping(Toggle):
"""When randomizing wild Pokemon, for each zone, all instances of a particular Pokemon will be replaced with the
same Pokemon, resulting in fewer Pokemon in each area."""
default = 1
class RandomizeStarterPokemon(Choice):
"""Randomize the starter Pokemon choices."""
display_name = "Randomize Starter Pokemon"
@@ -334,6 +378,13 @@ class MinimumCatchRate(Range):
default = 3
class MoveBalancing(Toggle):
"""All one-hit-KO moves and fixed-damage moves become normal damaging moves.
Blizzard, and moves that cause sleep have their accuracy reduced."""
display_name = "Move Balancing"
default = 0
class RandomizePokemonMovesets(Choice):
"""Randomize the moves learned by Pokemon. prefer_types will prefer moves that match the type of the Pokemon."""
display_name = "Randomize Pokemon Movesets"
@@ -343,6 +394,12 @@ class RandomizePokemonMovesets(Choice):
default = 0
class ConfineTranstormToDitto(Toggle):
"""Regardless of moveset randomization, will keep Ditto's first move as Transform no others will learn it.
If an enemy Pokemon uses transform before you catch it, it will permanently change to Ditto after capture."""
display_name = "Confine Transform to Ditto"
default = 1
class StartWithFourMoves(Toggle):
"""If movesets are randomized, this will give all Pokemon 4 starting moves."""
display_name = "Start With Four Moves"
@@ -356,30 +413,62 @@ class SameTypeAttackBonus(Toggle):
default = 1
class TMCompatibility(Choice):
"""Randomize which Pokemon can learn each TM. prefer_types: 90% chance if Pokemon's type matches the move,
50% chance if move is Normal type and the Pokemon is not, and 25% chance otherwise. Pokemon will retain the same
TM compatibility when they evolve if the evolved form has the same type(s). Mew will always be able to learn
every TM."""
display_name = "TM Compatibility"
default = 0
option_vanilla = 0
option_prefer_types = 1
option_completely_random = 2
option_full_compatibility = 3
class RandomizeTMMoves(Toggle):
"""Randomize the moves taught by TMs.
All TM items will be flagged as 'filler' items regardless of how good the move they teach are."""
display_name = "Randomize TM Moves"
class HMCompatibility(Choice):
"""Randomize which Pokemon can learn each HM. prefer_types: 100% chance if Pokemon's type matches the move,
75% chance if move is Normal type and the Pokemon is not, and 25% chance otherwise. Pokemon will retain the same
HM compatibility when they evolve if the evolved form has the same type(s). Mew will always be able to learn
every HM."""
display_name = "HM Compatibility"
default = 0
option_vanilla = 0
option_prefer_types = 1
option_completely_random = 2
option_full_compatibility = 3
class TMHMCompatibility(SpecialRange):
range_start = -1
range_end = 100
special_range_names = {
"vanilla": -1,
"none": 0,
"full": 100
}
default = -1
class TMSameTypeCompatibility(TMHMCompatibility):
"""Chance of each TM being usable on each Pokemon whose type matches the move."""
display_name = "TM Same-Type Compatibility"
class TMNormalTypeCompatibility(TMHMCompatibility):
"""Chance of each TM being usable on each Pokemon if the move is Normal type and the Pokemon is not."""
display_name = "TM Normal-Type Compatibility"
class TMOtherTypeCompatibility(TMHMCompatibility):
"""Chance of each TM being usable on each Pokemon if the move a type other than Normal or one of the Pokemon's types."""
display_name = "TM Other-Type Compatibility"
class HMSameTypeCompatibility(TMHMCompatibility):
"""Chance of each HM being usable on each Pokemon whose type matches the move.
At least one Pokemon will always be able to learn the moves needed to meet your accessibility requirements."""
display_name = "HM Same-Type Compatibility"
class HMNormalTypeCompatibility(TMHMCompatibility):
"""Chance of each HM being usable on each Pokemon if the move is Normal type and the Pokemon is not.
At least one Pokemon will always be able to learn the moves needed to meet your accessibility requirements."""
display_name = "HM Normal-Type Compatibility"
class HMOtherTypeCompatibility(TMHMCompatibility):
"""Chance of each HM being usable on each Pokemon if the move a type other than Normal or one of the Pokemon's types.
At least one Pokemon will always be able to learn the moves needed to meet your accessibility requirements."""
display_name = "HM Other-Type Compatibility"
class InheritTMHMCompatibility(Toggle):
"""If on, evolved Pokemon will inherit their pre-evolved form's TM and HM compatibilities.
They will then roll the above set chances again at a 50% lower rate for all TMs and HMs their predecessor could not
learn, unless the evolved form has additional or different types, then moves of those new types will be rolled
at the full set chance."""
display_name = "Inherit TM/HM Compatibility"
class RandomizePokemonTypes(Choice):
@@ -543,6 +632,17 @@ class IceTrapWeight(TrapWeight):
default = 0
class RandomizePokemonPalettes(Choice):
"""Modify palettes of Pokemon. Primary Type will set Pokemons' palettes based on their primary type, Follow
Evolutions will randomize palettes but palettes will remain the same through evolutions (except Eeveelutions),
Completely Random will randomize all Pokemons' palettes individually"""
display_name = "Randomize Pokemon Palettes"
option_vanilla = 0
option_primary_type = 1
option_follow_evolutions = 2
option_completely_random = 3
pokemon_rb_options = {
"game_version": GameVersion,
"trainer_name": TrainerName,
@@ -561,16 +661,22 @@ pokemon_rb_options = {
"extra_strength_boulders": ExtraStrengthBoulders,
"require_item_finder": RequireItemFinder,
"randomize_hidden_items": RandomizeHiddenItems,
"prizesanity": PrizeSanity,
"trainersanity": TrainerSanity,
"badges_needed_for_hm_moves": BadgesNeededForHMMoves,
"free_fly_location": FreeFlyLocation,
"require_pokedex": RequirePokedex,
"all_pokemon_seen": AllPokemonSeen,
"dexsanity": DexSanity,
"oaks_aide_rt_2": OaksAidRt2,
"oaks_aide_rt_11": OaksAidRt11,
"oaks_aide_rt_15": OaksAidRt15,
"badges_needed_for_hm_moves": BadgesNeededForHMMoves,
"free_fly_location": FreeFlyLocation,
"randomize_rock_tunnel": RandomizeRockTunnel,
"blind_trainers": BlindTrainers,
"minimum_steps_between_encounters": MinimumStepsBetweenEncounters,
"exp_modifier": ExpModifier,
"randomize_wild_pokemon": RandomizeWildPokemon,
"area_1_to_1_mapping": Area1To1Mapping,
"randomize_starter_pokemon": RandomizeStarterPokemon,
"randomize_static_pokemon": RandomizeStaticPokemon,
"randomize_legendary_pokemon": RandomizeLegendaryPokemon,
@@ -580,11 +686,19 @@ pokemon_rb_options = {
"minimum_catch_rate": MinimumCatchRate,
"randomize_trainer_parties": RandomizeTrainerParties,
"trainer_legendaries": TrainerLegendaries,
"move_balancing": MoveBalancing,
"randomize_pokemon_movesets": RandomizePokemonMovesets,
"confine_transform_to_ditto": ConfineTranstormToDitto,
"start_with_four_moves": StartWithFourMoves,
"same_type_attack_bonus": SameTypeAttackBonus,
"tm_compatibility": TMCompatibility,
"hm_compatibility": HMCompatibility,
"randomize_tm_moves": RandomizeTMMoves,
"tm_same_type_compatibility": TMSameTypeCompatibility,
"tm_normal_type_compatibility": TMNormalTypeCompatibility,
"tm_other_type_compatibility": TMOtherTypeCompatibility,
"hm_same_type_compatibility": HMSameTypeCompatibility,
"hm_normal_type_compatibility": HMNormalTypeCompatibility,
"hm_other_type_compatibility": HMOtherTypeCompatibility,
"inherit_tm_hm_compatibility": InheritTMHMCompatibility,
"randomize_pokemon_types": RandomizePokemonTypes,
"secondary_type_chance": SecondaryTypeChance,
"randomize_type_chart": RandomizeTypeChart,
@@ -604,5 +718,6 @@ pokemon_rb_options = {
"fire_trap_weight": FireTrapWeight,
"paralyze_trap_weight": ParalyzeTrapWeight,
"ice_trap_weight": IceTrapWeight,
"randomize_pokemon_palettes": RandomizePokemonPalettes,
"death_link": DeathLink
}