Skip to content

Commit

Permalink
Pokemon FRLG: Updated docs and the need to grind money for certain ch…
Browse files Browse the repository at this point in the history
…ecks
  • Loading branch information
vyneras committed Jan 8, 2025
1 parent f89e453 commit 56c5e9a
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 44 deletions.
2 changes: 1 addition & 1 deletion worlds/pokemon_frlg/data/items.json
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@
},
"ITEM_VS_SEEKER": {
"name": "Vs. Seeker",
"classification": "PROGRESSION",
"classification": "USEFUL",
"tags": ["Unique"]
},

Expand Down
2 changes: 2 additions & 0 deletions worlds/pokemon_frlg/docs/rom changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ predetermined priority
* Increased the rate at which a Pokémon's HP drains in battle to be based on the Pokémon's max HP
* Added a GO HOME option to the menu that teleports you to Pallet Town
* All evolution items (Moon Stone, Dragon Scale, etc.) have been turned into key items that can be used repeatadly. The items that have a held effect (Metal Coat, Deep Sea Scale, etc.) will give you both a held item version and key item version of the item when you get them.
* Talking to the Mystery Gift Man on the 2nd floor of any Pokemon Center will allow you to respawn any static encounters you haven't caught yet.
* Talking to the Wireless Club Attendant (left) on the 2nd floor of any Pokemon Center will let you fight a random uncatchable Pokemon in order to grind exp and money.
* The Pikachu tutorial in the intro is skipped
* The Old Man catching tutorial is skipped
* Miguel's position in Mt. Moon will change based on which side you enter from
Expand Down
49 changes: 6 additions & 43 deletions worlds/pokemon_frlg/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,6 @@ def set_rules(world: "PokemonFRLGWorld") -> None:
"Waterfall": "Volcano Badge"
}

kanto_rematchable_trainer_regions: List[str] = [
"Route 3", "Route 4 Northeast", "Route 6", "Route 8", "Route 9", "Route 10 North", "Route 10 South",
"Route 10 Near Power Plant", "Route 11 West", "Route 12 Center", "Route 12 South", "Route 12 Behind North Tree",
"Route 13", "Route 14", "Route 15 South", "Route 15 North", "Route 16 Northeast", "Route 16 Southwest",
"Route 17", "Route 18 East", "Route 19", "Route 19 Water", "Route 20 East", "Route 20 Near South Cave",
"Route 20 West", "Route 21", "Route 24", "Route 25"
]

sevii_rematchable_trainer_regions: List[str] = [
"Treasure Beach Water", "Kindle Road South Water", "Kindle Road Center", "Kindle Road North Water",
"Bond Bridge", "Bond Bridge Water", "Memorial Pillar", "Water Labyrinth", "Resort Gorgeous Water",
"Resort Gorgeous Near Resort", "Water Path South", "Water Path South Water", "Water Path North", "Ruin Valley",
"Green Path Water", "Outcast Island Water", "Canyon Entrance", "Sevault Canyon", "Tanoby Ruins Scufib Island",
"Tanoby Ruins Weepth Island", "Tanoby Ruins Monean Island", "Trainer Tower Exterior South"
]

island_passes: Dict[int, List[str]] = {
1: ["Tri Pass", "One Pass"],
2: ["Tri Pass", "Two Pass"],
Expand All @@ -57,16 +41,9 @@ def set_rules(world: "PokemonFRLGWorld") -> None:
7: ["Rainbow Pass", "Seven Pass"]
}

rematchable_trainer_regions = kanto_rematchable_trainer_regions
if not options.kanto_only:
rematchable_trainer_regions.extend(sevii_rematchable_trainer_regions)

def has_badge_requirement(hm: str, state: CollectionState):
return hm in options.remove_badge_requirement.value or state.has(badge_requirements[hm], player)

def can_reach_any_region(regions: List[str], state: CollectionState):
return any([state.can_reach_region(region, player) for region in regions])

def can_cut(state: CollectionState):
return (state.has("HM01 Cut", player)
and has_badge_requirement("Cut", state)
Expand Down Expand Up @@ -249,10 +226,6 @@ def can_evolve(state: CollectionState, pokemon: str):
return has_n_gyms(state, evolution_data.param / 7)
return False

def can_grind_money(state: CollectionState):
return ((state.has("Vs. Seeker", player) and can_reach_any_region(rematchable_trainer_regions, state)) or
can_challenge_elite_four_rematch(state))

def can_open_silph_door(floor: int, state: CollectionState):
return (state.has_any(["Card Key", f"Card Key {floor}F"], player) or
state.has("Progressive Card Key", player, floor - 1))
Expand Down Expand Up @@ -360,9 +333,6 @@ def get_location(location: str):
set_rule(get_entrance("Pewter City Cuttable Tree"), lambda state: can_cut(state))
set_rule(get_entrance("Pewter City Exit (East)"), lambda state: can_pass_pewter_city_roadblock(state))

# Route 4
set_rule(get_location("Route 4 Pokemon Center 1F - Salesman Purchase"), lambda state: can_grind_money(state))

# Mt. Moon
if "Mt. Moon" in options.additional_dark_caves.value:
set_rule(get_entrance("Mt. Moon 1F Leave South Entry"), lambda state: dark_cave(state))
Expand Down Expand Up @@ -551,26 +521,19 @@ def get_location(location: str):
set_rule(get_entrance("Route 7 Near Tunnel Smashable Rocks"), lambda state: can_rock_smash(state))

# Celadon City
set_rule(get_location("Celadon Department Store Roof - Thirsty Girl's Gift (Give Fresh Water)"),
lambda state: can_grind_money(state))
set_rule(get_location("Celadon Department Store Roof - Thirsty Girl's Gift (Give Soda Pop)"),
lambda state: can_grind_money(state))
set_rule(get_location("Celadon Department Store Roof - Thirsty Girl's Gift (Give Lemonade)"),
lambda state: can_grind_money(state))
set_rule(get_location("Celadon Game Corner - Fisherman's Gift"), lambda state: state.has("Coin Case", player))
set_rule(get_location("Celadon Game Corner - Scientist's Gift"), lambda state: state.has("Coin Case", player))
set_rule(get_location("Celadon Game Corner - Gentleman's Gift"), lambda state: state.has("Coin Case", player))
set_rule(get_location("Celadon Department Store Roof - Vending Machine"), lambda state: can_grind_money(state))
set_rule(get_location("Celadon Game Corner Prize Room - Prize Pokemon 1"),
lambda state: state.has("Coin Case", player) and can_grind_money(state))
lambda state: state.has("Coin Case", player))
set_rule(get_location("Celadon Game Corner Prize Room - Prize Pokemon 2"),
lambda state: state.has("Coin Case", player) and can_grind_money(state))
lambda state: state.has("Coin Case", player))
set_rule(get_location("Celadon Game Corner Prize Room - Prize Pokemon 3"),
lambda state: state.has("Coin Case", player) and can_grind_money(state))
lambda state: state.has("Coin Case", player))
set_rule(get_location("Celadon Game Corner Prize Room - Prize Pokemon 4"),
lambda state: state.has("Coin Case", player) and can_grind_money(state))
lambda state: state.has("Coin Case", player))
set_rule(get_location("Celadon Game Corner Prize Room - Prize Pokemon 5"),
lambda state: state.has("Coin Case", player) and can_grind_money(state))
lambda state: state.has("Coin Case", player))
set_rule(get_entrance("Celadon City Cuttable Tree"), lambda state: can_cut(state))
set_rule(get_entrance("Celadon City Surfing Spot"), lambda state: can_surf(state))
set_rule(get_entrance("Celadon City Near Gym Cuttable Tree"), lambda state: can_cut(state))
Expand Down Expand Up @@ -906,7 +869,7 @@ def get_location(location: str):
set_rule(get_location("Two Island Game Corner - Lostelle's Dad's Gift"),
lambda state: state.has_all(["Rescue Lostelle", "Meteorite"], player))
set_rule(get_location("Two Island Town - Market Stall"),
lambda state: state.has_all(["Rescue Lostelle", "Defeat Champion"], player) and can_grind_money(state))
lambda state: state.has_all(["Rescue Lostelle", "Defeat Champion"], player))
set_rule(get_location("Two Island Game Corner - Lostelle's Dad's Delivery"),
lambda state: state.has_all(["Rescue Lostelle", "Meteorite"], player))

Expand Down

0 comments on commit 56c5e9a

Please sign in to comment.