Pokemon Emerald: Fix possible dexsanity/legendary hunt softlock (#3443)
* Pokemon Emerald: Remove mirage tower from allowed dexsanity maps * Pokemon Emerald: Prevent placing wailord/relicanth in out of logic maps * Pokemon Emerald: Clarify docstring Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Pokemon Emerald: Update changelog --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
This commit is contained in:
parent
c4572964ec
commit
ee1b13f219
worlds/pokemon_emerald
|
@ -12,6 +12,7 @@ and won't show up in the wild. Previously they would be forced to show up exactl
|
|||
|
||||
- The Lilycove Wailmer now logically block you from the east. Actual game behavior is still unchanged for now.
|
||||
- Water encounters in Slateport now correctly require Surf.
|
||||
- Mirage Tower can no longer be your only logical access to a species in the wild, since it can permanently disappear.
|
||||
- Updated the tracker link in the setup guide.
|
||||
|
||||
# 2.1.1
|
||||
|
|
|
@ -25,13 +25,20 @@ IGNORABLE_MAPS = {
|
|||
}
|
||||
"""These maps exist but don't show up in the rando or are unused, and so should be discarded"""
|
||||
|
||||
POSTGAME_MAPS = {
|
||||
OUT_OF_LOGIC_MAPS = {
|
||||
"MAP_DESERT_UNDERPASS",
|
||||
"MAP_SAFARI_ZONE_NORTHEAST",
|
||||
"MAP_SAFARI_ZONE_SOUTHEAST",
|
||||
"MAP_METEOR_FALLS_STEVENS_CAVE",
|
||||
"MAP_MIRAGE_TOWER_1F",
|
||||
"MAP_MIRAGE_TOWER_2F",
|
||||
"MAP_MIRAGE_TOWER_3F",
|
||||
"MAP_MIRAGE_TOWER_4F",
|
||||
}
|
||||
"""These maps have encounters and are locked behind beating the champion. Those encounter slots should be ignored for logical access to a species."""
|
||||
"""
|
||||
These maps have encounters and are locked behind beating the champion or are missable.
|
||||
Those encounter slots should be ignored for logical access to a species.
|
||||
"""
|
||||
|
||||
NUM_REAL_SPECIES = 386
|
||||
|
||||
|
|
|
@ -4,9 +4,8 @@ Functions related to pokemon species and moves
|
|||
import functools
|
||||
from typing import TYPE_CHECKING, Dict, List, Set, Optional, Tuple
|
||||
|
||||
from Options import Toggle
|
||||
|
||||
from .data import NUM_REAL_SPECIES, POSTGAME_MAPS, EncounterTableData, LearnsetMove, MiscPokemonData, SpeciesData, data
|
||||
from .data import (NUM_REAL_SPECIES, OUT_OF_LOGIC_MAPS, EncounterTableData, LearnsetMove, MiscPokemonData,
|
||||
SpeciesData, data)
|
||||
from .options import (Goal, HmCompatibility, LevelUpMoves, RandomizeAbilities, RandomizeLegendaryEncounters,
|
||||
RandomizeMiscPokemon, RandomizeStarters, RandomizeTypes, RandomizeWildPokemon,
|
||||
TmTutorCompatibility)
|
||||
|
@ -266,7 +265,8 @@ def randomize_wild_encounters(world: "PokemonEmeraldWorld") -> None:
|
|||
species_old_to_new_map: Dict[int, int] = {}
|
||||
for species_id in table.slots:
|
||||
if species_id not in species_old_to_new_map:
|
||||
if not placed_priority_species and len(priority_species) > 0:
|
||||
if not placed_priority_species and len(priority_species) > 0 \
|
||||
and map_name not in OUT_OF_LOGIC_MAPS:
|
||||
new_species_id = priority_species.pop()
|
||||
placed_priority_species = True
|
||||
else:
|
||||
|
@ -329,7 +329,7 @@ def randomize_wild_encounters(world: "PokemonEmeraldWorld") -> None:
|
|||
new_species_id = world.random.choice(candidates).species_id
|
||||
species_old_to_new_map[species_id] = new_species_id
|
||||
|
||||
if world.options.dexsanity and map_data.name not in POSTGAME_MAPS:
|
||||
if world.options.dexsanity and map_name not in OUT_OF_LOGIC_MAPS:
|
||||
already_placed.add(new_species_id)
|
||||
|
||||
# Actually create the new list of slots and encounter table
|
||||
|
|
Loading…
Reference in New Issue