From 08f04a6cd2be56b1be28ba735b90c2591a33ea75 Mon Sep 17 00:00:00 2001 From: dayfine Date: Mon, 9 Nov 2026 18:27:30 -0800 Subject: [PATCH] FRLG maps: generated bases plus overlays (OVERLAYS.md step 1) Every FRLG map now has a generator-owned base in maps/base/ (all 152, verified maps outside the scope included; --check reproduces each byte for byte) and, where authored, an overlay in maps/overlays/. runtime/ is derived: base bytes, or base + overlays at story state "complete" for the interim consumer. Generator: every manifest map gets a base, so every source warp and connection is linked by name (the 31 pending relinks are gone); OPENED_TILES leaves the generator; elevation grids are omitted only where lossless (never with water, which Arduino's walker blocks by its level); a collision-free MB_COUNTER is floor. The verified maps' only real hand edit, Vermilion Gym's open beams, is a story_state overlay after FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES / 00.23. Water drawn as walls on SSAnne_Exterior and VermilionCity is dropped (no consumer needs it). A testdata delta records the generated differences, and the publication test undoes exactly those to reproduce the reviewed v1 digests. map_overlays: effective_map(name, story_state), audit, effective, check and write; schemas/map-overlay.schema.json; manifest entries list base and overlay files with hashes. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss --- .github/workflows/json-schema.yml | 10 +- data/games/frlg/maps/README.md | 92 +- data/games/frlg/maps/base/CeladonCity.json | 207 +++ .../base/CeladonCity_Condominiums_1F.json | 72 + .../base/CeladonCity_DepartmentStore_1F.json | 50 + .../base/CeladonCity_DepartmentStore_5F.json | 64 + .../maps/base/CeladonCity_GameCorner.json | 102 ++ .../games/frlg/maps/base/CeladonCity_Gym.json | 121 ++ .../games/frlg/maps/base/CeruleanCave_1F.json | 164 +++ .../games/frlg/maps/base/CeruleanCave_2F.json | 163 ++ .../frlg/maps/base/CeruleanCave_B1F.json | 165 +++ data/games/frlg/maps/base/CeruleanCity.json | 208 +++ .../frlg/maps/base/CeruleanCity_BikeShop.json | 42 + .../frlg/maps/base/CeruleanCity_Gym.json | 82 ++ .../frlg/maps/base/CeruleanCity_House1.json | 40 + .../frlg/maps/base/CeruleanCity_House2.json | 41 + .../frlg/maps/base/CeruleanCity_Mart.json | 46 + .../base/CeruleanCity_PokemonCenter_1F.json | 92 ++ data/games/frlg/maps/base/CinnabarIsland.json | 92 ++ .../frlg/maps/base/CinnabarIsland_Gym.json | 93 ++ .../frlg/maps/base/CinnabarIsland_Mart.json | 40 + data/games/frlg/maps/base/FuchsiaCity.json | 213 +++ .../games/frlg/maps/base/FuchsiaCity_Gym.json | 93 ++ .../frlg/maps/base/FuchsiaCity_Mart.json | 41 + .../base/FuchsiaCity_SafariZone_Entrance.json | 40 + .../maps/base/FuchsiaCity_WardensHouse.json | 58 + .../maps/base/IndigoPlateau_Exterior.json | 54 + .../base/IndigoPlateau_PokemonCenter_1F.json | 115 ++ data/games/frlg/maps/base/LavenderTown.json | 65 + .../frlg/maps/base/LavenderTown_Mart.json | 46 + .../base/LavenderTown_PokemonCenter_1F.json | 79 + .../LavenderTown_VolunteerPokemonHouse.json | 69 + data/games/frlg/maps/base/MtMoon_1F.json | 180 +++ data/games/frlg/maps/base/MtMoon_B1F.json | 74 + data/games/frlg/maps/base/MtMoon_B2F.json | 198 +++ data/games/frlg/maps/base/PalletTown.json | 90 ++ .../maps/base/PalletTown_PlayersHouse_1F.json | 41 + .../maps/base/PalletTown_PlayersHouse_2F.json | 36 + .../base/PalletTown_ProfessorOaksLab.json | 129 ++ .../maps/base/PalletTown_RivalsHouse.json | 49 + data/games/frlg/maps/base/PewterCity.json | 118 ++ data/games/frlg/maps/base/PewterCity_Gym.json | 49 + .../games/frlg/maps/base/PewterCity_Mart.json | 35 + .../frlg/maps/base/PewterCity_Museum_1F.json | 76 + .../base/PewterCity_PokemonCenter_1F.json | 83 ++ .../maps/base/PokemonLeague_AgathasRoom.json | 41 + .../maps/base/PokemonLeague_BrunosRoom.json | 42 + .../base/PokemonLeague_ChampionsRoom.json | 78 + .../maps/base/PokemonLeague_HallOfFame.json | 39 + .../maps/base/PokemonLeague_LancesRoom.json | 53 + .../maps/base/PokemonLeague_LoreleisRoom.json | 41 + .../frlg/maps/base/PokemonMansion_1F.json | 106 ++ .../frlg/maps/base/PokemonMansion_2F.json | 95 ++ .../frlg/maps/base/PokemonMansion_3F.json | 103 ++ .../frlg/maps/base/PokemonMansion_B1F.json | 103 ++ .../games/frlg/maps/base/PokemonTower_1F.json | 61 + .../games/frlg/maps/base/PokemonTower_2F.json | 51 + .../games/frlg/maps/base/PokemonTower_3F.json | 75 + .../games/frlg/maps/base/PokemonTower_4F.json | 92 ++ .../games/frlg/maps/base/PokemonTower_5F.json | 91 ++ .../games/frlg/maps/base/PokemonTower_6F.json | 84 ++ .../games/frlg/maps/base/PokemonTower_7F.json | 76 + data/games/frlg/maps/base/RockTunnel_1F.json | 166 +++ data/games/frlg/maps/base/RockTunnel_B1F.json | 267 ++++ .../frlg/maps/base/RocketHideout_B1F.json | 121 ++ .../frlg/maps/base/RocketHideout_B2F.json | 88 ++ .../frlg/maps/base/RocketHideout_B3F.json | 92 ++ .../frlg/maps/base/RocketHideout_B4F.json | 123 ++ data/games/frlg/maps/base/Route1.json | 75 + data/games/frlg/maps/base/Route10.json | 262 ++++ .../maps/base/Route10_PokemonCenter_1F.json | 78 + data/games/frlg/maps/base/Route11.json | 162 ++ .../maps/base/Route11_EastEntrance_1F.json | 48 + data/games/frlg/maps/base/Route12.json | 359 +++++ .../maps/base/Route12_NorthEntrance_1F.json | 43 + data/games/frlg/maps/base/Route13.json | 148 ++ data/games/frlg/maps/base/Route14.json | 259 ++++ data/games/frlg/maps/base/Route15.json | 148 ++ .../maps/base/Route15_WestEntrance_1F.json | 42 + data/games/frlg/maps/base/Route16.json | 141 ++ data/games/frlg/maps/base/Route16_House.json | 46 + .../maps/base/Route16_NorthEntrance_1F.json | 55 + data/games/frlg/maps/base/Route18.json | 88 ++ .../maps/base/Route18_EastEntrance_1F.json | 40 + data/games/frlg/maps/base/Route19.json | 231 +++ data/games/frlg/maps/base/Route2.json | 177 +++ data/games/frlg/maps/base/Route20.json | 146 ++ data/games/frlg/maps/base/Route21_North.json | 147 ++ data/games/frlg/maps/base/Route21_South.json | 147 ++ data/games/frlg/maps/base/Route22.json | 81 + .../frlg/maps/base/Route22_NorthEntrance.json | 42 + data/games/frlg/maps/base/Route23.json | 396 +++++ data/games/frlg/maps/base/Route24.json | 180 +++ data/games/frlg/maps/base/Route25.json | 160 ++ .../frlg/maps/base/Route25_SeaCottage.json | 50 + .../frlg/maps/base/Route2_EastBuilding.json | 43 + .../Route2_ViridianForest_NorthEntrance.json | 53 + .../Route2_ViridianForest_SouthEntrance.json | 48 + data/games/frlg/maps/base/Route3.json | 106 ++ data/games/frlg/maps/base/Route4.json | 112 ++ .../maps/base/Route4_PokemonCenter_1F.json | 83 ++ data/games/frlg/maps/base/Route5.json | 64 + .../frlg/maps/base/Route5_SouthEntrance.json | 35 + data/games/frlg/maps/base/Route6.json | 140 ++ .../frlg/maps/base/Route6_NorthEntrance.json | 35 + data/games/frlg/maps/base/Route7.json | 42 + .../frlg/maps/base/Route7_EastEntrance.json | 33 + data/games/frlg/maps/base/Route8.json | 158 ++ .../frlg/maps/base/Route8_WestEntrance.json | 33 + data/games/frlg/maps/base/Route9.json | 149 ++ .../frlg/maps/base/SSAnne_1F_Corridor.json | 68 + .../games/frlg/maps/base/SSAnne_1F_Room6.json | 18 + .../frlg/maps/base/SSAnne_2F_Corridor.json | 69 + .../frlg/maps/base/SSAnne_CaptainsOffice.json | 35 + .../games/frlg/maps/base/SSAnne_Exterior.json | 97 ++ .../frlg/maps/base/SafariZone_Center.json | 125 ++ .../games/frlg/maps/base/SafariZone_East.json | 137 ++ .../frlg/maps/base/SafariZone_North.json | 151 ++ .../maps/base/SafariZone_SecretHouse.json | 40 + .../games/frlg/maps/base/SafariZone_West.json | 147 ++ data/games/frlg/maps/base/SaffronCity.json | 221 +++ .../maps/base/SaffronCity_Connection.json | 61 + .../games/frlg/maps/base/SaffronCity_Gym.json | 168 +++ .../frlg/maps/base/SaffronCity_Mart.json | 41 + data/games/frlg/maps/base/SilphCo_10F.json | 89 ++ data/games/frlg/maps/base/SilphCo_11F.json | 82 ++ data/games/frlg/maps/base/SilphCo_1F.json | 53 + data/games/frlg/maps/base/SilphCo_2F.json | 88 ++ data/games/frlg/maps/base/SilphCo_3F.json | 88 ++ data/games/frlg/maps/base/SilphCo_4F.json | 116 ++ data/games/frlg/maps/base/SilphCo_5F.json | 117 ++ data/games/frlg/maps/base/SilphCo_6F.json | 93 ++ data/games/frlg/maps/base/SilphCo_7F.json | 116 ++ data/games/frlg/maps/base/SilphCo_8F.json | 117 ++ data/games/frlg/maps/base/SilphCo_9F.json | 91 ++ .../base/UndergroundPath_EastEntrance.json | 39 + .../base/UndergroundPath_EastWestTunnel.json | 26 + .../base/UndergroundPath_NorthEntrance.json | 39 + .../UndergroundPath_NorthSouthTunnel.json | 82 ++ .../base/UndergroundPath_SouthEntrance.json | 39 + .../base/UndergroundPath_WestEntrance.json | 39 + data/games/frlg/maps/base/VermilionCity.json | 168 +++ .../frlg/maps/base/VermilionCity_Gym.json | 68 + .../frlg/maps/base/VermilionCity_Mart.json | 46 + .../base/VermilionCity_PokemonCenter_1F.json | 92 ++ .../base/VermilionCity_PokemonFanClub.json | 86 ++ data/games/frlg/maps/base/VictoryRoad_1F.json | 133 ++ data/games/frlg/maps/base/VictoryRoad_2F.json | 208 +++ data/games/frlg/maps/base/VictoryRoad_3F.json | 186 +++ data/games/frlg/maps/base/ViridianCity.json | 187 +++ .../frlg/maps/base/ViridianCity_Gym.json | 120 ++ .../frlg/maps/base/ViridianCity_Mart.json | 53 + .../base/ViridianCity_PokemonCenter_1F.json | 71 + data/games/frlg/maps/base/ViridianForest.json | 181 +++ .../frlg/maps/overlays/VermilionCity_Gym.json | 19 + data/games/frlg/maps/runtime/CeladonCity.json | 45 +- .../frlg/maps/runtime/CeruleanCave_1F.json | 251 ++-- .../frlg/maps/runtime/CeruleanCave_2F.json | 224 ++- .../frlg/maps/runtime/CeruleanCave_B1F.json | 241 ++- .../games/frlg/maps/runtime/CeruleanCity.json | 338 +++-- .../maps/runtime/CeruleanCity_BikeShop.json | 73 +- .../frlg/maps/runtime/CeruleanCity_Gym.json | 145 +- .../maps/runtime/CeruleanCity_House2.json | 74 +- .../frlg/maps/runtime/CeruleanCity_Mart.json | 88 +- .../CeruleanCity_PokemonCenter_1F.json | 140 +- .../frlg/maps/runtime/CinnabarIsland.json | 25 +- data/games/frlg/maps/runtime/FuchsiaCity.json | 45 +- .../games/frlg/maps/runtime/LavenderTown.json | 108 +- .../LavenderTown_PokemonCenter_1F.json | 123 +- data/games/frlg/maps/runtime/MtMoon_1F.json | 260 ++-- data/games/frlg/maps/runtime/MtMoon_B1F.json | 143 +- data/games/frlg/maps/runtime/MtMoon_B2F.json | 322 ++-- data/games/frlg/maps/runtime/PalletTown.json | 153 +- .../runtime/PalletTown_PlayersHouse_1F.json | 74 +- .../runtime/PalletTown_PlayersHouse_2F.json | 73 +- .../runtime/PalletTown_ProfessorOaksLab.json | 175 ++- .../maps/runtime/PalletTown_RivalsHouse.json | 79 +- data/games/frlg/maps/runtime/PewterCity.json | 189 ++- .../frlg/maps/runtime/PewterCity_Gym.json | 87 +- .../frlg/maps/runtime/PewterCity_Mart.json | 78 +- .../maps/runtime/PewterCity_Museum_1F.json | 113 +- .../runtime/PewterCity_PokemonCenter_1F.json | 130 +- .../frlg/maps/runtime/RockTunnel_1F.json | 241 ++- .../frlg/maps/runtime/RockTunnel_B1F.json | 358 +++-- data/games/frlg/maps/runtime/Route1.json | 128 +- data/games/frlg/maps/runtime/Route10.json | 458 +++--- .../runtime/Route10_PokemonCenter_1F.json | 122 +- data/games/frlg/maps/runtime/Route11.json | 25 +- data/games/frlg/maps/runtime/Route13.json | 25 +- data/games/frlg/maps/runtime/Route14.json | 65 +- data/games/frlg/maps/runtime/Route16.json | 25 +- data/games/frlg/maps/runtime/Route18.json | 25 +- data/games/frlg/maps/runtime/Route19.json | 65 +- data/games/frlg/maps/runtime/Route2.json | 301 ++-- data/games/frlg/maps/runtime/Route20.json | 25 +- .../frlg/maps/runtime/Route21_North.json | 55 +- .../frlg/maps/runtime/Route21_South.json | 55 +- data/games/frlg/maps/runtime/Route22.json | 148 +- data/games/frlg/maps/runtime/Route23.json | 165 ++- data/games/frlg/maps/runtime/Route24.json | 283 ++-- data/games/frlg/maps/runtime/Route25.json | 230 ++- .../frlg/maps/runtime/Route25_SeaCottage.json | 81 +- .../Route2_ViridianForest_NorthEntrance.json | 85 +- .../Route2_ViridianForest_SouthEntrance.json | 81 +- data/games/frlg/maps/runtime/Route3.json | 151 +- data/games/frlg/maps/runtime/Route4.json | 179 ++- .../maps/runtime/Route4_PokemonCenter_1F.json | 130 +- data/games/frlg/maps/runtime/Route5.json | 122 +- data/games/frlg/maps/runtime/Route6.json | 243 +-- data/games/frlg/maps/runtime/Route9.json | 201 ++- .../frlg/maps/runtime/SSAnne_1F_Corridor.json | 145 +- .../frlg/maps/runtime/SSAnne_2F_Corridor.json | 111 +- .../maps/runtime/SSAnne_CaptainsOffice.json | 63 +- .../frlg/maps/runtime/SSAnne_Exterior.json | 187 +-- .../frlg/maps/runtime/SafariZone_Center.json | 41 +- .../UndergroundPath_NorthEntrance.json | 71 +- .../UndergroundPath_NorthSouthTunnel.json | 162 +- .../UndergroundPath_SouthEntrance.json | 71 +- .../frlg/maps/runtime/VermilionCity.json | 285 ++-- .../frlg/maps/runtime/VermilionCity_Gym.json | 134 +- .../VermilionCity_PokemonCenter_1F.json | 139 +- .../runtime/VermilionCity_PokemonFanClub.json | 134 +- .../games/frlg/maps/runtime/ViridianCity.json | 302 ++-- .../frlg/maps/runtime/ViridianCity_Mart.json | 93 +- .../ViridianCity_PokemonCenter_1F.json | 115 +- .../frlg/maps/runtime/ViridianForest.json | 312 ++-- data/maps/runtime-manifest.json | 1311 +++++++++++++---- docs/maps/OVERLAYS.md | 87 ++ docs/maps/runtime-maps.md | 21 +- integrations/arduino-source/README.md | 5 + schemas/map-overlay.schema.json | 128 ++ src/pokesim/formats/json_schema.py | 4 + src/pokesim/maps/frlg_decomp_map_builder.py | 80 +- src/pokesim/maps/frlg_import_audit.py | 3 +- src/pokesim/maps/frlg_map_set.py | 22 +- src/pokesim/maps/goldens/frlg-fan-club.json | 2 +- .../maps/goldens/frlg-pallet-town.json | 2 +- src/pokesim/maps/map_overlays.py | 411 ++++++ .../maps/test_frlg_decomp_map_builder.py | 18 +- src/pokesim/maps/test_frlg_import_audit.py | 10 +- src/pokesim/maps/test_frlg_map_set.py | 11 +- src/pokesim/maps/test_item_identity.py | 13 +- src/pokesim/maps/test_map_overlays.py | 213 +++ src/pokesim/maps/test_runtime_map_pack.py | 10 +- .../maps/test_runtime_map_publication.py | 39 +- .../maps/testdata/frlg-v1-to-base-delta.json | 398 +++++ src/pokesim/story/test_checkpoint_replay.py | 6 +- 247 files changed, 24078 insertions(+), 4249 deletions(-) create mode 100644 data/games/frlg/maps/base/CeladonCity.json create mode 100644 data/games/frlg/maps/base/CeladonCity_Condominiums_1F.json create mode 100644 data/games/frlg/maps/base/CeladonCity_DepartmentStore_1F.json create mode 100644 data/games/frlg/maps/base/CeladonCity_DepartmentStore_5F.json create mode 100644 data/games/frlg/maps/base/CeladonCity_GameCorner.json create mode 100644 data/games/frlg/maps/base/CeladonCity_Gym.json create mode 100644 data/games/frlg/maps/base/CeruleanCave_1F.json create mode 100644 data/games/frlg/maps/base/CeruleanCave_2F.json create mode 100644 data/games/frlg/maps/base/CeruleanCave_B1F.json create mode 100644 data/games/frlg/maps/base/CeruleanCity.json create mode 100644 data/games/frlg/maps/base/CeruleanCity_BikeShop.json create mode 100644 data/games/frlg/maps/base/CeruleanCity_Gym.json create mode 100644 data/games/frlg/maps/base/CeruleanCity_House1.json create mode 100644 data/games/frlg/maps/base/CeruleanCity_House2.json create mode 100644 data/games/frlg/maps/base/CeruleanCity_Mart.json create mode 100644 data/games/frlg/maps/base/CeruleanCity_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/CinnabarIsland.json create mode 100644 data/games/frlg/maps/base/CinnabarIsland_Gym.json create mode 100644 data/games/frlg/maps/base/CinnabarIsland_Mart.json create mode 100644 data/games/frlg/maps/base/FuchsiaCity.json create mode 100644 data/games/frlg/maps/base/FuchsiaCity_Gym.json create mode 100644 data/games/frlg/maps/base/FuchsiaCity_Mart.json create mode 100644 data/games/frlg/maps/base/FuchsiaCity_SafariZone_Entrance.json create mode 100644 data/games/frlg/maps/base/FuchsiaCity_WardensHouse.json create mode 100644 data/games/frlg/maps/base/IndigoPlateau_Exterior.json create mode 100644 data/games/frlg/maps/base/IndigoPlateau_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/LavenderTown.json create mode 100644 data/games/frlg/maps/base/LavenderTown_Mart.json create mode 100644 data/games/frlg/maps/base/LavenderTown_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/LavenderTown_VolunteerPokemonHouse.json create mode 100644 data/games/frlg/maps/base/MtMoon_1F.json create mode 100644 data/games/frlg/maps/base/MtMoon_B1F.json create mode 100644 data/games/frlg/maps/base/MtMoon_B2F.json create mode 100644 data/games/frlg/maps/base/PalletTown.json create mode 100644 data/games/frlg/maps/base/PalletTown_PlayersHouse_1F.json create mode 100644 data/games/frlg/maps/base/PalletTown_PlayersHouse_2F.json create mode 100644 data/games/frlg/maps/base/PalletTown_ProfessorOaksLab.json create mode 100644 data/games/frlg/maps/base/PalletTown_RivalsHouse.json create mode 100644 data/games/frlg/maps/base/PewterCity.json create mode 100644 data/games/frlg/maps/base/PewterCity_Gym.json create mode 100644 data/games/frlg/maps/base/PewterCity_Mart.json create mode 100644 data/games/frlg/maps/base/PewterCity_Museum_1F.json create mode 100644 data/games/frlg/maps/base/PewterCity_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/PokemonLeague_AgathasRoom.json create mode 100644 data/games/frlg/maps/base/PokemonLeague_BrunosRoom.json create mode 100644 data/games/frlg/maps/base/PokemonLeague_ChampionsRoom.json create mode 100644 data/games/frlg/maps/base/PokemonLeague_HallOfFame.json create mode 100644 data/games/frlg/maps/base/PokemonLeague_LancesRoom.json create mode 100644 data/games/frlg/maps/base/PokemonLeague_LoreleisRoom.json create mode 100644 data/games/frlg/maps/base/PokemonMansion_1F.json create mode 100644 data/games/frlg/maps/base/PokemonMansion_2F.json create mode 100644 data/games/frlg/maps/base/PokemonMansion_3F.json create mode 100644 data/games/frlg/maps/base/PokemonMansion_B1F.json create mode 100644 data/games/frlg/maps/base/PokemonTower_1F.json create mode 100644 data/games/frlg/maps/base/PokemonTower_2F.json create mode 100644 data/games/frlg/maps/base/PokemonTower_3F.json create mode 100644 data/games/frlg/maps/base/PokemonTower_4F.json create mode 100644 data/games/frlg/maps/base/PokemonTower_5F.json create mode 100644 data/games/frlg/maps/base/PokemonTower_6F.json create mode 100644 data/games/frlg/maps/base/PokemonTower_7F.json create mode 100644 data/games/frlg/maps/base/RockTunnel_1F.json create mode 100644 data/games/frlg/maps/base/RockTunnel_B1F.json create mode 100644 data/games/frlg/maps/base/RocketHideout_B1F.json create mode 100644 data/games/frlg/maps/base/RocketHideout_B2F.json create mode 100644 data/games/frlg/maps/base/RocketHideout_B3F.json create mode 100644 data/games/frlg/maps/base/RocketHideout_B4F.json create mode 100644 data/games/frlg/maps/base/Route1.json create mode 100644 data/games/frlg/maps/base/Route10.json create mode 100644 data/games/frlg/maps/base/Route10_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/Route11.json create mode 100644 data/games/frlg/maps/base/Route11_EastEntrance_1F.json create mode 100644 data/games/frlg/maps/base/Route12.json create mode 100644 data/games/frlg/maps/base/Route12_NorthEntrance_1F.json create mode 100644 data/games/frlg/maps/base/Route13.json create mode 100644 data/games/frlg/maps/base/Route14.json create mode 100644 data/games/frlg/maps/base/Route15.json create mode 100644 data/games/frlg/maps/base/Route15_WestEntrance_1F.json create mode 100644 data/games/frlg/maps/base/Route16.json create mode 100644 data/games/frlg/maps/base/Route16_House.json create mode 100644 data/games/frlg/maps/base/Route16_NorthEntrance_1F.json create mode 100644 data/games/frlg/maps/base/Route18.json create mode 100644 data/games/frlg/maps/base/Route18_EastEntrance_1F.json create mode 100644 data/games/frlg/maps/base/Route19.json create mode 100644 data/games/frlg/maps/base/Route2.json create mode 100644 data/games/frlg/maps/base/Route20.json create mode 100644 data/games/frlg/maps/base/Route21_North.json create mode 100644 data/games/frlg/maps/base/Route21_South.json create mode 100644 data/games/frlg/maps/base/Route22.json create mode 100644 data/games/frlg/maps/base/Route22_NorthEntrance.json create mode 100644 data/games/frlg/maps/base/Route23.json create mode 100644 data/games/frlg/maps/base/Route24.json create mode 100644 data/games/frlg/maps/base/Route25.json create mode 100644 data/games/frlg/maps/base/Route25_SeaCottage.json create mode 100644 data/games/frlg/maps/base/Route2_EastBuilding.json create mode 100644 data/games/frlg/maps/base/Route2_ViridianForest_NorthEntrance.json create mode 100644 data/games/frlg/maps/base/Route2_ViridianForest_SouthEntrance.json create mode 100644 data/games/frlg/maps/base/Route3.json create mode 100644 data/games/frlg/maps/base/Route4.json create mode 100644 data/games/frlg/maps/base/Route4_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/Route5.json create mode 100644 data/games/frlg/maps/base/Route5_SouthEntrance.json create mode 100644 data/games/frlg/maps/base/Route6.json create mode 100644 data/games/frlg/maps/base/Route6_NorthEntrance.json create mode 100644 data/games/frlg/maps/base/Route7.json create mode 100644 data/games/frlg/maps/base/Route7_EastEntrance.json create mode 100644 data/games/frlg/maps/base/Route8.json create mode 100644 data/games/frlg/maps/base/Route8_WestEntrance.json create mode 100644 data/games/frlg/maps/base/Route9.json create mode 100644 data/games/frlg/maps/base/SSAnne_1F_Corridor.json create mode 100644 data/games/frlg/maps/base/SSAnne_1F_Room6.json create mode 100644 data/games/frlg/maps/base/SSAnne_2F_Corridor.json create mode 100644 data/games/frlg/maps/base/SSAnne_CaptainsOffice.json create mode 100644 data/games/frlg/maps/base/SSAnne_Exterior.json create mode 100644 data/games/frlg/maps/base/SafariZone_Center.json create mode 100644 data/games/frlg/maps/base/SafariZone_East.json create mode 100644 data/games/frlg/maps/base/SafariZone_North.json create mode 100644 data/games/frlg/maps/base/SafariZone_SecretHouse.json create mode 100644 data/games/frlg/maps/base/SafariZone_West.json create mode 100644 data/games/frlg/maps/base/SaffronCity.json create mode 100644 data/games/frlg/maps/base/SaffronCity_Connection.json create mode 100644 data/games/frlg/maps/base/SaffronCity_Gym.json create mode 100644 data/games/frlg/maps/base/SaffronCity_Mart.json create mode 100644 data/games/frlg/maps/base/SilphCo_10F.json create mode 100644 data/games/frlg/maps/base/SilphCo_11F.json create mode 100644 data/games/frlg/maps/base/SilphCo_1F.json create mode 100644 data/games/frlg/maps/base/SilphCo_2F.json create mode 100644 data/games/frlg/maps/base/SilphCo_3F.json create mode 100644 data/games/frlg/maps/base/SilphCo_4F.json create mode 100644 data/games/frlg/maps/base/SilphCo_5F.json create mode 100644 data/games/frlg/maps/base/SilphCo_6F.json create mode 100644 data/games/frlg/maps/base/SilphCo_7F.json create mode 100644 data/games/frlg/maps/base/SilphCo_8F.json create mode 100644 data/games/frlg/maps/base/SilphCo_9F.json create mode 100644 data/games/frlg/maps/base/UndergroundPath_EastEntrance.json create mode 100644 data/games/frlg/maps/base/UndergroundPath_EastWestTunnel.json create mode 100644 data/games/frlg/maps/base/UndergroundPath_NorthEntrance.json create mode 100644 data/games/frlg/maps/base/UndergroundPath_NorthSouthTunnel.json create mode 100644 data/games/frlg/maps/base/UndergroundPath_SouthEntrance.json create mode 100644 data/games/frlg/maps/base/UndergroundPath_WestEntrance.json create mode 100644 data/games/frlg/maps/base/VermilionCity.json create mode 100644 data/games/frlg/maps/base/VermilionCity_Gym.json create mode 100644 data/games/frlg/maps/base/VermilionCity_Mart.json create mode 100644 data/games/frlg/maps/base/VermilionCity_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/VermilionCity_PokemonFanClub.json create mode 100644 data/games/frlg/maps/base/VictoryRoad_1F.json create mode 100644 data/games/frlg/maps/base/VictoryRoad_2F.json create mode 100644 data/games/frlg/maps/base/VictoryRoad_3F.json create mode 100644 data/games/frlg/maps/base/ViridianCity.json create mode 100644 data/games/frlg/maps/base/ViridianCity_Gym.json create mode 100644 data/games/frlg/maps/base/ViridianCity_Mart.json create mode 100644 data/games/frlg/maps/base/ViridianCity_PokemonCenter_1F.json create mode 100644 data/games/frlg/maps/base/ViridianForest.json create mode 100644 data/games/frlg/maps/overlays/VermilionCity_Gym.json create mode 100644 schemas/map-overlay.schema.json create mode 100644 src/pokesim/maps/map_overlays.py create mode 100644 src/pokesim/maps/test_map_overlays.py create mode 100644 src/pokesim/maps/testdata/frlg-v1-to-base-delta.json diff --git a/.github/workflows/json-schema.yml b/.github/workflows/json-schema.yml index dc06a6a..9dfeb1f 100644 --- a/.github/workflows/json-schema.yml +++ b/.github/workflows/json-schema.yml @@ -23,7 +23,7 @@ jobs: --out "${{ runner.temp }}/frlg-source-audit.json" - name: Check FRLG map statuses run: PYTHONPATH=src python -m pokesim.maps.frlg_map_set check - # Candidate map bytes are checked exactly by frlg-source-reproduction below. + # Base map bytes are checked exactly by frlg-source-reproduction below. - name: Check the map scope's compact formatting run: >- PYTHONPATH=src python -m pokesim.formats.contract_format --check @@ -44,9 +44,13 @@ jobs: with: path: ~/.cache/pokefirered key: frlg-source-ce6406d8c2eaf46d543c8a2606de0c3cb1951982 - - name: Reproduce all candidate maps from the pinned public source + - name: Reproduce every FRLG base map from the pinned public source run: >- PYTHONPATH=src python -m pokesim.maps.frlg_decomp_map_builder --all --scope data/games/frlg/maps/pokeguy-map-scope.json - --item-identities --out data/games/frlg/maps/runtime + --item-identities --out data/games/frlg/maps/base --manifest data/maps/runtime-manifest.json --check + - name: Check runtime maps are base + overlays + run: PYTHONPATH=src python -m pokesim.maps.map_overlays check + - name: Audit every overlay + run: PYTHONPATH=src python -m pokesim.maps.map_overlays audit --all diff --git a/data/games/frlg/maps/README.md b/data/games/frlg/maps/README.md index 50d015d..7aa4d6e 100644 --- a/data/games/frlg/maps/README.md +++ b/data/games/frlg/maps/README.md @@ -1,20 +1,49 @@ # FRLG map set -One copy of each FRLG map, in `runtime/`. Each map's **status** lives in its -entry in [`data/maps/runtime-manifest.json`](../../../maps/runtime-manifest.json): +Each FRLG map has up to three files (see [OVERLAYS.md](../../../../docs/maps/OVERLAYS.md)): + +| Directory | Content | Owner | +|---|---|---| +| `base/` | The map as generated from `pret/pokefirered@ce6406d8`: every source warp and connection linked by name, water as `w`, elevation grids, spinner/hole/button glyphs. | The generator; `--check` reproduces every file byte for byte. Never edited by hand. | +| `overlays/` | Ordered authored operations over the base (`tile`, `link`, `object`, `trigger`, `point`), each with `why`, `when`, `evidence` and `status` ([schema](../../../../schemas/map-overlay.schema.json)). | Reviewed PRs, one operation per map fix. | +| `runtime/` | The effective map, base + overlays at story state `complete` (every `when` passed), for consumers that do not apply overlays yet. A map without an overlay publishes its base bytes. | Derived by `map_overlays write`; `map_overlays check` fails on any difference. | + +Each map's **status** lives in its entry in +[`data/maps/runtime-manifest.json`](../../../maps/runtime-manifest.json), with +the runtime file's hash and `base` / `overlay` references (file and sha256): | Status | Meaning | Count | |---|---|---:| | `verified` | Reviewed content. `verified.basis` is `approved-runtime-pack` (in the approved pack before this set existed; no per-map run was recorded) or `console-run` (`run`, `date`, `checkpoint`, optional `consumer_revision`). | 57 | -| `candidate` | Generated from `pret/pokefirered@ce6406d8`, unreviewed. Bytes are owned by the generator. | 95 | +| `candidate` | Generated, unreviewed. | 95 | Every entry also records its `source` (pret file and commit), the same object -as the map file's `source`. The status is kept out of the map bytes, so -promoting a map changes only the manifest: map hashes stay the same. +as the runtime file's `source`. The status is kept out of the map bytes, so +promoting a map changes only the manifest. `runtime/` is the directory the published manifest and the Arduino-Source resource pin read (`data/games/frlg/maps/runtime/.json`). "Runtime" names -the published map format, not approval. There is no other FRLG map directory. +the published map format, not approval. + +## Overlays + +There is one overlay today: + +| Map | Operation | why | when | +|---|---|---|---| +| `VermilionCity_Gym` | `tile` (4..6, 6..7) to `.`: the electric beams are off | `story_state` | `FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES`, after checkpoint 00.23 | + +List a map's differences from its base, or see it at a story state: + +```sh +PYTHONPATH=src python3 -m pokesim.maps.map_overlays audit VermilionCity_Gym +PYTHONPATH=src python3 -m pokesim.maps.map_overlays audit --all +PYTHONPATH=src python3 -m pokesim.maps.map_overlays effective VermilionCity_Gym --checkpoint 00.23 +``` + +In Python, `map_overlays.effective_map(name, StoryState(checkpoint=..., flags=...))` +returns base + the operations in effect; `StoryState()` is a new game and +`COMPLETE` is past every `when`. ## Workflow @@ -33,12 +62,14 @@ the published map format, not approval. There is no other FRLG map directory. 3. **Publish the status.** Merge the manifest change to main and bump the consumer lock to that commit (`manifest_sha256` changes; map bytes do not). -A map **fix** is a separate change. It edits the map, updates its manifest -hash/corrections with evidence, and needs the usual review. Do not substitute a -candidate's bytes for a verified map to make a route pass. To regenerate -candidates after a generator change, generate into an empty directory, copy only -`candidate` maps into `runtime/`, then run `frlg_map_set sync-candidates`. -That command rewrites candidate entries from the files and never touches verified ones. +A map **fix** adds one overlay operation with its evidence (the output of +Arduino-Source's map-fix-evidence skill), then runs `map_overlays write`. It +needs the usual review. Never edit `base/` or `runtime/` by hand. + +A **generator change** regenerates every base: generate into an empty +directory, replace `base/` with it, run `map_overlays write` (a stale overlay +operation, one that no longer changes anything, fails here), then +`frlg_map_set sync-candidates` for new maps. ## Scope @@ -76,29 +107,22 @@ PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set check PYTHONPATH=src python3 -m pokesim.maps.runtime_map_pack PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --all \ --scope data/games/frlg/maps/pokeguy-map-scope.json --item-identities \ - --out data/games/frlg/maps/runtime --manifest data/maps/runtime-manifest.json --check + --out data/games/frlg/maps/base --manifest data/maps/runtime-manifest.json --check +PYTHONPATH=src python3 -m pokesim.maps.map_overlays check python3 -m pip install -r schemas/requirements.txt PYTHONPATH=src python3 -m pokesim.maps.frlg_import_audit data/games/frlg/maps/runtime \ --schema --manifest data/maps/runtime-manifest.json \ --scope data/games/frlg/maps/pokeguy-map-scope.json --out /tmp/frlg-import-audit.json ``` -The generator `--check` regenerates the in-scope catalog. It requires every -candidate to match byte for byte and skips verified maps (reviewed content may -legitimately differ from the generator). The pack audit allows exactly two -kinds of unresolved link: - -- **Boundary**: the destination is scope-excluded and absent, so the link is a dead end, never a successful transition (59 warps, 2 connections). -- **Pending relink**: a candidate warps into a verified map that has no return point yet (31 warps). Verified maps were built while their neighbors were absent, so their warps toward candidates carry no destination, and some candidate connections are one-way. Relinking edits reviewed maps and needs approval with evidence. - -Pending relinks by verified map: CeruleanCity (CeruleanCity_House1), -LavenderTown (LavenderTown_Mart, LavenderTown_VolunteerPokemonHouse, -PokemonTower_1F), Route2 (Route2_EastBuilding), Route22 (Route22_NorthEntrance), -Route5 (Route5_SouthEntrance), Route6 (Route6_NorthEntrance), -SSAnne_1F_Corridor (SSAnne_1F_Room6), VermilionCity (VermilionCity_Mart), -ViridianCity (ViridianCity_Gym). One-way connections into verified maps come from -Route21_North, Route12, Route23, Route8, SaffronCity_Connection, Route11 and -SaffronCity. +The generator `--check` regenerates every manifest map's base, verified maps +outside the scope included, and requires each to match byte for byte. The pack +audit allows one kind of unresolved link, a **boundary**: the destination is +scope-excluded and absent, so the link is a dead end, never a successful +transition (100 warps, 2 connections across the set; a link into a scripted +Center or elevator keeps its target name). Since verified maps are generated +bases too, every warp into a map of the set finds its return point: the 31 +pending relinks of #81 are gone. ## Candidate gaps @@ -108,13 +132,17 @@ SaffronCity. | Dynamic warp destinations | 0 | | Pickups without a pinned identity catalog entry | 79 | -84 candidates omit their elevation grid with an `elevation_omitted` reason in -`source`. Every relevant walkable cell is then default ground (3). 11 keep their -grids (bridges, stairs, multi-level terrain). Glyphs beyond the original set are +70 candidates omit their elevation grid with an `elevation_omitted` reason in +`source`: every walkable cell is then default ground (3). 25 keep their grids +(water, bridges, stairs, multi-level terrain). A map with water always keeps +its grid: a missing grid reads as ground everywhere, and water's level is what +stops a walking player in Arduino's FRLG walker. Glyphs beyond the original set are documented in [tile-legend.json](tile-legend.json): spin tiles `u d l r o` (RocketHideout_B2F/B3F, ViridianCity_Gym), holes `H` (PokemonMansion_3F, VictoryRoad_3F) and Strength buttons `B` (VictoryRoad_1F/2F/3F). Arduino's native decoder needs those glyphs before those maps join its map list. +A collision-free `MB_COUNTER` (PewterCity_Museum_1F (11, 5)) is floor: the +counter only lets the player talk across it. NPCs and pickups keep source event, script and optional local-ID provenance. `source_event` is a zero-based source array index, not an in-game object ID. diff --git a/data/games/frlg/maps/base/CeladonCity.json b/data/games/frlg/maps/base/CeladonCity.json new file mode 100644 index 0000000..7bb61a0 --- /dev/null +++ b/data/games/frlg/maps/base/CeladonCity.json @@ -0,0 +1,207 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeladonCity", + "source": { + "decomp_file": "data/maps/CeladonCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "############################################################", + "############################################################", + "####....................................................####", + "####....................................................####", + "####.....................####...######..##############..####", + "#########.........####################..##############..####", + "#########################..#######..................##..####", + "#########################..#######..................##..####", + "#########################..########################.##..####", + "#########################..########################.##..####", + "#########################..########################.########", + "#########################.S###D###############SSD##.########", + "####.....#########..........................................", + "####.....#########..........................................", + "####.....##D###D##S.........................................", + "####........................................................", + "####.............................S..................########", + "####...................##################...........########", + "####..................S##################...################", + "####........###........#......###########...################", + "####........###........#......#########D#...##########..####", + "####...................#wwwwww####D####.#...##########..####", + ".......................#wwwwww#.........................####", + ".......................#wwwwww###S####S##...#S########..####", + "....................................................##..####", + "########............................................##..####", + "########........####............######################..####", + "########################........######################..####", + "########################........######################..####", + "########################........#####D###D#######D####..####", + "####......#D#.......####................................####", + "####............S...####................................####", + "####................####................................####", + "####vvvvvv..vvvvvvvv####................................####", + "####................####################.##########.....####", + "####....................################.##########.....####", + "####......................................##..........######", + "####......................................##################", + "############################################################", + "############################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000", + "000033333333333333333333333333333333333333333333333333330000", + "000033333333333333333333333333333333333333333333333333330000", + "000033333333333333333333300003330000003300000000000000330000", + "000000000333333333000000000000000000003300000000000000330000", + "000000000000000000000000033000000033333333333333333300330000", + "000000000000000000000000033000000033333333333333333300330000", + "000000000000000000000000033000000000000000000000000300330000", + "000000000000000000000000033000000000000000000000000300330000", + "000000000000000000000000033000000000000000000000000300000000", + "000000000000000000000000030000000000000000000000000300000000", + "000033333000000000333333333333333333333333333333333333333333", + "000033333000000000333333333333333333333333333333333333333333", + "000033333000000000033333333333333333333333333333333333333333", + "000033333333333333333333333333333333333333333333333333333333", + "000033333333333333333333333333333033333333333333333300000000", + "000033333333333333333330000000000000000003333333333300000000", + "000033333333333333333300000000000000000003330000000000000000", + "000033333333000333333330333333000000000003330000000000000000", + "000033333333000333333330333333000000000003330000000000330000", + "000033333333333333333330111111000000000303330000000000330000", + "333333333333333333333330111111033333333333333333333333330000", + "333333333333333333333330111111000000000003330000000000330000", + "333333333333333333333333333333333333333333333333333300330000", + "000000003333333333333333333333333333333333333333333300330000", + "000000003333333300003333333333330000000000000000000000330000", + "000000000000000000000000333333330000000000000000000000330000", + "000000000000000000000000333333330000000000000000000000330000", + "000000000000000000000000333333330000000000000000000000330000", + "000033333300033333330000333333333333333333333333333333330000", + "000033333333333303330000333333333333333333333333333333330000", + "000033333333333333330000333333333333333333333333333333330000", + "000000000033000000000000333333333333333333333333333333330000", + "000033333333333333330000000000000000000030000000000333330000", + "000033333333333333333333000000000000000030000000000333330000", + "000033333333333333333333333333333333333333003333333333000000", + "000033333333333333333333333333333333333333000000000000000000", + "000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000" + ], + "points": { + "warp_0": [34, 21], + "warp_1": [11, 14], + "warp_2": [15, 14], + "warp_3": [30, 11], + "warp_4": [48, 11], + "warp_5": [39, 20], + "warp_6": [11, 30], + "warp_7": [37, 29], + "warp_8": [41, 29], + "warp_9": [49, 29], + "warp_11": [30, 4] + }, + "warps": [ + {"coord": [34, 21], "enter": "walk_into", "to_map": "CeladonCity_GameCorner", "to_point": "warp_0"}, + {"coord": [11, 14], "enter": "walk_into", "to_map": "CeladonCity_DepartmentStore_1F", "to_point": "warp_1"}, + {"coord": [15, 14], "enter": "walk_into", "to_map": "CeladonCity_DepartmentStore_1F", "to_point": "warp_4"}, + {"coord": [30, 11], "enter": "walk_into", "to_map": "CeladonCity_Condominiums_1F", "to_point": "warp_1"}, + {"coord": [48, 11], "enter": "walk_into", "to_map": "CeladonCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [39, 20], "enter": "walk_into", "to_map": "CeladonCity_GameCorner_PrizeRoom", "to_point": "warp_1"}, + {"coord": [11, 30], "enter": "walk_into", "to_map": "CeladonCity_Gym", "to_point": "warp_1"}, + {"coord": [37, 29], "enter": "walk_into", "to_map": "CeladonCity_Restaurant", "to_point": "warp_1"}, + {"coord": [41, 29], "enter": "walk_into", "to_map": "CeladonCity_House1", "to_point": "warp_1"}, + {"coord": [49, 29], "enter": "walk_into", "to_map": "CeladonCity_Hotel", "to_point": "warp_1"}, + {"coord": [29, 5], "enter": "walk_into", "to_map": "CeladonCity_Condominiums_1F", "to_point": "warp_5"}, + {"coord": [30, 4], "enter": "walk_south", "to_map": "CeladonCity_Condominiums_1F", "to_point": "warp_5"}, + {"coord": [31, 5], "enter": "walk_into", "to_map": "CeladonCity_Condominiums_1F", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "Route16", "offset": 10}, + {"side": "east", "to_map": "Route7", "offset": 10} + ], + "npcs": [ + { + "name": "rocket_m", + "coord": [48, 15], + "wander": {"min": [44, 15], "max": [52, 15]}, + "hide_flag": "FLAG_HIDE_CELADON_ROCKETS", + "source_event": 0, + "source_script": "CeladonCity_EventScript_RocketGrunt1" + }, + { + "name": "fat_man", + "coord": [38, 14], + "source_event": 1, + "source_script": "CeladonCity_EventScript_FatMan", + "source_local_id": "LOCALID_CELADON_FAT_MAN" + }, + { + "name": "poliwrath", + "coord": [36, 14], + "source_event": 2, + "source_script": "CeladonCity_EventScript_Poliwrath", + "source_local_id": "LOCALID_CELADON_POLIWRATH" + }, + {"name": "little_girl", "coord": [11, 18], "source_event": 3, "source_script": "CeladonCity_EventScript_LittleGirl"}, + { + "name": "woman_2", + "coord": [18, 22], + "wander": {"min": [16, 17], "max": [20, 27]}, + "source_event": 4, + "source_script": "CeladonCity_EventScript_Woman" + }, + {"name": "old_man_1", "coord": [30, 24], "source_event": 5, "source_script": "CeladonCity_EventScript_OldMan2"}, + { + "name": "old_man_2", + "coord": [26, 19], + "source_event": 6, + "source_script": "CeladonCity_EventScript_SoftboiledTutor" + }, + { + "name": "rocket_m", + "coord": [38, 31], + "wander": {"min": [33, 31], "max": [43, 31]}, + "hide_flag": "FLAG_HIDE_CELADON_ROCKETS", + "source_event": 7, + "source_script": "CeladonCity_EventScript_RocketGrunt2" + }, + {"name": "old_man_1", "coord": [9, 30], "source_event": 8, "source_script": "CeladonCity_EventScript_OldMan1"}, + { + "name": "cut_tree", + "coord": [52, 22], + "hide_flag": "FLAG_TEMP_14", + "source_event": 9, + "source_script": "EventScript_CutTree", + "source_local_id": "LOCALID_CELADON_BORDER_TREE" + }, + { + "name": "cut_tree", + "coord": [40, 35], + "hide_flag": "FLAG_TEMP_13", + "source_event": 10, + "source_script": "EventScript_CutTree" + }, + {"name": "boy", "coord": [25, 10], "source_event": 11, "source_script": "CeladonCity_EventScript_Boy"}, + { + "name": "scientist", + "coord": [47, 24], + "hide_flag": "FLAG_HIDE_CELADON_ROCKETS", + "source_event": 14, + "source_script": "CeladonCity_EventScript_SilphCoScientist" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [5, 3], + "source_event": 13, + "hide_flag": "FLAG_HIDE_CELADON_CITY_ETHER", + "source_script": "CeladonCity_EventScript_ItemEther", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/CeladonCity_Condominiums_1F.json b/data/games/frlg/maps/base/CeladonCity_Condominiums_1F.json new file mode 100644 index 0000000..3afc216 --- /dev/null +++ b/data/games/frlg/maps/base/CeladonCity_Condominiums_1F.json @@ -0,0 +1,72 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeladonCity_Condominiums_1F", + "source": { + "decomp_file": "data/maps/CeladonCity_Condominiums_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###############", + "##.############", + ".....####....##", + ".....####....##", + ".......##......", + "#########......", + "##########....#", + "#.#.#..##......", + ".......##......", + ".......###....#", + ".####..##......", + ".####..##......", + ".####..SS#....#", + "...............", + "...............", + "#########.....#", + "#########......", + "#..............", + "...............", + "###############" + ], + "points": {"warp_1": [12, 18], "warp_3": [4, 2], "warp_4": [12, 2], "warp_5": [2, 1]}, + "warps": [ + {"coord": [11, 19], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_3"}, + {"coord": [12, 18], "enter": "walk_south", "to_map": "CeladonCity", "to_point": "warp_3"}, + {"coord": [13, 19], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_3"}, + {"coord": [4, 2], "enter": "walk_east", "to_map": "CeladonCity_Condominiums_2F", "to_point": "warp_0"}, + {"coord": [12, 2], "enter": "walk_east", "to_map": "CeladonCity_Condominiums_2F", "to_point": "warp_3"}, + {"coord": [2, 1], "enter": "cave_entrance", "to_map": "CeladonCity", "to_point": "warp_11"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "meowth", + "coord": [1, 9], + "source_event": 0, + "source_script": "CeladonCity_Condominiums_1F_EventScript_Meowth" + }, + { + "name": "clefairy", + "coord": [5, 13], + "wander": {"min": [4, 13], "max": [6, 13]}, + "source_event": 1, + "source_script": "CeladonCity_Condominiums_1F_EventScript_Clefairy" + }, + { + "name": "nidoran_f", + "coord": [5, 8], + "wander": {"min": [3, 7], "max": [7, 9]}, + "source_event": 2, + "source_script": "CeladonCity_Condominiums_1F_EventScript_Nidoran" + }, + { + "name": "old_woman", + "coord": [2, 9], + "source_event": 3, + "source_script": "CeladonCity_Condominiums_1F_EventScript_TeaWoman" + } + ] +} diff --git a/data/games/frlg/maps/base/CeladonCity_DepartmentStore_1F.json b/data/games/frlg/maps/base/CeladonCity_DepartmentStore_1F.json new file mode 100644 index 0000000..b9a7e8f --- /dev/null +++ b/data/games/frlg/maps/base/CeladonCity_DepartmentStore_1F.json @@ -0,0 +1,50 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeladonCity_DepartmentStore_1F", + "source": { + "decomp_file": "data/maps/CeladonCity_DepartmentStore_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "######D#S####", + "####......###", + "####......###", + "####......###", + "...........##", + ".............", + "#............", + "...#######...", + "...#.....#...", + "...#.....#...", + "...######S...", + ".............", + "#...........#", + ".............", + "#############" + ], + "points": {"warp_1": [2, 14], "warp_4": [10, 14], "warp_7": [4, 2]}, + "warps": [ + {"coord": [1, 15], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_1"}, + {"coord": [2, 14], "enter": "walk_south", "to_map": "CeladonCity", "to_point": "warp_1"}, + {"coord": [3, 15], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_1"}, + {"coord": [9, 15], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_2"}, + {"coord": [10, 14], "enter": "walk_south", "to_map": "CeladonCity", "to_point": "warp_2"}, + {"coord": [11, 15], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_2"}, + {"coord": [6, 1], "enter": "walk_into", "to_map": "CeladonCity_DepartmentStore_Elevator", "to_point": "warp_0"}, + {"coord": [4, 2], "enter": "walk_west", "to_map": "CeladonCity_DepartmentStore_2F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "worker_f", + "coord": [6, 10], + "source_event": 0, + "source_script": "CeladonCity_DepartmentStore_1F_EventScript_Receptionist" + } + ] +} diff --git a/data/games/frlg/maps/base/CeladonCity_DepartmentStore_5F.json b/data/games/frlg/maps/base/CeladonCity_DepartmentStore_5F.json new file mode 100644 index 0000000..81900af --- /dev/null +++ b/data/games/frlg/maps/base/CeladonCity_DepartmentStore_5F.json @@ -0,0 +1,64 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeladonCity_DepartmentStore_5F", + "source": { + "decomp_file": "data/maps/CeladonCity_DepartmentStore_5F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "######D#S####", + "###.......###", + "###.......###", + "###.......###", + "..#.......###", + "..#..........", + "..#..........", + "###....##.##.", + ".......##.##.", + ".............", + ".##.##.......", + ".##.##.##.##.", + ".##.##.##.##.", + "#...........#" + ], + "points": {"warp_1": [9, 2], "warp_2": [3, 2]}, + "warps": [ + {"coord": [6, 1], "enter": "walk_into", "to_map": "CeladonCity_DepartmentStore_Elevator", "to_point": "warp_0"}, + {"coord": [9, 2], "enter": "walk_east", "to_map": "CeladonCity_DepartmentStore_4F", "to_point": "warp_2"}, + {"coord": [3, 2], "enter": "walk_west", "to_map": "CeladonCity_DepartmentStore_Roof", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "gentleman", + "coord": [11, 6], + "wander": {"min": [10, 6], "max": [12, 6]}, + "source_event": 0, + "source_script": "CeladonCity_DepartmentStore_5F_EventScript_Gentleman" + }, + { + "name": "sailor", + "coord": [6, 8], + "wander": {"min": [5, 7], "max": [7, 9]}, + "source_event": 1, + "source_script": "CeladonCity_DepartmentStore_5F_EventScript_Sailor" + }, + { + "name": "clerk", + "coord": [1, 7], + "source_event": 2, + "source_script": "CeladonCity_DepartmentStore_5F_EventScript_ClerkXItems" + }, + { + "name": "clerk", + "coord": [1, 6], + "source_event": 3, + "source_script": "CeladonCity_DepartmentStore_5F_EventScript_ClerkVitamins" + } + ] +} diff --git a/data/games/frlg/maps/base/CeladonCity_GameCorner.json b/data/games/frlg/maps/base/CeladonCity_GameCorner.json new file mode 100644 index 0000000..8c38b4e --- /dev/null +++ b/data/games/frlg/maps/base/CeladonCity_GameCorner.json @@ -0,0 +1,102 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeladonCity_GameCorner", + "source": { + "decomp_file": "data/maps/CeladonCity_GameCorner/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "##################", + "##################", + "##.......#......##", + ".#########....####", + "..............####", + "..................", + "#....##....##....#", + "#....##....##....#", + "#....##....##....#", + "#....##....##....#", + "#....##....##....#", + "..................", + "..................", + "#................#", + "##################" + ], + "points": {"warp_0": [9, 13], "warp_3": [15, 2]}, + "warps": [ + {"coord": [9, 13], "enter": "walk_south", "to_map": "CeladonCity", "to_point": "warp_0"}, + {"coord": [10, 13], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_0"}, + {"coord": [11, 13], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_0"}, + {"coord": [15, 2], "enter": "walk_east", "to_map": "RocketHideout_B1F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "worker_f", + "coord": [4, 2], + "source_event": 0, + "source_script": "CeladonCity_GameCorner_EventScript_InfoClerk" + }, + { + "name": "worker_m", + "coord": [6, 2], + "source_event": 1, + "source_script": "CeladonCity_GameCorner_EventScript_CoinsClerk" + }, + { + "name": "balding_man", + "coord": [1, 6], + "source_event": 2, + "source_script": "CeladonCity_GameCorner_EventScript_BaldingMan" + }, + { + "name": "woman_2", + "coord": [1, 8], + "source_event": 3, + "source_script": "CeladonCity_GameCorner_EventScript_Woman1" + }, + {"name": "fisher", "coord": [4, 7], "source_event": 4, "source_script": "CeladonCity_GameCorner_EventScript_Fisher"}, + { + "name": "gym_guy", + "coord": [7, 10], + "source_event": 5, + "source_script": "CeladonCity_GameCorner_EventScript_GymGuy" + }, + { + "name": "woman_1", + "coord": [7, 8], + "source_event": 6, + "source_script": "CeladonCity_GameCorner_EventScript_Woman2" + }, + { + "name": "old_man_2", + "coord": [10, 9], + "source_event": 7, + "source_script": "CeladonCity_GameCorner_EventScript_OldMan" + }, + { + "name": "scientist", + "coord": [13, 7], + "source_event": 8, + "source_script": "CeladonCity_GameCorner_EventScript_Scientist" + }, + { + "name": "gentleman", + "coord": [16, 10], + "source_event": 9, + "source_script": "CeladonCity_GameCorner_EventScript_Gentleman" + }, + { + "name": "rocket_m", + "coord": [11, 2], + "hide_flag": "FLAG_HIDE_GAME_CORNER_ROCKET", + "source_event": 10, + "source_script": "CeladonCity_GameCorner_EventScript_RocketGrunt", + "source_local_id": "LOCALID_GAME_CORNER_GRUNT" + } + ] +} diff --git a/data/games/frlg/maps/base/CeladonCity_Gym.json b/data/games/frlg/maps/base/CeladonCity_Gym.json new file mode 100644 index 0000000..ca39cb5 --- /dev/null +++ b/data/games/frlg/maps/base/CeladonCity_Gym.json @@ -0,0 +1,121 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeladonCity_Gym", + "source": { + "decomp_file": "data/maps/CeladonCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "######.######", + "#############", + "#...........#", + "#..#######..#", + "##.##....#.##", + "#........#..#", + "#..#........#", + "#..#.....#..#", + "#..###.###..#", + "#..##...##..#", + "#..........##", + "##..........#", + "#...........#", + "#..##...##..#", + "#..##...##..#", + "#...........#", + "#...S...S...#", + "#...........#", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 18]}, + "warps": [ + {"coord": [5, 18], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_6"}, + {"coord": [6, 18], "enter": "walk_south", "to_map": "CeladonCity", "to_point": "warp_6"}, + {"coord": [7, 18], "enter": "walk_into", "to_map": "CeladonCity", "to_point": "warp_6"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "lass", + "coord": [3, 11], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "CeladonCity_Gym_EventScript_Kay" + }, + { + "name": "beauty", + "coord": [9, 10], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "CeladonCity_Gym_EventScript_Bridget" + }, + { + "name": "picnicker", + "coord": [10, 7], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "CeladonCity_Gym_EventScript_Tina" + }, + { + "name": "beauty", + "coord": [2, 6], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 3, + "source_script": "CeladonCity_Gym_EventScript_Tamia" + }, + { + "name": "beauty", + "coord": [5, 4], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "CeladonCity_Gym_EventScript_Lori" + }, + { + "name": "lass", + "coord": [7, 4], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "CeladonCity_Gym_EventScript_Lisa" + }, + {"name": "erika", "coord": [6, 4], "source_event": 6, "source_script": "CeladonCity_Gym_EventScript_Erika"}, + { + "name": "cooltrainer_f", + "coord": [8, 7], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 7, + "source_script": "CeladonCity_Gym_EventScript_Mary" + }, + { + "name": "cut_tree", + "coord": [6, 8], + "hide_flag": "FLAG_TEMP_12", + "source_event": 8, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [3, 5], + "hide_flag": "FLAG_TEMP_13", + "source_event": 9, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [9, 6], + "hide_flag": "FLAG_TEMP_14", + "source_event": 10, + "source_script": "EventScript_CutTree" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCave_1F.json b/data/games/frlg/maps/base/CeruleanCave_1F.json new file mode 100644 index 0000000..f466808 --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCave_1F.json @@ -0,0 +1,164 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCave_1F", + "source": { + "decomp_file": "data/maps/CeruleanCave_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_1F/map.json", + "events_sha256": "42a7d49479544125aa08209126948e3f57ff6040a2f6c1b5289e498de39d4e5c", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################################", + "#######~~~##~#########wwwwwwwww#~~##~~##", + "#######~~~.~~#########wwwwwwwww#~~.~~~##", + "#######~~##~~#wwwwwwwwwwwwwwwww#~~~~~~##", + "##.####~~##~~#wwwwwwwwww#~~~#ww##.######", + "##~#~~~~~~~~~#wwwwwwwwww#~~~#wwwwwwwwww#", + "#~~#~~~~##~~~#www#~~~~~~~~~~#wwwwwwwwww#", + "#.~#~~~~##~~~#www#~~~~~~~~~~#wwwwwwwwww#", + "#~~#~~~~##~~~#www#~~~~~~~~~~~~~~~~~#www#", + "####~~~~##.###www#~~~######~~~#~~~~#www#", + "##~#~~~~#www##www#~~~##~####~~.~~~~#www#", + "##~~~~~~#www##www##.###~.~##~~~~~~~#www#", + "##~~~~~~#wwwwwwww#~~~~#~~~##~~~#####www#", + "##~~~~~~#wwwwwwww#~~#~##.###~~~###~~~~~#", + "##~~##~~#wwwwwwww#~~~~~~~~~#~~~#~~~~~~~#", + "##~~#.~~#www#~~~~##~~~~~~###~~~#~~~~~###", + "##~~~~~~#~~~#~~~~####~~~####~~~#~~~#####", + "##~~~~~~#~~~#~~~~~~~~~~~~~~~~~~#~~~#####", + "#####.###~~~##.#~~~~~~~~~~~~~~~#~~~#####", + "#####~~~~~~~~~~#~~~~~~~~~~~~~~~#~~~#####", + "#####~~~~~~~~~~#~~~~~~~~~~~~~~~#~~~#####", + "#####~~~~~~~~~~#################~.~#####", + "########################################" + ], + "elevation": [ + "0000000000000000000000000000000000000000", + "0000000333003000000000111111111033003300", + "0000000333333000000000111111111033333300", + "0000000330033011111111111111111033333300", + "0030000330033011111111110444011003000000", + "0030333333333011111111110444011111111110", + "0330333300333011104444444444011111111110", + "0330333300333011104444444444011111111110", + "0330333300333011104444444444444444401110", + "0000333300300011104440000004440444401110", + "0030333301110011104440030000444444401110", + "0033333301110011100000033300444444401110", + "0033333301111111103333033300444000001110", + "0033333301111111103303003000444000333330", + "0033003301111111103333333330444033333330", + "0033033301110444400333333000444033333000", + "0033333303330444400003330000444033300000", + "0033333303330444444444444444444033300000", + "0000030003330000444444444444444033300000", + "0000033333333330444444444444444033300000", + "0000033333333330444444444444444033300000", + "0000033333333330000000000000000033300000", + "0000000000000000000000000000000000000000" + ], + "points": { + "entrance": [33, 21], + "warp_0": [33, 21], + "warp_1": [34, 2], + "warp_2": [1, 7], + "warp_3": [10, 2], + "warp_4": [5, 15], + "warp_5": [30, 10], + "warp_6": [24, 11], + "warp_7": [2, 4] + }, + "warps": [ + {"coord": [33, 21], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_7"}, + {"coord": [34, 2], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_0"}, + {"coord": [1, 7], "enter": "step_on", "to_map": "CeruleanCave_B1F", "to_point": "warp_0"}, + {"coord": [10, 2], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_1"}, + {"coord": [5, 15], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_2"}, + {"coord": [30, 10], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_3"}, + {"coord": [24, 11], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_4"}, + {"coord": [2, 4], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rock_smash_rock", + "coord": [7, 21], + "hide_flag": "FLAG_TEMP_12", + "source_event": 3, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [13, 21], + "hide_flag": "FLAG_TEMP_13", + "source_event": 4, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [5, 20], + "hide_flag": "FLAG_TEMP_14", + "source_event": 5, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [14, 20], + "hide_flag": "FLAG_TEMP_15", + "source_event": 6, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [11, 21], + "hide_flag": "FLAG_TEMP_16", + "source_event": 7, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [9, 18], + "hide_flag": "FLAG_TEMP_17", + "source_event": 8, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [7, 3], + "source_event": 0, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_NUGGET", + "source_script": "CeruleanCave_1F_EventScript_ItemNugget", + "item": "nugget" + }, + { + "name": "item_ball", + "coord": [11, 16], + "source_event": 1, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_FULL_RESTORE", + "source_script": "CeruleanCave_1F_EventScript_ItemFullRestore", + "item": "full_restore" + }, + { + "name": "item_ball", + "coord": [25, 5], + "source_event": 2, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_MAX_ELIXIR", + "source_script": "CeruleanCave_1F_EventScript_ItemMaxElixir", + "item": "max_elixir" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCave_2F.json b/data/games/frlg/maps/base/CeruleanCave_2F.json new file mode 100644 index 0000000..3868eb6 --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCave_2F.json @@ -0,0 +1,163 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCave_2F", + "source": { + "decomp_file": "data/maps/CeruleanCave_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_2F/map.json", + "events_sha256": "2c6e7f32daefb68be4a39c7219682c3bb7b8c8ddb079db21226de4afa556f6ae", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################################", + "########################################", + "########################################", + "####~~~~####~~##~~~~~#~~~~~~~~~~~~######", + "#######~~~~~~.#~~###~#~#########~.######", + "####~~####~####~##~#~#~~~~~~~~~#########", + "####~.~~~#~~~~~~~~~###########~~~~######", + "#######~############~~~~~~~~~####~######", + "####~#~~~~~~~~~~~~~~~#######~~~~#~######", + "####~#################~~#~.###~##~######", + "####~#~~~~#~~~~~~~~~~~~.#~~~#~~~#~######", + "####~#~##~#~#####~#######~#####~#~######", + "####~#~~#~#~~~~~#~~~~~~~#~~~~~#~#~######", + "####~#~~#~#####~#######~#####~#~########", + "####~#~.#~#~~~~~#~~~~~#~~~~~#~#~#~######", + "####~####~#~#####~###~#~#~#~#~#~#~######", + "####~#~~~~#~~~~~~~~~#~#~#~#~#~#~#~######", + "####~#~####~#########~#~#~#~###~#~######", + "####~#~~~~#~~~~~#~~~~~#~#~#~~~~~#~######", + "####~############~#####~#~#######~######", + "####~~~~~~~~~~~~~~#~~~~~#~~~~~~~~~######", + "########################################", + "########################################" + ], + "points": { + "warp_0": [33, 4], + "warp_1": [13, 4], + "warp_2": [7, 14], + "warp_3": [26, 9], + "warp_4": [23, 10], + "warp_5": [5, 6] + }, + "warps": [ + {"coord": [33, 4], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_1"}, + {"coord": [13, 4], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_3"}, + {"coord": [7, 14], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_4"}, + {"coord": [26, 9], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_5"}, + {"coord": [23, 10], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_6"}, + {"coord": [5, 6], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_7"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rock_smash_rock", + "coord": [33, 10], + "hide_flag": "FLAG_TEMP_12", + "source_event": 3, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [33, 9], + "hide_flag": "FLAG_TEMP_13", + "source_event": 4, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [25, 11], + "hide_flag": "FLAG_TEMP_14", + "source_event": 5, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [28, 20], + "hide_flag": "FLAG_TEMP_15", + "source_event": 6, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [30, 20], + "hide_flag": "FLAG_TEMP_16", + "source_event": 7, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [9, 13], + "hide_flag": "FLAG_TEMP_17", + "source_event": 8, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [23, 16], + "hide_flag": "FLAG_TEMP_18", + "source_event": 9, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [13, 6], + "hide_flag": "FLAG_TEMP_19", + "source_event": 10, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [4, 12], + "hide_flag": "FLAG_TEMP_1A", + "source_event": 11, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [10, 20], + "hide_flag": "FLAG_TEMP_1B", + "source_event": 12, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [9, 18], + "source_event": 0, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_PP_UP", + "source_script": "CeruleanCave_2F_EventScript_ItemPPUp", + "item": "pp_up" + }, + { + "name": "item_ball", + "coord": [29, 16], + "source_event": 1, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_ULTRA_BALL", + "source_script": "CeruleanCave_2F_EventScript_ItemUltraBall", + "item": "ultra_ball" + }, + { + "name": "item_ball", + "coord": [33, 12], + "source_event": 2, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_FULL_RESTORE", + "source_script": "CeruleanCave_2F_EventScript_ItemFullRestore", + "item": "full_restore" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCave_B1F.json b/data/games/frlg/maps/base/CeruleanCave_B1F.json new file mode 100644 index 0000000..c1165ae --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCave_B1F.json @@ -0,0 +1,165 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCave_B1F", + "source": { + "decomp_file": "data/maps/CeruleanCave_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_B1F/map.json", + "events_sha256": "771c69cd177d040c0048fc9a4729525141d1844e18460448d48e1a1af405986a", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################################", + "##~~~~~~~~~~~~~~##~~~~~############~~~~#", + "##~~~~~~~~~~~~~~#~~~~~~~~#######~~~~~~~#", + "##~~~~~~~~~~~~~~#~~####~~~~~#######~~~~#", + "##~~~~~~#####.###~~####~~~~~#######~~~~#", + "##~~~~~~#~~~~~~~~~~########~#######~#~~#", + "##~~##~~##~~~~~~~~#########~~~~~~~~~~~~#", + "##~~#.~~###~~~~~~##########~~~~~~~~~~~~#", + "##~~~~~~#wwwww##~~~~~~~~~~~~~~~~#~~~####", + "#########wwwww##~~~~~~~~~~~~~~~~#~~~####", + "#www############~~~~~~~~~~~~~~~~#~~~####", + "#www##############.########~###~#~~~####", + "#www#~#~#~########~~~~~~~~#~###~#~~~####", + "#www#~~~~~########~~~~~~~~#~~~~~#~~~####", + "#www#~~~~~########~~~~~~~~#~~~~~#~~~####", + "#www###.###wwww#~~~~~~#~~~#~###~#~~~####", + "#wwwwwwwwwwwwww#~~~~~~#~~~#~###~#~~~####", + "#wwwwwwwwwwwwww#~~~~~~#~~~#~~~~~#~~~####", + "#wwwwwwwwwwwwww#~~~~~~#~~~#~~~~~#~~~####", + "######wwwwwwwww##.##.##~~~###.###~~~####", + "######wwwwwwwwwwww#~~~~~~~###~~~~~~~####", + "######wwwwwwwwwwww##~~~~~####~~~~~~~####", + "########################################" + ], + "elevation": [ + "0000000000000000000000000000000000000000", + "0033333333333333003333300000000000033330", + "0033333333333333033333333000000033333330", + "0033333333333333033000033333000000033330", + "0033333300000300033000033333000000033330", + "0033333303333333333000000003000000030330", + "0033003300333333330000000003333333333330", + "0033033300033333300000000003333333333330", + "0033333301111100444444444444444403330000", + "0000000001111100444444444444444403330000", + "0111000000000000444444444444444403330000", + "0111000000000000000000000004000403330000", + "0111030303000000003333333304000403330000", + "0111033333000000003333333304444403330000", + "0111033333000000003333333304444403330000", + "0111000300011110444444033304000403330000", + "0111111111111110444444033304000403330000", + "0111111111111110444444033304444403330000", + "0111111111111110404444033304444403330000", + "0000001111111110030000033300000003330000", + "0000001111111111110333333300033333330000", + "0000001111111111110033333000033333330000", + "0000000000000000000000000000000000000000" + ], + "points": {"mewtwo": [7, 12], "warp_0": [5, 7]}, + "warps": [{"coord": [5, 7], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_2"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "mewtwo", + "coord": [7, 12], + "hide_flag": "FLAG_HIDE_MEWTWO", + "source_event": 2, + "source_script": "CeruleanCave_B1F_EventScript_Mewtwo" + }, + { + "name": "rock_smash_rock", + "coord": [37, 1], + "hide_flag": "FLAG_TEMP_12", + "source_event": 3, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [38, 2], + "hide_flag": "FLAG_TEMP_13", + "source_event": 4, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [35, 1], + "hide_flag": "FLAG_TEMP_14", + "source_event": 5, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [37, 4], + "hide_flag": "FLAG_TEMP_15", + "source_event": 6, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [35, 5], + "hide_flag": "FLAG_TEMP_16", + "source_event": 7, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [2, 2], + "hide_flag": "FLAG_TEMP_17", + "source_event": 8, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [4, 1], + "hide_flag": "FLAG_TEMP_18", + "source_event": 9, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [6, 1], + "hide_flag": "FLAG_TEMP_19", + "source_event": 10, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [3, 4], + "hide_flag": "FLAG_TEMP_1A", + "source_event": 11, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [31, 9], + "source_event": 0, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_ULTRA_BALL", + "source_script": "CeruleanCave_B1F_EventScript_ItemUltraBall", + "item": "ultra_ball" + }, + { + "name": "item_ball", + "coord": [32, 2], + "source_event": 1, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_MAX_REVIVE", + "source_script": "CeruleanCave_B1F_EventScript_ItemMaxRevive", + "item": "max_revive" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCity.json b/data/games/frlg/maps/base/CeruleanCity.json new file mode 100644 index 0000000..0e90360 --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCity.json @@ -0,0 +1,208 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity", + "source": { + "decomp_file": "data/maps/CeruleanCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "################wwwww#...#...#wwwwwwwwwwwwwwwwww", + "################wwwww#...#vvv#wwwwwwwwwwwwwwwwww", + "####wwwwwwwwwwwwwwwww#...#...#wwwwwwwwwwwwwwwwww", + "####wwwwwwwwwwwwwwwww#...#...#wwwwwwwwwwwwwwwwww", + "####wwwwwwwwwwwwwwwww#...#...###################", + "####www###############...#...#.........#########", + "####www#.............#...#...#.........#########", + "####www#.............#...#...#.........#########", + "####www##...##########.......#...##...##########", + "####www###############......#######...##########", + "####www###############......#######...##########", + "####www###D######D####......##D####......#######", + "#.##www#..........................#......#######", + "....www#..........................#......#######", + "....www#..........................#......#######", + "....www#.....#######..............#......#######", + "wwwwwww#...vv############.........#......#......", + "wwwwwww#.....##D#########.........#......#######", + "wwwwwww#............#####vvv#######.............", + "########............SSD##...#######.............", + "............................#######vvv#..#######", + "...........................S..#D#.....#..#......", + "......................................#..#######", + "#######...............................#..#######", + "#######.....####......................#..#######", + "#######....#####....S.................#..#######", + "#######....#####.....###############..#..#######", + "#######....#####.....###############..#..#######", + "#######....S#..#.....##D###SSD######..#..#######", + "#######...............................#..#######", + "#######...............................#..#######", + "#######...............................#..#######", + "###################S######.############..#######", + "#######..................................#######", + "#######..................................#######", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#........#....###############" + ], + "elevation": [ + "000000000000000011111033303330100000000000000000", + "000000000000000011111033300000100000000000000000", + "000011111111111111111033303330100000000000000000", + "000011111111111111111033303330111111111111111111", + "000011111111111111111033303330000000000000000000", + "000011100000000000000033303330333333333000000000", + "000011103333333333333033303330333333333000000000", + "000011103333333333333033303330333333333000000000", + "000011100333000000000033333330333003330000000000", + "000011100000000000000033333300000003330000000000", + "000011100000000000000033333300000003330000000000", + "000011100000000000000033333300000003333330000000", + "030011103333333333333333333333333303333330000000", + "333311103333333333333333333333333303333330000000", + "333311103333333333333333333333333303333330000000", + "333311103333300000003333333333333303333330000000", + "111111103330000000000000033333333303333330333333", + "111111103333300000000000033333333303333330000000", + "111111103333333333330000000000000003333333333333", + "000000003333333333330000033300000003333333333333", + "333333333333333333333333333300000000000330000000", + "333333333333333333333333333033000333330330333333", + "333333333333333333333333333333333333330330000000", + "000000033333333333333333333333333333330330000000", + "000000033333000033333333333333333333330330000000", + "000000033330000033330333333333333333330330000000", + "000000033330000033333000000000000000330330000000", + "000000033330000033333000000000000000330330000000", + "000000033330033033333000000000000000330330000000", + "000000033333333333333333333333333333330330000000", + "000000033333333333333333333333333333330330000000", + "000000033333333333333333333333333333330330000000", + "000000000000000000000000003000000000000330000000", + "000000033333333333333333333333333333333330000000", + "000000033333333333333333333333333333333330000000", + "000000000000000333303333333303333000000000000000", + "000000000000000333300000000003333000000000000000", + "000000000000000333303333333303333000000000000000", + "000000000000000333303333333303333000000000000000", + "000000000000000333303333333303333000000000000000" + ], + "points": { + "warp_0": [10, 11], + "warp_1": [30, 11], + "warp_2": [15, 17], + "warp_3": [22, 19], + "warp_4": [31, 21], + "warp_5": [13, 28], + "warp_6": [29, 28], + "warp_7": [1, 12], + "warp_8": [10, 8], + "warp_9": [31, 8], + "warp_12": [23, 28], + "warp_13": [17, 11] + }, + "warps": [ + {"coord": [10, 11], "enter": "walk_into", "to_map": "CeruleanCity_House1", "to_point": "warp_1"}, + {"coord": [30, 11], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_1"}, + {"coord": [15, 17], "enter": "walk_into", "to_map": "CeruleanCity_House3", "to_point": "warp_1"}, + {"coord": [22, 19], "enter": "walk_into", "to_map": "CeruleanCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [31, 21], "enter": "walk_into", "to_map": "CeruleanCity_Gym", "to_point": "warp_1"}, + {"coord": [13, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, + {"coord": [29, 28], "enter": "walk_into", "to_map": "CeruleanCity_Mart", "to_point": "warp_1"}, + {"coord": [1, 12], "enter": "cave_entrance", "to_map": "CeruleanCave_1F", "to_point": "warp_0"}, + {"coord": [10, 8], "enter": "walk_south", "to_map": "CeruleanCity_House1", "to_point": "warp_3"}, + {"coord": [31, 8], "enter": "walk_south", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, + {"coord": [31, 9], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, + {"coord": [14, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, + {"coord": [23, 28], "enter": "walk_into", "to_map": "CeruleanCity_House4", "to_point": "warp_0"}, + {"coord": [17, 11], "enter": "walk_into", "to_map": "CeruleanCity_House5", "to_point": "warp_0"} + ], + "flag_sets": { + "after_hall_of_fame": ["FLAG_HIDE_CERULEAN_CAVE_GUARD", "FLAG_HIDE_CERULEAN_RIVAL", "FLAG_HIDE_CERULEAN_ROCKET"] + }, + "connections": [ + {"side": "north", "to_map": "Route24", "offset": 12}, + {"side": "south", "to_map": "Route5", "offset": 0}, + {"side": "west", "to_map": "Route4", "offset": 10}, + {"side": "east", "to_map": "Route9", "offset": 10} + ], + "npcs": [ + { + "name": "policeman", + "coord": [31, 12], + "source_event": 0, + "source_script": "CeruleanCity_EventScript_Policeman", + "source_local_id": "LOCALID_CERULEAN_POLICEMAN" + }, + { + "name": "rocket_m", + "coord": [33, 6], + "hide_flag": "FLAG_HIDE_CERULEAN_ROCKET", + "source_event": 1, + "source_script": "CeruleanCity_EventScript_Grunt", + "source_local_id": "LOCALID_CERULEAN_GRUNT" + }, + { + "name": "little_boy", + "coord": [16, 21], + "wander": {"min": [16, 18], "max": [16, 24]}, + "source_event": 2, + "source_script": "CeruleanCity_EventScript_LittleBoy" + }, + { + "name": "balding_man", + "coord": [9, 23], + "wander": {"min": [8, 22], "max": [10, 24]}, + "source_event": 3, + "source_script": "CeruleanCity_EventScript_BaldingMan" + }, + { + "name": "slowbro", + "coord": [32, 29], + "source_event": 4, + "source_script": "CeruleanCity_EventScript_Slowbro", + "source_local_id": "LOCALID_CERULEAN_SLOWBRO" + }, + { + "name": "lass", + "coord": [33, 29], + "source_event": 5, + "source_script": "CeruleanCity_EventScript_Lass", + "source_local_id": "LOCALID_CERULEAN_LASS" + }, + {"name": "youngster", "coord": [34, 22], "source_event": 6, "source_script": "CeruleanCity_EventScript_Youngster"}, + { + "name": "blue", + "coord": [22, 0], + "hide_flag": "FLAG_HIDE_CERULEAN_RIVAL", + "source_event": 7, + "source_script": "0x0", + "source_local_id": "LOCALID_CERULEAN_RIVAL" + }, + { + "name": "cut_tree", + "coord": [26, 32], + "hide_flag": "FLAG_TEMP_13", + "source_event": 8, + "source_script": "EventScript_CutTree" + }, + { + "name": "woman_1", + "coord": [12, 30], + "source_event": 10, + "source_script": "CeruleanCity_EventScript_Woman", + "source_local_id": "LOCALID_CERULEAN_WOMAN" + }, + { + "name": "cooltrainer_m", + "coord": [1, 13], + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_GUARD", + "source_event": 11, + "source_script": "CeruleanCity_EventScript_CeruleanCaveGuard", + "source_local_id": "LOCALID_CERULEAN_CAVE_GUARD" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCity_BikeShop.json b/data/games/frlg/maps/base/CeruleanCity_BikeShop.json new file mode 100644 index 0000000..0d4d239 --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCity_BikeShop.json @@ -0,0 +1,42 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_BikeShop", + "source": { + "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + ".####...#..", + "..#.##..#..", + ".#..#...###", + "..#.#.....#", + "........#..", + "..#........", + "..#......#.", + "###########" + ], + "points": {"warp_1": [5, 8]}, + "warps": [ + {"coord": [4, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"}, + {"coord": [5, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_5"}, + {"coord": [6, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "man", "coord": [9, 3], "source_event": 0, "source_script": "CeruleanCity_BikeShop_EventScript_Clerk"}, + { + "name": "youngster", + "coord": [9, 7], + "wander": {"min": [8, 6], "max": [10, 8]}, + "source_event": 1, + "source_script": "CeruleanCity_BikeShop_EventScript_Youngster" + }, + {"name": "woman_2", "coord": [5, 5], "source_event": 2, "source_script": "CeruleanCity_BikeShop_EventScript_Woman"} + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCity_Gym.json b/data/games/frlg/maps/base/CeruleanCity_Gym.json new file mode 100644 index 0000000..1c1b64e --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCity_Gym.json @@ -0,0 +1,82 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_Gym", + "source": { + "decomp_file": "data/maps/CeruleanCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#################", + "#####w#w.w#w#####", + "#################", + "#...............#", + "#......www......#", + "#.wwwwwwwwwwwww.#", + "#.wwwww...wwwww.#", + "#.ww.........ww.#", + "#.wwwww...ww.ww.#", + "#.wwwwwwwwww.ww.#", + "#.ww.........ww.#", + "#.ww.wwww.wwwww.#", + "#.ww.wwww.wwwww.#", + "#.ww......wwwww.#", + "#.wwwwwww.wwwww.#", + "#.wwwwwww.wwwww.#", + "#.wwww.....wwww.#", + "#.wwwwS...Swwww.#", + "#...............#", + "#################" + ], + "elevation": [ + "00000000000000000", + "00000000000000000", + "00000000000000000", + "03333333333333330", + "03333331113333330", + "03111111111111130", + "03111113331111130", + "03113333333331130", + "03111113331131130", + "03111111111131130", + "03113333333331130", + "03113111131111130", + "03113111130111130", + "03113333331111130", + "03111111131111130", + "03111111131111130", + "03111133333111130", + "03111103330111130", + "03333333333333330", + "00000000000000000" + ], + "points": {"misty_front": [8, 7], "warp_1": [8, 18]}, + "warps": [ + {"coord": [7, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"}, + {"coord": [8, 18], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_4"}, + {"coord": [9, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "swimmer_m_water", + "coord": [10, 12], + "facing": "west", + "trainer": {"sight": 1}, + "source_event": 0, + "source_script": "CeruleanCity_Gym_EventScript_Luis" + }, + { + "name": "picnicker", + "coord": [4, 7], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "CeruleanCity_Gym_EventScript_Diana" + }, + {"name": "misty", "coord": [8, 6], "source_event": 2, "source_script": "CeruleanCity_Gym_EventScript_Misty"}, + {"name": "gym_guy", "coord": [7, 16], "source_event": 3, "source_script": "CeruleanCity_Gym_EventScript_GymGuy"} + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCity_House1.json b/data/games/frlg/maps/base/CeruleanCity_House1.json new file mode 100644 index 0000000..18fb648 --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCity_House1.json @@ -0,0 +1,40 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_House1", + "source": { + "decomp_file": "data/maps/CeruleanCity_House1/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "##########", + "###.######", + "..........", + "..........", + "#.........", + ".......##.", + ".......##.", + "#.........", + "..........", + "##########" + ], + "points": {"warp_1": [3, 8], "warp_3": [3, 1]}, + "warps": [ + {"coord": [2, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_0"}, + {"coord": [3, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_0"}, + {"coord": [4, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_0"}, + {"coord": [3, 1], "enter": "cave_entrance", "to_map": "CeruleanCity", "to_point": "warp_8"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "gentleman", + "coord": [6, 5], + "source_event": 0, + "source_script": "CeruleanCity_House1_EventScript_BadgeGuy" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCity_House2.json b/data/games/frlg/maps/base/CeruleanCity_House2.json new file mode 100644 index 0000000..43b29c9 --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCity_House2.json @@ -0,0 +1,41 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_House2", + "source": { + "decomp_file": "data/maps/CeruleanCity_House2/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "##########", + "####.#####", + "........##", + ".........#", + "...##.....", + "...##.....", + "..........", + "#.......##", + "##########" + ], + "points": {"warp_1": [3, 7], "warp_3": [4, 1]}, + "warps": [ + {"coord": [2, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, + {"coord": [3, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_1"}, + {"coord": [4, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, + {"coord": [4, 1], "enter": "cave_entrance", "to_map": "CeruleanCity", "to_point": "warp_9"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "hiker", "coord": [1, 2], "source_event": 0, "source_script": "CeruleanCity_House2_EventScript_Hiker"}, + { + "name": "lass", + "coord": [7, 6], + "wander": {"min": [6, 5], "max": [8, 7]}, + "source_event": 1, + "source_script": "CeruleanCity_House2_EventScript_Lass" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCity_Mart.json b/data/games/frlg/maps/base/CeruleanCity_Mart.json new file mode 100644 index 0000000..66b432d --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCity_Mart.json @@ -0,0 +1,46 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_Mart", + "source": { + "decomp_file": "data/maps/CeruleanCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"clerk_front": [4, 3], "warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_6"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "CeruleanCity_Mart_EventScript_Clerk"}, + { + "name": "woman_1", + "coord": [9, 2], + "wander": {"min": [5, 2], "max": [10, 2]}, + "source_event": 1, + "source_script": "CeruleanCity_Mart_EventScript_Woman" + }, + { + "name": "youngster", + "coord": [1, 7], + "source_event": 2, + "source_script": "CeruleanCity_Mart_EventScript_Youngster" + } + ] +} diff --git a/data/games/frlg/maps/base/CeruleanCity_PokemonCenter_1F.json b/data/games/frlg/maps/base/CeruleanCity_PokemonCenter_1F.json new file mode 100644 index 0000000..3947a92 --- /dev/null +++ b/data/games/frlg/maps/base/CeruleanCity_PokemonCenter_1F.json @@ -0,0 +1,92 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/CeruleanCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"pc": [11, 2], "nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_3"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_3"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_3"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "CeruleanCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_CERULEAN_NURSE" + }, + { + "name": "gentleman", + "coord": [12, 5], + "source_event": 1, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Gentleman" + }, + { + "name": "rocker", + "coord": [5, 4], + "wander": {"min": [4, 4], "max": [6, 4]}, + "source_event": 2, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Rocker" + }, + { + "name": "youngster", + "coord": [4, 8], + "wander": {"min": [3, 8], "max": [5, 8]}, + "source_event": 3, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "lass", + "coord": [3, 3], + "source_event": 4, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Lass" + }, + { + "name": "0", + "coord": [2, 1], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 5, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_PokemonJournalMisty" + }, + { + "name": "0", + "coord": [3, 1], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 6, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_PokemonJournalMisty" + } + ] +} diff --git a/data/games/frlg/maps/base/CinnabarIsland.json b/data/games/frlg/maps/base/CinnabarIsland.json new file mode 100644 index 0000000..6be839f --- /dev/null +++ b/data/games/frlg/maps/base/CinnabarIsland.json @@ -0,0 +1,92 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CinnabarIsland", + "source": { + "decomp_file": "data/maps/CinnabarIsland/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwww#######....w##wwwww", + "wwwww#######.....######w", + "wwwww#######.....######w", + "wwwww###.###S....######w", + "wwwww..............#D##w", + "wwwww.................Sw", + "wwwww..................w", + "wwwww#######...........w", + "wwwww############......w", + "wwwww###DSS##########..w", + "wwwww.......#########..w", + "wwwww.......SSD##SSD#..w", + "wwwwwwww...............w", + "wwwwwwww...............w", + "wwwwwwww...............w", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "001110000000333310011110", + "001110000000333330000001", + "001110000000333330000001", + "001110003000033330000001", + "100113333333333333300001", + "100113333333333333333300", + "100113333333333333333330", + "100110000000333333333331", + "001110000000000003333331", + "001110000000000000000331", + "001113333333000000000331", + "001113333333000000000331", + "100111113333333333333331", + "100111113333333333333331", + "100111113333333333333331", + "000111111111111111111111", + "010011111111111111111111", + "010000001111110000001111", + "001100000000000000000000", + "000000110000001000010000" + ], + "points": {"warp_0": [8, 3], "warp_1": [20, 4], "warp_2": [8, 9], "warp_3": [14, 11], "warp_4": [19, 11]}, + "warps": [ + {"coord": [8, 3], "enter": "cave_entrance", "to_map": "PokemonMansion_1F", "to_point": "warp_1"}, + {"coord": [20, 4], "enter": "walk_into", "to_map": "CinnabarIsland_Gym", "to_point": "warp_1"}, + {"coord": [8, 9], "enter": "walk_into", "to_map": "CinnabarIsland_PokemonLab_Entrance", "to_point": "warp_1"}, + {"coord": [14, 11], "enter": "walk_into", "to_map": "CinnabarIsland_PokemonCenter_1F", "to_point": "warp_0"}, + {"coord": [19, 11], "enter": "walk_into", "to_map": "CinnabarIsland_Mart", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route21_South", "offset": 0}, + {"side": "east", "to_map": "Route20", "offset": 0} + ], + "npcs": [ + { + "name": "woman_2", + "coord": [14, 6], + "wander": {"min": [13, 6], "max": [15, 6]}, + "source_event": 0, + "source_script": "CinnabarIsland_EventScript_Woman" + }, + {"name": "old_man_1", "coord": [11, 11], "source_event": 1, "source_script": "CinnabarIsland_EventScript_OldMan"}, + { + "name": "bill", + "coord": [20, 7], + "hide_flag": "FLAG_HIDE_CINNABAR_BILL", + "source_event": 2, + "source_script": "0x0", + "source_local_id": "LOCALID_CINNABAR_BILL" + }, + { + "name": "seagallop", + "coord": [23, 7], + "hide_flag": "FLAG_HIDE_CINNABAR_SEAGALLOP", + "source_event": 3, + "source_script": "0x0", + "source_local_id": "LOCALID_CINNABAR_SEAGALLOP" + } + ] +} diff --git a/data/games/frlg/maps/base/CinnabarIsland_Gym.json b/data/games/frlg/maps/base/CinnabarIsland_Gym.json new file mode 100644 index 0000000..d1b31f6 --- /dev/null +++ b/data/games/frlg/maps/base/CinnabarIsland_Gym.json @@ -0,0 +1,93 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CinnabarIsland_Gym", + "source": { + "decomp_file": "data/maps/CinnabarIsland_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "#####.########################", + "##############################", + "###.....#####..##............#", + "#.........###................#", + "#.........###................#", + "#.........###........#.......#", + "#.........###........#.......#", + "#.........###........#.......#", + "#####..##########..#######..##", + "##############################", + "###.......#####......###.....#", + "#.........###........#.......#", + "#.........###........#.......#", + "#.........###........#.......#", + "#.........###........#####...#", + "#.........#######..#######...#", + "#####..###############.......#", + "###############......#.......#", + "###.......###........#.......#", + "#.........###........#.......#", + "#.........###........#.S...S.#", + "#.........###........#.......#", + "#..........#.........#.......#", + "#..........#.........#.......#", + "##############################" + ], + "points": {"warp_1": [25, 23]}, + "warps": [ + {"coord": [24, 23], "enter": "walk_into", "to_map": "CinnabarIsland", "to_point": "warp_1"}, + {"coord": [25, 23], "enter": "walk_south", "to_map": "CinnabarIsland", "to_point": "warp_1"}, + {"coord": [26, 23], "enter": "walk_into", "to_map": "CinnabarIsland", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "poke_maniac", + "coord": [25, 11], + "source_event": 0, + "source_script": "CinnabarIsland_Gym_EventScript_Quinn", + "source_local_id": "LOCALID_QUINN" + }, + {"name": "scientist", "coord": [25, 4], "source_event": 1, "source_script": "CinnabarIsland_Gym_EventScript_Erik"}, + { + "name": "scientist", + "coord": [17, 5], + "source_event": 2, + "source_script": "CinnabarIsland_Gym_EventScript_Avery", + "source_local_id": "LOCALID_AVERY" + }, + { + "name": "poke_maniac", + "coord": [16, 11], + "source_event": 3, + "source_script": "CinnabarIsland_Gym_EventScript_Ramon", + "source_local_id": "LOCALID_RAMON" + }, + { + "name": "scientist", + "coord": [16, 18], + "source_event": 4, + "source_script": "CinnabarIsland_Gym_EventScript_Derek", + "source_local_id": "LOCALID_DEREK" + }, + { + "name": "poke_maniac", + "coord": [4, 19], + "source_event": 5, + "source_script": "CinnabarIsland_Gym_EventScript_Dusty", + "source_local_id": "LOCALID_DUSTY" + }, + { + "name": "scientist", + "coord": [4, 11], + "source_event": 6, + "source_script": "CinnabarIsland_Gym_EventScript_Zac", + "source_local_id": "LOCALID_ZAC" + }, + {"name": "blaine", "coord": [5, 4], "source_event": 7, "source_script": "CinnabarIsland_Gym_EventScript_Blaine"}, + {"name": "gym_guy", "coord": [24, 20], "source_event": 8, "source_script": "CinnabarIsland_Gym_EventScript_GymGuy"} + ] +} diff --git a/data/games/frlg/maps/base/CinnabarIsland_Mart.json b/data/games/frlg/maps/base/CinnabarIsland_Mart.json new file mode 100644 index 0000000..1bc4eae --- /dev/null +++ b/data/games/frlg/maps/base/CinnabarIsland_Mart.json @@ -0,0 +1,40 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "CinnabarIsland_Mart", + "source": { + "decomp_file": "data/maps/CinnabarIsland_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "CinnabarIsland", "to_point": "warp_4"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "CinnabarIsland", "to_point": "warp_4"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "CinnabarIsland", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "CinnabarIsland_Mart_EventScript_Clerk"}, + {"name": "woman_2", "coord": [6, 2], "source_event": 1, "source_script": "CinnabarIsland_Mart_EventScript_Woman"}, + { + "name": "scientist", + "coord": [8, 2], + "source_event": 2, + "source_script": "CinnabarIsland_Mart_EventScript_Scientist" + } + ] +} diff --git a/data/games/frlg/maps/base/FuchsiaCity.json b/data/games/frlg/maps/base/FuchsiaCity.json new file mode 100644 index 0000000..db091d9 --- /dev/null +++ b/data/games/frlg/maps/base/FuchsiaCity.json @@ -0,0 +1,213 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "FuchsiaCity", + "source": { + "decomp_file": "data/maps/FuchsiaCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "################################################", + "################################################", + "################################################", + "################################################", + "##########################.#####################", + "##....................##D###..................##", + "##............................................##", + "##...##############..#S...###..#############..##", + "##...#wwwww##.....#............#....##.....#..##", + "##...#wwwww##.....#............#....##.....#..##", + "##...##############....#######.#############..##", + "##....................#.......................##", + "##....................#.......................##", + "##.......############.#...######.#########....##", + "##.......####.............######.#.......#....##", + "##.......SSD#............#######.#.......#....##", + "##.......................###D###.#########....##", + "########.................#....................##", + ".......###########.......#S...#S..............##", + ".......##wwwwwww#........#......################", + ".......##wwwwwww#........#......................", + "##.....##wwwwwww#........#......................", + "##.....#################.#......................", + "##.............................############.....", + "##.............................#...wwwwwww#...##", + "##.............................#...wwwwwww#..###", + "##..#########################..#..........#..###", + "##..#########################..#..........#..###", + "##..#########################..#.....#...##..###", + "##..#########################..############..###", + "##..<.######################>...##########...###", + "##..<.########D####D###SSD##>..S#D####D###...###", + "##..................###", + "##..<.......................>..#####...####..###", + "##..<.......................>................###", + "##..#vvvv...#######...vvvvvv##...............###", + "##..........#######..........###################", + "##..........#######..........#######..........##", + "###################..........###################", + "###################..........###################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "003333333333333333333300000033333333333333333300", + "003333333333333333333333333333333333333333333300", + "003330000000000000033003330003300000000000003300", + "003330111110033333033333333333303333003333303300", + "003330111110033333033333333333303333003333303300", + "003330000000000000033330000000300000000000003300", + "003333333333333333333303333333333333333333333300", + "003333333333333333333303333333333333333333333300", + "003333333000000000000303330000003000000000333300", + "003333333000033333333333330000003033333330333300", + "003333333000033333333333300000003033333330333300", + "003333333333333333333333300000003000000000333300", + "000000003333333333333333303333333333333333333300", + "333333300000000000333333300333003333333333333300", + "333333300111111103333333303333330000000000000000", + "333333300111111103333333303333333333333333333333", + "003333300111111103333333303333333333333333333333", + "003333300000000000000000303333333333333333333333", + "003333333333333333333333333333300000000000033333", + "003333333333333333333333333333303331111111033300", + "003333333333333333333333333333303331111111033000", + "003300000000000000000000000003303333333333033000", + "003300000000000000000000000003303333333333033000", + "003300000000000000000000000003303333303330033000", + "003300000000000000000000000003300000000000033000", + "003303000000000000000000000003330000000000333000", + "003303000000000000000000000003300000000000333000", + "003300330003333333333333333303333333333333333000", + "003303333333333333333333333303300000333000033000", + "003303333333333333333333333303333333333333333000", + "003300000333000000033300000000333333333333333000", + "003333333333000000033333333330000000000000000000", + "003333333333000000033333333330000000333333333300", + "000000000000000000033333333330000000000000000000", + "000000000000000000033333333330000000000000000000" + ], + "points": { + "warp_0": [24, 5], + "warp_1": [33, 31], + "warp_2": [11, 15], + "warp_3": [28, 16], + "warp_4": [9, 32], + "warp_5": [14, 31], + "warp_6": [25, 31], + "warp_7": [38, 31], + "warp_8": [39, 28], + "warp_10": [19, 31] + }, + "warps": [ + {"coord": [24, 5], "enter": "walk_into", "to_map": "FuchsiaCity_SafariZone_Entrance", "to_point": "warp_2"}, + {"coord": [33, 31], "enter": "walk_into", "to_map": "FuchsiaCity_WardensHouse", "to_point": "warp_1"}, + {"coord": [11, 15], "enter": "walk_into", "to_map": "FuchsiaCity_Mart", "to_point": "warp_1"}, + {"coord": [28, 16], "enter": "walk_into", "to_map": "FuchsiaCity_SafariZone_Office", "to_point": "warp_1"}, + {"coord": [9, 32], "enter": "walk_into", "to_map": "FuchsiaCity_Gym", "to_point": "warp_1"}, + {"coord": [14, 31], "enter": "walk_into", "to_map": "FuchsiaCity_House1", "to_point": "warp_1"}, + {"coord": [25, 31], "enter": "walk_into", "to_map": "FuchsiaCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [38, 31], "enter": "walk_into", "to_map": "FuchsiaCity_House2", "to_point": "warp_1"}, + {"coord": [39, 28], "enter": "walk_south", "to_map": "FuchsiaCity_House2", "to_point": "warp_3"}, + {"coord": [39, 29], "enter": "walk_into", "to_map": "FuchsiaCity_House2", "to_point": "warp_3"}, + {"coord": [19, 31], "enter": "walk_into", "to_map": "FuchsiaCity_House3", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "Route19", "offset": 12}, + {"side": "west", "to_map": "Route18", "offset": 10}, + {"side": "east", "to_map": "Route15", "offset": 10} + ], + "npcs": [ + {"name": "fat_man", "coord": [37, 17], "source_event": 0, "source_script": "FuchsiaCity_EventScript_Erik"}, + { + "name": "slowpoke", + "coord": [36, 15], + "wander": {"min": [32, 14], "max": [40, 16]}, + "source_event": 1, + "source_script": "0x0" + }, + {"name": "voltorb", "coord": [33, 8], "source_event": 2, "source_script": "0x0"}, + {"name": "youngster", "coord": [33, 11], "source_event": 3, "source_script": "FuchsiaCity_EventScript_Youngster"}, + { + "name": "chansey", + "coord": [39, 8], + "wander": {"min": [36, 7], "max": [42, 9]}, + "source_event": 4, + "source_script": "0x0" + }, + { + "name": "little_boy", + "coord": [14, 15], + "wander": {"min": [11, 15], "max": [17, 15]}, + "source_event": 5, + "source_script": "FuchsiaCity_EventScript_LittleBoy" + }, + { + "name": "lapras", + "coord": [12, 20], + "wander": {"min": [10, 19], "max": [14, 21]}, + "source_event": 6, + "source_script": "0x0" + }, + { + "name": "old_man_1", + "coord": [36, 20], + "wander": {"min": [32, 20], "max": [40, 20]}, + "source_event": 7, + "source_script": "FuchsiaCity_EventScript_OldMan" + }, + {"name": "var_0", "coord": [8, 8], "source_event": 8, "source_script": "0x0"}, + { + "name": "kangaskhan", + "coord": [16, 9], + "wander": {"min": [12, 8], "max": [20, 10]}, + "source_event": 9, + "source_script": "0x0" + }, + { + "name": "cut_tree", + "coord": [30, 10], + "hide_flag": "FLAG_TEMP_12", + "source_event": 10, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [21, 13], + "hide_flag": "FLAG_TEMP_13", + "source_event": 11, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [32, 16], + "hide_flag": "FLAG_TEMP_14", + "source_event": 12, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [24, 22], + "hide_flag": "FLAG_TEMP_15", + "source_event": 13, + "source_script": "EventScript_CutTree" + }, + { + "name": "bug_catcher", + "coord": [15, 11], + "source_event": 14, + "source_script": "FuchsiaCity_EventScript_SubstituteTutor" + }, + { + "name": "lass", + "coord": [40, 6], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 15, + "source_script": "FuchsiaCity_EventScript_Lass" + } + ] +} diff --git a/data/games/frlg/maps/base/FuchsiaCity_Gym.json b/data/games/frlg/maps/base/FuchsiaCity_Gym.json new file mode 100644 index 0000000..ed7ab70 --- /dev/null +++ b/data/games/frlg/maps/base/FuchsiaCity_Gym.json @@ -0,0 +1,93 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "FuchsiaCity_Gym", + "source": { + "decomp_file": "data/maps/FuchsiaCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###############", + "###############", + "...............", + "...####....#...", + ".......##..#...", + "###....#...#...", + ".......#...#...", + ".......#...#...", + ".......#..#....", + "#..####...#....", + "#.........#....", + "...########....", + "..........#....", + "...#.......#...", + "####.......#...", + "...#.......#...", + "...#########...", + "...............", + "...............", + "....S.....S....", + "...............", + "...............", + "###############" + ], + "points": {"warp_1": [7, 21]}, + "warps": [ + {"coord": [6, 21], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_4"}, + {"coord": [7, 21], "enter": "walk_south", "to_map": "FuchsiaCity", "to_point": "warp_4"}, + {"coord": [8, 21], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocker", + "coord": [12, 16], + "trainer": {"sight": 4, "looks": ["south", "east"]}, + "source_event": 0, + "source_script": "FuchsiaCity_Gym_EventScript_Kayden" + }, + { + "name": "rocker", + "coord": [2, 9], + "facing": "west", + "trainer": {"sight": 1}, + "source_event": 1, + "source_script": "FuchsiaCity_Gym_EventScript_Shawn" + }, + { + "name": "rocker", + "coord": [11, 11], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 2, + "source_script": "FuchsiaCity_Gym_EventScript_Kirk" + }, + { + "name": "man", + "coord": [13, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "FuchsiaCity_Gym_EventScript_Edgar" + }, + { + "name": "man", + "coord": [4, 6], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 4, + "source_script": "FuchsiaCity_Gym_EventScript_Phil" + }, + { + "name": "rocker", + "coord": [2, 16], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 5, + "source_script": "FuchsiaCity_Gym_EventScript_Nate" + }, + {"name": "koga", "coord": [7, 13], "source_event": 6, "source_script": "FuchsiaCity_Gym_EventScript_Koga"}, + {"name": "gym_guy", "coord": [11, 19], "source_event": 7, "source_script": "FuchsiaCity_Gym_EventScript_GymGuy"} + ] +} diff --git a/data/games/frlg/maps/base/FuchsiaCity_Mart.json b/data/games/frlg/maps/base/FuchsiaCity_Mart.json new file mode 100644 index 0000000..1c1fdd4 --- /dev/null +++ b/data/games/frlg/maps/base/FuchsiaCity_Mart.json @@ -0,0 +1,41 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "FuchsiaCity_Mart", + "source": { + "decomp_file": "data/maps/FuchsiaCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_2"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "FuchsiaCity", "to_point": "warp_2"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "FuchsiaCity_Mart_EventScript_Clerk"}, + {"name": "gentleman", "coord": [6, 3], "source_event": 1, "source_script": "FuchsiaCity_Mart_EventScript_Gentleman"}, + { + "name": "cooltrainer_f", + "coord": [9, 5], + "wander": {"min": [8, 4], "max": [10, 6]}, + "source_event": 2, + "source_script": "FuchsiaCity_Mart_EventScript_CooltrainerF" + } + ] +} diff --git a/data/games/frlg/maps/base/FuchsiaCity_SafariZone_Entrance.json b/data/games/frlg/maps/base/FuchsiaCity_SafariZone_Entrance.json new file mode 100644 index 0000000..43a807a --- /dev/null +++ b/data/games/frlg/maps/base/FuchsiaCity_SafariZone_Entrance.json @@ -0,0 +1,40 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "FuchsiaCity_SafariZone_Entrance", + "source": { + "decomp_file": "data/maps/FuchsiaCity_SafariZone_Entrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#########", + "####.####", + "###...###", + "#.#...#.#", + "#.#...#.#", + "#.#...#..", + "#.#...#.#", + "#.#...#.#", + "#########" + ], + "points": {"warp_0": [4, 1], "warp_2": [4, 7]}, + "warps": [ + {"coord": [4, 1], "enter": "cave_entrance", "to_map": "SafariZone_Center", "to_point": "warp_1"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_0"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "FuchsiaCity", "to_point": "warp_0"}, + {"coord": [3, 7], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "worker_m", "coord": [7, 3], "source_event": 0, "source_script": "0x0"}, + { + "name": "worker_m", + "coord": [1, 6], + "source_event": 1, + "source_script": "FuchsiaCity_SafariZone_Entrance_EventScript_InfoAttendant" + } + ] +} diff --git a/data/games/frlg/maps/base/FuchsiaCity_WardensHouse.json b/data/games/frlg/maps/base/FuchsiaCity_WardensHouse.json new file mode 100644 index 0000000..a5489fc --- /dev/null +++ b/data/games/frlg/maps/base/FuchsiaCity_WardensHouse.json @@ -0,0 +1,58 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "FuchsiaCity_WardensHouse", + "source": { + "decomp_file": "data/maps/FuchsiaCity_WardensHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + ".............", + ".............", + "##..####..###", + "##........#.#", + ".............", + ".............", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 9]}, + "warps": [ + {"coord": [5, 10], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_1"}, + {"coord": [6, 9], "enter": "walk_south", "to_map": "FuchsiaCity", "to_point": "warp_1"}, + {"coord": [7, 10], "enter": "walk_into", "to_map": "FuchsiaCity", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "old_man_2", + "coord": [3, 5], + "source_event": 0, + "source_script": "FuchsiaCity_WardensHouse_EventScript_Warden" + }, + {"name": "pushable_boulder", "coord": [11, 6], "source_event": 1, "source_script": "EventScript_StrengthBoulder"}, + { + "name": "0", + "coord": [4, 1], + "hide_flag": "FLAG_HIDE_FAME_CHECKER_KOGA_JOURNAL", + "source_event": 3, + "source_script": "FuchsiaCity_WardensHouse_EventScript_PokemonJournalKoga" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [11, 5], + "source_event": 2, + "hide_flag": "FLAG_HIDE_FUCHSIA_CITY_WARDENS_HOUSE_RARE_CANDY", + "source_script": "FuchsiaCity_WardensHouse_EventScript_ItemRareCandy", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/IndigoPlateau_Exterior.json b/data/games/frlg/maps/base/IndigoPlateau_Exterior.json new file mode 100644 index 0000000..11e99d1 --- /dev/null +++ b/data/games/frlg/maps/base/IndigoPlateau_Exterior.json @@ -0,0 +1,54 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "IndigoPlateau_Exterior", + "source": { + "decomp_file": "data/maps/IndigoPlateau_Exterior/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################", + "########################", + "########################", + "########################", + "########################", + "########################", + "######.####D####.#######", + "######.#S.....S#.#######", + "#######.........########", + "#######.........########", + "####..#.S.....S.#..#####", + "####..#.........#..#####", + "######.#.......#.#######", + "######..S#...#S..#######", + "##########...###########", + "##########...###########", + "##########...###########", + "##########...###########", + "##########...###########", + "##########...###########" + ], + "points": {"warp_0": [11, 6]}, + "warps": [{"coord": [11, 6], "enter": "walk_into", "to_map": "IndigoPlateau_PokemonCenter_1F", "to_point": "warp_0"}], + "flag_sets": {}, + "connections": [{"side": "south", "to_map": "Route23", "offset": 0}], + "npcs": [ + { + "name": "blue", + "coord": [11, 6], + "hide_flag": "FLAG_HIDE_CREDITS_RIVAL", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_CREDITS_RIVAL" + }, + { + "name": "prof_oak", + "coord": [11, 6], + "hide_flag": "FLAG_HIDE_CREDITS_OAK", + "source_event": 1, + "source_script": "0x0", + "source_local_id": "LOCALID_CREDITS_PROF_OAK" + } + ] +} diff --git a/data/games/frlg/maps/base/IndigoPlateau_PokemonCenter_1F.json b/data/games/frlg/maps/base/IndigoPlateau_PokemonCenter_1F.json new file mode 100644 index 0000000..20c64a9 --- /dev/null +++ b/data/games/frlg/maps/base/IndigoPlateau_PokemonCenter_1F.json @@ -0,0 +1,115 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "IndigoPlateau_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/IndigoPlateau_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#########################", + "####.####################", + "..S...S..################", + ".........################", + "........#################", + "##.......################", + ".#......#################", + ".#.......################", + "##......#################", + "..........###############", + ".##.......###..##........", + ".##.......#######........", + ".........................", + "..................##.##..", + "#.................##.##..", + ".........................", + ".........................", + "#########################" + ], + "elevation": [ + "0000000000000000000000000", + "0000300000000000000000000", + "3303330330000000000000000", + "3333333330000000000000000", + "3333333300000000000000000", + "0033333330000000000000000", + "3033333300000000000000000", + "3033333330000000000000000", + "0033333300000000000000000", + "3333333333000000000000000", + "3003333333000330033333003", + "3003333333000000033333333", + "3333333333333333333333333", + "3303333333333333330030033", + "0440333333333333330030033", + "3303333333333333333333333", + "3333333333333333333333333", + "0000000000000000000000000" + ], + "points": {"warp_0": [11, 16], "warp_1": [4, 1], "warp_2": [1, 14]}, + "warps": [ + {"coord": [11, 16], "enter": "walk_south", "to_map": "IndigoPlateau_Exterior", "to_point": "warp_0"}, + {"coord": [4, 1], "enter": "cave_entrance", "to_map": "PokemonLeague_LoreleisRoom", "to_point": "warp_0"}, + {"coord": [1, 14], "enter": "step_on", "to_map": "IndigoPlateau_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "clerk", + "coord": [0, 7], + "source_event": 0, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_Clerk" + }, + { + "name": "nurse", + "coord": [13, 10], + "source_event": 1, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_LEAGUE_NURSE" + }, + { + "name": "gym_guy", + "coord": [7, 14], + "source_event": 2, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_GymGuy" + }, + { + "name": "cooltrainer_f", + "coord": [5, 3], + "source_event": 3, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_DoorGuard", + "source_local_id": "LOCALID_LEAGUE_DOOR_GUARD" + }, + { + "name": "black_belt", + "coord": [23, 13], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 4, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_BlackBelt" + }, + { + "name": "0", + "coord": [22, 9], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 5, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_PokemonJournal" + }, + { + "name": "cooltrainer_m", + "coord": [16, 15], + "wander": {"min": [15, 14], "max": [17, 16]}, + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 6, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_CooltrainerM" + }, + { + "name": "0", + "coord": [23, 9], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 7, + "source_script": "IndigoPlateau_PokemonCenter_1F_EventScript_PokemonJournal" + } + ] +} diff --git a/data/games/frlg/maps/base/LavenderTown.json b/data/games/frlg/maps/base/LavenderTown.json new file mode 100644 index 0000000..099006c --- /dev/null +++ b/data/games/frlg/maps/base/LavenderTown.json @@ -0,0 +1,65 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "LavenderTown", + "source": { + "decomp_file": "data/maps/LavenderTown/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########.....###########", + "########.....###########", + "#########....###########", + "#########....###########", + "#########...S###########", + "#...SSD##....###########", + "#............#####.#####", + "#....................S##", + "#.....................##", + "........#####.........##", + "........#####.........##", + ".......S##D##..S......##", + "#.....................##", + "#.................######", + "#..##########.....######", + "#..##########.....SSD###", + "#..##D####D##.........##", + "#.....................##", + "#.....................##", + "###########..###########" + ], + "points": { + "warp_0": [18, 6], + "warp_1": [6, 5], + "warp_2": [10, 11], + "warp_3": [5, 16], + "warp_4": [10, 16], + "warp_5": [20, 15] + }, + "warps": [ + {"coord": [18, 6], "enter": "cave_entrance", "to_map": "PokemonTower_1F", "to_point": "warp_1"}, + {"coord": [6, 5], "enter": "walk_into", "to_map": "LavenderTown_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [10, 11], "enter": "walk_into", "to_map": "LavenderTown_VolunteerPokemonHouse", "to_point": "warp_1"}, + {"coord": [5, 16], "enter": "walk_into", "to_map": "LavenderTown_House1", "to_point": "warp_1"}, + {"coord": [10, 16], "enter": "walk_into", "to_map": "LavenderTown_House2", "to_point": "warp_1"}, + {"coord": [20, 15], "enter": "walk_into", "to_map": "LavenderTown_Mart", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route10", "offset": 0}, + {"side": "south", "to_map": "Route12", "offset": 0}, + {"side": "west", "to_map": "Route8", "offset": 0} + ], + "npcs": [ + { + "name": "little_girl", + "coord": [19, 10], + "wander": {"min": [17, 9], "max": [21, 11]}, + "source_event": 0, + "source_script": "LavenderTown_EventScript_LittleGirl" + }, + {"name": "worker_m", "coord": [12, 12], "source_event": 1, "source_script": "LavenderTown_EventScript_WorkerM"}, + {"name": "boy", "coord": [10, 7], "source_event": 2, "source_script": "LavenderTown_EventScript_Boy"} + ] +} diff --git a/data/games/frlg/maps/base/LavenderTown_Mart.json b/data/games/frlg/maps/base/LavenderTown_Mart.json new file mode 100644 index 0000000..0240ff7 --- /dev/null +++ b/data/games/frlg/maps/base/LavenderTown_Mart.json @@ -0,0 +1,46 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "LavenderTown_Mart", + "source": { + "decomp_file": "data/maps/LavenderTown_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_5"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "LavenderTown", "to_point": "warp_5"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "LavenderTown_Mart_EventScript_Clerk"}, + { + "name": "balding_man", + "coord": [6, 2], + "source_event": 1, + "source_script": "LavenderTown_Mart_EventScript_BaldingMan" + }, + {"name": "rocker", "coord": [9, 2], "source_event": 2, "source_script": "LavenderTown_Mart_EventScript_Rocker"}, + { + "name": "youngster", + "coord": [9, 5], + "source_event": 3, + "source_script": "LavenderTown_Mart_EventScript_Youngster" + } + ] +} diff --git a/data/games/frlg/maps/base/LavenderTown_PokemonCenter_1F.json b/data/games/frlg/maps/base/LavenderTown_PokemonCenter_1F.json new file mode 100644 index 0000000..f8b771b --- /dev/null +++ b/data/games/frlg/maps/base/LavenderTown_PokemonCenter_1F.json @@ -0,0 +1,79 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "LavenderTown_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/LavenderTown_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_1"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "LavenderTown", "to_point": "warp_1"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_1"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "LavenderTown_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_LAVENDER_NURSE" + }, + { + "name": "gentleman", + "coord": [9, 4], + "source_event": 1, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Gentleman" + }, + { + "name": "lass", + "coord": [5, 6], + "wander": {"min": [5, 4], "max": [5, 8]}, + "source_event": 2, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Lass" + }, + { + "name": "youngster", + "coord": [2, 2], + "wander": {"min": [1, 1], "max": [3, 3]}, + "source_event": 3, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "balding_man", + "coord": [14, 6], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 4, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_BaldingMan" + } + ] +} diff --git a/data/games/frlg/maps/base/LavenderTown_VolunteerPokemonHouse.json b/data/games/frlg/maps/base/LavenderTown_VolunteerPokemonHouse.json new file mode 100644 index 0000000..299365e --- /dev/null +++ b/data/games/frlg/maps/base/LavenderTown_VolunteerPokemonHouse.json @@ -0,0 +1,69 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "LavenderTown_VolunteerPokemonHouse", + "source": { + "decomp_file": "data/maps/LavenderTown_VolunteerPokemonHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "############", + "############", + "........#...", + "........#..#", + "#....##....#", + "#....##....#", + "............", + "#..........#", + "############" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_2"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "LavenderTown", "to_point": "warp_2"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "mr_fuji", + "coord": [3, 3], + "hide_flag": "FLAG_HIDE_POKEHOUSE_FUJI", + "source_event": 0, + "source_script": "LavenderTown_VolunteerPokemonHouse_EventScript_MrFuji" + }, + { + "name": "nidorino", + "coord": [1, 4], + "source_event": 1, + "source_script": "LavenderTown_VolunteerPokemonHouse_EventScript_Nidorino" + }, + { + "name": "psyduck", + "coord": [9, 6], + "source_event": 2, + "source_script": "LavenderTown_VolunteerPokemonHouse_EventScript_Psyduck" + }, + { + "name": "little_boy", + "coord": [9, 5], + "source_event": 3, + "source_script": "LavenderTown_VolunteerPokemonHouse_EventScript_LittleBoy" + }, + { + "name": "youngster", + "coord": [3, 5], + "source_event": 4, + "source_script": "LavenderTown_VolunteerPokemonHouse_EventScript_Youngster" + }, + { + "name": "little_girl", + "coord": [7, 2], + "source_event": 5, + "source_script": "LavenderTown_VolunteerPokemonHouse_EventScript_LittleGirl" + } + ] +} diff --git a/data/games/frlg/maps/base/MtMoon_1F.json b/data/games/frlg/maps/base/MtMoon_1F.json new file mode 100644 index 0000000..26204e9 --- /dev/null +++ b/data/games/frlg/maps/base/MtMoon_1F.json @@ -0,0 +1,180 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "MtMoon_1F", + "source": { + "decomp_file": "data/maps/MtMoon_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/MtMoon_1F/map.json", + "events_sha256": "312b2de23d9942d3326da9fe9597b25ef7c3537bcedfcafa7922d5c8b8e8d8fc", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################################", + "################################################", + "##~~~~~~~~~#########~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~#######~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~.~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~#~~~~##", + "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~####~~##", + "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~~##~~~##", + "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~~#####~~~~~####~~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~.####~~~~~~~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~###~~~~####~~~~~~~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~###~~~~###~~~~~~~~.~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "##~~~~#################~~~~###~~~~~~~~~###~~~~##", + "##~~~~~################~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###############~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###~~~~~~~~S~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", + "##~~~~~~~~~~~~##~~~~##########~~~###~~~###~~~~##", + "##~~~~~~~~~~~####~~~#####~~~~~~~~###~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~#####~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~####~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~####~.~####~~~~~~~~~~~~~~~~~~~~~~##", + "################################################", + "################################################" + ], + "points": {"warp_0": [5, 6], "warp_1": [19, 14], "warp_2": [31, 16], "warp_3": [18, 37]}, + "warps": [ + {"coord": [5, 6], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_0"}, + {"coord": [19, 14], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_1"}, + {"coord": [31, 16], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_2"}, + {"coord": [18, 37], "enter": "walk_south", "to_map": "Route4", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "lass", + "coord": [20, 26], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 0, + "source_script": "MtMoon_1F_EventScript_Iris" + }, + { + "name": "bug_catcher", + "coord": [36, 30], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 1, + "source_script": "MtMoon_1F_EventScript_Robby" + }, + { + "name": "scientist", + "coord": [30, 35], + "trainer": {"sight": 4, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "MtMoon_1F_EventScript_Jovan" + }, + { + "name": "lass", + "coord": [33, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "MtMoon_1F_EventScript_Miriam" + }, + { + "name": "bug_catcher", + "coord": [7, 26], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 4, + "source_script": "MtMoon_1F_EventScript_Kent" + }, + { + "name": "youngster", + "coord": [13, 17], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 5, + "source_script": "MtMoon_1F_EventScript_Josh" + }, + { + "name": "hiker", + "coord": [7, 10], + "wander": {"min": [5, 8], "max": [9, 12]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 6, + "source_script": "MtMoon_1F_EventScript_Marcos" + }, + {"name": "balding_man", "coord": [42, 7], "source_event": 13, "source_script": "MtMoon_1F_EventScript_BaldingMan"} + ], + "items": [ + { + "name": "item_ball", + "coord": [2, 22], + "source_event": 7, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_PARALYZE_HEAL", + "source_script": "MtMoon_1F_EventScript_ItemParalyzeHeal", + "item": "paralyze_heal" + }, + { + "name": "item_ball", + "coord": [11, 35], + "source_event": 8, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_TM09", + "source_script": "MtMoon_1F_EventScript_ItemTM09", + "item": "tm09" + }, + { + "name": "item_ball", + "coord": [26, 32], + "source_event": 9, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_POTION", + "source_script": "MtMoon_1F_EventScript_ItemPotion", + "item": "potion" + }, + { + "name": "item_ball", + "coord": [42, 35], + "source_event": 10, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_RARE_CANDY", + "source_script": "MtMoon_1F_EventScript_ItemRareCandy", + "item": "rare_candy" + }, + { + "name": "item_ball", + "coord": [44, 21], + "source_event": 11, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_ESCAPE_ROPE", + "source_script": "MtMoon_1F_EventScript_ItemEscapeRope", + "item": "escape_rope" + }, + { + "name": "item_ball", + "coord": [3, 2], + "source_event": 12, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_MOON_STONE", + "source_script": "MtMoon_1F_EventScript_ItemMoonStone", + "item": "moon_stone" + } + ] +} diff --git a/data/games/frlg/maps/base/MtMoon_B1F.json b/data/games/frlg/maps/base/MtMoon_B1F.json new file mode 100644 index 0000000..9956887 --- /dev/null +++ b/data/games/frlg/maps/base/MtMoon_B1F.json @@ -0,0 +1,74 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "MtMoon_B1F", + "source": { + "decomp_file": "data/maps/MtMoon_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#################################################", + "#################################################", + "##################~~~~~~~~###############~~~~~###", + "##~.~~~##########~~~~~~~~#############~~~~~~~####", + "##~~~~~#########~~~~~~~~~.~##########~~.~~~~~.~##", + "##~~~~~#########~.~~~~~~~~~#########~~~~~~~~~~~##", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~###########################################", + "##~~~~~##########################################", + "##~~~#~##########################################", + "##~~~~###########################################", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~~~~~~~~~~~~~~~~~~~#########################", + "##~~~~~~~~~~~~~~~~~~~~~~#########################", + "##~~~~~~~~~~~~~~~~~~~~.~#########################", + "#################################################", + "#################################################", + "#########################################~~.~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "##########################################~~~####", + "##########################################~~~####", + "##########################################~~~####", + "##########################~~~~~~~~~~~####~~~~####", + "#########################~~~~~~~~~~~~~~~~~~~~####", + "########################~~.~~~~~~~~~~~~~~~~~~####", + "#################################################", + "#################################################", + "#################################################" + ], + "points": { + "warp_0": [3, 3], + "warp_1": [25, 4], + "warp_2": [43, 21], + "warp_3": [22, 18], + "warp_4": [17, 5], + "warp_5": [26, 36], + "warp_6": [39, 4], + "warp_7": [45, 4] + }, + "warps": [ + {"coord": [3, 3], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_0"}, + {"coord": [25, 4], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_1"}, + {"coord": [43, 21], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_2"}, + {"coord": [22, 18], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_0"}, + {"coord": [17, 5], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_1"}, + {"coord": [26, 36], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_2"}, + {"coord": [39, 4], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_3"}, + {"coord": [45, 4], "enter": "step_on", "to_map": "Route4", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [] +} diff --git a/data/games/frlg/maps/base/MtMoon_B2F.json b/data/games/frlg/maps/base/MtMoon_B2F.json new file mode 100644 index 0000000..eb5f454 --- /dev/null +++ b/data/games/frlg/maps/base/MtMoon_B2F.json @@ -0,0 +1,198 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "MtMoon_B2F", + "source": { + "decomp_file": "data/maps/MtMoon_B2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/MtMoon_B2F/map.json", + "events_sha256": "451a05df92c5df570c121affa75c846996d3561c12e7e5d67d91814482a37ff3", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################################", + "################################################", + "################################################", + "###~~~~~~~~~~~~~~~~~############################", + "###~~~~~~~~~~~~~~~~~############################", + "###~~~~~~~~~~~~~~~~~###~~~~######~~~~###########", + "###~~~~~~~~~~~~~~~~~###~~~~#~~~~#~~~~#~~~~######", + "###~~########~~########~~~~#~~~~##~~##~~~~######", + "##~~~~~~#8888~~88888###~~~~#~~~~~~~~~~~~~~######", + "##~~~#~~#~~~~~~~~~~~###~~~~#~~~~~~~~~~~~~~######", + "##~~~.#~#~~~~~~~~~~~###~~~~#~~##~~~~~~~~~~######", + "##~~~~~~#~~~~~~~~~~~###~~~~#~~#.~~~~~~~#~~######", + "##~~~~~######~~###~~###~~~~#~~~~~~~~~~~~~~######", + "#########~~~~~~~~#~~###~~~~#~~~~~~~~~~~~~~######", + "#vvvvvv#~~~~~~~~~#~~###~~~~88888888##8888888888#", + "########~~~~~~~~~######~~~~~~~~~~~~##~~~~~~~~~~#", + "########~~~~~~~~~~~~###~~~~~~~~~~~~##~~~~~~~~~~#", + "############~~~########~~~~~~~~~~~~##~~~~~~~~~~#", + "#######vvvv#~~~#vvvvvv#~~~~~~##~~#####~~##~~~~~#", + "############~~~########~~~~~~#~~~~~~~~~~~#~~~~~#", + "############~~~########~~#~~~#~~~~~~~~~~~#~~~~~#", + "########~~~~~~~~~~~~~##~~.~#~#~~~~~~~~~~~#~~~~~#", + "########~~~~~~~~~~~~~##~~~#~~#~~~~~~~~~~~#~~~~~#", + "########~~~~~##############################~~~~#", + "########~~~~~#vvvvvvvvvvvvvvvvvvvvvvvvvvvv#~~~~#", + "########~~~~~##############################~~~~#", + "########~~~~~###############~~~~###########~~~~#", + "########~~~~~##~~~~~~~~~~~~#~~~~#~~##~~~~~~~~~~#", + "########~~~~~###~~~~~~~~~~~##~~##~~##~~~~~~~~~~#", + "########~~~~~##~~~~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~##~~#~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~##~#.~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~####~~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~########################~~~~~######", + "########~~~~~#vvvvvvvvvvvvvvvvvvvvvv#~~~~~######", + "########~~~~~########################~~~~~######", + "########~~~~~########################~~~~~######", + "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", + "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", + "################################################" + ], + "points": {"warp_0": [25, 21], "warp_1": [31, 11], "warp_2": [17, 31], "warp_3": [5, 10]}, + "regions": { + "wild": [ + [9, 8], + [10, 8], + [11, 8], + [12, 8], + [15, 8], + [16, 8], + [17, 8], + [18, 8], + [19, 8], + [27, 14], + [28, 14], + [29, 14], + [30, 14], + [31, 14], + [32, 14], + [33, 14], + [34, 14], + [37, 14], + [38, 14], + [39, 14], + [40, 14], + [41, 14], + [42, 14], + [43, 14], + [44, 14], + [45, 14], + [46, 14] + ] + }, + "warps": [ + {"coord": [25, 21], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_3"}, + {"coord": [31, 11], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_4"}, + {"coord": [17, 31], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_5"}, + {"coord": [5, 10], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_6"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "fossil", + "coord": [13, 7], + "hide_flag": "FLAG_HIDE_DOME_FOSSIL", + "source_event": 0, + "source_script": "MtMoon_B2F_EventScript_DomeFossil", + "source_local_id": "LOCALID_DOME_FOSSIL" + }, + { + "name": "fossil", + "coord": [14, 7], + "hide_flag": "FLAG_HIDE_HELIX_FOSSIL", + "source_event": 1, + "source_script": "MtMoon_B2F_EventScript_HelixFossil", + "source_local_id": "LOCALID_HELIX_FOSSIL" + }, + { + "name": "scientist", + "coord": [13, 11], + "source_event": 2, + "source_script": "MtMoon_B2F_EventScript_Miguel", + "source_local_id": "LOCALID_MIGUEL" + }, + { + "name": "rocket_m", + "coord": [37, 21], + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 3, + "source_script": "MtMoon_B2F_EventScript_Grunt4" + }, + { + "name": "rocket_m", + "coord": [12, 20], + "facing": "south", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 4, + "source_script": "MtMoon_B2F_EventScript_Grunt1" + }, + { + "name": "rocket_m", + "coord": [35, 12], + "facing": "north", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 5, + "source_script": "MtMoon_B2F_EventScript_Grunt3" + }, + { + "name": "rocket_m", + "coord": [18, 27], + "facing": "south", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 6, + "source_script": "MtMoon_B2F_EventScript_Grunt2" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [30, 26], + "source_event": 7, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_STAR_PIECE", + "source_script": "MtMoon_B2F_EventScript_ItemStarPiece", + "item": "star_piece" + }, + { + "name": "item_ball", + "coord": [35, 5], + "source_event": 8, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_TM46", + "source_script": "MtMoon_B2F_EventScript_ItemTM46", + "item": "tm46" + }, + { + "name": "item_ball", + "coord": [24, 6], + "source_event": 9, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_REVIVE", + "source_script": "MtMoon_B2F_EventScript_ItemRevive", + "item": "revive" + }, + { + "name": "item_ball", + "coord": [3, 11], + "source_event": 10, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_ANTIDOTE", + "source_script": "MtMoon_B2F_EventScript_ItemAntidote", + "item": "antidote" + } + ] +} diff --git a/data/games/frlg/maps/base/PalletTown.json b/data/games/frlg/maps/base/PalletTown.json new file mode 100644 index 0000000..54e740d --- /dev/null +++ b/data/games/frlg/maps/base/PalletTown.json @@ -0,0 +1,90 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PalletTown", + "source": { + "decomp_file": "data/maps/PalletTown/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "############..##########", + "############..##########", + "##....................##", + "##....................##", + "##...#####....#####...##", + "##...#####....#####...##", + "##...#####....#####...##", + "##..S#D###...S#D###...##", + "##....................##", + "##....................##", + "##...........#######..##", + "##...####S...#######..##", + "##...........#######..##", + "##...........###D###..##", + "##...S................##", + "##....................##", + "##...........###S##...##", + "##.....wwww...........##", + "##.....wwww...........##", + "##.....wwww...........##" + ], + "elevation": [ + "000000000000330000000000", + "000000000000330000000000", + "003333333333333333333300", + "003333333333333333333300", + "003330000033330000033300", + "003330000033330000033300", + "003330000033330000033300", + "003300000033300000033300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333300000003300", + "003330000033300000003300", + "003333333333300000003300", + "003333333333300000003300", + "003330333333333333333300", + "003333333333333333333300", + "003333333333300000033300", + "003333311113333333333300", + "003333311113333333333300", + "003333311113333333333300" + ], + "points": {"oaks_lab_front": [16, 14], "warp_0": [6, 7], "warp_1": [15, 7], "warp_2": [16, 13]}, + "warps": [ + {"coord": [6, 7], "enter": "walk_into", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_1"}, + {"coord": [15, 7], "enter": "walk_into", "to_map": "PalletTown_RivalsHouse", "to_point": "warp_0"}, + {"coord": [16, 13], "enter": "walk_into", "to_map": "PalletTown_ProfessorOaksLab", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route1", "offset": 0}, + {"side": "south", "to_map": "Route21_North", "offset": 0} + ], + "npcs": [ + { + "name": "woman_1", + "coord": [3, 10], + "wander": {"min": [2, 6], "max": [4, 14]}, + "source_event": 0, + "source_script": "PalletTown_EventScript_SignLady", + "source_local_id": "LOCALID_PALLET_SIGN_LADY" + }, + { + "name": "fat_man", + "coord": [13, 17], + "wander": {"min": [7, 15], "max": [19, 19]}, + "source_event": 1, + "source_script": "PalletTown_EventScript_FatMan", + "source_local_id": "LOCALID_PALLET_FAT_MAN" + }, + { + "name": "prof_oak", + "coord": [10, 8], + "hide_flag": "FLAG_HIDE_OAK_IN_PALLET_TOWN", + "source_event": 2, + "source_script": "0x0", + "source_local_id": "LOCALID_PALLET_PROF_OAK" + } + ] +} diff --git a/data/games/frlg/maps/base/PalletTown_PlayersHouse_1F.json b/data/games/frlg/maps/base/PalletTown_PlayersHouse_1F.json new file mode 100644 index 0000000..3719282 --- /dev/null +++ b/data/games/frlg/maps/base/PalletTown_PlayersHouse_1F.json @@ -0,0 +1,41 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PalletTown_PlayersHouse_1F", + "source": { + "decomp_file": "data/maps/PalletTown_PlayersHouse_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + "#..........##", + "#............", + "#.....##.....", + "#.....##.....", + "#............", + "##..........#", + "#............", + "#############" + ], + "points": {"warp_1": [4, 8], "warp_2": [10, 2]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"}, + {"coord": [4, 8], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_0"}, + {"coord": [10, 2], "enter": "walk_east", "to_map": "PalletTown_PlayersHouse_2F", "to_point": "warp_0"}, + {"coord": [3, 9], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "mom", + "coord": [8, 4], + "source_event": 0, + "source_script": "PalletTown_PlayersHouse_1F_EventScript_Mom", + "source_local_id": "LOCALID_MOM" + } + ] +} diff --git a/data/games/frlg/maps/base/PalletTown_PlayersHouse_2F.json b/data/games/frlg/maps/base/PalletTown_PlayersHouse_2F.json new file mode 100644 index 0000000..3f3da38 --- /dev/null +++ b/data/games/frlg/maps/base/PalletTown_PlayersHouse_2F.json @@ -0,0 +1,36 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PalletTown_PlayersHouse_2F", + "source": { + "decomp_file": "data/maps/PalletTown_PlayersHouse_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "############", + "###########S", + "#.......##..", + "#.......##..", + "#.2...#.....", + "#.8...#.....", + "#.#.........", + "#...........", + "#..........." + ], + "elevation": [ + "000000000000", + "000000000000", + "033333330033", + "033333330033", + "033333033333", + "003033033333", + "040403333333", + "003033333333", + "033333333333" + ], + "points": {"start": [6, 6], "warp_0": [10, 2]}, + "warps": [{"coord": [10, 2], "enter": "walk_west", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_2"}], + "flag_sets": {}, + "connections": [] +} diff --git a/data/games/frlg/maps/base/PalletTown_ProfessorOaksLab.json b/data/games/frlg/maps/base/PalletTown_ProfessorOaksLab.json new file mode 100644 index 0000000..55e69f7 --- /dev/null +++ b/data/games/frlg/maps/base/PalletTown_ProfessorOaksLab.json @@ -0,0 +1,129 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PalletTown_ProfessorOaksLab", + "source": { + "decomp_file": "data/maps/PalletTown_ProfessorOaksLab/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/PalletTown_ProfessorOaksLab/map.json", + "events_sha256": "37906ed851a344cc63b41b303b41b6da091328b97b05b6e38d2570486d104704", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "######SS#####", + ".............", + "#............", + "###.....###..", + ".##..........", + ".............", + ".............", + "#####...#####", + ".............", + ".............", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_0": [6, 12]}, + "warps": [ + {"coord": [6, 12], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_2"}, + {"coord": [7, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"}, + {"coord": [5, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "scientist", + "coord": [3, 11], + "source_event": 0, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide1" + }, + { + "name": "worker_f", + "coord": [2, 10], + "wander": {"min": [2, 6], "max": [2, 13]}, + "source_event": 1, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide3" + }, + { + "name": "scientist", + "coord": [11, 10], + "source_event": 2, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide2" + }, + { + "name": "prof_oak", + "coord": [6, 3], + "hide_flag": "FLAG_HIDE_OAK_IN_HIS_LAB", + "source_event": 3, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_ProfOak", + "source_local_id": "LOCALID_OAKS_LAB_PROF_OAK" + }, + { + "name": "blue", + "coord": [5, 4], + "hide_flag": "FLAG_HIDE_RIVAL_IN_LAB", + "source_event": 7, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Rival", + "source_local_id": "LOCALID_OAKS_LAB_RIVAL" + }, + { + "name": "pokedex", + "coord": [4, 1], + "hide_flag": "FLAG_HIDE_POKEDEX", + "source_event": 8, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Pokedex", + "source_local_id": "LOCALID_POKEDEX_1" + }, + { + "name": "pokedex", + "coord": [5, 1], + "hide_flag": "FLAG_HIDE_POKEDEX", + "source_event": 9, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Pokedex", + "source_local_id": "LOCALID_POKEDEX_2" + } + ], + "interactables": [ + { + "name": "item_ball", + "coord": [8, 4], + "source_event": 4, + "hide_flag": "FLAG_HIDE_BULBASAUR_BALL", + "source_script": "PalletTown_ProfessorOaksLab_EventScript_BulbasaurBall", + "source_local_id": "LOCALID_BULBASAUR_BALL", + "interaction": {"kind": "starter_choice", "species": "bulbasaur"} + }, + { + "name": "item_ball", + "coord": [9, 4], + "source_event": 5, + "hide_flag": "FLAG_HIDE_SQUIRTLE_BALL", + "source_script": "PalletTown_ProfessorOaksLab_EventScript_SquirtleBall", + "source_local_id": "LOCALID_SQUIRTLE_BALL", + "interaction": {"kind": "starter_choice", "species": "squirtle"} + }, + { + "name": "item_ball", + "coord": [10, 4], + "source_event": 6, + "hide_flag": "FLAG_HIDE_CHARMANDER_BALL", + "source_script": "PalletTown_ProfessorOaksLab_EventScript_CharmanderBall", + "source_local_id": "LOCALID_CHARMANDER_BALL", + "interaction": {"kind": "starter_choice", "species": "charmander"} + } + ] +} diff --git a/data/games/frlg/maps/base/PalletTown_RivalsHouse.json b/data/games/frlg/maps/base/PalletTown_RivalsHouse.json new file mode 100644 index 0000000..cd9fa22 --- /dev/null +++ b/data/games/frlg/maps/base/PalletTown_RivalsHouse.json @@ -0,0 +1,49 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PalletTown_RivalsHouse", + "source": { + "decomp_file": "data/maps/PalletTown_RivalsHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + ".............", + ".............", + "......##.....", + "......##.....", + ".............", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_0": [4, 8]}, + "warps": [ + {"coord": [4, 8], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_1"}, + {"coord": [5, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_1"}, + {"coord": [3, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "daisy", + "coord": [10, 6], + "wander": {"min": [9, 3], "max": [11, 9]}, + "source_event": 0, + "source_script": "PalletTown_RivalsHouse_EventScript_Daisy", + "source_local_id": "LOCALID_DAISY" + }, + { + "name": "town_map", + "coord": [6, 4], + "hide_flag": "FLAG_HIDE_TOWN_MAP", + "source_event": 1, + "source_script": "PalletTown_RivalsHouse_EventScript_TownMap", + "source_local_id": "LOCALID_TOWN_MAP" + } + ] +} diff --git a/data/games/frlg/maps/base/PewterCity.json b/data/games/frlg/maps/base/PewterCity.json new file mode 100644 index 0000000..7c59eeb --- /dev/null +++ b/data/games/frlg/maps/base/PewterCity.json @@ -0,0 +1,118 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PewterCity", + "source": { + "decomp_file": "data/maps/PewterCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################################", + "#######################....#####################", + "####........#################.........##########", + "####........#################.........##########", + "####........#############D######......##########", + "####........###########...............##########", + "#######.....#####.#####..#######........########", + "####vvv..vvvvvvv...Svvvvvvvvvvvvvvvvv...########", + "####....................................########", + "####............................#####...########", + "######..........................#####...########", + "######..........................#D###...########", + "######..................................########", + "######...##.#######.##..................########", + "######...#############..................########", + "######...##.#######.##..................########", + "######...##S..#D#...##....####..........########", + "######...............#....######........########", + "######...............#....SSD###........########", + "######...............#.................S########", + "######################..........................", + "######..........................................", + "######.......#########..........................", + "######.......#########....##########............", + "######.......#########....##########....########", + "######.......##SSD####....#####S#####...########", + "######....................#.........#...########", + "######....................#.........#...########", + "######..#####.............#.........#...########", + "######..#####.............#.........#...########", + "######..#D###.......S.....#vvvv.vvvv#...########", + "######..................................########", + "######..................................########", + "######..................................########", + "######..................................########", + "######..................................########", + "####################....########################", + "####################....########################", + "####################....########################", + "####################....########################" + ], + "points": { + "gym_front": [15, 17], + "warp_0": [17, 6], + "warp_1": [25, 4], + "warp_2": [15, 16], + "warp_3": [28, 18], + "warp_4": [33, 11], + "warp_5": [17, 25], + "warp_6": [9, 30] + }, + "warps": [ + {"coord": [17, 6], "enter": "cave_entrance", "to_map": "PewterCity_Museum_1F", "to_point": "warp_1"}, + {"coord": [25, 4], "enter": "walk_into", "to_map": "PewterCity_Museum_1F", "to_point": "warp_3"}, + {"coord": [15, 16], "enter": "walk_into", "to_map": "PewterCity_Gym", "to_point": "warp_1"}, + {"coord": [28, 18], "enter": "walk_into", "to_map": "PewterCity_Mart", "to_point": "warp_1"}, + {"coord": [33, 11], "enter": "walk_into", "to_map": "PewterCity_House1", "to_point": "warp_1"}, + {"coord": [17, 25], "enter": "walk_into", "to_map": "PewterCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [9, 30], "enter": "walk_into", "to_map": "PewterCity_House2", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "Route2", "offset": 12}, + {"side": "east", "to_map": "Route3", "offset": 10} + ], + "npcs": [ + {"name": "lass", "coord": [6, 15], "source_event": 0, "source_script": "PewterCity_EventScript_Lass"}, + { + "name": "man", + "coord": [33, 17], + "hide_flag": "FLAG_HIDE_PEWTER_MUSEUM_GUIDE", + "source_event": 1, + "source_script": "PewterCity_EventScript_MuseumGuide", + "source_local_id": "LOCALID_PEWTER_MUSEUM_GUIDE" + }, + {"name": "fat_man", "coord": [21, 28], "source_event": 2, "source_script": "PewterCity_EventScript_FatMan"}, + { + "name": "bug_catcher", + "coord": [33, 27], + "wander": {"min": [31, 27], "max": [35, 27]}, + "source_event": 3, + "source_script": "PewterCity_EventScript_BugCatcher" + }, + { + "name": "boy", + "coord": [42, 20], + "hide_flag": "FLAG_HIDE_PEWTER_CITY_GYM_GUIDE", + "source_event": 4, + "source_script": "PewterCity_EventScript_GymGuide", + "source_local_id": "LOCALID_PEWTER_GYM_GUIDE" + }, + { + "name": "cut_tree", + "coord": [30, 5], + "hide_flag": "FLAG_TEMP_12", + "source_event": 5, + "source_script": "EventScript_CutTree" + }, + { + "name": "scientist", + "coord": [46, 20], + "hide_flag": "FLAG_HIDE_PEWTER_CITY_RUNNING_SHOES_GUY", + "source_event": 6, + "source_script": "PewterCity_EventScript_RunningShoesAide", + "source_local_id": "LOCALID_PEWTER_AIDE" + } + ] +} diff --git a/data/games/frlg/maps/base/PewterCity_Gym.json b/data/games/frlg/maps/base/PewterCity_Gym.json new file mode 100644 index 0000000..288fc61 --- /dev/null +++ b/data/games/frlg/maps/base/PewterCity_Gym.json @@ -0,0 +1,49 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PewterCity_Gym", + "source": { + "decomp_file": "data/maps/PewterCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "####.....####", + "#############", + "#....#.#....#", + "#...........#", + "#...#...#...#", + "#...........#", + "#..#.#.#.#..#", + "##.........##", + "#...#...#...#", + "##.........##", + "#...........#", + "#...S...S...#", + "#...........#", + "#...........#", + "#############" + ], + "points": {"brock_front": [6, 6], "warp_1": [6, 14]}, + "warps": [ + {"coord": [5, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"}, + {"coord": [6, 14], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_2"}, + {"coord": [7, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "brock", "coord": [6, 5], "source_event": 0, "source_script": "PewterCity_Gym_EventScript_Brock"}, + { + "name": "camper", + "coord": [3, 8], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "PewterCity_Gym_EventScript_Liam" + }, + {"name": "gym_guy", "coord": [7, 12], "source_event": 2, "source_script": "PewterCity_Gym_EventScript_GymGuy"} + ] +} diff --git a/data/games/frlg/maps/base/PewterCity_Mart.json b/data/games/frlg/maps/base/PewterCity_Mart.json new file mode 100644 index 0000000..633e19a --- /dev/null +++ b/data/games/frlg/maps/base/PewterCity_Mart.json @@ -0,0 +1,35 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PewterCity_Mart", + "source": { + "decomp_file": "data/maps/PewterCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_3"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "youngster", "coord": [8, 2], "source_event": 0, "source_script": "PewterCity_Mart_EventScript_Youngster"}, + {"name": "boy", "coord": [6, 4], "source_event": 1, "source_script": "PewterCity_Mart_EventScript_Boy"}, + {"name": "clerk", "coord": [2, 3], "source_event": 2, "source_script": "PewterCity_Mart_EventScript_Clerk"} + ] +} diff --git a/data/games/frlg/maps/base/PewterCity_Museum_1F.json b/data/games/frlg/maps/base/PewterCity_Museum_1F.json new file mode 100644 index 0000000..1af401a --- /dev/null +++ b/data/games/frlg/maps/base/PewterCity_Museum_1F.json @@ -0,0 +1,76 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PewterCity_Museum_1F", + "source": { + "decomp_file": "data/maps/PewterCity_Museum_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "############################", + "############################", + "...............#............", + "...............#......#....#", + "...####........#...........#", + "...............#............", + "...........#...#...........#", + "...####..###...###.........#", + ".........###.....#..........", + "#........###....##......##..", + "############################" + ], + "points": {"warp_1": [14, 9], "warp_3": [21, 9], "warp_5": [8, 8]}, + "warps": [ + {"coord": [13, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_0"}, + {"coord": [14, 9], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_0"}, + {"coord": [15, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_0"}, + {"coord": [21, 9], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_1"}, + {"coord": [22, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_1"}, + {"coord": [8, 8], "enter": "walk_east", "to_map": "PewterCity_Museum_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "worker_m", + "coord": [16, 5], + "source_event": 0, + "source_script": "PewterCity_Museum_1F_EventScript_Scientist1", + "source_local_id": "LOCALID_MUSEUM_SCIENTIST1" + }, + { + "name": "old_man_1", + "coord": [2, 4], + "source_event": 1, + "source_script": "PewterCity_Museum_1F_EventScript_OldMan" + }, + { + "name": "scientist", + "coord": [21, 3], + "source_event": 2, + "source_script": "PewterCity_Museum_1F_EventScript_OldAmberScientist" + }, + { + "name": "old_amber", + "coord": [22, 3], + "hide_flag": "FLAG_HIDE_OLD_AMBER", + "source_event": 3, + "source_script": "PewterCity_Museum_1F_EventScript_OldAmber", + "source_local_id": "LOCALID_OLD_AMBER" + }, + { + "name": "scientist", + "coord": [26, 4], + "source_event": 4, + "source_script": "PewterCity_Museum_1F_EventScript_Scientist2" + }, + { + "name": "scientist", + "coord": [26, 7], + "source_event": 5, + "source_script": "PewterCity_Museum_1F_EventScript_SeismicTossTutor" + } + ] +} diff --git a/data/games/frlg/maps/base/PewterCity_PokemonCenter_1F.json b/data/games/frlg/maps/base/PewterCity_PokemonCenter_1F.json new file mode 100644 index 0000000..e8f4f73 --- /dev/null +++ b/data/games/frlg/maps/base/PewterCity_PokemonCenter_1F.json @@ -0,0 +1,83 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PewterCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/PewterCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_5"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_5"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_5"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "PewterCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "jigglypuff", + "coord": [2, 2], + "source_event": 0, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Jigglypuff" + }, + { + "name": "gentleman", + "coord": [4, 8], + "source_event": 1, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Gentleman" + }, + { + "name": "nurse", + "coord": [7, 2], + "source_event": 2, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_PEWTER_NURSE" + }, + { + "name": "youngster", + "coord": [1, 2], + "source_event": 3, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Youngster" + }, + {"name": "woman_1", "coord": [13, 2], "source_event": 4, "source_script": "MysteryEventClub_EventScript_Woman"}, + { + "name": "gba_kid", + "coord": [10, 7], + "source_event": 5, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_GBAKid1" + }, + { + "name": "gba_kid", + "coord": [14, 6], + "source_event": 6, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_GBAKid2" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonLeague_AgathasRoom.json b/data/games/frlg/maps/base/PokemonLeague_AgathasRoom.json new file mode 100644 index 0000000..026a6de --- /dev/null +++ b/data/games/frlg/maps/base/PokemonLeague_AgathasRoom.json @@ -0,0 +1,41 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonLeague_AgathasRoom", + "source": { + "decomp_file": "data/maps/PokemonLeague_AgathasRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + "#############", + "#.#.......#.#", + "#...........#", + "#.#.......#.#", + "#.#.......#.#", + "#...........#", + "#.#.......#.#", + "#.#.......#.#", + "#...........#", + "#############", + "#############" + ], + "points": {"warp_0": [6, 12], "warp_1": [6, 2]}, + "warps": [ + {"coord": [6, 12], "enter": "walk_into", "to_map": "PokemonLeague_BrunosRoom", "to_point": "warp_1"}, + {"coord": [6, 2], "enter": "walk_into", "to_map": "PokemonLeague_LancesRoom", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "agatha", + "coord": [6, 5], + "source_event": 0, + "source_script": "PokemonLeague_AgathasRoom_EventScript_Agatha" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonLeague_BrunosRoom.json b/data/games/frlg/maps/base/PokemonLeague_BrunosRoom.json new file mode 100644 index 0000000..e9e4bc7 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonLeague_BrunosRoom.json @@ -0,0 +1,42 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonLeague_BrunosRoom", + "source": { + "decomp_file": "data/maps/PokemonLeague_BrunosRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + "#############", + "#.#.......#.#", + "#...........#", + "#.#.......#.#", + "#.#.......#.#", + "#...........#", + "#.#.......#.#", + "#.#.......#.#", + "#...........#", + "#############", + "#############" + ], + "points": {"warp_0": [6, 12], "warp_1": [6, 2]}, + "warps": [ + {"coord": [6, 12], "enter": "walk_into", "to_map": "PokemonLeague_LoreleisRoom", "to_point": "warp_1"}, + {"coord": [6, 2], "enter": "walk_into", "to_map": "PokemonLeague_AgathasRoom", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "bruno", + "coord": [6, 5], + "source_event": 0, + "source_script": "PokemonLeague_BrunosRoom_EventScript_Bruno", + "source_local_id": "LOCALID_BRUNO" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonLeague_ChampionsRoom.json b/data/games/frlg/maps/base/PokemonLeague_ChampionsRoom.json new file mode 100644 index 0000000..9e9cac6 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonLeague_ChampionsRoom.json @@ -0,0 +1,78 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonLeague_ChampionsRoom", + "source": { + "decomp_file": "data/maps/PokemonLeague_ChampionsRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#############", + "######.######", + "######.######", + ".............", + ".............", + ".............", + ".............", + ".............", + ".............", + ".............", + ".............", + ".............", + ".............", + "#...........#", + "#####...#####", + "#####...#####", + "#####...#####", + "#####...#####", + "#####...#####", + "#####...#####" + ], + "elevation": [ + "0000000000000", + "0000000000000", + "0000030300000", + "0000033300000", + "0000033300000", + "0000000000000", + "0000000000000", + "0000003000000", + "0000033300000", + "0000033300000", + "0000003000000", + "0000000000000", + "0000000000000", + "0000000000000", + "0000000000000", + "0000000000000", + "0000000000000", + "0000000000000", + "0000000000000", + "0000000000000" + ], + "points": {"warp_0": [6, 19], "warp_1": [6, 2]}, + "warps": [ + {"coord": [6, 19], "enter": "walk_south", "to_map": "PokemonLeague_LancesRoom", "to_point": "warp_1"}, + {"coord": [6, 2], "enter": "cave_entrance", "to_map": "PokemonLeague_HallOfFame", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "blue", + "coord": [6, 8], + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_CHAMPIONS_ROOM_RIVAL" + }, + { + "name": "prof_oak", + "coord": [6, 15], + "hide_flag": "FLAG_HIDE_OAK_IN_CHAMP_ROOM", + "source_event": 1, + "source_script": "0x0", + "source_local_id": "LOCALID_CHAMPIONS_ROOM_PROF_OAK" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonLeague_HallOfFame.json b/data/games/frlg/maps/base/PokemonLeague_HallOfFame.json new file mode 100644 index 0000000..d451cb4 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonLeague_HallOfFame.json @@ -0,0 +1,39 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonLeague_HallOfFame", + "source": { + "decomp_file": "data/maps/PokemonLeague_HallOfFame/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "...........", + "...........", + "...........", + "...........", + "...........", + "...........", + "...........", + "...........", + "...........", + "...........", + "####...####" + ], + "points": {"warp_0": [5, 12]}, + "warps": [{"coord": [5, 12], "enter": "walk_into", "to_map": "PokemonLeague_ChampionsRoom", "to_point": "warp_1"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "prof_oak", + "coord": [6, 4], + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_HALL_OF_FAME_PROF_OAK" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonLeague_LancesRoom.json b/data/games/frlg/maps/base/PokemonLeague_LancesRoom.json new file mode 100644 index 0000000..3c1041f --- /dev/null +++ b/data/games/frlg/maps/base/PokemonLeague_LancesRoom.json @@ -0,0 +1,53 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonLeague_LancesRoom", + "source": { + "decomp_file": "data/maps/PokemonLeague_LancesRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "############################", + "############################", + "############################", + "############################", + "############################", + "############################", + "#.#.......#.################", + "#...........################", + "#.#.......#.################", + "#.#.......#.###............#", + "#...........###............#", + "#.#.......#.###............#", + "#.#.......#.###............#", + "#...........###......#...#.#", + "######.########.....########", + "######.########.....########", + "....................########", + ".#..#...#..#........########", + "....................########", + "....................########", + "....................########", + "##..#...#..#........########", + "############################", + "############################" + ], + "points": {"warp_0": [23, 13], "warp_1": [6, 5]}, + "warps": [ + {"coord": [23, 13], "enter": "walk_into", "to_map": "PokemonLeague_AgathasRoom", "to_point": "warp_1"}, + {"coord": [6, 5], "enter": "walk_into", "to_map": "PokemonLeague_ChampionsRoom", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "lance", + "coord": [6, 8], + "source_event": 0, + "source_script": "PokemonLeague_LancesRoom_EventScript_Lance", + "source_local_id": "LOCALID_LANCE" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonLeague_LoreleisRoom.json b/data/games/frlg/maps/base/PokemonLeague_LoreleisRoom.json new file mode 100644 index 0000000..d9ae0e6 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonLeague_LoreleisRoom.json @@ -0,0 +1,41 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonLeague_LoreleisRoom", + "source": { + "decomp_file": "data/maps/PokemonLeague_LoreleisRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + "#############", + "#.#.......#.#", + "#...........#", + "#.#.......#.#", + "#.#.......#.#", + "#...........#", + "#.#.......#.#", + "#.#.......#.#", + "#...........#", + "#############", + "#############" + ], + "points": {"warp_0": [6, 12], "warp_1": [6, 2]}, + "warps": [ + {"coord": [6, 12], "enter": "walk_into", "to_map": "IndigoPlateau_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [6, 2], "enter": "walk_into", "to_map": "PokemonLeague_BrunosRoom", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "lorelei", + "coord": [6, 5], + "source_event": 0, + "source_script": "PokemonLeague_LoreleisRoom_EventScript_Lorelei" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonMansion_1F.json b/data/games/frlg/maps/base/PokemonMansion_1F.json new file mode 100644 index 0000000..9b72d4b --- /dev/null +++ b/data/games/frlg/maps/base/PokemonMansion_1F.json @@ -0,0 +1,106 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonMansion_1F", + "source": { + "decomp_file": "data/maps/PokemonMansion_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "######################################", + "######################################", + "######################################", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#", + "#~~#~#~###~~~#~~~~~#~#~#~#~~#####~~~~#", + "#~~#~~~###~~~#~~~~~#~#~#~#~~#####~~~##", + "#~~~~~~~~~~~~#~~~~~~~~~~~~~~#####~~~##", + "#~~~~~~~~~~~~#~~~~~~~~~~~~~~#~~~~~~~~#", + "#~~~~~~~~~~~~##~~~####~~~####~~~~~~~~#", + "################~~###########~~~###~~#", + "################~~###########~~~###~~#", + "##############~~~~#~~~~~~~####~~~~~~~#", + "#~~~~~~~~~.###~~~~#~~~~~~~~###~~~~~~~#", + "#~~~~~~~~~~###~~~~#~~~~~~~~~##~~~~~~~#", + "#~~~~~~~~~~~~~~~~~#~~~~~~~~~##~~~~~~~#", + "#~~~~~~~~~~~~~~~~~#~~~~~~~~~##~~~~~~~#", + "#~~~~~~~~~~~~~~~###############~~~####", + "#~~~~~~~~~~~~~~~###############~~~####", + "##~~~~~~~~~~~~~~###############~~~####", + "###~~#~~~~~#~~~##~~#####~~~~~~~~~~~~~#", + "###~~#~~~~~#~~~##~~~~~~#~~~~~~~~~~~~~#", + "###~~#~~~~~#~~~##~~~~~~#~~~~~~~~~~~~~#", + "###~~~~~~~~~~~~~#~~~~~~#~~~~~~~~~~~~~#", + "#~~~~~~~~~~~~~~~#~~~~~~####~~~##~~~###", + "#~~~~#~~~~~#~~~~#~~~~~~###############", + "#~~~~#~~~~~#~~~~#~~###################", + "#~~~~#~~~~~#~~~~#~~~~~~##.~~~~~#~~~~~#", + "#~~~~~~~~~~~~~~~#~~~~~~##~~~~~~#~~~~~#", + "#~~~~~~~~~~~~~~~#~~~~~~~~~~~~~~#~~~~~#", + "#~~~~#~~~~~#~~~~#~~~~~~~~~~~~~~#~~~~~#", + "#~~~~#~~~~~#~~~~#~~~~~~~~~~~~~~#~~~~~#", + "#~~~~#~~~~~#~~~~#~~######~~~~~~#~~~~~#", + "#~~~~~~~.~~~~~~~#~~~~~~~~~~~~~~#~~.~~#", + "######################################" + ], + "points": {"warp_1": [8, 33], "warp_3": [10, 13], "warp_4": [25, 27], "warp_7": [19, 22], "warp_8": [20, 22]}, + "warps": [ + {"coord": [7, 33], "enter": "walk_into", "to_map": "CinnabarIsland", "to_point": "warp_0"}, + {"coord": [8, 33], "enter": "walk_south", "to_map": "CinnabarIsland", "to_point": "warp_0"}, + {"coord": [9, 33], "enter": "walk_into", "to_map": "CinnabarIsland", "to_point": "warp_0"}, + {"coord": [10, 13], "enter": "walk_east", "to_map": "PokemonMansion_2F", "to_point": "warp_2"}, + {"coord": [25, 27], "enter": "walk_west", "to_map": "PokemonMansion_B1F", "to_point": "warp_0"}, + {"coord": [34, 33], "enter": "walk_south", "to_map": "CinnabarIsland", "to_point": "warp_0"}, + {"coord": [35, 34], "enter": "walk_into", "to_map": "CinnabarIsland", "to_point": "warp_0"}, + {"coord": [19, 22], "enter": "walk_into", "to_map": "PokemonMansion_3F", "to_point": "warp_3"}, + {"coord": [20, 22], "enter": "walk_into", "to_map": "PokemonMansion_3F", "to_point": "warp_4"}, + {"coord": [11, 13], "enter": "walk_into", "to_map": "PokemonMansion_2F", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "scientist", + "coord": [22, 24], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 0, + "source_script": "PokemonMansion_1F_EventScript_Ted" + }, + { + "name": "youngster", + "coord": [8, 8], + "wander": {"min": [6, 8], "max": [10, 8]}, + "trainer": {"sight": 1, "looks": ["west", "east"]}, + "source_event": 4, + "source_script": "PokemonMansion_1F_EventScript_Johnson" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [29, 32], + "source_event": 1, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_1F_CARBOS", + "source_script": "PokemonMansion_1F_EventScript_ItemCarbos", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [22, 6], + "source_event": 2, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_1F_ESCAPE_ROPE", + "source_script": "PokemonMansion_1F_EventScript_ItemEscapeRope", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [27, 15], + "source_event": 3, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_1F_PROTEIN", + "source_script": "PokemonMansion_1F_EventScript_ItemProtein", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonMansion_2F.json b/data/games/frlg/maps/base/PokemonMansion_2F.json new file mode 100644 index 0000000..93139ae --- /dev/null +++ b/data/games/frlg/maps/base/PokemonMansion_2F.json @@ -0,0 +1,95 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonMansion_2F", + "source": { + "decomp_file": "data/maps/PokemonMansion_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "tiles": [ + "######################################", + "######################################", + "######################################", + "#~~##~~~~.###~~~~~~~~#~~~~~~~~~~~~~~~#", + "#~~##~~~~~###~~~~~~~~#~~~###~~~~~~~~~#", + "#~#~~~~~~~~~#~~~~~~~~#~~~###~~~~~~~~~#", + "##~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~~~#", + "#~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~###~~#", + "#~~~~~~~~~~~~~~~~~~~~###~~~####~###~~#", + "#~~~~~~~~~~~#~~~~~~~~###~~~########~~#", + "#~~~~~~~~~~~###~~~~~~###~~~###########", + "###############~~~~~~~~~~~~~~~~~~~~~~#", + "###########.##~~~~~~~~~~~~~~~~~~~~~~~#", + "#############~~~~~######~~~###########", + "#~~~##.~~.###~~~~~####################", + "#~~~##~~~~###~~~~~####################", + "#~#~~~~~~~~~#~~~~~#~~~~~~~~~~##~~~~~~#", + "#~~~~~~~~~~~~~~~~~#~~~~~~~~~~##~~~~~~#", + "#~~~~~~~~~~~~~~~~~#~~~~~~~~~~#~~~~~~~#", + "#######~~~~~~~~~##########~###~~~#####", + "#######~~~#~~~~~#############~~~~###.#", + "#######~~##~~~~~##########~~~~~~~#####", + "#~~~~~~~~####~~~#~~######~~~~~~~~~.###", + "#~~~~~~~~~###~~~#~~######~~~~~~~~~~###", + "#~~~~~~~~~###~~~#~~###################", + "#~~~~~~~~~##~~~~#~~###################", + "###########~~~~~#~~###################", + "###########~~~~~#~~###################", + "###########~~~~~#~~###################", + "#~~~~~~~~~#~~~~~#~~###################", + "#~~~~~~~~~#~~~~~~~~###################", + "#~######~~#~~~~~~~~###################", + "#~######~~#~~~~~~~~###################", + "#~~~~~~~~~#~~~~~######################", + "#~~~~~~~~~#~~~~~######################", + "######################################", + "######################################", + "######################################" + ], + "points": {"warp_0": [9, 3], "warp_1": [34, 22], "warp_2": [6, 14], "warp_3": [9, 14], "warp_4": [27, 17]}, + "warps": [ + {"coord": [9, 3], "enter": "walk_east", "to_map": "PokemonMansion_3F", "to_point": "warp_0"}, + {"coord": [34, 22], "enter": "walk_east", "to_map": "PokemonMansion_3F", "to_point": "warp_1"}, + {"coord": [6, 14], "enter": "walk_west", "to_map": "PokemonMansion_1F", "to_point": "warp_3"}, + {"coord": [9, 14], "enter": "walk_east", "to_map": "PokemonMansion_3F", "to_point": "warp_2"}, + {"coord": [27, 17], "enter": "walk_into", "to_map": "PokemonMansion_3F", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "poke_maniac", + "coord": [5, 23], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "PokemonMansion_2F_EventScript_Arnie" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [36, 8], + "source_event": 1, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_2F_CALCIUM", + "source_script": "PokemonMansion_2F_EventScript_ItemCalcium", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [18, 23], + "source_event": 2, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_2F_ZINC", + "source_script": "PokemonMansion_2F_EventScript_ItemZinc", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [35, 17], + "source_event": 3, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_2F_HP_UP", + "source_script": "PokemonMansion_2F_EventScript_ItemHPUp", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonMansion_3F.json b/data/games/frlg/maps/base/PokemonMansion_3F.json new file mode 100644 index 0000000..197562f --- /dev/null +++ b/data/games/frlg/maps/base/PokemonMansion_3F.json @@ -0,0 +1,103 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonMansion_3F", + "source": { + "decomp_file": "data/maps/PokemonMansion_3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "######################################", + "######################################", + "######################################", + "#~~~~~##.~~~~~~~###~~#~~~~~~~#~~~#~~~#", + "#~~~~~##~~~~~~~~~##~~#~~~~~~~#~~~~#~~#", + "##~~~~~~~~~~#~~~~##~~#~~###~~#~~~~##~#", + "###~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###", + "###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#", + "########~######~~~~~~~~~~~~~~~~~~~~~~#", + "###############~~~~~~#~~~~~~~~~~~~~~~#", + "########~########~~~######~###~#######", + "#~###~~~~##.~~########################", + "#~~##~~~~##~~~############~~~~~#######", + "#~~#~~~~~~~~~~##~~~~~~~~~~~~~~~~~~~~~#", + "#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~#", + "#~~~~~~~~~~~~~####~~~##~~##~~#########", + "#~~~~~###~~~~~####~~~##~~##~~#########", + "####~~###~~~~#####~~~##~~##~~#########", + "####~~~~~~~~######HHH##HH##~~~~~##.~~#", + "#~~~~~~~~~~################~~~~~##~~~#", + "#~~~~~~~~~~~~~#############~~~~~~~~~~#", + "#~~~~~~~~~~~~~#############~~~~~~~~~~#", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################", + "######################################" + ], + "points": { + "warp_0": [8, 3], + "warp_1": [34, 18], + "warp_2": [11, 11], + "warp_3": [18, 18], + "warp_4": [19, 18], + "warp_5": [23, 18] + }, + "warps": [ + {"coord": [8, 3], "enter": "walk_west", "to_map": "PokemonMansion_2F", "to_point": "warp_0"}, + {"coord": [34, 18], "enter": "walk_west", "to_map": "PokemonMansion_2F", "to_point": "warp_1"}, + {"coord": [11, 11], "enter": "walk_west", "to_map": "PokemonMansion_2F", "to_point": "warp_3"}, + {"coord": [18, 18], "enter": "step_on", "to_map": "PokemonMansion_1F", "to_point": "warp_7"}, + {"coord": [19, 18], "enter": "step_on", "to_map": "PokemonMansion_1F", "to_point": "warp_8"}, + {"coord": [23, 18], "enter": "step_on", "to_map": "PokemonMansion_2F", "to_point": "warp_4"}, + {"coord": [20, 18], "enter": "step_on", "to_map": "PokemonMansion_1F", "to_point": "warp_8"}, + {"coord": [24, 18], "enter": "step_on", "to_map": "PokemonMansion_2F", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "poke_maniac", + "coord": [7, 13], + "wander": {"min": [6, 12], "max": [8, 14]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "PokemonMansion_3F_EventScript_Simon" + }, + { + "name": "scientist", + "coord": [22, 13], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 1, + "source_script": "PokemonMansion_3F_EventScript_Braydon" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [9, 19], + "source_event": 2, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_3F_MAX_POTION", + "source_script": "PokemonMansion_3F_EventScript_ItemMaxPotion", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [32, 6], + "source_event": 3, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_3F_IRON", + "source_script": "PokemonMansion_3F_EventScript_ItemIron", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonMansion_B1F.json b/data/games/frlg/maps/base/PokemonMansion_B1F.json new file mode 100644 index 0000000..cbdd396 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonMansion_B1F.json @@ -0,0 +1,103 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonMansion_B1F", + "source": { + "decomp_file": "data/maps/PokemonMansion_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "tiles": [ + "######################################", + "######################################", + "######################################", + "#~~~~~~~~~~~#~~~~~~~~~~~~#~~~~~~~~~~~#", + "#~~~~~~~~~~~#~~~~~~~~~~~~#~~~~~~~~~~~#", + "#~~~~~~~~~~~#~~~~~~~~~~~~#~#~~~~~~~~~#", + "#~~~~~~~~~~~#####~~~######~~~~~~~~~~~#", + "#~~~~###~~~~#####~~~##########~~~~####", + "#~~~~###~~~~#####~~~##########~~~~####", + "#~~~~~~~~~~~#~~~~~~~~~~~~#####~~~~####", + "#~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~#", + "#~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~#", + "#~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~#", + "#~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~#", + "#####~~~#######################~~~~~~#", + "#####~~~#######################~~~~~~#", + "#####~~~#######################~~~~~~#", + "#~~~~~~~~~~~#~~~~~~~~~~~~~~~~~#~~~~~~#", + "#~###~~~###~#~~~~~~~~~~~~~~~~~#~~~~~~#", + "#~~~~~~~~~~~#~~~~~~~~~~~~~~~~~###~~~##", + "#~~~~~~~~~~~#~~~~~~~~~~~~~~~~~###~~~##", + "#~###~~~###~#~~~####~~~####~~~###~~~##", + "#~~~~~~~~~~~#~~~###########~~~~~~~~~~#", + "#############~~~###########~~~~~~~~~~#", + "#############~~~#~~~~~~~~~#~~~~~~~~~~#", + "#############~~~#~~~~~~~~~#~~~~~~~~~~#", + "#~~~~~~~~~~~~~~~#~~~~~~~~~#~~~~~~#####", + "#~~~~~~~~~~~~~~~#~~~###~~~#~~~~~~###.#", + "#~~~~~~~~~~~~~~~~~~~###~~~#~~~~~~#####", + "#~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~~~~.###", + "#~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~###", + "#~~~~~~~~~~~~~~~#~~~~~~~~~#~~~~~~~~~~#", + "######################################", + "######################################", + "######################################" + ], + "points": {"warp_0": [34, 29]}, + "warps": [{"coord": [34, 29], "enter": "walk_east", "to_map": "PokemonMansion_1F", "to_point": "warp_4"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "poke_maniac", + "coord": [20, 25], + "wander": {"min": [19, 24], "max": [21, 26]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "PokemonMansion_B1F_EventScript_Lewis" + }, + { + "name": "scientist", + "coord": [34, 13], + "facing": "south", + "trainer": {"sight": 6}, + "source_event": 2, + "source_script": "PokemonMansion_B1F_EventScript_Ivan" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [6, 21], + "source_event": 0, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_B1F_TM22", + "source_script": "PokemonMansion_B1F_EventScript_ItemTM22", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [23, 4], + "source_event": 3, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_B1F_TM14", + "source_script": "PokemonMansion_B1F_EventScript_ItemTM14", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [2, 29], + "source_event": 4, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_B1F_FULL_RESTORE", + "source_script": "PokemonMansion_B1F_EventScript_ItemFullRestore", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [5, 7], + "source_event": 5, + "hide_flag": "FLAG_HIDE_POKEMON_MANSION_B1F_SECRET_KEY", + "source_script": "PokemonMansion_B1F_EventScript_ItemSecretKey", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonTower_1F.json b/data/games/frlg/maps/base/PokemonTower_1F.json new file mode 100644 index 0000000..644ee00 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonTower_1F.json @@ -0,0 +1,61 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonTower_1F", + "source": { + "decomp_file": "data/maps/PokemonTower_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "########################", + "########################", + "#########.....##########", + "#######.........########", + "#####.............######", + "####...............#####", + "###.................####", + "###.................####", + "##.................#####", + "##.................#####", + "##.................#####", + "##...................###", + "##.............#########", + "###............#....####", + "###............#....####", + "####...........#...#####", + "######.........#.#######", + "#########.....##########", + "##########...###########", + "########################" + ], + "points": {"warp_1": [11, 18], "warp_3": [18, 9]}, + "warps": [ + {"coord": [10, 19], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_0"}, + {"coord": [11, 18], "enter": "walk_south", "to_map": "LavenderTown", "to_point": "warp_0"}, + {"coord": [12, 19], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_0"}, + {"coord": [18, 9], "enter": "walk_east", "to_map": "PokemonTower_2F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "worker_f", "coord": [18, 13], "source_event": 0, "source_script": "PokemonTower_1F_EventScript_WorkerF"}, + {"name": "channeler", "coord": [18, 7], "source_event": 1, "source_script": "PokemonTower_1F_EventScript_Channeler"}, + {"name": "woman_2", "coord": [15, 6], "source_event": 2, "source_script": "PokemonTower_1F_EventScript_Woman1"}, + { + "name": "woman_3", + "coord": [7, 8], + "wander": {"min": [6, 7], "max": [8, 9]}, + "source_event": 3, + "source_script": "PokemonTower_1F_EventScript_Woman2" + }, + { + "name": "balding_man", + "coord": [8, 12], + "wander": {"min": [6, 10], "max": [10, 14]}, + "source_event": 4, + "source_script": "PokemonTower_1F_EventScript_BaldingMan" + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonTower_2F.json b/data/games/frlg/maps/base/PokemonTower_2F.json new file mode 100644 index 0000000..0797963 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonTower_2F.json @@ -0,0 +1,51 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonTower_2F", + "source": { + "decomp_file": "data/maps/PokemonTower_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "########################", + "########################", + "########################", + "#########.......########", + "#########.........######", + "########...........#####", + "###.................####", + "###....#########....####", + "####...###.........#####", + "####.#####...#####.#####", + "####.#####...#####.#####", + "####...###.........#####", + "##.....###...........###", + "###.#########.......####", + "#############..####.####", + "####...............#####", + "######...........#######", + "########################", + "########################", + "########################" + ], + "points": {"warp_0": [4, 10], "warp_1": [18, 10]}, + "warps": [ + {"coord": [4, 10], "enter": "walk_west", "to_map": "PokemonTower_3F", "to_point": "warp_0"}, + {"coord": [18, 10], "enter": "walk_east", "to_map": "PokemonTower_1F", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "blue", + "coord": [16, 5], + "hide_flag": "FLAG_HIDE_TOWER_RIVAL", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_POKEMON_TOWER_RIVAL" + }, + {"name": "channeler", "coord": [3, 7], "source_event": 1, "source_script": "PokemonTower_2F_EventScript_Channeler"} + ] +} diff --git a/data/games/frlg/maps/base/PokemonTower_3F.json b/data/games/frlg/maps/base/PokemonTower_3F.json new file mode 100644 index 0000000..bfe28e2 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonTower_3F.json @@ -0,0 +1,75 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonTower_3F", + "source": { + "decomp_file": "data/maps/PokemonTower_3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "########################", + "########################", + "#########~~~~~##########", + "#########~~~~~~~########", + "#########~~~~~~~~~######", + "####~~~~~~~~~~~~~~~#####", + "###~~~#############~####", + "###~~~#~~~~~~~~~~~~~####", + "##~~~~#~~~~~~~~~~#~#####", + "####~~#~~~###~~~#~~#####", + "####.~#~~~###~~~#~.#####", + "####~~#~~~~~~~~~#~~#####", + "##~~~~#~~~~~~~~~#~~#####", + "###~~~#~~~#######~######", + "###~~~~~~~~~~~~~~~~~####", + "#######~~~~~~~~~~#######", + "#######~~~~~~~~~~#######", + "########################", + "########################", + "########################" + ], + "points": {"warp_0": [4, 10], "warp_1": [18, 10]}, + "warps": [ + {"coord": [4, 10], "enter": "walk_west", "to_map": "PokemonTower_2F", "to_point": "warp_0"}, + {"coord": [18, 10], "enter": "walk_east", "to_map": "PokemonTower_4F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "channeler", + "coord": [10, 14], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "PokemonTower_3F_EventScript_Patricia" + }, + { + "name": "channeler", + "coord": [9, 9], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "PokemonTower_3F_EventScript_Carly" + }, + { + "name": "channeler", + "coord": [12, 4], + "trainer": {"sight": 2, "looks": ["south", "north"]}, + "source_event": 2, + "source_script": "PokemonTower_3F_EventScript_Hope" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [13, 2], + "source_event": 3, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_3F_ESCAPE_ROPE", + "source_script": "PokemonTower_3F_EventScript_ItemEscapeRope", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonTower_4F.json b/data/games/frlg/maps/base/PokemonTower_4F.json new file mode 100644 index 0000000..40cd8dc --- /dev/null +++ b/data/games/frlg/maps/base/PokemonTower_4F.json @@ -0,0 +1,92 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonTower_4F", + "source": { + "decomp_file": "data/maps/PokemonTower_4F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "########################", + "########################", + "#########~~~~~##########", + "#######~~~~~~~~~########", + "#####~~~~~#~~~##########", + "####~~###~#~##~~~~######", + "###~~~~~~~#~~~~~##~~####", + "###~~~###~~####~~~~~####", + "####~~~~~~#~~~~~~~~#####", + "####~~~~~~#~~~~~~~~#####", + "####.~~###~~###~~~.#####", + "####~~~#~~~#~~~~~~~#####", + "##~~~~~###~~###~~#######", + "###~~#~~~~~~~~~~~~~~####", + "###~~~#~##~~~####~~~####", + "####~~~~~~~#~~~~~~~#####", + "#########~~~##~~~#######", + "###########~~~##########", + "########################", + "########################" + ], + "points": {"warp_0": [4, 10], "warp_1": [18, 10]}, + "warps": [ + {"coord": [4, 10], "enter": "walk_west", "to_map": "PokemonTower_5F", "to_point": "warp_0"}, + {"coord": [18, 10], "enter": "walk_east", "to_map": "PokemonTower_3F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "channeler", + "coord": [17, 7], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "PokemonTower_4F_EventScript_Laurel" + }, + { + "name": "channeler", + "coord": [15, 13], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 1, + "source_script": "PokemonTower_4F_EventScript_Jody" + }, + { + "name": "channeler", + "coord": [4, 12], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "PokemonTower_4F_EventScript_Paula" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [12, 11], + "source_event": 3, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_4F_ELIXIR", + "source_script": "PokemonTower_4F_EventScript_ItemElixir", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [8, 11], + "source_event": 4, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_4F_AWAKENING", + "source_script": "PokemonTower_4F_EventScript_ItemAwakening", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [11, 16], + "source_event": 5, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_4F_GREAT_BALL", + "source_script": "PokemonTower_4F_EventScript_ItemGreatBall", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonTower_5F.json b/data/games/frlg/maps/base/PokemonTower_5F.json new file mode 100644 index 0000000..ab45704 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonTower_5F.json @@ -0,0 +1,91 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonTower_5F", + "source": { + "decomp_file": "data/maps/PokemonTower_5F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "########################", + "########################", + "#########~~~~~##########", + "#######~~~~~~~~~########", + "#####~~####~~###~~######", + "####~~##~~~~~~~###~#####", + "###~~~~~~~~~~~~~~~~~####", + "###~~~~~#####~~~~~~~####", + "##~~~###~~...~~###~#####", + "####~###~~...~~###~#####", + "####.###~~...~~###.#####", + "####~#~~~~~~~##~~~~#####", + "##~~~#~~~~###~~~~~~~~###", + "###~~##~~~~~~~~~~#######", + "###~~##~~~~~~~~~#~~~####", + "####~~####~~~###~~~#####", + "######~~~~~~~~~~~#######", + "#########~~~~~##########", + "########################", + "########################" + ], + "points": {"warp_0": [4, 10], "warp_1": [18, 10]}, + "warps": [ + {"coord": [4, 10], "enter": "walk_west", "to_map": "PokemonTower_4F", "to_point": "warp_0"}, + {"coord": [18, 10], "enter": "walk_east", "to_map": "PokemonTower_6F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "channeler", + "coord": [11, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "PokemonTower_5F_EventScript_Ruth" + }, + { + "name": "channeler", + "coord": [19, 7], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "PokemonTower_5F_EventScript_Tammy" + }, + { + "name": "channeler", + "coord": [7, 12], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "PokemonTower_5F_EventScript_Karina" + }, + { + "name": "channeler", + "coord": [11, 16], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "PokemonTower_5F_EventScript_Janae" + }, + {"name": "channeler", "coord": [12, 8], "source_event": 4, "source_script": "PokemonTower_5F_EventScript_Channeler"} + ], + "items": [ + { + "name": "item_ball", + "coord": [6, 16], + "source_event": 5, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_5F_NUGGET", + "source_script": "PokemonTower_5F_EventScript_ItemNugget", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [11, 9], + "source_event": 6, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_5F_CLEANSE_TAG", + "source_script": "PokemonTower_5F_EventScript_ItemCleanseTag", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonTower_6F.json b/data/games/frlg/maps/base/PokemonTower_6F.json new file mode 100644 index 0000000..e8c4b9e --- /dev/null +++ b/data/games/frlg/maps/base/PokemonTower_6F.json @@ -0,0 +1,84 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonTower_6F", + "source": { + "decomp_file": "data/maps/PokemonTower_6F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "########################", + "########################", + "########################", + "#######~~~~~~~~~########", + "######~~~~~~~~~~~~######", + "#####~####~~~##~~~######", + "###~~~~~~~~~~##~~~~#####", + "###~~~~~~~~~~##~~#######", + "##~~~~~~~~~~~##~~~~~~###", + "#####~~#~~~~~##~~~~#####", + "#####~~######~~~~~.#####", + "##~~~~~~#####~~~~~~#####", + "##~~~~~~~~~~~####~##~###", + "#####~~~###~~~~##~~#####", + "###~~~~~###~~####~######", + "#####~#####~~##~~~~#####", + "######~~###.~##~~#######", + "###########~############", + "########################", + "########################" + ], + "points": {"warp_0": [11, 16], "warp_1": [18, 10]}, + "warps": [ + {"coord": [11, 16], "enter": "walk_west", "to_map": "PokemonTower_7F", "to_point": "warp_0"}, + {"coord": [18, 10], "enter": "walk_east", "to_map": "PokemonTower_5F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "channeler", + "coord": [13, 10], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "PokemonTower_6F_EventScript_Angelica" + }, + { + "name": "channeler", + "coord": [18, 6], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "PokemonTower_6F_EventScript_Jennifer" + }, + { + "name": "channeler", + "coord": [9, 6], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 2, + "source_script": "PokemonTower_6F_EventScript_Emilia" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [5, 15], + "source_event": 3, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_6F_RARE_CANDY", + "source_script": "PokemonTower_6F_EventScript_ItemRareCandy", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [15, 15], + "source_event": 4, + "hide_flag": "FLAG_HIDE_POKEMON_TOWER_6F_X_ACCURACY", + "source_script": "PokemonTower_6F_EventScript_ItemXAccuracy", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/PokemonTower_7F.json b/data/games/frlg/maps/base/PokemonTower_7F.json new file mode 100644 index 0000000..7c72731 --- /dev/null +++ b/data/games/frlg/maps/base/PokemonTower_7F.json @@ -0,0 +1,76 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "PokemonTower_7F", + "source": { + "decomp_file": "data/maps/PokemonTower_7F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "########################", + "########################", + "#########~###~##########", + "#######~~#~~~#~~########", + "#####~~###~~~###~~######", + "####~####~~~~~####~#####", + "###~#####~~~~~#####~####", + "#########~~~~~##########", + "##~######~~~~~######~###", + "#########~~~~~##########", + "#########~~~~~##########", + "#########~~~~~##########", + "##########~~~#######~###", + "##########~~~###########", + "###~######~~~######~####", + "####~######~~~####~#####", + "###########.~~##########", + "###########~~~##########", + "########################", + "########################" + ], + "points": {"warp_0": [11, 16]}, + "warps": [{"coord": [11, 16], "enter": "walk_west", "to_map": "PokemonTower_6F", "to_point": "warp_0"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "mr_fuji", + "coord": [11, 4], + "hide_flag": "FLAG_HIDE_TOWER_FUJI", + "source_event": 0, + "source_script": "PokemonTower_7F_EventScript_MrFuji" + }, + { + "name": "rocket_m", + "coord": [9, 10], + "facing": "east", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_TOWER_ROCKET_1", + "source_event": 1, + "source_script": "PokemonTower_7F_EventScript_Grunt1", + "source_local_id": "LOCALID_POKEMON_TOWER_GRUNT1" + }, + { + "name": "rocket_m", + "coord": [13, 8], + "facing": "west", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_TOWER_ROCKET_2", + "source_event": 2, + "source_script": "PokemonTower_7F_EventScript_Grunt2", + "source_local_id": "LOCALID_POKEMON_TOWER_GRUNT2" + }, + { + "name": "rocket_m", + "coord": [9, 6], + "facing": "east", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_TOWER_ROCKET_3", + "source_event": 3, + "source_script": "PokemonTower_7F_EventScript_Grunt3", + "source_local_id": "LOCALID_POKEMON_TOWER_GRUNT3" + } + ] +} diff --git a/data/games/frlg/maps/base/RockTunnel_1F.json b/data/games/frlg/maps/base/RockTunnel_1F.json new file mode 100644 index 0000000..de54d57 --- /dev/null +++ b/data/games/frlg/maps/base/RockTunnel_1F.json @@ -0,0 +1,166 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "RockTunnel_1F", + "source": { + "decomp_file": "data/maps/RockTunnel_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/RockTunnel_1F/map.json", + "events_sha256": "bf89c9e78f7373691783428c0143b6ecaa52be67edf508859ec175c79701a468", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "~~#####################~~~~~~~~~~~~~~~~~~######~", + "~~#~~~################~~~~~~~~~~~~~~~~~~~###~~#~", + "~~#~.~~#########~.~~~#~~~~~~~~~~~~~~~~~~~#~~~.#~", + "~~#~~~~~########~~~~~###################~#~~~~#~", + "~~#~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", + "###~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", + "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", + "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", + "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", + "#~~~~~~~~~~~############~~~~##############~~~~#~", + "#~~~~~###~~~############~~~~##############~~~~#~", + "#~~~~~###~~~~###########~~~~##############~~~~#~", + "#~~~~~###~~~~#####~~~###~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~~####~~~###~~~~.###~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~####~~~~###~~~~~#####~~~~~~~~~~~~~~~~~~~##~", + "#~~~~~####~~~###~~~~~#####~#~~~~~~~~~~~~~~#####~", + "#~~~~####~~~~~~~~~~~~##########################~", + "#~~~~~###~~~~~~~~~~~~##########################~", + "#~~~~~###~~~~~~~~~~~~##########################~", + "#~~~~####~~~~~~~~~~~~~~~~#####~~~#~~#####~~~###~", + "#~~~~~###~~~~~~~~~~~~~~~~####~~~~~~~####~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~.#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~####~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~#########~~~~~~~~###~~~~~~~#~", + "############################~~~~~~~~###~~~~~~~#~", + "############################~~~~~~~~###~~~~~~~#~", + "############################~~~~~~~~###~~~~~~##~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~#~#~", + "############~~~~~~~~~~~########~~~~~~~~~~~~####~", + "############~~S~~~~~~~~########~~~~~~~~~~~~##~#~", + "############~~~~~~~#~~~##########~~~~~~~~~~~~~#~", + "############~~~~~~~~~~~########~###~~~~~~~~~~~#~", + "############~#~~~~~~#~~########################~", + "############~~~#~~.~~#~########################~", + "###############################################~", + "################################################" + ], + "points": { + "warp_0": [17, 2], + "warp_1": [45, 2], + "warp_2": [4, 2], + "warp_3": [20, 13], + "warp_4": [45, 21], + "warp_5": [18, 37] + }, + "warps": [ + {"coord": [17, 2], "enter": "step_on", "to_map": "Route10", "to_point": "warp_0"}, + {"coord": [45, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_0"}, + {"coord": [4, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_1"}, + {"coord": [20, 13], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_2"}, + {"coord": [45, 21], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_3"}, + {"coord": [18, 37], "enter": "walk_south", "to_map": "Route10", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "picnicker", + "coord": [26, 28], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "RockTunnel_1F_EventScript_Dana" + }, + { + "name": "picnicker", + "coord": [39, 27], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "RockTunnel_1F_EventScript_Ariana" + }, + { + "name": "picnicker", + "coord": [45, 24], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 2, + "source_script": "RockTunnel_1F_EventScript_Leah" + }, + { + "name": "hiker", + "coord": [20, 17], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 3, + "source_script": "RockTunnel_1F_EventScript_Lucas" + }, + { + "name": "hiker", + "coord": [5, 20], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 4, + "source_script": "RockTunnel_1F_EventScript_Oliver" + }, + { + "name": "hiker", + "coord": [7, 5], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 5, + "source_script": "RockTunnel_1F_EventScript_Lenny" + }, + { + "name": "poke_maniac", + "coord": [27, 10], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 6, + "source_script": "RockTunnel_1F_EventScript_Ashton" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [37, 5], + "source_event": 7, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_REPEL", + "source_script": "RockTunnel_1F_EventScript_ItemRepel", + "item": "repel" + }, + { + "name": "item_ball", + "coord": [33, 22], + "source_event": 8, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_PEARL", + "source_script": "RockTunnel_1F_EventScript_ItemPearl", + "item": "pearl" + }, + { + "name": "item_ball", + "coord": [22, 22], + "source_event": 9, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_ESCAPE_ROPE", + "source_script": "RockTunnel_1F_EventScript_ItemEscapeRope", + "item": "escape_rope" + } + ] +} diff --git a/data/games/frlg/maps/base/RockTunnel_B1F.json b/data/games/frlg/maps/base/RockTunnel_B1F.json new file mode 100644 index 0000000..ff7105b --- /dev/null +++ b/data/games/frlg/maps/base/RockTunnel_B1F.json @@ -0,0 +1,267 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "RockTunnel_B1F", + "source": { + "decomp_file": "data/maps/RockTunnel_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/RockTunnel_B1F/map.json", + "events_sha256": "668c7ede675ec83008984303faafef1d0b4d6ec5f11bcfb852e73a6280ad3cb8", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############################################~", + "###~~###~~~~####~~~~~##~#~~#######~~~~~~~#~####~", + "#~#~~###~~~~#####~~~~~#~~~~#####~#~~~~~~~~~~#~#~", + "#~.~~###~~~~####~~~~~~~~~~~~###~~.~~~~~~~~~~~##~", + "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~~~~~~~##~", + "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~#~~~~~##~", + "#~~~~####~~~###~~~~~###~~~~~###~~~~~######~~~~#~", + "#~~~~###~~~####~~~~~###~~~~~###~~~~#######~~~~#~", + "#~~~~###~~~####~~~~~###########~~~~########~~~#~", + "#~~~~###~~~~###~~~~~###########~~~~########~~~#~", + "#~~~~###~~~####~~~~~###########~~~~~#######~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~####~~~~~~~####~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~.####~~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~########~~~~~~~~~~#~", + "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", + "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", + "#~~~~###~~~~~~~~~~~~##################~~~~~~~##~", + "#~~~~###~~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~~~###~", + "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~#~###~", + "#~~~~####~~~###~~~~~###~~~~~~~#################~", + "##~~~#####~~###~~~~~###~~~~~~~#################~", + "########~~~~###~~~~~###~~~~~~~#################~", + "########~~~~###########~~~~~~~#####~~~~~#~#####~", + "########~~~~###########~~~~~~~####~~~#~~~~~~###~", + "########~~~~###########~~~~~~~###~~~~~#~~~~~###~", + "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~.~~~~~~##~", + "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~~~~~~~~##~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", + "#~~~~~~~~~#####~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", + "###############~~~~##############~~~~~~~~~~~~##~", + "###############~~~###############~~~~~~~~~~~~~#~", + "###############~~~###############~~~~~~~~~~~~~#~", + "#~~~~~~##~#~~~~~~~~~#~~~~####~~##~~~~~~~~~~~#~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##~~~~~~~~~~~~~#~", + "###############################################~" + ], + "points": {"warp_0": [38, 28], "warp_1": [33, 3], "warp_2": [27, 12], "warp_3": [2, 3]}, + "warps": [ + {"coord": [38, 28], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_1"}, + {"coord": [33, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_2"}, + {"coord": [27, 12], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_3"}, + {"coord": [2, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "poke_maniac", + "coord": [2, 6], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "RockTunnel_B1F_EventScript_Cooper" + }, + { + "name": "hiker", + "coord": [5, 11], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "RockTunnel_B1F_EventScript_Dudley" + }, + { + "name": "picnicker", + "coord": [11, 15], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 2, + "source_script": "RockTunnel_B1F_EventScript_Sofia" + }, + { + "name": "hiker", + "coord": [36, 11], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "RockTunnel_B1F_EventScript_Allen" + }, + { + "name": "hiker", + "coord": [41, 5], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "RockTunnel_B1F_EventScript_Eric" + }, + { + "name": "poke_maniac", + "coord": [23, 23], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 5, + "source_script": "RockTunnel_B1F_EventScript_Steve" + }, + { + "name": "picnicker", + "coord": [15, 33], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 6, + "source_script": "RockTunnel_B1F_EventScript_Martha" + }, + { + "name": "poke_maniac", + "coord": [29, 35], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 7, + "source_script": "RockTunnel_B1F_EventScript_Winston" + }, + { + "name": "youngster", + "coord": [2, 29], + "source_event": 8, + "source_script": "RockTunnel_B1F_EventScript_RockSlideTutor" + }, + { + "name": "rock_smash_rock", + "coord": [1, 20], + "hide_flag": "FLAG_TEMP_12", + "source_event": 11, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [1, 22], + "hide_flag": "FLAG_TEMP_13", + "source_event": 12, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [4, 23], + "hide_flag": "FLAG_TEMP_14", + "source_event": 13, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [2, 23], + "hide_flag": "FLAG_TEMP_15", + "source_event": 14, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [39, 26], + "hide_flag": "FLAG_TEMP_16", + "source_event": 15, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [42, 26], + "hide_flag": "FLAG_TEMP_17", + "source_event": 16, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [43, 28], + "hide_flag": "FLAG_TEMP_18", + "source_event": 17, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [45, 30], + "hide_flag": "FLAG_TEMP_19", + "source_event": 18, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [45, 33], + "hide_flag": "FLAG_TEMP_1A", + "source_event": 19, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [25, 1], + "hide_flag": "FLAG_TEMP_1B", + "source_event": 20, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [27, 4], + "hide_flag": "FLAG_TEMP_1C", + "source_event": 21, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [23, 2], + "hide_flag": "FLAG_TEMP_1D", + "source_event": 22, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [26, 2], + "hide_flag": "FLAG_TEMP_1E", + "source_event": 23, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [24, 7], + "hide_flag": "FLAG_TEMP_1F", + "source_event": 24, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [27, 6], + "hide_flag": "FLAG_TEMP_11", + "source_event": 25, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [2, 37], + "source_event": 9, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_REVIVE", + "source_script": "RockTunnel_B1F_EventScript_ItemRevive", + "item": "revive" + }, + { + "name": "item_ball", + "coord": [9, 2], + "source_event": 10, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_MAX_ETHER", + "source_script": "RockTunnel_B1F_EventScript_ItemMaxEther", + "item": "max_ether" + } + ] +} diff --git a/data/games/frlg/maps/base/RocketHideout_B1F.json b/data/games/frlg/maps/base/RocketHideout_B1F.json new file mode 100644 index 0000000..f2f9938 --- /dev/null +++ b/data/games/frlg/maps/base/RocketHideout_B1F.json @@ -0,0 +1,121 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "RocketHideout_B1F", + "source": { + "decomp_file": "data/maps/RocketHideout_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "############################", + "############################", + "############......##########", + "############......##########", + "##########..........########", + "##########..........########", + "##########..........########", + "##########..........########", + "#..........................#", + "#..........................#", + "#..........................#", + "###..#####.......#####...###", + "###..#####.......#####...###", + "#......####.....###........#", + "#......###.......##.######.#", + "#..###..###.....###.######.#", + "#..###..##.......##.######.#", + "##......###.....###........#", + "#.......##.......##........#", + "####################..######", + "####################..######", + "####################..######", + "#...............####..######", + "#...............####..######", + "#...######........##..######", + "#...######........##..##D###", + "#.................##.......#", + "#.................##.......#", + "#............###############", + "#...######...###############", + "#...######......############", + "#...............############", + "#.................##########", + "#.................##########" + ], + "points": {"warp_0": [12, 2], "warp_1": [17, 2], "warp_2": [15, 30]}, + "warps": [ + {"coord": [12, 2], "enter": "walk_west", "to_map": "CeladonCity_GameCorner", "to_point": "warp_3"}, + {"coord": [17, 2], "enter": "walk_east", "to_map": "RocketHideout_B2F", "to_point": "warp_1"}, + {"coord": [15, 30], "enter": "walk_east", "to_map": "RocketHideout_B2F", "to_point": "warp_2"}, + {"coord": [23, 25], "enter": "walk_into", "to_map": "RocketHideout_Elevator", "to_point": "warp_1"}, + {"coord": [24, 25], "enter": "walk_into", "to_map": "RocketHideout_Elevator", "to_point": "warp_1"}, + {"coord": [25, 25], "enter": "walk_into", "to_map": "RocketHideout_Elevator", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [4, 9], + "facing": "east", + "trainer": {"sight": 5}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 0, + "source_script": "RocketHideout_B1F_EventScript_Grunt2" + }, + { + "name": "rocket_m", + "coord": [24, 12], + "facing": "west", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 1, + "source_script": "RocketHideout_B1F_EventScript_Grunt1" + }, + { + "name": "rocket_m", + "coord": [6, 32], + "facing": "east", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 2, + "source_script": "RocketHideout_B1F_EventScript_Grunt4" + }, + { + "name": "rocket_m", + "coord": [10, 22], + "facing": "south", + "trainer": {"sight": 3}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 3, + "source_script": "RocketHideout_B1F_EventScript_Grunt3" + }, + { + "name": "rocket_m", + "coord": [21, 27], + "trainer": {"sight": 3, "looks": ["north", "east"]}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 4, + "source_script": "RocketHideout_B1F_EventScript_Grunt5" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [5, 16], + "source_event": 5, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B1F_ESCAPE_ROPE", + "source_script": "RocketHideout_B1F_EventScript_ItemEscapeRope", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [1, 22], + "source_event": 6, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B1F_HYPER_POTION", + "source_script": "RocketHideout_B1F_EventScript_ItemHyperPotion", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/RocketHideout_B2F.json b/data/games/frlg/maps/base/RocketHideout_B2F.json new file mode 100644 index 0000000..7a33cda --- /dev/null +++ b/data/games/frlg/maps/base/RocketHideout_B2F.json @@ -0,0 +1,88 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "RocketHideout_B2F", + "source": { + "decomp_file": "data/maps/RocketHideout_B2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################", + "################################", + ".....#...........##...####...###", + ".###.#.#.#.#.#..###...#####..###", + ".o.l...l.l.l.######.....##.....#", + "##..#####u#.d...l.........#....#", + ".#.r...o..#u....l..............#", + ".#.##.#u#.#.ro###..............#", + "....#.#.#.#u..#o...............#", + "###.r...d.d####u#..............#", + "...r...u.u.##o..################", + ".##u###.o.r.r.du################", + "....#####r.r.u..###.....########", + ".###...#..d.l.ou###.....########", + ".o.l...l.u..l##.###.......######", + ".##.#o#.#.o...#...........######", + ".#....#.#####.#...........##D###", + "..#.#u#.d...l.#................#", + "..#.#.#u....l.#..##............#", + "..#.#u#.o.#####.################", + "......###r...o..################", + "...#############################" + ], + "points": {"warp_0": [21, 2], "warp_1": [28, 2], "warp_2": [23, 12]}, + "warps": [ + {"coord": [21, 2], "enter": "walk_east", "to_map": "RocketHideout_B3F", "to_point": "warp_0"}, + {"coord": [28, 2], "enter": "walk_east", "to_map": "RocketHideout_B1F", "to_point": "warp_1"}, + {"coord": [23, 12], "enter": "walk_east", "to_map": "RocketHideout_B1F", "to_point": "warp_2"}, + {"coord": [28, 16], "enter": "walk_into", "to_map": "RocketHideout_Elevator", "to_point": "warp_1"}, + {"coord": [29, 16], "enter": "walk_into", "to_map": "RocketHideout_Elevator", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [20, 6], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 0, + "source_script": "RocketHideout_B2F_EventScript_Grunt" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [15, 3], + "source_event": 1, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B2F_X_SPEED", + "source_script": "RocketHideout_B2F_EventScript_ItemXSpeed", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [2, 5], + "source_event": 2, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B2F_MOON_STONE", + "source_script": "RocketHideout_B2F_EventScript_ItemMoonStone", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [5, 7], + "source_event": 3, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B2F_TM12", + "source_script": "RocketHideout_B2F_EventScript_ItemTM12", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [0, 14], + "source_event": 4, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B2F_SUPER_POTION", + "source_script": "RocketHideout_B2F_EventScript_ItemSuperPotion", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/RocketHideout_B3F.json b/data/games/frlg/maps/base/RocketHideout_B3F.json new file mode 100644 index 0000000..284ffc5 --- /dev/null +++ b/data/games/frlg/maps/base/RocketHideout_B3F.json @@ -0,0 +1,92 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "RocketHideout_B3F", + "source": { + "decomp_file": "data/maps/RocketHideout_B3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "######################", + "######################", + "###................###", + "#..................###", + "#....................#", + "###########..######..#", + "###########..######..#", + "#............##......#", + "#####..#####.##......#", + "#.o.l.r.o....##......#", + "##.#.###.d#####..#####", + "#.r...o.u.#####..#####", + "#.##.#.#..##.##...##.#", + "#.##.#r...o..##......#", + "#....r.r.ou####......#", + "#.##r.u.##.###########", + "#..r...d##...#########", + "#.r...u.##...#########", + "####u##.##...##..#####", + "#....#..##...##..#####", + "#......o##.......#####", + "#.....####.......#####", + "#.......##.......#####", + "####..####.......#####", + "####..####.......#####", + "#................#####", + "#................#####" + ], + "points": {"warp_0": [18, 2], "warp_1": [15, 18]}, + "warps": [ + {"coord": [18, 2], "enter": "walk_east", "to_map": "RocketHideout_B2F", "to_point": "warp_0"}, + {"coord": [15, 18], "enter": "walk_west", "to_map": "RocketHideout_B4F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [19, 9], + "facing": "north", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 0, + "source_script": "RocketHideout_B3F_EventScript_Grunt2" + }, + { + "name": "rocket_m", + "coord": [2, 20], + "facing": "east", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 1, + "source_script": "RocketHideout_B3F_EventScript_Grunt1" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [12, 12], + "source_event": 2, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B3F_RARE_CANDY", + "source_script": "RocketHideout_B3F_EventScript_ItemRareCandy", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [19, 14], + "source_event": 3, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B3F_TM21", + "source_script": "RocketHideout_B3F_EventScript_ItemTM21", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [14, 24], + "source_event": 4, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B3F_BLACK_GLASSES", + "source_script": "RocketHideout_B3F_EventScript_ItemBlackGlasses", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/RocketHideout_B4F.json b/data/games/frlg/maps/base/RocketHideout_B4F.json new file mode 100644 index 0000000..eb43c2d --- /dev/null +++ b/data/games/frlg/maps/base/RocketHideout_B4F.json @@ -0,0 +1,123 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "RocketHideout_B4F", + "source": { + "decomp_file": "data/maps/RocketHideout_B4F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################", + "########################", + "#.#....#########.##.##.#", + "##.....#########..###..#", + "#.###..#########.#888#.#", + "#####.........###.....##", + "#.............##..###..#", + "#.............###.....##", + "#......##.....##.......#", + "#########.....##.......#", + "#########.....##.......#", + "###....##.....##.......#", + "#......##.....###..#####", + "#..###.##.....###..#####", + "#..###......####.....###", + "#...........####.....###", + "#...........####.......#", + "#.............##.......#", + "################.......#", + "################..######", + "###...............######", + "#.................######", + "#....######.......######", + "#....######.......##D###", + "#...........##.........#", + "#......................#" + ], + "points": {"warp_0": [11, 15]}, + "warps": [ + {"coord": [11, 15], "enter": "walk_east", "to_map": "RocketHideout_B3F", "to_point": "warp_1"}, + {"coord": [20, 23], "enter": "walk_into", "to_map": "RocketHideout_Elevator", "to_point": "warp_1"}, + {"coord": [21, 23], "enter": "walk_into", "to_map": "RocketHideout_Elevator", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "giovanni", + "coord": [19, 4], + "hide_flag": "FLAG_HIDE_HIDEOUT_GIOVANNI", + "source_event": 0, + "source_script": "RocketHideout_B4F_EventScript_Giovanni", + "source_local_id": "LOCALID_HIDEOUT_GIOVANNI" + }, + { + "name": "rocket_m", + "coord": [4, 2], + "facing": "south", + "trainer": {"sight": 1}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 2, + "source_script": "RocketHideout_B4F_EventScript_Grunt1" + }, + { + "name": "rocket_m", + "coord": [19, 14], + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 4, + "source_script": "RocketHideout_B4F_EventScript_Grunt3" + }, + { + "name": "rocket_m", + "coord": [16, 14], + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 5, + "source_script": "RocketHideout_B4F_EventScript_Grunt2" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [20, 5], + "source_event": 1, + "hide_flag": "FLAG_HIDE_SILPH_SCOPE", + "source_script": "RocketHideout_B4F_EventScript_SilphScope", + "source_local_id": "LOCALID_SILPH_SCOPE", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [3, 2], + "source_event": 3, + "hide_flag": "FLAG_HIDE_LIFT_KEY", + "source_script": "RocketHideout_B4F_EventScript_LiftKey", + "source_local_id": "LOCALID_LIFT_KEY", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [1, 6], + "source_event": 6, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B4F_TM49", + "source_script": "RocketHideout_B4F_EventScript_ItemTM49", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [4, 14], + "source_event": 7, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B4F_MAX_ETHER", + "source_script": "RocketHideout_B4F_EventScript_ItemMaxEther", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [6, 23], + "source_event": 8, + "hide_flag": "FLAG_HIDE_ROCKET_HIDEOUT_B4F_CALCIUM", + "source_script": "RocketHideout_B4F_EventScript_ItemCalcium", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/Route1.json b/data/games/frlg/maps/base/Route1.json new file mode 100644 index 0000000..bf307f7 --- /dev/null +++ b/data/games/frlg/maps/base/Route1.json @@ -0,0 +1,75 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route1", + "source": { + "decomp_file": "data/maps/Route1/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "##########....##########", + "##########....##########", + "##....................##", + "##....................##", + "##......##............##", + "##vvvvvv##vvvvvv......##", + "##......##~~~~~~~~~~~~##", + "##......##~~~~~~~~~~~~##", + "##......##~~~~~~~~~~~~##", + "##......##~~~~~~~~~~~~##", + "##vvvvvv##~~~~~~~~~~~~##", + "##......##............##", + "##....................##", + "##..............~~~~~~##", + "##..............~~~~~~##", + "####vvvvvv######~~~~~~##", + "####......######~~~~~~##", + "##..............~~~~~~##", + "##....................##", + "##....................##", + "##vv.vvvv..vvvvvvvvvvv##", + "##....................##", + "##....................##", + "##....................##", + "##..........~~~~~~....##", + "############~~~~~~....##", + "############~~~~~~vvvv##", + "##..........~~~~~~....##", + "##..........~~~~~~....##", + "##....................##", + "##....................##", + "##vvvv...Svvvvvvvvvvvv##", + "##..~~~~~~~......~~~~~##", + "##..~~~~~~~......~~~~~##", + "##~~~~~~~......~~~~~..##", + "##~~~~~~~...~~.~~~~~..##", + "############~~##########", + "##.........#~~#.......##", + "############~~##########", + "############~~##########" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "ViridianCity", "offset": -12}, + {"side": "south", "to_map": "PalletTown", "offset": 0} + ], + "npcs": [ + { + "name": "clerk", + "coord": [6, 28], + "wander": {"min": [6, 27], "max": [6, 29]}, + "source_event": 0, + "source_script": "Route1_EventScript_MartClerk" + }, + { + "name": "boy", + "coord": [19, 16], + "wander": {"min": [18, 16], "max": [20, 16]}, + "source_event": 1, + "source_script": "Route1_EventScript_Boy" + } + ] +} diff --git a/data/games/frlg/maps/base/Route10.json b/data/games/frlg/maps/base/Route10.json new file mode 100644 index 0000000..f10bf5d --- /dev/null +++ b/data/games/frlg/maps/base/Route10.json @@ -0,0 +1,262 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route10", + "source": { + "decomp_file": "data/maps/Route10/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "########################", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##.................www##", + "####..#############www##", + "##....~~~~~~~~~~~.#www##", + "##....~~~~~~~~~~~.#www##", + "......~~~~~~~~~~~.#www##", + "......~~~~~~~~~~~.#www##", + "......~~~~~~~~~~~.#www##", + "##................#www##", + "##vvvvvvvvvvvvv..##www##", + "##................#www##", + "##................#www##", + "###########.......#www##", + "###########.......#www##", + "################..#www##", + "################..#www##", + "########.#######..#www##", + "##.........SSD##..#www##", + "##..###S##........#www##", + "##................#www##", + "##........#.......#www##", + "##................#www##", + "##........#.......#www##", + "##................#www##", + "##........#.......#www##", + "##................#www##", + "##................#www##", + "###################www##", + "#################..www##", + "#################..www##", + "#################..www##", + "#################..www##", + "#################..www##", + "#.###############..www##", + "#..##############..www##", + "#..##############..www##", + "#.###############..www##", + "#vv####.####.####..www##", + "#............###...www##", + "##....S......###...www##", + "##...........###...www##", + "##.................www##", + "##.................www##", + "##...............wwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "########################", + "########################", + "########################", + "########################", + "########################", + "########################", + "#################.....##", + "########.########.....##", + "###...................##", + "###............S......##", + "###...................##", + "###.........#####.....##", + "##..........#####v.vvv##", + "##...############.....##", + "##...############.....##", + "##vvv############.....##", + "##...############vvvv.##", + "##...############.....##", + "##....................##", + "##....................##", + "##....................##", + "###########...........##", + "###########...........##", + "###########...........##", + "###########vv.##########", + "###########...##########", + "########......##########", + "########......##########", + "########.....###########", + "########.....###########" + ], + "elevation": [ + "000000000000000000000000", + "001111111111111111111100", + "001111111111111111111100", + "001111111111111111111100", + "003333333333333333311100", + "000033000000000000011100", + "003333333333333333011100", + "003333333333333333011100", + "333333333333333333011100", + "333333333333333333011100", + "333333333333333333011100", + "003333333333333333011100", + "000000000000000330011100", + "003333333333333333011100", + "003333333333333333011100", + "000000000003333333011100", + "000000000003333333011100", + "000000000000000033011100", + "000000000000000033011100", + "000000003000000033011100", + "003333333330000033011100", + "003300000033333333011100", + "003333333333333333011100", + "003333333303333333011100", + "003333333333333333011100", + "003333333303333333011100", + "003333333333333333011100", + "003333333303333333011100", + "003333333333333333011100", + "003333333333333333011100", + "000000000000000000011100", + "000000000000000003311100", + "000000000000000003311100", + "000000000000000003311100", + "000000000000000003311100", + "000000000000000003311100", + "030000000000000003311100", + "033000000000000003311100", + "033000000000000003311100", + "030000000000000003311100", + "000000030000300003311100", + "033333333333300033311100", + "003333033333300033311100", + "003333333333300033311100", + "003333333333333333311100", + "003333333333333333311100", + "003333333333333331111100", + "001111111111111111111100", + "001111111111111111111100", + "001111111111111111111100", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000003333300", + "000000003000000003333300", + "000333333333333333333300", + "000333333333333033333300", + "000333333333333333333300", + "000333333333000003333300", + "003333333333000000300000", + "003330000000000003333300", + "003330000000000003333300", + "000000000000000003333300", + "003330000000000000000300", + "003330000000000003333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000000003333333333300", + "000000000003333333333300", + "000000000003333333333300", + "000000000000030000000000", + "000000000003330000000000", + "000000003333330000000000", + "000000003333330000000000", + "000000003333300000000000", + "000000003333300000000000" + ], + "points": {"warp_0": [8, 19], "warp_1": [8, 57], "warp_2": [7, 40], "warp_3": [13, 20], "warp_4": [2, 37]}, + "warps": [ + {"coord": [8, 19], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_0"}, + {"coord": [8, 57], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_5"}, + {"coord": [7, 40], "enter": "cave_entrance", "to_map": "PowerPlant", "to_point": "warp_1"}, + {"coord": [13, 20], "enter": "walk_into", "to_map": "Route10_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [2, 37], "enter": "walk_east", "to_map": "PowerPlant", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "LavenderTown", "offset": 0}, + {"side": "west", "to_map": "Route9", "offset": 0} + ], + "npcs": [ + { + "name": "picnicker", + "coord": [7, 60], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "Route10_EventScript_Carol" + }, + { + "name": "hiker", + "coord": [4, 62], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "Route10_EventScript_Clark" + }, + { + "name": "poke_maniac", + "coord": [15, 70], + "wander": {"min": [13, 70], "max": [17, 70]}, + "trainer": {"sight": 2, "looks": ["west", "east"]}, + "source_event": 2, + "source_script": "Route10_EventScript_Herman" + }, + { + "name": "hiker", + "coord": [4, 68], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 3, + "source_script": "Route10_EventScript_Trent" + }, + { + "name": "poke_maniac", + "coord": [13, 44], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 4, + "source_script": "Route10_EventScript_Mark" + }, + { + "name": "picnicker", + "coord": [9, 27], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "Route10_EventScript_Heidi" + }, + { + "name": "cut_tree", + "coord": [10, 20], + "hide_flag": "FLAG_TEMP_12", + "source_event": 6, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [10, 22], + "hide_flag": "FLAG_TEMP_13", + "source_event": 7, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [10, 24], + "hide_flag": "FLAG_TEMP_14", + "source_event": 8, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [10, 26], + "hide_flag": "FLAG_TEMP_15", + "source_event": 9, + "source_script": "EventScript_CutTree" + } + ] +} diff --git a/data/games/frlg/maps/base/Route10_PokemonCenter_1F.json b/data/games/frlg/maps/base/Route10_PokemonCenter_1F.json new file mode 100644 index 0000000..a95568a --- /dev/null +++ b/data/games/frlg/maps/base/Route10_PokemonCenter_1F.json @@ -0,0 +1,78 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route10_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/Route10_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "Route10", "to_point": "warp_3"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "Route10", "to_point": "warp_3"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "Route10", "to_point": "warp_3"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "Route10_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "Route10_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_ROUTE10_NURSE" + }, + { + "name": "gentleman", + "coord": [9, 4], + "wander": {"min": [8, 4], "max": [10, 4]}, + "source_event": 1, + "source_script": "Route10_PokemonCenter_1F_EventScript_Gentleman" + }, + { + "name": "fat_man", + "coord": [2, 3], + "wander": {"min": [1, 3], "max": [3, 3]}, + "source_event": 2, + "source_script": "Route10_PokemonCenter_1F_EventScript_FatMan" + }, + { + "name": "youngster", + "coord": [14, 6], + "source_event": 3, + "source_script": "Route10_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "scientist", + "coord": [12, 5], + "source_event": 4, + "source_script": "Route10_PokemonCenter_1F_EventScript_Aide" + } + ] +} diff --git a/data/games/frlg/maps/base/Route11.json b/data/games/frlg/maps/base/Route11.json new file mode 100644 index 0000000..6ff583e --- /dev/null +++ b/data/games/frlg/maps/base/Route11.json @@ -0,0 +1,162 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route11", + "source": { + "decomp_file": "data/maps/Route11/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "########################################################################", + "########################################################################", + "############.....................~~~~...............~~~.....############", + "############.....................~~~~...............~~~.....############", + "######..####.....................~~~~...............~~~.....############", + "######..####......~~~~~~~~~~~~...~~~~...~~~~~~~~~...~~~...#.############", + "....########......~~~~~~~~~~~~...~~~~...~~~~~~~~~~~~~~~.....############", + "###S##.#####......~~~~...........~~~~...........~~~~~~~.################", + "..................~~~~...........~~~~...........~~~~~~~....#############", + "..................~~~~...........~~~~...........~~~~.......######.......", + ".........................~~~~~..........~~~~~...~~~~.......######.......", + "wwwwwwwwwwwww............~~~~~..........~~~~~...~~~~.......######.......", + "wwwwwwwwwwwww............~~~~~..........~~~~~...~~~~....################", + "wwwwwwwwwwwww..~~~~~~~~~~~~~~~~~~~~~~...~~~~~...~~~~................####", + "##############.~~~~~~~~~~~~~~~~~~~~~~...........~~~~........############", + "############...~~~~~~~~~~~~~~~~~~~~~~...........~~~~........############", + "##############....~~~~~~~~~~~~~~~~~~~...........~~~~........############", + "##############..........................~~~~~...............############", + "##############..........................~~~~~...............############", + "##############..........................~~~~~...............############" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000333333333333333333333333333333333333333333333333000000000000", + "000000000000333333333333333333333333333333333333333333333333000000000000", + "000000330000333333333333333333333333333333333333333333333333000000000000", + "000000330000333333333333333333333333333333333333333333333303000000000000", + "333300000000333333333333333333333333333333333333333333333333000000000000", + "000000300000333333333333333333333333333333333333333333330000000000000000", + "333333333333333333333333333333333333333333333333333333333330000000000000", + "333333333333333333333333333333333333333333333333333333333330000003333333", + "333333333333333333333333333333333333333333333333333333333330000003333333", + "111111111111133333333333333333333333333333333333333333333330000003333333", + "111111111111133333333333333333333333333333333333333333330000000000000000", + "111111111111133333333333333333333333333333333333333333333333333333330000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000333333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000" + ], + "points": {"warp_0": [6, 7], "warp_1": [58, 10], "warp_2": [65, 10]}, + "warps": [ + {"coord": [6, 7], "enter": "cave_entrance", "to_map": "DiglettsCave_SouthEntrance", "to_point": "warp_0"}, + {"coord": [58, 10], "enter": "walk_east", "to_map": "Route11_EastEntrance_1F", "to_point": "warp_0"}, + {"coord": [65, 10], "enter": "walk_west", "to_map": "Route11_EastEntrance_1F", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "VermilionCity", "offset": -10}, + {"side": "east", "to_map": "Route12", "offset": -60} + ], + "npcs": [ + { + "name": "youngster", + "coord": [19, 8], + "trainer": {"sight": 4, "looks": ["south", "west"]}, + "source_event": 0, + "source_script": "Route11_EventScript_Eddie" + }, + { + "name": "old_man_1", + "coord": [16, 17], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "Route11_EventScript_Hugo" + }, + { + "name": "youngster", + "coord": [31, 8], + "trainer": {"sight": 4, "looks": ["north", "west"]}, + "source_event": 2, + "source_script": "Route11_EventScript_Dillon" + }, + { + "name": "youngster", + "coord": [28, 10], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route11_EventScript_Dave" + }, + { + "name": "old_man_1", + "coord": [38, 15], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 4, + "source_script": "Route11_EventScript_Jasper" + }, + { + "name": "old_man_1", + "coord": [50, 4], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 5, + "source_script": "Route11_EventScript_Darian" + }, + { + "name": "balding_man", + "coord": [42, 8], + "trainer": {"sight": 4, "looks": ["west", "east"]}, + "source_event": 6, + "source_script": "Route11_EventScript_Braxton" + }, + { + "name": "youngster", + "coord": [50, 14], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 7, + "source_script": "Route11_EventScript_Yasu" + }, + { + "name": "old_man_1", + "coord": [57, 16], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 8, + "source_script": "Route11_EventScript_Dirk" + }, + { + "name": "balding_man", + "coord": [32, 18], + "trainer": {"sight": 6, "looks": ["west", "east"]}, + "source_event": 9, + "source_script": "Route11_EventScript_Bernie" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [42, 12], + "source_event": 10, + "hide_flag": "FLAG_HIDE_ROUTE11_X_DEFEND", + "source_script": "Route11_EventScript_ItemXDefend", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [63, 13], + "source_event": 11, + "hide_flag": "FLAG_HIDE_ROUTE11_GREAT_BALL", + "source_script": "Route11_EventScript_ItemGreatBall", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [13, 3], + "source_event": 12, + "hide_flag": "FLAG_HIDE_ROUTE11_AWAKENING", + "source_script": "Route11_EventScript_ItemAwakening", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/Route11_EastEntrance_1F.json b/data/games/frlg/maps/base/Route11_EastEntrance_1F.json new file mode 100644 index 0000000..53d7b4a --- /dev/null +++ b/data/games/frlg/maps/base/Route11_EastEntrance_1F.json @@ -0,0 +1,48 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route11_EastEntrance_1F", + "source": { + "decomp_file": "data/maps/Route11_EastEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "##.........##", + "#.#########.#", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "########..###", + "#......#..###", + "#......#..###" + ], + "points": {"warp_0": [1, 6], "warp_2": [11, 6], "warp_4": [9, 10]}, + "warps": [ + {"coord": [1, 6], "enter": "walk_west", "to_map": "Route11", "to_point": "warp_1"}, + {"coord": [1, 7], "enter": "walk_into", "to_map": "Route11", "to_point": "warp_1"}, + {"coord": [11, 6], "enter": "walk_east", "to_map": "Route11", "to_point": "warp_2"}, + {"coord": [11, 7], "enter": "walk_into", "to_map": "Route11", "to_point": "warp_2"}, + {"coord": [9, 10], "enter": "walk_east", "to_map": "Route11_EastEntrance_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "policeman", + "coord": [6, 2], + "source_event": 0, + "source_script": "Route11_EastEntrance_1F_EventScript_TopGuard" + }, + { + "name": "policeman", + "coord": [4, 10], + "source_event": 1, + "source_script": "Route11_EastEntrance_1F_EventScript_BottomGuard" + } + ] +} diff --git a/data/games/frlg/maps/base/Route12.json b/data/games/frlg/maps/base/Route12.json new file mode 100644 index 0000000..18a107e --- /dev/null +++ b/data/games/frlg/maps/base/Route12.json @@ -0,0 +1,359 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route12", + "source": { + "decomp_file": "data/maps/Route12/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "###########..###########", + "###########..###########", + "###########..###########", + "###########..###########", + "###########..###########", + "#######wwww..wwwwwwwwwww", + "#######wwww..wwwwwwwwwww", + "#######wwww..wwwwwwwwwww", + "#######wwww..wwwwwwwwwww", + "#######wwww..wwwwwwwwwww", + "#######.........wwwwwwww", + "#######.........wwwwwwww", + "#######..wwww...wwwwwwww", + "#######..wwww....S..wwww", + "#######..wwww.......wwww", + "#######..wwww...wwwwwwww", + "#######..www.###.wwwwwww", + "#######..www#####wwwwwww", + "#######wwwww#####wwwwwww", + "#######wwwww#####wwwwwww", + "#######wwwww#####wwwwwww", + "#######wwwww##.##wwwwwww", + "#########wwww...wwwwwwww", + "#########wwww...wwwwwwww", + "#########wwww...wwwwwwww", + "#########wwww...wwwwwwww", + "#########...........wwww", + "#########...........wwww", + "#########wwwwwwwww..wwww", + "########wwwwwwwwww..wwww", + "########wwwwwwwwww..wwww", + "########..www.......wwww", + "########..www.......wwww", + "########..www..wwwwwwwww", + "########..www..wwwwwwwww", + "########..www..www..wwww", + "########.......www..wwww", + "########.......www..wwww", + "########..wwwwwwww..wwww", + "########..wwwwwwww..wwww", + "########..wwwwwwwwwwwwww", + "########..wwwwwwwwwwwwww", + "########............wwww", + "########............wwww", + "########..ww..wwwwwwwwww", + "########..ww..wwwwwwwwww", + "########..ww..wwwwwwwwww", + "########wwww......wwwwww", + "########wwww......wwwwww", + "########wwwwwwww....wwww", + "########wwwwwwww....wwww", + "########wwwwwwww..wwwwww", + "########wwwwwwww..wwwwww", + "########......ww..wwwwww", + "########......ww..wwwwww", + "########..ww..ww....wwww", + "########..ww..ww....wwww", + "########..ww..ww....wwww", + "########..ww........wwww", + "########..ww........wwww", + "########..wwwwwwwwwwwwww", + "########..wwwwwwwwwwwwww", + "########..wwwwwwwwwwwwww", + "########............wwww", + "########............wwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + ".......#######.Swwwwwwww", + "................wwwwwwww", + ".......#######..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww......wwww", + "########wwwwww......wwww", + "########wwwwwwwwww..wwww", + "########wwwwwwwwww..wwww", + "########wwwwwwwwww..wwww", + "########............wwww", + "########...#####....wwww", + "########...#D###....wwww", + "########............wwww", + "########..##########wwww", + "########..wwwwwwwwwwwwww", + "########..wwwwwwwwwwwwww", + "########..wwwwwwwwwwwwww", + "########..........wwwwww", + "########..........wwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "########wwwwww..wwwwwwww", + "############ww..wwwwwwww", + "########...#ww..wwwwwwww", + "########........wwwwwwww", + "########..#.....wwwwwwww", + "##########..ww......wwww", + "########....ww......wwww", + "########........wwwwwwww", + "########........wwwwwwww", + "########wwwwww......wwww", + "########wwwwww......wwww", + "########wwwwwwwwww..wwww", + "########wwwwwwwwww..wwww", + "##############......wwww", + "########............wwww", + "########~~~~##ww..wwwwww", + "########~~~~##ww..wwwwww", + "########~~~~##ww..wwwwww", + "########~~~~##ww..wwwwww", + "########~~~~##....wwwwww", + "########~~~~##....wwwwww", + "########~~~~##..wwwwwwww", + "##############..wwwwwwww" + ], + "elevation": [ + "000000000003300000000000", + "000000000003300000000000", + "000000000003300000000000", + "000000000003300000000000", + "000000000003300000000000", + "000000011113311110011111", + "000000011113311110011000", + "000000011113311100111000", + "000000011113311100111000", + "000000011113311110000100", + "000000033333333310000000", + "000000033333333311111000", + "000000033111133311111000", + "000000033111133330331000", + "000000033111133333331000", + "000000033111133311111000", + "000000033111100011111000", + "000000033100000000011000", + "000000011100000000010010", + "000000000001000001000010", + "000000000001000001000010", + "000000011111003001110010", + "000000000111133311111000", + "000000000111133311111000", + "000000000111133311111000", + "000000000111133311111001", + "000000000333333333331100", + "000000000333333333331100", + "000000000111111111331001", + "000000001111111111331000", + "000000001111111111331000", + "000000003311133333331000", + "000000003311133333331000", + "000000003311133111111001", + "000000003311133111111100", + "000000003311133111331100", + "000000003333333111331100", + "000000003333333111331100", + "000000003311111111331001", + "000000003311111111331001", + "000000003311111111111100", + "000000003311111111111100", + "000000003333333333331100", + "000000003333333333331100", + "000000003311331111111100", + "000000003311331111111100", + "000000003311331111111001", + "000000001111333333111000", + "000000001111333333111000", + "000000001111111133331000", + "000000001111111133331000", + "000000001111111133111000", + "000000001111111133110010", + "000000003333331133110010", + "000000003333331133111000", + "000000003311331133331001", + "000000003311331133331100", + "000000003311331133331100", + "000000003311333333331100", + "000000003311333333331100", + "000000003311111111111001", + "000000003311111111111000", + "000000003311111111111000", + "000000003333333333331000", + "000000003333333333331000", + "000000001111113311111001", + "000000001111113311111100", + "000000001111113311111100", + "000000001111113311110011", + "333333300000003011110010", + "333333333333333311100100", + "333333300000003311100100", + "000000001111113311100100", + "000000001111113311100100", + "000000001111113311110010", + "000000001111113311110010", + "000000001111113311111001", + "000000001111113311111001", + "000000001111113311111100", + "000000001111113333331100", + "000000001111113333331100", + "000000001111111111331100", + "000000001111111111331001", + "000000001111111111331001", + "000000003333333333331001", + "000000003330000033331001", + "000000003330000033331100", + "000000003333333333331100", + "000000003300000000001100", + "000000003311111111111100", + "000000003311111111111001", + "000000003311111111111001", + "000000003333333333110011", + "000000003333333333110010", + "000000001111113311110010", + "000000001111113311110010", + "000000001111113311100100", + "000000001111113311100100", + "000000000000113311110000", + "000000003330113311110000", + "000000003333333311110010", + "000000003303333311110011", + "000000000033113333331100", + "000000003333113333331100", + "000000003333333311111100", + "000000003333333311111100", + "000000001111113333331100", + "000000001111113333331100", + "000000001111111111331100", + "000000001111111111331100", + "000000000000003333331100", + "000000003333333333331100", + "000000003333001133111100", + "000000003333001133111100", + "000000003333001133111001", + "000000003333001133111000", + "000000003333003333111000", + "000000003333003333111000", + "000000003333003311110010", + "000000000000003311110010" + ], + "points": {"warp_0": [12, 86], "warp_1": [14, 15], "warp_2": [15, 15], "warp_3": [14, 21]}, + "warps": [ + {"coord": [12, 86], "enter": "walk_into", "to_map": "Route12_FishingHouse", "to_point": "warp_1"}, + {"coord": [14, 15], "enter": "walk_south", "to_map": "Route12_NorthEntrance_1F", "to_point": "warp_0"}, + {"coord": [15, 15], "enter": "walk_into", "to_map": "Route12_NorthEntrance_1F", "to_point": "warp_1"}, + {"coord": [14, 21], "enter": "cave_entrance", "to_map": "Route12_NorthEntrance_1F", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "LavenderTown", "offset": 0}, + {"side": "south", "to_map": "Route13", "offset": -48}, + {"side": "west", "to_map": "Route11", "offset": 60} + ], + "npcs": [ + { + "name": "fisher", + "coord": [17, 32], + "trainer": {"sight": 1, "looks": ["south", "north"]}, + "source_event": 0, + "source_script": "Route12_EventScript_Ned" + }, + { + "name": "fisher", + "coord": [9, 40], + "trainer": {"sight": 1, "looks": ["west", "east"]}, + "source_event": 1, + "source_script": "Route12_EventScript_Chip" + }, + { + "name": "fisher", + "coord": [16, 47], + "trainer": {"sight": 4, "looks": ["south", "west"]}, + "source_event": 2, + "source_script": "Route12_EventScript_Hank" + }, + { + "name": "fisher", + "coord": [13, 59], + "trainer": {"sight": 1, "looks": ["south", "north"]}, + "source_event": 3, + "source_script": "Route12_EventScript_Elliot" + }, + { + "name": "snorlax", + "coord": [14, 70], + "hide_flag": "FLAG_HIDE_ROUTE_12_SNORLAX", + "source_event": 4, + "source_script": "Route12_EventScript_Snorlax" + }, + { + "name": "rocker", + "coord": [13, 92], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 5, + "source_script": "Route12_EventScript_Luca" + }, + { + "name": "camper", + "coord": [10, 99], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 6, + "source_script": "Route12_EventScript_Justin" + }, + { + "name": "fisher", + "coord": [18, 108], + "trainer": {"sight": 1, "looks": ["west", "east"]}, + "source_event": 7, + "source_script": "Route12_EventScript_Andrew" + }, + { + "name": "cut_tree", + "coord": [11, 100], + "hide_flag": "FLAG_TEMP_12", + "source_event": 8, + "source_script": "EventScript_CutTree" + }, + {"name": "beauty", "coord": [19, 64], "source_event": 11, "source_script": "Route12_EventScript_Gia"}, + {"name": "man", "coord": [19, 63], "source_event": 12, "source_script": "Route12_EventScript_Jes"}, + { + "name": "cut_tree", + "coord": [12, 111], + "hide_flag": "FLAG_TEMP_13", + "source_event": 13, + "source_script": "EventScript_CutTree" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [18, 36], + "source_event": 9, + "hide_flag": "FLAG_HIDE_ROUTE12_TM48", + "source_script": "Route12_EventScript_ItemTM48", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [9, 101], + "source_event": 10, + "hide_flag": "FLAG_HIDE_ROUTE12_IRON", + "source_script": "Route12_EventScript_ItemIron", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/Route12_NorthEntrance_1F.json b/data/games/frlg/maps/base/Route12_NorthEntrance_1F.json new file mode 100644 index 0000000..0dff864 --- /dev/null +++ b/data/games/frlg/maps/base/Route12_NorthEntrance_1F.json @@ -0,0 +1,43 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route12_NorthEntrance_1F", + "source": { + "decomp_file": "data/maps/Route12_NorthEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###########", + "#####.#####", + "..#.....#..", + "#.#.....#..", + "..#.....#..", + "..#.....#..", + "..#.....#..", + "#.#.....###", + "..#........", + "..#......##", + "..#......##", + "#.#......##", + "###########" + ], + "points": {"warp_0": [5, 1], "warp_1": [6, 1], "warp_2": [5, 11], "warp_4": [8, 10]}, + "warps": [ + {"coord": [5, 1], "enter": "cave_entrance", "to_map": "Route12", "to_point": "warp_1"}, + {"coord": [6, 1], "enter": "walk_into", "to_map": "Route12", "to_point": "warp_2"}, + {"coord": [5, 11], "enter": "walk_south", "to_map": "Route12", "to_point": "warp_3"}, + {"coord": [6, 11], "enter": "walk_into", "to_map": "Route12", "to_point": "warp_3"}, + {"coord": [8, 10], "enter": "walk_east", "to_map": "Route12_NorthEntrance_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "policeman", + "coord": [1, 5], + "source_event": 0, + "source_script": "Route12_NorthEntrance_1F_EventScript_Guard" + } + ] +} diff --git a/data/games/frlg/maps/base/Route13.json b/data/games/frlg/maps/base/Route13.json new file mode 100644 index 0000000..4c4592b --- /dev/null +++ b/data/games/frlg/maps/base/Route13.json @@ -0,0 +1,148 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route13", + "source": { + "decomp_file": "data/maps/Route13/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "##############################################################..wwwwwwww", + "##############################################################..wwwwwwww", + "##############################################################..wwwwwwww", + "##############################################################..wwwwwwww", + "##############################################################..wwwwwwww", + "..................................#..............~~~~~~~~~~.##..wwwwwwww", + "################......#########...#..S######.....~~~~~~~~~~.##..wwwwwwww", + "......................#.....................####.~~~~~~~~~~.##..wwwwwwww", + "#############...#######..#################..####.~~~~~~~~~~.##..wwwwwwww", + "................#...................#.......##################..wwwwwwww", + "######..#########..##############...#..###..##################..wwwwwwww", + "........#.....................#.................................wwwwwwww", + "#########..###############....#..########S##....................wwwwwwww", + "#.....................#.......................wwwwwwwwwwwwwwwwwwwwwwwwww", + "#.######..###########S#.######################wwwwwwwwwwwwwwwwwwwwwwwwww", + "########################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000003311110010", + "000000000000000000000000000000000000000000000000000000000000003311110010", + "000000000000000000000000000000000000000000000000000000000000003311110010", + "000000000000000000000000000000000000000000000000000000000000003311110000", + "000000000000000000000000000000000000000000000000000000000000003311100100", + "333333333333333333333333333333333303333333333333333333333333003311100100", + "000000000000000033333300000000033303300000003333333333333333003311100100", + "333333333333333333333303333333333333333333330000333333333333003311100100", + "000000000000033300000003300000000000000000330000333333333333003311110000", + "333333333333333303333333333333333333033333330000000000000000003311110000", + "000000330000000003300000000000000333033000330000000000000000003311110000", + "333333330333333333333333333333033333333333333333333333333333333311110000", + "000000000330000000000000003333033000000000003333333333333333333311100100", + "033333333333333333333303333333333333333333333311111111111111111111100100", + "030000003300000000000003000000000000000000000011111111111111111111100100", + "000000000000000000000000111111111111111111001111111111111111110011100100", + "111111111111111111111111100000000000000111001111110000111111000000001000", + "111000000000000000000000000000000000000001110000000000001100001100001000", + "100000000000000000000000000000000000000000010000001111000000111110000000", + "100000000000000000000000000000000000000000000000000000110011000000000000" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route12", "offset": 48}, + {"side": "west", "to_map": "Route14", "offset": 0} + ], + "npcs": [ + { + "name": "picnicker", + "coord": [62, 6], + "wander": {"min": [61, 5], "max": [63, 7]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "Route13_EventScript_Alma" + }, + { + "name": "rocker", + "coord": [63, 12], + "wander": {"min": [62, 11], "max": [64, 13]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "Route13_EventScript_Sebastian" + }, + { + "name": "picnicker", + "coord": [54, 11], + "wander": {"min": [53, 10], "max": [55, 12]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "Route13_EventScript_Susie" + }, + { + "name": "beauty", + "coord": [42, 7], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "Route13_EventScript_Sheila" + }, + { + "name": "beauty", + "coord": [43, 7], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "Route13_EventScript_Lola" + }, + { + "name": "picnicker", + "coord": [35, 10], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 5, + "source_script": "Route13_EventScript_Valerie" + }, + { + "name": "picnicker", + "coord": [29, 11], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 6, + "source_script": "Route13_EventScript_Gwen" + }, + { + "name": "rocker", + "coord": [9, 14], + "facing": "north", + "trainer": {"sight": 3}, + "source_event": 7, + "source_script": "Route13_EventScript_Robert" + }, + { + "name": "rocker", + "coord": [16, 5], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 8, + "source_script": "Route13_EventScript_Perry" + }, + { + "name": "biker", + "coord": [14, 8], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 9, + "source_script": "Route13_EventScript_Jared" + }, + { + "name": "cut_tree", + "coord": [44, 5], + "hide_flag": "FLAG_TEMP_12", + "source_event": 10, + "source_script": "EventScript_CutTree" + } + ] +} diff --git a/data/games/frlg/maps/base/Route14.json b/data/games/frlg/maps/base/Route14.json new file mode 100644 index 0000000..19d1636 --- /dev/null +++ b/data/games/frlg/maps/base/Route14.json @@ -0,0 +1,259 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route14", + "source": { + "decomp_file": "data/maps/Route14/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "########################", + "########################", + "########################", + "########################", + "########################", + "#######.................", + "#######..###############", + "#######.................", + "##################..####", + "#######.................", + "#########..#############", + "#######.................", + "##############...S######", + "#######.................", + "#######..........#######", + "#######..........#######", + "#######..........#######", + "#############....#######", + "#############....#######", + "#######~~~~~##...#######", + "#######~~~~~##...#######", + "#######~~~~~##...#######", + "#######~~~~~##...#######", + "#######~~~~~##...#wwwwww", + "#######~~~~~##...#wwwwww", + "#######.....##...#wwwwww", + "#######.vvvv##...#wwwwww", + "#######.....##...#wwwwww", + "#######.....##...#wwwwww", + "#######.....##...#wwwwww", + "#######.....##...#....ww", + "#######.....##...#####ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######..............#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "#######.....##.......#ww", + "##..........##.......#ww", + "##...................#ww", + ".....................#ww", + ".>...................#ww", + "v#...................#ww", + ".....................#ww", + ".....................#ww", + ".....................#ww", + ".....................#ww", + ".....................#ww", + "######################ww", + "......................ww", + "######################ww", + "######################ww", + "######################ww" + ], + "elevation": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000033333333333333333", + "000000033000000000000000", + "000000033333333333333333", + "000000000000000000330000", + "000000033333333333333333", + "000000000330000000000000", + "000000033333333333333333", + "000000000000003330000000", + "000000033333333333333333", + "000000033333333330000000", + "000000033333333330000000", + "000000033333333330000000", + "000000000000033330000000", + "000000000000033330000000", + "000000033333003330000000", + "000000033333003330000000", + "000000033333003330000000", + "000000033333003330000000", + "000000033333003330111111", + "000000033333003330110000", + "000000033333003330110000", + "000000030000003330110000", + "000000033333003330110000", + "000000033333003330111000", + "000000033333003330111110", + "000000033333003330333310", + "000000033333003330000010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333333333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "003333333333003333333010", + "003333333333333333333010", + "333333333333333333333010", + "303333333333333333333010", + "003333333333333333333010", + "333333333333333333333010", + "333333333333333333333033", + "333333333333333333333033", + "333333333333333333333033", + "333333333333333333333033", + "000000000000000000000033", + "333333333333333333333333", + "000000000000000000000010", + "000000000000000000000010", + "000000000000000000000010" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "Route15", "offset": 40}, + {"side": "east", "to_map": "Route13", "offset": 0} + ], + "npcs": [ + { + "name": "biker", + "coord": [7, 37], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 0, + "source_script": "Route14_EventScript_Gerald" + }, + { + "name": "rocker", + "coord": [18, 35], + "wander": {"min": [16, 33], "max": [20, 37]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "Route14_EventScript_Donald" + }, + { + "name": "rocker", + "coord": [10, 14], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 2, + "source_script": "Route14_EventScript_Beck" + }, + { + "name": "rocker", + "coord": [16, 16], + "facing": "north", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "Route14_EventScript_Marlon" + }, + { + "name": "biker", + "coord": [7, 31], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route14_EventScript_Isaac" + }, + { + "name": "biker", + "coord": [7, 34], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "Route14_EventScript_Malik" + }, + { + "name": "rocker", + "coord": [8, 9], + "wander": {"min": [7, 9], "max": [9, 9]}, + "trainer": {"sight": 1, "looks": ["west", "east"]}, + "source_event": 6, + "source_script": "Route14_EventScript_Mitch" + }, + { + "name": "rocker", + "coord": [7, 6], + "facing": "east", + "trainer": {"sight": 1}, + "source_event": 7, + "source_script": "Route14_EventScript_Carter" + }, + { + "name": "biker", + "coord": [10, 37], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 8, + "source_script": "Route14_EventScript_Lukas" + }, + { + "name": "rocker", + "coord": [18, 47], + "wander": {"min": [16, 45], "max": [20, 49]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 9, + "source_script": "Route14_EventScript_Benny" + }, + { + "name": "cut_tree", + "coord": [7, 26], + "hide_flag": "FLAG_TEMP_12", + "source_event": 10, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [12, 35], + "hide_flag": "FLAG_TEMP_13", + "source_event": 11, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [1, 47], + "hide_flag": "FLAG_TEMP_14", + "source_event": 12, + "source_script": "EventScript_CutTree", + "source_local_id": "LOCALID_ROUTE14_BORDER_TREE" + }, + { + "name": "little_girl", + "coord": [13, 51], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 13, + "source_script": "Route14_EventScript_Jan" + }, + { + "name": "little_girl", + "coord": [12, 51], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 14, + "source_script": "Route14_EventScript_Kiri" + } + ] +} diff --git a/data/games/frlg/maps/base/Route15.json b/data/games/frlg/maps/base/Route15.json new file mode 100644 index 0000000..d7721fd --- /dev/null +++ b/data/games/frlg/maps/base/Route15.json @@ -0,0 +1,148 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route15", + "source": { + "decomp_file": "data/maps/Route15/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################################################################", + "########################################################################", + "########################################################################", + "########################################################################", + "########################################################################", + "#################.......................................................", + "#################.......................................................", + "######..........#.......................................................", + "#################.......................................................", + "######....######.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", + "..........######....~~~~~~......~~~~~~.............~~~~....~~~~~~~......", + "..........######....~~~~~~......~~~~~~...S.........~~~~....~~~~~~~......", + "..........######........................................................", + "#################.......................................................", + "######..........#.......................................................", + "########################################################################", + "################........................................................", + "########################################################################", + "########################################################################", + "########################################################################" + ], + "points": {"warp_0": [9, 11], "warp_1": [16, 11]}, + "warps": [ + {"coord": [9, 11], "enter": "walk_east", "to_map": "Route15_WestEntrance_1F", "to_point": "warp_0"}, + {"coord": [16, 11], "enter": "walk_west", "to_map": "Route15_WestEntrance_1F", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "FuchsiaCity", "offset": -10}, + {"side": "east", "to_map": "Route14", "offset": -40} + ], + "npcs": [ + { + "name": "picnicker", + "coord": [22, 13], + "wander": {"min": [21, 12], "max": [23, 14]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "Route15_EventScript_Yazmin" + }, + { + "name": "rocker", + "coord": [31, 12], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 1, + "source_script": "Route15_EventScript_Edwin" + }, + { + "name": "rocker", + "coord": [37, 14], + "facing": "north", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "Route15_EventScript_Chester" + }, + { + "name": "picnicker", + "coord": [44, 13], + "wander": {"min": [43, 12], "max": [45, 14]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route15_EventScript_Kindra" + }, + { + "name": "beauty", + "coord": [50, 12], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route15_EventScript_Olivia" + }, + { + "name": "biker", + "coord": [59, 12], + "trainer": {"sight": 2, "looks": ["south", "east"]}, + "source_event": 5, + "source_script": "Route15_EventScript_Alex" + }, + { + "name": "biker", + "coord": [63, 13], + "trainer": {"sight": 1, "looks": ["south", "north"]}, + "source_event": 6, + "source_script": "Route15_EventScript_Ernest" + }, + { + "name": "picnicker", + "coord": [52, 8], + "wander": {"min": [50, 4], "max": [54, 12]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 7, + "source_script": "Route15_EventScript_Becky" + }, + { + "name": "beauty", + "coord": [54, 12], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 8, + "source_script": "Route15_EventScript_Grace" + }, + { + "name": "picnicker", + "coord": [28, 6], + "wander": {"min": [26, 2], "max": [30, 10]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 9, + "source_script": "Route15_EventScript_Celia" + }, + { + "name": "black_belt", + "coord": [39, 7], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 11, + "source_script": "Route15_EventScript_Ron" + }, + { + "name": "crush_girl", + "coord": [40, 7], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 12, + "source_script": "Route15_EventScript_Mya" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [20, 6], + "source_event": 10, + "hide_flag": "FLAG_HIDE_ROUTE15_TM18", + "source_script": "Route15_EventScript_ItemTM18", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/Route15_WestEntrance_1F.json b/data/games/frlg/maps/base/Route15_WestEntrance_1F.json new file mode 100644 index 0000000..86eeafe --- /dev/null +++ b/data/games/frlg/maps/base/Route15_WestEntrance_1F.json @@ -0,0 +1,42 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route15_WestEntrance_1F", + "source": { + "decomp_file": "data/maps/Route15_WestEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "##.........##", + "#.#########.#", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "########..###", + "#......#..###", + "#......#..###" + ], + "points": {"warp_0": [1, 6], "warp_2": [11, 6], "warp_4": [9, 10]}, + "warps": [ + {"coord": [1, 6], "enter": "walk_west", "to_map": "Route15", "to_point": "warp_0"}, + {"coord": [1, 7], "enter": "walk_into", "to_map": "Route15", "to_point": "warp_0"}, + {"coord": [11, 6], "enter": "walk_east", "to_map": "Route15", "to_point": "warp_1"}, + {"coord": [11, 7], "enter": "walk_into", "to_map": "Route15", "to_point": "warp_1"}, + {"coord": [9, 10], "enter": "walk_east", "to_map": "Route15_WestEntrance_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "policeman", + "coord": [6, 2], + "source_event": 0, + "source_script": "Route15_WestEntrance_1F_EventScript_Guard" + } + ] +} diff --git a/data/games/frlg/maps/base/Route16.json b/data/games/frlg/maps/base/Route16.json new file mode 100644 index 0000000..87c6ac1 --- /dev/null +++ b/data/games/frlg/maps/base/Route16.json @@ -0,0 +1,141 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route16", + "source": { + "decomp_file": "data/maps/Route16/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "ww##############################################", + "ww##############################################", + "ww##############################################", + "w.#######.....##################################", + "w###############################################", + "w#.......#D###.......######......~~~~~~~~~######", + "w#...................######......~~~~~~~~~######", + "w#...................######......~~~~~~~~~######", + "w#...................######...............######", + "w#...................######...............######", + "w#############################............######", + "w#...................######..####S#######.######", + "w#...................######...###...............", + "w#...................#....#.....................", + "w#...................######...###...............", + "w#.............#################################", + "w#.............#################################", + "w#....S........#################################", + "w#.............#################################", + "w#.............#################################" + ], + "elevation": [ + "010000000000000000000000000000000000000000000000", + "010000000000000000000000000000000000000000000000", + "010000000000000000000000000000000000000000000000", + "030000000033300000000000000000000000000000000000", + "100000000000000000000000000000000000000000000000", + "103333333000003333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "100000000000000000000000000000333333333333000000", + "103333333333333333333000000330000000000003000000", + "103333333333333333333000000333000333333333333333", + "103333333333333333333033330333333333333333333333", + "103333333333333333333000000333000333333333333333", + "103333333333333000000000000000000000000000000000", + "103333333333333000000000000000000000000000000000", + "103333033333333000000000000000000000000000000000", + "103333333333333000000000000000000000000000000000", + "103333333333333000000000000000000000000000000000" + ], + "points": {"warp_0": [10, 5], "warp_1": [20, 6], "warp_2": [27, 6], "warp_3": [20, 13], "warp_4": [27, 13]}, + "warps": [ + {"coord": [10, 5], "enter": "walk_into", "to_map": "Route16_House", "to_point": "warp_1"}, + {"coord": [20, 6], "enter": "walk_east", "to_map": "Route16_NorthEntrance_1F", "to_point": "warp_0"}, + {"coord": [27, 6], "enter": "walk_west", "to_map": "Route16_NorthEntrance_1F", "to_point": "warp_1"}, + {"coord": [20, 13], "enter": "walk_east", "to_map": "Route16_NorthEntrance_1F", "to_point": "warp_2"}, + {"coord": [27, 13], "enter": "walk_west", "to_map": "Route16_NorthEntrance_1F", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "Route17", "offset": 0}, + {"side": "east", "to_map": "CeladonCity", "offset": -10} + ], + "npcs": [ + { + "name": "biker", + "coord": [16, 12], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "Route16_EventScript_Lao" + }, + { + "name": "biker", + "coord": [14, 14], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "Route16_EventScript_Koji" + }, + { + "name": "biker", + "coord": [12, 12], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "Route16_EventScript_Luke" + }, + { + "name": "biker", + "coord": [8, 12], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route16_EventScript_Ruben" + }, + { + "name": "biker", + "coord": [10, 14], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 4, + "source_script": "Route16_EventScript_Hideo" + }, + { + "name": "biker", + "coord": [6, 14], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 5, + "source_script": "Route16_EventScript_Camron" + }, + { + "name": "cut_tree", + "coord": [41, 11], + "hide_flag": "FLAG_TEMP_12", + "source_event": 6, + "source_script": "EventScript_CutTree", + "source_local_id": "LOCALID_ROUTE16_CUT_TREE" + }, + { + "name": "beauty", + "coord": [30, 5], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 7, + "source_script": "Route16_EventScript_Lea" + }, + { + "name": "man", + "coord": [31, 5], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 8, + "source_script": "Route16_EventScript_Jed" + }, + { + "name": "snorlax", + "coord": [31, 13], + "hide_flag": "FLAG_HIDE_ROUTE_16_SNORLAX", + "source_event": 9, + "source_script": "Route16_EventScript_Snorlax" + } + ] +} diff --git a/data/games/frlg/maps/base/Route16_House.json b/data/games/frlg/maps/base/Route16_House.json new file mode 100644 index 0000000..7ff0b74 --- /dev/null +++ b/data/games/frlg/maps/base/Route16_House.json @@ -0,0 +1,46 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route16_House", + "source": { + "decomp_file": "data/maps/Route16_House/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "...........", + "...........", + ".....##....", + ".....##....", + "...........", + "#.........#", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "Route16", "to_point": "warp_0"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "Route16", "to_point": "warp_0"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "Route16", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "woman_1", + "coord": [4, 2], + "wander": {"min": [3, 1], "max": [5, 3]}, + "source_event": 0, + "source_script": "Route16_House_EventScript_Woman" + }, + { + "name": "fearow", + "coord": [9, 3], + "wander": {"min": [8, 2], "max": [10, 4]}, + "source_event": 1, + "source_script": "Route16_House_EventScript_Fearow" + } + ] +} diff --git a/data/games/frlg/maps/base/Route16_NorthEntrance_1F.json b/data/games/frlg/maps/base/Route16_NorthEntrance_1F.json new file mode 100644 index 0000000..f714263 --- /dev/null +++ b/data/games/frlg/maps/base/Route16_NorthEntrance_1F.json @@ -0,0 +1,55 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route16_NorthEntrance_1F", + "source": { + "decomp_file": "data/maps/Route16_NorthEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "#############", + "#############", + "#...........#", + "#############", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "########..###", + "#......#..###", + "#......#..###" + ], + "points": {"warp_0": [1, 3], "warp_1": [11, 3], "warp_2": [1, 12], "warp_3": [11, 12], "warp_4": [9, 16]}, + "warps": [ + {"coord": [1, 3], "enter": "walk_west", "to_map": "Route16", "to_point": "warp_1"}, + {"coord": [11, 3], "enter": "walk_east", "to_map": "Route16", "to_point": "warp_2"}, + {"coord": [1, 12], "enter": "walk_west", "to_map": "Route16", "to_point": "warp_3"}, + {"coord": [11, 12], "enter": "walk_east", "to_map": "Route16", "to_point": "warp_4"}, + {"coord": [9, 16], "enter": "walk_east", "to_map": "Route16_NorthEntrance_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "policeman", + "coord": [6, 8], + "source_event": 0, + "source_script": "Route16_NorthEntrance_1F_EventScript_Guard" + }, + { + "name": "old_man_1", + "coord": [7, 4], + "wander": {"min": [6, 4], "max": [8, 4]}, + "source_event": 1, + "source_script": "Route16_NorthEntrance_1F_EventScript_OldMan" + } + ] +} diff --git a/data/games/frlg/maps/base/Route18.json b/data/games/frlg/maps/base/Route18.json new file mode 100644 index 0000000..e3364ec --- /dev/null +++ b/data/games/frlg/maps/base/Route18.json @@ -0,0 +1,88 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route18", + "source": { + "decomp_file": "data/maps/Route18/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwwwww#.........#wwwwwwwwwwwwww############################", + "wwwwwww#.........#wwwwwwwwwwwwww############################", + "wwwwwww#.........#wwwwwwwwwwwwww############################", + "wwwwwww#.........#wwwwwwwwwwwwww############################", + "wwwwwww#.........#wwwwwwwwwwwwww############################", + "wwwwwww#.........#wwwwwwwwwwwwww############################", + "wwwwwww#.........#wwwwwwwwwwwwww############################", + "wwwwwww#........................#####S###.######....S#######", + "wwwwwww#..................................######............", + "wwwwwww#..................................######............", + "wwwwwww#..................................######............", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##########..##########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#...........##########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.~~~~~~....##########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.~~~~~~.#############", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.~~~~~~.#############", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.~~~~~~.#############", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#........#############", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##########wwwwww######", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww######" + ], + "elevation": [ + "000110003333333330001100000000110000000000000000000000000000", + "000110003333333330000010000000110000000000000000000000000000", + "000001103333333330110010000001110000000000000000000000000000", + "001001103333333330111100001100000000000000000000000000000000", + "000011103333333330111100000000000000000000000000000000000000", + "010011103333333330111111110011110000000000000000000000000000", + "000111103333333330111111111111110000000000000000000000000000", + "000111103333333333333333333333330000000003000000333300000000", + "010011103333333333333333333333333333333333000000333333333333", + "010011103333333333333333333333333333333333000000333333333333", + "010011103333333333333333333333333333333333000000333333333333", + "010011111111111111111111111111111111110000000000330000000000", + "010011111111111111111111111111111110010333333333330000000000", + "010011111111111111111111111111111110010333333333330000000000", + "001100111110000111111111111111111111110333333330000000000000", + "000100001110000111111111000011000011000333333330000000000000", + "000111000000111111000000000000000000000333333330000000000000", + "000011110000000000000000111100111100110333333330000000000000", + "000000001111000000111000000000000010010000000000111111000000", + "000000000000000000000000000000000000011111111111100001000000" + ], + "points": {"warp_0": [41, 9], "warp_1": [48, 9]}, + "warps": [ + {"coord": [41, 9], "enter": "walk_east", "to_map": "Route18_EastEntrance_1F", "to_point": "warp_0"}, + {"coord": [48, 9], "enter": "walk_west", "to_map": "Route18_EastEntrance_1F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route17", "offset": 0}, + {"side": "east", "to_map": "FuchsiaCity", "offset": -10} + ], + "npcs": [ + { + "name": "rocker", + "coord": [46, 14], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 0, + "source_script": "Route18_EventScript_Jacob" + }, + { + "name": "rocker", + "coord": [41, 15], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "Route18_EventScript_Ramiro" + }, + { + "name": "rocker", + "coord": [39, 12], + "facing": "east", + "trainer": {"sight": 6}, + "source_event": 2, + "source_script": "Route18_EventScript_Wilton" + } + ] +} diff --git a/data/games/frlg/maps/base/Route18_EastEntrance_1F.json b/data/games/frlg/maps/base/Route18_EastEntrance_1F.json new file mode 100644 index 0000000..a656b36 --- /dev/null +++ b/data/games/frlg/maps/base/Route18_EastEntrance_1F.json @@ -0,0 +1,40 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route18_EastEntrance_1F", + "source": { + "decomp_file": "data/maps/Route18_EastEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "##.........##", + "#.#########.#", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "#...........#", + "########..###", + "#......#..###", + "#......#..###" + ], + "points": {"warp_0": [1, 6], "warp_1": [11, 6], "warp_2": [9, 10]}, + "warps": [ + {"coord": [1, 6], "enter": "walk_west", "to_map": "Route18", "to_point": "warp_0"}, + {"coord": [11, 6], "enter": "walk_east", "to_map": "Route18", "to_point": "warp_1"}, + {"coord": [9, 10], "enter": "walk_east", "to_map": "Route18_EastEntrance_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "policeman", + "coord": [6, 2], + "source_event": 0, + "source_script": "Route18_EastEntrance_1F_EventScript_Guard" + } + ] +} diff --git a/data/games/frlg/maps/base/Route19.json b/data/games/frlg/maps/base/Route19.json new file mode 100644 index 0000000..072a041 --- /dev/null +++ b/data/games/frlg/maps/base/Route19.json @@ -0,0 +1,231 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route19", + "source": { + "decomp_file": "data/maps/Route19/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "#######..........#######", + "#######..........#######", + "#######.......#..#######", + "#######vvvvvvv#..#######", + "#######.......#..#######", + "#######vvvvvvv#..#######", + "#######.......#..#######", + "#######vvvvvvv#..#######", + "#######..........#######", + "wwwwwwww........wwwwwwww", + "wwwwwwww........wwwwwwww", + "wwwwwwww........wwwwwwww", + "wwwwwwwww....S..wwwwwwww", + "wwwwwwwwwww.....wwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000033333333330000000", + "000000033333333330000000", + "000000033333330330000000", + "000000000000000330000000", + "000000033333330330000000", + "000000000000000330000000", + "000000033333330330000000", + "000000000000000330000000", + "000000033333333330000000", + "111110013333333310011111", + "001110013333333310011000", + "000010013333333310010000", + "000010011333303310010000", + "000010011113333310010000", + "000010011111111110000100", + "000100111111111111100100", + "000100111111111111100100", + "000001111111111111100100", + "000000011111111111000010", + "001110011111111111000010", + "001001111111111111111000", + "011001111111111111111000", + "000111111111111111111000", + "000100111111111111111001", + "000100111111111111111100", + "000111111111111111111100", + "001111111111111111100100", + "001111111111111100100100", + "100111111111111100111100", + "100111111111111111111100", + "001111111111111111111001", + "001111111111111111111001", + "100111110011111111111100", + "100111110011111111111100", + "100111111111111111111001", + "100111111111111111001001", + "001110011111111111000010", + "001110011111111111110010", + "001111111111111110000110", + "001111111111111110000110", + "001001111111111111110010", + "001001111111111111110010", + "111111111111111111111100", + "111111111111111111111100", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111110011", + "111111111111111111000010", + "111111111111111111001000", + "111001111111111111111000", + "111001111111100111100110", + "111111110011100110000110", + "111111110011111110011000", + "110000001100001100111000", + "000000000000000000100000", + "001000010011110010000000" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "FuchsiaCity", "offset": -12}, + {"side": "west", "to_map": "Route20", "offset": 40} + ], + "npcs": [ + { + "name": "swimmer_m_land", + "coord": [15, 10], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "Route19_EventScript_Reece" + }, + { + "name": "swimmer_m_land", + "coord": [10, 9], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "Route19_EventScript_Richard" + }, + { + "name": "swimmer_m_water", + "coord": [12, 17], + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "Route19_EventScript_Tony" + }, + { + "name": "swimmer_m_water", + "coord": [18, 33], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route19_EventScript_Matthew" + }, + { + "name": "swimmer_m_water", + "coord": [8, 27], + "wander": {"min": [6, 25], "max": [10, 29]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 4, + "source_script": "Route19_EventScript_Douglas" + }, + { + "name": "swimmer_m_water", + "coord": [16, 22], + "trainer": {"sight": 6, "looks": ["west", "east"]}, + "source_event": 5, + "source_script": "Route19_EventScript_David" + }, + { + "name": "swimmer_m_water", + "coord": [11, 47], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 6, + "source_script": "Route19_EventScript_Axle" + }, + { + "name": "swimmer_f_water", + "coord": [14, 48], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 7, + "source_script": "Route19_EventScript_Alice" + }, + { + "name": "swimmer_f_water", + "coord": [12, 49], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 8, + "source_script": "Route19_EventScript_Connie" + }, + { + "name": "swimmer_f_water", + "coord": [9, 48], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 9, + "source_script": "Route19_EventScript_Anya" + }, + { + "name": "swimmer_f_water", + "coord": [8, 41], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 10, + "source_script": "Route19_EventScript_Lia" + }, + { + "name": "tuber_m_water", + "coord": [9, 41], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 11, + "source_script": "Route19_EventScript_Luc" + } + ] +} diff --git a/data/games/frlg/maps/base/Route2.json b/data/games/frlg/maps/base/Route2.json new file mode 100644 index 0000000..7b34b3c --- /dev/null +++ b/data/games/frlg/maps/base/Route2.json @@ -0,0 +1,177 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route2", + "source": { + "decomp_file": "data/maps/Route2/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route2/map.json", + "events_sha256": "2562e3736b600c95b8c0a4c2a1bb3fb062f5c50208bebc43cd4303328ccda7ea", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########....############", + "########....############", + "##~~~~~~~...############", + "##~~~~~~~...#.........##", + "##~~~~~~~...#.........##", + "##~~~~~~~...#.........##", + "##~~~~~~~...#########.##", + "##~~~~~~~...#########.##", + "##~~~~~~~...#########.##", + "##..........#########.##", + "##..........#########.##", + "##..........#####.###.##", + "##..........#.S.......##", + "####....###.#.........##", + "###########...........##", + "##########............##", + "##############........##", + "##############........##", + "##############........##", + "##############........##", + "##############........##", + "###################...##", + "#################D#...##", + "##############........##", + "################......##", + "################......##", + "##################.#####", + "################......##", + "################......##", + "################......##", + "################......##", + "################......##", + "################vvv.vv##", + "################......##", + "################......##", + "################......##", + "################......##", + "################vvv.vv##", + "################......##", + "################......##", + "################......##", + "#################....###", + "########################", + "########################", + "########################", + "##........##############", + "##################..####", + "#################....###", + "################......##", + "################......##", + "###.####.#######......##", + "#####..#########vvv.vv##", + "####....########......##", + "##............##......##", + "##............##......##", + "##vvvvvvvvv...##......##", + "##....~~~~~~~.##......##", + "##....~~~~~~~.##vv.vvv##", + "##....~~~~~~~.##......##", + "##....~~~~~~~.##......##", + "##....~~~~~~~.##......##", + "##............##......##", + "##....................##", + "##....##########......##", + "##....##########......##", + "##....##########......##", + "##....##########......##", + "##............##......##", + "##............##......##", + "##....................##", + "##vvvvvvv..vvv..vv.vvv##", + "##............##......##", + "####..........##......##", + "####...S......##......##", + "####..........##......##", + "####..........##......##", + "####..........##......##", + "####..........##......##", + "#######.......##########", + "#######.....############" + ], + "points": { + "warp_0": [5, 13], + "warp_2": [5, 51], + "warp_3": [17, 11], + "warp_4": [17, 22], + "warp_5": [18, 46], + "warp_6": [18, 41] + }, + "warps": [ + {"coord": [5, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, + {"coord": [6, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, + {"coord": [5, 51], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_1"}, + {"coord": [17, 11], "enter": "cave_entrance", "to_map": "DiglettsCave_NorthEntrance", "to_point": "warp_1"}, + {"coord": [17, 22], "enter": "walk_into", "to_map": "Route2_House", "to_point": "warp_1"}, + {"coord": [18, 46], "enter": "cave_entrance", "to_map": "Route2_EastBuilding", "to_point": "warp_1"}, + {"coord": [18, 41], "enter": "walk_south", "to_map": "Route2_EastBuilding", "to_point": "warp_3"}, + {"coord": [19, 41], "enter": "walk_south", "to_map": "Route2_EastBuilding", "to_point": "warp_3"}, + {"coord": [19, 46], "enter": "cave_entrance", "to_map": "Route2_EastBuilding", "to_point": "warp_1"}, + {"coord": [6, 51], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "PewterCity", "offset": -12}, + {"side": "south", "to_map": "ViridianCity", "offset": -12} + ], + "npcs": [ + { + "name": "cut_tree", + "coord": [16, 62], + "hide_flag": "FLAG_TEMP_14", + "source_event": 0, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [15, 69], + "hide_flag": "FLAG_TEMP_13", + "source_event": 1, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [11, 13], + "hide_flag": "FLAG_TEMP_15", + "source_event": 2, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [18, 26], + "hide_flag": "FLAG_TEMP_16", + "source_event": 3, + "source_script": "EventScript_CutTree" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [17, 54], + "source_event": 4, + "hide_flag": "FLAG_HIDE_ROUTE2_ETHER", + "source_script": "Route2_EventScript_ItemEther", + "item": "ether" + }, + { + "name": "item_ball", + "coord": [17, 64], + "source_event": 5, + "hide_flag": "FLAG_HIDE_ROUTE2_PARALYZE_HEAL", + "source_script": "Route2_EventScript_ItemParalyzeHeal", + "item": "paralyze_heal" + } + ] +} diff --git a/data/games/frlg/maps/base/Route20.json b/data/games/frlg/maps/base/Route20.json new file mode 100644 index 0000000..f34834f --- /dev/null +++ b/data/games/frlg/maps/base/Route20.json @@ -0,0 +1,146 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route20", + "source": { + "decomp_file": "data/maps/Route20/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#####wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#######wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#########wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###########ww........wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwww.wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###########...........wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww....wwwwwwwwwwwwwwwwwwwwwwwwwwwww###########............wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww.....wwwwwwwwwwwwwwwwwwwwwwwwwwww###########....#####...wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww....wwwwwwwwwwwwwww...wwwwwwwwwww.#########....#######..wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww....wwwwwwwwww..###.###S...#########.wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww....wwwwwwwwww............###########wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..wwwwwwwwwww...........###########wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.......wwww###########wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###########wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwww.wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.#########wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwww..wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwS###.###wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.......wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww....wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000000000000000011100100000000000000011000011100000000100000100111100001111000000000000000000001110000000000000000000", + "100000000011001111000000001111110011111100000000001100001000000000000000000000110000000000000111001111100000000011000000", + "100000001100000000000011000000000000000000111100000011110000000001000011110000000011001111110000000011110000111100000000", + "111111111100110000111111110000001100000011110011110000100000000000113333333311000000000000000000110000000000000000111111", + "100111111001111111001133311111111111111111110011001100100000000000333333333331111100110000001111001100001111000011100111", + "000000000001001111001333333111111100111111111111001000000000000000333333333333111111111111111111001111111111111111100111", + "011000000111001111111333333311111100111111111111111000000000000000333300000333111111111111111111111111111111111111111111", + "111111111111111111111333333311111111111133333111110011130000000003333000000033111111111111111111111111111111111111111111", + "111111111111111111111333333111111111111133333311110010033000300003330000000003111111111111111111111111111111111111111111", + "111111111111111111111111111111111111111133333311110010033333333333300000000000111111111111111111111111111111111111111111", + "111111111111111111111111111111111111111133333311110011113333333333300000000000001111111111111111111111111111111111111111", + "111111111111111111111111111111111111111111333311111001113333333111100000000000001100111111111111111111111111111111111111", + "111111111111111111111111111111133311111111111111111001111111111110000000000000100100110011111111111111111111111111111111", + "111111111111111133311111111111133311111111111111111110011111111000030000000001100111110011111111111111111111111111111111", + "110011111111001333311111111111133111111111111111111110000000000001110000300011110011001111111111111111111111111111111111", + "110011111111001333311111111111111111111111111100111111100000000111113333333111110000001100111111110011111111111001111111", + "111111000011111111111111110011111111001111111100111111111111111111111113333111110000110000111111110011000011111001111111", + "111100000000110000001111000000111100000011000011001111111111111111111111111111000011110011110000111100000000001111000011", + "000000111100000000000000001100000000110000000000000000000000000000000000000000001100001100000000000000111100000000000000", + "000011000001001000010000110001000010001100111100110000000000000000000000000000110000000000001111000011000000110000111100" + ], + "points": {"warp_0": [60, 8], "warp_1": [72, 14]}, + "warps": [ + {"coord": [60, 8], "enter": "cave_entrance", "to_map": "SeafoamIslands_1F", "to_point": "warp_3"}, + {"coord": [72, 14], "enter": "cave_entrance", "to_map": "SeafoamIslands_1F", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "CinnabarIsland", "offset": 0}, + {"side": "east", "to_map": "Route19", "offset": -40} + ], + "npcs": [ + { + "name": "swimmer_f_water", + "coord": [8, 11], + "trainer": {"sight": 3, "looks": ["south", "north"]}, + "source_event": 0, + "source_script": "Route20_EventScript_Melissa" + }, + { + "name": "picnicker", + "coord": [16, 14], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 1, + "source_script": "Route20_EventScript_Missy" + }, + { + "name": "swimmer_f_water", + "coord": [34, 7], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 2, + "source_script": "Route20_EventScript_Nora" + }, + { + "name": "rocker", + "coord": [43, 9], + "wander": {"min": [42, 8], "max": [44, 10]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route20_EventScript_Roger" + }, + { + "name": "swimmer_m_water", + "coord": [23, 10], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 4, + "source_script": "Route20_EventScript_Dean" + }, + { + "name": "picnicker", + "coord": [73, 16], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "Route20_EventScript_Irene" + }, + { + "name": "swimmer_m_water", + "coord": [111, 9], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 6, + "source_script": "Route20_EventScript_Barry" + }, + { + "name": "swimmer_m_water", + "coord": [106, 11], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 7, + "source_script": "Route20_EventScript_Darrin" + }, + { + "name": "swimmer_f_water", + "coord": [93, 10], + "trainer": {"sight": 5, "looks": ["north", "east", "south", "west"]}, + "source_event": 8, + "source_script": "Route20_EventScript_Shirley" + }, + { + "name": "swimmer_f_water", + "coord": [54, 11], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 9, + "source_script": "Route20_EventScript_Tiffany" + }, + { + "name": "camper", + "coord": [69, 3], + "wander": {"min": [67, 3], "max": [71, 3]}, + "source_event": 10, + "source_script": "Route20_EventScript_Camper" + } + ] +} diff --git a/data/games/frlg/maps/base/Route21_North.json b/data/games/frlg/maps/base/Route21_North.json new file mode 100644 index 0000000..32e4b82 --- /dev/null +++ b/data/games/frlg/maps/base/Route21_North.json @@ -0,0 +1,147 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route21_North", + "source": { + "decomp_file": "data/maps/Route21_North/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "#######wwww#############", + "#######wwww......#######", + "#######wwww......#######", + "#######wwww......#######", + "#######wwww......#######", + "#######wwww~~~~~~#######", + "#######wwww~~~~~~#######", + "#######wwww~~~~~~#######", + "#######wwww~~~~~~#######", + "#######wwww~~~~~~#######", + "#######wwww~~~~~~#######", + "#######wwwwwwwwwwwwwwwww", + "#######wwwwwwwwwwwwwwwww", + "#######wwwwwwwwwwwwwwwww", + "#######wwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwww..wwwwww", + "wwwwwwwwwwwwwww...wwwwww", + "wwwwwwwwwwwwwww..wwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwww..wwwwwwwwwwwwwwww", + "wwwww.....wwwwwwwwwwwwww", + "wwwww.....wwwwwwwwwwwwww", + "wwwww.....wwwwwwwwwwwwww", + "wwwwwwww.wwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwww.wwwwww", + "wwwwwwwwwwwwwwww...wwwww", + "wwwwwwwwwwwwwwww...wwwww", + "wwwwwwwwwwwwwwww..wwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000011110000000000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011111111110011111", + "000000011111111110011000", + "000000011111111100111000", + "000000011111111100110000", + "111110011111111110010000", + "001110000111111110010000", + "000001100111111111100000", + "000001001111111111100000", + "000111001111111111110010", + "001000011111111110010010", + "001000011111111110011000", + "010011111111111111111000", + "010010011111111333311100", + "100110011111113333311100", + "100111111111113333311100", + "001111111111113333111100", + "001113333111111111111001", + "001133333331111111111001", + "001133333331111111111100", + "100133333331111111111100", + "100133333331111111111001", + "100111133311111111111001", + "100111111111111111110011", + "001100111111111111110011", + "001100111111111111111100", + "100111110011111111110000", + "100111110011111111110011", + "010011111111111111111000", + "010011001111111111111000", + "010011001111111133311000", + "010011111111111333331000", + "000111111111111333331000", + "000111111111111333331001", + "011001111111111333311100", + "011001111111111111111100", + "000111111111111111111001", + "100111111111111111111001", + "001111111111111111111100", + "001111111111111111111100" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "PalletTown", "offset": 0}, + {"side": "south", "to_map": "Route21_South", "offset": 0} + ], + "npcs": [ + {"name": "fisher", "coord": [7, 27], "source_event": 0, "source_script": "Route21_North_EventScript_Ronald"}, + {"name": "fisher", "coord": [16, 26], "source_event": 1, "source_script": "Route21_North_EventScript_Wade"}, + { + "name": "swimmer_m_water", + "coord": [12, 44], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "Route21_North_EventScript_Spencer" + }, + { + "name": "swimmer_f_water", + "coord": [14, 35], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 3, + "source_script": "Route21_North_EventScript_Lil" + }, + { + "name": "tuber_m_water", + "coord": [15, 35], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 4, + "source_script": "Route21_North_EventScript_Ian" + } + ] +} diff --git a/data/games/frlg/maps/base/Route21_South.json b/data/games/frlg/maps/base/Route21_South.json new file mode 100644 index 0000000..7ec6052 --- /dev/null +++ b/data/games/frlg/maps/base/Route21_South.json @@ -0,0 +1,147 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route21_South", + "source": { + "decomp_file": "data/maps/Route21_South/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwww.wwwwwwwwwwwwwww", + "wwwwwwww...wwwwwwwwwwwww", + "wwwwwwwww..wwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwww...wwwww", + "wwwwwwwwwwwwwww....wwwww", + "wwwwwwwwwwwwwww...wwwwww", + "wwwwwwwwwwwwwwww..wwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwww....wwwwwwwwwwwwww", + "wwwwww.....wwwwwwwwwwwww", + "wwwwwww....wwwwwwwwwwwww", + "wwwwwwww...wwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwww..wwwwwwwwwwwww", + "wwwwwww....wwwwwwwwwwwww", + "wwwwwww...wwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwww..wwwwwwwwww", + "wwwwwwwwwwww..wwwwwwwwww", + "wwwwwwwwwwww..wwwwwwwwww", + "wwwww.........wwwwwwwwww", + "wwwww.........wwwwwwwwww" + ], + "elevation": [ + "001100111111111111001100", + "001100111111111111001100", + "100111111111111111111001", + "000001111111111111111000", + "011001100111111111110010", + "000011100111111111110010", + "000011111111111111110010", + "000011133311111111110010", + "000011133333111111111000", + "001100133333111111111000", + "010000113333111111100000", + "010011111111111111100000", + "000111111111111111111000", + "000100111111111333331000", + "000100111111113333331000", + "000111111111113333331000", + "010011111111113333311000", + "010011111111111333311000", + "010011111111111111110010", + "010011111111111111110010", + "000111111111111111110010", + "000113333331111111110010", + "000113333333111111111001", + "000113333333111111111001", + "110011333333111111100100", + "000011133333111111100100", + "000011111111111111111001", + "110011111111111111111001", + "100111111111111111111001", + "100111111111111111111001", + "001111111111111111111100", + "001111111111111111100100", + "100100111111111111100001", + "100100001111111111111001", + "000111001111111111111000", + "000111111111111111001000", + "000111113333111111001000", + "000111333333111100111000", + "000111333333111100110010", + "000111333331111111000010", + "010011111111111111001110", + "010011111111111110011100", + "010010011111111110011000", + "010010011111111100111000", + "000111001111111100110000", + "000001001111331100110000", + "100001111111331100110000", + "100111111111331110010000", + "001113333333331110010000", + "001113333333331110011000" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route21_North", "offset": 0}, + {"side": "south", "to_map": "CinnabarIsland", "offset": 0} + ], + "npcs": [ + {"name": "fisher", "coord": [11, 8], "source_event": 0, "source_script": "Route21_South_EventScript_Claude"}, + {"name": "fisher", "coord": [14, 15], "source_event": 1, "source_script": "Route21_South_EventScript_Nolan"}, + { + "name": "swimmer_m_water", + "coord": [15, 24], + "trainer": {"sight": 3, "looks": ["west", "east"]}, + "source_event": 2, + "source_script": "Route21_South_EventScript_Jack" + }, + { + "name": "swimmer_m_water", + "coord": [15, 38], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "Route21_South_EventScript_Jerome" + }, + { + "name": "swimmer_m_water", + "coord": [10, 29], + "wander": {"min": [8, 27], "max": [12, 31]}, + "trainer": {"sight": 4, "looks": ["north", "east", "south", "west"]}, + "source_event": 4, + "source_script": "Route21_South_EventScript_Roland" + } + ] +} diff --git a/data/games/frlg/maps/base/Route22.json b/data/games/frlg/maps/base/Route22.json new file mode 100644 index 0000000..af9c6e8 --- /dev/null +++ b/data/games/frlg/maps/base/Route22.json @@ -0,0 +1,81 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route22", + "source": { + "decomp_file": "data/maps/Route22/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "#############################################...", + "###########################################.#...", + "##################################........#.###.", + "##################################vvvv.vvv#...##", + "######################....................#.....", + "########D######...........................######", + "#####.......###.........................##......", + "###...........#.............######......##......", + "###...........#vvvvvvvwwwwww######vv..vv##......", + "###vvvvvvv..vv#~~~~~~~wwwwww######~~~~~~##......", + "###...........#~~~~~~~wwwwww######~~~~~~##....##", + "###...........#~~~~~~~wwwwww######~~~~~~##....##", + "####...S#######~~~~~~~......######~~~~~~##....##", + "####...........~~~~~~~......######~~~~~~##....##", + "####........................######............##", + "####vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv..vvvvv##", + "####..........................................##", + "####..........................................##", + "####..........................................##", + "################################################", + "################################################", + "################################################", + "################################################", + "################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000333", + "000000000000000000000000000000000000000000030333", + "000000000000000000000000000000000033333333030003", + "000000000000000000000000000000000000003000033300", + "000000000000000000000033333333333333333333033333", + "000000000000000333333333333333333333333333000000", + "000003333333000333333333333333333333333300333333", + "000333333333330333333333333300000033333300333333", + "000333333333330000000011111100000000330000333333", + "000000000033000333333311111100000033333300333333", + "000333333333330333333311111100000033333300333300", + "000333333333330333333311111100000033333300333300", + "000033300000000333333333333300000033333300333300", + "000033333333333333333333333300000033333300333300", + "000033333333333333333333333300000033333333333300", + "000000000000000000000000000000000000000330000000", + "000033333333333333333333333333333333333333333300", + "000033333333333333333333333333333333333333333300", + "000033333333333333333333333333333333333333333300", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000" + ], + "points": {"warp_0": [8, 5]}, + "warps": [ + {"coord": [8, 5], "enter": "walk_into", "to_map": "Route22_NorthEntrance", "to_point": "warp_2"}, + {"coord": [9, 5], "enter": "walk_into", "to_map": "Route22_NorthEntrance", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route23", "offset": 0}, + {"side": "east", "to_map": "ViridianCity", "offset": -10} + ], + "npcs": [ + { + "name": "blue", + "coord": [25, 4], + "hide_flag": "FLAG_HIDE_ROUTE_22_RIVAL", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_ROUTE22_RIVAL" + } + ] +} diff --git a/data/games/frlg/maps/base/Route22_NorthEntrance.json b/data/games/frlg/maps/base/Route22_NorthEntrance.json new file mode 100644 index 0000000..a37d579 --- /dev/null +++ b/data/games/frlg/maps/base/Route22_NorthEntrance.json @@ -0,0 +1,42 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route22_NorthEntrance", + "source": { + "decomp_file": "data/maps/Route22_NorthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###############", + "#######.#######", + "##...........##", + "....#.....#....", + "...............", + "...............", + "...#.......#...", + "...............", + "...............", + "....#.....#....", + "##...........##", + "###############" + ], + "points": {"warp_0": [7, 1], "warp_2": [7, 10]}, + "warps": [ + {"coord": [7, 1], "enter": "cave_entrance", "to_map": "Route23", "to_point": "warp_2"}, + {"coord": [6, 10], "enter": "walk_into", "to_map": "Route22", "to_point": "warp_0"}, + {"coord": [7, 10], "enter": "walk_south", "to_map": "Route22", "to_point": "warp_0"}, + {"coord": [8, 10], "enter": "walk_into", "to_map": "Route22", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "policeman", + "coord": [8, 2], + "source_event": 0, + "source_script": "Route22_NorthEntrance_EventScript_BoulderBadgeGuard" + } + ] +} diff --git a/data/games/frlg/maps/base/Route23.json b/data/games/frlg/maps/base/Route23.json new file mode 100644 index 0000000..291ada2 --- /dev/null +++ b/data/games/frlg/maps/base/Route23.json @@ -0,0 +1,396 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route23", + "source": { + "decomp_file": "data/maps/Route23/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "##########...###########", + "#######..S...S..########", + "#######.#........#######", + "#######.##..#.#..#######", + "######.#.#..#.#.########", + "#######...#..#..########", + "#######...#..#...#######", + "######..#.#.#.....######", + "######..#.#.#...#.######", + "#######..#.#.#..#.######", + "#######..#.#.#..#.######", + "######.#..#..#....######", + "#########.#..#.#..######", + "#######.#.#..#.#..######", + "#######.#.#..#.#.#######", + "#######.#......#.#######", + "##S..S............S..S##", + "##....................##", + "##....................##", + "##....................##", + "###################...##", + "###################...##", + "###################...##", + "###################...##", + "###################...##", + "####################..##", + "#####################.##", + "#####################.##", + "#####.############.##.##", + "##.S...S#########.....##", + "##.......########.....##", + "##.S....#########.....##", + "##.......########.....##", + "###......###############", + "##......################", + "###S...S.###############", + "##......################", + "##.......###############", + "##.#....################", + "##......################", + "###......###############", + "##.S...S.###############", + "###.......###~~~~..#..##", + "##.#.......##~~~......##", + "##.........##~~~......##", + "######......###.......##", + "######......###.......##", + "#########.............##", + "#########.............##", + "#########.............##", + "#########.............##", + "#########.............##", + "##S..S..S......#########", + "##.............#########", + "##.............#########", + "############...#########", + "############...#########", + "############...#########", + "############...#########", + "############...#########", + "############...#########", + "########S~~S...S..S#####", + "########~~~~.......#####", + "########~~~~~......#####", + "########~~~##......#####", + "########~~~##~~~~~~#####", + "#########...#~~~~~~#####", + "#########...#~~~~~~#####", + "#########...#..##..#####", + "#########...#..##..#####", + "########~~~##...#..#####", + "########~~~##...#..#####", + "########..~~~..#...#####", + "#########.~~~..#...S~S##", + "##########........~~~~##", + "##########........~~~~##", + "##########........~~~~##", + "########..............##", + "########wwwwwwww......##", + "########wwwwwwww########", + "########wwwwwwww########", + "########wwwwwwww########", + "########wwwwwwww########", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "#######www##############", + "#######www##############", + "#######www##############", + "#######www##############", + "#####wSwwwwwwwwwwww#####", + "#####wwwwwwwwwwwwww#####", + "#####wwwwwwwwwwwwww#####", + "#####wwwwwwwwwwwwww#####", + "#####wwwwwwwwwwwwww#####", + "#####wwww....wwwwww#####", + "#####wwww....wwwwww#####", + "#####wwww....wwwwww#####", + "#####wwww....wwwwww#####", + "##wwwwwwwwwwwwwwwww#####", + "##wwwwwwwwwwwwwwwww#####", + "##wwwwwwwwwwwwwwwww#####", + "##wwwwwwwwwwwwwwwww#####", + "##wwwwwwwwwwwwwwwww#####", + "#############www########", + "#############www########", + "#############www########", + "#############www########", + "##wwwwwwwwwwSwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "############...#########", + "############...#########", + "############...#########", + "############...#########", + "############...#########", + "##.........S...S......##", + "##....................##", + "##....................##", + "##....................##", + "##...####...############", + "##...####...############", + "##...####...############", + "##...####...############", + "##......S...S.........##", + "####..................##", + "####..................##", + "####..................##", + "####..................##", + "######...###############", + "######...###############", + "######...###############", + "######...###############", + "##S..S...S...........S##", + "##....................##", + "####................####", + "####................####", + "######..............####", + "#############...########", + "#############...########", + "#############...########", + "#############...########", + "######S.....S...S..S####", + "#######.............####", + "#######.............####", + "#######...............##", + "#######...##############", + "########################", + "########################", + "########################", + "########################", + "########################", + "########################" + ], + "elevation": [ + "000000000033300000000000", + "000000033033303300000000", + "000000030333333330000000", + "000000030033030330000000", + "000000303033030300000000", + "000000033303303300000000", + "000000033303303330000000", + "000000330303033333000000", + "000000330303033303000000", + "000000033030303303000000", + "000000033030303303000000", + "000000303303303333000000", + "000000000303303033000000", + "000000030303303033000000", + "000000030303303030000000", + "000000030333333030000000", + "000330333333333333033000", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000003300", + "000000000000000000000300", + "000000000000000000000300", + "000003000000000000300300", + "003033300000000003333300", + "003333333000000003333300", + "003033330000000003333300", + "003333333000000003333300", + "000333333000000000000000", + "003333330000000000000000", + "000033303000000000000000", + "003333330000000000000000", + "003333333000000000000000", + "003033330000000000000000", + "003333330000000000000000", + "000333333000000000000000", + "003033303000000000000000", + "000333333300033333303300", + "003033333330033333333300", + "003333333330033333333300", + "000000333333000333333300", + "000000333333000333333300", + "000000000333333333333300", + "000000000333333333333300", + "000000000333333333333300", + "000000000333333333333300", + "000000000333333333333300", + "000330330333333000000000", + "003333333333333000000000", + "003333333333333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000330333033000000", + "000000003333333333300000", + "000000003333333333300000", + "000000003330033333300000", + "000000003330033333300000", + "000000000333033333300000", + "000000000333033333300000", + "000000000333033003300000", + "000000000333033003300000", + "000000003330033303300000", + "000000003330033303300000", + "000000003333333033300000", + "000000000333333033303000", + "000000000033333333333300", + "000000000033333333333300", + "000000000033333333333300", + "000000003333333333333300", + "000000003333333333333300", + "000000003111111300000000", + "000000003111111300000000", + "000000003111111300000000", + "000000003111111300000000", + "003333333111111333333300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "000000011100000000000000", + "000000011100000000000000", + "000000011100000000000000", + "000000011100000000000000", + "000003011133333333300000", + "000003111111111111300000", + "000003111111111111300000", + "000003111111111111300000", + "000003111111111111300000", + "000003113333331111300000", + "000003113333331111300000", + "000003113333331111300000", + "000003113333331111300000", + "003333113333331111300000", + "003111111111111111300000", + "003111111111111111300000", + "003111111111111111300000", + "003111111111111111300000", + "000000000000011100000000", + "000000000000011100000000", + "000000000000011100000000", + "000000000000011100000000", + "003333333333011133333300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "003333333330333033333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003330000333000000000000", + "003330000333000000000000", + "003330000333000000000000", + "003330000333000000000000", + "003333330333033333333300", + "000033333333333333333300", + "000033333333333333333300", + "000033333333333333333300", + "000033333333333333333300", + "000000333000000000000000", + "000000333000000000000000", + "000000333000000000000000", + "000000333000000000000000", + "000330333033333333333000", + "003333333333333333333300", + "000033333333333333330000", + "000033333333333333330000", + "000000333333333333330000", + "000000000000033300000000", + "000000000000033300000000", + "000000000000033300000000", + "000000000000033300000000", + "000000033333033303300000", + "000000033333333333330000", + "000000033333333333330000", + "000000033333333333333300", + "000000033300000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "points": {"warp_0": [5, 28], "warp_1": [18, 28], "warp_2": [8, 153]}, + "warps": [ + {"coord": [5, 28], "enter": "cave_entrance", "to_map": "VictoryRoad_1F", "to_point": "warp_1"}, + {"coord": [18, 28], "enter": "cave_entrance", "to_map": "VictoryRoad_2F", "to_point": "warp_6"}, + {"coord": [8, 153], "enter": "walk_south", "to_map": "Route22_NorthEntrance", "to_point": "warp_0"}, + {"coord": [9, 154], "enter": "walk_into", "to_map": "Route22_NorthEntrance", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "IndigoPlateau_Exterior", "offset": 0}, + {"side": "south", "to_map": "Route22", "offset": 0} + ], + "npcs": [ + { + "name": "policeman", + "coord": [15, 149], + "source_event": 0, + "source_script": "Route23_EventScript_CascadeBadgeGuard", + "source_local_id": "LOCALID_CASCADE_BADGE_GUARD" + }, + { + "name": "policeman", + "coord": [8, 140], + "source_event": 1, + "source_script": "Route23_EventScript_ThunderBadgeGuard", + "source_local_id": "LOCALID_THUNDER_BADGE_GUARD" + }, + { + "name": "policeman", + "coord": [14, 123], + "source_event": 2, + "source_script": "Route23_EventScript_RainbowBadgeGuard", + "source_local_id": "LOCALID_RAINBOW_BADGE_GUARD" + }, + { + "name": "policeman", + "coord": [16, 112], + "source_event": 3, + "source_script": "Route23_EventScript_SoulBadgeGuard", + "source_local_id": "LOCALID_SOUL_BADGE_GUARD" + }, + { + "name": "policeman", + "coord": [10, 94], + "source_event": 4, + "source_script": "Route23_EventScript_MarshBadgeGuard", + "source_local_id": "LOCALID_MARSH_BADGE_GUARD" + }, + { + "name": "policeman", + "coord": [14, 61], + "source_event": 5, + "source_script": "Route23_EventScript_VolcanoBadgeGuard", + "source_local_id": "LOCALID_VOLCANO_BADGE_GUARD" + }, + { + "name": "policeman", + "coord": [6, 35], + "source_event": 6, + "source_script": "Route23_EventScript_EarthBadgeGuard", + "source_local_id": "LOCALID_EARTH_BADGE_GUARD" + } + ] +} diff --git a/data/games/frlg/maps/base/Route24.json b/data/games/frlg/maps/base/Route24.json new file mode 100644 index 0000000..a16f9e2 --- /dev/null +++ b/data/games/frlg/maps/base/Route24.json @@ -0,0 +1,180 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route24", + "source": { + "decomp_file": "data/maps/Route24/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route24/map.json", + "events_sha256": "f844a16ec16a9aa725bcabf8862ec7b08be16b511f10664ef6e15f2448dd90a8", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################", + "########################", + "########################", + "####.........>...<......", + "####.........>...<......", + "####.........>...<......", + "###vvvv..vvvv#...#vvvvvv", + "###.....................", + "###.....................", + "###.....................", + "###..........###########", + "###..........#..........", + "###..........#...#######", + "###..........#...#######", + "###..........#...#######", + "###..........#...#######", + "###...www#...#...#######", + "###...www#...#...#######", + "###...www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww" + ], + "elevation": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000033333333303330333333", + "000033333333303330333333", + "000033333333303330333333", + "000000033000003330000000", + "000333333333333333333333", + "000333333333333333333333", + "000333333333333333333333", + "000333333333300000000000", + "000333333333303333333333", + "000333333333303330000000", + "000333333333303330000000", + "000333333333303330000000", + "000333333333303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330111111", + "000333111033303330100000", + "000333111033303330100000", + "000333111033303330100000", + "000333111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "CeruleanCity", "offset": -12}, + {"side": "east", "to_map": "Route25", "offset": 0} + ], + "npcs": [ + { + "name": "man", + "coord": [12, 15], + "hide_flag": "FLAG_HIDE_NUGGET_BRIDGE_ROCKET", + "source_event": 0, + "source_script": "Route24_EventScript_Rocket", + "source_local_id": "LOCALID_ROUTE24_ROCKET" + }, + { + "name": "camper", + "coord": [12, 19], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 1, + "source_script": "Route24_EventScript_Ethan" + }, + { + "name": "lass", + "coord": [10, 22], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "Route24_EventScript_Reli" + }, + { + "name": "youngster", + "coord": [12, 25], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 3, + "source_script": "Route24_EventScript_Timmy" + }, + { + "name": "lass", + "coord": [10, 28], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route24_EventScript_Ali" + }, + { + "name": "bug_catcher", + "coord": [12, 31], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "Route24_EventScript_Cale" + }, + { + "name": "camper", + "coord": [5, 21], + "facing": "north", + "trainer": {"sight": 5}, + "source_event": 6, + "source_script": "Route24_EventScript_Shane" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [11, 4], + "source_event": 7, + "hide_flag": "FLAG_HIDE_ROUTE24_TM45", + "source_script": "Route24_EventScript_ItemTM45", + "item": "tm45" + } + ] +} diff --git a/data/games/frlg/maps/base/Route25.json b/data/games/frlg/maps/base/Route25.json new file mode 100644 index 0000000..816168f --- /dev/null +++ b/data/games/frlg/maps/base/Route25.json @@ -0,0 +1,160 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route25", + "source": { + "decomp_file": "data/maps/Route25/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route25/map.json", + "events_sha256": "a4b412784121ae753cb88e5a1be6db1b5575e77946ba3c6b87aca8087b1dfcb6", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################################################################", + "########################################################################", + "############...#...#.....#.....#..........##############################", + ".~~~~~~~~......#...#.....#.....#..........####################wwww######", + ".~~~~~~~~................###.#............######S##D##########wwww######", + "................#.#.#....#...#.....#.........................#wwww######", + "vvvvvvvvvv##..##....#.##.#.........#.........................#wwwww#####", + "................#...#....#......##...........................#wwwwwww###", + ".............#..##..#...........#............................#wwwwwwwwww", + ".............#......#.#.........#..........wwwwww.....wwwwww.#wwwwwwwwww", + "###########################################wwwwww.....wwwwww.#wwwwwwwwww", + "...........................................wwwwww.....wwwwww.#wwwwwwwwww", + "#########################################....................#wwwwwwwwww", + "##############################################################wwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000333033303333303333303333333333000000000000000000000000000000", + "333333333333333033303333303333303333333333000000000000000000001111000000", + "333333333333333333333333300030333333333333000000000000000000001001000000", + "333333333333333303030333303330333330333333333333333333333333301001000000", + "000000000000330033330300303333333330333333333333333333333333301001100000", + "333333333333333303330333303333330033333333333333333333333333301000111000", + "333333333333303300330333333333330333333333333333333333333333301000001111", + "333333333333303333330303333333330333333333311111133333111111301000000000", + "000000000000000000000000000000000000000000011111133333111111301000000000", + "333333333333333333333333333333333333333333311111133333111111301000000000", + "000000000000000000000000000000000000000003333333333333333333301000000000", + "000000000000000000000000000000000000000000000000000000000000001000000000", + "000000000000000000000000000000000000000001111111111111111111111000000000", + "000000000000000000000000000000000000000001100000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000" + ], + "points": {"warp_0": [51, 4]}, + "warps": [{"coord": [51, 4], "enter": "walk_into", "to_map": "Route25_SeaCottage", "to_point": "warp_1"}], + "flag_sets": {}, + "connections": [{"side": "west", "to_map": "Route24", "offset": 0}], + "npcs": [ + { + "name": "hiker", + "coord": [11, 4], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 0, + "source_script": "Route25_EventScript_Franklin" + }, + { + "name": "youngster", + "coord": [18, 2], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 1, + "source_script": "Route25_EventScript_Joey" + }, + { + "name": "hiker", + "coord": [17, 7], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "Route25_EventScript_Wayne" + }, + { + "name": "youngster", + "coord": [22, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route25_EventScript_Dan" + }, + { + "name": "picnicker", + "coord": [22, 8], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route25_EventScript_Kelsey" + }, + { + "name": "hiker", + "coord": [27, 9], + "facing": "north", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "Route25_EventScript_Nob" + }, + { + "name": "camper", + "coord": [28, 4], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 6, + "source_script": "Route25_EventScript_Flint" + }, + { + "name": "youngster", + "coord": [36, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 7, + "source_script": "Route25_EventScript_Chad" + }, + { + "name": "lass", + "coord": [42, 5], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 8, + "source_script": "Route25_EventScript_Haley" + }, + { + "name": "cut_tree", + "coord": [30, 3], + "hide_flag": "FLAG_TEMP_12", + "source_event": 10, + "source_script": "EventScript_CutTree" + }, + {"name": "beauty", "coord": [49, 10], "source_event": 11, "source_script": "Route25_EventScript_Beauty"}, + {"name": "man", "coord": [49, 11], "source_event": 12, "source_script": "Route25_EventScript_Man"} + ], + "items": [ + { + "name": "item_ball", + "coord": [26, 2], + "source_event": 9, + "hide_flag": "FLAG_HIDE_ROUTE25_TM43", + "source_script": "Route25_EventScript_ItemTM43", + "item": "tm43" + } + ] +} diff --git a/data/games/frlg/maps/base/Route25_SeaCottage.json b/data/games/frlg/maps/base/Route25_SeaCottage.json new file mode 100644 index 0000000..922124e --- /dev/null +++ b/data/games/frlg/maps/base/Route25_SeaCottage.json @@ -0,0 +1,50 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route25_SeaCottage", + "source": { + "decomp_file": "data/maps/Route25_SeaCottage/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###############", + "###############", + "#.##########..#", + "###D######D#.##", + "..............#", + "....##........#", + "..............#", + "#.............#", + "#..............", + "###..........##", + "###############" + ], + "points": {"warp_1": [7, 9]}, + "warps": [ + {"coord": [6, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"}, + {"coord": [7, 9], "enter": "walk_south", "to_map": "Route25", "to_point": "warp_0"}, + {"coord": [8, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "bill", + "coord": [7, 5], + "hide_flag": "FLAG_HIDE_BILL_HUMAN_SEA_COTTAGE", + "source_event": 0, + "source_script": "Route25_SeaCottage_EventScript_Bill", + "source_local_id": "LOCALID_BILL_HUMAN" + }, + { + "name": "clefairy", + "coord": [10, 6], + "hide_flag": "FLAG_HIDE_BILL_CLEFAIRY", + "source_event": 1, + "source_script": "Route25_SeaCottage_EventScript_Bill", + "source_local_id": "LOCALID_BILL_CLEFAIRY" + } + ] +} diff --git a/data/games/frlg/maps/base/Route2_EastBuilding.json b/data/games/frlg/maps/base/Route2_EastBuilding.json new file mode 100644 index 0000000..8c69fe2 --- /dev/null +++ b/data/games/frlg/maps/base/Route2_EastBuilding.json @@ -0,0 +1,43 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route2_EastBuilding", + "source": { + "decomp_file": "data/maps/Route2_EastBuilding/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############", + "#######.#######", + "##...#...#...##", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#.............#", + "###############" + ], + "points": {"warp_1": [7, 10], "warp_3": [7, 1]}, + "warps": [ + {"coord": [6, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_5"}, + {"coord": [7, 10], "enter": "walk_south", "to_map": "Route2", "to_point": "warp_5"}, + {"coord": [8, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_5"}, + {"coord": [7, 1], "enter": "cave_entrance", "to_map": "Route2", "to_point": "warp_6"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "scientist", "coord": [4, 6], "source_event": 0, "source_script": "Route2_EastBuilding_EventScript_Aide"}, + { + "name": "rocker", + "coord": [10, 3], + "wander": {"min": [8, 3], "max": [12, 3]}, + "source_event": 1, + "source_script": "Route2_EastBuilding_EventScript_Rocker" + } + ] +} diff --git a/data/games/frlg/maps/base/Route2_ViridianForest_NorthEntrance.json b/data/games/frlg/maps/base/Route2_ViridianForest_NorthEntrance.json new file mode 100644 index 0000000..c4025ad --- /dev/null +++ b/data/games/frlg/maps/base/Route2_ViridianForest_NorthEntrance.json @@ -0,0 +1,53 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route2_ViridianForest_NorthEntrance", + "source": { + "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############", + "#######.#######", + "##...#...#...##", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#.............#", + "###############" + ], + "points": {"warp_1": [7, 10], "warp_3": [7, 1]}, + "warps": [ + {"coord": [6, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, + {"coord": [7, 10], "enter": "walk_south", "to_map": "ViridianForest", "to_point": "warp_2"}, + {"coord": [8, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, + {"coord": [7, 1], "enter": "cave_entrance", "to_map": "Route2", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "youngster", + "coord": [5, 4], + "source_event": 0, + "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_Youngster" + }, + { + "name": "old_man_1", + "coord": [4, 7], + "source_event": 1, + "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_OldMan" + }, + { + "name": "cooltrainer_f", + "coord": [10, 5], + "source_event": 2, + "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF" + } + ] +} diff --git a/data/games/frlg/maps/base/Route2_ViridianForest_SouthEntrance.json b/data/games/frlg/maps/base/Route2_ViridianForest_SouthEntrance.json new file mode 100644 index 0000000..b9f087e --- /dev/null +++ b/data/games/frlg/maps/base/Route2_ViridianForest_SouthEntrance.json @@ -0,0 +1,48 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route2_ViridianForest_SouthEntrance", + "source": { + "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############", + "#######.#######", + "##...#...#...##", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#.............#", + "###############" + ], + "points": {"warp_1": [7, 10], "warp_3": [7, 1]}, + "warps": [ + {"coord": [6, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, + {"coord": [7, 10], "enter": "walk_south", "to_map": "Route2", "to_point": "warp_2"}, + {"coord": [8, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, + {"coord": [7, 1], "enter": "cave_entrance", "to_map": "ViridianForest", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "woman_2", + "coord": [10, 6], + "source_event": 0, + "source_script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman1" + }, + { + "name": "woman_1", + "coord": [4, 7], + "wander": {"min": [3, 6], "max": [5, 8]}, + "source_event": 1, + "source_script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman2" + } + ] +} diff --git a/data/games/frlg/maps/base/Route3.json b/data/games/frlg/maps/base/Route3.json new file mode 100644 index 0000000..fe3efd0 --- /dev/null +++ b/data/games/frlg/maps/base/Route3.json @@ -0,0 +1,106 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route3", + "source": { + "decomp_file": "data/maps/Route3/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "####################################################################........########", + "####################################################################........########", + "####################################################################........########", + "#############......................#################################.......#########", + "###########..........................###############################.....###########", + "###########..........................######................#########.....###########", + "###########.........###.......##.....#####...................#######.....###########", + "###########vvv..vvvv###vvvvvvv##vvv..#####...................#######.....###########", + "#######.............###.......##.....#####vvvv..#######vvvvv.#######vvv..###########", + "....................###.......##................#######......#######.....###########", + "....................###.......###...............#######......#####.......~~~~#######", + ".........###........###.......###~~~~~~~........#######...............##S~~~~~~#####", + "..##########vvvv..vv###vvvvvvv###~~~~~~~~~~~~~~########................~~~~~~~~#####", + "############........###.......###~~~~~~~~~~~~~~########................~~~~~~~~#####", + "############.................######~~~~~~~~~~~~########...............~~~~~~~~~#####", + "##############...............######~~~~~~~~~~~~##########.............~~~~~~~~~#####", + "#######################################~~~~~~~~##########.............~~~~~~########", + "####################################################################################", + "####################################################################################", + "####################################################################################" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route4", "offset": 60}, + {"side": "west", "to_map": "PewterCity", "offset": -10} + ], + "npcs": [ + {"name": "youngster", "coord": [70, 13], "source_event": 0, "source_script": "Route3_EventScript_Youngster"}, + { + "name": "lass", + "coord": [40, 11], + "wander": {"min": [40, 10], "max": [40, 12]}, + "trainer": {"sight": 3, "looks": ["north", "south"]}, + "source_event": 1, + "source_script": "Route3_EventScript_Robin" + }, + { + "name": "bug_catcher", + "coord": [32, 6], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 2, + "source_script": "Route3_EventScript_James" + }, + { + "name": "lass", + "coord": [30, 3], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 3, + "source_script": "Route3_EventScript_Sally" + }, + { + "name": "bug_catcher", + "coord": [25, 4], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route3_EventScript_Greg" + }, + { + "name": "youngster", + "coord": [29, 10], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 5, + "source_script": "Route3_EventScript_Calvin" + }, + { + "name": "lass", + "coord": [19, 9], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 6, + "source_script": "Route3_EventScript_Janice" + }, + { + "name": "bug_catcher", + "coord": [12, 6], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 7, + "source_script": "Route3_EventScript_Colton" + }, + { + "name": "youngster", + "coord": [17, 4], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 8, + "source_script": "Route3_EventScript_Ben" + } + ] +} diff --git a/data/games/frlg/maps/base/Route4.json b/data/games/frlg/maps/base/Route4.json new file mode 100644 index 0000000..c7057e5 --- /dev/null +++ b/data/games/frlg/maps/base/Route4.json @@ -0,0 +1,112 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route4", + "source": { + "decomp_file": "data/maps/Route4/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route4/map.json", + "events_sha256": "5b0b84cb73ecc6597470d01d5933ca36d5e4410cdda53dddb72922689e5653ac", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "############################################################################################################", + "##########.....#############################################################################################", + "###########################################..<......>.#########.<.....<###############...........###########", + "###########################################..<......>..>.....<..<.....<.....................................", + "####...#..#################################..<......>..>.....<..<.....<.....................................", + "###..#....SSD##.###.############.########....#vv..vv#..>.....<..<.....#vvvvvvvvvvvvvvvvvvvvvvvvvv###########", + "###..................##########........................>.....<..<................................#wwwwwwwwww", + "###vvvvv..........S..##########...S....................>.....<..#v..vvvvvvvvvvvvvvvvvvvvvvvvvvvvv#wwwwwwwwww", + "###..................#########.........................>.....<...................................#wwwwwwwwww", + "###............vvvvvvv########vvvvvvvvvvv...vvvvvvvvvvv#.....#v#......................####vvvvvvv###########", + "###.#.................########.................................#vvvvv..####vvvvvvvvvvv####..................", + "###vvvvvvvvv........#.########.........................................####~~~~~~~~~~~####..................", + "###............vvvvvvv###################..............................####~~~~~~~~~~~####..................", + "######.#..............###########################......................####~~~~~~~~~~~~~##.......###########", + "########.............############################......................####~~~~~~~~~~~~~##vv...vv###########", + "########vvv.......###############################vv..vvvvvvvvv..vvvvv######~~~~~~~~~~~~~##.......###########", + "########........#################################....................######~~~~~~~~~~~~.##.......###########", + "########........#################################....................######~~~~~~~~~~~...........###########", + "########.....vvv########################################.............#################.........#############", + "########........############################################################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000033333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000033033333303000000000303333300000000000000003333333333300000000000", + "000000000000000000000000000000000000000000033033333303303333303303333303333333333333333333333333333333333333", + "000033303300000000000000000000000000000000033033333303303333303303333303333333333333333333333333333333333333", + "000330333300000300030000000000003000000003333000330003303333303303333300000000000000000000000000000000000000", + "000333333333333333333000000000033333333333333333333333303333303303333333333333333333333333333333301111111111", + "000000003333333333033000000000033303333333333333333333303333303300330000000000000000000000000000001111111111", + "000333333333333333333000000000333333333333333333333333303333303333333333333333333333333333333333301111111111", + "000333333333333000000000000000000000000003330000000000003333300033333333333333333333330000000000000000000000", + "000303333333333333333300000000333333333333333333333333333333333000000330000000000000000000333333333333333333", + "000000000000333333330300000000333333333333333333333333333333333333333330000333333333330000333333333333333333", + "000333333333333000000000000000000000000003333333333333333333333333333330000333333333330000333333333333333333", + "000000303333333333333300000000000000000000000000033333333333333333333330000333333333333300333333300000000000", + "000000003333333333333000000000000000000000000000033333333333333333333330000333333333333300003330000000000000", + "000000000003333333000000000000000000000000000000000330000000003300000000000333333333333300333333300000000000", + "000000003333333300000000000000000000000000000000033333333333333333333000000333333333333300333333300000000000", + "000000003333333300000000000000000000000000000000033333333333333333333000000333333333333333333333300000000000", + "000000003333300000000000000000000000000000000000000000003333333333333000000000000000003333333330000000000000", + "000000003333333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "points": {"warp_0": [19, 5], "warp_1": [32, 5], "warp_2": [12, 5]}, + "warps": [ + {"coord": [19, 5], "enter": "cave_entrance", "to_map": "MtMoon_1F", "to_point": "warp_3"}, + {"coord": [32, 5], "enter": "cave_entrance", "to_map": "MtMoon_B1F", "to_point": "warp_7"}, + {"coord": [12, 5], "enter": "walk_into", "to_map": "Route4_PokemonCenter_1F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "Route3", "offset": -60}, + {"side": "east", "to_map": "CeruleanCity", "offset": -10} + ], + "npcs": [ + { + "name": "woman_1", + "coord": [9, 8], + "wander": {"min": [8, 7], "max": [10, 9]}, + "source_event": 0, + "source_script": "Route4_EventScript_Woman" + }, + { + "name": "lass", + "coord": [75, 3], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "Route4_EventScript_Crissy" + }, + { + "name": "boy", + "coord": [15, 14], + "wander": {"min": [14, 14], "max": [16, 14]}, + "source_event": 3, + "source_script": "Route4_EventScript_Boy" + }, + {"name": "black_belt", "coord": [47, 3], "source_event": 4, "source_script": "Route4_EventScript_MegaPunchTutor"}, + {"name": "black_belt", "coord": [50, 3], "source_event": 5, "source_script": "Route4_EventScript_MegaKickTutor"} + ], + "items": [ + { + "name": "item_ball", + "coord": [67, 5], + "source_event": 2, + "hide_flag": "FLAG_HIDE_ROUTE4_TM05", + "source_script": "Route4_EventScript_ItemTM05", + "item": "tm05" + } + ] +} diff --git a/data/games/frlg/maps/base/Route4_PokemonCenter_1F.json b/data/games/frlg/maps/base/Route4_PokemonCenter_1F.json new file mode 100644 index 0000000..08382b7 --- /dev/null +++ b/data/games/frlg/maps/base/Route4_PokemonCenter_1F.json @@ -0,0 +1,83 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route4_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/Route4_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "salesman_front": [2, 3], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "Route4", "to_point": "warp_2"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "Route4", "to_point": "warp_2"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "Route4", "to_point": "warp_2"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "Route4_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "Route4_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_ROUTE4_NURSE" + }, + { + "name": "balding_man", + "coord": [1, 3], + "source_event": 1, + "source_script": "Route4_PokemonCenter_1F_EventScript_MagikarpSalesman" + }, + { + "name": "gentleman", + "coord": [12, 5], + "source_event": 2, + "source_script": "Route4_PokemonCenter_1F_EventScript_Gentleman" + }, + { + "name": "boy", + "coord": [5, 4], + "wander": {"min": [4, 3], "max": [6, 5]}, + "source_event": 3, + "source_script": "Route4_PokemonCenter_1F_EventScript_Boy" + }, + { + "name": "youngster", + "coord": [14, 4], + "source_event": 4, + "source_script": "Route4_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "clipboard", + "coord": [12, 6], + "source_event": 5, + "source_script": "Route4_PokemonCenter_1F_EventScript_Newspaper" + } + ] +} diff --git a/data/games/frlg/maps/base/Route5.json b/data/games/frlg/maps/base/Route5.json new file mode 100644 index 0000000..9d13920 --- /dev/null +++ b/data/games/frlg/maps/base/Route5.json @@ -0,0 +1,64 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route5", + "source": { + "decomp_file": "data/maps/Route5/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#.#####..#....###############", + "###############....#.#####..#....###############", + "###############....#.#####..#....###############", + "###############....#.##D##..#....###############", + "###############....#........#....###############", + "###############....vvvvvvvvvv....###############", + "###############..................###############", + "###############...............##################", + "###############...............##################", + "###############...............#D################", + "###############.......#....#....S###############", + "###############.......######.....###############", + "################################################", + "##############........######......##############", + "################################################", + "################################################", + "########################..######################", + "#######################....#####################" + ], + "points": {"warp_0": [31, 31], "warp_1": [23, 25], "warp_2": [24, 32], "warp_3": [25, 32]}, + "warps": [ + {"coord": [31, 31], "enter": "walk_into", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_1"}, + {"coord": [23, 25], "enter": "walk_into", "to_map": "Route5_PokemonDayCare", "to_point": "warp_1"}, + {"coord": [24, 32], "enter": "walk_south", "to_map": "Route5_SouthEntrance", "to_point": "warp_1"}, + {"coord": [25, 32], "enter": "walk_south", "to_map": "Route5_SouthEntrance", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "CeruleanCity", "offset": 0}, + {"side": "south", "to_map": "SaffronCity_Connection", "offset": 0} + ] +} diff --git a/data/games/frlg/maps/base/Route5_SouthEntrance.json b/data/games/frlg/maps/base/Route5_SouthEntrance.json new file mode 100644 index 0000000..5c61f5f --- /dev/null +++ b/data/games/frlg/maps/base/Route5_SouthEntrance.json @@ -0,0 +1,35 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route5_SouthEntrance", + "source": { + "decomp_file": "data/maps/Route5_SouthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#########", + "####.####", + "..#...#..", + "#.#...#.#", + "..#...#..", + "..#...#..", + "#.#...#.#", + "..#...#..", + "..#...#..", + "#.#...#.#", + "#########" + ], + "points": {"warp_1": [4, 1], "warp_2": [4, 9]}, + "warps": [ + {"coord": [3, 9], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_9"}, + {"coord": [4, 1], "enter": "cave_entrance", "to_map": "Route5", "to_point": "warp_2"}, + {"coord": [4, 9], "enter": "walk_south", "to_map": "SaffronCity", "to_point": "warp_9"}, + {"coord": [5, 1], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "policeman", "coord": [1, 5], "source_event": 0, "source_script": "Route5_SouthEntrance_EventScript_Guard"} + ] +} diff --git a/data/games/frlg/maps/base/Route6.json b/data/games/frlg/maps/base/Route6.json new file mode 100644 index 0000000..4259088 --- /dev/null +++ b/data/games/frlg/maps/base/Route6.json @@ -0,0 +1,140 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route6", + "source": { + "decomp_file": "data/maps/Route6/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "########################", + "########################", + "########################", + "########################", + "########################", + "##.......###..###.....##", + "##.......#......#.....##", + "##vvv.vvvv......vvv.vv##", + "##....................##", + "##....................##", + "##....................##", + "##vvvvvvv.vvvvvvvv######", + "##................######", + "##................#D####", + "##....................##", + "##~~~~...~~~~~~......S##", + "##~~~~...~~~~~~~~~~~~~##", + "##~~~~...~~~~~~~~~~~~~##", + "##~~~~...~~~~~~~~~~~~~##", + "##~~~~..............~~##", + "##~~~~..............~~##", + "##~~~~..............~~##", + "##~~~~~~~~~~~~~~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##..................~~##", + "##..................~~##", + "##..................~~##", + "#######......~~~~#######", + "##....#......~~~~#....##", + "#######......~~~~#######", + "#######......~~~~#######", + "##########...###########", + "######...#...#....######", + "########.#...###########", + "########.#...###########", + "wwwwwwwww#...###########", + "wwwwwwwww#...###########" + ], + "elevation": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "003333333000330003333300", + "003333333033333303333300", + "000003000033333300030000", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000000300000000000000", + "003333333333333333000000", + "003333333333333333000000", + "003333333333333333333300", + "003333333333333333333000", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "001111111111111333333300", + "001111111111111333333300", + "001111111111111333333300", + "001111111111111333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000033333333330000000", + "003333033333333330333300", + "000000033333333330000000", + "000000033333333330000000", + "000000000033300000000000", + "000000333033303333000000", + "000000003033300000000000", + "000000003033300000000000", + "111111111033300000000000", + "000000001033300000000000" + ], + "points": {"warp_0": [19, 13], "warp_1": [12, 5]}, + "warps": [ + {"coord": [19, 13], "enter": "walk_into", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_1"}, + {"coord": [12, 5], "enter": "cave_entrance", "to_map": "Route6_NorthEntrance", "to_point": "warp_2"}, + {"coord": [13, 5], "enter": "cave_entrance", "to_map": "Route6_NorthEntrance", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "SaffronCity_Connection", "offset": 0}, + {"side": "south", "to_map": "VermilionCity", "offset": -12} + ], + "npcs": [ + { + "name": "bug_catcher", + "coord": [3, 16], + "facing": "east", + "trainer": {"sight": 5}, + "source_event": 0, + "source_script": "Route6_EventScript_Keigo" + }, + {"name": "camper", "coord": [12, 21], "source_event": 1, "source_script": "Route6_EventScript_Ricky"}, + {"name": "picnicker", "coord": [13, 21], "source_event": 2, "source_script": "Route6_EventScript_Nancy"}, + { + "name": "bug_catcher", + "coord": [20, 25], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "Route6_EventScript_Elijah" + }, + { + "name": "picnicker", + "coord": [13, 32], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "Route6_EventScript_Isabelle" + }, + { + "name": "camper", + "coord": [13, 33], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "Route6_EventScript_Jeff" + } + ] +} diff --git a/data/games/frlg/maps/base/Route6_NorthEntrance.json b/data/games/frlg/maps/base/Route6_NorthEntrance.json new file mode 100644 index 0000000..df3ec56 --- /dev/null +++ b/data/games/frlg/maps/base/Route6_NorthEntrance.json @@ -0,0 +1,35 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route6_NorthEntrance", + "source": { + "decomp_file": "data/maps/Route6_NorthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#########", + "####.####", + "..#...#..", + "#.#...#.#", + "..#...#..", + "..#...#..", + "#.#...#.#", + "..#...#..", + "..#...#..", + "#.#...#.#", + "#########" + ], + "points": {"warp_0": [4, 1], "warp_2": [4, 9]}, + "warps": [ + {"coord": [4, 1], "enter": "cave_entrance", "to_map": "SaffronCity", "to_point": "warp_11"}, + {"coord": [5, 1], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_11"}, + {"coord": [4, 9], "enter": "walk_south", "to_map": "Route6", "to_point": "warp_1"}, + {"coord": [5, 9], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "policeman", "coord": [7, 5], "source_event": 0, "source_script": "Route6_NorthEntrance_EventScript_Guard"} + ] +} diff --git a/data/games/frlg/maps/base/Route7.json b/data/games/frlg/maps/base/Route7.json new file mode 100644 index 0000000..8af4122 --- /dev/null +++ b/data/games/frlg/maps/base/Route7.json @@ -0,0 +1,42 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route7", + "source": { + "decomp_file": "data/maps/Route7/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################", + "########################", + "..........>~~~~~~~~#####", + "..........>~~~~~~~~#####", + "..........>~~~~~~~~#####", + "..........>~~~~~~..#####", + "####......>~~~~~~..#....", + "####......>........#####", + "####vv..vv#.....######..", + "####............######..", + "####............######..", + "####............######..", + "####vv####..vvvvvv######", + "####..####.........#.#..", + "####.S#D##.........#####", + "####...............#####", + "####...............#####", + "####................####", + "########################", + "########################" + ], + "points": {"warp_0": [7, 14], "warp_1": [15, 10]}, + "warps": [ + {"coord": [7, 14], "enter": "walk_into", "to_map": "UndergroundPath_WestEntrance", "to_point": "warp_1"}, + {"coord": [15, 10], "enter": "walk_east", "to_map": "Route7_EastEntrance", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "CeladonCity", "offset": -10}, + {"side": "east", "to_map": "SaffronCity_Connection", "offset": -10} + ] +} diff --git a/data/games/frlg/maps/base/Route7_EastEntrance.json b/data/games/frlg/maps/base/Route7_EastEntrance.json new file mode 100644 index 0000000..a56d211 --- /dev/null +++ b/data/games/frlg/maps/base/Route7_EastEntrance.json @@ -0,0 +1,33 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route7_EastEntrance", + "source": { + "decomp_file": "data/maps/Route7_EastEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "##.........##", + "#.#########.#", + "#...........#", + "#...........#", + "#...........#", + "#.#########.#", + "##.........##" + ], + "points": {"warp_0": [1, 5], "warp_2": [11, 5]}, + "warps": [ + {"coord": [1, 5], "enter": "walk_west", "to_map": "Route7", "to_point": "warp_1"}, + {"coord": [1, 6], "enter": "walk_into", "to_map": "Route7", "to_point": "warp_1"}, + {"coord": [11, 5], "enter": "walk_east", "to_map": "SaffronCity", "to_point": "warp_8"}, + {"coord": [11, 6], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_8"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "policeman", "coord": [6, 2], "source_event": 0, "source_script": "Route7_EastEntrance_EventScript_Guard"} + ] +} diff --git a/data/games/frlg/maps/base/Route8.json b/data/games/frlg/maps/base/Route8.json new file mode 100644 index 0000000..9ad50ed --- /dev/null +++ b/data/games/frlg/maps/base/Route8.json @@ -0,0 +1,158 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route8", + "source": { + "decomp_file": "data/maps/Route8/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "tiles": [ + "########################################################################", + "############....########################################################", + "################.........#..............................################", + "################.........#..............................################", + "#############D##.........#..............................################", + "########........S..#vvvvv#..............................################", + "....####...........#.....#..............................######......####", + "##########.........#.....#..............................######......####", + ".######............#.....#........#############.........######......####", + ".######............#vvvvv#.......##.~~.~~.~~..##........######..........", + ".######............#.....#.......#...~~~~~.~~..#........######..........", + ".######............#.............#..~~.~.~~.~..#........######..........", + "########...........#.............#..~~~~~~~~~~..........######......####", + "....########.......#######.......#.~.~.~.~.~~~.#........######......####", + "############.....................#.~~~~~~~~.~..#....................####", + "############........................~.~.~~.~.~.#....................####", + "############.....................#.~.~~~.~~~~~.#....................####", + "############.....................#....~.~~..~..#....................####", + "############.....................#.....~.......#....................####", + "########################################################################" + ], + "points": {"warp_0": [13, 4], "warp_1": [7, 10]}, + "warps": [ + {"coord": [13, 4], "enter": "walk_into", "to_map": "UndergroundPath_EastEntrance", "to_point": "warp_1"}, + {"coord": [7, 10], "enter": "walk_west", "to_map": "Route8_WestEntrance", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "SaffronCity_Connection", "offset": -10}, + {"side": "east", "to_map": "LavenderTown", "offset": 0} + ], + "npcs": [ + { + "name": "lass", + "coord": [62, 14], + "facing": "west", + "trainer": {"sight": 6}, + "source_event": 0, + "source_script": "Route8_EventScript_Julia" + }, + { + "name": "old_man_1", + "coord": [55, 15], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "Route8_EventScript_Rich" + }, + { + "name": "scientist", + "coord": [51, 6], + "trainer": {"sight": 4, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "Route8_EventScript_Glenn" + }, + { + "name": "lass", + "coord": [29, 3], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "Route8_EventScript_Paige" + }, + { + "name": "scientist", + "coord": [29, 4], + "facing": "east", + "trainer": {"sight": 6}, + "source_event": 4, + "source_script": "Route8_EventScript_Leslie" + }, + { + "name": "lass", + "coord": [29, 5], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "Route8_EventScript_Andrea" + }, + { + "name": "lass", + "coord": [29, 6], + "facing": "east", + "trainer": {"sight": 6}, + "source_event": 6, + "source_script": "Route8_EventScript_Megan" + }, + { + "name": "old_man_1", + "coord": [21, 3], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 7, + "source_script": "Route8_EventScript_Stan" + }, + { + "name": "scientist", + "coord": [9, 6], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 8, + "source_script": "Route8_EventScript_Aidan" + }, + { + "name": "cut_tree", + "coord": [33, 15], + "hide_flag": "FLAG_TEMP_12", + "source_event": 9, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [47, 12], + "hide_flag": "FLAG_TEMP_13", + "source_event": 10, + "source_script": "EventScript_CutTree" + }, + { + "name": "little_girl", + "coord": [40, 3], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 11, + "source_script": "Route8_EventScript_Eli" + }, + { + "name": "little_girl", + "coord": [41, 3], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 12, + "source_script": "Route8_EventScript_Anne" + }, + { + "name": "biker", + "coord": [14, 16], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 13, + "source_script": "Route8_EventScript_Ricardo" + }, + { + "name": "biker", + "coord": [24, 17], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 14, + "source_script": "Route8_EventScript_Jaren" + } + ] +} diff --git a/data/games/frlg/maps/base/Route8_WestEntrance.json b/data/games/frlg/maps/base/Route8_WestEntrance.json new file mode 100644 index 0000000..717be95 --- /dev/null +++ b/data/games/frlg/maps/base/Route8_WestEntrance.json @@ -0,0 +1,33 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route8_WestEntrance", + "source": { + "decomp_file": "data/maps/Route8_WestEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "##.........##", + "#.#########.#", + "#...........#", + "#...........#", + "#...........#", + "#.#########.#", + "##.........##" + ], + "points": {"warp_1": [1, 5], "warp_2": [11, 5]}, + "warps": [ + {"coord": [1, 4], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_10"}, + {"coord": [1, 5], "enter": "walk_west", "to_map": "SaffronCity", "to_point": "warp_10"}, + {"coord": [11, 5], "enter": "walk_east", "to_map": "Route8", "to_point": "warp_1"}, + {"coord": [11, 6], "enter": "walk_into", "to_map": "Route8", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "policeman", "coord": [6, 2], "source_event": 0, "source_script": "Route8_WestEntrance_EventScript_Guard"} + ] +} diff --git a/data/games/frlg/maps/base/Route9.json b/data/games/frlg/maps/base/Route9.json new file mode 100644 index 0000000..0d09894 --- /dev/null +++ b/data/games/frlg/maps/base/Route9.json @@ -0,0 +1,149 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "Route9", + "source": { + "decomp_file": "data/maps/Route9/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route9/map.json", + "events_sha256": "0a8b7cfd3028e15d59903f3f5dfc503f98712e5592d8d6a99a26cddc430d5270", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################################################################", + "......#~~~~~~~~~~~............######~~~~~~######.................#######", + "#######~~~~~~~~~~~............######~~~~~~######.................#######", + "#######~~~~~~~~~~~#####.......######......######..........#####..#######", + "#######~~~~~~~~~~~#####vvvvv..######vv..vv######vv..vvvvvv#####vv#######", + "#######~~~~~~~~~~~#####.......######......######..........#####..#######", + "......#...........#####.......######......................#####..#######", + "#######vvvvvvvv#..#####......S###########.................#####..#######", + "...............########.............#####....#####...##########.........", + "..#............########.............#####....#####...#####..............", + "###########....########vvvvvvvvvvv..#####....#####...#####..............", + "....#######vvvv########.............#####vvvv#####vv.#####...#####...###", + "###########....########.............#####....#####...#####vvv#####vvv###", + "###########..........................................#####...#####...###", + "###########...............######.....................#####...#####...###", + "###########vvvvvvvvv..vvvv######vv..vvvvvvvvvvvvvvvvv#####vvv#####vvv###", + "###########...............######.....................................###", + "###########...............######.....................................###", + "########################################################################", + "########################################################################" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "CeruleanCity", "offset": -10}, + {"side": "east", "to_map": "Route10", "offset": 0} + ], + "npcs": [ + { + "name": "picnicker", + "coord": [14, 10], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "Route9_EventScript_Alicia" + }, + { + "name": "hiker", + "coord": [20, 17], + "trainer": {"sight": 4, "looks": ["north", "west"]}, + "source_event": 1, + "source_script": "Route9_EventScript_Jeremy" + }, + { + "name": "hiker", + "coord": [61, 16], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 2, + "source_script": "Route9_EventScript_Alan" + }, + { + "name": "camper", + "coord": [26, 7], + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route9_EventScript_Chris" + }, + { + "name": "bug_catcher", + "coord": [26, 1], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route9_EventScript_Brent" + }, + { + "name": "bug_catcher", + "coord": [49, 7], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "Route9_EventScript_Conner" + }, + { + "name": "hiker", + "coord": [53, 2], + "wander": {"min": [50, 2], "max": [56, 2]}, + "trainer": {"sight": 1, "looks": ["west", "east"]}, + "source_event": 6, + "source_script": "Route9_EventScript_Brice" + }, + { + "name": "picnicker", + "coord": [60, 9], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 7, + "source_script": "Route9_EventScript_Caitlin" + }, + { + "name": "camper", + "coord": [36, 6], + "facing": "east", + "trainer": {"sight": 5}, + "source_event": 8, + "source_script": "Route9_EventScript_Drew" + }, + { + "name": "cut_tree", + "coord": [2, 8], + "hide_flag": "FLAG_TEMP_12", + "source_event": 9, + "source_script": "EventScript_CutTree", + "source_local_id": "LOCALID_ROUTE9_CUT_TREE" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [12, 17], + "source_event": 10, + "hide_flag": "FLAG_HIDE_ROUTE9_TM40", + "source_script": "Route9_EventScript_ItemTM40", + "item": "tm40" + }, + { + "name": "item_ball", + "coord": [65, 17], + "source_event": 11, + "hide_flag": "FLAG_HIDE_ROUTE9_BURN_HEAL", + "source_script": "Route9_EventScript_ItemBurnHeal", + "item": "burn_heal" + } + ] +} diff --git a/data/games/frlg/maps/base/SSAnne_1F_Corridor.json b/data/games/frlg/maps/base/SSAnne_1F_Corridor.json new file mode 100644 index 0000000..654257b --- /dev/null +++ b/data/games/frlg/maps/base/SSAnne_1F_Corridor.json @@ -0,0 +1,68 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SSAnne_1F_Corridor", + "source": { + "decomp_file": "data/maps/SSAnne_1F_Corridor/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "tiles": [ + ".................#####.........", + ".................##D##.........", + ".................#...#.........", + ".................#...#.........", + ".................#...#.........", + ".................#...#.........", + "#.################...##########", + "##################...##########", + "###...........................#", + "###...........................#", + "#.............................#", + "#...######################....#", + "#...######################....#", + "#...######################....#", + "#...######################....#", + "#...######################....#", + "#...########################..#", + "#...########################..#", + "#...########################..#", + ".###.##########################", + "###############################" + ], + "points": { + "warp_0": [3, 8], + "warp_1": [2, 18], + "warp_2": [19, 1], + "warp_3": [20, 0], + "warp_5": [28, 17], + "warp_6": [5, 10], + "warp_7": [8, 10], + "warp_8": [11, 10], + "warp_9": [14, 10], + "warp_10": [17, 10], + "warp_11": [23, 10], + "warp_12": [20, 10] + }, + "warps": [ + {"coord": [3, 8], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_0"}, + {"coord": [2, 18], "enter": "walk_south", "to_map": "SSAnne_Kitchen", "to_point": "warp_0"}, + {"coord": [19, 1], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_2"}, + {"coord": [20, 0], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_3"}, + {"coord": [3, 20], "enter": "walk_into", "to_map": "SSAnne_Kitchen", "to_point": "warp_0"}, + {"coord": [28, 17], "enter": "walk_west", "to_map": "SSAnne_B1F_Corridor", "to_point": "warp_0"}, + {"coord": [5, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room1", "to_point": "warp_0"}, + {"coord": [8, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room2", "to_point": "warp_0"}, + {"coord": [11, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room3", "to_point": "warp_0"}, + {"coord": [14, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room4", "to_point": "warp_0"}, + {"coord": [17, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room5", "to_point": "warp_0"}, + {"coord": [23, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room7", "to_point": "warp_0"}, + {"coord": [20, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room6", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "sailor", "coord": [18, 8], "source_event": 0, "source_script": "SSAnne_1F_Corridor_EventScript_Sailor"}, + {"name": "worker_m", "coord": [12, 9], "source_event": 1, "source_script": "SSAnne_1F_Corridor_EventScript_WorkerM"} + ] +} diff --git a/data/games/frlg/maps/base/SSAnne_1F_Room6.json b/data/games/frlg/maps/base/SSAnne_1F_Room6.json new file mode 100644 index 0000000..5e73614 --- /dev/null +++ b/data/games/frlg/maps/base/SSAnne_1F_Room6.json @@ -0,0 +1,18 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SSAnne_1F_Room6", + "source": { + "decomp_file": "data/maps/SSAnne_1F_Room6/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": ["######", "##D###", ".....#", "......", "......", "##..#.", "##..#.", "##...."], + "points": {"warp_0": [2, 1]}, + "warps": [{"coord": [2, 1], "enter": "walk_into", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_12"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "woman_2", "coord": [3, 5], "source_event": 0, "source_script": "SSAnne_1F_Room6_EventScript_Woman"} + ] +} diff --git a/data/games/frlg/maps/base/SSAnne_2F_Corridor.json b/data/games/frlg/maps/base/SSAnne_2F_Corridor.json new file mode 100644 index 0000000..e0a81ca --- /dev/null +++ b/data/games/frlg/maps/base/SSAnne_2F_Corridor.json @@ -0,0 +1,69 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SSAnne_2F_Corridor", + "source": { + "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "##################################", + "##################################", + "#..###########################.###", + "#..###########################.###", + "#....#########################...#", + "#....#########################...#", + "#....#########################...#", + "#....#########################...#", + "#....#######################.....#", + "#....#######################.....#", + "#....#D###D###D###D###D###D#.....#", + "###..............................#", + "###..............................#", + "###..............................#", + "#................................#", + "##################################" + ], + "points": { + "warp_0": [2, 2], + "warp_1": [3, 12], + "warp_2": [30, 2], + "warp_3": [6, 10], + "warp_4": [10, 10], + "warp_5": [14, 10], + "warp_6": [18, 10], + "warp_7": [22, 10], + "warp_8": [26, 10] + }, + "warps": [ + {"coord": [2, 2], "enter": "walk_east", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_0"}, + {"coord": [3, 12], "enter": "walk_west", "to_map": "SSAnne_3F_Corridor", "to_point": "warp_1"}, + {"coord": [30, 2], "enter": "walk_east", "to_map": "SSAnne_CaptainsOffice", "to_point": "warp_0"}, + {"coord": [6, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room1", "to_point": "warp_0"}, + {"coord": [10, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room2", "to_point": "warp_0"}, + {"coord": [14, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room3", "to_point": "warp_0"}, + {"coord": [18, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room4", "to_point": "warp_0"}, + {"coord": [22, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room5", "to_point": "warp_0"}, + {"coord": [26, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room6", "to_point": "warp_0"} + ], + "flag_sets": {"new_game": ["FLAG_HIDE_SS_ANNE_RIVAL"]}, + "connections": [], + "npcs": [ + { + "name": "blue", + "coord": [30, 2], + "hide_flag": "FLAG_HIDE_SS_ANNE_RIVAL", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_SS_ANNE_RIVAL" + }, + { + "name": "sailor", + "coord": [2, 7], + "wander": {"min": [2, 5], "max": [2, 9]}, + "source_event": 1, + "source_script": "SSAnne_2F_Corridor_EventScript_Sailor" + } + ] +} diff --git a/data/games/frlg/maps/base/SSAnne_CaptainsOffice.json b/data/games/frlg/maps/base/SSAnne_CaptainsOffice.json new file mode 100644 index 0000000..c7f657e --- /dev/null +++ b/data/games/frlg/maps/base/SSAnne_CaptainsOffice.json @@ -0,0 +1,35 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SSAnne_CaptainsOffice", + "source": { + "decomp_file": "data/maps/SSAnne_CaptainsOffice/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#########", + "#########", + "#......##", + "####.#..#", + "####....#", + "#.......#", + "###.....#", + "###.....#", + "###.....#", + "#########" + ], + "points": {"warp_0": [3, 7]}, + "warps": [{"coord": [3, 7], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_2"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "captain", + "coord": [5, 4], + "source_event": 0, + "source_script": "SSAnne_CaptainsOffice_EventScript_Captain", + "source_local_id": "LOCALID_SS_ANNE_CAPTAIN" + } + ] +} diff --git a/data/games/frlg/maps/base/SSAnne_Exterior.json b/data/games/frlg/maps/base/SSAnne_Exterior.json new file mode 100644 index 0000000..ea77953 --- /dev/null +++ b/data/games/frlg/maps/base/SSAnne_Exterior.json @@ -0,0 +1,97 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SSAnne_Exterior", + "source": { + "decomp_file": "data/maps/SSAnne_Exterior/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#........###.###########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#........###.###########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#............###########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "1111111111001111111111111111110000011111111110000000000000000000000000", + "1111111111001111111111111111110000011111111110000000000000000000000011", + "1111001111111111111111111111110000011111111110033333333000300000000000", + "1111001111111111111100001111110000011111111100033333333000300000000000", + "0011111111001100110000001110010000010011110000033333333333300000000000", + "0011111001000000000011100000000030000000110011111111111113300000000000", + "1111001000010011001111100001100333001100001111111111111113300000000011", + "1111000010011111111111111111111333111111001111111111111113300000000000", + "1110010011111111111111111111111333111111111111111111111113300000000000", + "1000011111111111111111111111111333111111111111111111111113300000000000", + "1001111111111111111111100111111030111111001111111111111113300000000000", + "1100111111111111111110000110000030001100000011111111111113300000000000", + "1100111111111111111110011000000030000000110011111111111113300000000000", + "0011111111111111111100111001111030110011111100111111111113300000000000", + "0011111111111111110000111110110030011011111100111111111113300000000000", + "1001111111111111110011111011110000011110111110011111111113300000000000", + "1001111111111111100111101111111111111111110110011001111113300000000000", + "1100111111111100100111011111111111111111111101100001111113300000000000", + "1100100111110000001110111111111111111111111111100100111113300000000000", + "1110000100110011001111111111111111111111111111011100111113300000000000", + "1110010000001111111011111111111111111111111111101111001113300000000000", + "1111110011001111101111111111111111111111111111110111001113300000000000", + "1111111111111111011111111111111111111111111111111110011113300000000000", + "1111111111111011111111111111111111111111111111111010000113300000000000", + "1111111111111111111111111111111111111111111111111111100113300000000000", + "1111111111111111111111111111111111111111111111111101001113300000000000", + "1111111111111111111111111111111111111111111111111110001113300000000000", + "1111111111111111111111111111111111111111111111111111100113300000000000", + "1111111111111111111111111111111111111111111111111111100003300000000000", + "1111111111111111111111111111111111111111111111111111000000000000000000", + "1111111111111111111111111111111111111111111111111111110000000000000000", + "1111111111111111111111111111111111111111111111111111110000000000000000" + ], + "points": {"warp_1": [32, 5], "warp_2": [32, 14], "warp_3": [33, 15]}, + "warps": [ + {"coord": [31, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_0"}, + {"coord": [32, 5], "enter": "walk_north", "to_map": "VermilionCity", "to_point": "warp_1"}, + {"coord": [32, 14], "enter": "walk_south", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_2"}, + {"coord": [33, 15], "enter": "walk_into", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_3"}, + {"coord": [33, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "ss_anne", + "coord": [30, 16], + "hide_flag": "FLAG_HIDE_SS_ANNE", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_SS_ANNE" + } + ] +} diff --git a/data/games/frlg/maps/base/SafariZone_Center.json b/data/games/frlg/maps/base/SafariZone_Center.json new file mode 100644 index 0000000..acbb688 --- /dev/null +++ b/data/games/frlg/maps/base/SafariZone_Center.json @@ -0,0 +1,125 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SafariZone_Center", + "source": { + "decomp_file": "data/maps/SafariZone_Center/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "###################################################", + "############################.######################", + "###################################################", + "###################################################", + "###################################################", + "#########################..########################", + "#########.............#....................########", + "#########.....~~~~....#........~~~~~.......########", + "#########...~~~~~~~~..#.....~~~~~~~~~~.....########", + "#########..~~~~~~~~~..#....~~~~~~~~~~~~....########", + "#########..~~~~~~~~~..#...~~~~~~~~~~~~~....########", + "#########..~~~~~~~~...#...~~~~~~~~~~~~.....########", + "#########...~~~~~.....#....~~~~...~~~......########", + "#########...~~~..~wwwwwwwwwwwwwwww.........########", + "#########....~..~~wwwwwwwwwwwwwwww#################", + "#########.......~~wwww........wwww..........#######", + "#########......~~~wwww........wwww..........#######", + "########.......~~~wwwwwwwwwwwwwwww~~.......########", + "########........~~wwwwwwwwwwwwwwww~~~~.....########", + "#########.....................##...~~~~~...########", + "#########.........##############.S.~~~~~~~.########", + "##################.................~~~~~~~.########", + "#########...........................~~~~...########", + "#########.....~~~~~~~~......#####..~~~~~~~.########", + "#########....~~~~~~~~~~.....#####..~~~~~~..########", + "#########....~~~~~~~~~~.....#D###.~~~~~....########", + "#########.....~~~~~~~~........S...~~~~.....########", + "#########.....~~~~~~~~~~~S.......~~~~......########", + "#########.......~~~~~~~.........~~~~.......########", + "#########..................................########", + "########################....#######################", + "###################################################", + "###################################################", + "###################################################", + "###################################################", + "###################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000030000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000033000000000000000000000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333111111111111111133333333300000000", + "000000000333333333111111111111111100000000000000000", + "000000000333333333111133333333111133333333330000000", + "000000000333333333111133333333111133333333330000000", + "000000003333333333111111111111111133333333300000000", + "000000003333333333111111111111111133333333300000000", + "000000000333333333333333333333003333333333300000000", + "000000000333333333000000000000003033333333300000000", + "000000000000000000333333333333333333333333300000000", + "000000000333333333333333333333333333333333300000000", + "000000000333333333333333333300000333333333300000000", + "000000000333333333333333333300000333333333300000000", + "000000000333333333333333333300000333333333300000000", + "000000000333333333333333333333033333333333300000000", + "000000000333333333333333303333333333333333300000000", + "000000000333333333333333333333333333333333300000000", + "000000000333333333333333333333333333333333300000000", + "000000000000000000000000333300000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000" + ], + "points": { + "warp_1": [26, 30], + "warp_3": [25, 5], + "warp_4": [26, 5], + "warp_5": [27, 5], + "warp_6": [8, 17], + "warp_7": [8, 18], + "warp_8": [8, 19], + "warp_9": [43, 15], + "warp_10": [43, 16], + "warp_11": [43, 17], + "warp_12": [29, 25] + }, + "warps": [ + {"coord": [25, 30], "enter": "walk_south", "to_map": "FuchsiaCity_SafariZone_Entrance", "to_point": "warp_0"}, + {"coord": [26, 30], "enter": "walk_south", "to_map": "FuchsiaCity_SafariZone_Entrance", "to_point": "warp_0"}, + {"coord": [27, 30], "enter": "walk_into", "to_map": "FuchsiaCity_SafariZone_Entrance", "to_point": "warp_0"}, + {"coord": [25, 5], "enter": "walk_north", "to_map": "SafariZone_North", "to_point": "warp_9"}, + {"coord": [26, 5], "enter": "walk_north", "to_map": "SafariZone_North", "to_point": "warp_10"}, + {"coord": [27, 5], "enter": "walk_into", "to_map": "SafariZone_North", "to_point": "warp_11"}, + {"coord": [8, 17], "enter": "walk_west", "to_map": "SafariZone_West", "to_point": "warp_6"}, + {"coord": [8, 18], "enter": "walk_west", "to_map": "SafariZone_West", "to_point": "warp_7"}, + {"coord": [8, 19], "enter": "walk_into", "to_map": "SafariZone_West", "to_point": "warp_8"}, + {"coord": [43, 15], "enter": "walk_east", "to_map": "SafariZone_East", "to_point": "warp_3"}, + {"coord": [43, 16], "enter": "walk_east", "to_map": "SafariZone_East", "to_point": "warp_4"}, + {"coord": [43, 17], "enter": "walk_into", "to_map": "SafariZone_East", "to_point": "warp_5"}, + {"coord": [29, 25], "enter": "walk_into", "to_map": "SafariZone_Center_RestHouse", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "items": [ + { + "name": "item_ball", + "coord": [24, 15], + "source_event": 0, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_CENTER_NUGGET", + "source_script": "SafariZone_Center_EventScript_ItemNugget", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SafariZone_East.json b/data/games/frlg/maps/base/SafariZone_East.json new file mode 100644 index 0000000..3baf6b1 --- /dev/null +++ b/data/games/frlg/maps/base/SafariZone_East.json @@ -0,0 +1,137 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SafariZone_East", + "source": { + "decomp_file": "data/maps/SafariZone_East/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "#########...........~~~~~~~~~~~~~~~~...~~~~~.#########", + "#########...........~~~~~~~~~~~~~~....~~~~~~~#########", + "#################S....~~~~~~~~~......~~~~~~~~#########", + "########..............#...........#~~~~~~~~~~#########", + "########..............#...........#~~~~~~~~~~#########", + "#######################...........#.~~~.....~#########", + "############..........##..#####..##~~~~#####~#########", + "############...~....~......##.......~~.#####.#########", + "############..~~....~~.....##..........#D###.#########", + "############.~~~.~~.~~~...wwwwwwwwww.......S.#########", + "############~...~~~~......wwwwwwwwww.........#########", + "############~..~~~~~~.....wwwwwwww#.........##########", + "############~..~~~~~~....~~~~~~~ww#.........##########", + "############~...~~~~.....~~~~~~~ww###..#..############", + "############.~~~.~~.~~~...wwwwwwwwww#..#.....#########", + "############..~~....~~....wwwwwwwwww#..#.....#########", + "##################..~...............#..#.....#########", + "##################.......#.............#.....#########", + "##################.......#.............#~~~..#########", + "####################.....####..#####..##~~~~.#########", + "########...........#............#~~~~~~~~~~~.#########", + "########..........S##############~~~~~~~~~~~.#########", + "#########....................~~~~~~~~~~~~~...#########", + "#########.....................~~~~~~~~~~~....#########", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000333333333333333333333333333333333333000000000", + "000000000333333333333333333333333333333333333000000000", + "000000000000000000333333333333333333333333333000000000", + "000000003333333333333304444444444403333333333000000000", + "000000003333333333333304444444444403333333333000000000", + "000000000000000000000004444444444403333333333000000000", + "000000000000333333333300000000000003333000003000000000", + "000000000000333333333333333003333333333000003000000000", + "000000000000333333333333333003333333333000003000000000", + "000000000000333333333333331111111111333333303000000000", + "000000000000333333333333331111111111333333333000000000", + "000000000000333333333333331111111104444444440000000000", + "000000000000333333333333333333331104444444440000000000", + "000000000000333333333333333333331100044000000000000000", + "000000000000333333333333331111111111044033333000000000", + "000000000000333333333333331111111111044033333000000000", + "000000000000000000333333333333333333044033333000000000", + "000000000000000000333333304444444444444033333000000000", + "000000000000000000333333304444444444444033333000000000", + "000000000000000000003333300000000000000033333000000000", + "000000003333333333303333333333330333333333333000000000", + "000000003333333333000000000000000333333333333000000000", + "000000000333333333333333333333333333333333333000000000", + "000000000333333333333333333333333333333333333000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000" + ], + "points": { + "warp_0": [8, 9], + "warp_1": [8, 10], + "warp_2": [8, 11], + "warp_3": [8, 26], + "warp_4": [8, 27], + "warp_5": [8, 28], + "warp_6": [40, 14] + }, + "warps": [ + {"coord": [8, 9], "enter": "walk_west", "to_map": "SafariZone_North", "to_point": "warp_6"}, + {"coord": [8, 10], "enter": "walk_west", "to_map": "SafariZone_North", "to_point": "warp_7"}, + {"coord": [8, 11], "enter": "walk_into", "to_map": "SafariZone_North", "to_point": "warp_8"}, + {"coord": [8, 26], "enter": "walk_west", "to_map": "SafariZone_Center", "to_point": "warp_9"}, + {"coord": [8, 27], "enter": "walk_west", "to_map": "SafariZone_Center", "to_point": "warp_10"}, + {"coord": [8, 28], "enter": "walk_into", "to_map": "SafariZone_Center", "to_point": "warp_11"}, + {"coord": [40, 14], "enter": "walk_into", "to_map": "SafariZone_East_RestHouse", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "items": [ + { + "name": "item_ball", + "coord": [13, 12], + "source_event": 0, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_EAST_MAX_POTION", + "source_script": "SafariZone_East_EventScript_ItemMaxPotion", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [37, 15], + "source_event": 1, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_EAST_FULL_RESTORE", + "source_script": "SafariZone_East_EventScript_ItemFullRestore", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [31, 18], + "source_event": 2, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_EAST_TM11", + "source_script": "SafariZone_East_EventScript_ItemTM11", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [36, 17], + "source_event": 3, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_EAST_LEAF_STONE", + "source_script": "SafariZone_East_EventScript_ItemLeafStone", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SafariZone_North.json b/data/games/frlg/maps/base/SafariZone_North.json new file mode 100644 index 0000000..265ded2 --- /dev/null +++ b/data/games/frlg/maps/base/SafariZone_North.json @@ -0,0 +1,151 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SafariZone_North", + "source": { + "decomp_file": "data/maps/SafariZone_North/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "#########################################################", + "#########################################################", + "#########################################################", + "#########################################################", + "#########################################################", + "#########............................~~~~~......#########", + "#########..~~..~~...................~~~~~~#####.#########", + "#########.~~~~~~~~................~~~~~~~.#####.#########", + "#########.~~~~~~~~.###############~~~~~~..#D###.#########", + "#########..~~~~~~..###.......###..~~~~~~....S...#########", + "#########..~~~~~~..###.......###...~~~~~........#########", + "#########.~~~~~~~wwww..............~~~~~~.......#########", + "#########.~~~~~~~wwww~~~............~~~~~~......#########", + "############~..~~wwww~~~.###.........~~~~~~.....#########", + "############.....wwww~~~~###############~~~.....#########", + "############.....wwww~~~~###...........#.......##########", + "#########........wwww~~~.#.............#.......##########", + "#########....wwww..~~~~~~#.............#.......##########", + "#########....wwww~~~~~~~.#.............##..##..##########", + "#########....wwww~~~~~~..#..................#..##########", + "#########....wwww.~~.....#..................#..##########", + "#########....wwww......#.........#..........#..##########", + "#########....wwww......#.........#..........#..##########", + "#########.....#...~~~~.#.........#..........#..##########", + "#########.....#.~~~~~~~#....##..###............##########", + "#########.....#~~~~~~~~#....#~~~~~#............##########", + "#########.....#~~wwww~~#....#~~~~~#............##########", + "#########....S#~~wwww~~#..###~~~~~###..##################", + "#########.....#~~wwww~....#~~~~~~~S.............#########", + "#########.....#.~wwww.....#.~~~~~~..............#########", + "#########.....#.~wwww.....#.~~~~~~~~............#########", + "#########.....#........S..#...~~~~~~~............########", + "#########.....#...........#..S~~~~~~~............########", + "#########.....#...........#.....~~~.............#########", + "##########..########..########..#########################", + "#########################################################", + "#############.#########.#########.#######################", + "#########################################################", + "#############.#########.#########.#######################", + "#########################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000333333333333333333333333333333333333333000000000", + "000000000333333333333333333333333333333333000003000000000", + "000000000333333333333333333333333333333333000003000000000", + "000000000333333333300000000000000033333333000003000000000", + "000000000333333333300033333330003333333333330333000000000", + "000000000333333333300033333330003333333333333333000000000", + "000000000333333331111333333333333333333333333333000000000", + "000000000333333331111333333333333333333333333333000000000", + "000000000000333331111333300033333333333333333333000000000", + "000000000000333331111333300000000000000033333333000000000", + "000000000000333331111333300033333333333044444440000000000", + "000000000333333331111333303333333333333044444440000000000", + "000000000333311113333333303333333333333044444440000000000", + "000000000333311113333333303333333333333000000440000000000", + "000000000333311113333333303333333333333333330440000000000", + "000000000333311113333333303333333333333333330440000000000", + "000000000333311113333330444444444033333333330440000000000", + "000000000333311113333330444444444033333333330440000000000", + "000000000333330333333330444444444033333333330440000000000", + "000000000333330333333330444400000004444444444440000000000", + "000000000333330333333330444403333304444444444440000000000", + "000000000333330331111330444403333304444444444440000000000", + "000000000333300331111330000003333300000000000000000000000", + "000000000333330331111333330333333303333333333333000000000", + "000000000333330331111333330333333333333333333333000000000", + "000000000333330331111333330333333333333333333333000000000", + "000000000333330333333330330333333333333333333333300000000", + "000000000333330333333333330330333333333333333333300000000", + "000000000333330333333333330333333333333333333333000000000", + "000000000033000000003300000000330000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000" + ], + "points": { + "warp_0": [10, 34], + "warp_1": [11, 34], + "warp_2": [12, 34], + "warp_3": [20, 34], + "warp_4": [21, 34], + "warp_5": [22, 34], + "warp_6": [48, 31], + "warp_7": [48, 32], + "warp_8": [48, 33], + "warp_9": [30, 34], + "warp_10": [31, 34], + "warp_11": [32, 34], + "warp_12": [43, 8] + }, + "warps": [ + {"coord": [10, 34], "enter": "walk_south", "to_map": "SafariZone_West", "to_point": "warp_0"}, + {"coord": [11, 34], "enter": "walk_south", "to_map": "SafariZone_West", "to_point": "warp_1"}, + {"coord": [12, 34], "enter": "walk_into", "to_map": "SafariZone_West", "to_point": "warp_2"}, + {"coord": [20, 34], "enter": "walk_south", "to_map": "SafariZone_West", "to_point": "warp_3"}, + {"coord": [21, 34], "enter": "walk_south", "to_map": "SafariZone_West", "to_point": "warp_4"}, + {"coord": [22, 34], "enter": "walk_into", "to_map": "SafariZone_West", "to_point": "warp_5"}, + {"coord": [48, 31], "enter": "walk_east", "to_map": "SafariZone_East", "to_point": "warp_0"}, + {"coord": [48, 32], "enter": "walk_east", "to_map": "SafariZone_East", "to_point": "warp_1"}, + {"coord": [48, 33], "enter": "walk_into", "to_map": "SafariZone_East", "to_point": "warp_2"}, + {"coord": [30, 34], "enter": "walk_south", "to_map": "SafariZone_Center", "to_point": "warp_3"}, + {"coord": [31, 34], "enter": "walk_south", "to_map": "SafariZone_Center", "to_point": "warp_4"}, + {"coord": [32, 34], "enter": "walk_into", "to_map": "SafariZone_Center", "to_point": "warp_5"}, + {"coord": [43, 8], "enter": "walk_into", "to_map": "SafariZone_North_RestHouse", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "items": [ + { + "name": "item_ball", + "coord": [33, 5], + "source_event": 0, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_NORTH_PROTEIN", + "source_script": "SafariZone_North_EventScript_ItemProtein", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [28, 9], + "source_event": 1, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_NORTH_TM47", + "source_script": "SafariZone_North_EventScript_ItemTM47", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [29, 17], + "source_event": 2, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_NORTH_QUICK_CLAW", + "source_script": "SafariZone_North_EventScript_ItemQuickClaw", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SafariZone_SecretHouse.json b/data/games/frlg/maps/base/SafariZone_SecretHouse.json new file mode 100644 index 0000000..e659a82 --- /dev/null +++ b/data/games/frlg/maps/base/SafariZone_SecretHouse.json @@ -0,0 +1,40 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SafariZone_SecretHouse", + "source": { + "decomp_file": "data/maps/SafariZone_SecretHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + "#...........#", + ".............", + ".............", + "...##...##..#", + "#...........#", + "#...........#", + "##.........##", + "##.........##", + "#############" + ], + "points": {"warp_1": [4, 9]}, + "warps": [ + {"coord": [3, 9], "enter": "walk_into", "to_map": "SafariZone_West", "to_point": "warp_9"}, + {"coord": [4, 9], "enter": "walk_south", "to_map": "SafariZone_West", "to_point": "warp_9"}, + {"coord": [5, 9], "enter": "walk_into", "to_map": "SafariZone_West", "to_point": "warp_9"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "worker_m", + "coord": [6, 5], + "source_event": 0, + "source_script": "SafariZone_SecretHouse_EventScript_Attendant" + } + ] +} diff --git a/data/games/frlg/maps/base/SafariZone_West.json b/data/games/frlg/maps/base/SafariZone_West.json new file mode 100644 index 0000000..dd74158 --- /dev/null +++ b/data/games/frlg/maps/base/SafariZone_West.json @@ -0,0 +1,147 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SafariZone_West", + "source": { + "decomp_file": "data/maps/SafariZone_West/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "################################################", + "################################################", + "################################################", + "################################################", + "################################################", + "##############################..#####..#########", + "#############################....###....########", + "############D######..............###....########", + "###########....####..............###....########", + "###########....####........S.....###....########", + "#######..........................###S...########", + "#######..........................###....########", + "#######...........#.......#......###....########", + "#######...........#.......#......###....########", + "#######...........#.......#......###....########", + "#######...........######..#......###....########", + "#######wwwwwwwwwww######..#......###....########", + "#######wwwwwwwwwww######..#......###....########", + "#######wwwwwwwwwww#D####..#......###....########", + "#######wwwwwwwwwww....S#..#......###....########", + "#######................#........####....########", + "#######................#........####....########", + "#######................#........#.......########", + "#######....#..............###..##.......########", + "#######..~~#..............#.............########", + "#######.~~~#..............#.............########", + "#######.~~~###..############.......S.....#######", + "#######.~~~~~~~~~~~~~~~~~~~~#............#######", + "#######...~~~~~~~~~~~~~~~~~~#...........########", + "#######....~~~~~~~~~~~~~~~..#...........########", + "#######......~~~~~....~~~...#...........########", + "################################################", + "################################################", + "################################################", + "################################################", + "################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000330000033000000000", + "000000000000000000000000000003333000333300000000", + "000000000000000000033333333333333000333300000000", + "000000000003333000033333333333333000333300000000", + "000000000003333000033333333033333000333300000000", + "000000033333333333333333333333333000033300000000", + "000000033333333333333333333333333000333300000000", + "000000033333333333044444440333333000333300000000", + "000000033333333333044444440333333000333300000000", + "000000033333333333044444440333333000333300000000", + "000000033333333333000000440333333000333300000000", + "000000011111111111000000440333333000333300000000", + "000000011111111111000000440333333000333300000000", + "000000011111111111000000440333333000333300000000", + "000000011111111111333300440333333000333300000000", + "000000033333333333333330444444440000333300000000", + "000000033333333333333330444444440000333300000000", + "000000033333333333333330444444440333333300000000", + "000000033330444444444444440000000333333300000000", + "000000033330444444444444440333333333333300000000", + "000000033330444444444444440333333333333300000000", + "000000033330000000000000000033333330333330000000", + "000000033333333333333333333303333333333330000000", + "000000033333333333333333333303333333333300000000", + "000000033333333333333333333303333333333300000000", + "000000033333333333333333333303333333333300000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000" + ], + "points": { + "warp_0": [30, 5], + "warp_1": [31, 5], + "warp_2": [32, 5], + "warp_3": [37, 5], + "warp_4": [38, 5], + "warp_5": [39, 5], + "warp_6": [40, 26], + "warp_7": [40, 27], + "warp_8": [40, 28], + "warp_9": [12, 7], + "warp_10": [19, 18] + }, + "warps": [ + {"coord": [30, 5], "enter": "walk_north", "to_map": "SafariZone_North", "to_point": "warp_0"}, + {"coord": [31, 5], "enter": "walk_north", "to_map": "SafariZone_North", "to_point": "warp_1"}, + {"coord": [32, 5], "enter": "walk_into", "to_map": "SafariZone_North", "to_point": "warp_2"}, + {"coord": [37, 5], "enter": "walk_north", "to_map": "SafariZone_North", "to_point": "warp_3"}, + {"coord": [38, 5], "enter": "walk_north", "to_map": "SafariZone_North", "to_point": "warp_4"}, + {"coord": [39, 5], "enter": "walk_into", "to_map": "SafariZone_North", "to_point": "warp_5"}, + {"coord": [40, 26], "enter": "walk_east", "to_map": "SafariZone_Center", "to_point": "warp_6"}, + {"coord": [40, 27], "enter": "walk_east", "to_map": "SafariZone_Center", "to_point": "warp_7"}, + {"coord": [40, 28], "enter": "walk_into", "to_map": "SafariZone_Center", "to_point": "warp_8"}, + {"coord": [12, 7], "enter": "walk_into", "to_map": "SafariZone_SecretHouse", "to_point": "warp_1"}, + {"coord": [19, 18], "enter": "walk_into", "to_map": "SafariZone_West_RestHouse", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "items": [ + { + "name": "item_ball", + "coord": [28, 14], + "source_event": 0, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_WEST_GOLD_TEETH", + "source_script": "SafariZone_West_EventScript_ItemGoldTeeth", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [17, 13], + "source_event": 1, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_WEST_TM32", + "source_script": "SafariZone_West_EventScript_ItemTM32", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [16, 27], + "source_event": 2, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_WEST_MAX_POTION", + "source_script": "SafariZone_West_EventScript_ItemMaxPotion", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [27, 24], + "source_event": 3, + "hide_flag": "FLAG_HIDE_SAFARI_ZONE_WEST_MAX_REVIVE", + "source_script": "SafariZone_West_EventScript_ItemMaxRevive", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SaffronCity.json b/data/games/frlg/maps/base/SaffronCity.json new file mode 100644 index 0000000..b1485bc --- /dev/null +++ b/data/games/frlg/maps/base/SaffronCity.json @@ -0,0 +1,221 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SaffronCity", + "source": { + "decomp_file": "data/maps/SaffronCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#########################.......######.....#######################", + "##################################################################", + "########################........######......######################", + "##################################################################", + "##################################################################", + "##################################..##############################", + "#################################....#############################", + "#################################....#############################", + "#################################....#############################", + "#################################....#############################", + "###############......................#############################", + "###############..############........#############################", + "###############..############..........#.#...#D#......############", + "###############..############.........................############", + "###############..#####D######S####...#####S##...##S###############", + "###############......................................#############", + "###############......................................#############", + "###############..............#########...............#############", + "###############...####....############........####...#############", + "~~~~~##########...################################...#############", + "~~~~~##########...################################...#############", + "~~~~~##########...#########D##########SSD######D##...#############", + "~~~..##########.............###########..........S...#############", + "~~~..#....#####.............###########..............#........####", + ".....##########.............###########..............#############", + "..######.....S..............###########...............S....######.", + "..######...........#############################...........######.", + "..######...........#############################...........######.", + "..######...........#############################...........######.", + "vvvv###########....#############################.....#############", + ".....#.#.....##...S##############D##############.....#........####", + ".....##########....##########S........##########.....#############", + ".....##########......................................#############", + ".....##########......................................#############", + "......#########......................................#############", + "###############...#########....########..#########...#############", + "###############...################################...#############", + "###############...#####################..#########...#############", + "###############...####SSD##############.S##D######...#############", + "###############......................................#############", + "###############......................................#############", + "###############......................................#############", + "###############....############........############..#############", + "###############################........###########################", + "##############.....############........############...############", + "#################################....#############################", + "#################################....#############################", + "##################################################################", + "##################################################################", + "##################################################################", + "##################################################################", + "##################################################################", + "##################################..##############################", + "#################################....#############################", + "########################........#....#......######################" + ], + "points": { + "warp_0": [33, 30], + "warp_1": [22, 14], + "warp_2": [40, 12], + "warp_3": [46, 12], + "warp_4": [27, 21], + "warp_5": [40, 21], + "warp_6": [24, 38], + "warp_7": [43, 38], + "warp_8": [8, 27], + "warp_9": [34, 5], + "warp_10": [58, 27], + "warp_11": [34, 46], + "warp_14": [47, 21] + }, + "warps": [ + {"coord": [33, 30], "enter": "walk_into", "to_map": "SilphCo_1F", "to_point": "warp_1"}, + {"coord": [22, 14], "enter": "walk_into", "to_map": "SaffronCity_CopycatsHouse_1F", "to_point": "warp_1"}, + {"coord": [40, 12], "enter": "cave_entrance", "to_map": "SaffronCity_Dojo", "to_point": "warp_1"}, + {"coord": [46, 12], "enter": "walk_into", "to_map": "SaffronCity_Gym", "to_point": "warp_1"}, + {"coord": [27, 21], "enter": "walk_into", "to_map": "SaffronCity_House", "to_point": "warp_1"}, + {"coord": [40, 21], "enter": "walk_into", "to_map": "SaffronCity_Mart", "to_point": "warp_1"}, + {"coord": [24, 38], "enter": "walk_into", "to_map": "SaffronCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [43, 38], "enter": "walk_into", "to_map": "SaffronCity_MrPsychicsHouse", "to_point": "warp_1"}, + {"coord": [8, 27], "enter": "walk_west", "to_map": "Route7_EastEntrance", "to_point": "warp_2"}, + {"coord": [34, 5], "enter": "cave_entrance", "to_map": "Route5_SouthEntrance", "to_point": "warp_2"}, + {"coord": [58, 27], "enter": "walk_east", "to_map": "Route8_WestEntrance", "to_point": "warp_1"}, + {"coord": [34, 46], "enter": "walk_south", "to_map": "Route6_NorthEntrance", "to_point": "warp_0"}, + {"coord": [35, 46], "enter": "walk_south", "to_map": "Route6_NorthEntrance", "to_point": "warp_0"}, + {"coord": [35, 5], "enter": "cave_entrance", "to_map": "Route5_SouthEntrance", "to_point": "warp_2"}, + {"coord": [47, 21], "enter": "walk_into", "to_map": "SaffronCity_PokemonTrainerFanClub", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route5", "offset": 0}, + {"side": "south", "to_map": "Route6", "offset": 12}, + {"side": "west", "to_map": "Route7", "offset": 10}, + {"side": "east", "to_map": "Route8", "offset": 10} + ], + "npcs": [ + { + "name": "rocket_m", + "coord": [22, 15], + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 0, + "source_script": "SaffronCity_EventScript_RocketGrunt1" + }, + { + "name": "rocket_m", + "coord": [26, 16], + "wander": {"min": [22, 16], "max": [30, 16]}, + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 1, + "source_script": "SaffronCity_EventScript_RocketGrunt2" + }, + { + "name": "rocket_m", + "coord": [46, 13], + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 2, + "source_script": "SaffronCity_EventScript_RocketGrunt3" + }, + { + "name": "rocket_m", + "coord": [27, 22], + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 3, + "source_script": "SaffronCity_EventScript_RocketGrunt4" + }, + { + "name": "rocket_m", + "coord": [25, 33], + "wander": {"min": [18, 33], "max": [32, 33]}, + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 4, + "source_script": "SaffronCity_EventScript_RocketGrunt5" + }, + { + "name": "rocket_m", + "coord": [34, 31], + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 5, + "source_script": "SaffronCity_EventScript_DoorGuardGrunt", + "source_local_id": "LOCALID_SAFFRON_DOOR_GUARD_GRUNT" + }, + { + "name": "rocket_m", + "coord": [30, 39], + "wander": {"min": [25, 39], "max": [35, 39]}, + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 6, + "source_script": "SaffronCity_EventScript_RocketGrunt7" + }, + { + "name": "rocket_m", + "coord": [48, 24], + "wander": {"min": [44, 24], "max": [52, 24]}, + "hide_flag": "FLAG_HIDE_SAFFRON_ROCKETS", + "source_event": 7, + "source_script": "SaffronCity_EventScript_RocketGrunt6" + }, + { + "name": "youngster", + "coord": [37, 32], + "hide_flag": "FLAG_HIDE_SAFFRON_CIVILIANS", + "source_event": 8, + "source_script": "SaffronCity_EventScript_Youngster" + }, + { + "name": "worker_m", + "coord": [21, 23], + "wander": {"min": [20, 22], "max": [22, 24]}, + "hide_flag": "FLAG_HIDE_SAFFRON_CIVILIANS", + "source_event": 9, + "source_script": "SaffronCity_EventScript_WorkerM" + }, + { + "name": "man", + "coord": [39, 16], + "hide_flag": "FLAG_HIDE_SAFFRON_CIVILIANS", + "source_event": 10, + "source_script": "SaffronCity_EventScript_Man" + }, + { + "name": "boy", + "coord": [44, 22], + "hide_flag": "FLAG_HIDE_SAFFRON_CIVILIANS", + "source_event": 11, + "source_script": "SaffronCity_EventScript_Boy" + }, + { + "name": "pidgeot", + "coord": [45, 22], + "hide_flag": "FLAG_HIDE_SAFFRON_CIVILIANS", + "source_event": 12, + "source_script": "SaffronCity_EventScript_Pidgeot" + }, + { + "name": "lass", + "coord": [32, 39], + "wander": {"min": [27, 39], "max": [37, 39]}, + "hide_flag": "FLAG_HIDE_SAFFRON_CIVILIANS", + "source_event": 13, + "source_script": "SaffronCity_EventScript_Lass" + }, + { + "name": "crush_girl", + "coord": [47, 24], + "wander": {"min": [46, 24], "max": [48, 24]}, + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 14, + "source_script": "SaffronCity_EventScript_CrushGirl" + } + ] +} diff --git a/data/games/frlg/maps/base/SaffronCity_Connection.json b/data/games/frlg/maps/base/SaffronCity_Connection.json new file mode 100644 index 0000000..4798ed4 --- /dev/null +++ b/data/games/frlg/maps/base/SaffronCity_Connection.json @@ -0,0 +1,61 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SaffronCity_Connection", + "source": { + "decomp_file": "data/maps/SaffronCity_Connection/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#######################....#####################", + "#######################....#####################", + "#######################....#####################", + "#####......................#####################", + "#####..############........#####################", + "#####..############..........#.#...#D#......####", + "#####..############.........................####", + "#####..#####D###########...########...##########", + "#####......................................#####", + "#####......................................#####", + "#####..............#########...............#####", + "#####...####....############........####...#####", + "#####...################################...#####", + "#####...################################...#####", + "#####...#########D##########SSD######D##...#####", + "#####.............###########..........#...#####", + "#####.............###########..............#....", + "#####.............###########..............#####", + "...#..............###########...............#...", + ".........#############################..........", + ".........#############################..........", + ".........#############################..........", + "#####....#############################.....#####", + "...##...###############D##############.....#....", + "#####....###########........##########.....#####", + "#####......................................#####", + "#####......................................#####", + "#####......................................#####", + "#####...#########....########..#########...#####", + "#####...################################...#####", + "#####...#####################..#########...#####", + "#####...####SSD##############.###D######...#####", + "#####......................................#####", + "#####......................................#####", + "#####......................................#####", + "#####....############........############..#####", + "#####################........###################", + "####.....############........############...####", + "#######################....#####################", + "#######################....#####################" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route5", "offset": 0}, + {"side": "south", "to_map": "Route6", "offset": 12}, + {"side": "west", "to_map": "Route7", "offset": 10}, + {"side": "east", "to_map": "Route8", "offset": 10} + ] +} diff --git a/data/games/frlg/maps/base/SaffronCity_Gym.json b/data/games/frlg/maps/base/SaffronCity_Gym.json new file mode 100644 index 0000000..920b812 --- /dev/null +++ b/data/games/frlg/maps/base/SaffronCity_Gym.json @@ -0,0 +1,168 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SaffronCity_Gym", + "source": { + "decomp_file": "data/maps/SaffronCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############################", + "#############################", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + "#############################", + "#############################", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + "#############################", + "#############################", + ".........#.........#.........", + ".........#.........#.........", + ".........#..S...S..#.........", + ".........#.........#.........", + ".........#.........#.........", + ".........#.........#.........", + "#############################" + ], + "points": { + "warp_1": [14, 23], + "warp_3": [18, 20], + "warp_4": [0, 4], + "warp_5": [0, 7], + "warp_6": [0, 12], + "warp_7": [0, 15], + "warp_8": [0, 20], + "warp_9": [0, 23], + "warp_10": [8, 4], + "warp_11": [8, 7], + "warp_12": [8, 12], + "warp_13": [8, 15], + "warp_14": [8, 20], + "warp_15": [8, 23], + "warp_16": [12, 4], + "warp_17": [12, 7], + "warp_18": [16, 4], + "warp_19": [16, 7], + "warp_20": [18, 15], + "warp_21": [20, 4], + "warp_22": [20, 7], + "warp_23": [20, 12], + "warp_24": [20, 15], + "warp_25": [20, 20], + "warp_26": [20, 23], + "warp_27": [28, 4], + "warp_28": [28, 7], + "warp_29": [28, 12], + "warp_30": [28, 15], + "warp_31": [28, 20], + "warp_32": [28, 23] + }, + "warps": [ + {"coord": [13, 23], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_3"}, + {"coord": [14, 23], "enter": "walk_south", "to_map": "SaffronCity", "to_point": "warp_3"}, + {"coord": [15, 23], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_3"}, + {"coord": [18, 20], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_32"}, + {"coord": [0, 4], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_22"}, + {"coord": [0, 7], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_20"}, + {"coord": [0, 12], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_30"}, + {"coord": [0, 15], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_11"}, + {"coord": [0, 20], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_28"}, + {"coord": [0, 23], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_19"}, + {"coord": [8, 4], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_18"}, + {"coord": [8, 7], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_7"}, + {"coord": [8, 12], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_17"}, + {"coord": [8, 15], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_15"}, + {"coord": [8, 20], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_26"}, + {"coord": [8, 23], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_13"}, + {"coord": [12, 4], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_24"}, + {"coord": [12, 7], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_12"}, + {"coord": [16, 4], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_10"}, + {"coord": [16, 7], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_9"}, + {"coord": [18, 15], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_5"}, + {"coord": [20, 4], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_23"}, + {"coord": [20, 7], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_4"}, + {"coord": [20, 12], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_21"}, + {"coord": [20, 15], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_16"}, + {"coord": [20, 20], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_27"}, + {"coord": [20, 23], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_14"}, + {"coord": [28, 4], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_25"}, + {"coord": [28, 7], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_8"}, + {"coord": [28, 12], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_31"}, + {"coord": [28, 15], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_6"}, + {"coord": [28, 20], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_29"}, + {"coord": [28, 23], "enter": "step_on", "to_map": "SaffronCity_Gym", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "cooltrainer_m", + "coord": [24, 18], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "SaffronCity_Gym_EventScript_Cameron" + }, + { + "name": "cooltrainer_m", + "coord": [24, 2], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "SaffronCity_Gym_EventScript_Johan" + }, + { + "name": "cooltrainer_m", + "coord": [4, 2], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 2, + "source_script": "SaffronCity_Gym_EventScript_Preston" + }, + { + "name": "channeler", + "coord": [14, 2], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "SaffronCity_Gym_EventScript_Amanda" + }, + { + "name": "channeler", + "coord": [4, 10], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "SaffronCity_Gym_EventScript_Stacy" + }, + { + "name": "channeler", + "coord": [4, 18], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "SaffronCity_Gym_EventScript_Tasha" + }, + {"name": "sabrina", "coord": [14, 11], "source_event": 6, "source_script": "SaffronCity_Gym_EventScript_Sabrina"}, + { + "name": "cooltrainer_m", + "coord": [24, 10], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 7, + "source_script": "SaffronCity_Gym_EventScript_Tyron" + }, + {"name": "gym_guy", "coord": [15, 20], "source_event": 8, "source_script": "SaffronCity_Gym_EventScript_GymGuy"} + ] +} diff --git a/data/games/frlg/maps/base/SaffronCity_Mart.json b/data/games/frlg/maps/base/SaffronCity_Mart.json new file mode 100644 index 0000000..2a14fea --- /dev/null +++ b/data/games/frlg/maps/base/SaffronCity_Mart.json @@ -0,0 +1,41 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SaffronCity_Mart", + "source": { + "decomp_file": "data/maps/SaffronCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_5"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "SaffronCity", "to_point": "warp_5"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "SaffronCity_Mart_EventScript_Clerk"}, + {"name": "youngster", "coord": [1, 7], "source_event": 1, "source_script": "SaffronCity_Mart_EventScript_Youngster"}, + { + "name": "lass", + "coord": [9, 5], + "wander": {"min": [9, 4], "max": [9, 6]}, + "source_event": 2, + "source_script": "SaffronCity_Mart_EventScript_Lass" + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_10F.json b/data/games/frlg/maps/base/SilphCo_10F.json new file mode 100644 index 0000000..33701e1 --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_10F.json @@ -0,0 +1,89 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_10F", + "source": { + "decomp_file": "data/maps/SilphCo_10F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#################", + "#################", + "######...########", + "######...####D###", + ".................", + ".................", + ".......#####..###", + "......######..###", + ".......##........", + "......####.......", + ".......##........", + "###..#######..###", + "###..#######..###", + ".......##........", + "..####.##....##..", + "#..##..##..####..", + "..####.##..##....", + "..#.##.##........", + "#......##........" + ], + "points": {"warp_0": [6, 2], "warp_1": [10, 14], "warp_2": [14, 9], "warp_3": [8, 2], "warp_4": [14, 17]}, + "warps": [ + {"coord": [6, 2], "enter": "walk_west", "to_map": "SilphCo_11F", "to_point": "warp_0"}, + {"coord": [10, 14], "enter": "step_on", "to_map": "SilphCo_4F", "to_point": "warp_3"}, + {"coord": [14, 9], "enter": "step_on", "to_map": "SilphCo_4F", "to_point": "warp_5"}, + {"coord": [8, 2], "enter": "walk_east", "to_map": "SilphCo_9F", "to_point": "warp_3"}, + {"coord": [14, 17], "enter": "step_on", "to_map": "SilphCo_4F", "to_point": "warp_4"}, + {"coord": [13, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "scientist", + "coord": [2, 7], + "wander": {"min": [0, 5], "max": [4, 9]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_10F_EventScript_Travis" + }, + {"name": "worker_f", "coord": [10, 17], "source_event": 1, "source_script": "SilphCo_10F_EventScript_WorkerF"}, + { + "name": "rocket_m", + "coord": [0, 13], + "facing": "east", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 2, + "source_script": "SilphCo_10F_EventScript_Grunt" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [5, 15], + "source_event": 3, + "hide_flag": "FLAG_HIDE_SILPH_CO_10F_CARBOS", + "source_script": "SilphCo_10F_EventScript_ItemCarbos", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [2, 15], + "source_event": 4, + "hide_flag": "FLAG_HIDE_SILPH_CO_10F_ULTRA_BALL", + "source_script": "SilphCo_10F_EventScript_ItemUltraBall", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [3, 17], + "source_event": 5, + "hide_flag": "FLAG_HIDE_SILPH_CO_10F_RARE_CANDY", + "source_script": "SilphCo_10F_EventScript_ItemRareCandy", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_11F.json b/data/games/frlg/maps/base/SilphCo_11F.json new file mode 100644 index 0000000..4c380cf --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_11F.json @@ -0,0 +1,82 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_11F", + "source": { + "decomp_file": "data/maps/SilphCo_11F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#################", + "#################", + "#######...#######", + "#######...###D###", + "...##............", + "...##............", + "...############..", + "...############..", + "...##..#####.##..", + "...##...888..##..", + "...##........##..", + "...##..#####.##..", + "...##..#####.##..", + "...##..#####.##..", + "...##........##..", + "...##........##..", + "...##..########..", + "...##..########..", + ".........###.##..", + ".............##.." + ], + "points": {"warp_0": [7, 2], "warp_1": [2, 5]}, + "warps": [ + {"coord": [7, 2], "enter": "walk_west", "to_map": "SilphCo_10F", "to_point": "warp_0"}, + {"coord": [2, 5], "enter": "step_on", "to_map": "SilphCo_7F", "to_point": "warp_1"}, + {"coord": [13, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "old_man_2", "coord": [9, 9], "source_event": 0, "source_script": "SilphCo_11F_EventScript_President"}, + {"name": "worker_f", "coord": [11, 9], "source_event": 1, "source_script": "SilphCo_11F_EventScript_Secretary"}, + { + "name": "giovanni", + "coord": [6, 11], + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 2, + "source_script": "0x0", + "source_local_id": "LOCALID_SILPH_CO_GIOVANNI" + }, + { + "name": "rocket_m", + "coord": [16, 12], + "facing": "north", + "trainer": {"sight": 5}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 3, + "source_script": "SilphCo_11F_EventScript_Grunt1", + "source_local_id": "LOCALID_SILPH_CO_11F_GRUNT1" + }, + { + "name": "rocket_m", + "coord": [2, 19], + "facing": "north", + "trainer": {"sight": 5}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 5, + "source_script": "SilphCo_11F_EventScript_Grunt2", + "source_local_id": "LOCALID_SILPH_CO_11F_GRUNT2" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [16, 18], + "source_event": 4, + "hide_flag": "FLAG_HIDE_SILPH_CO_11F_ZINC", + "source_script": "SilphCo_11F_EventScript_ItemZinc", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_1F.json b/data/games/frlg/maps/base/SilphCo_1F.json new file mode 100644 index 0000000..d34bf4f --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_1F.json @@ -0,0 +1,53 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_1F", + "source": { + "decomp_file": "data/maps/SilphCo_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "####################################", + "####################################", + "##############################..####", + "######################D#######..####", + "#.....####..........................", + "......#.............................", + "......#.............................", + "......#............................#", + "#######......###....###.......##....", + "............#####..#####......##....", + "...........##############..........#", + "..........################..........", + ".64..64...################....##....", + ".64..64....##############.....##...#", + "............#####..#####............", + ".64..64......###....###.............", + ".64..64.......................##...#", + "..............................##....", + "....................................", + "...................................#", + ".......................#..#..#..#...", + "####################################" + ], + "points": {"warp_1": [8, 20], "warp_3": [31, 2]}, + "warps": [ + {"coord": [7, 21], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_0"}, + {"coord": [8, 20], "enter": "walk_south", "to_map": "SaffronCity", "to_point": "warp_0"}, + {"coord": [9, 20], "enter": "walk_into", "to_map": "SaffronCity", "to_point": "warp_0"}, + {"coord": [31, 2], "enter": "walk_east", "to_map": "SilphCo_2F", "to_point": "warp_3"}, + {"coord": [22, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "worker_f", + "coord": [3, 7], + "hide_flag": "FLAG_HIDE_SAFFRON_CIVILIANS", + "source_event": 0, + "source_script": "SilphCo_1F_EventScript_Receptionist" + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_2F.json b/data/games/frlg/maps/base/SilphCo_2F.json new file mode 100644 index 0000000..0896c92 --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_2F.json @@ -0,0 +1,88 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_2F", + "source": { + "decomp_file": "data/maps/SilphCo_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "####################################", + "####################################", + "############################...#####", + "######################D#####...#####", + "###.....##.##.##....................", + "...........##.......................", + "...........##.......................", + "...........##.......................", + "#####..######################..#####", + "#####..######################..#####", + ".................######.............", + "....................................", + "....................................", + "..........................##########", + "................###..###..##########", + "#####..#######..###..###..##........", + "#####..#######............##........", + "............##......................", + "............##..###..###.....###....", + "..###......###..###..###..##.###...#", + "............##............##........", + "...........###............##.......#" + ], + "points": { + "warp_0": [28, 2], + "warp_1": [2, 6], + "warp_2": [15, 6], + "warp_3": [30, 2], + "warp_4": [7, 19], + "warp_5": [33, 19] + }, + "warps": [ + {"coord": [28, 2], "enter": "walk_west", "to_map": "SilphCo_3F", "to_point": "warp_0"}, + {"coord": [2, 6], "enter": "step_on", "to_map": "SilphCo_3F", "to_point": "warp_8"}, + {"coord": [15, 6], "enter": "step_on", "to_map": "SilphCo_8F", "to_point": "warp_5"}, + {"coord": [30, 2], "enter": "walk_east", "to_map": "SilphCo_1F", "to_point": "warp_3"}, + {"coord": [7, 19], "enter": "step_on", "to_map": "SilphCo_6F", "to_point": "warp_1"}, + {"coord": [33, 19], "enter": "step_on", "to_map": "SilphCo_8F", "to_point": "warp_2"}, + {"coord": [22, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [29, 12], + "facing": "north", + "trainer": {"sight": 5}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_2F_EventScript_Grunt2" + }, + { + "name": "scientist", + "coord": [28, 18], + "trainer": {"sight": 4, "looks": ["north", "west"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 1, + "source_script": "SilphCo_2F_EventScript_Jerry" + }, + { + "name": "rocket_m", + "coord": [20, 14], + "trainer": {"sight": 3, "looks": ["south", "north"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 2, + "source_script": "SilphCo_2F_EventScript_Grunt1" + }, + { + "name": "scientist", + "coord": [5, 19], + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 3, + "source_script": "SilphCo_2F_EventScript_Connor" + }, + {"name": "woman_2", "coord": [10, 4], "source_event": 4, "source_script": "SilphCo_2F_EventScript_ThunderWaveTutor"} + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_3F.json b/data/games/frlg/maps/base/SilphCo_3F.json new file mode 100644 index 0000000..f37add2 --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_3F.json @@ -0,0 +1,88 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_3F", + "source": { + "decomp_file": "data/maps/SilphCo_3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "####################################", + "####################################", + "############################...#####", + "######################D#####...#####", + "###.................................", + "....................................", + "....................................", + "....................................", + "######################....##########", + "######################....##########", + ".........##.........##....##........", + "#....###.###...###..##....##........", + "#....###.......###..............###.", + ".....###.......###..............###.", + ".........###........##....##........", + ".........##.........##....##........", + "######################....##########", + "######################....##########", + "........######...................###", + "....................................", + "....................................", + "...................................." + ], + "points": { + "warp_0": [28, 2], + "warp_1": [4, 6], + "warp_2": [13, 14], + "warp_3": [30, 2], + "warp_4": [2, 14], + "warp_5": [3, 20], + "warp_6": [29, 14], + "warp_7": [32, 20], + "warp_8": [33, 5] + }, + "warps": [ + {"coord": [28, 2], "enter": "walk_west", "to_map": "SilphCo_2F", "to_point": "warp_0"}, + {"coord": [4, 6], "enter": "step_on", "to_map": "SilphCo_5F", "to_point": "warp_1"}, + {"coord": [13, 14], "enter": "step_on", "to_map": "SilphCo_7F", "to_point": "warp_4"}, + {"coord": [30, 2], "enter": "walk_east", "to_map": "SilphCo_4F", "to_point": "warp_2"}, + {"coord": [2, 14], "enter": "step_on", "to_map": "SilphCo_9F", "to_point": "warp_2"}, + {"coord": [3, 20], "enter": "step_on", "to_map": "SilphCo_5F", "to_point": "warp_4"}, + {"coord": [29, 14], "enter": "step_on", "to_map": "SilphCo_3F", "to_point": "warp_7"}, + {"coord": [32, 20], "enter": "step_on", "to_map": "SilphCo_3F", "to_point": "warp_6"}, + {"coord": [33, 5], "enter": "step_on", "to_map": "SilphCo_2F", "to_point": "warp_1"}, + {"coord": [22, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [25, 9], + "facing": "west", + "trainer": {"sight": 3}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_3F_EventScript_Grunt" + }, + {"name": "worker_m", "coord": [31, 13], "source_event": 1, "source_script": "SilphCo_3F_EventScript_WorkerM"}, + { + "name": "scientist", + "coord": [4, 12], + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 2, + "source_script": "SilphCo_3F_EventScript_Jose" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [8, 10], + "source_event": 3, + "hide_flag": "FLAG_HIDE_SILPH_CO_3F_HYPER_POTION", + "source_script": "SilphCo_3F_EventScript_ItemHyperPotion", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_4F.json b/data/games/frlg/maps/base/SilphCo_4F.json new file mode 100644 index 0000000..0d1721a --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_4F.json @@ -0,0 +1,116 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_4F", + "source": { + "decomp_file": "data/maps/SilphCo_4F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "####################################", + "####################################", + "############################...#####", + "######################D#####...#####", + ".........##........##...............", + ".####..#.##..####..##...............", + ".#######.##..####..##...............", + ".#######.##..####..##...............", + ".#######.##........##...............", + ".#######.##........##...#####..#####", + ".#######.##........##...#####..#####", + ".##.####.#####..#####...##..........", + ".##..###.#####..#####...##..........", + ".#...##..##........##...##...###....", + ".........##........##...##...###...#", + ".........##........##...##..........", + "###..#########..#####...##..........", + "###..#########..#####...##...###...#", + "#......####.............##...###....", + "........................###.........", + "........................###........#", + "........................###........." + ], + "points": { + "warp_0": [28, 2], + "warp_1": [18, 6], + "warp_2": [30, 2], + "warp_3": [12, 9], + "warp_4": [2, 20], + "warp_5": [18, 14] + }, + "warps": [ + {"coord": [28, 2], "enter": "walk_west", "to_map": "SilphCo_5F", "to_point": "warp_0"}, + {"coord": [18, 6], "enter": "step_on", "to_map": "SilphCo_6F", "to_point": "warp_3"}, + {"coord": [30, 2], "enter": "walk_east", "to_map": "SilphCo_3F", "to_point": "warp_3"}, + {"coord": [12, 9], "enter": "step_on", "to_map": "SilphCo_10F", "to_point": "warp_1"}, + {"coord": [2, 20], "enter": "step_on", "to_map": "SilphCo_10F", "to_point": "warp_4"}, + {"coord": [18, 14], "enter": "step_on", "to_map": "SilphCo_10F", "to_point": "warp_2"}, + {"coord": [22, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [33, 16], + "wander": {"min": [32, 15], "max": [34, 17]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_4F_EventScript_Grunt2" + }, + { + "name": "rocket_m", + "coord": [10, 19], + "facing": "east", + "trainer": {"sight": 5}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 1, + "source_script": "SilphCo_4F_EventScript_Grunt1" + }, + { + "name": "scientist", + "coord": [14, 8], + "trainer": {"sight": 2, "looks": ["south", "west"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 2, + "source_script": "SilphCo_4F_EventScript_Rodney" + }, + {"name": "worker_m", "coord": [5, 5], "source_event": 3, "source_script": "SilphCo_4F_EventScript_WorkerM"} + ], + "items": [ + { + "name": "item_ball", + "coord": [3, 11], + "source_event": 4, + "hide_flag": "FLAG_HIDE_SILPH_CO_4F_MAX_REVIVE", + "source_script": "SilphCo_4F_EventScript_ItemMaxRevive", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [4, 12], + "source_event": 5, + "hide_flag": "FLAG_HIDE_SILPH_CO_4F_ESCAPE_ROPE", + "source_script": "SilphCo_4F_EventScript_ItemEscapeRope", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [2, 13], + "source_event": 6, + "hide_flag": "FLAG_HIDE_SILPH_CO_4F_FULL_HEAL", + "source_script": "SilphCo_4F_EventScript_ItemFullHeal", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [30, 18], + "source_event": 7, + "hide_flag": "FLAG_HIDE_SILPH_CO_4F_TM41", + "source_script": "SilphCo_4F_EventScript_ItemTM41", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_5F.json b/data/games/frlg/maps/base/SilphCo_5F.json new file mode 100644 index 0000000..7d34e1a --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_5F.json @@ -0,0 +1,117 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_5F", + "source": { + "decomp_file": "data/maps/SilphCo_5F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "####################################", + "####################################", + "############################...#####", + "######################D#####...#####", + ".......##........###................", + ".......##...........................", + ".#.#.#.##...........................", + ".......##.........##########..#####.", + ".......##.........##########..#####.", + "...........#########............###.", + "...........#########.............##.", + ".#.#.#.##..##.....##.....######..##.", + ".......##..##.....##........###..##.", + "#########..###..............###..##.", + "#########..##...............###..##.", + ".......##..##.....##.....######..##.", + "...##..##..###....##.............##.", + ".#####.##..##.....##.............##.", + "..####.....########################.", + "...###.....########################.", + "...###.##....#..#..#..#..#..#..#....", + ".......##..........................." + ], + "points": { + "warp_0": [28, 2], + "warp_1": [15, 7], + "warp_2": [30, 2], + "warp_3": [10, 20], + "warp_4": [2, 20], + "warp_5": [33, 5] + }, + "warps": [ + {"coord": [28, 2], "enter": "walk_west", "to_map": "SilphCo_4F", "to_point": "warp_0"}, + {"coord": [15, 7], "enter": "step_on", "to_map": "SilphCo_3F", "to_point": "warp_1"}, + {"coord": [30, 2], "enter": "walk_east", "to_map": "SilphCo_6F", "to_point": "warp_2"}, + {"coord": [10, 20], "enter": "step_on", "to_map": "SilphCo_9F", "to_point": "warp_1"}, + {"coord": [2, 20], "enter": "step_on", "to_map": "SilphCo_3F", "to_point": "warp_5"}, + {"coord": [33, 5], "enter": "step_on", "to_map": "SilphCo_7F", "to_point": "warp_2"}, + {"coord": [22, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [35, 7], + "facing": "north", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_5F_EventScript_Grunt2" + }, + { + "name": "rocker", + "coord": [23, 13], + "trainer": {"sight": 4, "looks": ["south", "north"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 1, + "source_script": "SilphCo_5F_EventScript_Dalton" + }, + {"name": "worker_m", "coord": [16, 13], "source_event": 2, "source_script": "SilphCo_5F_EventScript_WorkerM"}, + { + "name": "scientist", + "coord": [11, 6], + "wander": {"min": [10, 5], "max": [12, 7]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 3, + "source_script": "SilphCo_5F_EventScript_Beau" + }, + { + "name": "rocket_m", + "coord": [9, 21], + "trainer": {"sight": 3, "looks": ["north", "east"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 4, + "source_script": "SilphCo_5F_EventScript_Grunt1" + }, + {"name": "scientist", "coord": [2, 7], "source_event": 8, "source_script": "SilphCo_5F_EventScript_Scientist"} + ], + "items": [ + { + "name": "item_ball", + "coord": [4, 9], + "source_event": 5, + "hide_flag": "FLAG_HIDE_SILPH_CO_5F_PROTEIN", + "source_script": "SilphCo_5F_EventScript_ItemProtein", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [1, 18], + "source_event": 6, + "hide_flag": "FLAG_HIDE_SILPH_CO_5F_TM01", + "source_script": "SilphCo_5F_EventScript_ItemTM01", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [22, 21], + "source_event": 7, + "hide_flag": "FLAG_HIDE_SILPH_CO_5F_CARD_KEY", + "source_script": "SilphCo_5F_EventScript_ItemCardKey", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_6F.json b/data/games/frlg/maps/base/SilphCo_6F.json new file mode 100644 index 0000000..59a392d --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_6F.json @@ -0,0 +1,93 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_6F", + "source": { + "decomp_file": "data/maps/SilphCo_6F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############################", + "###############################", + "##############..#########..####", + "##############..####D####..####", + ".....##........................", + ".....##........................", + ".....##....###########..#####..", + "...........###########..#####..", + ".#.#......###..............##..", + ".....##....##..............##..", + "#######....##....########..##..", + "#######...####...########..##..", + ".....##....##....########..##..", + ".##..##....###.............##..", + ".#...##...###..............##..", + ".##........#####..###########..", + ".##........#####..###########..", + "..#..##........................", + ".....##........................" + ], + "points": {"warp_0": [14, 2], "warp_1": [29, 5], "warp_2": [26, 2], "warp_3": [2, 6]}, + "warps": [ + {"coord": [14, 2], "enter": "walk_west", "to_map": "SilphCo_7F", "to_point": "warp_0"}, + {"coord": [29, 5], "enter": "step_on", "to_map": "SilphCo_2F", "to_point": "warp_4"}, + {"coord": [26, 2], "enter": "walk_east", "to_map": "SilphCo_5F", "to_point": "warp_2"}, + {"coord": [2, 6], "enter": "step_on", "to_map": "SilphCo_4F", "to_point": "warp_1"}, + {"coord": [20, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [21, 5], + "facing": "east", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_6F_EventScript_Grunt1" + }, + {"name": "worker_m", "coord": [23, 9], "source_event": 1, "source_script": "SilphCo_6F_EventScript_WorkerM1"}, + {"name": "worker_f", "coord": [24, 9], "source_event": 2, "source_script": "SilphCo_6F_EventScript_WorkerF1"}, + {"name": "worker_m", "coord": [22, 13], "source_event": 3, "source_script": "SilphCo_6F_EventScript_WorkerM2"}, + {"name": "worker_m", "coord": [14, 9], "source_event": 4, "source_script": "SilphCo_6F_EventScript_WorkerM3"}, + {"name": "worker_f", "coord": [16, 12], "source_event": 5, "source_script": "SilphCo_6F_EventScript_WorkerF2"}, + { + "name": "scientist", + "coord": [9, 11], + "facing": "south", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 6, + "source_script": "SilphCo_6F_EventScript_Taylor" + }, + { + "name": "rocket_m", + "coord": [18, 17], + "facing": "west", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 9, + "source_script": "SilphCo_6F_EventScript_Grunt2" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [2, 14], + "source_event": 7, + "hide_flag": "FLAG_HIDE_SILPH_CO_6F_HP_UP", + "source_script": "SilphCo_6F_EventScript_ItemHPUp", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [1, 17], + "source_event": 8, + "hide_flag": "FLAG_HIDE_SILPH_CO_6F_X_SPECIAL", + "source_script": "SilphCo_6F_EventScript_ItemXSpecial", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_7F.json b/data/games/frlg/maps/base/SilphCo_7F.json new file mode 100644 index 0000000..cd8f49e --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_7F.json @@ -0,0 +1,116 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_7F", + "source": { + "decomp_file": "data/maps/SilphCo_7F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############################", + "###############################", + "###################..#####..###", + "###################..##D##..###", + "......####..#..##..............", + "......##....#..##..............", + "...##########..................", + "......##............####..#####", + "......#####..####...####..#####", + "......#####..####...###........", + "########.......##...##......##.", + "########.##.##.##...###........", + "......##.##.##.##...##.........", + "......##.......##...#####..####", + "......##.......##...#####..####", + ".#..#.##.......##...##.........", + "......###########...##........6", + "......###########...##........6", + "....................##........." + ], + "points": {"warp_0": [19, 2], "warp_1": [5, 8], "warp_2": [25, 17], "warp_3": [27, 2], "warp_4": [5, 4]}, + "warps": [ + {"coord": [19, 2], "enter": "walk_west", "to_map": "SilphCo_6F", "to_point": "warp_0"}, + {"coord": [5, 8], "enter": "step_on", "to_map": "SilphCo_11F", "to_point": "warp_1"}, + {"coord": [25, 17], "enter": "step_on", "to_map": "SilphCo_5F", "to_point": "warp_5"}, + {"coord": [27, 2], "enter": "walk_east", "to_map": "SilphCo_8F", "to_point": "warp_3"}, + {"coord": [5, 4], "enter": "step_on", "to_map": "SilphCo_3F", "to_point": "warp_2"}, + {"coord": [23, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "blue", + "coord": [2, 6], + "hide_flag": "FLAG_HIDE_SILPH_RIVAL", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_SILPH_CO_RIVAL" + }, + {"name": "worker_m", "coord": [0, 7], "source_event": 1, "source_script": "SilphCo_7F_EventScript_LaprasGuy"}, + { + "name": "rocket_m", + "coord": [24, 5], + "facing": "west", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 2, + "source_script": "SilphCo_7F_EventScript_Grunt1" + }, + { + "name": "rocket_m", + "coord": [24, 15], + "facing": "east", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 3, + "source_script": "SilphCo_7F_EventScript_Grunt2" + }, + { + "name": "rocket_m", + "coord": [13, 4], + "facing": "south", + "trainer": {"sight": 3}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 4, + "source_script": "SilphCo_7F_EventScript_Grunt3" + }, + {"name": "worker_f", "coord": [10, 10], "source_event": 5, "source_script": "SilphCo_7F_EventScript_WorkerF"}, + {"name": "worker_m", "coord": [13, 14], "source_event": 6, "source_script": "SilphCo_7F_EventScript_WorkerM1"}, + { + "name": "worker_m", + "coord": [9, 14], + "source_event": 7, + "source_script": "SilphCo_7F_EventScript_WorkerM2", + "source_local_id": "LOCALID_SILPH_CO_7F_WORKER_M2" + }, + { + "name": "scientist", + "coord": [3, 13], + "wander": {"min": [1, 13], "max": [5, 13]}, + "trainer": {"sight": 1, "looks": ["west", "east"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 8, + "source_script": "SilphCo_7F_EventScript_Joshua" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [0, 12], + "source_event": 9, + "hide_flag": "FLAG_HIDE_SILPH_CO_7F_CALCIUM", + "source_script": "SilphCo_7F_EventScript_ItemCalcium", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [30, 11], + "source_event": 10, + "hide_flag": "FLAG_HIDE_SILPH_CO_7F_TM08", + "source_script": "SilphCo_7F_EventScript_ItemTM08", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_8F.json b/data/games/frlg/maps/base/SilphCo_8F.json new file mode 100644 index 0000000..86d3afb --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_8F.json @@ -0,0 +1,117 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_8F", + "source": { + "decomp_file": "data/maps/SilphCo_8F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "###############################", + "###############################", + "################..#########..##", + "################..####D####..##", + ".....##.....##.................", + ".....##.....##.................", + ".###.##.....##...##############", + ".###.##.....##...##############", + ".###.##..#####...##............", + ".###.##..#####...##.#.#........", + ".###........##...##..........#.", + "..........####...##.##.........", + ".....##...####...##.##.......#.", + ".....##.....##...##............", + "#######..#####...#######..#####", + "#######..#####...#######..#####", + "#..............................", + "...............................", + "#.............................." + ], + "elevation": [ + "0000000000000000000000000000000", + "0000000000000000000000000000000", + "0000000000000000330000000003300", + "0000000000000000330000000003300", + "3333300333330033333333333333333", + "3333300333330033333333333333333", + "3000300333330033300000000000000", + "3000300333330033300000000000000", + "3000300330000033300030303333333", + "3000300330000033300404040333333", + "3000333333330033300030303333303", + "3333333333000033300300333333333", + "3333300333000033300300333333303", + "3333300333330033300333333333333", + "0000000330000033300000003300000", + "0000000330000033300000003300000", + "0333333333333333333333333333333", + "3333333333333333333333333333333", + "0333333333333333333333333333333" + ], + "points": { + "warp_0": [16, 2], + "warp_1": [11, 10], + "warp_2": [10, 6], + "warp_3": [28, 2], + "warp_4": [2, 12], + "warp_5": [2, 17] + }, + "warps": [ + {"coord": [16, 2], "enter": "walk_west", "to_map": "SilphCo_9F", "to_point": "warp_0"}, + {"coord": [11, 10], "enter": "step_on", "to_map": "SilphCo_8F", "to_point": "warp_4"}, + {"coord": [10, 6], "enter": "step_on", "to_map": "SilphCo_2F", "to_point": "warp_5"}, + {"coord": [28, 2], "enter": "walk_east", "to_map": "SilphCo_7F", "to_point": "warp_3"}, + {"coord": [2, 12], "enter": "step_on", "to_map": "SilphCo_8F", "to_point": "warp_1"}, + {"coord": [2, 17], "enter": "step_on", "to_map": "SilphCo_2F", "to_point": "warp_2"}, + {"coord": [22, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rocket_m", + "coord": [28, 5], + "facing": "west", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_8F_EventScript_Grunt1" + }, + { + "name": "rocket_m", + "coord": [10, 17], + "facing": "east", + "trainer": {"sight": 5}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 1, + "source_script": "SilphCo_8F_EventScript_Grunt2" + }, + { + "name": "scientist", + "coord": [9, 4], + "facing": "south", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 2, + "source_script": "SilphCo_8F_EventScript_Parker" + }, + { + "name": "worker_m", + "coord": [2, 5], + "wander": {"min": [1, 5], "max": [3, 5]}, + "source_event": 3, + "source_script": "SilphCo_8F_EventScript_WorkerM" + }, + {"name": "scientist", "coord": [29, 9], "source_event": 5, "source_script": "SilphCo_8F_EventScript_Scientist"} + ], + "items": [ + { + "name": "item_ball", + "coord": [24, 8], + "source_event": 4, + "hide_flag": "FLAG_HIDE_SILPH_CO_8F_IRON", + "source_script": "SilphCo_8F_EventScript_ItemIron", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/SilphCo_9F.json b/data/games/frlg/maps/base/SilphCo_9F.json new file mode 100644 index 0000000..d3bbe8d --- /dev/null +++ b/data/games/frlg/maps/base/SilphCo_9F.json @@ -0,0 +1,91 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "SilphCo_9F", + "source": { + "decomp_file": "data/maps/SilphCo_9F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "###############################", + "###############################", + "################...############", + "################...#####D######", + "............##.................", + "............##.................", + "..############..#####..######..", + "..############..#####..######..", + "..####......###.##.........###.", + "..##...##...##..##.....##..##..", + ".......##...##..##.....##..###.", + "............###.##.........##..", + "..##...#######..#####..#######.", + "..##...#######..#####..#######.", + "####...####.###.##..........##.", + "####...##...##..##...####...##.", + "................##...####...##.", + ".#.#............##...####......", + ".......##...##..##.....##......" + ], + "elevation": [ + "0000000000000000000000000000000", + "0000000000000000000000000000000", + "0000000000000000333000000000000", + "0000000000000000333000000000000", + "3333333333330033333333333333333", + "3333333333330033333333333333333", + "3300000000000033000003300000033", + "3300000000000033000003300000033", + "3300003333330003003333333330003", + "3300333003330033003333300330033", + "3333333003330033003333300330003", + "3333333333330003003333333330033", + "3300333000000033000003300000003", + "3300333000000033000003300000003", + "0000333000030003003333333333003", + "0000333003330033003333333333003", + "0303033333333333003330000333003", + "4040403333333333003330000333333", + "0303033003330033003333300333333" + ], + "points": {"warp_0": [16, 2], "warp_1": [22, 18], "warp_2": [9, 4], "warp_3": [18, 2]}, + "warps": [ + {"coord": [16, 2], "enter": "walk_west", "to_map": "SilphCo_8F", "to_point": "warp_0"}, + {"coord": [22, 18], "enter": "step_on", "to_map": "SilphCo_5F", "to_point": "warp_3"}, + {"coord": [9, 4], "enter": "step_on", "to_map": "SilphCo_3F", "to_point": "warp_4"}, + {"coord": [18, 2], "enter": "walk_east", "to_map": "SilphCo_10F", "to_point": "warp_3"}, + {"coord": [24, 3], "enter": "walk_into", "to_map": "SilphCo_Elevator", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "scientist", + "coord": [26, 16], + "wander": {"min": [26, 15], "max": [26, 17]}, + "trainer": {"sight": 2, "looks": ["north", "south"]}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 0, + "source_script": "SilphCo_9F_EventScript_Ed" + }, + { + "name": "rocket_m", + "coord": [15, 18], + "facing": "north", + "trainer": {"sight": 3}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 1, + "source_script": "SilphCo_9F_EventScript_Grunt2" + }, + {"name": "woman_2", "coord": [2, 16], "source_event": 2, "source_script": "SilphCo_9F_EventScript_HealWoman"}, + { + "name": "rocket_m", + "coord": [1, 6], + "facing": "south", + "trainer": {"sight": 5}, + "hide_flag": "FLAG_HIDE_SILPH_ROCKETS", + "source_event": 3, + "source_script": "SilphCo_9F_EventScript_Grunt1" + } + ] +} diff --git a/data/games/frlg/maps/base/UndergroundPath_EastEntrance.json b/data/games/frlg/maps/base/UndergroundPath_EastEntrance.json new file mode 100644 index 0000000..9573677 --- /dev/null +++ b/data/games/frlg/maps/base/UndergroundPath_EastEntrance.json @@ -0,0 +1,39 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_EastEntrance", + "source": { + "decomp_file": "data/maps/UndergroundPath_EastEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "#...........#", + "..##.##..##..", + "..#..##...#..", + "..#..##...#..", + "..##.....##..", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "Route8", "to_point": "warp_0"}, + {"coord": [6, 8], "enter": "walk_south", "to_map": "Route8", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_into", "to_map": "Route8", "to_point": "warp_0"}, + {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_EastWestTunnel", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "woman_2", + "coord": [5, 6], + "source_event": 0, + "source_script": "UndergroundPath_EastEntrance_EventScript_Woman" + } + ] +} diff --git a/data/games/frlg/maps/base/UndergroundPath_EastWestTunnel.json b/data/games/frlg/maps/base/UndergroundPath_EastWestTunnel.json new file mode 100644 index 0000000..790879c --- /dev/null +++ b/data/games/frlg/maps/base/UndergroundPath_EastWestTunnel.json @@ -0,0 +1,26 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_EastWestTunnel", + "source": { + "decomp_file": "data/maps/UndergroundPath_EastWestTunnel/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################################################################", + "################################################################################", + "#............................................................................###", + "###..........................................................................###", + "###..........................................................................###", + "###............................................................................#", + "################################################################################" + ], + "points": {"warp_0": [76, 3], "warp_1": [3, 4]}, + "warps": [ + {"coord": [76, 3], "enter": "walk_east", "to_map": "UndergroundPath_EastEntrance", "to_point": "warp_3"}, + {"coord": [3, 4], "enter": "walk_west", "to_map": "UndergroundPath_WestEntrance", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [] +} diff --git a/data/games/frlg/maps/base/UndergroundPath_NorthEntrance.json b/data/games/frlg/maps/base/UndergroundPath_NorthEntrance.json new file mode 100644 index 0000000..0c57df2 --- /dev/null +++ b/data/games/frlg/maps/base/UndergroundPath_NorthEntrance.json @@ -0,0 +1,39 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_NorthEntrance", + "source": { + "decomp_file": "data/maps/UndergroundPath_NorthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "#...........#", + "..##.##..##..", + "..#..##...#..", + "..#..##...#..", + "..##.....##..", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, + {"coord": [6, 8], "enter": "walk_south", "to_map": "Route5", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, + {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "little_girl", + "coord": [5, 6], + "source_event": 0, + "source_script": "UndergroundPath_NorthEntrance_EventScript_Saige" + } + ] +} diff --git a/data/games/frlg/maps/base/UndergroundPath_NorthSouthTunnel.json b/data/games/frlg/maps/base/UndergroundPath_NorthSouthTunnel.json new file mode 100644 index 0000000..9dcc125 --- /dev/null +++ b/data/games/frlg/maps/base/UndergroundPath_NorthSouthTunnel.json @@ -0,0 +1,82 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_NorthSouthTunnel", + "source": { + "decomp_file": "data/maps/UndergroundPath_NorthSouthTunnel/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########", + "########", + "#....###", + "#....###", + "#....###", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "###....#", + "###....#", + "###....#", + "########" + ], + "points": {"warp_0": [4, 3], "warp_1": [3, 60]}, + "warps": [ + {"coord": [4, 3], "enter": "walk_east", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_3"}, + {"coord": [3, 60], "enter": "walk_west", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [] +} diff --git a/data/games/frlg/maps/base/UndergroundPath_SouthEntrance.json b/data/games/frlg/maps/base/UndergroundPath_SouthEntrance.json new file mode 100644 index 0000000..fffe5ca --- /dev/null +++ b/data/games/frlg/maps/base/UndergroundPath_SouthEntrance.json @@ -0,0 +1,39 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_SouthEntrance", + "source": { + "decomp_file": "data/maps/UndergroundPath_SouthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "#...........#", + "..##.##..##..", + "..#..##...#..", + "..#..##...#..", + "..##.....##..", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, + {"coord": [6, 8], "enter": "walk_south", "to_map": "Route6", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, + {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "woman_2", + "coord": [5, 6], + "source_event": 0, + "source_script": "UndergroundPath_SouthEntrance_EventScript_Woman" + } + ] +} diff --git a/data/games/frlg/maps/base/UndergroundPath_WestEntrance.json b/data/games/frlg/maps/base/UndergroundPath_WestEntrance.json new file mode 100644 index 0000000..96f2578 --- /dev/null +++ b/data/games/frlg/maps/base/UndergroundPath_WestEntrance.json @@ -0,0 +1,39 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_WestEntrance", + "source": { + "decomp_file": "data/maps/UndergroundPath_WestEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "#...........#", + "..##.##..##..", + "..#..##...#..", + "..#..##...#..", + "..##.....##..", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "Route7", "to_point": "warp_0"}, + {"coord": [6, 8], "enter": "walk_south", "to_map": "Route7", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_into", "to_map": "Route7", "to_point": "warp_0"}, + {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_EastWestTunnel", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "balding_man", + "coord": [5, 6], + "source_event": 0, + "source_script": "UndergroundPath_WestEntrance_EventScript_BaldingMan" + } + ] +} diff --git a/data/games/frlg/maps/base/VermilionCity.json b/data/games/frlg/maps/base/VermilionCity.json new file mode 100644 index 0000000..dde6975 --- /dev/null +++ b/data/games/frlg/maps/base/VermilionCity.json @@ -0,0 +1,168 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VermilionCity", + "source": { + "decomp_file": "data/maps/VermilionCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwwwwwwwwwwwwwwwwwww#...#######################", + "wwwwwwwwwwwwwwwwwwwww#...#######################", + "wwwwwwwwwwwwwwwwwwwww#...#######################", + "wwwwwwwwwwwww#####www#...#######################", + "wwwwwwww##############...#######################", + "wwwwwwww##############...#######################", + "wwwwwwww#D###SSD######...########S##############", + "wwwwwwww.................................#######", + "wwwwwwww.................................#######", + "wwwwwwww.................................#######", + "wwwwwwwwwwwwww...........................#######", + "wwwwwwwwwwwwww...........................#######", + "wwwwwwwwwwwwwwwwwwww.....................#######", + "wwwwwwwwwwwwwwwwwwww.....................#######", + "wwwwwwwwwww.....wwww.....................#######", + "wwwwwwww...#####..####.....####..........#######", + "wwwwwwww...#####..####.....####..........##.....", + "wwwwwwww..S#D###..#D##.....SSD###############S##", + "wwwwwwww..........................S.............", + "wwwwwwww........................................", + "wwwwwwww........................................", + "wwwwwwww.......................www.....wwwwwwwww", + "wwwwwwww...#######.........####www.....wwwwwwwww", + "wwwwwwww...#######..wwww...####www64.64wwwwwwwww", + "wwwwwwww##S########.wwww...#D##www.....ww#######", + "wwwwwwww.....#D#....wwww.......wwww...www#######", + "wwwwwwww............wwwwwwwwwwwwwww...www#######", + "wwwwwwww............wwwwwwwwwwwwwww...www#######", + "wwwwwwww............ww................www#######", + "wwwwwwwwwwwwwwwwwwwwww................wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww................wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000000000000000001033300000000000000000000000", + "000000000000000000001033300000000000000000000000", + "000001000011111111111033300000000000000000000000", + "000100000011100000111033300000000000000000000000", + "000100110000000000000033300000000000000000000000", + "011001110000000000000033300000000000000000000000", + "011001110000000000000033300000000000000000000000", + "010011113333333333333333333333333333333330000000", + "010011113333333333333333333333333333333330000000", + "000111113333333333333333333333333333333330000000", + "000111111111113333333333333333333333333330000000", + "000111111111113333333333333333333333333330000000", + "000111111111111111113333333333333333333330000000", + "000111111111111111113333333333333333333330000000", + "000111111111111111113333333333333333333330000000", + "010011113330000033000033333000033333333330000000", + "010011113330000033000033333000033333333330033333", + "001001113300000033000033333000000000000000000000", + "001001113333333333333333333333333303333333333333", + "000011113333333333333333333333333333333333333333", + "000011113333333333333333333333333333333333333333", + "000011113333333333333333333333311133333111111111", + "000011113330000000333333333000011133333111111111", + "001001113330000000331111333000011133333111111111", + "001001110000000000031111333000011133333110000000", + "001001113333300033331111333333311113331110000000", + "011001113333333333331111111111111113331110000000", + "010011113333333333331111111111111113331110000000", + "010011113333333333331133333333333333331110000000", + "010011111111111111111133333333333333331110011111", + "010011111111111111111133333333333333331110011000", + "011001111111111111111133311111111111111110010000", + "001001111111111111111133311111111111111110010000", + "001110011111111111110033300001111111111100110000", + "000110011111111100000033300000000111100100110000", + "000011001111110000000000000110000111100100110000", + "000001000011110011111100011111111001111100100000", + "000001110000001110001100011000001000000001100000", + "000000001100001000000100010000000010000001000000", + "000000000000000000000100010000000000000000000000" + ], + "points": { + "warp_0": [22, 34], + "warp_1": [23, 34], + "warp_2": [24, 34], + "warp_3": [9, 6], + "warp_4": [15, 6], + "warp_5": [12, 17], + "warp_6": [19, 17], + "warp_7": [29, 17], + "warp_8": [28, 24], + "warp_9": [14, 25] + }, + "warps": [ + {"coord": [22, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, + {"coord": [23, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, + {"coord": [24, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, + {"coord": [9, 6], "enter": "walk_into", "to_map": "VermilionCity_House1", "to_point": "warp_1"}, + {"coord": [15, 6], "enter": "walk_into", "to_map": "VermilionCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [12, 17], "enter": "walk_into", "to_map": "VermilionCity_PokemonFanClub", "to_point": "warp_1"}, + {"coord": [19, 17], "enter": "walk_into", "to_map": "VermilionCity_House2", "to_point": "warp_1"}, + {"coord": [29, 17], "enter": "walk_into", "to_map": "VermilionCity_Mart", "to_point": "warp_1"}, + {"coord": [28, 24], "enter": "walk_into", "to_map": "VermilionCity_House3", "to_point": "warp_1"}, + {"coord": [14, 25], "enter": "walk_into", "to_map": "VermilionCity_Gym", "to_point": "warp_1"} + ], + "flag_sets": {"new_game": ["FLAG_HIDE_VERMILION_CITY_OAKS_AIDE"]}, + "connections": [ + {"side": "north", "to_map": "Route6", "offset": 12}, + {"side": "east", "to_map": "Route11", "offset": 10} + ], + "npcs": [ + { + "name": "woman_1", + "coord": [22, 11], + "wander": {"min": [18, 11], "max": [26, 11]}, + "source_event": 0, + "source_script": "VermilionCity_EventScript_Woman" + }, + {"name": "old_man_1", "coord": [17, 9], "source_event": 1, "source_script": "VermilionCity_EventScript_OldMan1"}, + {"name": "old_man_2", "coord": [36, 10], "source_event": 2, "source_script": "VermilionCity_EventScript_OldMan2"}, + { + "name": "machop", + "coord": [35, 11], + "wander": {"min": [33, 9], "max": [37, 13]}, + "source_event": 3, + "source_script": "VermilionCity_EventScript_Machop" + }, + { + "name": "sailor", + "coord": [31, 30], + "wander": {"min": [27, 30], "max": [35, 30]}, + "source_event": 4, + "source_script": "VermilionCity_EventScript_Sailor" + }, + { + "name": "sailor", + "coord": [24, 33], + "source_event": 5, + "source_script": "VermilionCity_EventScript_FerrySailor", + "source_local_id": "LOCALID_VERMILION_FERRY_SAILOR" + }, + { + "name": "cut_tree", + "coord": [19, 24], + "hide_flag": "FLAG_TEMP_12", + "source_event": 6, + "source_script": "EventScript_CutTree" + }, + { + "name": "scientist", + "coord": [25, 7], + "hide_flag": "FLAG_HIDE_VERMILION_CITY_OAKS_AIDE", + "source_event": 7, + "source_script": "VermilionCity_EventScript_OaksAide" + } + ] +} diff --git a/data/games/frlg/maps/base/VermilionCity_Gym.json b/data/games/frlg/maps/base/VermilionCity_Gym.json new file mode 100644 index 0000000..9389f2f --- /dev/null +++ b/data/games/frlg/maps/base/VermilionCity_Gym.json @@ -0,0 +1,68 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VermilionCity_Gym", + "source": { + "decomp_file": "data/maps/VermilionCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "#..#...#..#", + "#.........#", + "#.........#", + "#.........#", + "###########", + "###########", + "...........", + "...........", + ".#.#.#.#.#.", + "...........", + ".#.#.#.#.#.", + "...........", + ".#.#.#.#.#.", + "...........", + "...........", + "...S...S...", + "...........", + "...........", + "###########" + ], + "points": {"warp_1": [5, 19]}, + "warps": [ + {"coord": [4, 19], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9"}, + {"coord": [5, 19], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_9"}, + {"coord": [6, 19], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "lt_surge", "coord": [5, 2], "source_event": 0, "source_script": "VermilionCity_Gym_EventScript_LtSurge"}, + { + "name": "balding_man", + "coord": [2, 11], + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "VermilionCity_Gym_EventScript_Baily" + }, + { + "name": "sailor", + "coord": [8, 13], + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "VermilionCity_Gym_EventScript_Dwayne" + }, + {"name": "gym_guy", "coord": [4, 17], "source_event": 3, "source_script": "VermilionCity_Gym_EventScript_GymGuy"}, + { + "name": "gentleman", + "coord": [7, 8], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "VermilionCity_Gym_EventScript_Tucker" + } + ] +} diff --git a/data/games/frlg/maps/base/VermilionCity_Mart.json b/data/games/frlg/maps/base/VermilionCity_Mart.json new file mode 100644 index 0000000..30a8953 --- /dev/null +++ b/data/games/frlg/maps/base/VermilionCity_Mart.json @@ -0,0 +1,46 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VermilionCity_Mart", + "source": { + "decomp_file": "data/maps/VermilionCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_7"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_7"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_7"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "VermilionCity_Mart_EventScript_Clerk"}, + { + "name": "cooltrainer_f", + "coord": [4, 2], + "source_event": 1, + "source_script": "VermilionCity_Mart_EventScript_CooltrainerF" + }, + { + "name": "balding_man", + "coord": [9, 4], + "wander": {"min": [8, 2], "max": [10, 6]}, + "source_event": 2, + "source_script": "VermilionCity_Mart_EventScript_BaldingMan" + } + ] +} diff --git a/data/games/frlg/maps/base/VermilionCity_PokemonCenter_1F.json b/data/games/frlg/maps/base/VermilionCity_PokemonCenter_1F.json new file mode 100644 index 0000000..84f0fa1 --- /dev/null +++ b/data/games/frlg/maps/base/VermilionCity_PokemonCenter_1F.json @@ -0,0 +1,92 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VermilionCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/VermilionCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_4"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_4"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_4"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "VermilionCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_VERMILION_NURSE" + }, + { + "name": "man", + "coord": [4, 8], + "wander": {"min": [3, 8], "max": [5, 8]}, + "source_event": 1, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Man" + }, + { + "name": "hiker", + "coord": [12, 5], + "source_event": 2, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Hiker" + }, + { + "name": "youngster", + "coord": [14, 4], + "wander": {"min": [14, 3], "max": [14, 5]}, + "source_event": 3, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "cooltrainer_f", + "coord": [6, 4], + "source_event": 4, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_VSSeekerWoman" + }, + { + "name": "0", + "coord": [2, 1], + "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL", + "source_event": 5, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_PokemonJournalLtSurge" + }, + { + "name": "0", + "coord": [3, 1], + "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL", + "source_event": 6, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_PokemonJournalLtSurge" + } + ] +} diff --git a/data/games/frlg/maps/base/VermilionCity_PokemonFanClub.json b/data/games/frlg/maps/base/VermilionCity_PokemonFanClub.json new file mode 100644 index 0000000..a555561 --- /dev/null +++ b/data/games/frlg/maps/base/VermilionCity_PokemonFanClub.json @@ -0,0 +1,86 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VermilionCity_PokemonFanClub", + "source": { + "decomp_file": "data/maps/VermilionCity_PokemonFanClub/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "############", + "############", + "............", + ".....22.....", + "#....88....#", + "#..64##64..#", + "#..64##64..#", + "#..........#", + "#..........#", + "............", + "#..........#", + "############" + ], + "elevation": [ + "000000000000", + "000000000000", + "333333333333", + "333333333333", + "033304403330", + "033330033330", + "033330033330", + "033333333330", + "033333333330", + "333333333333", + "033333333330", + "000000000000" + ], + "points": {"warp_1": [5, 10]}, + "warps": [ + {"coord": [4, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"}, + {"coord": [5, 10], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_5"}, + {"coord": [6, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "gentleman", + "coord": [5, 4], + "source_event": 0, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Chairman" + }, + { + "name": "worker_f", + "coord": [6, 4], + "source_event": 1, + "source_script": "VermilionCity_PokemonFanClub_EventScript_WorkerF" + }, + { + "name": "pikachu", + "coord": [7, 6], + "source_event": 2, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Pikachu" + }, + { + "name": "seel", + "coord": [4, 6], + "source_event": 3, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Seel" + }, + { + "name": "woman_1", + "coord": [4, 5], + "source_event": 4, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Woman", + "source_local_id": "LOCALID_POKEMON_FAN_CLUB_WOMAN" + }, + { + "name": "fat_man", + "coord": [7, 5], + "source_event": 5, + "source_script": "VermilionCity_PokemonFanClub_EventScript_FatMan", + "source_local_id": "LOCALID_POKEMON_FAN_CLUB_FAT_MAN" + } + ] +} diff --git a/data/games/frlg/maps/base/VictoryRoad_1F.json b/data/games/frlg/maps/base/VictoryRoad_1F.json new file mode 100644 index 0000000..36bb65d --- /dev/null +++ b/data/games/frlg/maps/base/VictoryRoad_1F.json @@ -0,0 +1,133 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VictoryRoad_1F", + "source": { + "decomp_file": "data/maps/VictoryRoad_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "################################################", + "##############~##~~#############################", + "###.~~########~###~~############################", + "####~~######~~~~~~~~~###########################", + "####~~~#######~~#~~~~~##########################", + "###~~~#8888888888888#~~#########################", + "###~~~#~~~~~~~~~~~~~#~~#########################", + "###~~~#~~~~~~~~~~~~~#~~#########################", + "####~~#~~~~~~~~~~~~~#~~#########################", + "####~~####~###~~##~##~~#########################", + "#####~~~~~~~~#~~##~~~~~#########################", + "####~~#8888#~#~~###~~~##########################", + "####~##~~~~###~~################################", + "####~~#~~~~###~~################################", + "####~~#~~~~888~~##~~~###########################", + "###~~~#~~~~~~~~~#~~~~###########################", + "##~~~##~#########~#~B###########################", + "##~~##~~###~~~~~~~~~############################", + "###~~~~~##~~~##~~~~~############################", + "####~~~~~~~~~##~~###############################", + "########~~~.~###################################", + "################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000", + "000000000000003003300000000000000000000000000000", + "000333000000003000330000000000000000000000000000", + "000033000000333333333000000000000000000000000000", + "000033300000003303333300000000000000000000000000", + "000333044444444444440330000000000000000000000000", + "000333044444444444440330000000000000000000000000", + "000333044444444444440330000000000000000000000000", + "000033044444444444440330000000000000000000000000", + "000033000000004400000330000000000000000000000000", + "000003333333304400333330000000000000000000000000", + "000033044440304400033300000000000000000000000000", + "000030044440004400000000000000000000000000000000", + "000033044440004400000000000000000000000000000000", + "000033044444444400333000000000000000000000000000", + "000333044444444403333000000000000000000000000000", + "003330000000000003033000000000000000000000000000", + "003300330003333333330000000000000000000000000000", + "000333330033300333330000000000000000000000000000", + "000033333333300330000000000000000000000000000000", + "000000003333300000000000000000000000000000000000", + "030333330300033033330000000000000000000000000000" + ], + "points": {"warp_0": [3, 2], "warp_1": [11, 20]}, + "regions": { + "wild": [ + [7, 5], + [8, 5], + [9, 5], + [10, 5], + [11, 5], + [12, 5], + [13, 5], + [14, 5], + [15, 5], + [16, 5], + [17, 5], + [18, 5], + [19, 5], + [7, 11], + [8, 11], + [9, 11], + [10, 11], + [11, 14], + [12, 14], + [13, 14] + ] + }, + "warps": [ + {"coord": [3, 2], "enter": "step_on", "to_map": "VictoryRoad_2F", "to_point": "warp_0"}, + {"coord": [11, 20], "enter": "walk_south", "to_map": "Route23", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "cooltrainer_m", + "coord": [5, 2], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 0, + "source_script": "VictoryRoad_1F_EventScript_Rolando" + }, + { + "name": "cooltrainer_f", + "coord": [14, 6], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "VictoryRoad_1F_EventScript_Naomi" + }, + { + "name": "pushable_boulder", + "coord": [7, 18], + "source_event": 4, + "source_script": "EventScript_StrengthBoulder", + "source_local_id": "LOCALID_VICTORY_ROAD_1F_BOULDER" + }, + {"name": "pushable_boulder", "coord": [4, 12], "source_event": 5, "source_script": "EventScript_StrengthBoulder"}, + {"name": "pushable_boulder", "coord": [16, 3], "source_event": 6, "source_script": "EventScript_StrengthBoulder"} + ], + "items": [ + { + "name": "item_ball", + "coord": [12, 3], + "source_event": 2, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_1F_RARE_CANDY", + "source_script": "VictoryRoad_1F_EventScript_ItemRareCandy", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [14, 1], + "source_event": 3, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_1F_TM02", + "source_script": "VictoryRoad_1F_EventScript_ItemTM02", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/VictoryRoad_2F.json b/data/games/frlg/maps/base/VictoryRoad_2F.json new file mode 100644 index 0000000..690ce95 --- /dev/null +++ b/data/games/frlg/maps/base/VictoryRoad_2F.json @@ -0,0 +1,208 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VictoryRoad_2F", + "source": { + "decomp_file": "data/maps/VictoryRoad_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "##########################################~~~~~~~~~", + "#######################~~~~~~~~~~~~~~~~~~##~~~~~~~~", + "####~~~~~~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~#~#~~~~~~~", + "###.~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~##~~~~~~~~", + "###~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~###~~~~~~~", + "###~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~###~~#~~~~", + "########~#####~~~~~~~~#~~~~~########~~~~~###~~~~~~~", + "##~~~~~~~#~~~#~~~~~~~~#~~~~~~~~~~~~#~~~~~#######~~~", + "#~~~~~~~~~~~~#~~~~~~~~#~~~~~~~~~~~#########~~~~####", + "#.#~~~~~~~~~~#~~~~~~~~#~~~~~~~~~~~.#~~.#~~~~~~~~###", + "#~~~~~~#888888888888888#~~~~~~~~~~~#~~~~~~~~~~~~~##", + "##~~~~~#~~~~~~~~~~~~~~~#~~~~~~~~~~~#~~~~~~~~~~~~~##", + "##~~~~~##~######~~~~~~~#~~~~~~~~~~~#~~~~~~#####~.~#", + "##~~~~~~~~~~~#~#####~~~#~~~~~~~~~~~########~~~#####", + "##~~~~~~~~~~~#~~~~~#~~~#~~~~~~~~~~~~~~~~~~#~~~~~~#~", + "###~~~~~~~~~~#~~~~~#~~~888888888##~~~~~~~~##~~~~~~~", + "###~~~~~~~~~~#~~~~~#~~~~~~~~~~~~#888#88#~~~##~~~~~~", + "##~~~~~~~~~~~#~~~~~#~~~~~~~~~~~~~~~~.~~#~~~#~~~~~~~", + "##~#~~~~~#####~~~~~####~#######~########~~~#~#~~~~~", + "##B~~~########B~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~", + "#################~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~", + "############################################~~~~~~~" + ], + "elevation": [ + "000000000000000000000000000000000000000000333333333", + "000000000000000000000003333333333333333330033333333", + "000033333333333333330003333333333333333330303333333", + "000333333333333333333303333333333333333330033333333", + "000333330333333333333303333333333333333330003333333", + "000333333333333333333303333333333333333330003303333", + "000000003000003333333303333300000000333330003333333", + "003333333033303333333303333333333330333330000000333", + "033333333333303333333303333333333300000000033330000", + "030333333333303333333303333333333330333033333333000", + "033333304444444444444440333333333330333333333333300", + "003333304444444444444440333333333330333333333333300", + "003333300033300044444440333333333330333333000033330", + "003333333333303000004440333333333330000000033300000", + "003333333333303333304440333333333333333333033333303", + "000333333333303333304444444444440033333333003333333", + "000333333333303333304444444444440444044333300333333", + "003333333333303333304444444444444444444333303333333", + "003033333000003333303300000000000033333033303033333", + "003333000000003333333333333333333333333333303333333", + "000000000000000003333333333333333333333333303333333", + "000000000000000000000000000000000003333000003333333" + ], + "points": { + "warp_0": [1, 9], + "warp_1": [3, 3], + "warp_2": [34, 9], + "warp_3": [38, 9], + "warp_4": [36, 17], + "warp_6": [48, 12], + "warp_8": [34, 19] + }, + "regions": { + "wild": [ + [8, 10], + [9, 10], + [10, 10], + [11, 10], + [12, 10], + [13, 10], + [14, 10], + [15, 10], + [16, 10], + [17, 10], + [18, 10], + [19, 10], + [20, 10], + [21, 10], + [22, 10], + [23, 15], + [24, 15], + [25, 15], + [26, 15], + [27, 15], + [28, 15], + [29, 15], + [30, 15], + [31, 15], + [33, 16], + [34, 16], + [35, 16], + [37, 16], + [38, 16] + ] + }, + "warps": [ + {"coord": [1, 9], "enter": "step_on", "to_map": "VictoryRoad_1F", "to_point": "warp_0"}, + {"coord": [3, 3], "enter": "step_on", "to_map": "VictoryRoad_3F", "to_point": "warp_0"}, + {"coord": [34, 9], "enter": "step_on", "to_map": "VictoryRoad_3F", "to_point": "warp_1"}, + {"coord": [38, 9], "enter": "step_on", "to_map": "VictoryRoad_3F", "to_point": "warp_2"}, + {"coord": [36, 17], "enter": "step_on", "to_map": "VictoryRoad_3F", "to_point": "warp_3"}, + {"coord": [49, 13], "enter": "walk_into", "to_map": "Route23", "to_point": "warp_1"}, + {"coord": [48, 12], "enter": "walk_south", "to_map": "Route23", "to_point": "warp_1"}, + {"coord": [47, 13], "enter": "walk_into", "to_map": "Route23", "to_point": "warp_1"}, + {"coord": [34, 19], "enter": "walk_into", "to_map": "VictoryRoad_3F", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "poke_maniac", + "coord": [7, 4], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 0, + "source_script": "VictoryRoad_2F_EventScript_Dawson" + }, + { + "name": "black_belt", + "coord": [20, 11], + "trainer": {"sight": 4, "looks": ["south", "west"]}, + "source_event": 1, + "source_script": "VictoryRoad_2F_EventScript_Daisuke" + }, + { + "name": "rocker", + "coord": [31, 16], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 2, + "source_script": "VictoryRoad_2F_EventScript_Nelson" + }, + { + "name": "man", + "coord": [26, 6], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "VictoryRoad_2F_EventScript_Vincent" + }, + { + "name": "rocker", + "coord": [36, 5], + "facing": "north", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "VictoryRoad_2F_EventScript_Gregory" + }, + {"name": "pushable_boulder", "coord": [8, 7], "source_event": 9, "source_script": "EventScript_StrengthBoulder"}, + { + "name": "pushable_boulder", + "coord": [6, 17], + "source_event": 10, + "source_script": "EventScript_StrengthBoulder", + "source_local_id": "LOCALID_VICTORY_ROAD_2F_BOULDER1" + }, + { + "name": "pushable_boulder", + "coord": [33, 19], + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_2F_BOULDER", + "source_event": 11, + "source_script": "EventScript_StrengthBoulder", + "source_local_id": "LOCALID_VICTORY_ROAD_2F_BOULDER2" + }, + { + "name": "cooltrainer_m", + "coord": [40, 9], + "source_event": 12, + "source_script": "VictoryRoad_2F_EventScript_DoubleEdgeTutor" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [17, 6], + "source_event": 5, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_2F_GUARD_SPEC", + "source_script": "VictoryRoad_2F_EventScript_ItemGuardSpec", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [40, 7], + "source_event": 6, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_2F_TM07", + "source_script": "VictoryRoad_2F_EventScript_ItemTM07", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [25, 13], + "source_event": 7, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_2F_FULL_HEAL", + "source_script": "VictoryRoad_2F_EventScript_ItemFullHeal", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [14, 13], + "source_event": 8, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_2F_TM37", + "source_script": "VictoryRoad_2F_EventScript_ItemTM37", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/VictoryRoad_3F.json b/data/games/frlg/maps/base/VictoryRoad_3F.json new file mode 100644 index 0000000..6cbb41a --- /dev/null +++ b/data/games/frlg/maps/base/VictoryRoad_3F.json @@ -0,0 +1,186 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "VictoryRoad_3F", + "source": { + "decomp_file": "data/maps/VictoryRoad_3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "#######################~~##########~~~#~~~~~~", + "##########################################~~~", + "#####.~###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~", + "#####~~~##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~", + "#####~~~~~~~~#88888888888888#~~~~~~~~~#~~##~~", + "####~~~#~#~~~#~~~~~~~~~~~~~~#~~~~~~####~~##~~", + "####~~~~~#~~~#~~~~~~~~~~~~~~#~~~~~~####~~##~~", + "####~~~B##~~~#~~~########~###~~~~~~###~~~##~~", + "###~~~####~~~#~~~#~~~~~~~~~~~~~~~~~#########~", + "###88888888#~#~~~#~~~~~~~~~~~~~~~~.#~~~~~###~", + "###~~~~~~~~###~~~#~~~~~~~~###~~~~~~#~.~~~####", + "###~~~~~~~~###~~~#~~~~~~~~~#~~~~~~~#~~~~~###~", + "####~####~~888~~~#~~~~~~~~~~~~~#####~~~~~###~", + "####~~~~#~~~~~~~~#~~~~~~~~~~~~~#~~~~~#~~~###~", + "####~~~~##########~~~~~~~~~~~~~#~~~#~~~~~###~", + "####~~~~~~~~~~~~~~#~############~~~#~~~~~###~", + "####~~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~#~~~~~###~", + "####~~~~~~~~~~~~~~###~~~~~~~~~~~~~~#~~~.~###~", + "#####~~~~~~~~~~~~~###~~~~~~~~~~~~~H#~~~~~###~", + "#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~###~", + "##########################################~~~", + "###########################################~~" + ], + "elevation": [ + "000000000000000000000003300000000003330333333", + "000000000000000303000000000033300000000000333", + "000033300300333333333333333333333333333330333", + "000003330033333333333333333333333333333330003", + "000003333333334444444444444433333333330330033", + "000033303033334444444444444433333333330330033", + "000033333033334444444444444433333333330330033", + "000033333033334440333333000333333333333330033", + "000333030033334443333333333333333333003330003", + "000444444443334443333333333333333330333333003", + "000444444443334443333333330033333333333333000", + "000444444443334443333333333033333330333330303", + "003303330444444443333333333333330330333330303", + "003033333444444443333333333333303333333330003", + "330033333333333333333333333333303330333330003", + "333033333333333333030330333300003330333330003", + "033333333333333333333333333333333330333330003", + "333333333333333333333333333333333333333330003", + "333033333333333333333333333333333330333330003", + "333333333333333333333333333333333330333330003", + "333333303330033300333303333300333330330000333", + "333333333333333330333333333333303333303333033" + ], + "points": {"warp_0": [5, 2], "warp_1": [34, 9], "warp_2": [37, 10], "warp_3": [39, 17], "warp_4": [34, 18]}, + "regions": { + "wild": [ + [14, 4], + [15, 4], + [16, 4], + [17, 4], + [18, 4], + [19, 4], + [20, 4], + [21, 4], + [22, 4], + [23, 4], + [24, 4], + [25, 4], + [26, 4], + [27, 4], + [3, 9], + [4, 9], + [5, 9], + [6, 9], + [7, 9], + [8, 9], + [9, 9], + [10, 9], + [11, 12], + [12, 12], + [13, 12] + ] + }, + "warps": [ + {"coord": [5, 2], "enter": "step_on", "to_map": "VictoryRoad_2F", "to_point": "warp_1"}, + {"coord": [34, 9], "enter": "step_on", "to_map": "VictoryRoad_2F", "to_point": "warp_2"}, + {"coord": [37, 10], "enter": "step_on", "to_map": "VictoryRoad_2F", "to_point": "warp_3"}, + {"coord": [39, 17], "enter": "step_on", "to_map": "VictoryRoad_2F", "to_point": "warp_4"}, + {"coord": [34, 18], "enter": "step_on", "to_map": "VictoryRoad_2F", "to_point": "warp_8"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "cooltrainer_m", + "coord": [40, 7], + "facing": "west", + "trainer": {"sight": 1}, + "source_event": 0, + "source_script": "VictoryRoad_3F_EventScript_George" + }, + { + "name": "cooltrainer_f", + "coord": [21, 5], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "VictoryRoad_3F_EventScript_Alexa" + }, + { + "name": "cooltrainer_m", + "coord": [10, 17], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 2, + "source_script": "VictoryRoad_3F_EventScript_Colby" + }, + { + "name": "cooltrainer_f", + "coord": [11, 16], + "facing": "east", + "trainer": {"sight": 5}, + "source_event": 3, + "source_script": "VictoryRoad_3F_EventScript_Caroline" + }, + { + "name": "pushable_boulder", + "coord": [19, 15], + "source_event": 6, + "source_script": "EventScript_StrengthBoulder", + "source_local_id": "LOCALID_VICTORY_ROAD_3F_BOULDER1" + }, + { + "name": "pushable_boulder", + "coord": [33, 18], + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_3F_BOULDER", + "source_event": 7, + "source_script": "EventScript_StrengthBoulder" + }, + {"name": "pushable_boulder", "coord": [35, 13], "source_event": 8, "source_script": "EventScript_StrengthBoulder"}, + { + "name": "pushable_boulder", + "coord": [32, 5], + "source_event": 9, + "source_script": "EventScript_StrengthBoulder", + "source_local_id": "LOCALID_VICTORY_ROAD_3F_BOULDER2" + }, + { + "name": "cooltrainer_m", + "coord": [38, 13], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 10, + "source_script": "VictoryRoad_3F_EventScript_Ray" + }, + { + "name": "cooltrainer_f", + "coord": [39, 13], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 11, + "source_script": "VictoryRoad_3F_EventScript_Tyra" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [38, 7], + "source_event": 4, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_3F_MAX_REVIVE", + "source_script": "VictoryRoad_3F_EventScript_ItemMaxRevive", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + }, + { + "name": "item_ball", + "coord": [12, 9], + "source_event": 5, + "hide_flag": "FLAG_HIDE_VICTORY_ROAD_3F_TM50", + "source_script": "VictoryRoad_3F_EventScript_ItemTM50", + "pickup": {"status": "unresolved", "reason": "no pinned identity catalog for this map"} + } + ] +} diff --git a/data/games/frlg/maps/base/ViridianCity.json b/data/games/frlg/maps/base/ViridianCity.json new file mode 100644 index 0000000..01c9081 --- /dev/null +++ b/data/games/frlg/maps/base/ViridianCity.json @@ -0,0 +1,187 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "ViridianCity", + "source": { + "decomp_file": "data/maps/ViridianCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/ViridianCity/map.json", + "events_sha256": "5ce922b65f76335556ace9a047feeb1968854b604c8469c39cbbd60985f61bc1", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "###################.....########################", + "###################....S########################", + "###################.....########################", + "###################.....########################", + "###################.....####..............######", + "########..................................######", + "########.##########.......................######", + "########.###########.............######...######", + "########.##########..............######...######", + "########.###########...######....######...######", + "########.##########.....#####...S..#D#....######", + "########.###########...##D###.............######", + "########.##########........##vvvvvvvvvvvvv######", + "########.###########......................######", + "########.##########.......................######", + "######...###########.........###################", + ".........##########.S..######.............######", + "........................#####.....####....######", + ".......................##D###.....####....######", + "..................................SSD#....######", + "#######...................................######", + "#######...................................######", + "#######...................................######", + "###########.............#####.............######", + "###########.##..........#####.............######", + "#######.....##..........#####.............######", + "#######....wwwwww.......SSD##.............######", + "#######....wwwwww.........................######", + "#######....wwwwww.........................######", + "#######....wwwwww.........................######", + "#######vvvvwwwwwwvvv...vvvvvvvvvvvvvvvvvvv######", + "#######.............S.....................######", + "#######...................................######", + "#######...................................######", + "##############............................######", + "##############............................######", + "######################....######################", + "######################....######################", + "######################....######################", + "######################....######################" + ], + "elevation": [ + "000000000000000000033333000000000000000000000000", + "000000000000000000033330000000000000000000000000", + "000000000000000000033333000000000000000000000000", + "000000000000000000033333000000000000000000000000", + "000000000000000000033333000033333333333333000000", + "000000003333333333333333333333333333333333000000", + "000000003000000000033333333333333333333333000000", + "000000003000000000003333333333333000000333000000", + "000000003000000000033333333333333000000333000000", + "000000003000000000003330000003333000000333000000", + "000000003000000000033333000003330330003333000000", + "000000003000000000003330000003333333333333000000", + "000000003000000000033333333000000000000000000000", + "000000003000000000003333333333333333333333000000", + "000000003000000000033333333333333333333333000000", + "000000333000000000003333333330000000000000000000", + "333333333000000000030330000003333333333333000000", + "333333333333333333333333000003333300003333000000", + "333333333333333333333330000003333300003333000000", + "333333333333333333333333333333333300003333000000", + "000000033333333333333333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000000003333333333333000003333333333333000000", + "000000000003003333333333000003333333333333000000", + "000000033333003333333333000003333333333333000000", + "000000033331111113333333000003333333333333000000", + "000000033331111113333333333333333333333333000000", + "000000033331111113333333333333333333333333000000", + "000000033331111113333333333333333333333333000000", + "000000000001111110003330000000000000000000000000", + "000000033333333333330333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000000000003333333333333333333333333333000000", + "000000000000003333333333333333333333333333000000", + "000000000000000000000033330000000000000000000000", + "000000000000000000000033330000000000000000000000", + "000000000000000000000033330000000000000000000000", + "000000000000000000000033330000000000000000000000" + ], + "points": {"warp_0": [26, 26], "warp_1": [25, 11], "warp_2": [36, 10], "warp_3": [25, 18], "warp_4": [36, 19]}, + "warps": [ + {"coord": [26, 26], "enter": "walk_into", "to_map": "ViridianCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [25, 11], "enter": "walk_into", "to_map": "ViridianCity_House", "to_point": "warp_1"}, + {"coord": [36, 10], "enter": "walk_into", "to_map": "ViridianCity_Gym", "to_point": "warp_1"}, + {"coord": [25, 18], "enter": "walk_into", "to_map": "ViridianCity_School", "to_point": "warp_1"}, + {"coord": [36, 19], "enter": "walk_into", "to_map": "ViridianCity_Mart", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route2", "offset": 12}, + {"side": "south", "to_map": "Route1", "offset": 12}, + {"side": "west", "to_map": "Route22", "offset": 10} + ], + "npcs": [ + { + "name": "fat_man", + "coord": [8, 26], + "source_event": 0, + "source_script": "ViridianCity_EventScript_DreamEaterTutor" + }, + { + "name": "cut_tree", + "coord": [11, 24], + "hide_flag": "FLAG_TEMP_11", + "source_event": 1, + "source_script": "EventScript_CutTree" + }, + { + "name": "old_man_1", + "coord": [34, 11], + "source_event": 2, + "source_script": "ViridianCity_EventScript_OldMan", + "source_local_id": "LOCALID_VIRIDIAN_OLD_MAN" + }, + { + "name": "var_0", + "coord": [21, 6], + "source_event": 3, + "source_script": "ViridianCity_EventScript_TutorialOldMan", + "source_local_id": "LOCALID_TUTORIAL_MAN" + }, + { + "name": "woman_3", + "coord": [20, 12], + "source_event": 4, + "source_script": "ViridianCity_EventScript_Woman", + "source_local_id": "LOCALID_VIRIDIAN_WOMAN" + }, + { + "name": "youngster", + "coord": [33, 26], + "wander": {"min": [33, 24], "max": [33, 28]}, + "source_event": 5, + "source_script": "ViridianCity_EventScript_Youngster" + }, + { + "name": "boy", + "coord": [16, 22], + "wander": {"min": [15, 20], "max": [17, 24]}, + "source_event": 6, + "source_script": "ViridianCity_EventScript_Boy" + }, + { + "name": "cut_tree", + "coord": [18, 5], + "hide_flag": "FLAG_TEMP_12", + "source_event": 7, + "source_script": "EventScript_CutTree", + "source_local_id": "LOCALID_VIRIDIAN_BORDER_TREE" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [17, 5], + "source_event": 8, + "hide_flag": "FLAG_HIDE_VIRIDIAN_CITY_POTION", + "source_script": "ViridianCity_EventScript_ItemPotion", + "item": "potion" + } + ] +} diff --git a/data/games/frlg/maps/base/ViridianCity_Gym.json b/data/games/frlg/maps/base/ViridianCity_Gym.json new file mode 100644 index 0000000..d6e1d19 --- /dev/null +++ b/data/games/frlg/maps/base/ViridianCity_Gym.json @@ -0,0 +1,120 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "ViridianCity_Gym", + "source": { + "decomp_file": "data/maps/ViridianCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "####################", + "####################", + "#...#......o.......l", + "#...#......r.....odo", + "#...###.##.#######..", + "#...###.##.#######..", + "#.......#..#.....#..", + "#......###.......#..", + "######.########..#..", + "######.#.######..#..", + "....d#.#.........#..", + "o....#.#......##.#..", + "..##.#.#......##.#..", + ".o##.#.#.......#d#..", + "..##...#.......#.#ou", + "..##.#########..o...", + "..##.#########......", + "..##or.......o......", + "..##r........o......", + "..############......", + "uu############.S...S", + ".....o.......l......", + ".o...........l......", + "####################" + ], + "points": {"warp_1": [17, 22]}, + "warps": [ + {"coord": [16, 22], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_2"}, + {"coord": [17, 22], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_2"}, + {"coord": [18, 22], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "black_belt", + "coord": [10, 2], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "ViridianCity_Gym_EventScript_Takashi" + }, + { + "name": "cooltrainer_m", + "coord": [12, 10], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 1, + "source_script": "ViridianCity_Gym_EventScript_Yuji" + }, + { + "name": "black_belt", + "coord": [11, 14], + "facing": "north", + "trainer": {"sight": 3}, + "source_event": 2, + "source_script": "ViridianCity_Gym_EventScript_Atsushi" + }, + { + "name": "man", + "coord": [10, 10], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "ViridianCity_Gym_EventScript_Jason" + }, + { + "name": "man", + "coord": [2, 21], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "ViridianCity_Gym_EventScript_Cole" + }, + { + "name": "black_belt", + "coord": [3, 11], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "ViridianCity_Gym_EventScript_Kiyo" + }, + { + "name": "cooltrainer_m", + "coord": [6, 8], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 6, + "source_script": "ViridianCity_Gym_EventScript_Samuel" + }, + { + "name": "giovanni", + "coord": [2, 2], + "hide_flag": "FLAG_HIDE_VIRIDIAN_GIOVANNI", + "source_event": 7, + "source_script": "ViridianCity_Gym_EventScript_Giovanni", + "source_local_id": "LOCALID_VIRIDIAN_GIOVANNI" + }, + { + "name": "cooltrainer_m", + "coord": [13, 7], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 8, + "source_script": "ViridianCity_Gym_EventScript_Warren" + }, + {"name": "gym_guy", "coord": [16, 20], "source_event": 9, "source_script": "ViridianCity_Gym_EventScript_GymGuy"} + ] +} diff --git a/data/games/frlg/maps/base/ViridianCity_Mart.json b/data/games/frlg/maps/base/ViridianCity_Mart.json new file mode 100644 index 0000000..b424782 --- /dev/null +++ b/data/games/frlg/maps/base/ViridianCity_Mart.json @@ -0,0 +1,53 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "ViridianCity_Mart", + "source": { + "decomp_file": "data/maps/ViridianCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"clerk_front": [4, 3], "warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_4"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "clerk", + "coord": [2, 3], + "source_event": 0, + "source_script": "ViridianCity_Mart_EventScript_Clerk", + "source_local_id": "LOCALID_VIRIDIAN_MART_CLERK" + }, + { + "name": "youngster", + "coord": [6, 2], + "wander": {"min": [5, 1], "max": [7, 3]}, + "source_event": 1, + "source_script": "ViridianCity_Mart_EventScript_Youngster" + }, + { + "name": "woman_1", + "coord": [9, 5], + "wander": {"min": [9, 4], "max": [9, 6]}, + "source_event": 2, + "source_script": "ViridianCity_Mart_EventScript_Woman" + } + ] +} diff --git a/data/games/frlg/maps/base/ViridianCity_PokemonCenter_1F.json b/data/games/frlg/maps/base/ViridianCity_PokemonCenter_1F.json new file mode 100644 index 0000000..f037cb3 --- /dev/null +++ b/data/games/frlg/maps/base/ViridianCity_PokemonCenter_1F.json @@ -0,0 +1,71 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "ViridianCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/ViridianCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_0"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_0"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "ViridianCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_VIRIDIAN_NURSE" + }, + { + "name": "gentleman", + "coord": [12, 5], + "source_event": 1, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Gentleman" + }, + { + "name": "boy", + "coord": [4, 7], + "source_event": 2, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Boy" + }, + { + "name": "youngster", + "coord": [2, 3], + "wander": {"min": [1, 2], "max": [3, 4]}, + "source_event": 3, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Youngster" + } + ] +} diff --git a/data/games/frlg/maps/base/ViridianForest.json b/data/games/frlg/maps/base/ViridianForest.json new file mode 100644 index 0000000..a3b8055 --- /dev/null +++ b/data/games/frlg/maps/base/ViridianForest.json @@ -0,0 +1,181 @@ +{ + "format": "pokesim-runtime-map/2", + "name": "ViridianForest", + "source": { + "decomp_file": "data/maps/ViridianForest/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/ViridianForest/map.json", + "events_sha256": "6d6f082604d3c220eeb2c72cb6a606403330df44c58d9ed2523cd81c53fdaba2", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "###########.............###........................###", + "###########.............###........................###", + "###########.............###........................###", + "#..#####..#.............###.....###############....###", + "####...####.............###.....###############....###", + "####...####.............###.....###############....###", + "####...####.....###.....###.....###############....###", + "####..S####~~~~~###~~~~~###~~~~~###############....###", + "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", + "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.......#########", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~........#########", + "###~~~~~###~~~~~###~~~~~###~~~~~~######......#########", + "###~~~~~###~~~~~###~~~~~###...~~~######......#########", + "###~~~~~###~~~~~###.....###......######......#########", + "###~~~~~###~~~~~###..............######......#########", + "###~~~~~###~~~~~#####............######......#########", + "###~~~~~###~~~~~#####............######............###", + "###~~~~~###~~~~~~~#####################....S.......###", + "###~~~~~...~~~~~~~#####################............###", + "###...............#####################............###", + "###......S........#####################~~~~........###", + "###...............#####################~~~~~###....###", + "###.....................###############~~~~~###....###", + "###.....................###############~~~~~###....###", + "###.....................###############~~~~~###....###", + "##################......###############~~~~~###....###", + "##################......###############~~~~~###....###", + "#######################################~~~~~###....###", + "#######################################~~~~~###....###", + "#######################################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######~~~~........###", + "############~~~~~~~~~~~~~~~~S..~~######~~~.........###", + "############~~~~~~~~~~~~~~~~...~~######~~~.........###", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", + "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", + "###~~~~~~~~~...~~~~~~~~~~~~.###.~~~~~~~~~...~~~~~~~###", + "###~~~~~~~~~....~~~~~~~~~~.......~~~~~~~....~~~~~~~###", + "###~~~~~~~~............................S....~~~~~~~###", + "###~~~~~~~~....................S...........~~~~~~~~###", + "###~~~~~~~~................................~~~~~~~~###", + "###########################......#####################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################" + ], + "points": {"warp_0": [29, 62], "warp_2": [5, 9]}, + "warps": [ + {"coord": [29, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, + {"coord": [28, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, + {"coord": [5, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"}, + {"coord": [6, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"}, + {"coord": [30, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, + {"coord": [4, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "youngster", "coord": [29, 58], "source_event": 0, "source_script": "ViridianForest_EventScript_Youngster"}, + {"name": "boy", "coord": [45, 58], "source_event": 1, "source_script": "ViridianForest_EventScript_Boy"}, + { + "name": "bug_catcher", + "coord": [47, 45], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 2, + "source_script": "ViridianForest_EventScript_Rick" + }, + { + "name": "bug_catcher", + "coord": [47, 29], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 3, + "source_script": "ViridianForest_EventScript_Doug" + }, + { + "name": "bug_catcher", + "coord": [7, 22], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 4, + "source_script": "ViridianForest_EventScript_Sammy" + }, + { + "name": "bug_catcher", + "coord": [43, 6], + "trainer": {"sight": 1, "looks": ["south", "north"]}, + "source_event": 8, + "source_script": "ViridianForest_EventScript_Anthony" + }, + { + "name": "bug_catcher", + "coord": [16, 5], + "facing": "north", + "trainer": {"sight": 1}, + "source_event": 9, + "source_script": "ViridianForest_EventScript_Charlie" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [5, 41], + "source_event": 5, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POKE_BALL", + "source_script": "ViridianForest_EventScript_ItemPokeBall", + "item": "poke_ball" + }, + { + "name": "item_ball", + "coord": [40, 21], + "source_event": 6, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_ANTIDOTE", + "source_script": "ViridianForest_EventScript_ItemAntidote", + "item": "antidote" + }, + { + "name": "item_ball", + "coord": [21, 34], + "source_event": 7, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION", + "source_script": "ViridianForest_EventScript_ItemPotion", + "item": "potion" + }, + { + "name": "item_ball", + "coord": [49, 60], + "source_event": 10, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION_2", + "source_script": "ViridianForest_EventScript_ItemPotion2", + "item": "potion" + } + ] +} diff --git a/data/games/frlg/maps/overlays/VermilionCity_Gym.json b/data/games/frlg/maps/overlays/VermilionCity_Gym.json new file mode 100644 index 0000000..4a43b4c --- /dev/null +++ b/data/games/frlg/maps/overlays/VermilionCity_Gym.json @@ -0,0 +1,19 @@ +{ + "format": "pokesim-map-overlay/1", + "map": "VermilionCity_Gym", + "operations": [ + { + "op": "tile", + "coords": [[4, 6], [5, 6], [6, 6], [4, 7], [5, 7], [6, 7]], + "glyph": ".", + "why": "story_state", + "when": {"flag": "FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES", "after_checkpoint": "00.23"}, + "evidence": { + "source": "pret/pokefirered@ce6406d8 data/maps/VermilionCity_Gym/scripts.inc: VermilionCity_Gym_EventScript_SetBeamsOff sets (4..6, 6..7) to floor once FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES is set", + "story": "Arduino-Source FRLG AutoStory 00.23 finds both switches (trash cans); 00.24 and 00.25 walk through the open beams to Lt. Surge", + "history": "Was OPENED_TILES in frlg_decomp_map_builder.py, baked into the approved runtime pack 6c2f5c85534186cd9d52af4f844b9847cfd0f33a" + }, + "status": "verified" + } + ] +} diff --git a/data/games/frlg/maps/runtime/CeladonCity.json b/data/games/frlg/maps/runtime/CeladonCity.json index 7631946..7bb61a0 100644 --- a/data/games/frlg/maps/runtime/CeladonCity.json +++ b/data/games/frlg/maps/runtime/CeladonCity.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/CeladonCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "############################################################", @@ -49,6 +48,48 @@ "############################################################", "############################################################" ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000", + "000033333333333333333333333333333333333333333333333333330000", + "000033333333333333333333333333333333333333333333333333330000", + "000033333333333333333333300003330000003300000000000000330000", + "000000000333333333000000000000000000003300000000000000330000", + "000000000000000000000000033000000033333333333333333300330000", + "000000000000000000000000033000000033333333333333333300330000", + "000000000000000000000000033000000000000000000000000300330000", + "000000000000000000000000033000000000000000000000000300330000", + "000000000000000000000000033000000000000000000000000300000000", + "000000000000000000000000030000000000000000000000000300000000", + "000033333000000000333333333333333333333333333333333333333333", + "000033333000000000333333333333333333333333333333333333333333", + "000033333000000000033333333333333333333333333333333333333333", + "000033333333333333333333333333333333333333333333333333333333", + "000033333333333333333333333333333033333333333333333300000000", + "000033333333333333333330000000000000000003333333333300000000", + "000033333333333333333300000000000000000003330000000000000000", + "000033333333000333333330333333000000000003330000000000000000", + "000033333333000333333330333333000000000003330000000000330000", + "000033333333333333333330111111000000000303330000000000330000", + "333333333333333333333330111111033333333333333333333333330000", + "333333333333333333333330111111000000000003330000000000330000", + "333333333333333333333333333333333333333333333333333300330000", + "000000003333333333333333333333333333333333333333333300330000", + "000000003333333300003333333333330000000000000000000000330000", + "000000000000000000000000333333330000000000000000000000330000", + "000000000000000000000000333333330000000000000000000000330000", + "000000000000000000000000333333330000000000000000000000330000", + "000033333300033333330000333333333333333333333333333333330000", + "000033333333333303330000333333333333333333333333333333330000", + "000033333333333333330000333333333333333333333333333333330000", + "000000000033000000000000333333333333333333333333333333330000", + "000033333333333333330000000000000000000030000000000333330000", + "000033333333333333333333000000000000000030000000000333330000", + "000033333333333333333333333333333333333333003333333333000000", + "000033333333333333333333333333333333333333000000000000000000", + "000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000" + ], "points": { "warp_0": [34, 21], "warp_1": [11, 14], diff --git a/data/games/frlg/maps/runtime/CeruleanCave_1F.json b/data/games/frlg/maps/runtime/CeruleanCave_1F.json index dca2217..f466808 100644 --- a/data/games/frlg/maps/runtime/CeruleanCave_1F.json +++ b/data/games/frlg/maps/runtime/CeruleanCave_1F.json @@ -1,95 +1,164 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCave_1F", - "source": { - "decomp_file": "data/maps/CeruleanCave_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCave_1F", + "source": { + "decomp_file": "data/maps/CeruleanCave_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_1F/map.json", + "events_sha256": "42a7d49479544125aa08209126948e3f57ff6040a2f6c1b5289e498de39d4e5c", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################################", + "#######~~~##~#########wwwwwwwww#~~##~~##", + "#######~~~.~~#########wwwwwwwww#~~.~~~##", + "#######~~##~~#wwwwwwwwwwwwwwwww#~~~~~~##", + "##.####~~##~~#wwwwwwwwww#~~~#ww##.######", + "##~#~~~~~~~~~#wwwwwwwwww#~~~#wwwwwwwwww#", + "#~~#~~~~##~~~#www#~~~~~~~~~~#wwwwwwwwww#", + "#.~#~~~~##~~~#www#~~~~~~~~~~#wwwwwwwwww#", + "#~~#~~~~##~~~#www#~~~~~~~~~~~~~~~~~#www#", + "####~~~~##.###www#~~~######~~~#~~~~#www#", + "##~#~~~~#www##www#~~~##~####~~.~~~~#www#", + "##~~~~~~#www##www##.###~.~##~~~~~~~#www#", + "##~~~~~~#wwwwwwww#~~~~#~~~##~~~#####www#", + "##~~~~~~#wwwwwwww#~~#~##.###~~~###~~~~~#", + "##~~##~~#wwwwwwww#~~~~~~~~~#~~~#~~~~~~~#", + "##~~#.~~#www#~~~~##~~~~~~###~~~#~~~~~###", + "##~~~~~~#~~~#~~~~####~~~####~~~#~~~#####", + "##~~~~~~#~~~#~~~~~~~~~~~~~~~~~~#~~~#####", + "#####.###~~~##.#~~~~~~~~~~~~~~~#~~~#####", + "#####~~~~~~~~~~#~~~~~~~~~~~~~~~#~~~#####", + "#####~~~~~~~~~~#~~~~~~~~~~~~~~~#~~~#####", + "#####~~~~~~~~~~#################~.~#####", + "########################################" + ], + "elevation": [ + "0000000000000000000000000000000000000000", + "0000000333003000000000111111111033003300", + "0000000333333000000000111111111033333300", + "0000000330033011111111111111111033333300", + "0030000330033011111111110444011003000000", + "0030333333333011111111110444011111111110", + "0330333300333011104444444444011111111110", + "0330333300333011104444444444011111111110", + "0330333300333011104444444444444444401110", + "0000333300300011104440000004440444401110", + "0030333301110011104440030000444444401110", + "0033333301110011100000033300444444401110", + "0033333301111111103333033300444000001110", + "0033333301111111103303003000444000333330", + "0033003301111111103333333330444033333330", + "0033033301110444400333333000444033333000", + "0033333303330444400003330000444033300000", + "0033333303330444444444444444444033300000", + "0000030003330000444444444444444033300000", + "0000033333333330444444444444444033300000", + "0000033333333330444444444444444033300000", + "0000033333333330000000000000000033300000", + "0000000000000000000000000000000000000000" + ], + "points": { + "entrance": [33, 21], + "warp_0": [33, 21], + "warp_1": [34, 2], + "warp_2": [1, 7], + "warp_3": [10, 2], + "warp_4": [5, 15], + "warp_5": [30, 10], + "warp_6": [24, 11], + "warp_7": [2, 4] + }, + "warps": [ + {"coord": [33, 21], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_7"}, + {"coord": [34, 2], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_0"}, + {"coord": [1, 7], "enter": "step_on", "to_map": "CeruleanCave_B1F", "to_point": "warp_0"}, + {"coord": [10, 2], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_1"}, + {"coord": [5, 15], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_2"}, + {"coord": [30, 10], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_3"}, + {"coord": [24, 11], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_4"}, + {"coord": [2, 4], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rock_smash_rock", + "coord": [7, 21], + "hide_flag": "FLAG_TEMP_12", + "source_event": 3, + "source_script": "EventScript_RockSmash" }, - "tiles": [ - "########################################", - "#######~~~##~#########wwwwwwwww#~~##~~##", - "#######~~~.~~#########wwwwwwwww#~~.~~~##", - "#######~~##~~#wwwwwwwwwwwwwwwww#~~~~~~##", - "##.####~~##~~#wwwwwwwwww#~~~#ww##.######", - "##~#~~~~~~~~~#wwwwwwwwww#~~~#wwwwwwwwww#", - "#~~#~~~~##~~~#www#~~~~~~~~~~#wwwwwwwwww#", - "#.~#~~~~##~~~#www#~~~~~~~~~~#wwwwwwwwww#", - "#~~#~~~~##~~~#www#~~~~~~~~~~~~~~~~~#www#", - "####~~~~##.###www#~~~######~~~#~~~~#www#", - "##~#~~~~#www##www#~~~##~####~~.~~~~#www#", - "##~~~~~~#www##www##.###~.~##~~~~~~~#www#", - "##~~~~~~#wwwwwwww#~~~~#~~~##~~~#####www#", - "##~~~~~~#wwwwwwww#~~#~##.###~~~###~~~~~#", - "##~~##~~#wwwwwwww#~~~~~~~~~#~~~#~~~~~~~#", - "##~~#.~~#www#~~~~##~~~~~~###~~~#~~~~~###", - "##~~~~~~#~~~#~~~~####~~~####~~~#~~~#####", - "##~~~~~~#~~~#~~~~~~~~~~~~~~~~~~#~~~#####", - "#####.###~~~##.#~~~~~~~~~~~~~~~#~~~#####", - "#####~~~~~~~~~~#~~~~~~~~~~~~~~~#~~~#####", - "#####~~~~~~~~~~#~~~~~~~~~~~~~~~#~~~#####", - "#####~~~~~~~~~~#################~.~#####", - "########################################" - ], - "elevation": [ - "0000000000000000000000000000000000000000", - "0000000333003000000000111111111033003300", - "0000000333333000000000111111111033333300", - "0000000330033011111111111111111033333300", - "0030000330033011111111110444011003000000", - "0030333333333011111111110444011111111110", - "0330333300333011104444444444011111111110", - "0330333300333011104444444444011111111110", - "0330333300333011104444444444444444401110", - "0000333300300011104440000004440444401110", - "0030333301110011104440030000444444401110", - "0033333301110011100000033300444444401110", - "0033333301111111103333033300444000001110", - "0033333301111111103303003000444000333330", - "0033003301111111103333333330444033333330", - "0033033301110444400333333000444033333000", - "0033333303330444400003330000444033300000", - "0033333303330444444444444444444033300000", - "0000030003330000444444444444444033300000", - "0000033333333330444444444444444033300000", - "0000033333333330444444444444444033300000", - "0000033333333330000000000000000033300000", - "0000000000000000000000000000000000000000" - ], - "points": { - "entrance": [33, 21], - "warp_0": [33, 21], - "warp_1": [34, 2], - "warp_2": [1, 7], - "warp_3": [10, 2], - "warp_4": [5, 15], - "warp_5": [30, 10], - "warp_6": [24, 11], - "warp_7": [2, 4] + { + "name": "rock_smash_rock", + "coord": [13, 21], + "hide_flag": "FLAG_TEMP_13", + "source_event": 4, + "source_script": "EventScript_RockSmash" }, - "warps": [ - {"coord": [33, 21], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_7"}, - {"coord": [34, 2], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_0"}, - {"coord": [1, 7], "enter": "step_on", "to_map": "CeruleanCave_B1F", "to_point": "warp_0"}, - {"coord": [10, 2], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_1"}, - {"coord": [5, 15], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_2"}, - {"coord": [30, 10], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_3"}, - {"coord": [24, 11], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_4"}, - {"coord": [2, 4], "enter": "step_on", "to_map": "CeruleanCave_2F", "to_point": "warp_5"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "rock_smash_rock", "coord": [7, 21], "hide_flag": "FLAG_TEMP_12"}, - {"name": "rock_smash_rock", "coord": [13, 21], "hide_flag": "FLAG_TEMP_13"}, - {"name": "rock_smash_rock", "coord": [5, 20], "hide_flag": "FLAG_TEMP_14"}, - {"name": "rock_smash_rock", "coord": [14, 20], "hide_flag": "FLAG_TEMP_15"}, - {"name": "rock_smash_rock", "coord": [11, 21], "hide_flag": "FLAG_TEMP_16"}, - {"name": "rock_smash_rock", "coord": [9, 18], "hide_flag": "FLAG_TEMP_17"} - ], - "items": [ - {"name": "item_ball", "coord": [7, 3], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_NUGGET"}, - {"name": "item_ball", "coord": [11, 16], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_FULL_RESTORE"}, - {"name": "item_ball", "coord": [25, 5], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_MAX_ELIXIR"} - ] + { + "name": "rock_smash_rock", + "coord": [5, 20], + "hide_flag": "FLAG_TEMP_14", + "source_event": 5, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [14, 20], + "hide_flag": "FLAG_TEMP_15", + "source_event": 6, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [11, 21], + "hide_flag": "FLAG_TEMP_16", + "source_event": 7, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [9, 18], + "hide_flag": "FLAG_TEMP_17", + "source_event": 8, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [7, 3], + "source_event": 0, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_NUGGET", + "source_script": "CeruleanCave_1F_EventScript_ItemNugget", + "item": "nugget" + }, + { + "name": "item_ball", + "coord": [11, 16], + "source_event": 1, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_FULL_RESTORE", + "source_script": "CeruleanCave_1F_EventScript_ItemFullRestore", + "item": "full_restore" + }, + { + "name": "item_ball", + "coord": [25, 5], + "source_event": 2, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_MAX_ELIXIR", + "source_script": "CeruleanCave_1F_EventScript_ItemMaxElixir", + "item": "max_elixir" + } + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCave_2F.json b/data/games/frlg/maps/runtime/CeruleanCave_2F.json index 93f437d..3868eb6 100644 --- a/data/games/frlg/maps/runtime/CeruleanCave_2F.json +++ b/data/games/frlg/maps/runtime/CeruleanCave_2F.json @@ -1,69 +1,163 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCave_2F", - "source": { - "decomp_file": "data/maps/CeruleanCave_2F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCave_2F", + "source": { + "decomp_file": "data/maps/CeruleanCave_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_2F/map.json", + "events_sha256": "2c6e7f32daefb68be4a39c7219682c3bb7b8c8ddb079db21226de4afa556f6ae", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" }, - "tiles": [ - "########################################", - "########################################", - "########################################", - "####~~~~####~~##~~~~~#~~~~~~~~~~~~######", - "#######~~~~~~.#~~###~#~#########~.######", - "####~~####~####~##~#~#~~~~~~~~~#########", - "####~.~~~#~~~~~~~~~###########~~~~######", - "#######~############~~~~~~~~~####~######", - "####~#~~~~~~~~~~~~~~~#######~~~~#~######", - "####~#################~~#~.###~##~######", - "####~#~~~~#~~~~~~~~~~~~.#~~~#~~~#~######", - "####~#~##~#~#####~#######~#####~#~######", - "####~#~~#~#~~~~~#~~~~~~~#~~~~~#~#~######", - "####~#~~#~#####~#######~#####~#~########", - "####~#~.#~#~~~~~#~~~~~#~~~~~#~#~#~######", - "####~####~#~#####~###~#~#~#~#~#~#~######", - "####~#~~~~#~~~~~~~~~#~#~#~#~#~#~#~######", - "####~#~####~#########~#~#~#~###~#~######", - "####~#~~~~#~~~~~#~~~~~#~#~#~~~~~#~######", - "####~############~#####~#~#######~######", - "####~~~~~~~~~~~~~~#~~~~~#~~~~~~~~~######", - "########################################", - "########################################" - ], - "points": { - "warp_0": [33, 4], - "warp_1": [13, 4], - "warp_2": [7, 14], - "warp_3": [26, 9], - "warp_4": [23, 10], - "warp_5": [5, 6] + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################################", + "########################################", + "########################################", + "####~~~~####~~##~~~~~#~~~~~~~~~~~~######", + "#######~~~~~~.#~~###~#~#########~.######", + "####~~####~####~##~#~#~~~~~~~~~#########", + "####~.~~~#~~~~~~~~~###########~~~~######", + "#######~############~~~~~~~~~####~######", + "####~#~~~~~~~~~~~~~~~#######~~~~#~######", + "####~#################~~#~.###~##~######", + "####~#~~~~#~~~~~~~~~~~~.#~~~#~~~#~######", + "####~#~##~#~#####~#######~#####~#~######", + "####~#~~#~#~~~~~#~~~~~~~#~~~~~#~#~######", + "####~#~~#~#####~#######~#####~#~########", + "####~#~.#~#~~~~~#~~~~~#~~~~~#~#~#~######", + "####~####~#~#####~###~#~#~#~#~#~#~######", + "####~#~~~~#~~~~~~~~~#~#~#~#~#~#~#~######", + "####~#~####~#########~#~#~#~###~#~######", + "####~#~~~~#~~~~~#~~~~~#~#~#~~~~~#~######", + "####~############~#####~#~#######~######", + "####~~~~~~~~~~~~~~#~~~~~#~~~~~~~~~######", + "########################################", + "########################################" + ], + "points": { + "warp_0": [33, 4], + "warp_1": [13, 4], + "warp_2": [7, 14], + "warp_3": [26, 9], + "warp_4": [23, 10], + "warp_5": [5, 6] + }, + "warps": [ + {"coord": [33, 4], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_1"}, + {"coord": [13, 4], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_3"}, + {"coord": [7, 14], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_4"}, + {"coord": [26, 9], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_5"}, + {"coord": [23, 10], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_6"}, + {"coord": [5, 6], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_7"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "rock_smash_rock", + "coord": [33, 10], + "hide_flag": "FLAG_TEMP_12", + "source_event": 3, + "source_script": "EventScript_RockSmash" }, - "warps": [ - {"coord": [33, 4], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_1"}, - {"coord": [13, 4], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_3"}, - {"coord": [7, 14], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_4"}, - {"coord": [26, 9], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_5"}, - {"coord": [23, 10], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_6"}, - {"coord": [5, 6], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_7"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "rock_smash_rock", "coord": [33, 10], "hide_flag": "FLAG_TEMP_12"}, - {"name": "rock_smash_rock", "coord": [33, 9], "hide_flag": "FLAG_TEMP_13"}, - {"name": "rock_smash_rock", "coord": [25, 11], "hide_flag": "FLAG_TEMP_14"}, - {"name": "rock_smash_rock", "coord": [28, 20], "hide_flag": "FLAG_TEMP_15"}, - {"name": "rock_smash_rock", "coord": [30, 20], "hide_flag": "FLAG_TEMP_16"}, - {"name": "rock_smash_rock", "coord": [9, 13], "hide_flag": "FLAG_TEMP_17"}, - {"name": "rock_smash_rock", "coord": [23, 16], "hide_flag": "FLAG_TEMP_18"}, - {"name": "rock_smash_rock", "coord": [13, 6], "hide_flag": "FLAG_TEMP_19"}, - {"name": "rock_smash_rock", "coord": [4, 12], "hide_flag": "FLAG_TEMP_1A"}, - {"name": "rock_smash_rock", "coord": [10, 20], "hide_flag": "FLAG_TEMP_1B"} - ], - "items": [ - {"name": "item_ball", "coord": [9, 18], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_PP_UP"}, - {"name": "item_ball", "coord": [29, 16], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_ULTRA_BALL"}, - {"name": "item_ball", "coord": [33, 12], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_FULL_RESTORE"} - ] + { + "name": "rock_smash_rock", + "coord": [33, 9], + "hide_flag": "FLAG_TEMP_13", + "source_event": 4, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [25, 11], + "hide_flag": "FLAG_TEMP_14", + "source_event": 5, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [28, 20], + "hide_flag": "FLAG_TEMP_15", + "source_event": 6, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [30, 20], + "hide_flag": "FLAG_TEMP_16", + "source_event": 7, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [9, 13], + "hide_flag": "FLAG_TEMP_17", + "source_event": 8, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [23, 16], + "hide_flag": "FLAG_TEMP_18", + "source_event": 9, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [13, 6], + "hide_flag": "FLAG_TEMP_19", + "source_event": 10, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [4, 12], + "hide_flag": "FLAG_TEMP_1A", + "source_event": 11, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [10, 20], + "hide_flag": "FLAG_TEMP_1B", + "source_event": 12, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [9, 18], + "source_event": 0, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_PP_UP", + "source_script": "CeruleanCave_2F_EventScript_ItemPPUp", + "item": "pp_up" + }, + { + "name": "item_ball", + "coord": [29, 16], + "source_event": 1, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_ULTRA_BALL", + "source_script": "CeruleanCave_2F_EventScript_ItemUltraBall", + "item": "ultra_ball" + }, + { + "name": "item_ball", + "coord": [33, 12], + "source_event": 2, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_FULL_RESTORE", + "source_script": "CeruleanCave_2F_EventScript_ItemFullRestore", + "item": "full_restore" + } + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCave_B1F.json b/data/games/frlg/maps/runtime/CeruleanCave_B1F.json index eab1adc..c1165ae 100644 --- a/data/games/frlg/maps/runtime/CeruleanCave_B1F.json +++ b/data/games/frlg/maps/runtime/CeruleanCave_B1F.json @@ -1,84 +1,165 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCave_B1F", - "source": { - "decomp_file": "data/maps/CeruleanCave_B1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCave_B1F", + "source": { + "decomp_file": "data/maps/CeruleanCave_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_B1F/map.json", + "events_sha256": "771c69cd177d040c0048fc9a4729525141d1844e18460448d48e1a1af405986a", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################################", + "##~~~~~~~~~~~~~~##~~~~~############~~~~#", + "##~~~~~~~~~~~~~~#~~~~~~~~#######~~~~~~~#", + "##~~~~~~~~~~~~~~#~~####~~~~~#######~~~~#", + "##~~~~~~#####.###~~####~~~~~#######~~~~#", + "##~~~~~~#~~~~~~~~~~########~#######~#~~#", + "##~~##~~##~~~~~~~~#########~~~~~~~~~~~~#", + "##~~#.~~###~~~~~~##########~~~~~~~~~~~~#", + "##~~~~~~#wwwww##~~~~~~~~~~~~~~~~#~~~####", + "#########wwwww##~~~~~~~~~~~~~~~~#~~~####", + "#www############~~~~~~~~~~~~~~~~#~~~####", + "#www##############.########~###~#~~~####", + "#www#~#~#~########~~~~~~~~#~###~#~~~####", + "#www#~~~~~########~~~~~~~~#~~~~~#~~~####", + "#www#~~~~~########~~~~~~~~#~~~~~#~~~####", + "#www###.###wwww#~~~~~~#~~~#~###~#~~~####", + "#wwwwwwwwwwwwww#~~~~~~#~~~#~###~#~~~####", + "#wwwwwwwwwwwwww#~~~~~~#~~~#~~~~~#~~~####", + "#wwwwwwwwwwwwww#~~~~~~#~~~#~~~~~#~~~####", + "######wwwwwwwww##.##.##~~~###.###~~~####", + "######wwwwwwwwwwww#~~~~~~~###~~~~~~~####", + "######wwwwwwwwwwww##~~~~~####~~~~~~~####", + "########################################" + ], + "elevation": [ + "0000000000000000000000000000000000000000", + "0033333333333333003333300000000000033330", + "0033333333333333033333333000000033333330", + "0033333333333333033000033333000000033330", + "0033333300000300033000033333000000033330", + "0033333303333333333000000003000000030330", + "0033003300333333330000000003333333333330", + "0033033300033333300000000003333333333330", + "0033333301111100444444444444444403330000", + "0000000001111100444444444444444403330000", + "0111000000000000444444444444444403330000", + "0111000000000000000000000004000403330000", + "0111030303000000003333333304000403330000", + "0111033333000000003333333304444403330000", + "0111033333000000003333333304444403330000", + "0111000300011110444444033304000403330000", + "0111111111111110444444033304000403330000", + "0111111111111110444444033304444403330000", + "0111111111111110404444033304444403330000", + "0000001111111110030000033300000003330000", + "0000001111111111110333333300033333330000", + "0000001111111111110033333000033333330000", + "0000000000000000000000000000000000000000" + ], + "points": {"mewtwo": [7, 12], "warp_0": [5, 7]}, + "warps": [{"coord": [5, 7], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_2"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "mewtwo", + "coord": [7, 12], + "hide_flag": "FLAG_HIDE_MEWTWO", + "source_event": 2, + "source_script": "CeruleanCave_B1F_EventScript_Mewtwo" }, - "tiles": [ - "########################################", - "##~~~~~~~~~~~~~~##~~~~~############~~~~#", - "##~~~~~~~~~~~~~~#~~~~~~~~#######~~~~~~~#", - "##~~~~~~~~~~~~~~#~~####~~~~~#######~~~~#", - "##~~~~~~#####.###~~####~~~~~#######~~~~#", - "##~~~~~~#~~~~~~~~~~########~#######~#~~#", - "##~~##~~##~~~~~~~~#########~~~~~~~~~~~~#", - "##~~#.~~###~~~~~~##########~~~~~~~~~~~~#", - "##~~~~~~#wwwww##~~~~~~~~~~~~~~~~#~~~####", - "#########wwwww##~~~~~~~~~~~~~~~~#~~~####", - "#www############~~~~~~~~~~~~~~~~#~~~####", - "#www##############.########~###~#~~~####", - "#www#~#~#~########~~~~~~~~#~###~#~~~####", - "#www#~~~~~########~~~~~~~~#~~~~~#~~~####", - "#www#~~~~~########~~~~~~~~#~~~~~#~~~####", - "#www###.###wwww#~~~~~~#~~~#~###~#~~~####", - "#wwwwwwwwwwwwww#~~~~~~#~~~#~###~#~~~####", - "#wwwwwwwwwwwwww#~~~~~~#~~~#~~~~~#~~~####", - "#wwwwwwwwwwwwww#~~~~~~#~~~#~~~~~#~~~####", - "######wwwwwwwww##.##.##~~~###.###~~~####", - "######wwwwwwwwwwww#~~~~~~~###~~~~~~~####", - "######wwwwwwwwwwww##~~~~~####~~~~~~~####", - "########################################" - ], - "elevation": [ - "0000000000000000000000000000000000000000", - "0033333333333333003333300000000000033330", - "0033333333333333033333333000000033333330", - "0033333333333333033000033333000000033330", - "0033333300000300033000033333000000033330", - "0033333303333333333000000003000000030330", - "0033003300333333330000000003333333333330", - "0033033300033333300000000003333333333330", - "0033333301111100444444444444444403330000", - "0000000001111100444444444444444403330000", - "0111000000000000444444444444444403330000", - "0111000000000000000000000004000403330000", - "0111030303000000003333333304000403330000", - "0111033333000000003333333304444403330000", - "0111033333000000003333333304444403330000", - "0111000300011110444444033304000403330000", - "0111111111111110444444033304000403330000", - "0111111111111110444444033304444403330000", - "0111111111111110404444033304444403330000", - "0000001111111110030000033300000003330000", - "0000001111111111110333333300033333330000", - "0000001111111111110033333000033333330000", - "0000000000000000000000000000000000000000" - ], - "points": { - "mewtwo": [7, 12], - "warp_0": [5, 7] + { + "name": "rock_smash_rock", + "coord": [37, 1], + "hide_flag": "FLAG_TEMP_12", + "source_event": 3, + "source_script": "EventScript_RockSmash" }, - "warps": [ - {"coord": [5, 7], "enter": "step_on", "to_map": "CeruleanCave_1F", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "mewtwo", "coord": [7, 12], "hide_flag": "FLAG_HIDE_MEWTWO"}, - {"name": "rock_smash_rock", "coord": [37, 1], "hide_flag": "FLAG_TEMP_12"}, - {"name": "rock_smash_rock", "coord": [38, 2], "hide_flag": "FLAG_TEMP_13"}, - {"name": "rock_smash_rock", "coord": [35, 1], "hide_flag": "FLAG_TEMP_14"}, - {"name": "rock_smash_rock", "coord": [37, 4], "hide_flag": "FLAG_TEMP_15"}, - {"name": "rock_smash_rock", "coord": [35, 5], "hide_flag": "FLAG_TEMP_16"}, - {"name": "rock_smash_rock", "coord": [2, 2], "hide_flag": "FLAG_TEMP_17"}, - {"name": "rock_smash_rock", "coord": [4, 1], "hide_flag": "FLAG_TEMP_18"}, - {"name": "rock_smash_rock", "coord": [6, 1], "hide_flag": "FLAG_TEMP_19"}, - {"name": "rock_smash_rock", "coord": [3, 4], "hide_flag": "FLAG_TEMP_1A"} - ], - "items": [ - {"name": "item_ball", "coord": [31, 9], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_ULTRA_BALL"}, - {"name": "item_ball", "coord": [32, 2], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_MAX_REVIVE"} - ] + { + "name": "rock_smash_rock", + "coord": [38, 2], + "hide_flag": "FLAG_TEMP_13", + "source_event": 4, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [35, 1], + "hide_flag": "FLAG_TEMP_14", + "source_event": 5, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [37, 4], + "hide_flag": "FLAG_TEMP_15", + "source_event": 6, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [35, 5], + "hide_flag": "FLAG_TEMP_16", + "source_event": 7, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [2, 2], + "hide_flag": "FLAG_TEMP_17", + "source_event": 8, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [4, 1], + "hide_flag": "FLAG_TEMP_18", + "source_event": 9, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [6, 1], + "hide_flag": "FLAG_TEMP_19", + "source_event": 10, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [3, 4], + "hide_flag": "FLAG_TEMP_1A", + "source_event": 11, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [31, 9], + "source_event": 0, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_ULTRA_BALL", + "source_script": "CeruleanCave_B1F_EventScript_ItemUltraBall", + "item": "ultra_ball" + }, + { + "name": "item_ball", + "coord": [32, 2], + "source_event": 1, + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_MAX_REVIVE", + "source_script": "CeruleanCave_B1F_EventScript_ItemMaxRevive", + "item": "max_revive" + } + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCity.json b/data/games/frlg/maps/runtime/CeruleanCity.json index de7d4f3..0e90360 100644 --- a/data/games/frlg/maps/runtime/CeruleanCity.json +++ b/data/games/frlg/maps/runtime/CeruleanCity.json @@ -1,138 +1,208 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity", - "source": { - "decomp_file": "data/maps/CeruleanCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity", + "source": { + "decomp_file": "data/maps/CeruleanCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "################wwwww#...#...#wwwwwwwwwwwwwwwwww", + "################wwwww#...#vvv#wwwwwwwwwwwwwwwwww", + "####wwwwwwwwwwwwwwwww#...#...#wwwwwwwwwwwwwwwwww", + "####wwwwwwwwwwwwwwwww#...#...#wwwwwwwwwwwwwwwwww", + "####wwwwwwwwwwwwwwwww#...#...###################", + "####www###############...#...#.........#########", + "####www#.............#...#...#.........#########", + "####www#.............#...#...#.........#########", + "####www##...##########.......#...##...##########", + "####www###############......#######...##########", + "####www###############......#######...##########", + "####www###D######D####......##D####......#######", + "#.##www#..........................#......#######", + "....www#..........................#......#######", + "....www#..........................#......#######", + "....www#.....#######..............#......#######", + "wwwwwww#...vv############.........#......#......", + "wwwwwww#.....##D#########.........#......#######", + "wwwwwww#............#####vvv#######.............", + "########............SSD##...#######.............", + "............................#######vvv#..#######", + "...........................S..#D#.....#..#......", + "......................................#..#######", + "#######...............................#..#######", + "#######.....####......................#..#######", + "#######....#####....S.................#..#######", + "#######....#####.....###############..#..#######", + "#######....#####.....###############..#..#######", + "#######....S#..#.....##D###SSD######..#..#######", + "#######...............................#..#######", + "#######...............................#..#######", + "#######...............................#..#######", + "###################S######.############..#######", + "#######..................................#######", + "#######..................................#######", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#........#....###############" + ], + "elevation": [ + "000000000000000011111033303330100000000000000000", + "000000000000000011111033300000100000000000000000", + "000011111111111111111033303330100000000000000000", + "000011111111111111111033303330111111111111111111", + "000011111111111111111033303330000000000000000000", + "000011100000000000000033303330333333333000000000", + "000011103333333333333033303330333333333000000000", + "000011103333333333333033303330333333333000000000", + "000011100333000000000033333330333003330000000000", + "000011100000000000000033333300000003330000000000", + "000011100000000000000033333300000003330000000000", + "000011100000000000000033333300000003333330000000", + "030011103333333333333333333333333303333330000000", + "333311103333333333333333333333333303333330000000", + "333311103333333333333333333333333303333330000000", + "333311103333300000003333333333333303333330000000", + "111111103330000000000000033333333303333330333333", + "111111103333300000000000033333333303333330000000", + "111111103333333333330000000000000003333333333333", + "000000003333333333330000033300000003333333333333", + "333333333333333333333333333300000000000330000000", + "333333333333333333333333333033000333330330333333", + "333333333333333333333333333333333333330330000000", + "000000033333333333333333333333333333330330000000", + "000000033333000033333333333333333333330330000000", + "000000033330000033330333333333333333330330000000", + "000000033330000033333000000000000000330330000000", + "000000033330000033333000000000000000330330000000", + "000000033330033033333000000000000000330330000000", + "000000033333333333333333333333333333330330000000", + "000000033333333333333333333333333333330330000000", + "000000033333333333333333333333333333330330000000", + "000000000000000000000000003000000000000330000000", + "000000033333333333333333333333333333333330000000", + "000000033333333333333333333333333333333330000000", + "000000000000000333303333333303333000000000000000", + "000000000000000333300000000003333000000000000000", + "000000000000000333303333333303333000000000000000", + "000000000000000333303333333303333000000000000000", + "000000000000000333303333333303333000000000000000" + ], + "points": { + "warp_0": [10, 11], + "warp_1": [30, 11], + "warp_2": [15, 17], + "warp_3": [22, 19], + "warp_4": [31, 21], + "warp_5": [13, 28], + "warp_6": [29, 28], + "warp_7": [1, 12], + "warp_8": [10, 8], + "warp_9": [31, 8], + "warp_12": [23, 28], + "warp_13": [17, 11] + }, + "warps": [ + {"coord": [10, 11], "enter": "walk_into", "to_map": "CeruleanCity_House1", "to_point": "warp_1"}, + {"coord": [30, 11], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_1"}, + {"coord": [15, 17], "enter": "walk_into", "to_map": "CeruleanCity_House3", "to_point": "warp_1"}, + {"coord": [22, 19], "enter": "walk_into", "to_map": "CeruleanCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [31, 21], "enter": "walk_into", "to_map": "CeruleanCity_Gym", "to_point": "warp_1"}, + {"coord": [13, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, + {"coord": [29, 28], "enter": "walk_into", "to_map": "CeruleanCity_Mart", "to_point": "warp_1"}, + {"coord": [1, 12], "enter": "cave_entrance", "to_map": "CeruleanCave_1F", "to_point": "warp_0"}, + {"coord": [10, 8], "enter": "walk_south", "to_map": "CeruleanCity_House1", "to_point": "warp_3"}, + {"coord": [31, 8], "enter": "walk_south", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, + {"coord": [31, 9], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, + {"coord": [14, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, + {"coord": [23, 28], "enter": "walk_into", "to_map": "CeruleanCity_House4", "to_point": "warp_0"}, + {"coord": [17, 11], "enter": "walk_into", "to_map": "CeruleanCity_House5", "to_point": "warp_0"} + ], + "flag_sets": { + "after_hall_of_fame": ["FLAG_HIDE_CERULEAN_CAVE_GUARD", "FLAG_HIDE_CERULEAN_RIVAL", "FLAG_HIDE_CERULEAN_ROCKET"] + }, + "connections": [ + {"side": "north", "to_map": "Route24", "offset": 12}, + {"side": "south", "to_map": "Route5", "offset": 0}, + {"side": "west", "to_map": "Route4", "offset": 10}, + {"side": "east", "to_map": "Route9", "offset": 10} + ], + "npcs": [ + { + "name": "policeman", + "coord": [31, 12], + "source_event": 0, + "source_script": "CeruleanCity_EventScript_Policeman", + "source_local_id": "LOCALID_CERULEAN_POLICEMAN" }, - "tiles": [ - "################wwwww#...#...#wwwwwwwwwwwwwwwwww", - "################wwwww#...#vvv#wwwwwwwwwwwwwwwwww", - "####wwwwwwwwwwwwwwwww#...#...#wwwwwwwwwwwwwwwwww", - "####wwwwwwwwwwwwwwwww#...#...#wwwwwwwwwwwwwwwwww", - "####wwwwwwwwwwwwwwwww#...#...###################", - "####www###############...#...#.........#########", - "####www#.............#...#...#.........#########", - "####www#.............#...#...#.........#########", - "####www##...##########.......#...##...##########", - "####www###############......#######...##########", - "####www###############......#######...##########", - "####www###D######D####......##D####......#######", - "#.##www#..........................#......#######", - "....www#..........................#......#######", - "....www#..........................#......#######", - "....www#.....#######..............#......#######", - "wwwwwww#...vv############.........#......#......", - "wwwwwww#.....##D#########.........#......#######", - "wwwwwww#............#####vvv#######.............", - "########............SSD##...#######.............", - "............................#######vvv#..#######", - "...........................S..#D#.....#..#......", - "......................................#..#######", - "#######...............................#..#######", - "#######.....####......................#..#######", - "#######....#####....S.................#..#######", - "#######....#####.....###############..#..#######", - "#######....#####.....###############..#..#######", - "#######....S#..#.....##D###SSD######..#..#######", - "#######...............................#..#######", - "#######...............................#..#######", - "#######...............................#..#######", - "###################S######.############..#######", - "#######..................................#######", - "#######..................................#######", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#........#....###############" - ], - "elevation": [ - "000000000000000011111033303330100000000000000000", - "000000000000000011111033300000100000000000000000", - "000011111111111111111033303330100000000000000000", - "000011111111111111111033303330111111111111111111", - "000011111111111111111033303330000000000000000000", - "000011100000000000000033303330333333333000000000", - "000011103333333333333033303330333333333000000000", - "000011103333333333333033303330333333333000000000", - "000011100333000000000033333330333003330000000000", - "000011100000000000000033333300000003330000000000", - "000011100000000000000033333300000003330000000000", - "000011100000000000000033333300000003333330000000", - "030011103333333333333333333333333303333330000000", - "333311103333333333333333333333333303333330000000", - "333311103333333333333333333333333303333330000000", - "333311103333300000003333333333333303333330000000", - "111111103330000000000000033333333303333330333333", - "111111103333300000000000033333333303333330000000", - "111111103333333333330000000000000003333333333333", - "000000003333333333330000033300000003333333333333", - "333333333333333333333333333300000000000330000000", - "333333333333333333333333333033000333330330333333", - "333333333333333333333333333333333333330330000000", - "000000033333333333333333333333333333330330000000", - "000000033333000033333333333333333333330330000000", - "000000033330000033330333333333333333330330000000", - "000000033330000033333000000000000000330330000000", - "000000033330000033333000000000000000330330000000", - "000000033330033033333000000000000000330330000000", - "000000033333333333333333333333333333330330000000", - "000000033333333333333333333333333333330330000000", - "000000033333333333333333333333333333330330000000", - "000000000000000000000000003000000000000330000000", - "000000033333333333333333333333333333333330000000", - "000000033333333333333333333333333333333330000000", - "000000000000000333303333333303333000000000000000", - "000000000000000333300000000003333000000000000000", - "000000000000000333303333333303333000000000000000", - "000000000000000333303333333303333000000000000000", - "000000000000000333303333333303333000000000000000" - ], - "points": { - "warp_1": [30, 11], - "warp_3": [22, 19], - "warp_4": [31, 21], - "warp_5": [13, 28], - "warp_6": [29, 28], - "warp_7": [1, 12], - "warp_9": [31, 8] + { + "name": "rocket_m", + "coord": [33, 6], + "hide_flag": "FLAG_HIDE_CERULEAN_ROCKET", + "source_event": 1, + "source_script": "CeruleanCity_EventScript_Grunt", + "source_local_id": "LOCALID_CERULEAN_GRUNT" }, - "warps": [ - {"coord": [10, 11], "enter": "walk_into"}, - {"coord": [30, 11], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_1"}, - {"coord": [15, 17], "enter": "walk_into"}, - {"coord": [22, 19], "enter": "walk_into", "to_map": "CeruleanCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [31, 21], "enter": "walk_into", "to_map": "CeruleanCity_Gym", "to_point": "warp_1"}, - {"coord": [13, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, - {"coord": [29, 28], "enter": "walk_into", "to_map": "CeruleanCity_Mart", "to_point": "warp_1"}, - {"coord": [1, 12], "enter": "cave_entrance", "to_map": "CeruleanCave_1F", "to_point": "warp_0"}, - {"coord": [10, 8], "enter": "walk_south"}, - {"coord": [31, 8], "enter": "walk_south", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, - {"coord": [31, 9], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, - {"coord": [14, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, - {"coord": [23, 28], "enter": "walk_into"}, - {"coord": [17, 11], "enter": "walk_into"} - ], - "flag_sets": {"after_hall_of_fame": ["FLAG_HIDE_CERULEAN_CAVE_GUARD", "FLAG_HIDE_CERULEAN_RIVAL", "FLAG_HIDE_CERULEAN_ROCKET"]}, - "connections": [ - {"side": "north", "to_map": "Route24", "offset": 12}, - {"side": "south", "to_map": "Route5", "offset": 0}, - {"side": "west", "to_map": "Route4", "offset": 10}, - {"side": "east", "to_map": "Route9", "offset": 10} - ], - "npcs": [ - {"name": "policeman", "coord": [31, 12]}, - {"name": "rocket_m", "coord": [33, 6], "hide_flag": "FLAG_HIDE_CERULEAN_ROCKET"}, - {"name": "little_boy", "coord": [16, 21], "wander": {"min": [16, 18], "max": [16, 24]}}, - {"name": "balding_man", "coord": [9, 23], "wander": {"min": [8, 22], "max": [10, 24]}}, - {"name": "slowbro", "coord": [32, 29]}, - {"name": "lass", "coord": [33, 29]}, - {"name": "youngster", "coord": [34, 22]}, - {"name": "blue", "coord": [22, 0], "hide_flag": "FLAG_HIDE_CERULEAN_RIVAL"}, - {"name": "cut_tree", "coord": [26, 32], "hide_flag": "FLAG_TEMP_13"}, - {"name": "woman_1", "coord": [12, 30]}, - {"name": "cooltrainer_m", "coord": [1, 13], "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_GUARD"} - ] + { + "name": "little_boy", + "coord": [16, 21], + "wander": {"min": [16, 18], "max": [16, 24]}, + "source_event": 2, + "source_script": "CeruleanCity_EventScript_LittleBoy" + }, + { + "name": "balding_man", + "coord": [9, 23], + "wander": {"min": [8, 22], "max": [10, 24]}, + "source_event": 3, + "source_script": "CeruleanCity_EventScript_BaldingMan" + }, + { + "name": "slowbro", + "coord": [32, 29], + "source_event": 4, + "source_script": "CeruleanCity_EventScript_Slowbro", + "source_local_id": "LOCALID_CERULEAN_SLOWBRO" + }, + { + "name": "lass", + "coord": [33, 29], + "source_event": 5, + "source_script": "CeruleanCity_EventScript_Lass", + "source_local_id": "LOCALID_CERULEAN_LASS" + }, + {"name": "youngster", "coord": [34, 22], "source_event": 6, "source_script": "CeruleanCity_EventScript_Youngster"}, + { + "name": "blue", + "coord": [22, 0], + "hide_flag": "FLAG_HIDE_CERULEAN_RIVAL", + "source_event": 7, + "source_script": "0x0", + "source_local_id": "LOCALID_CERULEAN_RIVAL" + }, + { + "name": "cut_tree", + "coord": [26, 32], + "hide_flag": "FLAG_TEMP_13", + "source_event": 8, + "source_script": "EventScript_CutTree" + }, + { + "name": "woman_1", + "coord": [12, 30], + "source_event": 10, + "source_script": "CeruleanCity_EventScript_Woman", + "source_local_id": "LOCALID_CERULEAN_WOMAN" + }, + { + "name": "cooltrainer_m", + "coord": [1, 13], + "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_GUARD", + "source_event": 11, + "source_script": "CeruleanCity_EventScript_CeruleanCaveGuard", + "source_local_id": "LOCALID_CERULEAN_CAVE_GUARD" + } + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCity_BikeShop.json b/data/games/frlg/maps/runtime/CeruleanCity_BikeShop.json index fda9ebd..0d4d239 100644 --- a/data/games/frlg/maps/runtime/CeruleanCity_BikeShop.json +++ b/data/games/frlg/maps/runtime/CeruleanCity_BikeShop.json @@ -1,37 +1,42 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_BikeShop", - "source": { - "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_BikeShop", + "source": { + "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + ".####...#..", + "..#.##..#..", + ".#..#...###", + "..#.#.....#", + "........#..", + "..#........", + "..#......#.", + "###########" + ], + "points": {"warp_1": [5, 8]}, + "warps": [ + {"coord": [4, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"}, + {"coord": [5, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_5"}, + {"coord": [6, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "man", "coord": [9, 3], "source_event": 0, "source_script": "CeruleanCity_BikeShop_EventScript_Clerk"}, + { + "name": "youngster", + "coord": [9, 7], + "wander": {"min": [8, 6], "max": [10, 8]}, + "source_event": 1, + "source_script": "CeruleanCity_BikeShop_EventScript_Youngster" }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - ".####...#..", - "..#.##..#..", - ".#..#...###", - "..#.#.....#", - "........#..", - "..#........", - "..#......#.", - "###########" - ], - "points": { - "warp_1": [5, 8] - }, - "warps": [ - {"coord": [4, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"}, - {"coord": [5, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_5"}, - {"coord": [6, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "man", "coord": [9, 3]}, - {"name": "youngster", "coord": [9, 7], "wander": {"min": [8, 6], "max": [10, 8]}}, - {"name": "woman_2", "coord": [5, 5]} - ] + {"name": "woman_2", "coord": [5, 5], "source_event": 2, "source_script": "CeruleanCity_BikeShop_EventScript_Woman"} + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCity_Gym.json b/data/games/frlg/maps/runtime/CeruleanCity_Gym.json index a1b7501..1c1b64e 100644 --- a/data/games/frlg/maps/runtime/CeruleanCity_Gym.json +++ b/data/games/frlg/maps/runtime/CeruleanCity_Gym.json @@ -1,71 +1,82 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_Gym", - "source": { - "decomp_file": "data/maps/CeruleanCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_Gym", + "source": { + "decomp_file": "data/maps/CeruleanCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#################", + "#####w#w.w#w#####", + "#################", + "#...............#", + "#......www......#", + "#.wwwwwwwwwwwww.#", + "#.wwwww...wwwww.#", + "#.ww.........ww.#", + "#.wwwww...ww.ww.#", + "#.wwwwwwwwww.ww.#", + "#.ww.........ww.#", + "#.ww.wwww.wwwww.#", + "#.ww.wwww.wwwww.#", + "#.ww......wwwww.#", + "#.wwwwwww.wwwww.#", + "#.wwwwwww.wwwww.#", + "#.wwww.....wwww.#", + "#.wwwwS...Swwww.#", + "#...............#", + "#################" + ], + "elevation": [ + "00000000000000000", + "00000000000000000", + "00000000000000000", + "03333333333333330", + "03333331113333330", + "03111111111111130", + "03111113331111130", + "03113333333331130", + "03111113331131130", + "03111111111131130", + "03113333333331130", + "03113111131111130", + "03113111130111130", + "03113333331111130", + "03111111131111130", + "03111111131111130", + "03111133333111130", + "03111103330111130", + "03333333333333330", + "00000000000000000" + ], + "points": {"misty_front": [8, 7], "warp_1": [8, 18]}, + "warps": [ + {"coord": [7, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"}, + {"coord": [8, 18], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_4"}, + {"coord": [9, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "swimmer_m_water", + "coord": [10, 12], + "facing": "west", + "trainer": {"sight": 1}, + "source_event": 0, + "source_script": "CeruleanCity_Gym_EventScript_Luis" }, - "allow_running": false, - "tiles": [ - "#################", - "#####w#w.w#w#####", - "#################", - "#...............#", - "#......www......#", - "#.wwwwwwwwwwwww.#", - "#.wwwww...wwwww.#", - "#.ww.........ww.#", - "#.wwwww...ww.ww.#", - "#.wwwwwwwwww.ww.#", - "#.ww.........ww.#", - "#.ww.wwww.wwwww.#", - "#.ww.wwww.wwwww.#", - "#.ww......wwwww.#", - "#.wwwwwww.wwwww.#", - "#.wwwwwww.wwwww.#", - "#.wwww.....wwww.#", - "#.wwwwS...Swwww.#", - "#...............#", - "#################" - ], - "elevation": [ - "00000000000000000", - "00000000000000000", - "00000000000000000", - "03333333333333330", - "03333331113333330", - "03111111111111130", - "03111113331111130", - "03113333333331130", - "03111113331131130", - "03111111111131130", - "03113333333331130", - "03113111131111130", - "03113111130111130", - "03113333331111130", - "03111111131111130", - "03111111131111130", - "03111133333111130", - "03111103330111130", - "03333333333333330", - "00000000000000000" - ], - "points": { - "misty_front": [8, 7], - "warp_1": [8, 18] + { + "name": "picnicker", + "coord": [4, 7], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "CeruleanCity_Gym_EventScript_Diana" }, - "warps": [ - {"coord": [7, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"}, - {"coord": [8, 18], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_4"}, - {"coord": [9, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "swimmer_m_water", "coord": [10, 12], "facing": "west", "trainer": {"sight": 1}}, - {"name": "picnicker", "coord": [4, 7], "facing": "east", "trainer": {"sight": 4}}, - {"name": "misty", "coord": [8, 6]}, - {"name": "gym_guy", "coord": [7, 16]} - ] + {"name": "misty", "coord": [8, 6], "source_event": 2, "source_script": "CeruleanCity_Gym_EventScript_Misty"}, + {"name": "gym_guy", "coord": [7, 16], "source_event": 3, "source_script": "CeruleanCity_Gym_EventScript_GymGuy"} + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCity_House2.json b/data/games/frlg/maps/runtime/CeruleanCity_House2.json index a7741c5..43b29c9 100644 --- a/data/games/frlg/maps/runtime/CeruleanCity_House2.json +++ b/data/games/frlg/maps/runtime/CeruleanCity_House2.json @@ -1,37 +1,41 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_House2", - "source": { - "decomp_file": "data/maps/CeruleanCity_House2/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "##########", - "####.#####", - "........##", - ".........#", - "...##.....", - "...##.....", - "..........", - "#.......##", - "##########" - ], - "points": { - "warp_1": [3, 7], - "warp_3": [4, 1] - }, - "warps": [ - {"coord": [2, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, - {"coord": [3, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_1"}, - {"coord": [4, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, - {"coord": [4, 1], "enter": "cave_entrance", "to_map": "CeruleanCity", "to_point": "warp_9"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "hiker", "coord": [1, 2]}, - {"name": "lass", "coord": [7, 6], "wander": {"min": [6, 5], "max": [8, 7]}} - ] + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_House2", + "source": { + "decomp_file": "data/maps/CeruleanCity_House2/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "##########", + "####.#####", + "........##", + ".........#", + "...##.....", + "...##.....", + "..........", + "#.......##", + "##########" + ], + "points": {"warp_1": [3, 7], "warp_3": [4, 1]}, + "warps": [ + {"coord": [2, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, + {"coord": [3, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_1"}, + {"coord": [4, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, + {"coord": [4, 1], "enter": "cave_entrance", "to_map": "CeruleanCity", "to_point": "warp_9"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "hiker", "coord": [1, 2], "source_event": 0, "source_script": "CeruleanCity_House2_EventScript_Hiker"}, + { + "name": "lass", + "coord": [7, 6], + "wander": {"min": [6, 5], "max": [8, 7]}, + "source_event": 1, + "source_script": "CeruleanCity_House2_EventScript_Lass" + } + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCity_Mart.json b/data/games/frlg/maps/runtime/CeruleanCity_Mart.json index 23b98a5..66b432d 100644 --- a/data/games/frlg/maps/runtime/CeruleanCity_Mart.json +++ b/data/games/frlg/maps/runtime/CeruleanCity_Mart.json @@ -1,48 +1,46 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_Mart", - "source": { - "decomp_file": "data/maps/CeruleanCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_Mart", + "source": { + "decomp_file": "data/maps/CeruleanCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"clerk_front": [4, 3], "warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_6"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "CeruleanCity_Mart_EventScript_Clerk"}, + { + "name": "woman_1", + "coord": [9, 2], + "wander": {"min": [5, 2], "max": [10, 2]}, + "source_event": 1, + "source_script": "CeruleanCity_Mart_EventScript_Woman" }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "elevation": [ - "00000000000", - "00000000000", - "00303333330", - "33003333333", - "00003330030", - "33333330030", - "30033330030", - "33333333333", - "00000000000" - ], - "points": { - "clerk_front": [4, 3], - "warp_1": [4, 7] - }, - "warps": [ - {"coord": [3, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"}, - {"coord": [4, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_6"}, - {"coord": [5, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "clerk", "coord": [2, 3]}, - {"name": "woman_1", "coord": [9, 2], "wander": {"min": [5, 2], "max": [10, 2]}}, - {"name": "youngster", "coord": [1, 7]} - ] + { + "name": "youngster", + "coord": [1, 7], + "source_event": 2, + "source_script": "CeruleanCity_Mart_EventScript_Youngster" + } + ] } diff --git a/data/games/frlg/maps/runtime/CeruleanCity_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/CeruleanCity_PokemonCenter_1F.json index 2c7d076..3947a92 100644 --- a/data/games/frlg/maps/runtime/CeruleanCity_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/CeruleanCity_PokemonCenter_1F.json @@ -1,56 +1,92 @@ { - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_PokemonCenter_1F", - "source": { - "decomp_file": "data/maps/CeruleanCity_PokemonCenter_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "CeruleanCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/CeruleanCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"pc": [11, 2], "nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_3"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_3"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_3"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "CeruleanCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_CERULEAN_NURSE" }, - "allow_running": false, - "tiles": [ - "#.#############", - "###############", - "....###..##....", - "....#######....", - "...............", - "...............", - "#..........##..", - "...........##..", - "...............", - "###############" - ], - "elevation": [ - "030000000000000", - "000000000000000", - "333300033003333", - "333300000003333", - "333333333333333", - "330333333333333", - "044033333330033", - "330333333330033", - "333333333333333", - "000000000000000" - ], - "points": { - "pc": [11, 2], - "nurse_front": [7, 4], - "warp_1": [7, 8] + { + "name": "gentleman", + "coord": [12, 5], + "source_event": 1, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Gentleman" }, - "warps": [ - {"coord": [6, 8], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_3"}, - {"coord": [7, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_3"}, - {"coord": [8, 8], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_3"}, - {"coord": [1, 6], "enter": "step_on"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "nurse", "coord": [7, 2]}, - {"name": "gentleman", "coord": [12, 5]}, - {"name": "rocker", "coord": [5, 4], "wander": {"min": [4, 4], "max": [6, 4]}}, - {"name": "youngster", "coord": [4, 8], "wander": {"min": [3, 8], "max": [5, 8]}}, - {"name": "lass", "coord": [3, 3]}, - {"name": "0", "coord": [2, 1], "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS"}, - {"name": "0", "coord": [3, 1], "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS"} - ] + { + "name": "rocker", + "coord": [5, 4], + "wander": {"min": [4, 4], "max": [6, 4]}, + "source_event": 2, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Rocker" + }, + { + "name": "youngster", + "coord": [4, 8], + "wander": {"min": [3, 8], "max": [5, 8]}, + "source_event": 3, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "lass", + "coord": [3, 3], + "source_event": 4, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_Lass" + }, + { + "name": "0", + "coord": [2, 1], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 5, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_PokemonJournalMisty" + }, + { + "name": "0", + "coord": [3, 1], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 6, + "source_script": "CeruleanCity_PokemonCenter_1F_EventScript_PokemonJournalMisty" + } + ] } diff --git a/data/games/frlg/maps/runtime/CinnabarIsland.json b/data/games/frlg/maps/runtime/CinnabarIsland.json index af261e1..6be839f 100644 --- a/data/games/frlg/maps/runtime/CinnabarIsland.json +++ b/data/games/frlg/maps/runtime/CinnabarIsland.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/CinnabarIsland/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "wwwww#######....w##wwwww", @@ -29,6 +28,28 @@ "wwwwwwwwwwwwwwwwwwwwwwww", "wwwwwwwwwwwwwwwwwwwwwwww" ], + "elevation": [ + "001110000000333310011110", + "001110000000333330000001", + "001110000000333330000001", + "001110003000033330000001", + "100113333333333333300001", + "100113333333333333333300", + "100113333333333333333330", + "100110000000333333333331", + "001110000000000003333331", + "001110000000000000000331", + "001113333333000000000331", + "001113333333000000000331", + "100111113333333333333331", + "100111113333333333333331", + "100111113333333333333331", + "000111111111111111111111", + "010011111111111111111111", + "010000001111110000001111", + "001100000000000000000000", + "000000110000001000010000" + ], "points": {"warp_0": [8, 3], "warp_1": [20, 4], "warp_2": [8, 9], "warp_3": [14, 11], "warp_4": [19, 11]}, "warps": [ {"coord": [8, 3], "enter": "cave_entrance", "to_map": "PokemonMansion_1F", "to_point": "warp_1"}, diff --git a/data/games/frlg/maps/runtime/FuchsiaCity.json b/data/games/frlg/maps/runtime/FuchsiaCity.json index b971c35..db091d9 100644 --- a/data/games/frlg/maps/runtime/FuchsiaCity.json +++ b/data/games/frlg/maps/runtime/FuchsiaCity.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/FuchsiaCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + "date": "2026-10-31" }, "tiles": [ "################################################", @@ -49,6 +48,48 @@ "###################..........###################", "###################..........###################" ], + "elevation": [ + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "003333333333333333333300000033333333333333333300", + "003333333333333333333333333333333333333333333300", + "003330000000000000033003330003300000000000003300", + "003330111110033333033333333333303333003333303300", + "003330111110033333033333333333303333003333303300", + "003330000000000000033330000000300000000000003300", + "003333333333333333333303333333333333333333333300", + "003333333333333333333303333333333333333333333300", + "003333333000000000000303330000003000000000333300", + "003333333000033333333333330000003033333330333300", + "003333333000033333333333300000003033333330333300", + "003333333333333333333333300000003000000000333300", + "000000003333333333333333303333333333333333333300", + "333333300000000000333333300333003333333333333300", + "333333300111111103333333303333330000000000000000", + "333333300111111103333333303333333333333333333333", + "003333300111111103333333303333333333333333333333", + "003333300000000000000000303333333333333333333333", + "003333333333333333333333333333300000000000033333", + "003333333333333333333333333333303331111111033300", + "003333333333333333333333333333303331111111033000", + "003300000000000000000000000003303333333333033000", + "003300000000000000000000000003303333333333033000", + "003300000000000000000000000003303333303330033000", + "003300000000000000000000000003300000000000033000", + "003303000000000000000000000003330000000000333000", + "003303000000000000000000000003300000000000333000", + "003300330003333333333333333303333333333333333000", + "003303333333333333333333333303300000333000033000", + "003303333333333333333333333303333333333333333000", + "003300000333000000033300000000333333333333333000", + "003333333333000000033333333330000000000000000000", + "003333333333000000033333333330000000333333333300", + "000000000000000000033333333330000000000000000000", + "000000000000000000033333333330000000000000000000" + ], "points": { "warp_0": [24, 5], "warp_1": [33, 31], diff --git a/data/games/frlg/maps/runtime/LavenderTown.json b/data/games/frlg/maps/runtime/LavenderTown.json index 468050a..099006c 100644 --- a/data/games/frlg/maps/runtime/LavenderTown.json +++ b/data/games/frlg/maps/runtime/LavenderTown.json @@ -1,49 +1,65 @@ { - "format": "pokesim-runtime-map/2", - "name": "LavenderTown", - "source": { - "decomp_file": "data/maps/LavenderTown/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "LavenderTown", + "source": { + "decomp_file": "data/maps/LavenderTown/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########.....###########", + "########.....###########", + "#########....###########", + "#########....###########", + "#########...S###########", + "#...SSD##....###########", + "#............#####.#####", + "#....................S##", + "#.....................##", + "........#####.........##", + "........#####.........##", + ".......S##D##..S......##", + "#.....................##", + "#.................######", + "#..##########.....######", + "#..##########.....SSD###", + "#..##D####D##.........##", + "#.....................##", + "#.....................##", + "###########..###########" + ], + "points": { + "warp_0": [18, 6], + "warp_1": [6, 5], + "warp_2": [10, 11], + "warp_3": [5, 16], + "warp_4": [10, 16], + "warp_5": [20, 15] + }, + "warps": [ + {"coord": [18, 6], "enter": "cave_entrance", "to_map": "PokemonTower_1F", "to_point": "warp_1"}, + {"coord": [6, 5], "enter": "walk_into", "to_map": "LavenderTown_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [10, 11], "enter": "walk_into", "to_map": "LavenderTown_VolunteerPokemonHouse", "to_point": "warp_1"}, + {"coord": [5, 16], "enter": "walk_into", "to_map": "LavenderTown_House1", "to_point": "warp_1"}, + {"coord": [10, 16], "enter": "walk_into", "to_map": "LavenderTown_House2", "to_point": "warp_1"}, + {"coord": [20, 15], "enter": "walk_into", "to_map": "LavenderTown_Mart", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route10", "offset": 0}, + {"side": "south", "to_map": "Route12", "offset": 0}, + {"side": "west", "to_map": "Route8", "offset": 0} + ], + "npcs": [ + { + "name": "little_girl", + "coord": [19, 10], + "wander": {"min": [17, 9], "max": [21, 11]}, + "source_event": 0, + "source_script": "LavenderTown_EventScript_LittleGirl" }, - "tiles": [ - "########.....###########", - "########.....###########", - "#########....###########", - "#########....###########", - "#########...S###########", - "#...SSD##....###########", - "#............#####.#####", - "#....................S##", - "#.....................##", - "........#####.........##", - "........#####.........##", - ".......S##D##..S......##", - "#.....................##", - "#.................######", - "#..##########.....######", - "#..##########.....SSD###", - "#..##D####D##.........##", - "#.....................##", - "#.....................##", - "###########..###########" - ], - "points": { - "warp_1": [6, 5] - }, - "warps": [ - {"coord": [18, 6], "enter": "cave_entrance"}, - {"coord": [6, 5], "enter": "walk_into", "to_map": "LavenderTown_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [10, 11], "enter": "walk_into"}, - {"coord": [5, 16], "enter": "walk_into"}, - {"coord": [10, 16], "enter": "walk_into"}, - {"coord": [20, 15], "enter": "walk_into"} - ], - "flag_sets": {}, - "connections": [{"side": "north", "to_map": "Route10", "offset": 0}], - "npcs": [ - {"name": "little_girl", "coord": [19, 10], "wander": {"min": [17, 9], "max": [21, 11]}}, - {"name": "worker_m", "coord": [12, 12]}, - {"name": "boy", "coord": [10, 7]} - ] + {"name": "worker_m", "coord": [12, 12], "source_event": 1, "source_script": "LavenderTown_EventScript_WorkerM"}, + {"name": "boy", "coord": [10, 7], "source_event": 2, "source_script": "LavenderTown_EventScript_Boy"} + ] } diff --git a/data/games/frlg/maps/runtime/LavenderTown_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/LavenderTown_PokemonCenter_1F.json index 2a706e3..f8b771b 100644 --- a/data/games/frlg/maps/runtime/LavenderTown_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/LavenderTown_PokemonCenter_1F.json @@ -1,52 +1,79 @@ { - "format": "pokesim-runtime-map/2", - "name": "LavenderTown_PokemonCenter_1F", - "source": { - "decomp_file": "data/maps/LavenderTown_PokemonCenter_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "LavenderTown_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/LavenderTown_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_1"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "LavenderTown", "to_point": "warp_1"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_1"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "LavenderTown_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_LAVENDER_NURSE" }, - "allow_running": false, - "tiles": [ - "#.#############", - "###############", - "....###..##....", - "....#######....", - "...............", - "...............", - "#..........##..", - "...........##..", - "...............", - "###############" - ], - "elevation": [ - "030000000000000", - "000000000000000", - "333300033003333", - "333300000003333", - "333333333333333", - "330333333333333", - "044033333330033", - "330333333330033", - "333333333333333", - "000000000000000" - ], - "points": { - "warp_1": [7, 8] + { + "name": "gentleman", + "coord": [9, 4], + "source_event": 1, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Gentleman" }, - "warps": [ - {"coord": [6, 8], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_1"}, - {"coord": [7, 8], "enter": "walk_south", "to_map": "LavenderTown", "to_point": "warp_1"}, - {"coord": [8, 8], "enter": "walk_into", "to_map": "LavenderTown", "to_point": "warp_1"}, - {"coord": [1, 6], "enter": "step_on"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "nurse", "coord": [7, 2]}, - {"name": "gentleman", "coord": [9, 4]}, - {"name": "lass", "coord": [5, 6], "wander": {"min": [5, 4], "max": [5, 8]}}, - {"name": "youngster", "coord": [2, 2], "wander": {"min": [1, 1], "max": [3, 3]}}, - {"name": "balding_man", "coord": [14, 6], "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS"} - ] + { + "name": "lass", + "coord": [5, 6], + "wander": {"min": [5, 4], "max": [5, 8]}, + "source_event": 2, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Lass" + }, + { + "name": "youngster", + "coord": [2, 2], + "wander": {"min": [1, 1], "max": [3, 3]}, + "source_event": 3, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "balding_man", + "coord": [14, 6], + "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS", + "source_event": 4, + "source_script": "LavenderTown_PokemonCenter_1F_EventScript_BaldingMan" + } + ] } diff --git a/data/games/frlg/maps/runtime/MtMoon_1F.json b/data/games/frlg/maps/runtime/MtMoon_1F.json index d00decf..26204e9 100644 --- a/data/games/frlg/maps/runtime/MtMoon_1F.json +++ b/data/games/frlg/maps/runtime/MtMoon_1F.json @@ -1,88 +1,180 @@ { - "format": "pokesim-runtime-map/2", - "name": "MtMoon_1F", - "source": { - "decomp_file": "data/maps/MtMoon_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "MtMoon_1F", + "source": { + "decomp_file": "data/maps/MtMoon_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/MtMoon_1F/map.json", + "events_sha256": "312b2de23d9942d3326da9fe9597b25ef7c3537bcedfcafa7922d5c8b8e8d8fc", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" }, - "tiles": [ - "################################################", - "################################################", - "##~~~~~~~~~#########~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~#######~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~.~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~#~~~~##", - "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~####~~##", - "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~~##~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~#####~~~~~####~~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~.####~~~~~~~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~###~~~~####~~~~~~~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~###~~~~###~~~~~~~~.~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "##~~~~#################~~~~###~~~~~~~~~###~~~~##", - "##~~~~~################~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###############~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~S~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~~##~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~####~~~#####~~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~#####~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~####~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~.~####~~~~~~~~~~~~~~~~~~~~~~##", - "################################################", - "################################################" - ], - "points": { - "warp_0": [5, 6], - "warp_1": [19, 14], - "warp_2": [31, 16], - "warp_3": [18, 37] + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################################", + "################################################", + "##~~~~~~~~~#########~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~#######~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~.~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~#~~~~##", + "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~####~~##", + "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~~##~~~##", + "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~~#####~~~~~####~~~~~~~~~~~~##", + "##~~~~~~~~~~~###~~~.####~~~~~~~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~###~~~~####~~~~~~~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~###~~~~###~~~~~~~~.~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", + "##~~~~#################~~~~###~~~~~~~~~###~~~~##", + "##~~~~~################~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###############~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###~~~~~~~~S~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", + "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", + "##~~~~~~~~~~~~##~~~~##########~~~###~~~###~~~~##", + "##~~~~~~~~~~~####~~~#####~~~~~~~~###~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~#####~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~####~~~####~~~~~~~~~~~~~~~~~~~~~~##", + "##~~~~~~~~~~~####~.~####~~~~~~~~~~~~~~~~~~~~~~##", + "################################################", + "################################################" + ], + "points": {"warp_0": [5, 6], "warp_1": [19, 14], "warp_2": [31, 16], "warp_3": [18, 37]}, + "warps": [ + {"coord": [5, 6], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_0"}, + {"coord": [19, 14], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_1"}, + {"coord": [31, 16], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_2"}, + {"coord": [18, 37], "enter": "walk_south", "to_map": "Route4", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "lass", + "coord": [20, 26], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 0, + "source_script": "MtMoon_1F_EventScript_Iris" }, - "warps": [ - {"coord": [5, 6], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_0"}, - {"coord": [19, 14], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_1"}, - {"coord": [31, 16], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_2"}, - {"coord": [18, 37], "enter": "walk_south", "to_map": "Route4", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "lass", "coord": [20, 26], "facing": "south", "trainer": {"sight": 2}}, - {"name": "bug_catcher", "coord": [36, 30], "facing": "east", "trainer": {"sight": 2}}, - {"name": "scientist", "coord": [30, 35], "trainer": {"sight": 4, "looks": ["north", "east", "south", "west"]}}, - {"name": "lass", "coord": [33, 4], "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}}, - {"name": "bug_catcher", "coord": [7, 26], "facing": "south", "trainer": {"sight": 4}}, - {"name": "youngster", "coord": [13, 17], "facing": "east", "trainer": {"sight": 4}}, - { - "name": "hiker", - "coord": [7, 10], - "wander": {"min": [5, 8], "max": [9, 12]}, - "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]} - }, - {"name": "balding_man", "coord": [42, 7]} - ], - "items": [ - {"name": "item_ball", "coord": [2, 22], "hide_flag": "FLAG_HIDE_MT_MOON_1F_PARALYZE_HEAL"}, - {"name": "item_ball", "coord": [11, 35], "hide_flag": "FLAG_HIDE_MT_MOON_1F_TM09"}, - {"name": "item_ball", "coord": [26, 32], "hide_flag": "FLAG_HIDE_MT_MOON_1F_POTION"}, - {"name": "item_ball", "coord": [42, 35], "hide_flag": "FLAG_HIDE_MT_MOON_1F_RARE_CANDY"}, - {"name": "item_ball", "coord": [44, 21], "hide_flag": "FLAG_HIDE_MT_MOON_1F_ESCAPE_ROPE"}, - {"name": "item_ball", "coord": [3, 2], "hide_flag": "FLAG_HIDE_MT_MOON_1F_MOON_STONE"} - ] + { + "name": "bug_catcher", + "coord": [36, 30], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 1, + "source_script": "MtMoon_1F_EventScript_Robby" + }, + { + "name": "scientist", + "coord": [30, 35], + "trainer": {"sight": 4, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "MtMoon_1F_EventScript_Jovan" + }, + { + "name": "lass", + "coord": [33, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "MtMoon_1F_EventScript_Miriam" + }, + { + "name": "bug_catcher", + "coord": [7, 26], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 4, + "source_script": "MtMoon_1F_EventScript_Kent" + }, + { + "name": "youngster", + "coord": [13, 17], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 5, + "source_script": "MtMoon_1F_EventScript_Josh" + }, + { + "name": "hiker", + "coord": [7, 10], + "wander": {"min": [5, 8], "max": [9, 12]}, + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 6, + "source_script": "MtMoon_1F_EventScript_Marcos" + }, + {"name": "balding_man", "coord": [42, 7], "source_event": 13, "source_script": "MtMoon_1F_EventScript_BaldingMan"} + ], + "items": [ + { + "name": "item_ball", + "coord": [2, 22], + "source_event": 7, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_PARALYZE_HEAL", + "source_script": "MtMoon_1F_EventScript_ItemParalyzeHeal", + "item": "paralyze_heal" + }, + { + "name": "item_ball", + "coord": [11, 35], + "source_event": 8, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_TM09", + "source_script": "MtMoon_1F_EventScript_ItemTM09", + "item": "tm09" + }, + { + "name": "item_ball", + "coord": [26, 32], + "source_event": 9, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_POTION", + "source_script": "MtMoon_1F_EventScript_ItemPotion", + "item": "potion" + }, + { + "name": "item_ball", + "coord": [42, 35], + "source_event": 10, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_RARE_CANDY", + "source_script": "MtMoon_1F_EventScript_ItemRareCandy", + "item": "rare_candy" + }, + { + "name": "item_ball", + "coord": [44, 21], + "source_event": 11, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_ESCAPE_ROPE", + "source_script": "MtMoon_1F_EventScript_ItemEscapeRope", + "item": "escape_rope" + }, + { + "name": "item_ball", + "coord": [3, 2], + "source_event": 12, + "hide_flag": "FLAG_HIDE_MT_MOON_1F_MOON_STONE", + "source_script": "MtMoon_1F_EventScript_ItemMoonStone", + "item": "moon_stone" + } + ] } diff --git a/data/games/frlg/maps/runtime/MtMoon_B1F.json b/data/games/frlg/maps/runtime/MtMoon_B1F.json index ab9c4d0..9956887 100644 --- a/data/games/frlg/maps/runtime/MtMoon_B1F.json +++ b/data/games/frlg/maps/runtime/MtMoon_B1F.json @@ -1,73 +1,74 @@ { - "format": "pokesim-runtime-map/2", - "name": "MtMoon_B1F", - "source": { - "decomp_file": "data/maps/MtMoon_B1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "#################################################", - "#################################################", - "##################~~~~~~~~###############~~~~~###", - "##~.~~~##########~~~~~~~~#############~~~~~~~####", - "##~~~~~#########~~~~~~~~~.~##########~~.~~~~~.~##", - "##~~~~~#########~.~~~~~~~~~#########~~~~~~~~~~~##", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~###########################################", - "##~~~~~##########################################", - "##~~~#~##########################################", - "##~~~~###########################################", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~~~~~~~~~~~~~~~~~~~#########################", - "##~~~~~~~~~~~~~~~~~~~~~~#########################", - "##~~~~~~~~~~~~~~~~~~~~.~#########################", - "#################################################", - "#################################################", - "#########################################~~.~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "##########################################~~~####", - "##########################################~~~####", - "##########################################~~~####", - "##########################~~~~~~~~~~~####~~~~####", - "#########################~~~~~~~~~~~~~~~~~~~~####", - "########################~~.~~~~~~~~~~~~~~~~~~####", - "#################################################", - "#################################################", - "#################################################" - ], - "points": { - "warp_0": [3, 3], - "warp_1": [25, 4], - "warp_2": [43, 21], - "warp_3": [22, 18], - "warp_4": [17, 5], - "warp_5": [26, 36], - "warp_6": [39, 4], - "warp_7": [45, 4] - }, - "warps": [ - {"coord": [3, 3], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_0"}, - {"coord": [25, 4], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_1"}, - {"coord": [43, 21], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_2"}, - {"coord": [22, 18], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_0"}, - {"coord": [17, 5], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_1"}, - {"coord": [26, 36], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_2"}, - {"coord": [39, 4], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_3"}, - {"coord": [45, 4], "enter": "step_on", "to_map": "Route4", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [] + "format": "pokesim-runtime-map/2", + "name": "MtMoon_B1F", + "source": { + "decomp_file": "data/maps/MtMoon_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#################################################", + "#################################################", + "##################~~~~~~~~###############~~~~~###", + "##~.~~~##########~~~~~~~~#############~~~~~~~####", + "##~~~~~#########~~~~~~~~~.~##########~~.~~~~~.~##", + "##~~~~~#########~.~~~~~~~~~#########~~~~~~~~~~~##", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~###########################################", + "##~~~~~##########################################", + "##~~~#~##########################################", + "##~~~~###########################################", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~~##########################################", + "##~~~~~~~~~~~~~~~~~~~~~~#########################", + "##~~~~~~~~~~~~~~~~~~~~~~#########################", + "##~~~~~~~~~~~~~~~~~~~~.~#########################", + "#################################################", + "#################################################", + "#########################################~~.~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "#########################################~~~~####", + "##########################################~~~####", + "##########################################~~~####", + "##########################################~~~####", + "##########################~~~~~~~~~~~####~~~~####", + "#########################~~~~~~~~~~~~~~~~~~~~####", + "########################~~.~~~~~~~~~~~~~~~~~~####", + "#################################################", + "#################################################", + "#################################################" + ], + "points": { + "warp_0": [3, 3], + "warp_1": [25, 4], + "warp_2": [43, 21], + "warp_3": [22, 18], + "warp_4": [17, 5], + "warp_5": [26, 36], + "warp_6": [39, 4], + "warp_7": [45, 4] + }, + "warps": [ + {"coord": [3, 3], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_0"}, + {"coord": [25, 4], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_1"}, + {"coord": [43, 21], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_2"}, + {"coord": [22, 18], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_0"}, + {"coord": [17, 5], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_1"}, + {"coord": [26, 36], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_2"}, + {"coord": [39, 4], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_3"}, + {"coord": [45, 4], "enter": "step_on", "to_map": "Route4", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [] } diff --git a/data/games/frlg/maps/runtime/MtMoon_B2F.json b/data/games/frlg/maps/runtime/MtMoon_B2F.json index 40b2633..eb5f454 100644 --- a/data/games/frlg/maps/runtime/MtMoon_B2F.json +++ b/data/games/frlg/maps/runtime/MtMoon_B2F.json @@ -1,134 +1,198 @@ { - "format": "pokesim-runtime-map/2", - "name": "MtMoon_B2F", - "source": { - "decomp_file": "data/maps/MtMoon_B2F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "MtMoon_B2F", + "source": { + "decomp_file": "data/maps/MtMoon_B2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/MtMoon_B2F/map.json", + "events_sha256": "451a05df92c5df570c121affa75c846996d3561c12e7e5d67d91814482a37ff3", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" }, - "tiles": [ - "################################################", - "################################################", - "################################################", - "###~~~~~~~~~~~~~~~~~############################", - "###~~~~~~~~~~~~~~~~~############################", - "###~~~~~~~~~~~~~~~~~###~~~~######~~~~###########", - "###~~~~~~~~~~~~~~~~~###~~~~#~~~~#~~~~#~~~~######", - "###~~########~~########~~~~#~~~~##~~##~~~~######", - "##~~~~~~#8888~~88888###~~~~#~~~~~~~~~~~~~~######", - "##~~~#~~#~~~~~~~~~~~###~~~~#~~~~~~~~~~~~~~######", - "##~~~.#~#~~~~~~~~~~~###~~~~#~~##~~~~~~~~~~######", - "##~~~~~~#~~~~~~~~~~~###~~~~#~~#.~~~~~~~#~~######", - "##~~~~~######~~###~~###~~~~#~~~~~~~~~~~~~~######", - "#########~~~~~~~~#~~###~~~~#~~~~~~~~~~~~~~######", - "#vvvvvv#~~~~~~~~~#~~###~~~~88888888##8888888888#", - "########~~~~~~~~~######~~~~~~~~~~~~##~~~~~~~~~~#", - "########~~~~~~~~~~~~###~~~~~~~~~~~~##~~~~~~~~~~#", - "############~~~########~~~~~~~~~~~~##~~~~~~~~~~#", - "#######vvvv#~~~#vvvvvv#~~~~~~##~~#####~~##~~~~~#", - "############~~~########~~~~~~#~~~~~~~~~~~#~~~~~#", - "############~~~########~~#~~~#~~~~~~~~~~~#~~~~~#", - "########~~~~~~~~~~~~~##~~.~#~#~~~~~~~~~~~#~~~~~#", - "########~~~~~~~~~~~~~##~~~#~~#~~~~~~~~~~~#~~~~~#", - "########~~~~~##############################~~~~#", - "########~~~~~#vvvvvvvvvvvvvvvvvvvvvvvvvvvv#~~~~#", - "########~~~~~##############################~~~~#", - "########~~~~~###############~~~~###########~~~~#", - "########~~~~~##~~~~~~~~~~~~#~~~~#~~##~~~~~~~~~~#", - "########~~~~~###~~~~~~~~~~~##~~##~~##~~~~~~~~~~#", - "########~~~~~##~~~~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~##~~#~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~##~#.~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~####~~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~########################~~~~~######", - "########~~~~~#vvvvvvvvvvvvvvvvvvvvvv#~~~~~######", - "########~~~~~########################~~~~~######", - "########~~~~~########################~~~~~######", - "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", - "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", - "################################################" - ], - "points": { - "warp_0": [25, 21], - "warp_1": [31, 11], - "warp_2": [17, 31], - "warp_3": [5, 10] + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################################", + "################################################", + "################################################", + "###~~~~~~~~~~~~~~~~~############################", + "###~~~~~~~~~~~~~~~~~############################", + "###~~~~~~~~~~~~~~~~~###~~~~######~~~~###########", + "###~~~~~~~~~~~~~~~~~###~~~~#~~~~#~~~~#~~~~######", + "###~~########~~########~~~~#~~~~##~~##~~~~######", + "##~~~~~~#8888~~88888###~~~~#~~~~~~~~~~~~~~######", + "##~~~#~~#~~~~~~~~~~~###~~~~#~~~~~~~~~~~~~~######", + "##~~~.#~#~~~~~~~~~~~###~~~~#~~##~~~~~~~~~~######", + "##~~~~~~#~~~~~~~~~~~###~~~~#~~#.~~~~~~~#~~######", + "##~~~~~######~~###~~###~~~~#~~~~~~~~~~~~~~######", + "#########~~~~~~~~#~~###~~~~#~~~~~~~~~~~~~~######", + "#vvvvvv#~~~~~~~~~#~~###~~~~88888888##8888888888#", + "########~~~~~~~~~######~~~~~~~~~~~~##~~~~~~~~~~#", + "########~~~~~~~~~~~~###~~~~~~~~~~~~##~~~~~~~~~~#", + "############~~~########~~~~~~~~~~~~##~~~~~~~~~~#", + "#######vvvv#~~~#vvvvvv#~~~~~~##~~#####~~##~~~~~#", + "############~~~########~~~~~~#~~~~~~~~~~~#~~~~~#", + "############~~~########~~#~~~#~~~~~~~~~~~#~~~~~#", + "########~~~~~~~~~~~~~##~~.~#~#~~~~~~~~~~~#~~~~~#", + "########~~~~~~~~~~~~~##~~~#~~#~~~~~~~~~~~#~~~~~#", + "########~~~~~##############################~~~~#", + "########~~~~~#vvvvvvvvvvvvvvvvvvvvvvvvvvvv#~~~~#", + "########~~~~~##############################~~~~#", + "########~~~~~###############~~~~###########~~~~#", + "########~~~~~##~~~~~~~~~~~~#~~~~#~~##~~~~~~~~~~#", + "########~~~~~###~~~~~~~~~~~##~~##~~##~~~~~~~~~~#", + "########~~~~~##~~~~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~##~~#~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~##~#.~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~####~~~~~~~~~~~~~~~~~~##~~~~~######", + "########~~~~~########################~~~~~######", + "########~~~~~#vvvvvvvvvvvvvvvvvvvvvv#~~~~~######", + "########~~~~~########################~~~~~######", + "########~~~~~########################~~~~~######", + "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", + "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", + "################################################" + ], + "points": {"warp_0": [25, 21], "warp_1": [31, 11], "warp_2": [17, 31], "warp_3": [5, 10]}, + "regions": { + "wild": [ + [9, 8], + [10, 8], + [11, 8], + [12, 8], + [15, 8], + [16, 8], + [17, 8], + [18, 8], + [19, 8], + [27, 14], + [28, 14], + [29, 14], + [30, 14], + [31, 14], + [32, 14], + [33, 14], + [34, 14], + [37, 14], + [38, 14], + [39, 14], + [40, 14], + [41, 14], + [42, 14], + [43, 14], + [44, 14], + [45, 14], + [46, 14] + ] + }, + "warps": [ + {"coord": [25, 21], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_3"}, + {"coord": [31, 11], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_4"}, + {"coord": [17, 31], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_5"}, + {"coord": [5, 10], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_6"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "fossil", + "coord": [13, 7], + "hide_flag": "FLAG_HIDE_DOME_FOSSIL", + "source_event": 0, + "source_script": "MtMoon_B2F_EventScript_DomeFossil", + "source_local_id": "LOCALID_DOME_FOSSIL" }, - "regions": { - "wild": [ - [9, 8], - [10, 8], - [11, 8], - [12, 8], - [15, 8], - [16, 8], - [17, 8], - [18, 8], - [19, 8], - [27, 14], - [28, 14], - [29, 14], - [30, 14], - [31, 14], - [32, 14], - [33, 14], - [34, 14], - [37, 14], - [38, 14], - [39, 14], - [40, 14], - [41, 14], - [42, 14], - [43, 14], - [44, 14], - [45, 14], - [46, 14] - ] + { + "name": "fossil", + "coord": [14, 7], + "hide_flag": "FLAG_HIDE_HELIX_FOSSIL", + "source_event": 1, + "source_script": "MtMoon_B2F_EventScript_HelixFossil", + "source_local_id": "LOCALID_HELIX_FOSSIL" }, - "warps": [ - {"coord": [25, 21], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_3"}, - {"coord": [31, 11], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_4"}, - {"coord": [17, 31], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_5"}, - {"coord": [5, 10], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_6"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "fossil", "coord": [13, 7], "hide_flag": "FLAG_HIDE_DOME_FOSSIL"}, - {"name": "fossil", "coord": [14, 7], "hide_flag": "FLAG_HIDE_HELIX_FOSSIL"}, - {"name": "scientist", "coord": [13, 11]}, - { - "name": "rocket_m", - "coord": [37, 21], - "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - }, - { - "name": "rocket_m", - "coord": [12, 20], - "facing": "south", - "trainer": {"sight": 2}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - }, - { - "name": "rocket_m", - "coord": [35, 12], - "facing": "north", - "trainer": {"sight": 4}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - }, - { - "name": "rocket_m", - "coord": [18, 27], - "facing": "south", - "trainer": {"sight": 4}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - } - ], - "items": [ - {"name": "item_ball", "coord": [30, 26], "hide_flag": "FLAG_HIDE_MT_MOON_B2F_STAR_PIECE"}, - {"name": "item_ball", "coord": [35, 5], "hide_flag": "FLAG_HIDE_MT_MOON_B2F_TM46"}, - {"name": "item_ball", "coord": [24, 6], "hide_flag": "FLAG_HIDE_MT_MOON_B2F_REVIVE"}, - {"name": "item_ball", "coord": [3, 11], "hide_flag": "FLAG_HIDE_MT_MOON_B2F_ANTIDOTE"} - ] + { + "name": "scientist", + "coord": [13, 11], + "source_event": 2, + "source_script": "MtMoon_B2F_EventScript_Miguel", + "source_local_id": "LOCALID_MIGUEL" + }, + { + "name": "rocket_m", + "coord": [37, 21], + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 3, + "source_script": "MtMoon_B2F_EventScript_Grunt4" + }, + { + "name": "rocket_m", + "coord": [12, 20], + "facing": "south", + "trainer": {"sight": 2}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 4, + "source_script": "MtMoon_B2F_EventScript_Grunt1" + }, + { + "name": "rocket_m", + "coord": [35, 12], + "facing": "north", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 5, + "source_script": "MtMoon_B2F_EventScript_Grunt3" + }, + { + "name": "rocket_m", + "coord": [18, 27], + "facing": "south", + "trainer": {"sight": 4}, + "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", + "source_event": 6, + "source_script": "MtMoon_B2F_EventScript_Grunt2" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [30, 26], + "source_event": 7, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_STAR_PIECE", + "source_script": "MtMoon_B2F_EventScript_ItemStarPiece", + "item": "star_piece" + }, + { + "name": "item_ball", + "coord": [35, 5], + "source_event": 8, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_TM46", + "source_script": "MtMoon_B2F_EventScript_ItemTM46", + "item": "tm46" + }, + { + "name": "item_ball", + "coord": [24, 6], + "source_event": 9, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_REVIVE", + "source_script": "MtMoon_B2F_EventScript_ItemRevive", + "item": "revive" + }, + { + "name": "item_ball", + "coord": [3, 11], + "source_event": 10, + "hide_flag": "FLAG_HIDE_MT_MOON_B2F_ANTIDOTE", + "source_script": "MtMoon_B2F_EventScript_ItemAntidote", + "item": "antidote" + } + ] } diff --git a/data/games/frlg/maps/runtime/PalletTown.json b/data/games/frlg/maps/runtime/PalletTown.json index 708665a..54e740d 100644 --- a/data/games/frlg/maps/runtime/PalletTown.json +++ b/data/games/frlg/maps/runtime/PalletTown.json @@ -1,71 +1,90 @@ { - "format": "pokesim-runtime-map/2", - "name": "PalletTown", - "source": { - "decomp_file": "data/maps/PalletTown/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "PalletTown", + "source": { + "decomp_file": "data/maps/PalletTown/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "############..##########", + "############..##########", + "##....................##", + "##....................##", + "##...#####....#####...##", + "##...#####....#####...##", + "##...#####....#####...##", + "##..S#D###...S#D###...##", + "##....................##", + "##....................##", + "##...........#######..##", + "##...####S...#######..##", + "##...........#######..##", + "##...........###D###..##", + "##...S................##", + "##....................##", + "##...........###S##...##", + "##.....wwww...........##", + "##.....wwww...........##", + "##.....wwww...........##" + ], + "elevation": [ + "000000000000330000000000", + "000000000000330000000000", + "003333333333333333333300", + "003333333333333333333300", + "003330000033330000033300", + "003330000033330000033300", + "003330000033330000033300", + "003300000033300000033300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333300000003300", + "003330000033300000003300", + "003333333333300000003300", + "003333333333300000003300", + "003330333333333333333300", + "003333333333333333333300", + "003333333333300000033300", + "003333311113333333333300", + "003333311113333333333300", + "003333311113333333333300" + ], + "points": {"oaks_lab_front": [16, 14], "warp_0": [6, 7], "warp_1": [15, 7], "warp_2": [16, 13]}, + "warps": [ + {"coord": [6, 7], "enter": "walk_into", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_1"}, + {"coord": [15, 7], "enter": "walk_into", "to_map": "PalletTown_RivalsHouse", "to_point": "warp_0"}, + {"coord": [16, 13], "enter": "walk_into", "to_map": "PalletTown_ProfessorOaksLab", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route1", "offset": 0}, + {"side": "south", "to_map": "Route21_North", "offset": 0} + ], + "npcs": [ + { + "name": "woman_1", + "coord": [3, 10], + "wander": {"min": [2, 6], "max": [4, 14]}, + "source_event": 0, + "source_script": "PalletTown_EventScript_SignLady", + "source_local_id": "LOCALID_PALLET_SIGN_LADY" }, - "tiles": [ - "############..##########", - "############..##########", - "##....................##", - "##....................##", - "##...#####....#####...##", - "##...#####....#####...##", - "##...#####....#####...##", - "##..S#D###...S#D###...##", - "##....................##", - "##....................##", - "##...........#######..##", - "##...####S...#######..##", - "##...........#######..##", - "##...........###D###..##", - "##...S................##", - "##....................##", - "##...........###S##...##", - "##.....wwww...........##", - "##.....wwww...........##", - "##.....wwww...........##" - ], - "elevation": [ - "000000000000330000000000", - "000000000000330000000000", - "003333333333333333333300", - "003333333333333333333300", - "003330000033330000033300", - "003330000033330000033300", - "003330000033330000033300", - "003300000033300000033300", - "003333333333333333333300", - "003333333333333333333300", - "003333333333300000003300", - "003330000033300000003300", - "003333333333300000003300", - "003333333333300000003300", - "003330333333333333333300", - "003333333333333333333300", - "003333333333300000033300", - "003333311113333333333300", - "003333311113333333333300", - "003333311113333333333300" - ], - "points": { - "oaks_lab_front": [16, 14], - "warp_0": [6, 7], - "warp_1": [15, 7], - "warp_2": [16, 13] + { + "name": "fat_man", + "coord": [13, 17], + "wander": {"min": [7, 15], "max": [19, 19]}, + "source_event": 1, + "source_script": "PalletTown_EventScript_FatMan", + "source_local_id": "LOCALID_PALLET_FAT_MAN" }, - "warps": [ - {"coord": [6, 7], "enter": "walk_into", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_1"}, - {"coord": [15, 7], "enter": "walk_into", "to_map": "PalletTown_RivalsHouse", "to_point": "warp_0"}, - {"coord": [16, 13], "enter": "walk_into", "to_map": "PalletTown_ProfessorOaksLab", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [{"side": "north", "to_map": "Route1", "offset": 0}], - "npcs": [ - {"name": "woman_1", "coord": [3, 10], "wander": {"min": [2, 6], "max": [4, 14]}}, - {"name": "fat_man", "coord": [13, 17], "wander": {"min": [7, 15], "max": [19, 19]}}, - {"name": "prof_oak", "coord": [10, 8], "hide_flag": "FLAG_HIDE_OAK_IN_PALLET_TOWN"} - ] + { + "name": "prof_oak", + "coord": [10, 8], + "hide_flag": "FLAG_HIDE_OAK_IN_PALLET_TOWN", + "source_event": 2, + "source_script": "0x0", + "source_local_id": "LOCALID_PALLET_PROF_OAK" + } + ] } diff --git a/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_1F.json b/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_1F.json index 27c4b2b..3719282 100644 --- a/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_1F.json +++ b/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_1F.json @@ -1,37 +1,41 @@ { - "format": "pokesim-runtime-map/2", - "name": "PalletTown_PlayersHouse_1F", - "source": { - "decomp_file": "data/maps/PalletTown_PlayersHouse_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "#############", - "#############", - "#..........##", - "#............", - "#.....##.....", - "#.....##.....", - "#............", - "##..........#", - "#............", - "#############" - ], - "points": { - "warp_1": [4, 8], - "warp_2": [10, 2] - }, - "warps": [ - {"coord": [5, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"}, - {"coord": [4, 8], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_0"}, - {"coord": [10, 2], "enter": "walk_east", "to_map": "PalletTown_PlayersHouse_2F", "to_point": "warp_0"}, - {"coord": [3, 9], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "mom", "coord": [8, 4]} - ] + "format": "pokesim-runtime-map/2", + "name": "PalletTown_PlayersHouse_1F", + "source": { + "decomp_file": "data/maps/PalletTown_PlayersHouse_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + "#..........##", + "#............", + "#.....##.....", + "#.....##.....", + "#............", + "##..........#", + "#............", + "#############" + ], + "points": {"warp_1": [4, 8], "warp_2": [10, 2]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"}, + {"coord": [4, 8], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_0"}, + {"coord": [10, 2], "enter": "walk_east", "to_map": "PalletTown_PlayersHouse_2F", "to_point": "warp_0"}, + {"coord": [3, 9], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "mom", + "coord": [8, 4], + "source_event": 0, + "source_script": "PalletTown_PlayersHouse_1F_EventScript_Mom", + "source_local_id": "LOCALID_MOM" + } + ] } diff --git a/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_2F.json b/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_2F.json index c8b7466..3f3da38 100644 --- a/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_2F.json +++ b/data/games/frlg/maps/runtime/PalletTown_PlayersHouse_2F.json @@ -1,41 +1,36 @@ { - "format": "pokesim-runtime-map/2", - "name": "PalletTown_PlayersHouse_2F", - "source": { - "decomp_file": "data/maps/PalletTown_PlayersHouse_2F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "############", - "###########S", - "#.......##..", - "#.......##..", - "#.2...#.....", - "#.8...#.....", - "#.#.........", - "#...........", - "#..........." - ], - "elevation": [ - "000000000000", - "000000000000", - "033333330033", - "033333330033", - "033333033333", - "003033033333", - "040403333333", - "003033333333", - "033333333333" - ], - "points": { - "start": [6, 6], - "warp_0": [10, 2] - }, - "warps": [ - {"coord": [10, 2], "enter": "walk_west", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [] + "format": "pokesim-runtime-map/2", + "name": "PalletTown_PlayersHouse_2F", + "source": { + "decomp_file": "data/maps/PalletTown_PlayersHouse_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "############", + "###########S", + "#.......##..", + "#.......##..", + "#.2...#.....", + "#.8...#.....", + "#.#.........", + "#...........", + "#..........." + ], + "elevation": [ + "000000000000", + "000000000000", + "033333330033", + "033333330033", + "033333033333", + "003033033333", + "040403333333", + "003033333333", + "033333333333" + ], + "points": {"start": [6, 6], "warp_0": [10, 2]}, + "warps": [{"coord": [10, 2], "enter": "walk_west", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_2"}], + "flag_sets": {}, + "connections": [] } diff --git a/data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json b/data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json index 4ce7aee..55e69f7 100644 --- a/data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json +++ b/data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json @@ -1,50 +1,129 @@ { - "format": "pokesim-runtime-map/2", - "name": "PalletTown_ProfessorOaksLab", - "source": { - "decomp_file": "data/maps/PalletTown_ProfessorOaksLab/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "#############", - "######SS#####", - ".............", - "#............", - "###.....###..", - ".##..........", - ".............", - ".............", - "#####...#####", - ".............", - ".............", - ".............", - "#...........#", - "#############" - ], - "points": { - "warp_0": [6, 12] - }, - "warps": [ - {"coord": [6, 12], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_2"}, - {"coord": [7, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"}, - {"coord": [5, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "scientist", "coord": [3, 11]}, - {"name": "worker_f", "coord": [2, 10], "wander": {"min": [2, 6], "max": [2, 13]}}, - {"name": "scientist", "coord": [11, 10]}, - {"name": "prof_oak", "coord": [6, 3], "hide_flag": "FLAG_HIDE_OAK_IN_HIS_LAB"}, - {"name": "blue", "coord": [5, 4], "hide_flag": "FLAG_HIDE_RIVAL_IN_LAB"}, - {"name": "pokedex", "coord": [4, 1], "hide_flag": "FLAG_HIDE_POKEDEX"}, - {"name": "pokedex", "coord": [5, 1], "hide_flag": "FLAG_HIDE_POKEDEX"} - ], - "items": [ - {"name": "item_ball", "coord": [8, 4], "hide_flag": "FLAG_HIDE_BULBASAUR_BALL"}, - {"name": "item_ball", "coord": [9, 4], "hide_flag": "FLAG_HIDE_SQUIRTLE_BALL"}, - {"name": "item_ball", "coord": [10, 4], "hide_flag": "FLAG_HIDE_CHARMANDER_BALL"} - ] + "format": "pokesim-runtime-map/2", + "name": "PalletTown_ProfessorOaksLab", + "source": { + "decomp_file": "data/maps/PalletTown_ProfessorOaksLab/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/PalletTown_ProfessorOaksLab/map.json", + "events_sha256": "37906ed851a344cc63b41b303b41b6da091328b97b05b6e38d2570486d104704", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "######SS#####", + ".............", + "#............", + "###.....###..", + ".##..........", + ".............", + ".............", + "#####...#####", + ".............", + ".............", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_0": [6, 12]}, + "warps": [ + {"coord": [6, 12], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_2"}, + {"coord": [7, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"}, + {"coord": [5, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "scientist", + "coord": [3, 11], + "source_event": 0, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide1" + }, + { + "name": "worker_f", + "coord": [2, 10], + "wander": {"min": [2, 6], "max": [2, 13]}, + "source_event": 1, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide3" + }, + { + "name": "scientist", + "coord": [11, 10], + "source_event": 2, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide2" + }, + { + "name": "prof_oak", + "coord": [6, 3], + "hide_flag": "FLAG_HIDE_OAK_IN_HIS_LAB", + "source_event": 3, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_ProfOak", + "source_local_id": "LOCALID_OAKS_LAB_PROF_OAK" + }, + { + "name": "blue", + "coord": [5, 4], + "hide_flag": "FLAG_HIDE_RIVAL_IN_LAB", + "source_event": 7, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Rival", + "source_local_id": "LOCALID_OAKS_LAB_RIVAL" + }, + { + "name": "pokedex", + "coord": [4, 1], + "hide_flag": "FLAG_HIDE_POKEDEX", + "source_event": 8, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Pokedex", + "source_local_id": "LOCALID_POKEDEX_1" + }, + { + "name": "pokedex", + "coord": [5, 1], + "hide_flag": "FLAG_HIDE_POKEDEX", + "source_event": 9, + "source_script": "PalletTown_ProfessorOaksLab_EventScript_Pokedex", + "source_local_id": "LOCALID_POKEDEX_2" + } + ], + "interactables": [ + { + "name": "item_ball", + "coord": [8, 4], + "source_event": 4, + "hide_flag": "FLAG_HIDE_BULBASAUR_BALL", + "source_script": "PalletTown_ProfessorOaksLab_EventScript_BulbasaurBall", + "source_local_id": "LOCALID_BULBASAUR_BALL", + "interaction": {"kind": "starter_choice", "species": "bulbasaur"} + }, + { + "name": "item_ball", + "coord": [9, 4], + "source_event": 5, + "hide_flag": "FLAG_HIDE_SQUIRTLE_BALL", + "source_script": "PalletTown_ProfessorOaksLab_EventScript_SquirtleBall", + "source_local_id": "LOCALID_SQUIRTLE_BALL", + "interaction": {"kind": "starter_choice", "species": "squirtle"} + }, + { + "name": "item_ball", + "coord": [10, 4], + "source_event": 6, + "hide_flag": "FLAG_HIDE_CHARMANDER_BALL", + "source_script": "PalletTown_ProfessorOaksLab_EventScript_CharmanderBall", + "source_local_id": "LOCALID_CHARMANDER_BALL", + "interaction": {"kind": "starter_choice", "species": "charmander"} + } + ] } diff --git a/data/games/frlg/maps/runtime/PalletTown_RivalsHouse.json b/data/games/frlg/maps/runtime/PalletTown_RivalsHouse.json index b4bb4c3..cd9fa22 100644 --- a/data/games/frlg/maps/runtime/PalletTown_RivalsHouse.json +++ b/data/games/frlg/maps/runtime/PalletTown_RivalsHouse.json @@ -1,36 +1,49 @@ { - "format": "pokesim-runtime-map/2", - "name": "PalletTown_RivalsHouse", - "source": { - "decomp_file": "data/maps/PalletTown_RivalsHouse/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "PalletTown_RivalsHouse", + "source": { + "decomp_file": "data/maps/PalletTown_RivalsHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "#############", + ".............", + ".............", + "......##.....", + "......##.....", + ".............", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_0": [4, 8]}, + "warps": [ + {"coord": [4, 8], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_1"}, + {"coord": [5, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_1"}, + {"coord": [3, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "daisy", + "coord": [10, 6], + "wander": {"min": [9, 3], "max": [11, 9]}, + "source_event": 0, + "source_script": "PalletTown_RivalsHouse_EventScript_Daisy", + "source_local_id": "LOCALID_DAISY" }, - "allow_running": false, - "tiles": [ - "#############", - "#############", - ".............", - ".............", - "......##.....", - "......##.....", - ".............", - ".............", - "#...........#", - "#############" - ], - "points": { - "warp_0": [4, 8] - }, - "warps": [ - {"coord": [4, 8], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_1"}, - {"coord": [5, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_1"}, - {"coord": [3, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "daisy", "coord": [10, 6], "wander": {"min": [9, 3], "max": [11, 9]}}, - {"name": "town_map", "coord": [6, 4], "hide_flag": "FLAG_HIDE_TOWN_MAP"} - ] + { + "name": "town_map", + "coord": [6, 4], + "hide_flag": "FLAG_HIDE_TOWN_MAP", + "source_event": 1, + "source_script": "PalletTown_RivalsHouse_EventScript_TownMap", + "source_local_id": "LOCALID_TOWN_MAP" + } + ] } diff --git a/data/games/frlg/maps/runtime/PewterCity.json b/data/games/frlg/maps/runtime/PewterCity.json index 997590f..7c59eeb 100644 --- a/data/games/frlg/maps/runtime/PewterCity.json +++ b/data/games/frlg/maps/runtime/PewterCity.json @@ -1,79 +1,118 @@ { - "format": "pokesim-runtime-map/2", - "name": "PewterCity", - "source": { - "decomp_file": "data/maps/PewterCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "PewterCity", + "source": { + "decomp_file": "data/maps/PewterCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "################################################", + "#######################....#####################", + "####........#################.........##########", + "####........#################.........##########", + "####........#############D######......##########", + "####........###########...............##########", + "#######.....#####.#####..#######........########", + "####vvv..vvvvvvv...Svvvvvvvvvvvvvvvvv...########", + "####....................................########", + "####............................#####...########", + "######..........................#####...########", + "######..........................#D###...########", + "######..................................########", + "######...##.#######.##..................########", + "######...#############..................########", + "######...##.#######.##..................########", + "######...##S..#D#...##....####..........########", + "######...............#....######........########", + "######...............#....SSD###........########", + "######...............#.................S########", + "######################..........................", + "######..........................................", + "######.......#########..........................", + "######.......#########....##########............", + "######.......#########....##########....########", + "######.......##SSD####....#####S#####...########", + "######....................#.........#...########", + "######....................#.........#...########", + "######..#####.............#.........#...########", + "######..#####.............#.........#...########", + "######..#D###.......S.....#vvvv.vvvv#...########", + "######..................................########", + "######..................................########", + "######..................................########", + "######..................................########", + "######..................................########", + "####################....########################", + "####################....########################", + "####################....########################", + "####################....########################" + ], + "points": { + "gym_front": [15, 17], + "warp_0": [17, 6], + "warp_1": [25, 4], + "warp_2": [15, 16], + "warp_3": [28, 18], + "warp_4": [33, 11], + "warp_5": [17, 25], + "warp_6": [9, 30] + }, + "warps": [ + {"coord": [17, 6], "enter": "cave_entrance", "to_map": "PewterCity_Museum_1F", "to_point": "warp_1"}, + {"coord": [25, 4], "enter": "walk_into", "to_map": "PewterCity_Museum_1F", "to_point": "warp_3"}, + {"coord": [15, 16], "enter": "walk_into", "to_map": "PewterCity_Gym", "to_point": "warp_1"}, + {"coord": [28, 18], "enter": "walk_into", "to_map": "PewterCity_Mart", "to_point": "warp_1"}, + {"coord": [33, 11], "enter": "walk_into", "to_map": "PewterCity_House1", "to_point": "warp_1"}, + {"coord": [17, 25], "enter": "walk_into", "to_map": "PewterCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [9, 30], "enter": "walk_into", "to_map": "PewterCity_House2", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "Route2", "offset": 12}, + {"side": "east", "to_map": "Route3", "offset": 10} + ], + "npcs": [ + {"name": "lass", "coord": [6, 15], "source_event": 0, "source_script": "PewterCity_EventScript_Lass"}, + { + "name": "man", + "coord": [33, 17], + "hide_flag": "FLAG_HIDE_PEWTER_MUSEUM_GUIDE", + "source_event": 1, + "source_script": "PewterCity_EventScript_MuseumGuide", + "source_local_id": "LOCALID_PEWTER_MUSEUM_GUIDE" }, - "tiles": [ - "################################################", - "#######################....#####################", - "####........#################.........##########", - "####........#################.........##########", - "####........#############D######......##########", - "####........###########...............##########", - "#######.....#####.#####..#######........########", - "####vvv..vvvvvvv...Svvvvvvvvvvvvvvvvv...########", - "####....................................########", - "####............................#####...########", - "######..........................#####...########", - "######..........................#D###...########", - "######..................................########", - "######...##.#######.##..................########", - "######...#############..................########", - "######...##.#######.##..................########", - "######...##S..#D#...##....####..........########", - "######...............#....######........########", - "######...............#....SSD###........########", - "######...............#.................S########", - "######################..........................", - "######..........................................", - "######.......#########..........................", - "######.......#########....##########............", - "######.......#########....##########....########", - "######.......##SSD####....#####S#####...########", - "######....................#.........#...########", - "######....................#.........#...########", - "######..#####.............#.........#...########", - "######..#####.............#.........#...########", - "######..#D###.......S.....#vvvv.vvvv#...########", - "######..................................########", - "######..................................########", - "######..................................########", - "######..................................########", - "######..................................########", - "####################....########################", - "####################....########################", - "####################....########################", - "####################....########################" - ], - "points": { - "gym_front": [15, 17], - "warp_0": [17, 6], - "warp_1": [25, 4], - "warp_2": [15, 16], - "warp_3": [28, 18], - "warp_5": [17, 25] + {"name": "fat_man", "coord": [21, 28], "source_event": 2, "source_script": "PewterCity_EventScript_FatMan"}, + { + "name": "bug_catcher", + "coord": [33, 27], + "wander": {"min": [31, 27], "max": [35, 27]}, + "source_event": 3, + "source_script": "PewterCity_EventScript_BugCatcher" }, - "warps": [ - {"coord": [17, 6], "enter": "cave_entrance", "to_map": "PewterCity_Museum_1F", "to_point": "warp_1"}, - {"coord": [25, 4], "enter": "walk_into", "to_map": "PewterCity_Museum_1F", "to_point": "warp_3"}, - {"coord": [15, 16], "enter": "walk_into", "to_map": "PewterCity_Gym", "to_point": "warp_1"}, - {"coord": [28, 18], "enter": "walk_into", "to_map": "PewterCity_Mart", "to_point": "warp_1"}, - {"coord": [33, 11], "enter": "walk_into"}, - {"coord": [17, 25], "enter": "walk_into", "to_map": "PewterCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [9, 30], "enter": "walk_into"} - ], - "flag_sets": {}, - "connections": [{"side": "south", "to_map": "Route2", "offset": 12}, {"side": "east", "to_map": "Route3", "offset": 10}], - "npcs": [ - {"name": "lass", "coord": [6, 15]}, - {"name": "man", "coord": [33, 17], "hide_flag": "FLAG_HIDE_PEWTER_MUSEUM_GUIDE"}, - {"name": "fat_man", "coord": [21, 28]}, - {"name": "bug_catcher", "coord": [33, 27], "wander": {"min": [31, 27], "max": [35, 27]}}, - {"name": "boy", "coord": [42, 20], "hide_flag": "FLAG_HIDE_PEWTER_CITY_GYM_GUIDE"}, - {"name": "cut_tree", "coord": [30, 5], "hide_flag": "FLAG_TEMP_12"}, - {"name": "scientist", "coord": [46, 20], "hide_flag": "FLAG_HIDE_PEWTER_CITY_RUNNING_SHOES_GUY"} - ] + { + "name": "boy", + "coord": [42, 20], + "hide_flag": "FLAG_HIDE_PEWTER_CITY_GYM_GUIDE", + "source_event": 4, + "source_script": "PewterCity_EventScript_GymGuide", + "source_local_id": "LOCALID_PEWTER_GYM_GUIDE" + }, + { + "name": "cut_tree", + "coord": [30, 5], + "hide_flag": "FLAG_TEMP_12", + "source_event": 5, + "source_script": "EventScript_CutTree" + }, + { + "name": "scientist", + "coord": [46, 20], + "hide_flag": "FLAG_HIDE_PEWTER_CITY_RUNNING_SHOES_GUY", + "source_event": 6, + "source_script": "PewterCity_EventScript_RunningShoesAide", + "source_local_id": "LOCALID_PEWTER_AIDE" + } + ] } diff --git a/data/games/frlg/maps/runtime/PewterCity_Gym.json b/data/games/frlg/maps/runtime/PewterCity_Gym.json index a696e09..288fc61 100644 --- a/data/games/frlg/maps/runtime/PewterCity_Gym.json +++ b/data/games/frlg/maps/runtime/PewterCity_Gym.json @@ -1,44 +1,49 @@ { - "format": "pokesim-runtime-map/2", - "name": "PewterCity_Gym", - "source": { - "decomp_file": "data/maps/PewterCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "PewterCity_Gym", + "source": { + "decomp_file": "data/maps/PewterCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "#############", + "####.....####", + "#############", + "#....#.#....#", + "#...........#", + "#...#...#...#", + "#...........#", + "#..#.#.#.#..#", + "##.........##", + "#...#...#...#", + "##.........##", + "#...........#", + "#...S...S...#", + "#...........#", + "#...........#", + "#############" + ], + "points": {"brock_front": [6, 6], "warp_1": [6, 14]}, + "warps": [ + {"coord": [5, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"}, + {"coord": [6, 14], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_2"}, + {"coord": [7, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "brock", "coord": [6, 5], "source_event": 0, "source_script": "PewterCity_Gym_EventScript_Brock"}, + { + "name": "camper", + "coord": [3, 8], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "PewterCity_Gym_EventScript_Liam" }, - "allow_running": false, - "tiles": [ - "#############", - "####.....####", - "#############", - "#....#.#....#", - "#...........#", - "#...#...#...#", - "#...........#", - "#..#.#.#.#..#", - "##.........##", - "#...#...#...#", - "##.........##", - "#...........#", - "#...S...S...#", - "#...........#", - "#...........#", - "#############" - ], - "points": { - "brock_front": [6, 6], - "warp_1": [6, 14] - }, - "warps": [ - {"coord": [5, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"}, - {"coord": [6, 14], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_2"}, - {"coord": [7, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "brock", "coord": [6, 5]}, - {"name": "camper", "coord": [3, 8], "facing": "east", "trainer": {"sight": 4}}, - {"name": "gym_guy", "coord": [7, 12]} - ] + {"name": "gym_guy", "coord": [7, 12], "source_event": 2, "source_script": "PewterCity_Gym_EventScript_GymGuy"} + ] } diff --git a/data/games/frlg/maps/runtime/PewterCity_Mart.json b/data/games/frlg/maps/runtime/PewterCity_Mart.json index 74d6edd..633e19a 100644 --- a/data/games/frlg/maps/runtime/PewterCity_Mart.json +++ b/data/games/frlg/maps/runtime/PewterCity_Mart.json @@ -1,47 +1,35 @@ { - "format": "pokesim-runtime-map/2", - "name": "PewterCity_Mart", - "source": { - "decomp_file": "data/maps/PewterCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "elevation": [ - "00000000000", - "00000000000", - "00303333330", - "33003333333", - "00003330030", - "33333330030", - "30033330030", - "33333333333", - "00000000000" - ], - "points": { - "warp_1": [4, 7] - }, - "warps": [ - {"coord": [3, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"}, - {"coord": [4, 7], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_3"}, - {"coord": [5, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "youngster", "coord": [8, 2]}, - {"name": "boy", "coord": [6, 4]}, - {"name": "clerk", "coord": [2, 3]} - ] + "format": "pokesim-runtime-map/2", + "name": "PewterCity_Mart", + "source": { + "decomp_file": "data/maps/PewterCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_3"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "youngster", "coord": [8, 2], "source_event": 0, "source_script": "PewterCity_Mart_EventScript_Youngster"}, + {"name": "boy", "coord": [6, 4], "source_event": 1, "source_script": "PewterCity_Mart_EventScript_Boy"}, + {"name": "clerk", "coord": [2, 3], "source_event": 2, "source_script": "PewterCity_Mart_EventScript_Clerk"} + ] } diff --git a/data/games/frlg/maps/runtime/PewterCity_Museum_1F.json b/data/games/frlg/maps/runtime/PewterCity_Museum_1F.json index cceec7f..1af401a 100644 --- a/data/games/frlg/maps/runtime/PewterCity_Museum_1F.json +++ b/data/games/frlg/maps/runtime/PewterCity_Museum_1F.json @@ -1,45 +1,76 @@ { - "format": "pokesim-runtime-map/2", - "name": "PewterCity_Museum_1F", - "source": { - "decomp_file": "data/maps/PewterCity_Museum_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "PewterCity_Museum_1F", + "source": { + "decomp_file": "data/maps/PewterCity_Museum_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "############################", + "############################", + "...............#............", + "...............#......#....#", + "...####........#...........#", + "...............#............", + "...........#...#...........#", + "...####..###...###.........#", + ".........###.....#..........", + "#........###....##......##..", + "############################" + ], + "points": {"warp_1": [14, 9], "warp_3": [21, 9], "warp_5": [8, 8]}, + "warps": [ + {"coord": [13, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_0"}, + {"coord": [14, 9], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_0"}, + {"coord": [15, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_0"}, + {"coord": [21, 9], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_1"}, + {"coord": [22, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_1"}, + {"coord": [8, 8], "enter": "walk_east", "to_map": "PewterCity_Museum_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "worker_m", + "coord": [16, 5], + "source_event": 0, + "source_script": "PewterCity_Museum_1F_EventScript_Scientist1", + "source_local_id": "LOCALID_MUSEUM_SCIENTIST1" }, - "allow_running": false, - "tiles": [ - "############################", - "############################", - "...............#............", - "...............#......#....#", - "...####........#...........#", - "...............#............", - "...........#...#...........#", - "...####..###...###.........#", - ".........###.....#..........", - "#........###....##......##..", - "############################" - ], - "points": { - "warp_1": [14, 9], - "warp_3": [21, 9] + { + "name": "old_man_1", + "coord": [2, 4], + "source_event": 1, + "source_script": "PewterCity_Museum_1F_EventScript_OldMan" }, - "warps": [ - {"coord": [13, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_0"}, - {"coord": [14, 9], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_0"}, - {"coord": [15, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_0"}, - {"coord": [21, 9], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_1"}, - {"coord": [22, 9], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_1"}, - {"coord": [8, 8], "enter": "walk_east"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "worker_m", "coord": [16, 5]}, - {"name": "old_man_1", "coord": [2, 4]}, - {"name": "scientist", "coord": [21, 3]}, - {"name": "old_amber", "coord": [22, 3], "hide_flag": "FLAG_HIDE_OLD_AMBER"}, - {"name": "scientist", "coord": [26, 4]}, - {"name": "scientist", "coord": [26, 7]} - ] + { + "name": "scientist", + "coord": [21, 3], + "source_event": 2, + "source_script": "PewterCity_Museum_1F_EventScript_OldAmberScientist" + }, + { + "name": "old_amber", + "coord": [22, 3], + "hide_flag": "FLAG_HIDE_OLD_AMBER", + "source_event": 3, + "source_script": "PewterCity_Museum_1F_EventScript_OldAmber", + "source_local_id": "LOCALID_OLD_AMBER" + }, + { + "name": "scientist", + "coord": [26, 4], + "source_event": 4, + "source_script": "PewterCity_Museum_1F_EventScript_Scientist2" + }, + { + "name": "scientist", + "coord": [26, 7], + "source_event": 5, + "source_script": "PewterCity_Museum_1F_EventScript_SeismicTossTutor" + } + ] } diff --git a/data/games/frlg/maps/runtime/PewterCity_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/PewterCity_PokemonCenter_1F.json index 58957fe..e8f4f73 100644 --- a/data/games/frlg/maps/runtime/PewterCity_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/PewterCity_PokemonCenter_1F.json @@ -1,55 +1,83 @@ { - "format": "pokesim-runtime-map/2", - "name": "PewterCity_PokemonCenter_1F", - "source": { - "decomp_file": "data/maps/PewterCity_PokemonCenter_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "PewterCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/PewterCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_5"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_5"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_5"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "PewterCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "jigglypuff", + "coord": [2, 2], + "source_event": 0, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Jigglypuff" }, - "allow_running": false, - "tiles": [ - "#.#############", - "###############", - "....###..##....", - "....#######....", - "...............", - "...............", - "#..........##..", - "...........##..", - "...............", - "###############" - ], - "elevation": [ - "030000000000000", - "000000000000000", - "333300033003333", - "333300000003333", - "333333333333333", - "330333333333333", - "044033333330033", - "330333333330033", - "333333333333333", - "000000000000000" - ], - "points": { - "nurse_front": [7, 4], - "warp_1": [7, 8] + { + "name": "gentleman", + "coord": [4, 8], + "source_event": 1, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Gentleman" }, - "warps": [ - {"coord": [6, 8], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_5"}, - {"coord": [7, 8], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_5"}, - {"coord": [8, 8], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_5"}, - {"coord": [1, 6], "enter": "step_on"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "jigglypuff", "coord": [2, 2]}, - {"name": "gentleman", "coord": [4, 8]}, - {"name": "nurse", "coord": [7, 2]}, - {"name": "youngster", "coord": [1, 2]}, - {"name": "woman_1", "coord": [13, 2]}, - {"name": "gba_kid", "coord": [10, 7]}, - {"name": "gba_kid", "coord": [14, 6]} - ] + { + "name": "nurse", + "coord": [7, 2], + "source_event": 2, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_PEWTER_NURSE" + }, + { + "name": "youngster", + "coord": [1, 2], + "source_event": 3, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_Youngster" + }, + {"name": "woman_1", "coord": [13, 2], "source_event": 4, "source_script": "MysteryEventClub_EventScript_Woman"}, + { + "name": "gba_kid", + "coord": [10, 7], + "source_event": 5, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_GBAKid1" + }, + { + "name": "gba_kid", + "coord": [14, 6], + "source_event": 6, + "source_script": "PewterCity_PokemonCenter_1F_EventScript_GBAKid2" + } + ] } diff --git a/data/games/frlg/maps/runtime/RockTunnel_1F.json b/data/games/frlg/maps/runtime/RockTunnel_1F.json index f72fef5..de54d57 100644 --- a/data/games/frlg/maps/runtime/RockTunnel_1F.json +++ b/data/games/frlg/maps/runtime/RockTunnel_1F.json @@ -1,83 +1,166 @@ { - "format": "pokesim-runtime-map/2", - "name": "RockTunnel_1F", - "source": { - "decomp_file": "data/maps/RockTunnel_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "RockTunnel_1F", + "source": { + "decomp_file": "data/maps/RockTunnel_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/RockTunnel_1F/map.json", + "events_sha256": "bf89c9e78f7373691783428c0143b6ecaa52be67edf508859ec175c79701a468", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" }, - "tiles": [ - "~~#####################~~~~~~~~~~~~~~~~~~######~", - "~~#~~~################~~~~~~~~~~~~~~~~~~~###~~#~", - "~~#~.~~#########~.~~~#~~~~~~~~~~~~~~~~~~~#~~~.#~", - "~~#~~~~~########~~~~~###################~#~~~~#~", - "~~#~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", - "###~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", - "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", - "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", - "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", - "#~~~~~~~~~~~############~~~~##############~~~~#~", - "#~~~~~###~~~############~~~~##############~~~~#~", - "#~~~~~###~~~~###########~~~~##############~~~~#~", - "#~~~~~###~~~~#####~~~###~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~~####~~~###~~~~.###~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~####~~~~###~~~~~#####~~~~~~~~~~~~~~~~~~~##~", - "#~~~~~####~~~###~~~~~#####~#~~~~~~~~~~~~~~#####~", - "#~~~~####~~~~~~~~~~~~##########################~", - "#~~~~~###~~~~~~~~~~~~##########################~", - "#~~~~~###~~~~~~~~~~~~##########################~", - "#~~~~####~~~~~~~~~~~~~~~~#####~~~#~~#####~~~###~", - "#~~~~~###~~~~~~~~~~~~~~~~####~~~~~~~####~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~.#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~####~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~#########~~~~~~~~###~~~~~~~#~", - "############################~~~~~~~~###~~~~~~~#~", - "############################~~~~~~~~###~~~~~~~#~", - "############################~~~~~~~~###~~~~~~##~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~#~#~", - "############~~~~~~~~~~~########~~~~~~~~~~~~####~", - "############~~S~~~~~~~~########~~~~~~~~~~~~##~#~", - "############~~~~~~~#~~~##########~~~~~~~~~~~~~#~", - "############~~~~~~~~~~~########~###~~~~~~~~~~~#~", - "############~#~~~~~~#~~########################~", - "############~~~#~~.~~#~########################~", - "###############################################~", - "################################################" - ], - "points": { - "warp_0": [17, 2], - "warp_1": [45, 2], - "warp_2": [4, 2], - "warp_3": [20, 13], - "warp_4": [45, 21], - "warp_5": [18, 37] + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "~~#####################~~~~~~~~~~~~~~~~~~######~", + "~~#~~~################~~~~~~~~~~~~~~~~~~~###~~#~", + "~~#~.~~#########~.~~~#~~~~~~~~~~~~~~~~~~~#~~~.#~", + "~~#~~~~~########~~~~~###################~#~~~~#~", + "~~#~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", + "###~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", + "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", + "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", + "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", + "#~~~~~~~~~~~############~~~~##############~~~~#~", + "#~~~~~###~~~############~~~~##############~~~~#~", + "#~~~~~###~~~~###########~~~~##############~~~~#~", + "#~~~~~###~~~~#####~~~###~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~~####~~~###~~~~.###~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~####~~~~###~~~~~#####~~~~~~~~~~~~~~~~~~~##~", + "#~~~~~####~~~###~~~~~#####~#~~~~~~~~~~~~~~#####~", + "#~~~~####~~~~~~~~~~~~##########################~", + "#~~~~~###~~~~~~~~~~~~##########################~", + "#~~~~~###~~~~~~~~~~~~##########################~", + "#~~~~####~~~~~~~~~~~~~~~~#####~~~#~~#####~~~###~", + "#~~~~~###~~~~~~~~~~~~~~~~####~~~~~~~####~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~.#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~####~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~#########~~~~~~~~###~~~~~~~#~", + "############################~~~~~~~~###~~~~~~~#~", + "############################~~~~~~~~###~~~~~~~#~", + "############################~~~~~~~~###~~~~~~##~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~#~#~", + "############~~~~~~~~~~~########~~~~~~~~~~~~####~", + "############~~S~~~~~~~~########~~~~~~~~~~~~##~#~", + "############~~~~~~~#~~~##########~~~~~~~~~~~~~#~", + "############~~~~~~~~~~~########~###~~~~~~~~~~~#~", + "############~#~~~~~~#~~########################~", + "############~~~#~~.~~#~########################~", + "###############################################~", + "################################################" + ], + "points": { + "warp_0": [17, 2], + "warp_1": [45, 2], + "warp_2": [4, 2], + "warp_3": [20, 13], + "warp_4": [45, 21], + "warp_5": [18, 37] + }, + "warps": [ + {"coord": [17, 2], "enter": "step_on", "to_map": "Route10", "to_point": "warp_0"}, + {"coord": [45, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_0"}, + {"coord": [4, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_1"}, + {"coord": [20, 13], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_2"}, + {"coord": [45, 21], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_3"}, + {"coord": [18, 37], "enter": "walk_south", "to_map": "Route10", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "picnicker", + "coord": [26, 28], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "RockTunnel_1F_EventScript_Dana" }, - "warps": [ - {"coord": [17, 2], "enter": "step_on", "to_map": "Route10", "to_point": "warp_0"}, - {"coord": [45, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_0"}, - {"coord": [4, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_1"}, - {"coord": [20, 13], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_2"}, - {"coord": [45, 21], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_3"}, - {"coord": [18, 37], "enter": "walk_south", "to_map": "Route10", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "picnicker", "coord": [26, 28], "facing": "south", "trainer": {"sight": 3}}, - {"name": "picnicker", "coord": [39, 27], "facing": "east", "trainer": {"sight": 4}}, - {"name": "picnicker", "coord": [45, 24], "facing": "west", "trainer": {"sight": 5}}, - {"name": "hiker", "coord": [20, 17], "facing": "west", "trainer": {"sight": 4}}, - {"name": "hiker", "coord": [5, 20], "facing": "south", "trainer": {"sight": 4}}, - {"name": "hiker", "coord": [7, 5], "facing": "south", "trainer": {"sight": 4}}, - {"name": "poke_maniac", "coord": [27, 10], "facing": "west", "trainer": {"sight": 3}} - ], - "items": [ - {"name": "item_ball", "coord": [37, 5], "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_REPEL"}, - {"name": "item_ball", "coord": [33, 22], "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_PEARL"}, - {"name": "item_ball", "coord": [22, 22], "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_ESCAPE_ROPE"} - ] + { + "name": "picnicker", + "coord": [39, 27], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "RockTunnel_1F_EventScript_Ariana" + }, + { + "name": "picnicker", + "coord": [45, 24], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 2, + "source_script": "RockTunnel_1F_EventScript_Leah" + }, + { + "name": "hiker", + "coord": [20, 17], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 3, + "source_script": "RockTunnel_1F_EventScript_Lucas" + }, + { + "name": "hiker", + "coord": [5, 20], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 4, + "source_script": "RockTunnel_1F_EventScript_Oliver" + }, + { + "name": "hiker", + "coord": [7, 5], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 5, + "source_script": "RockTunnel_1F_EventScript_Lenny" + }, + { + "name": "poke_maniac", + "coord": [27, 10], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 6, + "source_script": "RockTunnel_1F_EventScript_Ashton" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [37, 5], + "source_event": 7, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_REPEL", + "source_script": "RockTunnel_1F_EventScript_ItemRepel", + "item": "repel" + }, + { + "name": "item_ball", + "coord": [33, 22], + "source_event": 8, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_PEARL", + "source_script": "RockTunnel_1F_EventScript_ItemPearl", + "item": "pearl" + }, + { + "name": "item_ball", + "coord": [22, 22], + "source_event": 9, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_ESCAPE_ROPE", + "source_script": "RockTunnel_1F_EventScript_ItemEscapeRope", + "item": "escape_rope" + } + ] } diff --git a/data/games/frlg/maps/runtime/RockTunnel_B1F.json b/data/games/frlg/maps/runtime/RockTunnel_B1F.json index 5fa2933..ff7105b 100644 --- a/data/games/frlg/maps/runtime/RockTunnel_B1F.json +++ b/data/games/frlg/maps/runtime/RockTunnel_B1F.json @@ -1,95 +1,267 @@ { - "format": "pokesim-runtime-map/2", - "name": "RockTunnel_B1F", - "source": { - "decomp_file": "data/maps/RockTunnel_B1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "###############################################~", - "###~~###~~~~####~~~~~##~#~~#######~~~~~~~#~####~", - "#~#~~###~~~~#####~~~~~#~~~~#####~#~~~~~~~~~~#~#~", - "#~.~~###~~~~####~~~~~~~~~~~~###~~.~~~~~~~~~~~##~", - "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~~~~~~~##~", - "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~#~~~~~##~", - "#~~~~####~~~###~~~~~###~~~~~###~~~~~######~~~~#~", - "#~~~~###~~~####~~~~~###~~~~~###~~~~#######~~~~#~", - "#~~~~###~~~####~~~~~###########~~~~########~~~#~", - "#~~~~###~~~~###~~~~~###########~~~~########~~~#~", - "#~~~~###~~~####~~~~~###########~~~~~#######~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~####~~~~~~~####~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~.####~~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~########~~~~~~~~~~#~", - "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", - "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", - "#~~~~###~~~~~~~~~~~~##################~~~~~~~##~", - "#~~~~###~~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~~~###~", - "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~#~###~", - "#~~~~####~~~###~~~~~###~~~~~~~#################~", - "##~~~#####~~###~~~~~###~~~~~~~#################~", - "########~~~~###~~~~~###~~~~~~~#################~", - "########~~~~###########~~~~~~~#####~~~~~#~#####~", - "########~~~~###########~~~~~~~####~~~#~~~~~~###~", - "########~~~~###########~~~~~~~###~~~~~#~~~~~###~", - "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~.~~~~~~##~", - "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~~~~~~~~##~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", - "#~~~~~~~~~#####~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", - "###############~~~~##############~~~~~~~~~~~~##~", - "###############~~~###############~~~~~~~~~~~~~#~", - "###############~~~###############~~~~~~~~~~~~~#~", - "#~~~~~~##~#~~~~~~~~~#~~~~####~~##~~~~~~~~~~~#~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##~~~~~~~~~~~~~#~", - "###############################################~" - ], - "points": { - "warp_0": [38, 28], - "warp_1": [33, 3], - "warp_2": [27, 12], - "warp_3": [2, 3] - }, - "warps": [ - {"coord": [38, 28], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_1"}, - {"coord": [33, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_2"}, - {"coord": [27, 12], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_3"}, - {"coord": [2, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_4"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "poke_maniac", "coord": [2, 6], "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}}, - {"name": "hiker", "coord": [5, 11], "facing": "south", "trainer": {"sight": 4}}, - {"name": "picnicker", "coord": [11, 15], "facing": "south", "trainer": {"sight": 4}}, - {"name": "hiker", "coord": [36, 11], "facing": "south", "trainer": {"sight": 3}}, - {"name": "hiker", "coord": [41, 5], "facing": "east", "trainer": {"sight": 3}}, - {"name": "poke_maniac", "coord": [23, 23], "facing": "east", "trainer": {"sight": 4}}, - {"name": "picnicker", "coord": [15, 33], "facing": "east", "trainer": {"sight": 2}}, - {"name": "poke_maniac", "coord": [29, 35], "facing": "south", "trainer": {"sight": 3}}, - {"name": "youngster", "coord": [2, 29]}, - {"name": "rock_smash_rock", "coord": [1, 20], "hide_flag": "FLAG_TEMP_12"}, - {"name": "rock_smash_rock", "coord": [1, 22], "hide_flag": "FLAG_TEMP_13"}, - {"name": "rock_smash_rock", "coord": [4, 23], "hide_flag": "FLAG_TEMP_14"}, - {"name": "rock_smash_rock", "coord": [2, 23], "hide_flag": "FLAG_TEMP_15"}, - {"name": "rock_smash_rock", "coord": [39, 26], "hide_flag": "FLAG_TEMP_16"}, - {"name": "rock_smash_rock", "coord": [42, 26], "hide_flag": "FLAG_TEMP_17"}, - {"name": "rock_smash_rock", "coord": [43, 28], "hide_flag": "FLAG_TEMP_18"}, - {"name": "rock_smash_rock", "coord": [45, 30], "hide_flag": "FLAG_TEMP_19"}, - {"name": "rock_smash_rock", "coord": [45, 33], "hide_flag": "FLAG_TEMP_1A"}, - {"name": "rock_smash_rock", "coord": [25, 1], "hide_flag": "FLAG_TEMP_1B"}, - {"name": "rock_smash_rock", "coord": [27, 4], "hide_flag": "FLAG_TEMP_1C"}, - {"name": "rock_smash_rock", "coord": [23, 2], "hide_flag": "FLAG_TEMP_1D"}, - {"name": "rock_smash_rock", "coord": [26, 2], "hide_flag": "FLAG_TEMP_1E"}, - {"name": "rock_smash_rock", "coord": [24, 7], "hide_flag": "FLAG_TEMP_1F"}, - {"name": "rock_smash_rock", "coord": [27, 6], "hide_flag": "FLAG_TEMP_11"} - ], - "items": [ - {"name": "item_ball", "coord": [2, 37], "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_REVIVE"}, - {"name": "item_ball", "coord": [9, 2], "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_MAX_ETHER"} - ] + "format": "pokesim-runtime-map/2", + "name": "RockTunnel_B1F", + "source": { + "decomp_file": "data/maps/RockTunnel_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/RockTunnel_B1F/map.json", + "events_sha256": "668c7ede675ec83008984303faafef1d0b4d6ec5f11bcfb852e73a6280ad3cb8", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############################################~", + "###~~###~~~~####~~~~~##~#~~#######~~~~~~~#~####~", + "#~#~~###~~~~#####~~~~~#~~~~#####~#~~~~~~~~~~#~#~", + "#~.~~###~~~~####~~~~~~~~~~~~###~~.~~~~~~~~~~~##~", + "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~~~~~~~##~", + "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~#~~~~~##~", + "#~~~~####~~~###~~~~~###~~~~~###~~~~~######~~~~#~", + "#~~~~###~~~####~~~~~###~~~~~###~~~~#######~~~~#~", + "#~~~~###~~~####~~~~~###########~~~~########~~~#~", + "#~~~~###~~~~###~~~~~###########~~~~########~~~#~", + "#~~~~###~~~####~~~~~###########~~~~~#######~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~####~~~~~~~####~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~.####~~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~########~~~~~~~~~~#~", + "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", + "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", + "#~~~~###~~~~~~~~~~~~##################~~~~~~~##~", + "#~~~~###~~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~~~###~", + "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~#~###~", + "#~~~~####~~~###~~~~~###~~~~~~~#################~", + "##~~~#####~~###~~~~~###~~~~~~~#################~", + "########~~~~###~~~~~###~~~~~~~#################~", + "########~~~~###########~~~~~~~#####~~~~~#~#####~", + "########~~~~###########~~~~~~~####~~~#~~~~~~###~", + "########~~~~###########~~~~~~~###~~~~~#~~~~~###~", + "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~.~~~~~~##~", + "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~~~~~~~~##~", + "#~~~~~~~~~~~###~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", + "#~~~~~~~~~#####~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", + "###############~~~~##############~~~~~~~~~~~~##~", + "###############~~~###############~~~~~~~~~~~~~#~", + "###############~~~###############~~~~~~~~~~~~~#~", + "#~~~~~~##~#~~~~~~~~~#~~~~####~~##~~~~~~~~~~~#~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", + "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##~~~~~~~~~~~~~#~", + "###############################################~" + ], + "points": {"warp_0": [38, 28], "warp_1": [33, 3], "warp_2": [27, 12], "warp_3": [2, 3]}, + "warps": [ + {"coord": [38, 28], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_1"}, + {"coord": [33, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_2"}, + {"coord": [27, 12], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_3"}, + {"coord": [2, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "poke_maniac", + "coord": [2, 6], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "RockTunnel_B1F_EventScript_Cooper" + }, + { + "name": "hiker", + "coord": [5, 11], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "RockTunnel_B1F_EventScript_Dudley" + }, + { + "name": "picnicker", + "coord": [11, 15], + "facing": "south", + "trainer": {"sight": 4}, + "source_event": 2, + "source_script": "RockTunnel_B1F_EventScript_Sofia" + }, + { + "name": "hiker", + "coord": [36, 11], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "RockTunnel_B1F_EventScript_Allen" + }, + { + "name": "hiker", + "coord": [41, 5], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "RockTunnel_B1F_EventScript_Eric" + }, + { + "name": "poke_maniac", + "coord": [23, 23], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 5, + "source_script": "RockTunnel_B1F_EventScript_Steve" + }, + { + "name": "picnicker", + "coord": [15, 33], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 6, + "source_script": "RockTunnel_B1F_EventScript_Martha" + }, + { + "name": "poke_maniac", + "coord": [29, 35], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 7, + "source_script": "RockTunnel_B1F_EventScript_Winston" + }, + { + "name": "youngster", + "coord": [2, 29], + "source_event": 8, + "source_script": "RockTunnel_B1F_EventScript_RockSlideTutor" + }, + { + "name": "rock_smash_rock", + "coord": [1, 20], + "hide_flag": "FLAG_TEMP_12", + "source_event": 11, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [1, 22], + "hide_flag": "FLAG_TEMP_13", + "source_event": 12, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [4, 23], + "hide_flag": "FLAG_TEMP_14", + "source_event": 13, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [2, 23], + "hide_flag": "FLAG_TEMP_15", + "source_event": 14, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [39, 26], + "hide_flag": "FLAG_TEMP_16", + "source_event": 15, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [42, 26], + "hide_flag": "FLAG_TEMP_17", + "source_event": 16, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [43, 28], + "hide_flag": "FLAG_TEMP_18", + "source_event": 17, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [45, 30], + "hide_flag": "FLAG_TEMP_19", + "source_event": 18, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [45, 33], + "hide_flag": "FLAG_TEMP_1A", + "source_event": 19, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [25, 1], + "hide_flag": "FLAG_TEMP_1B", + "source_event": 20, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [27, 4], + "hide_flag": "FLAG_TEMP_1C", + "source_event": 21, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [23, 2], + "hide_flag": "FLAG_TEMP_1D", + "source_event": 22, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [26, 2], + "hide_flag": "FLAG_TEMP_1E", + "source_event": 23, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [24, 7], + "hide_flag": "FLAG_TEMP_1F", + "source_event": 24, + "source_script": "EventScript_RockSmash" + }, + { + "name": "rock_smash_rock", + "coord": [27, 6], + "hide_flag": "FLAG_TEMP_11", + "source_event": 25, + "source_script": "EventScript_RockSmash" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [2, 37], + "source_event": 9, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_REVIVE", + "source_script": "RockTunnel_B1F_EventScript_ItemRevive", + "item": "revive" + }, + { + "name": "item_ball", + "coord": [9, 2], + "source_event": 10, + "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_MAX_ETHER", + "source_script": "RockTunnel_B1F_EventScript_ItemMaxEther", + "item": "max_ether" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route1.json b/data/games/frlg/maps/runtime/Route1.json index 12b9585..bf307f7 100644 --- a/data/games/frlg/maps/runtime/Route1.json +++ b/data/games/frlg/maps/runtime/Route1.json @@ -1,59 +1,75 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route1", - "source": { - "decomp_file": "data/maps/Route1/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route1", + "source": { + "decomp_file": "data/maps/Route1/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "##########....##########", + "##########....##########", + "##....................##", + "##....................##", + "##......##............##", + "##vvvvvv##vvvvvv......##", + "##......##~~~~~~~~~~~~##", + "##......##~~~~~~~~~~~~##", + "##......##~~~~~~~~~~~~##", + "##......##~~~~~~~~~~~~##", + "##vvvvvv##~~~~~~~~~~~~##", + "##......##............##", + "##....................##", + "##..............~~~~~~##", + "##..............~~~~~~##", + "####vvvvvv######~~~~~~##", + "####......######~~~~~~##", + "##..............~~~~~~##", + "##....................##", + "##....................##", + "##vv.vvvv..vvvvvvvvvvv##", + "##....................##", + "##....................##", + "##....................##", + "##..........~~~~~~....##", + "############~~~~~~....##", + "############~~~~~~vvvv##", + "##..........~~~~~~....##", + "##..........~~~~~~....##", + "##....................##", + "##....................##", + "##vvvv...Svvvvvvvvvvvv##", + "##..~~~~~~~......~~~~~##", + "##..~~~~~~~......~~~~~##", + "##~~~~~~~......~~~~~..##", + "##~~~~~~~...~~.~~~~~..##", + "############~~##########", + "##.........#~~#.......##", + "############~~##########", + "############~~##########" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "ViridianCity", "offset": -12}, + {"side": "south", "to_map": "PalletTown", "offset": 0} + ], + "npcs": [ + { + "name": "clerk", + "coord": [6, 28], + "wander": {"min": [6, 27], "max": [6, 29]}, + "source_event": 0, + "source_script": "Route1_EventScript_MartClerk" }, - "tiles": [ - "##########....##########", - "##########....##########", - "##....................##", - "##....................##", - "##......##............##", - "##vvvvvv##vvvvvv......##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##vvvvvv##~~~~~~~~~~~~##", - "##......##............##", - "##....................##", - "##..............~~~~~~##", - "##..............~~~~~~##", - "####vvvvvv######~~~~~~##", - "####......######~~~~~~##", - "##..............~~~~~~##", - "##....................##", - "##....................##", - "##vv.vvvv..vvvvvvvvvvv##", - "##....................##", - "##....................##", - "##....................##", - "##..........~~~~~~....##", - "############~~~~~~....##", - "############~~~~~~vvvv##", - "##..........~~~~~~....##", - "##..........~~~~~~....##", - "##....................##", - "##....................##", - "##vvvv...Svvvvvvvvvvvv##", - "##..~~~~~~~......~~~~~##", - "##..~~~~~~~......~~~~~##", - "##~~~~~~~......~~~~~..##", - "##~~~~~~~...~~.~~~~~..##", - "############~~##########", - "##.........#~~#.......##", - "############~~##########", - "############~~##########" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [{"side": "north", "to_map": "ViridianCity", "offset": -12}, {"side": "south", "to_map": "PalletTown", "offset": 0}], - "npcs": [ - {"name": "clerk", "coord": [6, 28], "wander": {"min": [6, 27], "max": [6, 29]}}, - {"name": "boy", "coord": [19, 16], "wander": {"min": [18, 16], "max": [20, 16]}} - ] + { + "name": "boy", + "coord": [19, 16], + "wander": {"min": [18, 16], "max": [20, 16]}, + "source_event": 1, + "source_script": "Route1_EventScript_Boy" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route10.json b/data/games/frlg/maps/runtime/Route10.json index 90d5d94..f10bf5d 100644 --- a/data/games/frlg/maps/runtime/Route10.json +++ b/data/games/frlg/maps/runtime/Route10.json @@ -1,204 +1,262 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route10", - "source": { - "decomp_file": "data/maps/Route10/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route10", + "source": { + "decomp_file": "data/maps/Route10/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "########################", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##.................www##", + "####..#############www##", + "##....~~~~~~~~~~~.#www##", + "##....~~~~~~~~~~~.#www##", + "......~~~~~~~~~~~.#www##", + "......~~~~~~~~~~~.#www##", + "......~~~~~~~~~~~.#www##", + "##................#www##", + "##vvvvvvvvvvvvv..##www##", + "##................#www##", + "##................#www##", + "###########.......#www##", + "###########.......#www##", + "################..#www##", + "################..#www##", + "########.#######..#www##", + "##.........SSD##..#www##", + "##..###S##........#www##", + "##................#www##", + "##........#.......#www##", + "##................#www##", + "##........#.......#www##", + "##................#www##", + "##........#.......#www##", + "##................#www##", + "##................#www##", + "###################www##", + "#################..www##", + "#################..www##", + "#################..www##", + "#################..www##", + "#################..www##", + "#.###############..www##", + "#..##############..www##", + "#..##############..www##", + "#.###############..www##", + "#vv####.####.####..www##", + "#............###...www##", + "##....S......###...www##", + "##...........###...www##", + "##.................www##", + "##.................www##", + "##...............wwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "##wwwwwwwwwwwwwwwwwwww##", + "########################", + "########################", + "########################", + "########################", + "########################", + "########################", + "#################.....##", + "########.########.....##", + "###...................##", + "###............S......##", + "###...................##", + "###.........#####.....##", + "##..........#####v.vvv##", + "##...############.....##", + "##...############.....##", + "##vvv############.....##", + "##...############vvvv.##", + "##...############.....##", + "##....................##", + "##....................##", + "##....................##", + "###########...........##", + "###########...........##", + "###########...........##", + "###########vv.##########", + "###########...##########", + "########......##########", + "########......##########", + "########.....###########", + "########.....###########" + ], + "elevation": [ + "000000000000000000000000", + "001111111111111111111100", + "001111111111111111111100", + "001111111111111111111100", + "003333333333333333311100", + "000033000000000000011100", + "003333333333333333011100", + "003333333333333333011100", + "333333333333333333011100", + "333333333333333333011100", + "333333333333333333011100", + "003333333333333333011100", + "000000000000000330011100", + "003333333333333333011100", + "003333333333333333011100", + "000000000003333333011100", + "000000000003333333011100", + "000000000000000033011100", + "000000000000000033011100", + "000000003000000033011100", + "003333333330000033011100", + "003300000033333333011100", + "003333333333333333011100", + "003333333303333333011100", + "003333333333333333011100", + "003333333303333333011100", + "003333333333333333011100", + "003333333303333333011100", + "003333333333333333011100", + "003333333333333333011100", + "000000000000000000011100", + "000000000000000003311100", + "000000000000000003311100", + "000000000000000003311100", + "000000000000000003311100", + "000000000000000003311100", + "030000000000000003311100", + "033000000000000003311100", + "033000000000000003311100", + "030000000000000003311100", + "000000030000300003311100", + "033333333333300033311100", + "003333033333300033311100", + "003333333333300033311100", + "003333333333333333311100", + "003333333333333333311100", + "003333333333333331111100", + "001111111111111111111100", + "001111111111111111111100", + "001111111111111111111100", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000003333300", + "000000003000000003333300", + "000333333333333333333300", + "000333333333333033333300", + "000333333333333333333300", + "000333333333000003333300", + "003333333333000000300000", + "003330000000000003333300", + "003330000000000003333300", + "000000000000000003333300", + "003330000000000000000300", + "003330000000000003333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000000003333333333300", + "000000000003333333333300", + "000000000003333333333300", + "000000000000030000000000", + "000000000003330000000000", + "000000003333330000000000", + "000000003333330000000000", + "000000003333300000000000", + "000000003333300000000000" + ], + "points": {"warp_0": [8, 19], "warp_1": [8, 57], "warp_2": [7, 40], "warp_3": [13, 20], "warp_4": [2, 37]}, + "warps": [ + {"coord": [8, 19], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_0"}, + {"coord": [8, 57], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_5"}, + {"coord": [7, 40], "enter": "cave_entrance", "to_map": "PowerPlant", "to_point": "warp_1"}, + {"coord": [13, 20], "enter": "walk_into", "to_map": "Route10_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [2, 37], "enter": "walk_east", "to_map": "PowerPlant", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "LavenderTown", "offset": 0}, + {"side": "west", "to_map": "Route9", "offset": 0} + ], + "npcs": [ + { + "name": "picnicker", + "coord": [7, 60], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 0, + "source_script": "Route10_EventScript_Carol" }, - "tiles": [ - "########################", - "##wwwwwwwwwwwwwwwwwwww##", - "##wwwwwwwwwwwwwwwwwwww##", - "##wwwwwwwwwwwwwwwwwwww##", - "##.................www##", - "####..#############www##", - "##....~~~~~~~~~~~.#www##", - "##....~~~~~~~~~~~.#www##", - "......~~~~~~~~~~~.#www##", - "......~~~~~~~~~~~.#www##", - "......~~~~~~~~~~~.#www##", - "##................#www##", - "##vvvvvvvvvvvvv..##www##", - "##................#www##", - "##................#www##", - "###########.......#www##", - "###########.......#www##", - "################..#www##", - "################..#www##", - "########.#######..#www##", - "##.........SSD##..#www##", - "##..###S##........#www##", - "##................#www##", - "##........#.......#www##", - "##................#www##", - "##........#.......#www##", - "##................#www##", - "##........#.......#www##", - "##................#www##", - "##................#www##", - "###################www##", - "#################..www##", - "#################..www##", - "#################..www##", - "#################..www##", - "#################..www##", - "#.###############..www##", - "#..##############..www##", - "#..##############..www##", - "#.###############..www##", - "#vv####.####.####..www##", - "#............###...www##", - "##....S......###...www##", - "##...........###...www##", - "##.................www##", - "##.................www##", - "##...............wwwww##", - "##wwwwwwwwwwwwwwwwwwww##", - "##wwwwwwwwwwwwwwwwwwww##", - "##wwwwwwwwwwwwwwwwwwww##", - "########################", - "########################", - "########################", - "########################", - "########################", - "########################", - "#################.....##", - "########.########.....##", - "###...................##", - "###............S......##", - "###...................##", - "###.........#####.....##", - "##..........#####v.vvv##", - "##...############.....##", - "##...############.....##", - "##vvv############.....##", - "##...############vvvv.##", - "##...############.....##", - "##....................##", - "##....................##", - "##....................##", - "###########...........##", - "###########...........##", - "###########...........##", - "###########vv.##########", - "###########...##########", - "########......##########", - "########......##########", - "########.....###########", - "########.....###########" - ], - "elevation": [ - "000000000000000000000000", - "001111111111111111111100", - "001111111111111111111100", - "001111111111111111111100", - "003333333333333333311100", - "000033000000000000011100", - "003333333333333333011100", - "003333333333333333011100", - "333333333333333333011100", - "333333333333333333011100", - "333333333333333333011100", - "003333333333333333011100", - "000000000000000330011100", - "003333333333333333011100", - "003333333333333333011100", - "000000000003333333011100", - "000000000003333333011100", - "000000000000000033011100", - "000000000000000033011100", - "000000003000000033011100", - "003333333330000033011100", - "003300000033333333011100", - "003333333333333333011100", - "003333333303333333011100", - "003333333333333333011100", - "003333333303333333011100", - "003333333333333333011100", - "003333333303333333011100", - "003333333333333333011100", - "003333333333333333011100", - "000000000000000000011100", - "000000000000000003311100", - "000000000000000003311100", - "000000000000000003311100", - "000000000000000003311100", - "000000000000000003311100", - "030000000000000003311100", - "033000000000000003311100", - "033000000000000003311100", - "030000000000000003311100", - "000000030000300003311100", - "033333333333300033311100", - "003333033333300033311100", - "003333333333300033311100", - "003333333333333333311100", - "003333333333333333311100", - "003333333333333331111100", - "001111111111111111111100", - "001111111111111111111100", - "001111111111111111111100", - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "000000000000000003333300", - "000000003000000003333300", - "000333333333333333333300", - "000333333333333033333300", - "000333333333333333333300", - "000333333333000003333300", - "003333333333000000300000", - "003330000000000003333300", - "003330000000000003333300", - "000000000000000003333300", - "003330000000000000000300", - "003330000000000003333300", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "000000000003333333333300", - "000000000003333333333300", - "000000000003333333333300", - "000000000000030000000000", - "000000000003330000000000", - "000000003333330000000000", - "000000003333330000000000", - "000000003333300000000000", - "000000003333300000000000" - ], - "points": { - "warp_0": [8, 19], - "warp_1": [8, 57], - "warp_3": [13, 20] + { + "name": "hiker", + "coord": [4, 62], + "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "Route10_EventScript_Clark" }, - "warps": [ - {"coord": [8, 19], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_0"}, - {"coord": [8, 57], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_5"}, - {"coord": [7, 40], "enter": "cave_entrance"}, - {"coord": [13, 20], "enter": "walk_into", "to_map": "Route10_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [2, 37], "enter": "walk_east"} - ], - "flag_sets": {}, - "connections": [{"side": "south", "to_map": "LavenderTown", "offset": 0}, {"side": "west", "to_map": "Route9", "offset": 0}], - "npcs": [ - {"name": "picnicker", "coord": [7, 60], "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}}, - {"name": "hiker", "coord": [4, 62], "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}}, - { - "name": "poke_maniac", - "coord": [15, 70], - "wander": {"min": [13, 70], "max": [17, 70]}, - "trainer": {"sight": 2, "looks": ["west", "east"]} - }, - {"name": "hiker", "coord": [4, 68], "facing": "west", "trainer": {"sight": 2}}, - {"name": "poke_maniac", "coord": [13, 44], "facing": "west", "trainer": {"sight": 5}}, - {"name": "picnicker", "coord": [9, 27], "facing": "south", "trainer": {"sight": 2}}, - {"name": "cut_tree", "coord": [10, 20], "hide_flag": "FLAG_TEMP_12"}, - {"name": "cut_tree", "coord": [10, 22], "hide_flag": "FLAG_TEMP_13"}, - {"name": "cut_tree", "coord": [10, 24], "hide_flag": "FLAG_TEMP_14"}, - {"name": "cut_tree", "coord": [10, 26], "hide_flag": "FLAG_TEMP_15"} - ] + { + "name": "poke_maniac", + "coord": [15, 70], + "wander": {"min": [13, 70], "max": [17, 70]}, + "trainer": {"sight": 2, "looks": ["west", "east"]}, + "source_event": 2, + "source_script": "Route10_EventScript_Herman" + }, + { + "name": "hiker", + "coord": [4, 68], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 3, + "source_script": "Route10_EventScript_Trent" + }, + { + "name": "poke_maniac", + "coord": [13, 44], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 4, + "source_script": "Route10_EventScript_Mark" + }, + { + "name": "picnicker", + "coord": [9, 27], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "Route10_EventScript_Heidi" + }, + { + "name": "cut_tree", + "coord": [10, 20], + "hide_flag": "FLAG_TEMP_12", + "source_event": 6, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [10, 22], + "hide_flag": "FLAG_TEMP_13", + "source_event": 7, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [10, 24], + "hide_flag": "FLAG_TEMP_14", + "source_event": 8, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [10, 26], + "hide_flag": "FLAG_TEMP_15", + "source_event": 9, + "source_script": "EventScript_CutTree" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route10_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/Route10_PokemonCenter_1F.json index ba9e00c..a95568a 100644 --- a/data/games/frlg/maps/runtime/Route10_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/Route10_PokemonCenter_1F.json @@ -1,52 +1,78 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route10_PokemonCenter_1F", - "source": { - "decomp_file": "data/maps/Route10_PokemonCenter_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route10_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/Route10_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "Route10", "to_point": "warp_3"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "Route10", "to_point": "warp_3"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "Route10", "to_point": "warp_3"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "Route10_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "Route10_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_ROUTE10_NURSE" }, - "allow_running": false, - "tiles": [ - "#.#############", - "###############", - "....###..##....", - "....#######....", - "...............", - "...............", - "#..........##..", - "...........##..", - "...............", - "###############" - ], - "elevation": [ - "030000000000000", - "000000000000000", - "333300033003333", - "333300000003333", - "333333333333333", - "330333333333333", - "044033333330033", - "330333333330033", - "333333333333333", - "000000000000000" - ], - "points": { - "warp_1": [7, 8] + { + "name": "gentleman", + "coord": [9, 4], + "wander": {"min": [8, 4], "max": [10, 4]}, + "source_event": 1, + "source_script": "Route10_PokemonCenter_1F_EventScript_Gentleman" }, - "warps": [ - {"coord": [6, 8], "enter": "walk_into", "to_map": "Route10", "to_point": "warp_3"}, - {"coord": [7, 8], "enter": "walk_south", "to_map": "Route10", "to_point": "warp_3"}, - {"coord": [8, 8], "enter": "walk_into", "to_map": "Route10", "to_point": "warp_3"}, - {"coord": [1, 6], "enter": "step_on"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "nurse", "coord": [7, 2]}, - {"name": "gentleman", "coord": [9, 4], "wander": {"min": [8, 4], "max": [10, 4]}}, - {"name": "fat_man", "coord": [2, 3], "wander": {"min": [1, 3], "max": [3, 3]}}, - {"name": "youngster", "coord": [14, 6]}, - {"name": "scientist", "coord": [12, 5]} - ] + { + "name": "fat_man", + "coord": [2, 3], + "wander": {"min": [1, 3], "max": [3, 3]}, + "source_event": 2, + "source_script": "Route10_PokemonCenter_1F_EventScript_FatMan" + }, + { + "name": "youngster", + "coord": [14, 6], + "source_event": 3, + "source_script": "Route10_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "scientist", + "coord": [12, 5], + "source_event": 4, + "source_script": "Route10_PokemonCenter_1F_EventScript_Aide" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route11.json b/data/games/frlg/maps/runtime/Route11.json index 9042602..6ff583e 100644 --- a/data/games/frlg/maps/runtime/Route11.json +++ b/data/games/frlg/maps/runtime/Route11.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route11/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "########################################################################", @@ -29,6 +28,28 @@ "##############..........................~~~~~...............############", "##############..........................~~~~~...............############" ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000333333333333333333333333333333333333333333333333000000000000", + "000000000000333333333333333333333333333333333333333333333333000000000000", + "000000330000333333333333333333333333333333333333333333333333000000000000", + "000000330000333333333333333333333333333333333333333333333303000000000000", + "333300000000333333333333333333333333333333333333333333333333000000000000", + "000000300000333333333333333333333333333333333333333333330000000000000000", + "333333333333333333333333333333333333333333333333333333333330000000000000", + "333333333333333333333333333333333333333333333333333333333330000003333333", + "333333333333333333333333333333333333333333333333333333333330000003333333", + "111111111111133333333333333333333333333333333333333333333330000003333333", + "111111111111133333333333333333333333333333333333333333330000000000000000", + "111111111111133333333333333333333333333333333333333333333333333333330000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000333333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000", + "000000000000003333333333333333333333333333333333333333333333000000000000" + ], "points": {"warp_0": [6, 7], "warp_1": [58, 10], "warp_2": [65, 10]}, "warps": [ {"coord": [6, 7], "enter": "cave_entrance", "to_map": "DiglettsCave_SouthEntrance", "to_point": "warp_0"}, diff --git a/data/games/frlg/maps/runtime/Route13.json b/data/games/frlg/maps/runtime/Route13.json index 905bad3..4c4592b 100644 --- a/data/games/frlg/maps/runtime/Route13.json +++ b/data/games/frlg/maps/runtime/Route13.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route13/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "##############################################################..wwwwwwww", @@ -29,6 +28,28 @@ "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000003311110010", + "000000000000000000000000000000000000000000000000000000000000003311110010", + "000000000000000000000000000000000000000000000000000000000000003311110010", + "000000000000000000000000000000000000000000000000000000000000003311110000", + "000000000000000000000000000000000000000000000000000000000000003311100100", + "333333333333333333333333333333333303333333333333333333333333003311100100", + "000000000000000033333300000000033303300000003333333333333333003311100100", + "333333333333333333333303333333333333333333330000333333333333003311100100", + "000000000000033300000003300000000000000000330000333333333333003311110000", + "333333333333333303333333333333333333033333330000000000000000003311110000", + "000000330000000003300000000000000333033000330000000000000000003311110000", + "333333330333333333333333333333033333333333333333333333333333333311110000", + "000000000330000000000000003333033000000000003333333333333333333311100100", + "033333333333333333333303333333333333333333333311111111111111111111100100", + "030000003300000000000003000000000000000000000011111111111111111111100100", + "000000000000000000000000111111111111111111001111111111111111110011100100", + "111111111111111111111111100000000000000111001111110000111111000000001000", + "111000000000000000000000000000000000000001110000000000001100001100001000", + "100000000000000000000000000000000000000000010000001111000000111110000000", + "100000000000000000000000000000000000000000000000000000110011000000000000" + ], "points": {}, "warps": [], "flag_sets": {}, diff --git a/data/games/frlg/maps/runtime/Route14.json b/data/games/frlg/maps/runtime/Route14.json index fe3ec8c..19d1636 100644 --- a/data/games/frlg/maps/runtime/Route14.json +++ b/data/games/frlg/maps/runtime/Route14.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route14/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "########################", @@ -69,6 +68,68 @@ "######################ww", "######################ww" ], + "elevation": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000033333333333333333", + "000000033000000000000000", + "000000033333333333333333", + "000000000000000000330000", + "000000033333333333333333", + "000000000330000000000000", + "000000033333333333333333", + "000000000000003330000000", + "000000033333333333333333", + "000000033333333330000000", + "000000033333333330000000", + "000000033333333330000000", + "000000000000033330000000", + "000000000000033330000000", + "000000033333003330000000", + "000000033333003330000000", + "000000033333003330000000", + "000000033333003330000000", + "000000033333003330111111", + "000000033333003330110000", + "000000033333003330110000", + "000000030000003330110000", + "000000033333003330110000", + "000000033333003330111000", + "000000033333003330111110", + "000000033333003330333310", + "000000033333003330000010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333333333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "000000033333003333333010", + "003333333333003333333010", + "003333333333333333333010", + "333333333333333333333010", + "303333333333333333333010", + "003333333333333333333010", + "333333333333333333333010", + "333333333333333333333033", + "333333333333333333333033", + "333333333333333333333033", + "333333333333333333333033", + "000000000000000000000033", + "333333333333333333333333", + "000000000000000000000010", + "000000000000000000000010", + "000000000000000000000010" + ], "points": {}, "warps": [], "flag_sets": {}, diff --git a/data/games/frlg/maps/runtime/Route16.json b/data/games/frlg/maps/runtime/Route16.json index a0e2371..87c6ac1 100644 --- a/data/games/frlg/maps/runtime/Route16.json +++ b/data/games/frlg/maps/runtime/Route16.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route16/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + "date": "2026-10-31" }, "tiles": [ "ww##############################################", @@ -29,6 +28,28 @@ "w#.............#################################", "w#.............#################################" ], + "elevation": [ + "010000000000000000000000000000000000000000000000", + "010000000000000000000000000000000000000000000000", + "010000000000000000000000000000000000000000000000", + "030000000033300000000000000000000000000000000000", + "100000000000000000000000000000000000000000000000", + "103333333000003333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "103333333333333333333000000333333333333333000000", + "100000000000000000000000000000333333333333000000", + "103333333333333333333000000330000000000003000000", + "103333333333333333333000000333000333333333333333", + "103333333333333333333033330333333333333333333333", + "103333333333333333333000000333000333333333333333", + "103333333333333000000000000000000000000000000000", + "103333333333333000000000000000000000000000000000", + "103333033333333000000000000000000000000000000000", + "103333333333333000000000000000000000000000000000", + "103333333333333000000000000000000000000000000000" + ], "points": {"warp_0": [10, 5], "warp_1": [20, 6], "warp_2": [27, 6], "warp_3": [20, 13], "warp_4": [27, 13]}, "warps": [ {"coord": [10, 5], "enter": "walk_into", "to_map": "Route16_House", "to_point": "warp_1"}, diff --git a/data/games/frlg/maps/runtime/Route18.json b/data/games/frlg/maps/runtime/Route18.json index e3920c7..e3364ec 100644 --- a/data/games/frlg/maps/runtime/Route18.json +++ b/data/games/frlg/maps/runtime/Route18.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route18/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "wwwwwww#.........#wwwwwwwwwwwwww############################", @@ -29,6 +28,28 @@ "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##########wwwwww######", "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww######" ], + "elevation": [ + "000110003333333330001100000000110000000000000000000000000000", + "000110003333333330000010000000110000000000000000000000000000", + "000001103333333330110010000001110000000000000000000000000000", + "001001103333333330111100001100000000000000000000000000000000", + "000011103333333330111100000000000000000000000000000000000000", + "010011103333333330111111110011110000000000000000000000000000", + "000111103333333330111111111111110000000000000000000000000000", + "000111103333333333333333333333330000000003000000333300000000", + "010011103333333333333333333333333333333333000000333333333333", + "010011103333333333333333333333333333333333000000333333333333", + "010011103333333333333333333333333333333333000000333333333333", + "010011111111111111111111111111111111110000000000330000000000", + "010011111111111111111111111111111110010333333333330000000000", + "010011111111111111111111111111111110010333333333330000000000", + "001100111110000111111111111111111111110333333330000000000000", + "000100001110000111111111000011000011000333333330000000000000", + "000111000000111111000000000000000000000333333330000000000000", + "000011110000000000000000111100111100110333333330000000000000", + "000000001111000000111000000000000010010000000000111111000000", + "000000000000000000000000000000000000011111111111100001000000" + ], "points": {"warp_0": [41, 9], "warp_1": [48, 9]}, "warps": [ {"coord": [41, 9], "enter": "walk_east", "to_map": "Route18_EastEntrance_1F", "to_point": "warp_0"}, diff --git a/data/games/frlg/maps/runtime/Route19.json b/data/games/frlg/maps/runtime/Route19.json index b70ec19..072a041 100644 --- a/data/games/frlg/maps/runtime/Route19.json +++ b/data/games/frlg/maps/runtime/Route19.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route19/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "#######..........#######", @@ -69,6 +68,68 @@ "wwwwwwwwwwwwwwwwwwwwwwww", "wwwwwwwwwwwwwwwwwwwwwwww" ], + "elevation": [ + "000000033333333330000000", + "000000033333333330000000", + "000000033333330330000000", + "000000000000000330000000", + "000000033333330330000000", + "000000000000000330000000", + "000000033333330330000000", + "000000000000000330000000", + "000000033333333330000000", + "111110013333333310011111", + "001110013333333310011000", + "000010013333333310010000", + "000010011333303310010000", + "000010011113333310010000", + "000010011111111110000100", + "000100111111111111100100", + "000100111111111111100100", + "000001111111111111100100", + "000000011111111111000010", + "001110011111111111000010", + "001001111111111111111000", + "011001111111111111111000", + "000111111111111111111000", + "000100111111111111111001", + "000100111111111111111100", + "000111111111111111111100", + "001111111111111111100100", + "001111111111111100100100", + "100111111111111100111100", + "100111111111111111111100", + "001111111111111111111001", + "001111111111111111111001", + "100111110011111111111100", + "100111110011111111111100", + "100111111111111111111001", + "100111111111111111001001", + "001110011111111111000010", + "001110011111111111110010", + "001111111111111110000110", + "001111111111111110000110", + "001001111111111111110010", + "001001111111111111110010", + "111111111111111111111100", + "111111111111111111111100", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111111001", + "111111111111111111110011", + "111111111111111111000010", + "111111111111111111001000", + "111001111111111111111000", + "111001111111100111100110", + "111111110011100110000110", + "111111110011111110011000", + "110000001100001100111000", + "000000000000000000100000", + "001000010011110010000000" + ], "points": {}, "warps": [], "flag_sets": {}, diff --git a/data/games/frlg/maps/runtime/Route2.json b/data/games/frlg/maps/runtime/Route2.json index 9c58152..7b34b3c 100644 --- a/data/games/frlg/maps/runtime/Route2.json +++ b/data/games/frlg/maps/runtime/Route2.json @@ -1,132 +1,177 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route2", - "source": { - "decomp_file": "data/maps/Route2/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route2", + "source": { + "decomp_file": "data/maps/Route2/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route2/map.json", + "events_sha256": "2562e3736b600c95b8c0a4c2a1bb3fb062f5c50208bebc43cd4303328ccda7ea", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" }, - "tiles": [ - "########....############", - "########....############", - "##~~~~~~~...############", - "##~~~~~~~...#.........##", - "##~~~~~~~...#.........##", - "##~~~~~~~...#.........##", - "##~~~~~~~...#########.##", - "##~~~~~~~...#########.##", - "##~~~~~~~...#########.##", - "##..........#########.##", - "##..........#########.##", - "##..........#####.###.##", - "##..........#.S.......##", - "####....###.#.........##", - "###########...........##", - "##########............##", - "##############........##", - "##############........##", - "##############........##", - "##############........##", - "##############........##", - "###################...##", - "#################D#...##", - "##############........##", - "################......##", - "################......##", - "##################.#####", - "################......##", - "################......##", - "################......##", - "################......##", - "################......##", - "################vvv.vv##", - "################......##", - "################......##", - "################......##", - "################......##", - "################vvv.vv##", - "################......##", - "################......##", - "################......##", - "#################....###", - "########################", - "########################", - "########################", - "##........##############", - "##################..####", - "#################....###", - "################......##", - "################......##", - "###.####.#######......##", - "#####..#########vvv.vv##", - "####....########......##", - "##............##......##", - "##............##......##", - "##vvvvvvvvv...##......##", - "##....~~~~~~~.##......##", - "##....~~~~~~~.##vv.vvv##", - "##....~~~~~~~.##......##", - "##....~~~~~~~.##......##", - "##....~~~~~~~.##......##", - "##............##......##", - "##....................##", - "##....##########......##", - "##....##########......##", - "##....##########......##", - "##....##########......##", - "##............##......##", - "##............##......##", - "##....................##", - "##vvvvvvv..vvv..vv.vvv##", - "##............##......##", - "####..........##......##", - "####...S......##......##", - "####..........##......##", - "####..........##......##", - "####..........##......##", - "####..........##......##", - "#######.......##########", - "#######.....############" - ], - "points": { - "warp_0": [5, 13], - "warp_2": [5, 51] + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########....############", + "########....############", + "##~~~~~~~...############", + "##~~~~~~~...#.........##", + "##~~~~~~~...#.........##", + "##~~~~~~~...#.........##", + "##~~~~~~~...#########.##", + "##~~~~~~~...#########.##", + "##~~~~~~~...#########.##", + "##..........#########.##", + "##..........#########.##", + "##..........#####.###.##", + "##..........#.S.......##", + "####....###.#.........##", + "###########...........##", + "##########............##", + "##############........##", + "##############........##", + "##############........##", + "##############........##", + "##############........##", + "###################...##", + "#################D#...##", + "##############........##", + "################......##", + "################......##", + "##################.#####", + "################......##", + "################......##", + "################......##", + "################......##", + "################......##", + "################vvv.vv##", + "################......##", + "################......##", + "################......##", + "################......##", + "################vvv.vv##", + "################......##", + "################......##", + "################......##", + "#################....###", + "########################", + "########################", + "########################", + "##........##############", + "##################..####", + "#################....###", + "################......##", + "################......##", + "###.####.#######......##", + "#####..#########vvv.vv##", + "####....########......##", + "##............##......##", + "##............##......##", + "##vvvvvvvvv...##......##", + "##....~~~~~~~.##......##", + "##....~~~~~~~.##vv.vvv##", + "##....~~~~~~~.##......##", + "##....~~~~~~~.##......##", + "##....~~~~~~~.##......##", + "##............##......##", + "##....................##", + "##....##########......##", + "##....##########......##", + "##....##########......##", + "##....##########......##", + "##............##......##", + "##............##......##", + "##....................##", + "##vvvvvvv..vvv..vv.vvv##", + "##............##......##", + "####..........##......##", + "####...S......##......##", + "####..........##......##", + "####..........##......##", + "####..........##......##", + "####..........##......##", + "#######.......##########", + "#######.....############" + ], + "points": { + "warp_0": [5, 13], + "warp_2": [5, 51], + "warp_3": [17, 11], + "warp_4": [17, 22], + "warp_5": [18, 46], + "warp_6": [18, 41] + }, + "warps": [ + {"coord": [5, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, + {"coord": [6, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, + {"coord": [5, 51], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_1"}, + {"coord": [17, 11], "enter": "cave_entrance", "to_map": "DiglettsCave_NorthEntrance", "to_point": "warp_1"}, + {"coord": [17, 22], "enter": "walk_into", "to_map": "Route2_House", "to_point": "warp_1"}, + {"coord": [18, 46], "enter": "cave_entrance", "to_map": "Route2_EastBuilding", "to_point": "warp_1"}, + {"coord": [18, 41], "enter": "walk_south", "to_map": "Route2_EastBuilding", "to_point": "warp_3"}, + {"coord": [19, 41], "enter": "walk_south", "to_map": "Route2_EastBuilding", "to_point": "warp_3"}, + {"coord": [19, 46], "enter": "cave_entrance", "to_map": "Route2_EastBuilding", "to_point": "warp_1"}, + {"coord": [6, 51], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "PewterCity", "offset": -12}, + {"side": "south", "to_map": "ViridianCity", "offset": -12} + ], + "npcs": [ + { + "name": "cut_tree", + "coord": [16, 62], + "hide_flag": "FLAG_TEMP_14", + "source_event": 0, + "source_script": "EventScript_CutTree" }, - "warps": [ - {"coord": [5, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, - {"coord": [6, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, - { - "coord": [5, 51], - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_1" - }, - {"coord": [17, 11], "enter": "cave_entrance"}, - {"coord": [17, 22], "enter": "walk_into"}, - {"coord": [18, 46], "enter": "cave_entrance"}, - {"coord": [18, 41], "enter": "walk_south"}, - {"coord": [19, 41], "enter": "walk_south"}, - {"coord": [19, 46], "enter": "cave_entrance"}, - { - "coord": [6, 51], - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_1" - } - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "PewterCity", "offset": -12}, - {"side": "south", "to_map": "ViridianCity", "offset": -12} - ], - "npcs": [ - {"name": "cut_tree", "coord": [16, 62], "hide_flag": "FLAG_TEMP_14"}, - {"name": "cut_tree", "coord": [15, 69], "hide_flag": "FLAG_TEMP_13"}, - {"name": "cut_tree", "coord": [11, 13], "hide_flag": "FLAG_TEMP_15"}, - {"name": "cut_tree", "coord": [18, 26], "hide_flag": "FLAG_TEMP_16"} - ], - "items": [ - {"name": "item_ball", "coord": [17, 54], "hide_flag": "FLAG_HIDE_ROUTE2_ETHER"}, - {"name": "item_ball", "coord": [17, 64], "hide_flag": "FLAG_HIDE_ROUTE2_PARALYZE_HEAL"} - ] + { + "name": "cut_tree", + "coord": [15, 69], + "hide_flag": "FLAG_TEMP_13", + "source_event": 1, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [11, 13], + "hide_flag": "FLAG_TEMP_15", + "source_event": 2, + "source_script": "EventScript_CutTree" + }, + { + "name": "cut_tree", + "coord": [18, 26], + "hide_flag": "FLAG_TEMP_16", + "source_event": 3, + "source_script": "EventScript_CutTree" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [17, 54], + "source_event": 4, + "hide_flag": "FLAG_HIDE_ROUTE2_ETHER", + "source_script": "Route2_EventScript_ItemEther", + "item": "ether" + }, + { + "name": "item_ball", + "coord": [17, 64], + "source_event": 5, + "hide_flag": "FLAG_HIDE_ROUTE2_PARALYZE_HEAL", + "source_script": "Route2_EventScript_ItemParalyzeHeal", + "item": "paralyze_heal" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route20.json b/data/games/frlg/maps/runtime/Route20.json index 8207dbb..f34834f 100644 --- a/data/games/frlg/maps/runtime/Route20.json +++ b/data/games/frlg/maps/runtime/Route20.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route20/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#####wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", @@ -29,6 +28,28 @@ "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" ], + "elevation": [ + "000000000000000000011100100000000000000011000011100000000100000100111100001111000000000000000000001110000000000000000000", + "100000000011001111000000001111110011111100000000001100001000000000000000000000110000000000000111001111100000000011000000", + "100000001100000000000011000000000000000000111100000011110000000001000011110000000011001111110000000011110000111100000000", + "111111111100110000111111110000001100000011110011110000100000000000113333333311000000000000000000110000000000000000111111", + "100111111001111111001133311111111111111111110011001100100000000000333333333331111100110000001111001100001111000011100111", + "000000000001001111001333333111111100111111111111001000000000000000333333333333111111111111111111001111111111111111100111", + "011000000111001111111333333311111100111111111111111000000000000000333300000333111111111111111111111111111111111111111111", + "111111111111111111111333333311111111111133333111110011130000000003333000000033111111111111111111111111111111111111111111", + "111111111111111111111333333111111111111133333311110010033000300003330000000003111111111111111111111111111111111111111111", + "111111111111111111111111111111111111111133333311110010033333333333300000000000111111111111111111111111111111111111111111", + "111111111111111111111111111111111111111133333311110011113333333333300000000000001111111111111111111111111111111111111111", + "111111111111111111111111111111111111111111333311111001113333333111100000000000001100111111111111111111111111111111111111", + "111111111111111111111111111111133311111111111111111001111111111110000000000000100100110011111111111111111111111111111111", + "111111111111111133311111111111133311111111111111111110011111111000030000000001100111110011111111111111111111111111111111", + "110011111111001333311111111111133111111111111111111110000000000001110000300011110011001111111111111111111111111111111111", + "110011111111001333311111111111111111111111111100111111100000000111113333333111110000001100111111110011111111111001111111", + "111111000011111111111111110011111111001111111100111111111111111111111113333111110000110000111111110011000011111001111111", + "111100000000110000001111000000111100000011000011001111111111111111111111111111000011110011110000111100000000001111000011", + "000000111100000000000000001100000000110000000000000000000000000000000000000000001100001100000000000000111100000000000000", + "000011000001001000010000110001000010001100111100110000000000000000000000000000110000000000001111000011000000110000111100" + ], "points": {"warp_0": [60, 8], "warp_1": [72, 14]}, "warps": [ {"coord": [60, 8], "enter": "cave_entrance", "to_map": "SeafoamIslands_1F", "to_point": "warp_3"}, diff --git a/data/games/frlg/maps/runtime/Route21_North.json b/data/games/frlg/maps/runtime/Route21_North.json index 0a5e805..32e4b82 100644 --- a/data/games/frlg/maps/runtime/Route21_North.json +++ b/data/games/frlg/maps/runtime/Route21_North.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route21_North/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "#######wwww#############", @@ -59,6 +58,58 @@ "wwwwwwwwwwwwwwwwwwwwwwww", "wwwwwwwwwwwwwwwwwwwwwwww" ], + "elevation": [ + "000000011110000000000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011113333330000000", + "000000011111111110011111", + "000000011111111110011000", + "000000011111111100111000", + "000000011111111100110000", + "111110011111111110010000", + "001110000111111110010000", + "000001100111111111100000", + "000001001111111111100000", + "000111001111111111110010", + "001000011111111110010010", + "001000011111111110011000", + "010011111111111111111000", + "010010011111111333311100", + "100110011111113333311100", + "100111111111113333311100", + "001111111111113333111100", + "001113333111111111111001", + "001133333331111111111001", + "001133333331111111111100", + "100133333331111111111100", + "100133333331111111111001", + "100111133311111111111001", + "100111111111111111110011", + "001100111111111111110011", + "001100111111111111111100", + "100111110011111111110000", + "100111110011111111110011", + "010011111111111111111000", + "010011001111111111111000", + "010011001111111133311000", + "010011111111111333331000", + "000111111111111333331000", + "000111111111111333331001", + "011001111111111333311100", + "011001111111111111111100", + "000111111111111111111001", + "100111111111111111111001", + "001111111111111111111100", + "001111111111111111111100" + ], "points": {}, "warps": [], "flag_sets": {}, diff --git a/data/games/frlg/maps/runtime/Route21_South.json b/data/games/frlg/maps/runtime/Route21_South.json index 2c80991..7ec6052 100644 --- a/data/games/frlg/maps/runtime/Route21_South.json +++ b/data/games/frlg/maps/runtime/Route21_South.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route21_South/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "wwwwwwwwwwwwwwwwwwwwwwww", @@ -59,6 +58,58 @@ "wwwww.........wwwwwwwwww", "wwwww.........wwwwwwwwww" ], + "elevation": [ + "001100111111111111001100", + "001100111111111111001100", + "100111111111111111111001", + "000001111111111111111000", + "011001100111111111110010", + "000011100111111111110010", + "000011111111111111110010", + "000011133311111111110010", + "000011133333111111111000", + "001100133333111111111000", + "010000113333111111100000", + "010011111111111111100000", + "000111111111111111111000", + "000100111111111333331000", + "000100111111113333331000", + "000111111111113333331000", + "010011111111113333311000", + "010011111111111333311000", + "010011111111111111110010", + "010011111111111111110010", + "000111111111111111110010", + "000113333331111111110010", + "000113333333111111111001", + "000113333333111111111001", + "110011333333111111100100", + "000011133333111111100100", + "000011111111111111111001", + "110011111111111111111001", + "100111111111111111111001", + "100111111111111111111001", + "001111111111111111111100", + "001111111111111111100100", + "100100111111111111100001", + "100100001111111111111001", + "000111001111111111111000", + "000111111111111111001000", + "000111113333111111001000", + "000111333333111100111000", + "000111333333111100110010", + "000111333331111111000010", + "010011111111111111001110", + "010011111111111110011100", + "010010011111111110011000", + "010010011111111100111000", + "000111001111111100110000", + "000001001111331100110000", + "100001111111331100110000", + "100111111111331110010000", + "001113333333331110010000", + "001113333333331110011000" + ], "points": {}, "warps": [], "flag_sets": {}, diff --git a/data/games/frlg/maps/runtime/Route22.json b/data/games/frlg/maps/runtime/Route22.json index 0461cae..af9c6e8 100644 --- a/data/games/frlg/maps/runtime/Route22.json +++ b/data/games/frlg/maps/runtime/Route22.json @@ -1,71 +1,81 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route22", - "source": { - "decomp_file": "data/maps/Route22/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "#############################################...", - "###########################################.#...", - "##################################........#.###.", - "##################################vvvv.vvv#...##", - "######################....................#.....", - "########D######...........................######", - "#####.......###.........................##......", - "###...........#.............######......##......", - "###...........#vvvvvvvwwwwww######vv..vv##......", - "###vvvvvvv..vv#~~~~~~~wwwwww######~~~~~~##......", - "###...........#~~~~~~~wwwwww######~~~~~~##....##", - "###...........#~~~~~~~wwwwww######~~~~~~##....##", - "####...S#######~~~~~~~......######~~~~~~##....##", - "####...........~~~~~~~......######~~~~~~##....##", - "####........................######............##", - "####vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv..vvvvv##", - "####..........................................##", - "####..........................................##", - "####..........................................##", - "################################################", - "################################################", - "################################################", - "################################################", - "################################################" - ], - "elevation": [ - "000000000000000000000000000000000000000000000333", - "000000000000000000000000000000000000000000030333", - "000000000000000000000000000000000033333333030003", - "000000000000000000000000000000000000003000033300", - "000000000000000000000033333333333333333333033333", - "000000000000000333333333333333333333333333000000", - "000003333333000333333333333333333333333300333333", - "000333333333330333333333333300000033333300333333", - "000333333333330000000011111100000000330000333333", - "000000000033000333333311111100000033333300333333", - "000333333333330333333311111100000033333300333300", - "000333333333330333333311111100000033333300333300", - "000033300000000333333333333300000033333300333300", - "000033333333333333333333333300000033333300333300", - "000033333333333333333333333300000033333333333300", - "000000000000000000000000000000000000000330000000", - "000033333333333333333333333333333333333333333300", - "000033333333333333333333333333333333333333333300", - "000033333333333333333333333333333333333333333300", - "000000000000000000000000000000000000000000000000", - "000000000000000000000000000000000000000000000000", - "000000000000000000000000000000000000000000000000", - "000000000000000000000000000000000000000000000000", - "000000000000000000000000000000000000000000000000" - ], - "points": {}, - "warps": [ - {"coord": [8, 5], "enter": "walk_into"}, - {"coord": [9, 5], "enter": "walk_into"} - ], - "flag_sets": {}, - "connections": [{"side": "east", "to_map": "ViridianCity", "offset": -10}], - "npcs": [ - {"name": "blue", "coord": [25, 4], "hide_flag": "FLAG_HIDE_ROUTE_22_RIVAL"} - ] + "format": "pokesim-runtime-map/2", + "name": "Route22", + "source": { + "decomp_file": "data/maps/Route22/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "#############################################...", + "###########################################.#...", + "##################################........#.###.", + "##################################vvvv.vvv#...##", + "######################....................#.....", + "########D######...........................######", + "#####.......###.........................##......", + "###...........#.............######......##......", + "###...........#vvvvvvvwwwwww######vv..vv##......", + "###vvvvvvv..vv#~~~~~~~wwwwww######~~~~~~##......", + "###...........#~~~~~~~wwwwww######~~~~~~##....##", + "###...........#~~~~~~~wwwwww######~~~~~~##....##", + "####...S#######~~~~~~~......######~~~~~~##....##", + "####...........~~~~~~~......######~~~~~~##....##", + "####........................######............##", + "####vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv..vvvvv##", + "####..........................................##", + "####..........................................##", + "####..........................................##", + "################################################", + "################################################", + "################################################", + "################################################", + "################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000333", + "000000000000000000000000000000000000000000030333", + "000000000000000000000000000000000033333333030003", + "000000000000000000000000000000000000003000033300", + "000000000000000000000033333333333333333333033333", + "000000000000000333333333333333333333333333000000", + "000003333333000333333333333333333333333300333333", + "000333333333330333333333333300000033333300333333", + "000333333333330000000011111100000000330000333333", + "000000000033000333333311111100000033333300333333", + "000333333333330333333311111100000033333300333300", + "000333333333330333333311111100000033333300333300", + "000033300000000333333333333300000033333300333300", + "000033333333333333333333333300000033333300333300", + "000033333333333333333333333300000033333333333300", + "000000000000000000000000000000000000000330000000", + "000033333333333333333333333333333333333333333300", + "000033333333333333333333333333333333333333333300", + "000033333333333333333333333333333333333333333300", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000" + ], + "points": {"warp_0": [8, 5]}, + "warps": [ + {"coord": [8, 5], "enter": "walk_into", "to_map": "Route22_NorthEntrance", "to_point": "warp_2"}, + {"coord": [9, 5], "enter": "walk_into", "to_map": "Route22_NorthEntrance", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route23", "offset": 0}, + {"side": "east", "to_map": "ViridianCity", "offset": -10} + ], + "npcs": [ + { + "name": "blue", + "coord": [25, 4], + "hide_flag": "FLAG_HIDE_ROUTE_22_RIVAL", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_ROUTE22_RIVAL" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route23.json b/data/games/frlg/maps/runtime/Route23.json index 125e9aa..291ada2 100644 --- a/data/games/frlg/maps/runtime/Route23.json +++ b/data/games/frlg/maps/runtime/Route23.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route23/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "tiles": [ "##########...###########", @@ -169,6 +168,168 @@ "########################", "########################" ], + "elevation": [ + "000000000033300000000000", + "000000033033303300000000", + "000000030333333330000000", + "000000030033030330000000", + "000000303033030300000000", + "000000033303303300000000", + "000000033303303330000000", + "000000330303033333000000", + "000000330303033303000000", + "000000033030303303000000", + "000000033030303303000000", + "000000303303303333000000", + "000000000303303033000000", + "000000030303303033000000", + "000000030303303030000000", + "000000030333333030000000", + "000330333333333333033000", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000033300", + "000000000000000000003300", + "000000000000000000000300", + "000000000000000000000300", + "000003000000000000300300", + "003033300000000003333300", + "003333333000000003333300", + "003033330000000003333300", + "003333333000000003333300", + "000333333000000000000000", + "003333330000000000000000", + "000033303000000000000000", + "003333330000000000000000", + "003333333000000000000000", + "003033330000000000000000", + "003333330000000000000000", + "000333333000000000000000", + "003033303000000000000000", + "000333333300033333303300", + "003033333330033333333300", + "003333333330033333333300", + "000000333333000333333300", + "000000333333000333333300", + "000000000333333333333300", + "000000000333333333333300", + "000000000333333333333300", + "000000000333333333333300", + "000000000333333333333300", + "000330330333333000000000", + "003333333333333000000000", + "003333333333333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000330333033000000", + "000000003333333333300000", + "000000003333333333300000", + "000000003330033333300000", + "000000003330033333300000", + "000000000333033333300000", + "000000000333033333300000", + "000000000333033003300000", + "000000000333033003300000", + "000000003330033303300000", + "000000003330033303300000", + "000000003333333033300000", + "000000000333333033303000", + "000000000033333333333300", + "000000000033333333333300", + "000000000033333333333300", + "000000003333333333333300", + "000000003333333333333300", + "000000003111111300000000", + "000000003111111300000000", + "000000003111111300000000", + "000000003111111300000000", + "003333333111111333333300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "000000011100000000000000", + "000000011100000000000000", + "000000011100000000000000", + "000000011100000000000000", + "000003011133333333300000", + "000003111111111111300000", + "000003111111111111300000", + "000003111111111111300000", + "000003111111111111300000", + "000003113333331111300000", + "000003113333331111300000", + "000003113333331111300000", + "000003113333331111300000", + "003333113333331111300000", + "003111111111111111300000", + "003111111111111111300000", + "003111111111111111300000", + "003111111111111111300000", + "000000000000011100000000", + "000000000000011100000000", + "000000000000011100000000", + "000000000000011100000000", + "003333333333011133333300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "003111111111111111111300", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "000000000000333000000000", + "003333333330333033333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003330000333000000000000", + "003330000333000000000000", + "003330000333000000000000", + "003330000333000000000000", + "003333330333033333333300", + "000033333333333333333300", + "000033333333333333333300", + "000033333333333333333300", + "000033333333333333333300", + "000000333000000000000000", + "000000333000000000000000", + "000000333000000000000000", + "000000333000000000000000", + "000330333033333333333000", + "003333333333333333333300", + "000033333333333333330000", + "000033333333333333330000", + "000000333333333333330000", + "000000000000033300000000", + "000000000000033300000000", + "000000000000033300000000", + "000000000000033300000000", + "000000033333033303300000", + "000000033333333333330000", + "000000033333333333330000", + "000000033333333333333300", + "000000033300000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], "points": {"warp_0": [5, 28], "warp_1": [18, 28], "warp_2": [8, 153]}, "warps": [ {"coord": [5, 28], "enter": "cave_entrance", "to_map": "VictoryRoad_1F", "to_point": "warp_1"}, diff --git a/data/games/frlg/maps/runtime/Route24.json b/data/games/frlg/maps/runtime/Route24.json index ecaa3eb..a16f9e2 100644 --- a/data/games/frlg/maps/runtime/Route24.json +++ b/data/games/frlg/maps/runtime/Route24.json @@ -1,109 +1,180 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route24", - "source": { - "decomp_file": "data/maps/Route24/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route24", + "source": { + "decomp_file": "data/maps/Route24/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route24/map.json", + "events_sha256": "f844a16ec16a9aa725bcabf8862ec7b08be16b511f10664ef6e15f2448dd90a8", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################", + "########################", + "########################", + "####.........>...<......", + "####.........>...<......", + "####.........>...<......", + "###vvvv..vvvv#...#vvvvvv", + "###.....................", + "###.....................", + "###.....................", + "###..........###########", + "###..........#..........", + "###..........#...#######", + "###..........#...#######", + "###..........#...#######", + "###..........#...#######", + "###...www#...#...#######", + "###...www#...#...#######", + "###...www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#######", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "###~~~www#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww", + "####wwwww#...#...#wwwwww" + ], + "elevation": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000033333333303330333333", + "000033333333303330333333", + "000033333333303330333333", + "000000033000003330000000", + "000333333333333333333333", + "000333333333333333333333", + "000333333333333333333333", + "000333333333300000000000", + "000333333333303333333333", + "000333333333303330000000", + "000333333333303330000000", + "000333333333303330000000", + "000333333333303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330000000", + "000333111033303330111111", + "000333111033303330100000", + "000333111033303330100000", + "000333111033303330100000", + "000333111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000", + "000011111033303330100000" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "CeruleanCity", "offset": -12}, + {"side": "east", "to_map": "Route25", "offset": 0} + ], + "npcs": [ + { + "name": "man", + "coord": [12, 15], + "hide_flag": "FLAG_HIDE_NUGGET_BRIDGE_ROCKET", + "source_event": 0, + "source_script": "Route24_EventScript_Rocket", + "source_local_id": "LOCALID_ROUTE24_ROCKET" }, - "tiles": [ - "########################", - "########################", - "########################", - "####.........>...<......", - "####.........>...<......", - "####.........>...<......", - "###vvvv..vvvv#...#vvvvvv", - "###.....................", - "###.....................", - "###.....................", - "###..........###########", - "###..........#..........", - "###..........#...#######", - "###..........#...#######", - "###..........#...#######", - "###..........#...#######", - "###...www#...#...#######", - "###...www#...#...#######", - "###...www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#######", - "###~~~www#...#...#wwwwww", - "###~~~www#...#...#wwwwww", - "###~~~www#...#...#wwwwww", - "###~~~www#...#...#wwwwww", - "###~~~www#...#...#wwwwww", - "####wwwww#...#...#wwwwww", - "####wwwww#...#...#wwwwww", - "####wwwww#...#...#wwwwww", - "####wwwww#...#...#wwwwww", - "####wwwww#...#...#wwwwww", - "####wwwww#...#...#wwwwww", - "####wwwww#...#...#wwwwww", - "####wwwww#...#...#wwwwww" - ], - "elevation": [ - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "000033333333303330333333", - "000033333333303330333333", - "000033333333303330333333", - "000000033000003330000000", - "000333333333333333333333", - "000333333333333333333333", - "000333333333333333333333", - "000333333333300000000000", - "000333333333303333333333", - "000333333333303330000000", - "000333333333303330000000", - "000333333333303330000000", - "000333333333303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330000000", - "000333111033303330111111", - "000333111033303330100000", - "000333111033303330100000", - "000333111033303330100000", - "000333111033303330100000", - "000011111033303330100000", - "000011111033303330100000", - "000011111033303330100000", - "000011111033303330100000", - "000011111033303330100000", - "000011111033303330100000", - "000011111033303330100000", - "000011111033303330100000" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [{"side": "south", "to_map": "CeruleanCity", "offset": -12}, {"side": "east", "to_map": "Route25", "offset": 0}], - "npcs": [ - {"name": "man", "coord": [12, 15], "hide_flag": "FLAG_HIDE_NUGGET_BRIDGE_ROCKET"}, - {"name": "camper", "coord": [12, 19], "facing": "west", "trainer": {"sight": 2}}, - {"name": "lass", "coord": [10, 22], "facing": "east", "trainer": {"sight": 2}}, - {"name": "youngster", "coord": [12, 25], "facing": "west", "trainer": {"sight": 2}}, - {"name": "lass", "coord": [10, 28], "facing": "east", "trainer": {"sight": 2}}, - {"name": "bug_catcher", "coord": [12, 31], "facing": "west", "trainer": {"sight": 2}}, - {"name": "camper", "coord": [5, 21], "facing": "north", "trainer": {"sight": 5}} - ], - "items": [ - {"name": "item_ball", "coord": [11, 4], "hide_flag": "FLAG_HIDE_ROUTE24_TM45"} - ] + { + "name": "camper", + "coord": [12, 19], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 1, + "source_script": "Route24_EventScript_Ethan" + }, + { + "name": "lass", + "coord": [10, 22], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "Route24_EventScript_Reli" + }, + { + "name": "youngster", + "coord": [12, 25], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 3, + "source_script": "Route24_EventScript_Timmy" + }, + { + "name": "lass", + "coord": [10, 28], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route24_EventScript_Ali" + }, + { + "name": "bug_catcher", + "coord": [12, 31], + "facing": "west", + "trainer": {"sight": 2}, + "source_event": 5, + "source_script": "Route24_EventScript_Cale" + }, + { + "name": "camper", + "coord": [5, 21], + "facing": "north", + "trainer": {"sight": 5}, + "source_event": 6, + "source_script": "Route24_EventScript_Shane" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [11, 4], + "source_event": 7, + "hide_flag": "FLAG_HIDE_ROUTE24_TM45", + "source_script": "Route24_EventScript_ItemTM45", + "item": "tm45" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route25.json b/data/games/frlg/maps/runtime/Route25.json index 1281b7a..816168f 100644 --- a/data/games/frlg/maps/runtime/Route25.json +++ b/data/games/frlg/maps/runtime/Route25.json @@ -1,78 +1,160 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route25", - "source": { - "decomp_file": "data/maps/Route25/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route25", + "source": { + "decomp_file": "data/maps/Route25/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route25/map.json", + "events_sha256": "a4b412784121ae753cb88e5a1be6db1b5575e77946ba3c6b87aca8087b1dfcb6", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "########################################################################", + "########################################################################", + "############...#...#.....#.....#..........##############################", + ".~~~~~~~~......#...#.....#.....#..........####################wwww######", + ".~~~~~~~~................###.#............######S##D##########wwww######", + "................#.#.#....#...#.....#.........................#wwww######", + "vvvvvvvvvv##..##....#.##.#.........#.........................#wwwww#####", + "................#...#....#......##...........................#wwwwwww###", + ".............#..##..#...........#............................#wwwwwwwwww", + ".............#......#.#.........#..........wwwwww.....wwwwww.#wwwwwwwwww", + "###########################################wwwwww.....wwwwww.#wwwwwwwwww", + "...........................................wwwwww.....wwwwww.#wwwwwwwwww", + "#########################################....................#wwwwwwwwww", + "##############################################################wwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000333033303333303333303333333333000000000000000000000000000000", + "333333333333333033303333303333303333333333000000000000000000001111000000", + "333333333333333333333333300030333333333333000000000000000000001001000000", + "333333333333333303030333303330333330333333333333333333333333301001000000", + "000000000000330033330300303333333330333333333333333333333333301001100000", + "333333333333333303330333303333330033333333333333333333333333301000111000", + "333333333333303300330333333333330333333333333333333333333333301000001111", + "333333333333303333330303333333330333333333311111133333111111301000000000", + "000000000000000000000000000000000000000000011111133333111111301000000000", + "333333333333333333333333333333333333333333311111133333111111301000000000", + "000000000000000000000000000000000000000003333333333333333333301000000000", + "000000000000000000000000000000000000000000000000000000000000001000000000", + "000000000000000000000000000000000000000001111111111111111111111000000000", + "000000000000000000000000000000000000000001100000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000", + "000000000000000000000000000000000000000001000000000000000000000000000000" + ], + "points": {"warp_0": [51, 4]}, + "warps": [{"coord": [51, 4], "enter": "walk_into", "to_map": "Route25_SeaCottage", "to_point": "warp_1"}], + "flag_sets": {}, + "connections": [{"side": "west", "to_map": "Route24", "offset": 0}], + "npcs": [ + { + "name": "hiker", + "coord": [11, 4], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 0, + "source_script": "Route25_EventScript_Franklin" }, - "tiles": [ - "########################################################################", - "########################################################################", - "############...#...#.....#.....#..........##############################", - ".~~~~~~~~......#...#.....#.....#..........####################wwww######", - ".~~~~~~~~................###.#............######S##D##########wwww######", - "................#.#.#....#...#.....#.........................#wwww######", - "vvvvvvvvvv##..##....#.##.#.........#.........................#wwwww#####", - "................#...#....#......##...........................#wwwwwww###", - ".............#..##..#...........#............................#wwwwwwwwww", - ".............#......#.#.........#..........wwwwww.....wwwwww.#wwwwwwwwww", - "###########################################wwwwww.....wwwwww.#wwwwwwwwww", - "...........................................wwwwww.....wwwwww.#wwwwwwwwww", - "#########################################....................#wwwwwwwwww", - "##############################################################wwwwwwwwww", - "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "#########################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" - ], - "elevation": [ - "000000000000000000000000000000000000000000000000000000000000000000000000", - "000000000000000000000000000000000000000000000000000000000000000000000000", - "000000000000333033303333303333303333333333000000000000000000000000000000", - "333333333333333033303333303333303333333333000000000000000000001111000000", - "333333333333333333333333300030333333333333000000000000000000001001000000", - "333333333333333303030333303330333330333333333333333333333333301001000000", - "000000000000330033330300303333333330333333333333333333333333301001100000", - "333333333333333303330333303333330033333333333333333333333333301000111000", - "333333333333303300330333333333330333333333333333333333333333301000001111", - "333333333333303333330303333333330333333333311111133333111111301000000000", - "000000000000000000000000000000000000000000011111133333111111301000000000", - "333333333333333333333333333333333333333333311111133333111111301000000000", - "000000000000000000000000000000000000000003333333333333333333301000000000", - "000000000000000000000000000000000000000000000000000000000000001000000000", - "000000000000000000000000000000000000000001111111111111111111111000000000", - "000000000000000000000000000000000000000001100000000000000000000000000000", - "000000000000000000000000000000000000000001000000000000000000000000000000", - "000000000000000000000000000000000000000001000000000000000000000000000000", - "000000000000000000000000000000000000000001000000000000000000000000000000", - "000000000000000000000000000000000000000001000000000000000000000000000000" - ], - "points": { - "warp_0": [51, 4] + { + "name": "youngster", + "coord": [18, 2], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 1, + "source_script": "Route25_EventScript_Joey" }, - "warps": [ - {"coord": [51, 4], "enter": "walk_into", "to_map": "Route25_SeaCottage", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [{"side": "west", "to_map": "Route24", "offset": 0}], - "npcs": [ - {"name": "hiker", "coord": [11, 4], "facing": "east", "trainer": {"sight": 4}}, - {"name": "youngster", "coord": [18, 2], "facing": "south", "trainer": {"sight": 2}}, - {"name": "hiker", "coord": [17, 7], "facing": "east", "trainer": {"sight": 2}}, - {"name": "youngster", "coord": [22, 4], "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}}, - {"name": "picnicker", "coord": [22, 8], "facing": "east", "trainer": {"sight": 2}}, - {"name": "hiker", "coord": [27, 9], "facing": "north", "trainer": {"sight": 3}}, - {"name": "camper", "coord": [28, 4], "facing": "south", "trainer": {"sight": 3}}, - {"name": "youngster", "coord": [36, 4], "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}}, - {"name": "lass", "coord": [42, 5], "facing": "south", "trainer": {"sight": 3}}, - {"name": "cut_tree", "coord": [30, 3], "hide_flag": "FLAG_TEMP_12"}, - {"name": "beauty", "coord": [49, 10]}, - {"name": "man", "coord": [49, 11]} - ], - "items": [ - {"name": "item_ball", "coord": [26, 2], "hide_flag": "FLAG_HIDE_ROUTE25_TM43"} - ] + { + "name": "hiker", + "coord": [17, 7], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 2, + "source_script": "Route25_EventScript_Wayne" + }, + { + "name": "youngster", + "coord": [22, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route25_EventScript_Dan" + }, + { + "name": "picnicker", + "coord": [22, 8], + "facing": "east", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route25_EventScript_Kelsey" + }, + { + "name": "hiker", + "coord": [27, 9], + "facing": "north", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "Route25_EventScript_Nob" + }, + { + "name": "camper", + "coord": [28, 4], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 6, + "source_script": "Route25_EventScript_Flint" + }, + { + "name": "youngster", + "coord": [36, 4], + "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, + "source_event": 7, + "source_script": "Route25_EventScript_Chad" + }, + { + "name": "lass", + "coord": [42, 5], + "facing": "south", + "trainer": {"sight": 3}, + "source_event": 8, + "source_script": "Route25_EventScript_Haley" + }, + { + "name": "cut_tree", + "coord": [30, 3], + "hide_flag": "FLAG_TEMP_12", + "source_event": 10, + "source_script": "EventScript_CutTree" + }, + {"name": "beauty", "coord": [49, 10], "source_event": 11, "source_script": "Route25_EventScript_Beauty"}, + {"name": "man", "coord": [49, 11], "source_event": 12, "source_script": "Route25_EventScript_Man"} + ], + "items": [ + { + "name": "item_ball", + "coord": [26, 2], + "source_event": 9, + "hide_flag": "FLAG_HIDE_ROUTE25_TM43", + "source_script": "Route25_EventScript_ItemTM43", + "item": "tm43" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route25_SeaCottage.json b/data/games/frlg/maps/runtime/Route25_SeaCottage.json index 1c83730..922124e 100644 --- a/data/games/frlg/maps/runtime/Route25_SeaCottage.json +++ b/data/games/frlg/maps/runtime/Route25_SeaCottage.json @@ -1,37 +1,50 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route25_SeaCottage", - "source": { - "decomp_file": "data/maps/Route25_SeaCottage/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route25_SeaCottage", + "source": { + "decomp_file": "data/maps/Route25_SeaCottage/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "allow_running": false, + "tiles": [ + "###############", + "###############", + "#.##########..#", + "###D######D#.##", + "..............#", + "....##........#", + "..............#", + "#.............#", + "#..............", + "###..........##", + "###############" + ], + "points": {"warp_1": [7, 9]}, + "warps": [ + {"coord": [6, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"}, + {"coord": [7, 9], "enter": "walk_south", "to_map": "Route25", "to_point": "warp_0"}, + {"coord": [8, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "bill", + "coord": [7, 5], + "hide_flag": "FLAG_HIDE_BILL_HUMAN_SEA_COTTAGE", + "source_event": 0, + "source_script": "Route25_SeaCottage_EventScript_Bill", + "source_local_id": "LOCALID_BILL_HUMAN" }, - "allow_running": false, - "tiles": [ - "###############", - "###############", - "#.##########..#", - "###D######D#.##", - "..............#", - "....##........#", - "..............#", - "#.............#", - "#..............", - "###..........##", - "###############" - ], - "points": { - "warp_1": [7, 9] - }, - "warps": [ - {"coord": [6, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"}, - {"coord": [7, 9], "enter": "walk_south", "to_map": "Route25", "to_point": "warp_0"}, - {"coord": [8, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "bill", "coord": [7, 5], "hide_flag": "FLAG_HIDE_BILL_HUMAN_SEA_COTTAGE"}, - {"name": "clefairy", "coord": [10, 6], "hide_flag": "FLAG_HIDE_BILL_CLEFAIRY"} - ] + { + "name": "clefairy", + "coord": [10, 6], + "hide_flag": "FLAG_HIDE_BILL_CLEFAIRY", + "source_event": 1, + "source_script": "Route25_SeaCottage_EventScript_Bill", + "source_local_id": "LOCALID_BILL_CLEFAIRY" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route2_ViridianForest_NorthEntrance.json b/data/games/frlg/maps/runtime/Route2_ViridianForest_NorthEntrance.json index 4d494c0..c4025ad 100644 --- a/data/games/frlg/maps/runtime/Route2_ViridianForest_NorthEntrance.json +++ b/data/games/frlg/maps/runtime/Route2_ViridianForest_NorthEntrance.json @@ -1,40 +1,53 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route2_ViridianForest_NorthEntrance", - "source": { - "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route2_ViridianForest_NorthEntrance", + "source": { + "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############", + "#######.#######", + "##...#...#...##", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#.............#", + "###############" + ], + "points": {"warp_1": [7, 10], "warp_3": [7, 1]}, + "warps": [ + {"coord": [6, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, + {"coord": [7, 10], "enter": "walk_south", "to_map": "ViridianForest", "to_point": "warp_2"}, + {"coord": [8, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, + {"coord": [7, 1], "enter": "cave_entrance", "to_map": "Route2", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "youngster", + "coord": [5, 4], + "source_event": 0, + "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_Youngster" }, - "tiles": [ - "###############", - "#######.#######", - "##...#...#...##", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#.............#", - "###############" - ], - "points": { - "warp_1": [7, 10], - "warp_3": [7, 1] + { + "name": "old_man_1", + "coord": [4, 7], + "source_event": 1, + "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_OldMan" }, - "warps": [ - {"coord": [6, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, - {"coord": [7, 10], "enter": "walk_south", "to_map": "ViridianForest", "to_point": "warp_2"}, - {"coord": [8, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, - {"coord": [7, 1], "enter": "cave_entrance", "to_map": "Route2", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "youngster", "coord": [5, 4]}, - {"name": "old_man_1", "coord": [4, 7]}, - {"name": "cooltrainer_f", "coord": [10, 5]} - ] + { + "name": "cooltrainer_f", + "coord": [10, 5], + "source_event": 2, + "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route2_ViridianForest_SouthEntrance.json b/data/games/frlg/maps/runtime/Route2_ViridianForest_SouthEntrance.json index cc13f4b..b9f087e 100644 --- a/data/games/frlg/maps/runtime/Route2_ViridianForest_SouthEntrance.json +++ b/data/games/frlg/maps/runtime/Route2_ViridianForest_SouthEntrance.json @@ -1,39 +1,48 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route2_ViridianForest_SouthEntrance", - "source": { - "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route2_ViridianForest_SouthEntrance", + "source": { + "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############", + "#######.#######", + "##...#...#...##", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#..........##.#", + "###........##.#", + "#.............#", + "#.............#", + "###############" + ], + "points": {"warp_1": [7, 10], "warp_3": [7, 1]}, + "warps": [ + {"coord": [6, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, + {"coord": [7, 10], "enter": "walk_south", "to_map": "Route2", "to_point": "warp_2"}, + {"coord": [8, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, + {"coord": [7, 1], "enter": "cave_entrance", "to_map": "ViridianForest", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "woman_2", + "coord": [10, 6], + "source_event": 0, + "source_script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman1" }, - "tiles": [ - "###############", - "#######.#######", - "##...#...#...##", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#.............#", - "###############" - ], - "points": { - "warp_1": [7, 10], - "warp_3": [7, 1] - }, - "warps": [ - {"coord": [6, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, - {"coord": [7, 10], "enter": "walk_south", "to_map": "Route2", "to_point": "warp_2"}, - {"coord": [8, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, - {"coord": [7, 1], "enter": "cave_entrance", "to_map": "ViridianForest", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "woman_2", "coord": [10, 6]}, - {"name": "woman_1", "coord": [4, 7], "wander": {"min": [3, 6], "max": [5, 8]}} - ] + { + "name": "woman_1", + "coord": [4, 7], + "wander": {"min": [3, 6], "max": [5, 8]}, + "source_event": 1, + "source_script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman2" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route3.json b/data/games/frlg/maps/runtime/Route3.json index 9f6fd9f..fe3efd0 100644 --- a/data/games/frlg/maps/runtime/Route3.json +++ b/data/games/frlg/maps/runtime/Route3.json @@ -1,51 +1,106 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route3", - "source": { - "decomp_file": "data/maps/Route3/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route3", + "source": { + "decomp_file": "data/maps/Route3/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "####################################################################........########", + "####################################################################........########", + "####################################################################........########", + "#############......................#################################.......#########", + "###########..........................###############################.....###########", + "###########..........................######................#########.....###########", + "###########.........###.......##.....#####...................#######.....###########", + "###########vvv..vvvv###vvvvvvv##vvv..#####...................#######.....###########", + "#######.............###.......##.....#####vvvv..#######vvvvv.#######vvv..###########", + "....................###.......##................#######......#######.....###########", + "....................###.......###...............#######......#####.......~~~~#######", + ".........###........###.......###~~~~~~~........#######...............##S~~~~~~#####", + "..##########vvvv..vv###vvvvvvv###~~~~~~~~~~~~~~########................~~~~~~~~#####", + "############........###.......###~~~~~~~~~~~~~~########................~~~~~~~~#####", + "############.................######~~~~~~~~~~~~########...............~~~~~~~~~#####", + "##############...............######~~~~~~~~~~~~##########.............~~~~~~~~~#####", + "#######################################~~~~~~~~##########.............~~~~~~########", + "####################################################################################", + "####################################################################################", + "####################################################################################" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route4", "offset": 60}, + {"side": "west", "to_map": "PewterCity", "offset": -10} + ], + "npcs": [ + {"name": "youngster", "coord": [70, 13], "source_event": 0, "source_script": "Route3_EventScript_Youngster"}, + { + "name": "lass", + "coord": [40, 11], + "wander": {"min": [40, 10], "max": [40, 12]}, + "trainer": {"sight": 3, "looks": ["north", "south"]}, + "source_event": 1, + "source_script": "Route3_EventScript_Robin" }, - "tiles": [ - "####################################################################........########", - "####################################################################........########", - "####################################################################........########", - "#############......................#################################.......#########", - "###########..........................###############################.....###########", - "###########..........................######................#########.....###########", - "###########.........###.......##.....#####...................#######.....###########", - "###########vvv..vvvv###vvvvvvv##vvv..#####...................#######.....###########", - "#######.............###.......##.....#####vvvv..#######vvvvv.#######vvv..###########", - "....................###.......##................#######......#######.....###########", - "....................###.......###...............#######......#####.......~~~~#######", - ".........###........###.......###~~~~~~~........#######...............##S~~~~~~#####", - "..##########vvvv..vv###vvvvvvv###~~~~~~~~~~~~~~########................~~~~~~~~#####", - "############........###.......###~~~~~~~~~~~~~~########................~~~~~~~~#####", - "############.................######~~~~~~~~~~~~########...............~~~~~~~~~#####", - "##############...............######~~~~~~~~~~~~##########.............~~~~~~~~~#####", - "#######################################~~~~~~~~##########.............~~~~~~########", - "####################################################################################", - "####################################################################################", - "####################################################################################" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [{"side": "north", "to_map": "Route4", "offset": 60}, {"side": "west", "to_map": "PewterCity", "offset": -10}], - "npcs": [ - {"name": "youngster", "coord": [70, 13]}, - { - "name": "lass", - "coord": [40, 11], - "wander": {"min": [40, 10], "max": [40, 12]}, - "trainer": {"sight": 3, "looks": ["north", "south"]} - }, - {"name": "bug_catcher", "coord": [32, 6], "facing": "east", "trainer": {"sight": 4}}, - {"name": "lass", "coord": [30, 3], "facing": "west", "trainer": {"sight": 5}}, - {"name": "bug_catcher", "coord": [25, 4], "facing": "south", "trainer": {"sight": 2}}, - {"name": "youngster", "coord": [29, 10], "facing": "west", "trainer": {"sight": 5}}, - {"name": "lass", "coord": [19, 9], "facing": "west", "trainer": {"sight": 5}}, - {"name": "bug_catcher", "coord": [12, 6], "facing": "east", "trainer": {"sight": 3}}, - {"name": "youngster", "coord": [17, 4], "facing": "south", "trainer": {"sight": 2}} - ] + { + "name": "bug_catcher", + "coord": [32, 6], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 2, + "source_script": "Route3_EventScript_James" + }, + { + "name": "lass", + "coord": [30, 3], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 3, + "source_script": "Route3_EventScript_Sally" + }, + { + "name": "bug_catcher", + "coord": [25, 4], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route3_EventScript_Greg" + }, + { + "name": "youngster", + "coord": [29, 10], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 5, + "source_script": "Route3_EventScript_Calvin" + }, + { + "name": "lass", + "coord": [19, 9], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 6, + "source_script": "Route3_EventScript_Janice" + }, + { + "name": "bug_catcher", + "coord": [12, 6], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 7, + "source_script": "Route3_EventScript_Colton" + }, + { + "name": "youngster", + "coord": [17, 4], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 8, + "source_script": "Route3_EventScript_Ben" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route4.json b/data/games/frlg/maps/runtime/Route4.json index 42f6640..c7057e5 100644 --- a/data/games/frlg/maps/runtime/Route4.json +++ b/data/games/frlg/maps/runtime/Route4.json @@ -1,75 +1,112 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route4", - "source": { - "decomp_file": "data/maps/Route4/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route4", + "source": { + "decomp_file": "data/maps/Route4/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route4/map.json", + "events_sha256": "5b0b84cb73ecc6597470d01d5933ca36d5e4410cdda53dddb72922689e5653ac", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "############################################################################################################", + "##########.....#############################################################################################", + "###########################################..<......>.#########.<.....<###############...........###########", + "###########################################..<......>..>.....<..<.....<.....................................", + "####...#..#################################..<......>..>.....<..<.....<.....................................", + "###..#....SSD##.###.############.########....#vv..vv#..>.....<..<.....#vvvvvvvvvvvvvvvvvvvvvvvvvv###########", + "###..................##########........................>.....<..<................................#wwwwwwwwww", + "###vvvvv..........S..##########...S....................>.....<..#v..vvvvvvvvvvvvvvvvvvvvvvvvvvvvv#wwwwwwwwww", + "###..................#########.........................>.....<...................................#wwwwwwwwww", + "###............vvvvvvv########vvvvvvvvvvv...vvvvvvvvvvv#.....#v#......................####vvvvvvv###########", + "###.#.................########.................................#vvvvv..####vvvvvvvvvvv####..................", + "###vvvvvvvvv........#.########.........................................####~~~~~~~~~~~####..................", + "###............vvvvvvv###################..............................####~~~~~~~~~~~####..................", + "######.#..............###########################......................####~~~~~~~~~~~~~##.......###########", + "########.............############################......................####~~~~~~~~~~~~~##vv...vv###########", + "########vvv.......###############################vv..vvvvvvvvv..vvvvv######~~~~~~~~~~~~~##.......###########", + "########........#################################....................######~~~~~~~~~~~~.##.......###########", + "########........#################################....................######~~~~~~~~~~~...........###########", + "########.....vvv########################################.............#################.........#############", + "########........############################################################################################" + ], + "elevation": [ + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000033333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000033033333303000000000303333300000000000000003333333333300000000000", + "000000000000000000000000000000000000000000033033333303303333303303333303333333333333333333333333333333333333", + "000033303300000000000000000000000000000000033033333303303333303303333303333333333333333333333333333333333333", + "000330333300000300030000000000003000000003333000330003303333303303333300000000000000000000000000000000000000", + "000333333333333333333000000000033333333333333333333333303333303303333333333333333333333333333333301111111111", + "000000003333333333033000000000033303333333333333333333303333303300330000000000000000000000000000001111111111", + "000333333333333333333000000000333333333333333333333333303333303333333333333333333333333333333333301111111111", + "000333333333333000000000000000000000000003330000000000003333300033333333333333333333330000000000000000000000", + "000303333333333333333300000000333333333333333333333333333333333000000330000000000000000000333333333333333333", + "000000000000333333330300000000333333333333333333333333333333333333333330000333333333330000333333333333333333", + "000333333333333000000000000000000000000003333333333333333333333333333330000333333333330000333333333333333333", + "000000303333333333333300000000000000000000000000033333333333333333333330000333333333333300333333300000000000", + "000000003333333333333000000000000000000000000000033333333333333333333330000333333333333300003330000000000000", + "000000000003333333000000000000000000000000000000000330000000003300000000000333333333333300333333300000000000", + "000000003333333300000000000000000000000000000000033333333333333333333000000333333333333300333333300000000000", + "000000003333333300000000000000000000000000000000033333333333333333333000000333333333333333333333300000000000", + "000000003333300000000000000000000000000000000000000000003333333333333000000000000000003333333330000000000000", + "000000003333333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "points": {"warp_0": [19, 5], "warp_1": [32, 5], "warp_2": [12, 5]}, + "warps": [ + {"coord": [19, 5], "enter": "cave_entrance", "to_map": "MtMoon_1F", "to_point": "warp_3"}, + {"coord": [32, 5], "enter": "cave_entrance", "to_map": "MtMoon_B1F", "to_point": "warp_7"}, + {"coord": [12, 5], "enter": "walk_into", "to_map": "Route4_PokemonCenter_1F", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "south", "to_map": "Route3", "offset": -60}, + {"side": "east", "to_map": "CeruleanCity", "offset": -10} + ], + "npcs": [ + { + "name": "woman_1", + "coord": [9, 8], + "wander": {"min": [8, 7], "max": [10, 9]}, + "source_event": 0, + "source_script": "Route4_EventScript_Woman" }, - "tiles": [ - "############################################################################################################", - "##########.....#############################################################################################", - "###########################################..<......>.#########.<.....<###############...........###########", - "###########################################..<......>..>.....<..<.....<.....................................", - "####...#..#################################..<......>..>.....<..<.....<.....................................", - "###..#....SSD##.###.############.########....#vv..vv#..>.....<..<.....#vvvvvvvvvvvvvvvvvvvvvvvvvv###########", - "###..................##########........................>.....<..<................................#wwwwwwwwww", - "###vvvvv..........S..##########...S....................>.....<..#v..vvvvvvvvvvvvvvvvvvvvvvvvvvvvv#wwwwwwwwww", - "###..................#########.........................>.....<...................................#wwwwwwwwww", - "###............vvvvvvv########vvvvvvvvvvv...vvvvvvvvvvv#.....#v#......................####vvvvvvv###########", - "###.#.................########.................................#vvvvv..####vvvvvvvvvvv####..................", - "###vvvvvvvvv........#.########.........................................####~~~~~~~~~~~####..................", - "###............vvvvvvv###################..............................####~~~~~~~~~~~####..................", - "######.#..............###########################......................####~~~~~~~~~~~~~##.......###########", - "########.............############################......................####~~~~~~~~~~~~~##vv...vv###########", - "########vvv.......###############################vv..vvvvvvvvv..vvvvv######~~~~~~~~~~~~~##.......###########", - "########........#################################....................######~~~~~~~~~~~~.##.......###########", - "########........#################################....................######~~~~~~~~~~~...........###########", - "########.....vvv########################################.............#################.........#############", - "########........############################################################################################" - ], - "elevation": [ - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "000000000033333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "000000000000000000000000000000000000000000033033333303000000000303333300000000000000003333333333300000000000", - "000000000000000000000000000000000000000000033033333303303333303303333303333333333333333333333333333333333333", - "000033303300000000000000000000000000000000033033333303303333303303333303333333333333333333333333333333333333", - "000330333300000300030000000000003000000003333000330003303333303303333300000000000000000000000000000000000000", - "000333333333333333333000000000033333333333333333333333303333303303333333333333333333333333333333301111111111", - "000000003333333333033000000000033303333333333333333333303333303300330000000000000000000000000000001111111111", - "000333333333333333333000000000333333333333333333333333303333303333333333333333333333333333333333301111111111", - "000333333333333000000000000000000000000003330000000000003333300033333333333333333333330000000000000000000000", - "000303333333333333333300000000333333333333333333333333333333333000000330000000000000000000333333333333333333", - "000000000000333333330300000000333333333333333333333333333333333333333330000333333333330000333333333333333333", - "000333333333333000000000000000000000000003333333333333333333333333333330000333333333330000333333333333333333", - "000000303333333333333300000000000000000000000000033333333333333333333330000333333333333300333333300000000000", - "000000003333333333333000000000000000000000000000033333333333333333333330000333333333333300003330000000000000", - "000000000003333333000000000000000000000000000000000330000000003300000000000333333333333300333333300000000000", - "000000003333333300000000000000000000000000000000033333333333333333333000000333333333333300333333300000000000", - "000000003333333300000000000000000000000000000000033333333333333333333000000333333333333333333333300000000000", - "000000003333300000000000000000000000000000000000000000003333333333333000000000000000003333333330000000000000", - "000000003333333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - ], - "points": { - "warp_0": [19, 5], - "warp_1": [32, 5], - "warp_2": [12, 5] + { + "name": "lass", + "coord": [75, 3], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 1, + "source_script": "Route4_EventScript_Crissy" }, - "warps": [ - {"coord": [19, 5], "enter": "cave_entrance", "to_map": "MtMoon_1F", "to_point": "warp_3"}, - {"coord": [32, 5], "enter": "cave_entrance", "to_map": "MtMoon_B1F", "to_point": "warp_7"}, - {"coord": [12, 5], "enter": "walk_into", "to_map": "Route4_PokemonCenter_1F", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [{"side": "south", "to_map": "Route3", "offset": -60}, {"side": "east", "to_map": "CeruleanCity", "offset": -10}], - "npcs": [ - {"name": "woman_1", "coord": [9, 8], "wander": {"min": [8, 7], "max": [10, 9]}}, - {"name": "lass", "coord": [75, 3], "facing": "east", "trainer": {"sight": 4}}, - {"name": "boy", "coord": [15, 14], "wander": {"min": [14, 14], "max": [16, 14]}}, - {"name": "black_belt", "coord": [47, 3]}, - {"name": "black_belt", "coord": [50, 3]} - ], - "items": [ - {"name": "item_ball", "coord": [67, 5], "hide_flag": "FLAG_HIDE_ROUTE4_TM05"} - ] + { + "name": "boy", + "coord": [15, 14], + "wander": {"min": [14, 14], "max": [16, 14]}, + "source_event": 3, + "source_script": "Route4_EventScript_Boy" + }, + {"name": "black_belt", "coord": [47, 3], "source_event": 4, "source_script": "Route4_EventScript_MegaPunchTutor"}, + {"name": "black_belt", "coord": [50, 3], "source_event": 5, "source_script": "Route4_EventScript_MegaKickTutor"} + ], + "items": [ + { + "name": "item_ball", + "coord": [67, 5], + "source_event": 2, + "hide_flag": "FLAG_HIDE_ROUTE4_TM05", + "source_script": "Route4_EventScript_ItemTM05", + "item": "tm05" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route4_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/Route4_PokemonCenter_1F.json index 88c35d6..08382b7 100644 --- a/data/games/frlg/maps/runtime/Route4_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/Route4_PokemonCenter_1F.json @@ -1,55 +1,83 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route4_PokemonCenter_1F", - "source": { - "decomp_file": "data/maps/Route4_PokemonCenter_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route4_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/Route4_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "salesman_front": [2, 3], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "Route4", "to_point": "warp_2"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "Route4", "to_point": "warp_2"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "Route4", "to_point": "warp_2"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "Route4_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "Route4_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_ROUTE4_NURSE" }, - "allow_running": false, - "tiles": [ - "#.#############", - "###############", - "....###..##....", - "....#######....", - "...............", - "...............", - "#..........##..", - "...........##..", - "...............", - "###############" - ], - "elevation": [ - "030000000000000", - "000000000000000", - "333300033003333", - "333300000003333", - "333333333333333", - "330333333333333", - "044033333330033", - "330333333330033", - "333333333333333", - "000000000000000" - ], - "points": { - "nurse_front": [7, 4], - "salesman_front": [2, 3], - "warp_1": [7, 8] + { + "name": "balding_man", + "coord": [1, 3], + "source_event": 1, + "source_script": "Route4_PokemonCenter_1F_EventScript_MagikarpSalesman" }, - "warps": [ - {"coord": [6, 8], "enter": "walk_into", "to_map": "Route4", "to_point": "warp_2"}, - {"coord": [7, 8], "enter": "walk_south", "to_map": "Route4", "to_point": "warp_2"}, - {"coord": [8, 8], "enter": "walk_into", "to_map": "Route4", "to_point": "warp_2"}, - {"coord": [1, 6], "enter": "step_on"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "nurse", "coord": [7, 2]}, - {"name": "balding_man", "coord": [1, 3]}, - {"name": "gentleman", "coord": [12, 5]}, - {"name": "boy", "coord": [5, 4], "wander": {"min": [4, 3], "max": [6, 5]}}, - {"name": "youngster", "coord": [14, 4]}, - {"name": "clipboard", "coord": [12, 6]} - ] + { + "name": "gentleman", + "coord": [12, 5], + "source_event": 2, + "source_script": "Route4_PokemonCenter_1F_EventScript_Gentleman" + }, + { + "name": "boy", + "coord": [5, 4], + "wander": {"min": [4, 3], "max": [6, 5]}, + "source_event": 3, + "source_script": "Route4_PokemonCenter_1F_EventScript_Boy" + }, + { + "name": "youngster", + "coord": [14, 4], + "source_event": 4, + "source_script": "Route4_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "clipboard", + "coord": [12, 6], + "source_event": 5, + "source_script": "Route4_PokemonCenter_1F_EventScript_Newspaper" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route5.json b/data/games/frlg/maps/runtime/Route5.json index 78f2c3b..9d13920 100644 --- a/data/games/frlg/maps/runtime/Route5.json +++ b/data/games/frlg/maps/runtime/Route5.json @@ -1,62 +1,64 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route5", - "source": { - "decomp_file": "data/maps/Route5/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#.#####..#....###############", - "###############....#.#####..#....###############", - "###############....#.#####..#....###############", - "###############....#.##D##..#....###############", - "###############....#........#....###############", - "###############....vvvvvvvvvv....###############", - "###############..................###############", - "###############...............##################", - "###############...............##################", - "###############...............#D################", - "###############.......#....#....S###############", - "###############.......######.....###############", - "################################################", - "##############........######......##############", - "################################################", - "################################################", - "########################..######################", - "#######################....#####################" - ], - "points": { - "warp_0": [31, 31] - }, - "warps": [ - {"coord": [31, 31], "enter": "walk_into", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_1"}, - {"coord": [23, 25], "enter": "walk_into"}, - {"coord": [24, 32], "enter": "walk_south"}, - {"coord": [25, 32], "enter": "walk_south"} - ], - "flag_sets": {}, - "connections": [{"side": "north", "to_map": "CeruleanCity", "offset": 0}] + "format": "pokesim-runtime-map/2", + "name": "Route5", + "source": { + "decomp_file": "data/maps/Route5/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#~~~~~~~~#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#vvvvvvvv#....###############", + "###############....#........#....###############", + "###############....#........#....###############", + "###############....#.#####..#....###############", + "###############....#.#####..#....###############", + "###############....#.#####..#....###############", + "###############....#.##D##..#....###############", + "###############....#........#....###############", + "###############....vvvvvvvvvv....###############", + "###############..................###############", + "###############...............##################", + "###############...............##################", + "###############...............#D################", + "###############.......#....#....S###############", + "###############.......######.....###############", + "################################################", + "##############........######......##############", + "################################################", + "################################################", + "########################..######################", + "#######################....#####################" + ], + "points": {"warp_0": [31, 31], "warp_1": [23, 25], "warp_2": [24, 32], "warp_3": [25, 32]}, + "warps": [ + {"coord": [31, 31], "enter": "walk_into", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_1"}, + {"coord": [23, 25], "enter": "walk_into", "to_map": "Route5_PokemonDayCare", "to_point": "warp_1"}, + {"coord": [24, 32], "enter": "walk_south", "to_map": "Route5_SouthEntrance", "to_point": "warp_1"}, + {"coord": [25, 32], "enter": "walk_south", "to_map": "Route5_SouthEntrance", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "CeruleanCity", "offset": 0}, + {"side": "south", "to_map": "SaffronCity_Connection", "offset": 0} + ] } diff --git a/data/games/frlg/maps/runtime/Route6.json b/data/games/frlg/maps/runtime/Route6.json index b8c57c7..4259088 100644 --- a/data/games/frlg/maps/runtime/Route6.json +++ b/data/games/frlg/maps/runtime/Route6.json @@ -1,111 +1,140 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route6", - "source": { - "decomp_file": "data/maps/Route6/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "Route6", + "source": { + "decomp_file": "data/maps/Route6/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "########################", + "########################", + "########################", + "########################", + "########################", + "##.......###..###.....##", + "##.......#......#.....##", + "##vvv.vvvv......vvv.vv##", + "##....................##", + "##....................##", + "##....................##", + "##vvvvvvv.vvvvvvvv######", + "##................######", + "##................#D####", + "##....................##", + "##~~~~...~~~~~~......S##", + "##~~~~...~~~~~~~~~~~~~##", + "##~~~~...~~~~~~~~~~~~~##", + "##~~~~...~~~~~~~~~~~~~##", + "##~~~~..............~~##", + "##~~~~..............~~##", + "##~~~~..............~~##", + "##~~~~~~~~~~~~~~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##wwwwwwwwwwwww~~...~~##", + "##..................~~##", + "##..................~~##", + "##..................~~##", + "#######......~~~~#######", + "##....#......~~~~#....##", + "#######......~~~~#######", + "#######......~~~~#######", + "##########...###########", + "######...#...#....######", + "########.#...###########", + "########.#...###########", + "wwwwwwwww#...###########", + "wwwwwwwww#...###########" + ], + "elevation": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "003333333000330003333300", + "003333333033333303333300", + "000003000033333300030000", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000000300000000000000", + "003333333333333333000000", + "003333333333333333000000", + "003333333333333333333300", + "003333333333333333333000", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "001111111111111333333300", + "001111111111111333333300", + "001111111111111333333300", + "001111111111111333333300", + "003333333333333333333300", + "003333333333333333333300", + "003333333333333333333300", + "000000033333333330000000", + "003333033333333330333300", + "000000033333333330000000", + "000000033333333330000000", + "000000000033300000000000", + "000000333033303333000000", + "000000003033300000000000", + "000000003033300000000000", + "111111111033300000000000", + "000000001033300000000000" + ], + "points": {"warp_0": [19, 13], "warp_1": [12, 5]}, + "warps": [ + {"coord": [19, 13], "enter": "walk_into", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_1"}, + {"coord": [12, 5], "enter": "cave_entrance", "to_map": "Route6_NorthEntrance", "to_point": "warp_2"}, + {"coord": [13, 5], "enter": "cave_entrance", "to_map": "Route6_NorthEntrance", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "SaffronCity_Connection", "offset": 0}, + {"side": "south", "to_map": "VermilionCity", "offset": -12} + ], + "npcs": [ + { + "name": "bug_catcher", + "coord": [3, 16], + "facing": "east", + "trainer": {"sight": 5}, + "source_event": 0, + "source_script": "Route6_EventScript_Keigo" }, - "tiles": [ - "########################", - "########################", - "########################", - "########################", - "########################", - "##.......###..###.....##", - "##.......#......#.....##", - "##vvv.vvvv......vvv.vv##", - "##....................##", - "##....................##", - "##....................##", - "##vvvvvvv.vvvvvvvv######", - "##................######", - "##................#D####", - "##....................##", - "##~~~~...~~~~~~......S##", - "##~~~~...~~~~~~~~~~~~~##", - "##~~~~...~~~~~~~~~~~~~##", - "##~~~~...~~~~~~~~~~~~~##", - "##~~~~..............~~##", - "##~~~~..............~~##", - "##~~~~..............~~##", - "##~~~~~~~~~~~~~~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##..................~~##", - "##..................~~##", - "##..................~~##", - "#######......~~~~#######", - "##....#......~~~~#....##", - "#######......~~~~#######", - "#######......~~~~#######", - "##########...###########", - "######...#...#....######", - "########.#...###########", - "########.#...###########", - "wwwwwwwww#...###########", - "wwwwwwwww#...###########" - ], - "elevation": [ - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "003333333000330003333300", - "003333333033333303333300", - "000003000033333300030000", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "000000000300000000000000", - "003333333333333333000000", - "003333333333333333000000", - "003333333333333333333300", - "003333333333333333333000", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "001111111111111333333300", - "001111111111111333333300", - "001111111111111333333300", - "001111111111111333333300", - "003333333333333333333300", - "003333333333333333333300", - "003333333333333333333300", - "000000033333333330000000", - "003333033333333330333300", - "000000033333333330000000", - "000000033333333330000000", - "000000000033300000000000", - "000000333033303333000000", - "000000003033300000000000", - "000000003033300000000000", - "111111111033300000000000", - "000000001033300000000000" - ], - "points": { - "warp_0": [19, 13] + {"name": "camper", "coord": [12, 21], "source_event": 1, "source_script": "Route6_EventScript_Ricky"}, + {"name": "picnicker", "coord": [13, 21], "source_event": 2, "source_script": "Route6_EventScript_Nancy"}, + { + "name": "bug_catcher", + "coord": [20, 25], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 3, + "source_script": "Route6_EventScript_Elijah" }, - "warps": [ - {"coord": [19, 13], "enter": "walk_into", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_1"}, - {"coord": [12, 5], "enter": "cave_entrance"}, - {"coord": [13, 5], "enter": "cave_entrance"} - ], - "flag_sets": {}, - "connections": [{"side": "south", "to_map": "VermilionCity", "offset": -12}], - "npcs": [ - {"name": "bug_catcher", "coord": [3, 16], "facing": "east", "trainer": {"sight": 5}}, - {"name": "camper", "coord": [12, 21]}, - {"name": "picnicker", "coord": [13, 21]}, - {"name": "bug_catcher", "coord": [20, 25], "facing": "west", "trainer": {"sight": 3}}, - {"name": "picnicker", "coord": [13, 32], "facing": "west", "trainer": {"sight": 3}}, - {"name": "camper", "coord": [13, 33], "facing": "west", "trainer": {"sight": 3}} - ] + { + "name": "picnicker", + "coord": [13, 32], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "Route6_EventScript_Isabelle" + }, + { + "name": "camper", + "coord": [13, 33], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "Route6_EventScript_Jeff" + } + ] } diff --git a/data/games/frlg/maps/runtime/Route9.json b/data/games/frlg/maps/runtime/Route9.json index db530ff..0d09894 100644 --- a/data/games/frlg/maps/runtime/Route9.json +++ b/data/games/frlg/maps/runtime/Route9.json @@ -1,56 +1,149 @@ { - "format": "pokesim-runtime-map/2", - "name": "Route9", - "source": { - "decomp_file": "data/maps/Route9/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "########################################################################", - "......#~~~~~~~~~~~............######~~~~~~######.................#######", - "#######~~~~~~~~~~~............######~~~~~~######.................#######", - "#######~~~~~~~~~~~#####.......######......######..........#####..#######", - "#######~~~~~~~~~~~#####vvvvv..######vv..vv######vv..vvvvvv#####vv#######", - "#######~~~~~~~~~~~#####.......######......######..........#####..#######", - "......#...........#####.......######......................#####..#######", - "#######vvvvvvvv#..#####......S###########.................#####..#######", - "...............########.............#####....#####...##########.........", - "..#............########.............#####....#####...#####..............", - "###########....########vvvvvvvvvvv..#####....#####...#####..............", - "....#######vvvv########.............#####vvvv#####vv.#####...#####...###", - "###########....########.............#####....#####...#####vvv#####vvv###", - "###########..........................................#####...#####...###", - "###########...............######.....................#####...#####...###", - "###########vvvvvvvvv..vvvv######vv..vvvvvvvvvvvvvvvvv#####vvv#####vvv###", - "###########...............######.....................................###", - "###########...............######.....................................###", - "########################################################################", - "########################################################################" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [{"side": "west", "to_map": "CeruleanCity", "offset": -10}, {"side": "east", "to_map": "Route10", "offset": 0}], - "npcs": [ - {"name": "picnicker", "coord": [14, 10], "facing": "west", "trainer": {"sight": 3}}, - {"name": "hiker", "coord": [20, 17], "trainer": {"sight": 4, "looks": ["north", "west"]}}, - {"name": "hiker", "coord": [61, 16], "facing": "south", "trainer": {"sight": 1}}, - {"name": "camper", "coord": [26, 7], "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}}, - {"name": "bug_catcher", "coord": [26, 1], "facing": "south", "trainer": {"sight": 2}}, - {"name": "bug_catcher", "coord": [49, 7], "facing": "east", "trainer": {"sight": 3}}, - { - "name": "hiker", - "coord": [53, 2], - "wander": {"min": [50, 2], "max": [56, 2]}, - "trainer": {"sight": 1, "looks": ["west", "east"]} - }, - {"name": "picnicker", "coord": [60, 9], "facing": "east", "trainer": {"sight": 4}}, - {"name": "camper", "coord": [36, 6], "facing": "east", "trainer": {"sight": 5}}, - {"name": "cut_tree", "coord": [2, 8], "hide_flag": "FLAG_TEMP_12"} - ], - "items": [ - {"name": "item_ball", "coord": [12, 17], "hide_flag": "FLAG_HIDE_ROUTE9_TM40"}, - {"name": "item_ball", "coord": [65, 17], "hide_flag": "FLAG_HIDE_ROUTE9_BURN_HEAL"} - ] + "format": "pokesim-runtime-map/2", + "name": "Route9", + "source": { + "decomp_file": "data/maps/Route9/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route9/map.json", + "events_sha256": "0a8b7cfd3028e15d59903f3f5dfc503f98712e5592d8d6a99a26cddc430d5270", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########################################################################", + "......#~~~~~~~~~~~............######~~~~~~######.................#######", + "#######~~~~~~~~~~~............######~~~~~~######.................#######", + "#######~~~~~~~~~~~#####.......######......######..........#####..#######", + "#######~~~~~~~~~~~#####vvvvv..######vv..vv######vv..vvvvvv#####vv#######", + "#######~~~~~~~~~~~#####.......######......######..........#####..#######", + "......#...........#####.......######......................#####..#######", + "#######vvvvvvvv#..#####......S###########.................#####..#######", + "...............########.............#####....#####...##########.........", + "..#............########.............#####....#####...#####..............", + "###########....########vvvvvvvvvvv..#####....#####...#####..............", + "....#######vvvv########.............#####vvvv#####vv.#####...#####...###", + "###########....########.............#####....#####...#####vvv#####vvv###", + "###########..........................................#####...#####...###", + "###########...............######.....................#####...#####...###", + "###########vvvvvvvvv..vvvv######vv..vvvvvvvvvvvvvvvvv#####vvv#####vvv###", + "###########...............######.....................................###", + "###########...............######.....................................###", + "########################################################################", + "########################################################################" + ], + "points": {}, + "warps": [], + "flag_sets": {}, + "connections": [ + {"side": "west", "to_map": "CeruleanCity", "offset": -10}, + {"side": "east", "to_map": "Route10", "offset": 0} + ], + "npcs": [ + { + "name": "picnicker", + "coord": [14, 10], + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 0, + "source_script": "Route9_EventScript_Alicia" + }, + { + "name": "hiker", + "coord": [20, 17], + "trainer": {"sight": 4, "looks": ["north", "west"]}, + "source_event": 1, + "source_script": "Route9_EventScript_Jeremy" + }, + { + "name": "hiker", + "coord": [61, 16], + "facing": "south", + "trainer": {"sight": 1}, + "source_event": 2, + "source_script": "Route9_EventScript_Alan" + }, + { + "name": "camper", + "coord": [26, 7], + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "source_event": 3, + "source_script": "Route9_EventScript_Chris" + }, + { + "name": "bug_catcher", + "coord": [26, 1], + "facing": "south", + "trainer": {"sight": 2}, + "source_event": 4, + "source_script": "Route9_EventScript_Brent" + }, + { + "name": "bug_catcher", + "coord": [49, 7], + "facing": "east", + "trainer": {"sight": 3}, + "source_event": 5, + "source_script": "Route9_EventScript_Conner" + }, + { + "name": "hiker", + "coord": [53, 2], + "wander": {"min": [50, 2], "max": [56, 2]}, + "trainer": {"sight": 1, "looks": ["west", "east"]}, + "source_event": 6, + "source_script": "Route9_EventScript_Brice" + }, + { + "name": "picnicker", + "coord": [60, 9], + "facing": "east", + "trainer": {"sight": 4}, + "source_event": 7, + "source_script": "Route9_EventScript_Caitlin" + }, + { + "name": "camper", + "coord": [36, 6], + "facing": "east", + "trainer": {"sight": 5}, + "source_event": 8, + "source_script": "Route9_EventScript_Drew" + }, + { + "name": "cut_tree", + "coord": [2, 8], + "hide_flag": "FLAG_TEMP_12", + "source_event": 9, + "source_script": "EventScript_CutTree", + "source_local_id": "LOCALID_ROUTE9_CUT_TREE" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [12, 17], + "source_event": 10, + "hide_flag": "FLAG_HIDE_ROUTE9_TM40", + "source_script": "Route9_EventScript_ItemTM40", + "item": "tm40" + }, + { + "name": "item_ball", + "coord": [65, 17], + "source_event": 11, + "hide_flag": "FLAG_HIDE_ROUTE9_BURN_HEAL", + "source_script": "Route9_EventScript_ItemBurnHeal", + "item": "burn_heal" + } + ] } diff --git a/data/games/frlg/maps/runtime/SSAnne_1F_Corridor.json b/data/games/frlg/maps/runtime/SSAnne_1F_Corridor.json index bf9140f..654257b 100644 --- a/data/games/frlg/maps/runtime/SSAnne_1F_Corridor.json +++ b/data/games/frlg/maps/runtime/SSAnne_1F_Corridor.json @@ -1,81 +1,68 @@ { - "format": "pokesim-runtime-map/2", - "name": "SSAnne_1F_Corridor", - "source": { - "decomp_file": "data/maps/SSAnne_1F_Corridor/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - ".................#####.........", - ".................##D##.........", - ".................#...#.........", - ".................#...#.........", - ".................#...#.........", - ".................#...#.........", - "#.################...##########", - "##################...##########", - "###...........................#", - "###...........................#", - "#.............................#", - "#...######################....#", - "#...######################....#", - "#...######################....#", - "#...######################....#", - "#...######################....#", - "#...########################..#", - "#...########################..#", - "#...########################..#", - ".###.##########################", - "###############################" - ], - "elevation": [ - "0000000000000000000000000000000", - "0000000000000000000000000000000", - "0000000000000000003330000000000", - "0000000000000000003330000000000", - "0000000000000000003330000000000", - "0000000000000000003330000000000", - "0000000000000000003330000000000", - "0000000000000000003330000000000", - "0003333333333333333333333333330", - "0003333333333333333333333333330", - "0333333333333333333333333333330", - "0333000000000000000000000033330", - "0333000000000000000000000033330", - "0333000000000000000000000033330", - "0333000000000000000000000033330", - "0333000000000000000000000033330", - "0333000000000000000000000033330", - "0333000000000000000000000000330", - "0333000000000000000000000000330", - "0000000000000000000000000000000", - "0000000000000000000000000000000" - ], - "points": { - "warp_0": [3, 8], - "warp_2": [19, 1], - "warp_3": [20, 0] - }, - "warps": [ - {"coord": [3, 8], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_0"}, - {"coord": [2, 18], "enter": "walk_south"}, - {"coord": [19, 1], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_2"}, - {"coord": [20, 0], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_3"}, - {"coord": [3, 20], "enter": "walk_into"}, - {"coord": [28, 17], "enter": "walk_west"}, - {"coord": [5, 10], "enter": "walk_south"}, - {"coord": [8, 10], "enter": "walk_south"}, - {"coord": [11, 10], "enter": "walk_south"}, - {"coord": [14, 10], "enter": "walk_south"}, - {"coord": [17, 10], "enter": "walk_south"}, - {"coord": [23, 10], "enter": "walk_south"}, - {"coord": [20, 10], "enter": "walk_south"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "sailor", "coord": [18, 8]}, - {"name": "worker_m", "coord": [12, 9]} - ] + "format": "pokesim-runtime-map/2", + "name": "SSAnne_1F_Corridor", + "source": { + "decomp_file": "data/maps/SSAnne_1F_Corridor/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "tiles": [ + ".................#####.........", + ".................##D##.........", + ".................#...#.........", + ".................#...#.........", + ".................#...#.........", + ".................#...#.........", + "#.################...##########", + "##################...##########", + "###...........................#", + "###...........................#", + "#.............................#", + "#...######################....#", + "#...######################....#", + "#...######################....#", + "#...######################....#", + "#...######################....#", + "#...########################..#", + "#...########################..#", + "#...########################..#", + ".###.##########################", + "###############################" + ], + "points": { + "warp_0": [3, 8], + "warp_1": [2, 18], + "warp_2": [19, 1], + "warp_3": [20, 0], + "warp_5": [28, 17], + "warp_6": [5, 10], + "warp_7": [8, 10], + "warp_8": [11, 10], + "warp_9": [14, 10], + "warp_10": [17, 10], + "warp_11": [23, 10], + "warp_12": [20, 10] + }, + "warps": [ + {"coord": [3, 8], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_0"}, + {"coord": [2, 18], "enter": "walk_south", "to_map": "SSAnne_Kitchen", "to_point": "warp_0"}, + {"coord": [19, 1], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_2"}, + {"coord": [20, 0], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_3"}, + {"coord": [3, 20], "enter": "walk_into", "to_map": "SSAnne_Kitchen", "to_point": "warp_0"}, + {"coord": [28, 17], "enter": "walk_west", "to_map": "SSAnne_B1F_Corridor", "to_point": "warp_0"}, + {"coord": [5, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room1", "to_point": "warp_0"}, + {"coord": [8, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room2", "to_point": "warp_0"}, + {"coord": [11, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room3", "to_point": "warp_0"}, + {"coord": [14, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room4", "to_point": "warp_0"}, + {"coord": [17, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room5", "to_point": "warp_0"}, + {"coord": [23, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room7", "to_point": "warp_0"}, + {"coord": [20, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room6", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "sailor", "coord": [18, 8], "source_event": 0, "source_script": "SSAnne_1F_Corridor_EventScript_Sailor"}, + {"name": "worker_m", "coord": [12, 9], "source_event": 1, "source_script": "SSAnne_1F_Corridor_EventScript_WorkerM"} + ] } diff --git a/data/games/frlg/maps/runtime/SSAnne_2F_Corridor.json b/data/games/frlg/maps/runtime/SSAnne_2F_Corridor.json index e959320..e0a81ca 100644 --- a/data/games/frlg/maps/runtime/SSAnne_2F_Corridor.json +++ b/data/games/frlg/maps/runtime/SSAnne_2F_Corridor.json @@ -1,48 +1,69 @@ { - "format": "pokesim-runtime-map/2", - "name": "SSAnne_2F_Corridor", - "source": { - "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "SSAnne_2F_Corridor", + "source": { + "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "##################################", + "##################################", + "#..###########################.###", + "#..###########################.###", + "#....#########################...#", + "#....#########################...#", + "#....#########################...#", + "#....#########################...#", + "#....#######################.....#", + "#....#######################.....#", + "#....#D###D###D###D###D###D#.....#", + "###..............................#", + "###..............................#", + "###..............................#", + "#................................#", + "##################################" + ], + "points": { + "warp_0": [2, 2], + "warp_1": [3, 12], + "warp_2": [30, 2], + "warp_3": [6, 10], + "warp_4": [10, 10], + "warp_5": [14, 10], + "warp_6": [18, 10], + "warp_7": [22, 10], + "warp_8": [26, 10] + }, + "warps": [ + {"coord": [2, 2], "enter": "walk_east", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_0"}, + {"coord": [3, 12], "enter": "walk_west", "to_map": "SSAnne_3F_Corridor", "to_point": "warp_1"}, + {"coord": [30, 2], "enter": "walk_east", "to_map": "SSAnne_CaptainsOffice", "to_point": "warp_0"}, + {"coord": [6, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room1", "to_point": "warp_0"}, + {"coord": [10, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room2", "to_point": "warp_0"}, + {"coord": [14, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room3", "to_point": "warp_0"}, + {"coord": [18, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room4", "to_point": "warp_0"}, + {"coord": [22, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room5", "to_point": "warp_0"}, + {"coord": [26, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room6", "to_point": "warp_0"} + ], + "flag_sets": {"new_game": ["FLAG_HIDE_SS_ANNE_RIVAL"]}, + "connections": [], + "npcs": [ + { + "name": "blue", + "coord": [30, 2], + "hide_flag": "FLAG_HIDE_SS_ANNE_RIVAL", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_SS_ANNE_RIVAL" }, - "tiles": [ - "##################################", - "##################################", - "#..###########################.###", - "#..###########################.###", - "#....#########################...#", - "#....#########################...#", - "#....#########################...#", - "#....#########################...#", - "#....#######################.....#", - "#....#######################.....#", - "#....#D###D###D###D###D###D#.....#", - "###..............................#", - "###..............................#", - "###..............................#", - "#................................#", - "##################################" - ], - "points": { - "warp_0": [2, 2], - "warp_2": [30, 2] - }, - "warps": [ - {"coord": [2, 2], "enter": "walk_east", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_0"}, - {"coord": [3, 12], "enter": "walk_west"}, - {"coord": [30, 2], "enter": "walk_east", "to_map": "SSAnne_CaptainsOffice", "to_point": "warp_0"}, - {"coord": [6, 10], "enter": "walk_into"}, - {"coord": [10, 10], "enter": "walk_into"}, - {"coord": [14, 10], "enter": "walk_into"}, - {"coord": [18, 10], "enter": "walk_into"}, - {"coord": [22, 10], "enter": "walk_into"}, - {"coord": [26, 10], "enter": "walk_into"} - ], - "flag_sets": {"new_game": ["FLAG_HIDE_SS_ANNE_RIVAL"]}, - "connections": [], - "npcs": [ - {"name": "blue", "coord": [30, 2], "hide_flag": "FLAG_HIDE_SS_ANNE_RIVAL"}, - {"name": "sailor", "coord": [2, 7], "wander": {"min": [2, 5], "max": [2, 9]}} - ] + { + "name": "sailor", + "coord": [2, 7], + "wander": {"min": [2, 5], "max": [2, 9]}, + "source_event": 1, + "source_script": "SSAnne_2F_Corridor_EventScript_Sailor" + } + ] } diff --git a/data/games/frlg/maps/runtime/SSAnne_CaptainsOffice.json b/data/games/frlg/maps/runtime/SSAnne_CaptainsOffice.json index 01452ab..c7f657e 100644 --- a/data/games/frlg/maps/runtime/SSAnne_CaptainsOffice.json +++ b/data/games/frlg/maps/runtime/SSAnne_CaptainsOffice.json @@ -1,32 +1,35 @@ { - "format": "pokesim-runtime-map/2", - "name": "SSAnne_CaptainsOffice", - "source": { - "decomp_file": "data/maps/SSAnne_CaptainsOffice/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "#########", - "#########", - "#......##", - "####.#..#", - "####....#", - "#.......#", - "###.....#", - "###.....#", - "###.....#", - "#########" - ], - "points": { - "warp_0": [3, 7] - }, - "warps": [ - {"coord": [3, 7], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "captain", "coord": [5, 4]} - ] + "format": "pokesim-runtime-map/2", + "name": "SSAnne_CaptainsOffice", + "source": { + "decomp_file": "data/maps/SSAnne_CaptainsOffice/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#########", + "#########", + "#......##", + "####.#..#", + "####....#", + "#.......#", + "###.....#", + "###.....#", + "###.....#", + "#########" + ], + "points": {"warp_0": [3, 7]}, + "warps": [{"coord": [3, 7], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_2"}], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "captain", + "coord": [5, 4], + "source_event": 0, + "source_script": "SSAnne_CaptainsOffice_EventScript_Captain", + "source_local_id": "LOCALID_SS_ANNE_CAPTAIN" + } + ] } diff --git a/data/games/frlg/maps/runtime/SSAnne_Exterior.json b/data/games/frlg/maps/runtime/SSAnne_Exterior.json index 803103e..ea77953 100644 --- a/data/games/frlg/maps/runtime/SSAnne_Exterior.json +++ b/data/games/frlg/maps/runtime/SSAnne_Exterior.json @@ -1,94 +1,97 @@ { - "format": "pokesim-runtime-map/2", - "name": "SSAnne_Exterior", - "source": { - "decomp_file": "data/maps/SSAnne_Exterior/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "wwwwwwwwww##wwwwwwwwwwwwwwwwww#####wwwwwwwwww#########################", - "wwwwwwwwww##wwwwwwwwwwwwwwwwww#####wwwwwwwwww#########################", - "wwww##wwwwwwwwwwwwwwwwwwwwwwww#####wwwwwwwwww##........###.###########", - "wwww##wwwwwwwwwwwwww####wwwwww#####wwwwwwwww###........###.###########", - "##wwwwwwww##ww##ww######www##w#####w##wwww#####............###########", - "##wwwww##w##########www#########.#######ww##wwwwwwwwwwwww..###########", - "wwww##w####w##ww##wwwww####ww##...##ww####wwwwwwwwwwwwwww..###########", - "wwww####w##wwwwwwwwwwwwwwwwwwww...wwwwww##wwwwwwwwwwwwwww..###########", - "www##w##wwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..###########", - "w####wwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..###########", - "w##wwwwwwwwwwwwwwwwwwww##wwwwww#.#wwwwww##wwwwwwwwwwwwwww..###########", - "ww##wwwwwwwwwwwwwwwww####ww#####.###ww######wwwwwwwwwwwww..###########", - "ww##wwwwwwwwwwwwwwwww##ww#######.#######ww##wwwwwwwwwwwww..###########", - "##wwwwwwwwwwwwwwwwww##www##www##.##w##wwwwww##wwwwwwwwwww..###########", - "##wwwwwwwwwwwwwwww####wwwwwwww##.##wwwwwwwww##wwwwwwwwwww..###########", - "w##wwwwwwwwwwwwwww##wwwwwwwwww######wwwwwwwww##wwwwwwwwww..###########", - "w##wwwwwwwwwwwwww##wwwwwwwwwwwwwwwwwwwwwwwwww##ww##wwwwww..###########", - "ww##wwwwwwwwww##w##wwwwwwwwwwwwwwwwwwwwwwwwwwww####wwwwww..###########", - "ww##w##wwwww######wwwwwwwwwwwwwwwwwwwwwwwwwwwww##w##wwwww..###########", - "www####w##ww##ww##wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##wwwww..###########", - "www##w######wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", - "wwwwww##ww##wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##wwww..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww####ww..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##ww..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##ww..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww####..###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#################", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###############", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################" - ], - "elevation": [ - "1111111111001111111111111111110000011111111110000000000000000000000000", - "1111111111001111111111111111110000011111111110000000000000000000000011", - "1111001111111111111111111111110000011111111110033333333000300000000000", - "1111001111111111111100001111110000011111111100033333333000300000000000", - "0011111111001100110000001110010000010011110000033333333333300000000000", - "0011111001000000000011100000000030000000110011111111111113300000000000", - "1111001000010011001111100001100333001100001111111111111113300000000011", - "1111000010011111111111111111111333111111001111111111111113300000000000", - "1110010011111111111111111111111333111111111111111111111113300000000000", - "1000011111111111111111111111111333111111111111111111111113300000000000", - "1001111111111111111111100111111030111111001111111111111113300000000000", - "1100111111111111111110000110000030001100000011111111111113300000000000", - "1100111111111111111110011000000030000000110011111111111113300000000000", - "0011111111111111111100111001111030110011111100111111111113300000000000", - "0011111111111111110000111110110030011011111100111111111113300000000000", - "1001111111111111110011111011110000011110111110011111111113300000000000", - "1001111111111111100111101111111111111111110110011001111113300000000000", - "1100111111111100100111011111111111111111111101100001111113300000000000", - "1100100111110000001110111111111111111111111111100100111113300000000000", - "1110000100110011001111111111111111111111111111011100111113300000000000", - "1110010000001111111011111111111111111111111111101111001113300000000000", - "1111110011001111101111111111111111111111111111110111001113300000000000", - "1111111111111111011111111111111111111111111111111110011113300000000000", - "1111111111111011111111111111111111111111111111111010000113300000000000", - "1111111111111111111111111111111111111111111111111111100113300000000000", - "1111111111111111111111111111111111111111111111111101001113300000000000", - "1111111111111111111111111111111111111111111111111110001113300000000000", - "1111111111111111111111111111111111111111111111111111100113300000000000", - "1111111111111111111111111111111111111111111111111111100003300000000000", - "1111111111111111111111111111111111111111111111111111000000000000000000", - "1111111111111111111111111111111111111111111111111111110000000000000000", - "1111111111111111111111111111111111111111111111111111110000000000000000" - ], - "points": { - "warp_1": [32, 5], - "warp_2": [32, 14], - "warp_3": [33, 15] - }, - "warps": [ - {"coord": [31, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_0"}, - {"coord": [32, 5], "enter": "walk_north", "to_map": "VermilionCity", "to_point": "warp_1"}, - {"coord": [32, 14], "enter": "walk_south", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_2"}, - {"coord": [33, 15], "enter": "walk_into", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_3"}, - {"coord": [33, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "ss_anne", "coord": [30, 16], "hide_flag": "FLAG_HIDE_SS_ANNE"} - ] + "format": "pokesim-runtime-map/2", + "name": "SSAnne_Exterior", + "source": { + "decomp_file": "data/maps/SSAnne_Exterior/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#........###.###########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#........###.###########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#............###########", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "1111111111001111111111111111110000011111111110000000000000000000000000", + "1111111111001111111111111111110000011111111110000000000000000000000011", + "1111001111111111111111111111110000011111111110033333333000300000000000", + "1111001111111111111100001111110000011111111100033333333000300000000000", + "0011111111001100110000001110010000010011110000033333333333300000000000", + "0011111001000000000011100000000030000000110011111111111113300000000000", + "1111001000010011001111100001100333001100001111111111111113300000000011", + "1111000010011111111111111111111333111111001111111111111113300000000000", + "1110010011111111111111111111111333111111111111111111111113300000000000", + "1000011111111111111111111111111333111111111111111111111113300000000000", + "1001111111111111111111100111111030111111001111111111111113300000000000", + "1100111111111111111110000110000030001100000011111111111113300000000000", + "1100111111111111111110011000000030000000110011111111111113300000000000", + "0011111111111111111100111001111030110011111100111111111113300000000000", + "0011111111111111110000111110110030011011111100111111111113300000000000", + "1001111111111111110011111011110000011110111110011111111113300000000000", + "1001111111111111100111101111111111111111110110011001111113300000000000", + "1100111111111100100111011111111111111111111101100001111113300000000000", + "1100100111110000001110111111111111111111111111100100111113300000000000", + "1110000100110011001111111111111111111111111111011100111113300000000000", + "1110010000001111111011111111111111111111111111101111001113300000000000", + "1111110011001111101111111111111111111111111111110111001113300000000000", + "1111111111111111011111111111111111111111111111111110011113300000000000", + "1111111111111011111111111111111111111111111111111010000113300000000000", + "1111111111111111111111111111111111111111111111111111100113300000000000", + "1111111111111111111111111111111111111111111111111101001113300000000000", + "1111111111111111111111111111111111111111111111111110001113300000000000", + "1111111111111111111111111111111111111111111111111111100113300000000000", + "1111111111111111111111111111111111111111111111111111100003300000000000", + "1111111111111111111111111111111111111111111111111111000000000000000000", + "1111111111111111111111111111111111111111111111111111110000000000000000", + "1111111111111111111111111111111111111111111111111111110000000000000000" + ], + "points": {"warp_1": [32, 5], "warp_2": [32, 14], "warp_3": [33, 15]}, + "warps": [ + {"coord": [31, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_0"}, + {"coord": [32, 5], "enter": "walk_north", "to_map": "VermilionCity", "to_point": "warp_1"}, + {"coord": [32, 14], "enter": "walk_south", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_2"}, + {"coord": [33, 15], "enter": "walk_into", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_3"}, + {"coord": [33, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_2"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "ss_anne", + "coord": [30, 16], + "hide_flag": "FLAG_HIDE_SS_ANNE", + "source_event": 0, + "source_script": "0x0", + "source_local_id": "LOCALID_SS_ANNE" + } + ] } diff --git a/data/games/frlg/maps/runtime/SafariZone_Center.json b/data/games/frlg/maps/runtime/SafariZone_Center.json index baccfbe..acbb688 100644 --- a/data/games/frlg/maps/runtime/SafariZone_Center.json +++ b/data/games/frlg/maps/runtime/SafariZone_Center.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/SafariZone_Center/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + "date": "2026-10-31" }, "tiles": [ "###################################################", @@ -45,6 +44,44 @@ "###################################################", "###################################################" ], + "elevation": [ + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000030000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000033000000000000000000000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333333303333333333333333333300000000", + "000000000333333333111111111111111133333333300000000", + "000000000333333333111111111111111100000000000000000", + "000000000333333333111133333333111133333333330000000", + "000000000333333333111133333333111133333333330000000", + "000000003333333333111111111111111133333333300000000", + "000000003333333333111111111111111133333333300000000", + "000000000333333333333333333333003333333333300000000", + "000000000333333333000000000000003033333333300000000", + "000000000000000000333333333333333333333333300000000", + "000000000333333333333333333333333333333333300000000", + "000000000333333333333333333300000333333333300000000", + "000000000333333333333333333300000333333333300000000", + "000000000333333333333333333300000333333333300000000", + "000000000333333333333333333333033333333333300000000", + "000000000333333333333333303333333333333333300000000", + "000000000333333333333333333333333333333333300000000", + "000000000333333333333333333333333333333333300000000", + "000000000000000000000000333300000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000" + ], "points": { "warp_1": [26, 30], "warp_3": [25, 5], diff --git a/data/games/frlg/maps/runtime/UndergroundPath_NorthEntrance.json b/data/games/frlg/maps/runtime/UndergroundPath_NorthEntrance.json index 8826a4f..0c57df2 100644 --- a/data/games/frlg/maps/runtime/UndergroundPath_NorthEntrance.json +++ b/data/games/frlg/maps/runtime/UndergroundPath_NorthEntrance.json @@ -1,36 +1,39 @@ { - "format": "pokesim-runtime-map/2", - "name": "UndergroundPath_NorthEntrance", - "source": { - "decomp_file": "data/maps/UndergroundPath_NorthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "#############", - "#############", - "#...........#", - "..##.##..##..", - "..#..##...#..", - "..#..##...#..", - "..##.....##..", - ".............", - "#...........#", - "#############" - ], - "points": { - "warp_1": [6, 8], - "warp_3": [7, 4] - }, - "warps": [ - {"coord": [5, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, - {"coord": [6, 8], "enter": "walk_south", "to_map": "Route5", "to_point": "warp_0"}, - {"coord": [7, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, - {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "little_girl", "coord": [5, 6]} - ] + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_NorthEntrance", + "source": { + "decomp_file": "data/maps/UndergroundPath_NorthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "#...........#", + "..##.##..##..", + "..#..##...#..", + "..#..##...#..", + "..##.....##..", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, + {"coord": [6, 8], "enter": "walk_south", "to_map": "Route5", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, + {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "little_girl", + "coord": [5, 6], + "source_event": 0, + "source_script": "UndergroundPath_NorthEntrance_EventScript_Saige" + } + ] } diff --git a/data/games/frlg/maps/runtime/UndergroundPath_NorthSouthTunnel.json b/data/games/frlg/maps/runtime/UndergroundPath_NorthSouthTunnel.json index 38dc363..9dcc125 100644 --- a/data/games/frlg/maps/runtime/UndergroundPath_NorthSouthTunnel.json +++ b/data/games/frlg/maps/runtime/UndergroundPath_NorthSouthTunnel.json @@ -1,84 +1,82 @@ { - "format": "pokesim-runtime-map/2", - "name": "UndergroundPath_NorthSouthTunnel", - "source": { - "decomp_file": "data/maps/UndergroundPath_NorthSouthTunnel/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "########", - "########", - "#....###", - "#....###", - "#....###", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "###....#", - "###....#", - "###....#", - "########" - ], - "points": { - "warp_0": [4, 3], - "warp_1": [3, 60] - }, - "warps": [ - {"coord": [4, 3], "enter": "walk_east", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_3"}, - {"coord": [3, 60], "enter": "walk_west", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_3"} - ], - "flag_sets": {}, - "connections": [] + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_NorthSouthTunnel", + "source": { + "decomp_file": "data/maps/UndergroundPath_NorthSouthTunnel/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "########", + "########", + "#....###", + "#....###", + "#....###", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "#......#", + "###....#", + "###....#", + "###....#", + "########" + ], + "points": {"warp_0": [4, 3], "warp_1": [3, 60]}, + "warps": [ + {"coord": [4, 3], "enter": "walk_east", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_3"}, + {"coord": [3, 60], "enter": "walk_west", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_3"} + ], + "flag_sets": {}, + "connections": [] } diff --git a/data/games/frlg/maps/runtime/UndergroundPath_SouthEntrance.json b/data/games/frlg/maps/runtime/UndergroundPath_SouthEntrance.json index 6d92875..fffe5ca 100644 --- a/data/games/frlg/maps/runtime/UndergroundPath_SouthEntrance.json +++ b/data/games/frlg/maps/runtime/UndergroundPath_SouthEntrance.json @@ -1,36 +1,39 @@ { - "format": "pokesim-runtime-map/2", - "name": "UndergroundPath_SouthEntrance", - "source": { - "decomp_file": "data/maps/UndergroundPath_SouthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "#############", - "#############", - "#...........#", - "..##.##..##..", - "..#..##...#..", - "..#..##...#..", - "..##.....##..", - ".............", - "#...........#", - "#############" - ], - "points": { - "warp_1": [6, 8], - "warp_3": [7, 4] - }, - "warps": [ - {"coord": [5, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, - {"coord": [6, 8], "enter": "walk_south", "to_map": "Route6", "to_point": "warp_0"}, - {"coord": [7, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, - {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "woman_2", "coord": [5, 6]} - ] + "format": "pokesim-runtime-map/2", + "name": "UndergroundPath_SouthEntrance", + "source": { + "decomp_file": "data/maps/UndergroundPath_SouthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "#############", + "#############", + "#...........#", + "..##.##..##..", + "..#..##...#..", + "..#..##...#..", + "..##.....##..", + ".............", + "#...........#", + "#############" + ], + "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, + "warps": [ + {"coord": [5, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, + {"coord": [6, 8], "enter": "walk_south", "to_map": "Route6", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, + {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "woman_2", + "coord": [5, 6], + "source_event": 0, + "source_script": "UndergroundPath_SouthEntrance_EventScript_Woman" + } + ] } diff --git a/data/games/frlg/maps/runtime/VermilionCity.json b/data/games/frlg/maps/runtime/VermilionCity.json index fc11385..dde6975 100644 --- a/data/games/frlg/maps/runtime/VermilionCity.json +++ b/data/games/frlg/maps/runtime/VermilionCity.json @@ -1,125 +1,168 @@ { - "format": "pokesim-runtime-map/2", - "name": "VermilionCity", - "source": { - "decomp_file": "data/maps/VermilionCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "VermilionCity", + "source": { + "decomp_file": "data/maps/VermilionCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "tiles": [ + "wwwwwwwwwwwwwwwwwwwww#...#######################", + "wwwwwwwwwwwwwwwwwwwww#...#######################", + "wwwwwwwwwwwwwwwwwwwww#...#######################", + "wwwwwwwwwwwww#####www#...#######################", + "wwwwwwww##############...#######################", + "wwwwwwww##############...#######################", + "wwwwwwww#D###SSD######...########S##############", + "wwwwwwww.................................#######", + "wwwwwwww.................................#######", + "wwwwwwww.................................#######", + "wwwwwwwwwwwwww...........................#######", + "wwwwwwwwwwwwww...........................#######", + "wwwwwwwwwwwwwwwwwwww.....................#######", + "wwwwwwwwwwwwwwwwwwww.....................#######", + "wwwwwwwwwww.....wwww.....................#######", + "wwwwwwww...#####..####.....####..........#######", + "wwwwwwww...#####..####.....####..........##.....", + "wwwwwwww..S#D###..#D##.....SSD###############S##", + "wwwwwwww..........................S.............", + "wwwwwwww........................................", + "wwwwwwww........................................", + "wwwwwwww.......................www.....wwwwwwwww", + "wwwwwwww...#######.........####www.....wwwwwwwww", + "wwwwwwww...#######..wwww...####www64.64wwwwwwwww", + "wwwwwwww##S########.wwww...#D##www.....ww#######", + "wwwwwwww.....#D#....wwww.......wwww...www#######", + "wwwwwwww............wwwwwwwwwwwwwww...www#######", + "wwwwwwww............wwwwwwwwwwwwwww...www#######", + "wwwwwwww............ww................www#######", + "wwwwwwwwwwwwwwwwwwwwww................wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww................wwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww", + "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww" + ], + "elevation": [ + "000000000000000000001033300000000000000000000000", + "000000000000000000001033300000000000000000000000", + "000001000011111111111033300000000000000000000000", + "000100000011100000111033300000000000000000000000", + "000100110000000000000033300000000000000000000000", + "011001110000000000000033300000000000000000000000", + "011001110000000000000033300000000000000000000000", + "010011113333333333333333333333333333333330000000", + "010011113333333333333333333333333333333330000000", + "000111113333333333333333333333333333333330000000", + "000111111111113333333333333333333333333330000000", + "000111111111113333333333333333333333333330000000", + "000111111111111111113333333333333333333330000000", + "000111111111111111113333333333333333333330000000", + "000111111111111111113333333333333333333330000000", + "010011113330000033000033333000033333333330000000", + "010011113330000033000033333000033333333330033333", + "001001113300000033000033333000000000000000000000", + "001001113333333333333333333333333303333333333333", + "000011113333333333333333333333333333333333333333", + "000011113333333333333333333333333333333333333333", + "000011113333333333333333333333311133333111111111", + "000011113330000000333333333000011133333111111111", + "001001113330000000331111333000011133333111111111", + "001001110000000000031111333000011133333110000000", + "001001113333300033331111333333311113331110000000", + "011001113333333333331111111111111113331110000000", + "010011113333333333331111111111111113331110000000", + "010011113333333333331133333333333333331110000000", + "010011111111111111111133333333333333331110011111", + "010011111111111111111133333333333333331110011000", + "011001111111111111111133311111111111111110010000", + "001001111111111111111133311111111111111110010000", + "001110011111111111110033300001111111111100110000", + "000110011111111100000033300000000111100100110000", + "000011001111110000000000000110000111100100110000", + "000001000011110011111100011111111001111100100000", + "000001110000001110001100011000001000000001100000", + "000000001100001000000100010000000010000001000000", + "000000000000000000000100010000000000000000000000" + ], + "points": { + "warp_0": [22, 34], + "warp_1": [23, 34], + "warp_2": [24, 34], + "warp_3": [9, 6], + "warp_4": [15, 6], + "warp_5": [12, 17], + "warp_6": [19, 17], + "warp_7": [29, 17], + "warp_8": [28, 24], + "warp_9": [14, 25] + }, + "warps": [ + {"coord": [22, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, + {"coord": [23, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, + {"coord": [24, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, + {"coord": [9, 6], "enter": "walk_into", "to_map": "VermilionCity_House1", "to_point": "warp_1"}, + {"coord": [15, 6], "enter": "walk_into", "to_map": "VermilionCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [12, 17], "enter": "walk_into", "to_map": "VermilionCity_PokemonFanClub", "to_point": "warp_1"}, + {"coord": [19, 17], "enter": "walk_into", "to_map": "VermilionCity_House2", "to_point": "warp_1"}, + {"coord": [29, 17], "enter": "walk_into", "to_map": "VermilionCity_Mart", "to_point": "warp_1"}, + {"coord": [28, 24], "enter": "walk_into", "to_map": "VermilionCity_House3", "to_point": "warp_1"}, + {"coord": [14, 25], "enter": "walk_into", "to_map": "VermilionCity_Gym", "to_point": "warp_1"} + ], + "flag_sets": {"new_game": ["FLAG_HIDE_VERMILION_CITY_OAKS_AIDE"]}, + "connections": [ + {"side": "north", "to_map": "Route6", "offset": 12}, + {"side": "east", "to_map": "Route11", "offset": 10} + ], + "npcs": [ + { + "name": "woman_1", + "coord": [22, 11], + "wander": {"min": [18, 11], "max": [26, 11]}, + "source_event": 0, + "source_script": "VermilionCity_EventScript_Woman" }, - "tiles": [ - "wwwwwwwwwwwwwwwwwwwww#...#######################", - "wwwwwwwwwwwwwwwwwwwww#...#######################", - "wwwwww####wwwwwwwwwww#...#######################", - "wwww######www#####www#...#######################", - "wwww##ww##############...#######################", - "www##www##############...#######################", - "www##www#D###SSD######...########S##############", - "ww##wwww.................................#######", - "ww##wwww.................................#######", - "w##wwwww.................................#######", - "w##wwwwwwwwwww...........................#######", - "w##wwwwwwwwwww...........................#######", - "w##wwwwwwwwwwwwwwwww.....................#######", - "w##wwwwwwwwwwwwwwwww.....................#######", - "w##wwwwwwww.....wwww.....................#######", - "ww##wwww...#####..####.....####..........#######", - "ww##wwww...#####..####.....####..........##.....", - "www##www..S#D###..#D##.....SSD###############S##", - "www##www..........................S.............", - "ww##wwww........................................", - "ww##wwww........................................", - "ww##wwww.......................www.....wwwwwwwww", - "ww##wwww...#######.........####www.....wwwwwwwww", - "www##www...#######..wwww...####www64.64wwwwwwwww", - "www##www##S########.wwww...#D##www.....ww#######", - "www##www.....#D#....wwww.......wwww...www#######", - "www##www............wwwwwwwwwwwwwww...www#######", - "ww##wwww............wwwwwwwwwwwwwww...www#######", - "ww##wwww............ww................www#######", - "ww##wwwwwwwwwwwwwwwwww................www##wwwww", - "ww##wwwwwwwwwwwwwwwwww................www##wwwww", - "www##wwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwww##wwwww", - "www##wwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwww##wwwww", - "wwwww##wwwwwwwwwwwww##...####wwwwwwwwwww##wwwwww", - "wwwww##wwwwwwwww######...########wwww##w##wwwwww", - "wwwwww##wwwwww######ww###wwww####wwww##w##wwwwww", - "wwwwww####wwww##wwwwww###wwwwwwww##wwwww##wwwwww", - "wwwwwwww######wwwwwwww.#.wwwwwwww########wwwwwww", - "wwwwwwwwww####wwwwwwww.#.wwwwwwwwww######wwwwwww", - "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww" - ], - "elevation": [ - "000000000000000000001033300000000000000000000000", - "000000000000000000001033300000000000000000000000", - "000001000011111111111033300000000000000000000000", - "000100000011100000111033300000000000000000000000", - "000100110000000000000033300000000000000000000000", - "011001110000000000000033300000000000000000000000", - "011001110000000000000033300000000000000000000000", - "010011113333333333333333333333333333333330000000", - "010011113333333333333333333333333333333330000000", - "000111113333333333333333333333333333333330000000", - "000111111111113333333333333333333333333330000000", - "000111111111113333333333333333333333333330000000", - "000111111111111111113333333333333333333330000000", - "000111111111111111113333333333333333333330000000", - "000111111111111111113333333333333333333330000000", - "010011113330000033000033333000033333333330000000", - "010011113330000033000033333000033333333330033333", - "001001113300000033000033333000000000000000000000", - "001001113333333333333333333333333303333333333333", - "000011113333333333333333333333333333333333333333", - "000011113333333333333333333333333333333333333333", - "000011113333333333333333333333311133333111111111", - "000011113330000000333333333000011133333111111111", - "001001113330000000331111333000011133333111111111", - "001001110000000000031111333000011133333110000000", - "001001113333300033331111333333311113331110000000", - "011001113333333333331111111111111113331110000000", - "010011113333333333331111111111111113331110000000", - "010011113333333333331133333333333333331110000000", - "010011111111111111111133333333333333331110011111", - "010011111111111111111133333333333333331110011000", - "011001111111111111111133311111111111111110010000", - "001001111111111111111133311111111111111110010000", - "001110011111111111110033300001111111111100110000", - "000110011111111100000033300000000111100100110000", - "000011001111110000000000000110000111100100110000", - "000001000011110011111100011111111001111100100000", - "000001110000001110001100011000001000000001100000", - "000000001100001000000100010000000010000001000000", - "000000000000000000000100010000000000000000000000" - ], - "points": { - "warp_0": [22, 34], - "warp_1": [23, 34], - "warp_2": [24, 34], - "warp_4": [15, 6], - "warp_5": [12, 17], - "warp_9": [14, 25] + {"name": "old_man_1", "coord": [17, 9], "source_event": 1, "source_script": "VermilionCity_EventScript_OldMan1"}, + {"name": "old_man_2", "coord": [36, 10], "source_event": 2, "source_script": "VermilionCity_EventScript_OldMan2"}, + { + "name": "machop", + "coord": [35, 11], + "wander": {"min": [33, 9], "max": [37, 13]}, + "source_event": 3, + "source_script": "VermilionCity_EventScript_Machop" }, - "warps": [ - {"coord": [22, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, - {"coord": [23, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, - {"coord": [24, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, - {"coord": [9, 6], "enter": "walk_into"}, - {"coord": [15, 6], "enter": "walk_into", "to_map": "VermilionCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [12, 17], "enter": "walk_into", "to_map": "VermilionCity_PokemonFanClub", "to_point": "warp_1"}, - {"coord": [19, 17], "enter": "walk_into"}, - {"coord": [29, 17], "enter": "walk_into"}, - {"coord": [28, 24], "enter": "walk_into"}, - {"coord": [14, 25], "enter": "walk_into", "to_map": "VermilionCity_Gym", "to_point": "warp_1"} - ], - "flag_sets": {"new_game": ["FLAG_HIDE_VERMILION_CITY_OAKS_AIDE"]}, - "connections": [{"side": "north", "to_map": "Route6", "offset": 12}], - "npcs": [ - {"name": "woman_1", "coord": [22, 11], "wander": {"min": [18, 11], "max": [26, 11]}}, - {"name": "old_man_1", "coord": [17, 9]}, - {"name": "old_man_2", "coord": [36, 10]}, - {"name": "machop", "coord": [35, 11], "wander": {"min": [33, 9], "max": [37, 13]}}, - {"name": "sailor", "coord": [31, 30], "wander": {"min": [27, 30], "max": [35, 30]}}, - {"name": "sailor", "coord": [24, 33]}, - {"name": "cut_tree", "coord": [19, 24], "hide_flag": "FLAG_TEMP_12"}, - {"name": "scientist", "coord": [25, 7], "hide_flag": "FLAG_HIDE_VERMILION_CITY_OAKS_AIDE"} - ] + { + "name": "sailor", + "coord": [31, 30], + "wander": {"min": [27, 30], "max": [35, 30]}, + "source_event": 4, + "source_script": "VermilionCity_EventScript_Sailor" + }, + { + "name": "sailor", + "coord": [24, 33], + "source_event": 5, + "source_script": "VermilionCity_EventScript_FerrySailor", + "source_local_id": "LOCALID_VERMILION_FERRY_SAILOR" + }, + { + "name": "cut_tree", + "coord": [19, 24], + "hide_flag": "FLAG_TEMP_12", + "source_event": 6, + "source_script": "EventScript_CutTree" + }, + { + "name": "scientist", + "coord": [25, 7], + "hide_flag": "FLAG_HIDE_VERMILION_CITY_OAKS_AIDE", + "source_event": 7, + "source_script": "VermilionCity_EventScript_OaksAide" + } + ] } diff --git a/data/games/frlg/maps/runtime/VermilionCity_Gym.json b/data/games/frlg/maps/runtime/VermilionCity_Gym.json index ac51e52..24ee6d5 100644 --- a/data/games/frlg/maps/runtime/VermilionCity_Gym.json +++ b/data/games/frlg/maps/runtime/VermilionCity_Gym.json @@ -1,73 +1,69 @@ { - "format": "pokesim-runtime-map/2", - "name": "VermilionCity_Gym", - "source": { - "decomp_file": "data/maps/VermilionCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "VermilionCity_Gym", + "source": { + "decomp_file": "data/maps/VermilionCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles", + "overlay": {"file": "data/games/frlg/maps/overlays/VermilionCity_Gym.json", "story_state": "complete"} + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "#..#...#..#", + "#.........#", + "#.........#", + "#.........#", + "####...####", + "####...####", + "...........", + "...........", + ".#.#.#.#.#.", + "...........", + ".#.#.#.#.#.", + "...........", + ".#.#.#.#.#.", + "...........", + "...........", + "...S...S...", + "...........", + "...........", + "###########" + ], + "points": {"warp_1": [5, 19]}, + "warps": [ + {"enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9", "coord": [4, 19]}, + {"enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_9", "coord": [5, 19]}, + {"enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9", "coord": [6, 19]} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "lt_surge", "source_event": 0, "source_script": "VermilionCity_Gym_EventScript_LtSurge", "coord": [5, 2]}, + { + "name": "balding_man", + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "source_event": 1, + "source_script": "VermilionCity_Gym_EventScript_Baily", + "coord": [2, 11] }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "#..#...#..#", - "#.........#", - "#.........#", - "#.........#", - "####...####", - "####...####", - "...........", - "...........", - ".#.#.#.#.#.", - "...........", - ".#.#.#.#.#.", - "...........", - ".#.#.#.#.#.", - "...........", - "...........", - "...S...S...", - "...........", - "...........", - "###########" - ], - "elevation": [ - "00000000000", - "00000000000", - "03303330330", - "03333333330", - "03333333330", - "03333333330", - "00000000000", - "00000000000", - "33333333333", - "33333333333", - "30303030303", - "33333333333", - "30303030303", - "33333333333", - "30303030303", - "33333333333", - "33333333333", - "33303330333", - "33333333333", - "33333333333", - "00000000000" - ], - "points": { - "warp_1": [5, 19] + { + "name": "sailor", + "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, + "source_event": 2, + "source_script": "VermilionCity_Gym_EventScript_Dwayne", + "coord": [8, 13] }, - "warps": [ - {"coord": [4, 19], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9"}, - {"coord": [5, 19], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_9"}, - {"coord": [6, 19], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "lt_surge", "coord": [5, 2]}, - {"name": "balding_man", "coord": [2, 11], "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}}, - {"name": "sailor", "coord": [8, 13], "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}}, - {"name": "gym_guy", "coord": [4, 17]}, - {"name": "gentleman", "coord": [7, 8], "facing": "west", "trainer": {"sight": 3}} - ] + {"name": "gym_guy", "source_event": 3, "source_script": "VermilionCity_Gym_EventScript_GymGuy", "coord": [4, 17]}, + { + "name": "gentleman", + "facing": "west", + "trainer": {"sight": 3}, + "source_event": 4, + "source_script": "VermilionCity_Gym_EventScript_Tucker", + "coord": [7, 8] + } + ] } diff --git a/data/games/frlg/maps/runtime/VermilionCity_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/VermilionCity_PokemonCenter_1F.json index d5fba5b..84f0fa1 100644 --- a/data/games/frlg/maps/runtime/VermilionCity_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/VermilionCity_PokemonCenter_1F.json @@ -1,55 +1,92 @@ { - "format": "pokesim-runtime-map/2", - "name": "VermilionCity_PokemonCenter_1F", - "source": { - "decomp_file": "data/maps/VermilionCity_PokemonCenter_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "VermilionCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/VermilionCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_4"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_4"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_4"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "VermilionCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_VERMILION_NURSE" }, - "allow_running": false, - "tiles": [ - "#.#############", - "###############", - "....###..##....", - "....#######....", - "...............", - "...............", - "#..........##..", - "...........##..", - "...............", - "###############" - ], - "elevation": [ - "030000000000000", - "000000000000000", - "333300033003333", - "333300000003333", - "333333333333333", - "330333333333333", - "044033333330033", - "330333333330033", - "333333333333333", - "000000000000000" - ], - "points": { - "nurse_front": [7, 4], - "warp_1": [7, 8] + { + "name": "man", + "coord": [4, 8], + "wander": {"min": [3, 8], "max": [5, 8]}, + "source_event": 1, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Man" }, - "warps": [ - {"coord": [6, 8], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_4"}, - {"coord": [7, 8], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_4"}, - {"coord": [8, 8], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_4"}, - {"coord": [1, 6], "enter": "step_on"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "nurse", "coord": [7, 2]}, - {"name": "man", "coord": [4, 8], "wander": {"min": [3, 8], "max": [5, 8]}}, - {"name": "hiker", "coord": [12, 5]}, - {"name": "youngster", "coord": [14, 4], "wander": {"min": [14, 3], "max": [14, 5]}}, - {"name": "cooltrainer_f", "coord": [6, 4]}, - {"name": "0", "coord": [2, 1], "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL"}, - {"name": "0", "coord": [3, 1], "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL"} - ] + { + "name": "hiker", + "coord": [12, 5], + "source_event": 2, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Hiker" + }, + { + "name": "youngster", + "coord": [14, 4], + "wander": {"min": [14, 3], "max": [14, 5]}, + "source_event": 3, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_Youngster" + }, + { + "name": "cooltrainer_f", + "coord": [6, 4], + "source_event": 4, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_VSSeekerWoman" + }, + { + "name": "0", + "coord": [2, 1], + "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL", + "source_event": 5, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_PokemonJournalLtSurge" + }, + { + "name": "0", + "coord": [3, 1], + "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL", + "source_event": 6, + "source_script": "VermilionCity_PokemonCenter_1F_EventScript_PokemonJournalLtSurge" + } + ] } diff --git a/data/games/frlg/maps/runtime/VermilionCity_PokemonFanClub.json b/data/games/frlg/maps/runtime/VermilionCity_PokemonFanClub.json index 867ece1..a555561 100644 --- a/data/games/frlg/maps/runtime/VermilionCity_PokemonFanClub.json +++ b/data/games/frlg/maps/runtime/VermilionCity_PokemonFanClub.json @@ -1,56 +1,86 @@ { - "format": "pokesim-runtime-map/2", - "name": "VermilionCity_PokemonFanClub", - "source": { - "decomp_file": "data/maps/VermilionCity_PokemonFanClub/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "VermilionCity_PokemonFanClub", + "source": { + "decomp_file": "data/maps/VermilionCity_PokemonFanClub/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "############", + "############", + "............", + ".....22.....", + "#....88....#", + "#..64##64..#", + "#..64##64..#", + "#..........#", + "#..........#", + "............", + "#..........#", + "############" + ], + "elevation": [ + "000000000000", + "000000000000", + "333333333333", + "333333333333", + "033304403330", + "033330033330", + "033330033330", + "033333333330", + "033333333330", + "333333333333", + "033333333330", + "000000000000" + ], + "points": {"warp_1": [5, 10]}, + "warps": [ + {"coord": [4, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"}, + {"coord": [5, 10], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_5"}, + {"coord": [6, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "gentleman", + "coord": [5, 4], + "source_event": 0, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Chairman" }, - "allow_running": false, - "tiles": [ - "############", - "############", - "............", - ".....22.....", - "#....88....#", - "#..64##64..#", - "#..64##64..#", - "#..........#", - "#..........#", - "............", - "#..........#", - "############" - ], - "elevation": [ - "000000000000", - "000000000000", - "333333333333", - "333333333333", - "033304403330", - "033330033330", - "033330033330", - "033333333330", - "033333333330", - "333333333333", - "033333333330", - "000000000000" - ], - "points": { - "warp_1": [5, 10] + { + "name": "worker_f", + "coord": [6, 4], + "source_event": 1, + "source_script": "VermilionCity_PokemonFanClub_EventScript_WorkerF" }, - "warps": [ - {"coord": [4, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"}, - {"coord": [5, 10], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_5"}, - {"coord": [6, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "gentleman", "coord": [5, 4]}, - {"name": "worker_f", "coord": [6, 4]}, - {"name": "pikachu", "coord": [7, 6]}, - {"name": "seel", "coord": [4, 6]}, - {"name": "woman_1", "coord": [4, 5]}, - {"name": "fat_man", "coord": [7, 5]} - ] + { + "name": "pikachu", + "coord": [7, 6], + "source_event": 2, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Pikachu" + }, + { + "name": "seel", + "coord": [4, 6], + "source_event": 3, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Seel" + }, + { + "name": "woman_1", + "coord": [4, 5], + "source_event": 4, + "source_script": "VermilionCity_PokemonFanClub_EventScript_Woman", + "source_local_id": "LOCALID_POKEMON_FAN_CLUB_WOMAN" + }, + { + "name": "fat_man", + "coord": [7, 5], + "source_event": 5, + "source_script": "VermilionCity_PokemonFanClub_EventScript_FatMan", + "source_local_id": "LOCALID_POKEMON_FAN_CLUB_FAT_MAN" + } + ] } diff --git a/data/games/frlg/maps/runtime/ViridianCity.json b/data/games/frlg/maps/runtime/ViridianCity.json index 11484df..01c9081 100644 --- a/data/games/frlg/maps/runtime/ViridianCity.json +++ b/data/games/frlg/maps/runtime/ViridianCity.json @@ -1,123 +1,187 @@ { - "format": "pokesim-runtime-map/2", - "name": "ViridianCity", - "source": { - "decomp_file": "data/maps/ViridianCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "ViridianCity", + "source": { + "decomp_file": "data/maps/ViridianCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/ViridianCity/map.json", + "events_sha256": "5ce922b65f76335556ace9a047feeb1968854b604c8469c39cbbd60985f61bc1", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } + }, + "tiles": [ + "###################.....########################", + "###################....S########################", + "###################.....########################", + "###################.....########################", + "###################.....####..............######", + "########..................................######", + "########.##########.......................######", + "########.###########.............######...######", + "########.##########..............######...######", + "########.###########...######....######...######", + "########.##########.....#####...S..#D#....######", + "########.###########...##D###.............######", + "########.##########........##vvvvvvvvvvvvv######", + "########.###########......................######", + "########.##########.......................######", + "######...###########.........###################", + ".........##########.S..######.............######", + "........................#####.....####....######", + ".......................##D###.....####....######", + "..................................SSD#....######", + "#######...................................######", + "#######...................................######", + "#######...................................######", + "###########.............#####.............######", + "###########.##..........#####.............######", + "#######.....##..........#####.............######", + "#######....wwwwww.......SSD##.............######", + "#######....wwwwww.........................######", + "#######....wwwwww.........................######", + "#######....wwwwww.........................######", + "#######vvvvwwwwwwvvv...vvvvvvvvvvvvvvvvvvv######", + "#######.............S.....................######", + "#######...................................######", + "#######...................................######", + "##############............................######", + "##############............................######", + "######################....######################", + "######################....######################", + "######################....######################", + "######################....######################" + ], + "elevation": [ + "000000000000000000033333000000000000000000000000", + "000000000000000000033330000000000000000000000000", + "000000000000000000033333000000000000000000000000", + "000000000000000000033333000000000000000000000000", + "000000000000000000033333000033333333333333000000", + "000000003333333333333333333333333333333333000000", + "000000003000000000033333333333333333333333000000", + "000000003000000000003333333333333000000333000000", + "000000003000000000033333333333333000000333000000", + "000000003000000000003330000003333000000333000000", + "000000003000000000033333000003330330003333000000", + "000000003000000000003330000003333333333333000000", + "000000003000000000033333333000000000000000000000", + "000000003000000000003333333333333333333333000000", + "000000003000000000033333333333333333333333000000", + "000000333000000000003333333330000000000000000000", + "333333333000000000030330000003333333333333000000", + "333333333333333333333333000003333300003333000000", + "333333333333333333333330000003333300003333000000", + "333333333333333333333333333333333300003333000000", + "000000033333333333333333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000000003333333333333000003333333333333000000", + "000000000003003333333333000003333333333333000000", + "000000033333003333333333000003333333333333000000", + "000000033331111113333333000003333333333333000000", + "000000033331111113333333333333333333333333000000", + "000000033331111113333333333333333333333333000000", + "000000033331111113333333333333333333333333000000", + "000000000001111110003330000000000000000000000000", + "000000033333333333330333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000033333333333333333333333333333333333000000", + "000000000000003333333333333333333333333333000000", + "000000000000003333333333333333333333333333000000", + "000000000000000000000033330000000000000000000000", + "000000000000000000000033330000000000000000000000", + "000000000000000000000033330000000000000000000000", + "000000000000000000000033330000000000000000000000" + ], + "points": {"warp_0": [26, 26], "warp_1": [25, 11], "warp_2": [36, 10], "warp_3": [25, 18], "warp_4": [36, 19]}, + "warps": [ + {"coord": [26, 26], "enter": "walk_into", "to_map": "ViridianCity_PokemonCenter_1F", "to_point": "warp_1"}, + {"coord": [25, 11], "enter": "walk_into", "to_map": "ViridianCity_House", "to_point": "warp_1"}, + {"coord": [36, 10], "enter": "walk_into", "to_map": "ViridianCity_Gym", "to_point": "warp_1"}, + {"coord": [25, 18], "enter": "walk_into", "to_map": "ViridianCity_School", "to_point": "warp_1"}, + {"coord": [36, 19], "enter": "walk_into", "to_map": "ViridianCity_Mart", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [ + {"side": "north", "to_map": "Route2", "offset": 12}, + {"side": "south", "to_map": "Route1", "offset": 12}, + {"side": "west", "to_map": "Route22", "offset": 10} + ], + "npcs": [ + { + "name": "fat_man", + "coord": [8, 26], + "source_event": 0, + "source_script": "ViridianCity_EventScript_DreamEaterTutor" }, - "tiles": [ - "###################.....########################", - "###################....S########################", - "###################.....########################", - "###################.....########################", - "###################.....####..............######", - "########..................................######", - "########.##########.......................######", - "########.###########.............######...######", - "########.##########..............######...######", - "########.###########...######....######...######", - "########.##########.....#####...S..#D#....######", - "########.###########...##D###.............######", - "########.##########........##vvvvvvvvvvvvv######", - "########.###########......................######", - "########.##########.......................######", - "######...###########.........###################", - ".........##########.S..######.............######", - "........................#####.....####....######", - ".......................##D###.....####....######", - "..................................SSD#....######", - "#######...................................######", - "#######...................................######", - "#######...................................######", - "###########.............#####.............######", - "###########.##..........#####.............######", - "#######.....##..........#####.............######", - "#######....wwwwww.......SSD##.............######", - "#######....wwwwww.........................######", - "#######....wwwwww.........................######", - "#######....wwwwww.........................######", - "#######vvvvwwwwwwvvv...vvvvvvvvvvvvvvvvvvv######", - "#######.............S.....................######", - "#######...................................######", - "#######...................................######", - "##############............................######", - "##############............................######", - "######################....######################", - "######################....######################", - "######################....######################", - "######################....######################" - ], - "elevation": [ - "000000000000000000033333000000000000000000000000", - "000000000000000000033330000000000000000000000000", - "000000000000000000033333000000000000000000000000", - "000000000000000000033333000000000000000000000000", - "000000000000000000033333000033333333333333000000", - "000000003333333333333333333333333333333333000000", - "000000003000000000033333333333333333333333000000", - "000000003000000000003333333333333000000333000000", - "000000003000000000033333333333333000000333000000", - "000000003000000000003330000003333000000333000000", - "000000003000000000033333000003330330003333000000", - "000000003000000000003330000003333333333333000000", - "000000003000000000033333333000000000000000000000", - "000000003000000000003333333333333333333333000000", - "000000003000000000033333333333333333333333000000", - "000000333000000000003333333330000000000000000000", - "333333333000000000030330000003333333333333000000", - "333333333333333333333333000003333300003333000000", - "333333333333333333333330000003333300003333000000", - "333333333333333333333333333333333300003333000000", - "000000033333333333333333333333333333333333000000", - "000000033333333333333333333333333333333333000000", - "000000033333333333333333333333333333333333000000", - "000000000003333333333333000003333333333333000000", - "000000000003003333333333000003333333333333000000", - "000000033333003333333333000003333333333333000000", - "000000033331111113333333000003333333333333000000", - "000000033331111113333333333333333333333333000000", - "000000033331111113333333333333333333333333000000", - "000000033331111113333333333333333333333333000000", - "000000000001111110003330000000000000000000000000", - "000000033333333333330333333333333333333333000000", - "000000033333333333333333333333333333333333000000", - "000000033333333333333333333333333333333333000000", - "000000000000003333333333333333333333333333000000", - "000000000000003333333333333333333333333333000000", - "000000000000000000000033330000000000000000000000", - "000000000000000000000033330000000000000000000000", - "000000000000000000000033330000000000000000000000", - "000000000000000000000033330000000000000000000000" - ], - "points": { - "warp_0": [26, 26], - "warp_4": [36, 19] + { + "name": "cut_tree", + "coord": [11, 24], + "hide_flag": "FLAG_TEMP_11", + "source_event": 1, + "source_script": "EventScript_CutTree" }, - "warps": [ - {"coord": [26, 26], "enter": "walk_into", "to_map": "ViridianCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [25, 11], "enter": "walk_into"}, - {"coord": [36, 10], "enter": "walk_into"}, - {"coord": [25, 18], "enter": "walk_into"}, - {"coord": [36, 19], "enter": "walk_into", "to_map": "ViridianCity_Mart", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "Route2", "offset": 12}, - {"side": "south", "to_map": "Route1", "offset": 12}, - {"side": "west", "to_map": "Route22", "offset": 10} - ], - "npcs": [ - {"name": "fat_man", "coord": [8, 26]}, - {"name": "cut_tree", "coord": [11, 24], "hide_flag": "FLAG_TEMP_11"}, - {"name": "old_man_1", "coord": [34, 11]}, - {"name": "var_0", "coord": [21, 6]}, - {"name": "woman_3", "coord": [20, 12]}, - {"name": "youngster", "coord": [33, 26], "wander": {"min": [33, 24], "max": [33, 28]}}, - {"name": "boy", "coord": [16, 22], "wander": {"min": [15, 20], "max": [17, 24]}}, - {"name": "cut_tree", "coord": [18, 5], "hide_flag": "FLAG_TEMP_12"} - ], - "items": [ - {"name": "item_ball", "coord": [17, 5], "hide_flag": "FLAG_HIDE_VIRIDIAN_CITY_POTION"} - ] + { + "name": "old_man_1", + "coord": [34, 11], + "source_event": 2, + "source_script": "ViridianCity_EventScript_OldMan", + "source_local_id": "LOCALID_VIRIDIAN_OLD_MAN" + }, + { + "name": "var_0", + "coord": [21, 6], + "source_event": 3, + "source_script": "ViridianCity_EventScript_TutorialOldMan", + "source_local_id": "LOCALID_TUTORIAL_MAN" + }, + { + "name": "woman_3", + "coord": [20, 12], + "source_event": 4, + "source_script": "ViridianCity_EventScript_Woman", + "source_local_id": "LOCALID_VIRIDIAN_WOMAN" + }, + { + "name": "youngster", + "coord": [33, 26], + "wander": {"min": [33, 24], "max": [33, 28]}, + "source_event": 5, + "source_script": "ViridianCity_EventScript_Youngster" + }, + { + "name": "boy", + "coord": [16, 22], + "wander": {"min": [15, 20], "max": [17, 24]}, + "source_event": 6, + "source_script": "ViridianCity_EventScript_Boy" + }, + { + "name": "cut_tree", + "coord": [18, 5], + "hide_flag": "FLAG_TEMP_12", + "source_event": 7, + "source_script": "EventScript_CutTree", + "source_local_id": "LOCALID_VIRIDIAN_BORDER_TREE" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [17, 5], + "source_event": 8, + "hide_flag": "FLAG_HIDE_VIRIDIAN_CITY_POTION", + "source_script": "ViridianCity_EventScript_ItemPotion", + "item": "potion" + } + ] } diff --git a/data/games/frlg/maps/runtime/ViridianCity_Mart.json b/data/games/frlg/maps/runtime/ViridianCity_Mart.json index 08d30c4..b424782 100644 --- a/data/games/frlg/maps/runtime/ViridianCity_Mart.json +++ b/data/games/frlg/maps/runtime/ViridianCity_Mart.json @@ -1,48 +1,53 @@ { - "format": "pokesim-runtime-map/2", - "name": "ViridianCity_Mart", - "source": { - "decomp_file": "data/maps/ViridianCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "ViridianCity_Mart", + "source": { + "decomp_file": "data/maps/ViridianCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "allow_running": false, + "tiles": [ + "###########", + "###########", + "##.#......#", + "...#.......", + "####...##.#", + ".......##.#", + ".##....##.#", + "...........", + "###########" + ], + "points": {"clerk_front": [4, 3], "warp_1": [4, 7]}, + "warps": [ + {"coord": [3, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"}, + {"coord": [4, 7], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_4"}, + {"coord": [5, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "clerk", + "coord": [2, 3], + "source_event": 0, + "source_script": "ViridianCity_Mart_EventScript_Clerk", + "source_local_id": "LOCALID_VIRIDIAN_MART_CLERK" }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "elevation": [ - "00000000000", - "00000000000", - "00303333330", - "33003333333", - "00003330030", - "33333330030", - "30033330030", - "33333333333", - "00000000000" - ], - "points": { - "clerk_front": [4, 3], - "warp_1": [4, 7] + { + "name": "youngster", + "coord": [6, 2], + "wander": {"min": [5, 1], "max": [7, 3]}, + "source_event": 1, + "source_script": "ViridianCity_Mart_EventScript_Youngster" }, - "warps": [ - {"coord": [3, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"}, - {"coord": [4, 7], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_4"}, - {"coord": [5, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "clerk", "coord": [2, 3]}, - {"name": "youngster", "coord": [6, 2], "wander": {"min": [5, 1], "max": [7, 3]}}, - {"name": "woman_1", "coord": [9, 5], "wander": {"min": [9, 4], "max": [9, 6]}} - ] + { + "name": "woman_1", + "coord": [9, 5], + "wander": {"min": [9, 4], "max": [9, 6]}, + "source_event": 2, + "source_script": "ViridianCity_Mart_EventScript_Woman" + } + ] } diff --git a/data/games/frlg/maps/runtime/ViridianCity_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/ViridianCity_PokemonCenter_1F.json index e3cbc05..f037cb3 100644 --- a/data/games/frlg/maps/runtime/ViridianCity_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/ViridianCity_PokemonCenter_1F.json @@ -1,52 +1,71 @@ { - "format": "pokesim-runtime-map/2", - "name": "ViridianCity_PokemonCenter_1F", - "source": { - "decomp_file": "data/maps/ViridianCity_PokemonCenter_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "ViridianCity_PokemonCenter_1F", + "source": { + "decomp_file": "data/maps/ViridianCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "allow_running": false, + "tiles": [ + "#.#############", + "###############", + "....###..##....", + "....#######....", + "...............", + "...............", + "#..........##..", + "...........##..", + "...............", + "###############" + ], + "elevation": [ + "030000000000000", + "000000000000000", + "333300033003333", + "333300000003333", + "333333333333333", + "330333333333333", + "044033333330033", + "330333333330033", + "333333333333333", + "000000000000000" + ], + "points": {"nurse_front": [7, 4], "warp_1": [7, 8], "warp_3": [1, 6]}, + "warps": [ + {"coord": [6, 8], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_0"}, + {"coord": [7, 8], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_0"}, + {"coord": [8, 8], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_0"}, + {"coord": [1, 6], "enter": "step_on", "to_map": "ViridianCity_PokemonCenter_2F", "to_point": "warp_0"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + { + "name": "nurse", + "coord": [7, 2], + "source_event": 0, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Nurse", + "source_local_id": "LOCALID_VIRIDIAN_NURSE" }, - "allow_running": false, - "tiles": [ - "#.#############", - "###############", - "....###..##....", - "....#######....", - "...............", - "...............", - "#..........##..", - "...........##..", - "...............", - "###############" - ], - "elevation": [ - "030000000000000", - "000000000000000", - "333300033003333", - "333300000003333", - "333333333333333", - "330333333333333", - "044033333330033", - "330333333330033", - "333333333333333", - "000000000000000" - ], - "points": { - "nurse_front": [7, 4], - "warp_1": [7, 8] + { + "name": "gentleman", + "coord": [12, 5], + "source_event": 1, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Gentleman" }, - "warps": [ - {"coord": [6, 8], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_0"}, - {"coord": [7, 8], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_0"}, - {"coord": [8, 8], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_0"}, - {"coord": [1, 6], "enter": "step_on"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "nurse", "coord": [7, 2]}, - {"name": "gentleman", "coord": [12, 5]}, - {"name": "boy", "coord": [4, 7]}, - {"name": "youngster", "coord": [2, 3], "wander": {"min": [1, 2], "max": [3, 4]}} - ] + { + "name": "boy", + "coord": [4, 7], + "source_event": 2, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Boy" + }, + { + "name": "youngster", + "coord": [2, 3], + "wander": {"min": [1, 2], "max": [3, 4]}, + "source_event": 3, + "source_script": "ViridianCity_PokemonCenter_1F_EventScript_Youngster" + } + ] } diff --git a/data/games/frlg/maps/runtime/ViridianForest.json b/data/games/frlg/maps/runtime/ViridianForest.json index 06eebfc..a3b8055 100644 --- a/data/games/frlg/maps/runtime/ViridianForest.json +++ b/data/games/frlg/maps/runtime/ViridianForest.json @@ -1,139 +1,181 @@ { - "format": "pokesim-runtime-map/2", - "name": "ViridianForest", - "source": { - "decomp_file": "data/maps/ViridianForest/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "format": "pokesim-runtime-map/2", + "name": "ViridianForest", + "source": { + "decomp_file": "data/maps/ViridianForest/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/ViridianForest/map.json", + "events_sha256": "6d6f082604d3c220eeb2c72cb6a606403330df44c58d9ed2523cd81c53fdaba2", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" }, - "tiles": [ - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "###########.............###........................###", - "###########.............###........................###", - "###########.............###........................###", - "#..#####..#.............###.....###############....###", - "####...####.............###.....###############....###", - "####...####.............###.....###############....###", - "####...####.....###.....###.....###############....###", - "####..S####~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.......#########", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~........#########", - "###~~~~~###~~~~~###~~~~~###~~~~~~######......#########", - "###~~~~~###~~~~~###~~~~~###...~~~######......#########", - "###~~~~~###~~~~~###.....###......######......#########", - "###~~~~~###~~~~~###..............######......#########", - "###~~~~~###~~~~~#####............######......#########", - "###~~~~~###~~~~~#####............######............###", - "###~~~~~###~~~~~~~#####################....S.......###", - "###~~~~~...~~~~~~~#####################............###", - "###...............#####################............###", - "###......S........#####################~~~~........###", - "###...............#####################~~~~~###....###", - "###.....................###############~~~~~###....###", - "###.....................###############~~~~~###....###", - "###.....................###############~~~~~###....###", - "##################......###############~~~~~###....###", - "##################......###############~~~~~###....###", - "#######################################~~~~~###....###", - "#######################################~~~~~###....###", - "#######################################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######~~~~........###", - "############~~~~~~~~~~~~~~~~S..~~######~~~.........###", - "############~~~~~~~~~~~~~~~~...~~######~~~.........###", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", - "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", - "###~~~~~~~~~...~~~~~~~~~~~~.###.~~~~~~~~~...~~~~~~~###", - "###~~~~~~~~~....~~~~~~~~~~.......~~~~~~~....~~~~~~~###", - "###~~~~~~~~............................S....~~~~~~~###", - "###~~~~~~~~....................S...........~~~~~~~~###", - "###~~~~~~~~................................~~~~~~~~###", - "###########################......#####################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################" - ], - "points": { - "warp_0": [29, 62], - "warp_2": [5, 9] + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "tiles": [ + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "###########.............###........................###", + "###########.............###........................###", + "###########.............###........................###", + "#..#####..#.............###.....###############....###", + "####...####.............###.....###############....###", + "####...####.............###.....###############....###", + "####...####.....###.....###.....###############....###", + "####..S####~~~~~###~~~~~###~~~~~###############....###", + "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", + "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.......#########", + "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~........#########", + "###~~~~~###~~~~~###~~~~~###~~~~~~######......#########", + "###~~~~~###~~~~~###~~~~~###...~~~######......#########", + "###~~~~~###~~~~~###.....###......######......#########", + "###~~~~~###~~~~~###..............######......#########", + "###~~~~~###~~~~~#####............######......#########", + "###~~~~~###~~~~~#####............######............###", + "###~~~~~###~~~~~~~#####################....S.......###", + "###~~~~~...~~~~~~~#####################............###", + "###...............#####################............###", + "###......S........#####################~~~~........###", + "###...............#####################~~~~~###....###", + "###.....................###############~~~~~###....###", + "###.....................###############~~~~~###....###", + "###.....................###############~~~~~###....###", + "##################......###############~~~~~###....###", + "##################......###############~~~~~###....###", + "#######################################~~~~~###....###", + "#######################################~~~~~###....###", + "#######################################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~#####################~~~~~###....###", + "###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######~~~~........###", + "############~~~~~~~~~~~~~~~~S..~~######~~~.........###", + "############~~~~~~~~~~~~~~~~...~~######~~~.........###", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "############..~~~#########~~...~~######~~~...#########", + "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", + "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", + "###~~~~~~~~~...~~~~~~~~~~~~.###.~~~~~~~~~...~~~~~~~###", + "###~~~~~~~~~....~~~~~~~~~~.......~~~~~~~....~~~~~~~###", + "###~~~~~~~~............................S....~~~~~~~###", + "###~~~~~~~~....................S...........~~~~~~~~###", + "###~~~~~~~~................................~~~~~~~~###", + "###########################......#####################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################", + "######################################################" + ], + "points": {"warp_0": [29, 62], "warp_2": [5, 9]}, + "warps": [ + {"coord": [29, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, + {"coord": [28, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, + {"coord": [5, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"}, + {"coord": [6, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"}, + {"coord": [30, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, + {"coord": [4, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"} + ], + "flag_sets": {}, + "connections": [], + "npcs": [ + {"name": "youngster", "coord": [29, 58], "source_event": 0, "source_script": "ViridianForest_EventScript_Youngster"}, + {"name": "boy", "coord": [45, 58], "source_event": 1, "source_script": "ViridianForest_EventScript_Boy"}, + { + "name": "bug_catcher", + "coord": [47, 45], + "facing": "west", + "trainer": {"sight": 5}, + "source_event": 2, + "source_script": "ViridianForest_EventScript_Rick" }, - "warps": [ - { - "coord": [29, 62], - "enter": "walk_south", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_3" - }, - { - "coord": [28, 62], - "enter": "walk_south", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_3" - }, - { - "coord": [5, 9], - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_1" - }, - { - "coord": [6, 9], - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_1" - }, - { - "coord": [30, 62], - "enter": "walk_south", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_3" - }, - { - "coord": [4, 9], - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_1" - } - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "youngster", "coord": [29, 58]}, - {"name": "boy", "coord": [45, 58]}, - {"name": "bug_catcher", "coord": [47, 45], "facing": "west", "trainer": {"sight": 5}}, - {"name": "bug_catcher", "coord": [47, 29], "facing": "west", "trainer": {"sight": 4}}, - {"name": "bug_catcher", "coord": [7, 22], "facing": "west", "trainer": {"sight": 4}}, - {"name": "bug_catcher", "coord": [43, 6], "trainer": {"sight": 1, "looks": ["south", "north"]}}, - {"name": "bug_catcher", "coord": [16, 5], "facing": "north", "trainer": {"sight": 1}} - ], - "items": [ - {"name": "item_ball", "coord": [5, 41], "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POKE_BALL"}, - {"name": "item_ball", "coord": [40, 21], "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_ANTIDOTE"}, - {"name": "item_ball", "coord": [21, 34], "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION"}, - {"name": "item_ball", "coord": [49, 60], "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION_2"} - ] + { + "name": "bug_catcher", + "coord": [47, 29], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 3, + "source_script": "ViridianForest_EventScript_Doug" + }, + { + "name": "bug_catcher", + "coord": [7, 22], + "facing": "west", + "trainer": {"sight": 4}, + "source_event": 4, + "source_script": "ViridianForest_EventScript_Sammy" + }, + { + "name": "bug_catcher", + "coord": [43, 6], + "trainer": {"sight": 1, "looks": ["south", "north"]}, + "source_event": 8, + "source_script": "ViridianForest_EventScript_Anthony" + }, + { + "name": "bug_catcher", + "coord": [16, 5], + "facing": "north", + "trainer": {"sight": 1}, + "source_event": 9, + "source_script": "ViridianForest_EventScript_Charlie" + } + ], + "items": [ + { + "name": "item_ball", + "coord": [5, 41], + "source_event": 5, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POKE_BALL", + "source_script": "ViridianForest_EventScript_ItemPokeBall", + "item": "poke_ball" + }, + { + "name": "item_ball", + "coord": [40, 21], + "source_event": 6, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_ANTIDOTE", + "source_script": "ViridianForest_EventScript_ItemAntidote", + "item": "antidote" + }, + { + "name": "item_ball", + "coord": [21, 34], + "source_event": 7, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION", + "source_script": "ViridianForest_EventScript_ItemPotion", + "item": "potion" + }, + { + "name": "item_ball", + "coord": [49, 60], + "source_event": 10, + "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION_2", + "source_script": "ViridianForest_EventScript_ItemPotion2", + "item": "potion" + } + ] } diff --git a/data/maps/runtime-manifest.json b/data/maps/runtime-manifest.json index c98412a..16c9c24 100644 --- a/data/maps/runtime-manifest.json +++ b/data/maps/runtime-manifest.json @@ -9,12 +9,11 @@ { "name": "CeladonCity", "file": "data/games/frlg/maps/runtime/CeladonCity.json", - "sha256": "517c2949b6b24ad8d5d35ce0f471a4d1ceebc06bf45e73a0ca790ac2133bf5a9", + "sha256": "b51072488ab1c1fd1a0399dbe31068cadc1ff16f60fcdab5abc67f3cbded742a", "source": { "decomp_file": "data/maps/CeladonCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -35,7 +34,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CeladonCity.json", + "sha256": "b51072488ab1c1fd1a0399dbe31068cadc1ff16f60fcdab5abc67f3cbded742a" + } }, { "name": "CeladonCity_Condominiums_1F", @@ -66,7 +69,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CeladonCity_Condominiums_1F.json", + "sha256": "27cf1036870fe6c1a4b3e64fd6c3ac8ed759251489d3292e394297721e0d3dac" + } }, { "name": "CeladonCity_DepartmentStore_1F", @@ -97,7 +104,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CeladonCity_DepartmentStore_1F.json", + "sha256": "2960b6f2d187b8ecc088164b15b2613b148fc2fc14de8ee4bb9cf055382c9611" + } }, { "name": "CeladonCity_DepartmentStore_5F", @@ -128,7 +139,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CeladonCity_DepartmentStore_5F.json", + "sha256": "1b3377d76190c0893f36d04744e9dbeb74e93832ab5aebca11758b33479b0c91" + } }, { "name": "CeladonCity_GameCorner", @@ -159,7 +174,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CeladonCity_GameCorner.json", + "sha256": "8b59cd7d31f3d19e64d3f193ff98f5b8fef7cf5a7fb7149589169ed0e2aa1369" + } }, { "name": "CeladonCity_Gym", @@ -190,17 +209,33 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CeladonCity_Gym.json", + "sha256": "b94dfdd80f91dd5e365cc2958c5d74a52910a9cc1bf4953ae8b3051ced299cff" + } }, { "name": "CeruleanCave_1F", "file": "data/games/frlg/maps/runtime/CeruleanCave_1F.json", - "sha256": "7b490bbe46c928145fdf920275787035e3f6536cfc34d5f5956b117186ce6b5b", + "sha256": "8d332dcddeb59194751a5cf9b0f534b65b01464b33e06d500f4c1c33ebeb109c", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_1F.json", "source": { "decomp_file": "data/maps/CeruleanCave_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_1F/map.json", + "events_sha256": "42a7d49479544125aa08209126948e3f57ff6040a2f6c1b5289e498de39d4e5c", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } }, "target_game": "frlg", "source_game": "firered", @@ -226,17 +261,34 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCave_1F.json", + "sha256": "8d332dcddeb59194751a5cf9b0f534b65b01464b33e06d500f4c1c33ebeb109c" } }, { "name": "CeruleanCave_2F", "file": "data/games/frlg/maps/runtime/CeruleanCave_2F.json", - "sha256": "710710c3a74a2e350971cd09476848510b8f7701685dec9d3b8acf9773747e8d", + "sha256": "53d682b34860b98423ebd5260e5efb112f28cf38024f5976f33be6dbb6372881", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_2F.json", "source": { "decomp_file": "data/maps/CeruleanCave_2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_2F/map.json", + "events_sha256": "2c6e7f32daefb68be4a39c7219682c3bb7b8c8ddb079db21226de4afa556f6ae", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -262,17 +314,33 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCave_2F.json", + "sha256": "53d682b34860b98423ebd5260e5efb112f28cf38024f5976f33be6dbb6372881" } }, { "name": "CeruleanCave_B1F", "file": "data/games/frlg/maps/runtime/CeruleanCave_B1F.json", - "sha256": "cdba0107e66d521270325b44a7d23dd8b6c4f54811608b8ede5b76a4fd1fbd32", + "sha256": "e04a375efed05ff5524e19cfde2f3fdfdc7b9c56f56347188cba710185245910", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_B1F.json", "source": { "decomp_file": "data/maps/CeruleanCave_B1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/CeruleanCave_B1F/map.json", + "events_sha256": "771c69cd177d040c0048fc9a4729525141d1844e18460448d48e1a1af405986a", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } }, "target_game": "frlg", "source_game": "firered", @@ -298,12 +366,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCave_B1F.json", + "sha256": "e04a375efed05ff5524e19cfde2f3fdfdc7b9c56f56347188cba710185245910" } }, { "name": "CeruleanCity", "file": "data/games/frlg/maps/runtime/CeruleanCity.json", - "sha256": "24c2e115763130b9b942dcdb3fa2702020fa854ec52af98ee737c589f6f45b22", + "sha256": "4f88ce08515bbb263c39c6444ee53b763851849541c210efa9a974b8cb976700", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity.json", "source": { "decomp_file": "data/maps/CeruleanCity/map.json", @@ -334,17 +406,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCity.json", + "sha256": "4f88ce08515bbb263c39c6444ee53b763851849541c210efa9a974b8cb976700" } }, { "name": "CeruleanCity_BikeShop", "file": "data/games/frlg/maps/runtime/CeruleanCity_BikeShop.json", - "sha256": "9b124a826543472318cface5daf566c83a8a7d898cf34a7debfc9b056834c9f4", + "sha256": "1ddbe0458bcce714ba8f265be33cc2596aab09962aad7da5e85ad20d635e14e7", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_BikeShop.json", "source": { "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -370,12 +447,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCity_BikeShop.json", + "sha256": "1ddbe0458bcce714ba8f265be33cc2596aab09962aad7da5e85ad20d635e14e7" } }, { "name": "CeruleanCity_Gym", "file": "data/games/frlg/maps/runtime/CeruleanCity_Gym.json", - "sha256": "c64e51cf18c65a7fe940659d467693d8387277f8e67e3a4c4d2403ba5e193740", + "sha256": "a04376525f838de605be2488e410e4dfcf6e9bc129ac512388227b4e8c5a0183", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Gym.json", "source": { "decomp_file": "data/maps/CeruleanCity_Gym/map.json", @@ -406,6 +487,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCity_Gym.json", + "sha256": "a04376525f838de605be2488e410e4dfcf6e9bc129ac512388227b4e8c5a0183" } }, { @@ -437,17 +522,22 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CeruleanCity_House1.json", + "sha256": "1428173a46069914e2a47502c0cc034b0a8d0cff3e073f0a91b98b49fd66c8dd" + } }, { "name": "CeruleanCity_House2", "file": "data/games/frlg/maps/runtime/CeruleanCity_House2.json", - "sha256": "bc49aa2645851d4553af06df9c1e66c4a4c078a8eb15721bbae84313745d257c", + "sha256": "4d1ab5d52b598960ac4d691dfa54b58977ac052de6f4c4e3024d124ed5546337", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_House2.json", "source": { "decomp_file": "data/maps/CeruleanCity_House2/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -473,17 +563,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCity_House2.json", + "sha256": "4d1ab5d52b598960ac4d691dfa54b58977ac052de6f4c4e3024d124ed5546337" } }, { "name": "CeruleanCity_Mart", "file": "data/games/frlg/maps/runtime/CeruleanCity_Mart.json", - "sha256": "6a59723815b97d5e28cbb20c4a04a0e7fe503102b21e5b0e4da574aa0711230f", + "sha256": "0f1d45ea676df7088d00512181ca7d52aaada5e40cd9f2c0efcd572117e29338", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Mart.json", "source": { "decomp_file": "data/maps/CeruleanCity_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "target_game": "frlg", "source_game": "firered", @@ -509,12 +604,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCity_Mart.json", + "sha256": "0f1d45ea676df7088d00512181ca7d52aaada5e40cd9f2c0efcd572117e29338" } }, { "name": "CeruleanCity_PokemonCenter_1F", "file": "data/games/frlg/maps/runtime/CeruleanCity_PokemonCenter_1F.json", - "sha256": "ce7570fae7663ed28aa64159791f33c4d6486c62c44b75fa1e15f82a7d6faf24", + "sha256": "c5dbc18ec00081b9697bbcaf3fde23742e36f4970f461c2a4f1822401a3e32c2", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_PokemonCenter_1F.json", "source": { "decomp_file": "data/maps/CeruleanCity_PokemonCenter_1F/map.json", @@ -545,17 +644,20 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/CeruleanCity_PokemonCenter_1F.json", + "sha256": "c5dbc18ec00081b9697bbcaf3fde23742e36f4970f461c2a4f1822401a3e32c2" } }, { "name": "CinnabarIsland", "file": "data/games/frlg/maps/runtime/CinnabarIsland.json", - "sha256": "3271e24d15dd94a532170ecd4f11ff61ff26eeeb7811282d42d90cfda5622c30", + "sha256": "7b033425c173ba352c280c0393ec6a48972cfc796f6b552255d635515bf20642", "source": { "decomp_file": "data/maps/CinnabarIsland/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -576,7 +678,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CinnabarIsland.json", + "sha256": "7b033425c173ba352c280c0393ec6a48972cfc796f6b552255d635515bf20642" + } }, { "name": "CinnabarIsland_Gym", @@ -607,7 +713,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CinnabarIsland_Gym.json", + "sha256": "42c2a70ae464043641ad3a7a79e0ab73c6b0d7dc09190137dd886f0e2630d4b7" + } }, { "name": "CinnabarIsland_Mart", @@ -638,17 +748,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/CinnabarIsland_Mart.json", + "sha256": "31921270f1eab70946eb5703aeef771e4535d1635d233d352285773622a28c57" + } }, { "name": "FuchsiaCity", "file": "data/games/frlg/maps/runtime/FuchsiaCity.json", - "sha256": "36bec5b60a05e989149cc3c603eb1189b0cb4c7eab9e11b04042875ddf28b745", + "sha256": "184ecf31c6b7e7f518f9dce604b376db23b5b9d7f921f0b29d72ba6c5e74009a", "source": { "decomp_file": "data/maps/FuchsiaCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -669,7 +782,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/FuchsiaCity.json", + "sha256": "184ecf31c6b7e7f518f9dce604b376db23b5b9d7f921f0b29d72ba6c5e74009a" + } }, { "name": "FuchsiaCity_Gym", @@ -700,7 +817,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/FuchsiaCity_Gym.json", + "sha256": "063136ce3937c79c65cd4c1c5673209dad08a75da68d7b6972ebb9246a92a861" + } }, { "name": "FuchsiaCity_Mart", @@ -731,7 +852,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/FuchsiaCity_Mart.json", + "sha256": "fc525197ac4b11110ad9a9819e2ad96436b19dbdd91a347d18517ad4b3cd4586" + } }, { "name": "FuchsiaCity_SafariZone_Entrance", @@ -762,7 +887,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/FuchsiaCity_SafariZone_Entrance.json", + "sha256": "c8ac9c445d950dc87907d479b3eb26ea6941d62e49b3c7ac5b73b15e6dfc40d3" + } }, { "name": "FuchsiaCity_WardensHouse", @@ -793,7 +922,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/FuchsiaCity_WardensHouse.json", + "sha256": "70ad1e0c1b4165cc667c7e6e2ee9b98f685d8d0c656e4937ba8c2133540eb3dd" + } }, { "name": "IndigoPlateau_Exterior", @@ -824,7 +957,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/IndigoPlateau_Exterior.json", + "sha256": "00273f4bbf17bb6090358ab51243c40a390c1933208063d093c3959f9390988f" + } }, { "name": "IndigoPlateau_PokemonCenter_1F", @@ -854,17 +991,22 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/IndigoPlateau_PokemonCenter_1F.json", + "sha256": "930c40e59297aae14ac19b61c17e8bdd02ecdf273b822630155acc8a50361e57" + } }, { "name": "LavenderTown", "file": "data/games/frlg/maps/runtime/LavenderTown.json", - "sha256": "bdbce59fea59953b524c51a0a7791efb0e2a70339a911ef737e1753241e94d1a", + "sha256": "157f5943208f84ae9edfefc1e1bcfa9e80f16a582b4c6d15fd578d78196c4e1c", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/LavenderTown.json", "source": { "decomp_file": "data/maps/LavenderTown/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -890,6 +1032,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/LavenderTown.json", + "sha256": "157f5943208f84ae9edfefc1e1bcfa9e80f16a582b4c6d15fd578d78196c4e1c" } }, { @@ -921,12 +1067,16 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/LavenderTown_Mart.json", + "sha256": "6243727ca1e6fc823c0f1be2cbbc010a3f505f1ecfcbd4347fd7a4d1c40a606d" + } }, { "name": "LavenderTown_PokemonCenter_1F", "file": "data/games/frlg/maps/runtime/LavenderTown_PokemonCenter_1F.json", - "sha256": "e8309c90cf3eae37a2a9ae3a5ea1a8a056939bde9118ad7061bd616d52a0e814", + "sha256": "c3be8d90b2331b9facdb7e0daf146c337c2c803c0d97e4a2cbcf054533afae26", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/LavenderTown_PokemonCenter_1F.json", "source": { "decomp_file": "data/maps/LavenderTown_PokemonCenter_1F/map.json", @@ -957,6 +1107,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/LavenderTown_PokemonCenter_1F.json", + "sha256": "c3be8d90b2331b9facdb7e0daf146c337c2c803c0d97e4a2cbcf054533afae26" } }, { @@ -988,17 +1142,34 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/LavenderTown_VolunteerPokemonHouse.json", + "sha256": "98a17ed3538e311728fa5a70ea12de8fa6f4b9c3f7c6f3531cc5c7972626236e" + } }, { "name": "MtMoon_1F", "file": "data/games/frlg/maps/runtime/MtMoon_1F.json", - "sha256": "f75b1bfc6368868b0520cb71c02de2614fe6fc65644e92530deb3f43f34be444", + "sha256": "809cd258e150853f8f0affbd792d586c8576a66629f5511552ebb5c5b00d3a4d", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_1F.json", "source": { "decomp_file": "data/maps/MtMoon_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/MtMoon_1F/map.json", + "events_sha256": "312b2de23d9942d3326da9fe9597b25ef7c3537bcedfcafa7922d5c8b8e8d8fc", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1024,17 +1195,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/MtMoon_1F.json", + "sha256": "809cd258e150853f8f0affbd792d586c8576a66629f5511552ebb5c5b00d3a4d" } }, { "name": "MtMoon_B1F", "file": "data/games/frlg/maps/runtime/MtMoon_B1F.json", - "sha256": "b3a805c32e3dedf0498d06f6b8e45ef25e30b477413c00df3fe4087806e6f6f8", + "sha256": "81305b9364d34efd32a40d1a8dd1c5585022497534b7e5171d30b0b7ea322929", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B1F.json", "source": { "decomp_file": "data/maps/MtMoon_B1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1060,17 +1236,34 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/MtMoon_B1F.json", + "sha256": "81305b9364d34efd32a40d1a8dd1c5585022497534b7e5171d30b0b7ea322929" } }, { "name": "MtMoon_B2F", "file": "data/games/frlg/maps/runtime/MtMoon_B2F.json", - "sha256": "aadc8f65fc0d570c329c897d2689063c3ea728f518c2e2d47b3bacbf7f85c81a", + "sha256": "22b6a3c1994f2c188e5a8d84a55e20b41376df7c03f6ce36c4c9a0d96fcd5043", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B2F.json", "source": { "decomp_file": "data/maps/MtMoon_B2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/MtMoon_B2F/map.json", + "events_sha256": "451a05df92c5df570c121affa75c846996d3561c12e7e5d67d91814482a37ff3", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1096,12 +1289,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/MtMoon_B2F.json", + "sha256": "22b6a3c1994f2c188e5a8d84a55e20b41376df7c03f6ce36c4c9a0d96fcd5043" } }, { "name": "PalletTown", "file": "data/games/frlg/maps/runtime/PalletTown.json", - "sha256": "0dc7446f568097b36a9479954f01afe546cb64c82bb0efa91da0cb66ad950f9f", + "sha256": "92ebe424c07773ba087b8fc8d2b8251876dd3b97b9aea47a1fee8d36abd6ab0c", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown.json", "source": { "decomp_file": "data/maps/PalletTown/map.json", @@ -1132,17 +1329,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PalletTown.json", + "sha256": "92ebe424c07773ba087b8fc8d2b8251876dd3b97b9aea47a1fee8d36abd6ab0c" } }, { "name": "PalletTown_PlayersHouse_1F", "file": "data/games/frlg/maps/runtime/PalletTown_PlayersHouse_1F.json", - "sha256": "5997b5459b2e7668b8ee725a87eb4f23637ab16264afb017e5306a08127ca015", + "sha256": "6c170c4fa645009d8de13a2c7ce7e858d76678b298721a786dc7d94fa2d579a4", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_1F.json", "source": { "decomp_file": "data/maps/PalletTown_PlayersHouse_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1168,12 +1370,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PalletTown_PlayersHouse_1F.json", + "sha256": "6c170c4fa645009d8de13a2c7ce7e858d76678b298721a786dc7d94fa2d579a4" } }, { "name": "PalletTown_PlayersHouse_2F", "file": "data/games/frlg/maps/runtime/PalletTown_PlayersHouse_2F.json", - "sha256": "2c3458e692748ee2457856b7eeedc6c0d30b50ccd618319ac6219d967d84654c", + "sha256": "ed27fb85d57d97c5a9986a7cca312e4c914e1571af446bace606841cb1a4d55a", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_2F.json", "source": { "decomp_file": "data/maps/PalletTown_PlayersHouse_2F/map.json", @@ -1204,17 +1410,34 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PalletTown_PlayersHouse_2F.json", + "sha256": "ed27fb85d57d97c5a9986a7cca312e4c914e1571af446bace606841cb1a4d55a" } }, { "name": "PalletTown_ProfessorOaksLab", "file": "data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json", - "sha256": "1dedda88f1238eccd6610cbff79c1e5d3cd21b516637b792654746e02b2cdbc8", + "sha256": "53d1c2b022cfadd2463fe405a60fb179562b2cc487ab4c5202f63cbc758d5109", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_ProfessorOaksLab.json", "source": { "decomp_file": "data/maps/PalletTown_ProfessorOaksLab/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/PalletTown_ProfessorOaksLab/map.json", + "events_sha256": "37906ed851a344cc63b41b303b41b6da091328b97b05b6e38d2570486d104704", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1240,17 +1463,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PalletTown_ProfessorOaksLab.json", + "sha256": "53d1c2b022cfadd2463fe405a60fb179562b2cc487ab4c5202f63cbc758d5109" } }, { "name": "PalletTown_RivalsHouse", "file": "data/games/frlg/maps/runtime/PalletTown_RivalsHouse.json", - "sha256": "123cc5013c7904a5b615f0a39c6797811dcacc2d24222c09807ab7750c1391e4", + "sha256": "3e99b4c9f53ad68779d2a37d9134b4bcb3f229b5db23abb6d5db8e845c55dfad", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_RivalsHouse.json", "source": { "decomp_file": "data/maps/PalletTown_RivalsHouse/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1276,17 +1504,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PalletTown_RivalsHouse.json", + "sha256": "3e99b4c9f53ad68779d2a37d9134b4bcb3f229b5db23abb6d5db8e845c55dfad" } }, { "name": "PewterCity", "file": "data/games/frlg/maps/runtime/PewterCity.json", - "sha256": "ede0ddddd2bec95a3651300a6a34070a2f08dd45416a9b05c2568a7bc7258348", + "sha256": "f538cd3276d830fb57a956ffd50e7d723b70324d12be64612cffa916933070a2", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity.json", "source": { "decomp_file": "data/maps/PewterCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1312,17 +1545,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PewterCity.json", + "sha256": "f538cd3276d830fb57a956ffd50e7d723b70324d12be64612cffa916933070a2" } }, { "name": "PewterCity_Gym", "file": "data/games/frlg/maps/runtime/PewterCity_Gym.json", - "sha256": "f8553e27dd2d6c04b576432a010e90a1dda163c6d1b967c5d10666d6b32ba37d", + "sha256": "acb4e04dff1f09f3334a175eaccd0f1d9e8d2a7d87a4b1d4f45d113b6f315be5", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Gym.json", "source": { "decomp_file": "data/maps/PewterCity_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1348,17 +1586,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PewterCity_Gym.json", + "sha256": "acb4e04dff1f09f3334a175eaccd0f1d9e8d2a7d87a4b1d4f45d113b6f315be5" } }, { "name": "PewterCity_Mart", "file": "data/games/frlg/maps/runtime/PewterCity_Mart.json", - "sha256": "3d7e406d4c6fc5e15dd04f6a0c2a70a6c15fb8857af5e9ced99eef31eb1b96df", + "sha256": "5a1deabf67963d7b6701bd80d3b642a31867b9ac82ad456170edeca4ac69fb34", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Mart.json", "source": { "decomp_file": "data/maps/PewterCity_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "target_game": "frlg", "source_game": "firered", @@ -1384,17 +1627,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PewterCity_Mart.json", + "sha256": "5a1deabf67963d7b6701bd80d3b642a31867b9ac82ad456170edeca4ac69fb34" } }, { "name": "PewterCity_Museum_1F", "file": "data/games/frlg/maps/runtime/PewterCity_Museum_1F.json", - "sha256": "6e50491114a5bbddf793f34115fc7909fef98db0de07c1c4701db33d2098fb05", + "sha256": "b8dc747a6c1002f6de4a601e08515d2e011edc36fa286f277323e5e9603b0a86", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Museum_1F.json", "source": { "decomp_file": "data/maps/PewterCity_Museum_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -1420,12 +1668,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PewterCity_Museum_1F.json", + "sha256": "b8dc747a6c1002f6de4a601e08515d2e011edc36fa286f277323e5e9603b0a86" } }, { "name": "PewterCity_PokemonCenter_1F", "file": "data/games/frlg/maps/runtime/PewterCity_PokemonCenter_1F.json", - "sha256": "775bd4999b0f82fee3af684f06e749034517118be5e91dd3eb885825beeedafc", + "sha256": "0349e424425ef32979f07c933d2e57dbb358b6ebb4d347ca101441d0ff4b9849", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_PokemonCenter_1F.json", "source": { "decomp_file": "data/maps/PewterCity_PokemonCenter_1F/map.json", @@ -1456,6 +1708,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/PewterCity_PokemonCenter_1F.json", + "sha256": "0349e424425ef32979f07c933d2e57dbb358b6ebb4d347ca101441d0ff4b9849" } }, { @@ -1487,7 +1743,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonLeague_AgathasRoom.json", + "sha256": "dd3d675f8899b63aa7c7a9d938e55f71e953cd02e0286e233fecf86aa71f38d8" + } }, { "name": "PokemonLeague_BrunosRoom", @@ -1518,7 +1778,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonLeague_BrunosRoom.json", + "sha256": "d784093bbc7c3f8d3ffccc7d105d1875d0aed372278e8bf49c3941fe73abb0b6" + } }, { "name": "PokemonLeague_ChampionsRoom", @@ -1548,7 +1812,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonLeague_ChampionsRoom.json", + "sha256": "760494eabba1d0dae1c70da9d7c272040fbe8e40d9ad5a465ce94a45f150a407" + } }, { "name": "PokemonLeague_HallOfFame", @@ -1579,7 +1847,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonLeague_HallOfFame.json", + "sha256": "14f0fcfbea0d84ebc008fa467621e4f30e09e26d477864b057c6d9ac79ba1e31" + } }, { "name": "PokemonLeague_LancesRoom", @@ -1610,7 +1882,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonLeague_LancesRoom.json", + "sha256": "80bb156d2e5337b2dcd94ec8293330b6096c2bfeae88226dba68d4fdea5d4e07" + } }, { "name": "PokemonLeague_LoreleisRoom", @@ -1641,7 +1917,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonLeague_LoreleisRoom.json", + "sha256": "4ff19c68a4886814af3b6dece6da0a576e3c41d987542cf56e74b69fa1ea78be" + } }, { "name": "PokemonMansion_1F", @@ -1672,7 +1952,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonMansion_1F.json", + "sha256": "0f902c1a0477e5ef17535572b48749026eac6d92250d97bacca3939f0143d5e3" + } }, { "name": "PokemonMansion_2F", @@ -1703,7 +1987,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonMansion_2F.json", + "sha256": "a5c43cb0b06c242564977fa1ffcf12540cdb544d1cced6e106cc0621d2e43bda" + } }, { "name": "PokemonMansion_3F", @@ -1734,7 +2022,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonMansion_3F.json", + "sha256": "eb8933459f18412887d4225252d2f2f75907feae443301b41bf4122aeb0ca7b6" + } }, { "name": "PokemonMansion_B1F", @@ -1765,7 +2057,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonMansion_B1F.json", + "sha256": "91118982533aa4fd3a466f7307f40684eb68e91e7fbebeb0f69309fd22598242" + } }, { "name": "PokemonTower_1F", @@ -1796,7 +2092,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonTower_1F.json", + "sha256": "78f21d8c2c91c68cab8a86780be6defa2cab0f2ebf2c5d7144963b78bfc7068f" + } }, { "name": "PokemonTower_2F", @@ -1827,7 +2127,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonTower_2F.json", + "sha256": "6e3dd2d839290824e26980b6562e6187a498c4dee27ca4cfff8d6b4ce453083e" + } }, { "name": "PokemonTower_3F", @@ -1858,7 +2162,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonTower_3F.json", + "sha256": "3e6fa212fcd1008070e3717c60c19ae7dc08346ed0eb15a907a885b28f702424" + } }, { "name": "PokemonTower_4F", @@ -1889,7 +2197,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonTower_4F.json", + "sha256": "5a42669d864f896c04ef0446c0f3e59409d9882a1eafb43abd9f8018e449a02f" + } }, { "name": "PokemonTower_5F", @@ -1920,7 +2232,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonTower_5F.json", + "sha256": "ce6771fbc71a673718e6152e3b137f297b06238d76f002160adc2ffd8ee1511a" + } }, { "name": "PokemonTower_6F", @@ -1951,7 +2267,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonTower_6F.json", + "sha256": "777067e79c1269c3f9e97b9cf88569654608fbd49ff4170bbc41b223306039b1" + } }, { "name": "PokemonTower_7F", @@ -1982,17 +2302,34 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/PokemonTower_7F.json", + "sha256": "0803896aa56b4a50adda36265946b3307d46d89dab45b3caa8eaae684578259e" + } }, { "name": "RockTunnel_1F", "file": "data/games/frlg/maps/runtime/RockTunnel_1F.json", - "sha256": "2e8f70c287a3486552cf28f1c328a47b2ce8b0ca7e2e000a58a46bef73358bd0", + "sha256": "298dd5a725f26795089826dec1532a09707c91b254727db37e1775a35f07922b", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/RockTunnel_1F.json", "source": { "decomp_file": "data/maps/RockTunnel_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/RockTunnel_1F/map.json", + "events_sha256": "bf89c9e78f7373691783428c0143b6ecaa52be67edf508859ec175c79701a468", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -2018,17 +2355,34 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/RockTunnel_1F.json", + "sha256": "298dd5a725f26795089826dec1532a09707c91b254727db37e1775a35f07922b" } }, { "name": "RockTunnel_B1F", "file": "data/games/frlg/maps/runtime/RockTunnel_B1F.json", - "sha256": "8a5fee4e817d4b7e03667e44896547e8dcc70e536c18857af23adba071ed5b10", + "sha256": "d8a4f463d0d7f179a8df25358b8b46c1557ac04ba9b1d51d797090f41e940631", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/RockTunnel_B1F.json", "source": { "decomp_file": "data/maps/RockTunnel_B1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/RockTunnel_B1F/map.json", + "events_sha256": "668c7ede675ec83008984303faafef1d0b4d6ec5f11bcfb852e73a6280ad3cb8", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -2054,6 +2408,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/RockTunnel_B1F.json", + "sha256": "d8a4f463d0d7f179a8df25358b8b46c1557ac04ba9b1d51d797090f41e940631" } }, { @@ -2085,7 +2443,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/RocketHideout_B1F.json", + "sha256": "8d1897c7b8f026e4f4b0a417cff3253de276f06564c820e13f931ff900b3e13e" + } }, { "name": "RocketHideout_B2F", @@ -2116,7 +2478,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/RocketHideout_B2F.json", + "sha256": "7ea39b70a18ceaf19a4b520ab451413e8d641ec691e67690147cfbb3b376ef2d" + } }, { "name": "RocketHideout_B3F", @@ -2147,7 +2513,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/RocketHideout_B3F.json", + "sha256": "d0ee7d2bc9f5a495596d4ca8baa3def58124dfbb7db906153f20fb8ac1a1ba10" + } }, { "name": "RocketHideout_B4F", @@ -2178,17 +2548,22 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/RocketHideout_B4F.json", + "sha256": "b85e958778de96c0ee99a024f0ae77ad988cbf251cb8b5a423dd016660cb4a50" + } }, { "name": "Route1", "file": "data/games/frlg/maps/runtime/Route1.json", - "sha256": "78bf43c8bdf7a0c5dcb22880261626abc36d068c0dfbbc242056e12401c44033", + "sha256": "26ba91c2ecfdf0af8ccbdca9f21a522b68f93565594386c09af1011485de7781", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route1.json", "source": { "decomp_file": "data/maps/Route1/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -2214,12 +2589,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route1.json", + "sha256": "26ba91c2ecfdf0af8ccbdca9f21a522b68f93565594386c09af1011485de7781" } }, { "name": "Route10", "file": "data/games/frlg/maps/runtime/Route10.json", - "sha256": "8acf0083caf04fe1b0078e8bb400a5221b4fcbc76bf28422aca2f49cf54b3ba1", + "sha256": "50f909fb818cd373673816732e8391e132dde685babbe486493cab113b1b9807", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10.json", "source": { "decomp_file": "data/maps/Route10/map.json", @@ -2250,12 +2629,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route10.json", + "sha256": "50f909fb818cd373673816732e8391e132dde685babbe486493cab113b1b9807" } }, { "name": "Route10_PokemonCenter_1F", "file": "data/games/frlg/maps/runtime/Route10_PokemonCenter_1F.json", - "sha256": "5d10f2b726fafc90a401d638272b65ea16960cba93132586caf93d673cf18b78", + "sha256": "104cf48339dd7062cc1afc3f3ea216157ed23afc2320d0a7d1ace66e069b05b0", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10_PokemonCenter_1F.json", "source": { "decomp_file": "data/maps/Route10_PokemonCenter_1F/map.json", @@ -2286,17 +2669,20 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route10_PokemonCenter_1F.json", + "sha256": "104cf48339dd7062cc1afc3f3ea216157ed23afc2320d0a7d1ace66e069b05b0" } }, { "name": "Route11", "file": "data/games/frlg/maps/runtime/Route11.json", - "sha256": "608f10150cd73f3b46b8dfbf0d63e6ce5af3abfea5968709904a533bfd62e245", + "sha256": "84c79337b3911280f98c7200894fabfe67f865e5bbfdd1c0469f057d38ece38c", "source": { "decomp_file": "data/maps/Route11/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2317,7 +2703,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route11.json", + "sha256": "84c79337b3911280f98c7200894fabfe67f865e5bbfdd1c0469f057d38ece38c" + } }, { "name": "Route11_EastEntrance_1F", @@ -2348,7 +2738,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route11_EastEntrance_1F.json", + "sha256": "0f91f56e2344b005f43eb2cc1eb62ce5a73d20aaf046889b6bb32e87b3b27adb" + } }, { "name": "Route12", @@ -2378,7 +2772,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route12.json", + "sha256": "40f89d8728bd23d56f62df78ee4ccc750a2c01ce284cb04746d475846e43a664" + } }, { "name": "Route12_NorthEntrance_1F", @@ -2409,17 +2807,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route12_NorthEntrance_1F.json", + "sha256": "d7952e73d60a33eefe9f2613b43eead09e10099b8a3c3f56eed31f2a4f8adf9c" + } }, { "name": "Route13", "file": "data/games/frlg/maps/runtime/Route13.json", - "sha256": "39b964adcbdcd6fba3e242d7e83bc0c3401fb60ecda1345d683a799c5a9c0d9e", + "sha256": "6f8d729f418cb2a862704c56791d558b9b2a8b4a1c143f21894a7b6613e7e91c", "source": { "decomp_file": "data/maps/Route13/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2440,17 +2841,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route13.json", + "sha256": "6f8d729f418cb2a862704c56791d558b9b2a8b4a1c143f21894a7b6613e7e91c" + } }, { "name": "Route14", "file": "data/games/frlg/maps/runtime/Route14.json", - "sha256": "72da23f1dcec08bfcf6e115fcf920597383de549764c9696d027e53b7fcf69e3", + "sha256": "8b9cbb41c97eeef84b40efe42c1d160da65e42d55f573fe05a6c0a30fb71fcde", "source": { "decomp_file": "data/maps/Route14/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2471,7 +2875,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route14.json", + "sha256": "8b9cbb41c97eeef84b40efe42c1d160da65e42d55f573fe05a6c0a30fb71fcde" + } }, { "name": "Route15", @@ -2502,7 +2910,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route15.json", + "sha256": "c75c4abc6c0fb9585c3ebd302ffb7c7ea747fbdac1703943c84e5182470242ce" + } }, { "name": "Route15_WestEntrance_1F", @@ -2533,17 +2945,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route15_WestEntrance_1F.json", + "sha256": "83fcaf6618300ac0cdc89a1ca0f24dda920e5586e55941048db40d66e564b540" + } }, { "name": "Route16", "file": "data/games/frlg/maps/runtime/Route16.json", - "sha256": "e79de8da8f8d4ceb73e9a8329dfa7e6d3739724d267648f17cfbdcba277dbdc8", + "sha256": "700428e5b7c291ef6e37f473e73d334fa24201e3a3f2cbc36aba784de6323089", "source": { "decomp_file": "data/maps/Route16/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2564,7 +2979,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route16.json", + "sha256": "700428e5b7c291ef6e37f473e73d334fa24201e3a3f2cbc36aba784de6323089" + } }, { "name": "Route16_House", @@ -2595,7 +3014,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route16_House.json", + "sha256": "b3dd44d35e994ffa35663851a651d7e859580edccd8fb5b40b3ad38bc9afa6f0" + } }, { "name": "Route16_NorthEntrance_1F", @@ -2626,17 +3049,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route16_NorthEntrance_1F.json", + "sha256": "46627f2ed9059e94ca0830d5e36524fe6202452249261130fc413d1f9729ce93" + } }, { "name": "Route18", "file": "data/games/frlg/maps/runtime/Route18.json", - "sha256": "6c9fc1b6c86a2adef3ee67c101c3ea9eda61845abe1353778b87d227cbb38d57", + "sha256": "7342b0a98fea4ebdca031529a484aca564376b183c12b07fbc4861cbbd0bc4c2", "source": { "decomp_file": "data/maps/Route18/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2657,7 +3083,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route18.json", + "sha256": "7342b0a98fea4ebdca031529a484aca564376b183c12b07fbc4861cbbd0bc4c2" + } }, { "name": "Route18_EastEntrance_1F", @@ -2688,17 +3118,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route18_EastEntrance_1F.json", + "sha256": "3279c34f5c27c8c4e49891757b96a163fd3ba71b2f2e4fb38b188fa5308aa0fd" + } }, { "name": "Route19", "file": "data/games/frlg/maps/runtime/Route19.json", - "sha256": "328524f0d96ed1714df25d2d7a3ac69df247c7c090fac252a93f6907e3cb414f", + "sha256": "97dab054805f4cc1ed962c16345ed3e6c16151b88d59b33ae17a21688c3c080f", "source": { "decomp_file": "data/maps/Route19/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2719,17 +3152,34 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route19.json", + "sha256": "97dab054805f4cc1ed962c16345ed3e6c16151b88d59b33ae17a21688c3c080f" + } }, { "name": "Route2", "file": "data/games/frlg/maps/runtime/Route2.json", - "sha256": "0e523513ee077bbdfc7f3add7d3045c907128c0f1a2556694a0945e08980c2b5", + "sha256": "791f723a806c664b6892b101a866208745c4ed58f9e44dacbbc892780a62cc26", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2.json", "source": { "decomp_file": "data/maps/Route2/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route2/map.json", + "events_sha256": "2562e3736b600c95b8c0a4c2a1bb3fb062f5c50208bebc43cd4303328ccda7ea", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -2755,17 +3205,20 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route2.json", + "sha256": "791f723a806c664b6892b101a866208745c4ed58f9e44dacbbc892780a62cc26" } }, { "name": "Route20", "file": "data/games/frlg/maps/runtime/Route20.json", - "sha256": "2da48f6afb7408738ea6338904a098872e42e5fe251983effb490c029f8587cb", + "sha256": "2453ea45b8a3b4a1e054add1ad45209811b598edaa7a8cd8e945904252cb2093", "source": { "decomp_file": "data/maps/Route20/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2786,17 +3239,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route20.json", + "sha256": "2453ea45b8a3b4a1e054add1ad45209811b598edaa7a8cd8e945904252cb2093" + } }, { "name": "Route21_North", "file": "data/games/frlg/maps/runtime/Route21_North.json", - "sha256": "8dc2193dd34636a79e68abd3dbd86e3940fda3fce11f4fa01344482ebf50ff56", + "sha256": "daba49354f11915748e3d904198b117d9d220689a128f33598413aeed23c2fd6", "source": { "decomp_file": "data/maps/Route21_North/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2817,17 +3273,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route21_North.json", + "sha256": "daba49354f11915748e3d904198b117d9d220689a128f33598413aeed23c2fd6" + } }, { "name": "Route21_South", "file": "data/games/frlg/maps/runtime/Route21_South.json", - "sha256": "7e6916023124b37d83ae59bc778dbf1bb57370e47d48157942065491f82cf30f", + "sha256": "2f6363a0425f8e9bfcd5cc2921b959856880dec0f529073521bc394a72750e40", "source": { "decomp_file": "data/maps/Route21_South/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2848,12 +3307,16 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route21_South.json", + "sha256": "2f6363a0425f8e9bfcd5cc2921b959856880dec0f529073521bc394a72750e40" + } }, { "name": "Route22", "file": "data/games/frlg/maps/runtime/Route22.json", - "sha256": "6e5145419b8cf3be28eed1e86ec65dd8f8398b34e582582e229dadb869ae7848", + "sha256": "1c7eafcae2b76adea9ba626f6ffc23233eae8866766e72e286f21c144eabf157", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route22.json", "source": { "decomp_file": "data/maps/Route22/map.json", @@ -2884,6 +3347,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route22.json", + "sha256": "1c7eafcae2b76adea9ba626f6ffc23233eae8866766e72e286f21c144eabf157" } }, { @@ -2915,17 +3382,20 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route22_NorthEntrance.json", + "sha256": "bbacfdf31ed8deb5e36d74f57091afabd165c7dbb776c50a955c0bf0302ddccd" + } }, { "name": "Route23", "file": "data/games/frlg/maps/runtime/Route23.json", - "sha256": "00a6e123cce2cd62e32baf174c15e7a84b750a534f8d83b4386169d45900c43f", + "sha256": "08e44bf9a53813e6a3617e578e5c6a8de0f53ba17ca629b6a3932a4eef0661f8", "source": { "decomp_file": "data/maps/Route23/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -2946,17 +3416,33 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route23.json", + "sha256": "08e44bf9a53813e6a3617e578e5c6a8de0f53ba17ca629b6a3932a4eef0661f8" + } }, { "name": "Route24", "file": "data/games/frlg/maps/runtime/Route24.json", - "sha256": "8a473b01d6cb800fa35f2fa9527f58e217973f30c4701928ba0ef459261a7ff2", + "sha256": "3b530da5b8923bc43513f5785d9010d6029f10d6bc0d38539f5c48e962e0027e", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route24.json", "source": { "decomp_file": "data/maps/Route24/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route24/map.json", + "events_sha256": "f844a16ec16a9aa725bcabf8862ec7b08be16b511f10664ef6e15f2448dd90a8", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } }, "target_game": "frlg", "source_game": "firered", @@ -2982,17 +3468,33 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route24.json", + "sha256": "3b530da5b8923bc43513f5785d9010d6029f10d6bc0d38539f5c48e962e0027e" } }, { "name": "Route25", "file": "data/games/frlg/maps/runtime/Route25.json", - "sha256": "7d68ff522f7ac2ae0fd13f241f9b8e95c45db2cf728c7c6f4a76d443e3a5087c", + "sha256": "df5350e4003e5ceeda017a5918b7b93ed960f045febc0a7727e56a17a3768f63", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25.json", "source": { "decomp_file": "data/maps/Route25/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route25/map.json", + "events_sha256": "a4b412784121ae753cb88e5a1be6db1b5575e77946ba3c6b87aca8087b1dfcb6", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } }, "target_game": "frlg", "source_game": "firered", @@ -3018,17 +3520,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route25.json", + "sha256": "df5350e4003e5ceeda017a5918b7b93ed960f045febc0a7727e56a17a3768f63" } }, { "name": "Route25_SeaCottage", "file": "data/games/frlg/maps/runtime/Route25_SeaCottage.json", - "sha256": "4b0748e7338b59ff17c1123c0ffcccb5768c80c480e347362991f5ed989e8b7a", + "sha256": "fc57abf1eb0645f65f8c1c8814269f7315fcd5a417491ad9d18af1026d073a3c", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25_SeaCottage.json", "source": { "decomp_file": "data/maps/Route25_SeaCottage/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3054,6 +3561,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route25_SeaCottage.json", + "sha256": "fc57abf1eb0645f65f8c1c8814269f7315fcd5a417491ad9d18af1026d073a3c" } }, { @@ -3085,17 +3596,22 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route2_EastBuilding.json", + "sha256": "1e03b3dfca61e82a9b0c537039eb7c3b62f261162e9340af9b90733a9dde4cad" + } }, { "name": "Route2_ViridianForest_NorthEntrance", "file": "data/games/frlg/maps/runtime/Route2_ViridianForest_NorthEntrance.json", - "sha256": "333c3e91528f81cbc96013a80dfbc5fe31d046c31ff1ce5ac1df52afdd53324e", + "sha256": "20e5c25f9a59298eba9bbdfdf05ab1a8c6b531d3599fd23d4634aa52ca08614d", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_NorthEntrance.json", "source": { "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3121,17 +3637,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route2_ViridianForest_NorthEntrance.json", + "sha256": "20e5c25f9a59298eba9bbdfdf05ab1a8c6b531d3599fd23d4634aa52ca08614d" } }, { "name": "Route2_ViridianForest_SouthEntrance", "file": "data/games/frlg/maps/runtime/Route2_ViridianForest_SouthEntrance.json", - "sha256": "c4787c8d93216582f28ad6957adc1ef1c76b8afefe3a4174ada10d274140aae8", + "sha256": "2d2eb32a228f4cb5be085a6e71d78795ddb5bf04561abe2d89a1a75d0396bd48", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_SouthEntrance.json", "source": { "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3157,17 +3678,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route2_ViridianForest_SouthEntrance.json", + "sha256": "2d2eb32a228f4cb5be085a6e71d78795ddb5bf04561abe2d89a1a75d0396bd48" } }, { "name": "Route3", "file": "data/games/frlg/maps/runtime/Route3.json", - "sha256": "adbf361b52c06820e488203c660342eb41610164ff1be1e88355b554a27afc06", + "sha256": "5a896b30f51be20ba15adda28fc1c609d8453e1556d004c45778697262563b99", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route3.json", "source": { "decomp_file": "data/maps/Route3/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3193,17 +3719,33 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route3.json", + "sha256": "5a896b30f51be20ba15adda28fc1c609d8453e1556d004c45778697262563b99" } }, { "name": "Route4", "file": "data/games/frlg/maps/runtime/Route4.json", - "sha256": "920ba2e85d766653a15cd64bc5914e21fd1c11e7e44aad132f7fa44c7a6be89d", + "sha256": "f0ee8ee46dcb322a11dc333dd8e8ae2a81545980ce61f3844c5e7ad5668a64ab", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4.json", "source": { "decomp_file": "data/maps/Route4/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route4/map.json", + "events_sha256": "5b0b84cb73ecc6597470d01d5933ca36d5e4410cdda53dddb72922689e5653ac", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } }, "target_game": "frlg", "source_game": "firered", @@ -3229,12 +3771,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route4.json", + "sha256": "f0ee8ee46dcb322a11dc333dd8e8ae2a81545980ce61f3844c5e7ad5668a64ab" } }, { "name": "Route4_PokemonCenter_1F", "file": "data/games/frlg/maps/runtime/Route4_PokemonCenter_1F.json", - "sha256": "827cc9b8beeabc81a93be19dfdd672c271e340dc8255bd1defe018f4a2c9446a", + "sha256": "0a1faa7a9f0d20c5d1f5f31b737435f19923f851485de2646ff1a0dbd56294b6", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4_PokemonCenter_1F.json", "source": { "decomp_file": "data/maps/Route4_PokemonCenter_1F/map.json", @@ -3265,17 +3811,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route4_PokemonCenter_1F.json", + "sha256": "0a1faa7a9f0d20c5d1f5f31b737435f19923f851485de2646ff1a0dbd56294b6" } }, { "name": "Route5", "file": "data/games/frlg/maps/runtime/Route5.json", - "sha256": "25b1d78734a754b55418ec724fe9e539e886ddbf1df3ea646824bdfd42d652af", + "sha256": "0b5e988245385ea714eeb48b58974152aadab2390514832fc45bfb826237a736", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route5.json", "source": { "decomp_file": "data/maps/Route5/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3301,6 +3852,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route5.json", + "sha256": "0b5e988245385ea714eeb48b58974152aadab2390514832fc45bfb826237a736" } }, { @@ -3332,12 +3887,16 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route5_SouthEntrance.json", + "sha256": "a3d6b9df455410df5e752ed038eaf84211c01b625e7489cf01d375f8c966f721" + } }, { "name": "Route6", "file": "data/games/frlg/maps/runtime/Route6.json", - "sha256": "69fab518b0df57ccdb2c8c639fe70c0d9f0af802ede3ec08888351431d1b2ec9", + "sha256": "05b650326081afe6d023a07efd5242d4e56408b69e229e0402639cacc8bc1da9", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route6.json", "source": { "decomp_file": "data/maps/Route6/map.json", @@ -3368,6 +3927,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route6.json", + "sha256": "05b650326081afe6d023a07efd5242d4e56408b69e229e0402639cacc8bc1da9" } }, { @@ -3399,7 +3962,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route6_NorthEntrance.json", + "sha256": "1938c83c169392ff710cb3ffc2efedfde1d730f1536a01cf38f6f91aa7dbaf4a" + } }, { "name": "Route7", @@ -3430,7 +3997,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route7.json", + "sha256": "15367d31f80ff26dd8ae7e59e77f427968ec8d0ef6af981a7125d797715fc8e7" + } }, { "name": "Route7_EastEntrance", @@ -3461,7 +4032,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route7_EastEntrance.json", + "sha256": "d1073d52636707c03882d34e05d0a11a5c3934e2396432144a76e3e8fba8bf8b" + } }, { "name": "Route8", @@ -3492,7 +4067,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route8.json", + "sha256": "38825b483e5aba71f37133af8b2acd79e3fe87e9bdaa9617669e48c1238f5ea8" + } }, { "name": "Route8_WestEntrance", @@ -3523,17 +4102,34 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/Route8_WestEntrance.json", + "sha256": "55d6cec8853e8c81007f324b0bcdb0c1170ad21f7a79e12a4ca783a78bdf2cf1" + } }, { "name": "Route9", "file": "data/games/frlg/maps/runtime/Route9.json", - "sha256": "b25574fb6dbcdfbfc493dd5a47c14b220416bba091dbe3abd11acc91ca9f1d0a", + "sha256": "f1c7f5c9a3d402ef73c09c5967300df43165438d5bb700c7cfec95a151ccac70", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route9.json", "source": { "decomp_file": "data/maps/Route9/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/Route9/map.json", + "events_sha256": "0a8b7cfd3028e15d59903f3f5dfc503f98712e5592d8d6a99a26cddc430d5270", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3559,17 +4155,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/Route9.json", + "sha256": "f1c7f5c9a3d402ef73c09c5967300df43165438d5bb700c7cfec95a151ccac70" } }, { "name": "SSAnne_1F_Corridor", "file": "data/games/frlg/maps/runtime/SSAnne_1F_Corridor.json", - "sha256": "f797b810955a7124d6c964205394b059428df91c4d8dab42ea3815c9eee0fb6d", + "sha256": "671d80ebbbd40ca59803a1c2236c3af8f2886ac942ac671fb02f257e70d60d6c", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_1F_Corridor.json", "source": { "decomp_file": "data/maps/SSAnne_1F_Corridor/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "target_game": "frlg", "source_game": "firered", @@ -3595,6 +4196,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/SSAnne_1F_Corridor.json", + "sha256": "671d80ebbbd40ca59803a1c2236c3af8f2886ac942ac671fb02f257e70d60d6c" } }, { @@ -3626,17 +4231,22 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SSAnne_1F_Room6.json", + "sha256": "b1cb332de36333a516c29456353b19f20db0b239665ae9db7e1b636a6e8a33c3" + } }, { "name": "SSAnne_2F_Corridor", "file": "data/games/frlg/maps/runtime/SSAnne_2F_Corridor.json", - "sha256": "73318b42c74862313b3b1239c30d210422e768dcee1caa09d8284485ece6698b", + "sha256": "d6416a46e6cf4246eb6601949b1c65a4178eed0c2439bd5f0f15477b15b3ab28", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_2F_Corridor.json", "source": { "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3662,17 +4272,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/SSAnne_2F_Corridor.json", + "sha256": "d6416a46e6cf4246eb6601949b1c65a4178eed0c2439bd5f0f15477b15b3ab28" } }, { "name": "SSAnne_CaptainsOffice", "file": "data/games/frlg/maps/runtime/SSAnne_CaptainsOffice.json", - "sha256": "354572f940dfd47badd1938d9bb818378fe8f70aaa07e611a00fd3da171ff7d6", + "sha256": "9361655ac2467290720ecc93a9dce28837e7fc1e24bbf4ec0b99ac5d72cde91e", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_CaptainsOffice.json", "source": { "decomp_file": "data/maps/SSAnne_CaptainsOffice/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -3698,12 +4313,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/SSAnne_CaptainsOffice.json", + "sha256": "9361655ac2467290720ecc93a9dce28837e7fc1e24bbf4ec0b99ac5d72cde91e" } }, { "name": "SSAnne_Exterior", "file": "data/games/frlg/maps/runtime/SSAnne_Exterior.json", - "sha256": "f662d5089e083c5056611b51f5f710f7d4ebac5eebcbf9264cbc76bec42269e2", + "sha256": "cd9e68c2b4707f702686de0e72bf3b6b3e8d18797e957152847f0a703bdf0e55", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_Exterior.json", "source": { "decomp_file": "data/maps/SSAnne_Exterior/map.json", @@ -3734,17 +4353,20 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/SSAnne_Exterior.json", + "sha256": "cd9e68c2b4707f702686de0e72bf3b6b3e8d18797e957152847f0a703bdf0e55" } }, { "name": "SafariZone_Center", "file": "data/games/frlg/maps/runtime/SafariZone_Center.json", - "sha256": "c7ed845118b2ab707ba5003e289fba437b5241473b6721329226ebc23f41fa8d", + "sha256": "4d39fb7c4ae808582ab021109da23e7cffbc4aba2740634032f17371c40aa89b", "source": { "decomp_file": "data/maps/SafariZone_Center/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", @@ -3765,7 +4387,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SafariZone_Center.json", + "sha256": "4d39fb7c4ae808582ab021109da23e7cffbc4aba2740634032f17371c40aa89b" + } }, { "name": "SafariZone_East", @@ -3795,7 +4421,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SafariZone_East.json", + "sha256": "b0f95e65b2fc5452e13ccd5c76e444112c9eed30781616dc103a7577e9f1ddde" + } }, { "name": "SafariZone_North", @@ -3825,7 +4455,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SafariZone_North.json", + "sha256": "afb1fb89688fe98bfd9b793f538f5d54b9eee514d9531d3c8d058cbb4ca2a5a6" + } }, { "name": "SafariZone_SecretHouse", @@ -3856,7 +4490,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SafariZone_SecretHouse.json", + "sha256": "52928753db01353c63bcb47ee9185e30d50955df129a7b626d7b176eedcb493e" + } }, { "name": "SafariZone_West", @@ -3886,7 +4524,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SafariZone_West.json", + "sha256": "6e93013a6bb5d0240d1c95fb15129c67e34ecfe8b731bd78895053dde545ebb1" + } }, { "name": "SaffronCity", @@ -3917,7 +4559,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SaffronCity.json", + "sha256": "7e237be77238490ff14788abe8ba38e5f031e708d57fb1836cdb090b219f424b" + } }, { "name": "SaffronCity_Connection", @@ -3948,7 +4594,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SaffronCity_Connection.json", + "sha256": "8b7f020b88fd81657c88005e15782dff4613eae9c630c58355d894825f733956" + } }, { "name": "SaffronCity_Gym", @@ -3979,7 +4629,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SaffronCity_Gym.json", + "sha256": "0c6bfc660f94ef3eee01b35276b3a04d09aae4e99de9c756c11b1d8e1df12c18" + } }, { "name": "SaffronCity_Mart", @@ -4010,7 +4664,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SaffronCity_Mart.json", + "sha256": "1cedc27430b3ca1987909af1d2eeefdc209ce7ee7df5026a23e875246cb94c86" + } }, { "name": "SilphCo_10F", @@ -4041,7 +4699,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_10F.json", + "sha256": "1e37a45e3eb6b23651132c7f1b5e1652db6c58c555cc8c14c85650bfd5c8d2d3" + } }, { "name": "SilphCo_11F", @@ -4072,7 +4734,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_11F.json", + "sha256": "86d778cd24a1fb610f6f23fb5bc4ae24ff717efa05bce30b75cad0a1a96d2c19" + } }, { "name": "SilphCo_1F", @@ -4103,7 +4769,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_1F.json", + "sha256": "85b07612e7a5cda4a87e535ef9f8e9c61dea8d1d61a8c5126b05820a8c37582b" + } }, { "name": "SilphCo_2F", @@ -4134,7 +4804,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_2F.json", + "sha256": "79361bd28d6954b951be4aa5c9c06a911fbc49e783e952912e9674218037da51" + } }, { "name": "SilphCo_3F", @@ -4165,7 +4839,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_3F.json", + "sha256": "c8126c1141382299f587ca88a8651c5f354913ed33db1d753db18ddae256c44f" + } }, { "name": "SilphCo_4F", @@ -4196,7 +4874,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_4F.json", + "sha256": "7a373dad263678f4291877655fe5bc000574713b5add6e428ab5183d623445f0" + } }, { "name": "SilphCo_5F", @@ -4227,7 +4909,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_5F.json", + "sha256": "93ecb143de01a2c2a3d618f5681e2ae5a48d59c699444ea5bcef6da5ecf93058" + } }, { "name": "SilphCo_6F", @@ -4258,7 +4944,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_6F.json", + "sha256": "8adefa9bb1543f3f64a7cbe18c468710e4f1fde282010549f44ca80251798109" + } }, { "name": "SilphCo_7F", @@ -4289,7 +4979,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_7F.json", + "sha256": "d4a9f54f5e50ba64eb847e9f6c7758bed7aca6248cf6e65c7f30e4627b7a5953" + } }, { "name": "SilphCo_8F", @@ -4319,7 +5013,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_8F.json", + "sha256": "c40ad044f00a70728cb977863382f417086bfc688ac8f9d670e6d752991aa228" + } }, { "name": "SilphCo_9F", @@ -4349,7 +5047,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/SilphCo_9F.json", + "sha256": "824eac5434aea0a465f31140fd715fff32b7c7f7eb62b0942905a122af4a6b5a" + } }, { "name": "UndergroundPath_EastEntrance", @@ -4380,7 +5082,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/UndergroundPath_EastEntrance.json", + "sha256": "bb3a41f1bd2a3fa38669e70b37117f5845f99ff1fbb4c61bfbf4f10cee75214b" + } }, { "name": "UndergroundPath_EastWestTunnel", @@ -4411,17 +5117,22 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/UndergroundPath_EastWestTunnel.json", + "sha256": "5c74f213da3d57de65e9b088ad4ba74efd7894de6c7198b85b6c99ebc58fca30" + } }, { "name": "UndergroundPath_NorthEntrance", "file": "data/games/frlg/maps/runtime/UndergroundPath_NorthEntrance.json", - "sha256": "fb2054e72dbd343c9ff39e86ce5adcf9ecd1e8ab632cbcc2bfe7c77d9d7eb4ee", + "sha256": "0f4af63db3f3071073f90153c66c411c770c256b04bb19f70800dd14a901fe08", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthEntrance.json", "source": { "decomp_file": "data/maps/UndergroundPath_NorthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -4447,17 +5158,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/UndergroundPath_NorthEntrance.json", + "sha256": "0f4af63db3f3071073f90153c66c411c770c256b04bb19f70800dd14a901fe08" } }, { "name": "UndergroundPath_NorthSouthTunnel", "file": "data/games/frlg/maps/runtime/UndergroundPath_NorthSouthTunnel.json", - "sha256": "a1ca4824d64b8b54d29b9fc1be4b996ae6407376f7d51f8a5bdee244abda1bb9", + "sha256": "32a740f26ab1811406f6f6283c120ebb1186f90d5ad657a8d4bb499dae93fcea", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthSouthTunnel.json", "source": { "decomp_file": "data/maps/UndergroundPath_NorthSouthTunnel/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -4483,17 +5199,22 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/UndergroundPath_NorthSouthTunnel.json", + "sha256": "32a740f26ab1811406f6f6283c120ebb1186f90d5ad657a8d4bb499dae93fcea" } }, { "name": "UndergroundPath_SouthEntrance", "file": "data/games/frlg/maps/runtime/UndergroundPath_SouthEntrance.json", - "sha256": "0ae052bbe89c9c6e41420219d87ee97cd1135badab9a9fbdd656efa1bc524e87", + "sha256": "6bfe8cab934c0a05e0ca8d27aeabf9c06e5b4aac36c09da36c0c5efe480eb0a0", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_SouthEntrance.json", "source": { "decomp_file": "data/maps/UndergroundPath_SouthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -4519,6 +5240,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/UndergroundPath_SouthEntrance.json", + "sha256": "6bfe8cab934c0a05e0ca8d27aeabf9c06e5b4aac36c09da36c0c5efe480eb0a0" } }, { @@ -4550,12 +5275,16 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/UndergroundPath_WestEntrance.json", + "sha256": "abdd24732ddeac193cc0e4535cfed24bba604a5a12803976bd6e3b668703b973" + } }, { "name": "VermilionCity", "file": "data/games/frlg/maps/runtime/VermilionCity.json", - "sha256": "788b1eb4b656d2fa72563c839292d7de307c959e5a15710127cb6b351eb10b10", + "sha256": "18d4ecb06eabac6595183f67aa8b2c995b2ceb7ab50dc47094190d39d9a1d28d", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity.json", "source": { "decomp_file": "data/maps/VermilionCity/map.json", @@ -4586,17 +5315,26 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/VermilionCity.json", + "sha256": "18d4ecb06eabac6595183f67aa8b2c995b2ceb7ab50dc47094190d39d9a1d28d" } }, { "name": "VermilionCity_Gym", "file": "data/games/frlg/maps/runtime/VermilionCity_Gym.json", - "sha256": "f2beffc84384f129db17a569c4a56472093f82d9216f142303268312a9c97f01", + "sha256": "e117ce6e4c508bf60916e685c267f3448d575920240249642807e9ba2dae3ede", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_Gym.json", "source": { "decomp_file": "data/maps/VermilionCity_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles", + "overlay": { + "file": "data/games/frlg/maps/overlays/VermilionCity_Gym.json", + "story_state": "complete" + } }, "target_game": "frlg", "source_game": "firered", @@ -4614,32 +5352,7 @@ }, "terrain_corrections": [], "generation_overrides": { - "opened_tiles": [ - [ - 4, - 6 - ], - [ - 5, - 6 - ], - [ - 6, - 6 - ], - [ - 4, - 7 - ], - [ - 5, - 7 - ], - [ - 6, - 7 - ] - ] + "opened_tiles": [] }, "preconditions": [ "FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES set; electric barriers already open" @@ -4649,6 +5362,14 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/VermilionCity_Gym.json", + "sha256": "773c6d7b692ae9ea1026b6e626fdd10356ed19f8021b28dc610dd93398c3da6c" + }, + "overlay": { + "file": "data/games/frlg/maps/overlays/VermilionCity_Gym.json", + "sha256": "07b2ac01d36875191239080d063cf2a5f9cec0d19efee58bb5e36d32061a23aa" } }, { @@ -4680,12 +5401,16 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/VermilionCity_Mart.json", + "sha256": "b8ea7082ed1adb1b10167c1ff50a4af68457cbbc12340a072f54505f5ce49c46" + } }, { "name": "VermilionCity_PokemonCenter_1F", "file": "data/games/frlg/maps/runtime/VermilionCity_PokemonCenter_1F.json", - "sha256": "5ce07bc3dadf0f8fd91adefbbdec85ccdefea796f9bd5da63fecdcf81866976c", + "sha256": "bbcf23517cc763cf39372eb56254828f789189ad8bdfc0c89cb717ef8239158c", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonCenter_1F.json", "source": { "decomp_file": "data/maps/VermilionCity_PokemonCenter_1F/map.json", @@ -4716,12 +5441,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/VermilionCity_PokemonCenter_1F.json", + "sha256": "bbcf23517cc763cf39372eb56254828f789189ad8bdfc0c89cb717ef8239158c" } }, { "name": "VermilionCity_PokemonFanClub", "file": "data/games/frlg/maps/runtime/VermilionCity_PokemonFanClub.json", - "sha256": "146f77582ebcc7a950c42d72d70d53b02b51af5bf6fc5ad54468cdc16d806c1c", + "sha256": "01d5650bcff496a61c2f26710ec339ff4802afac16d7b66732b46933e9667bc4", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonFanClub.json", "source": { "decomp_file": "data/maps/VermilionCity_PokemonFanClub/map.json", @@ -4752,6 +5481,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/VermilionCity_PokemonFanClub.json", + "sha256": "01d5650bcff496a61c2f26710ec339ff4802afac16d7b66732b46933e9667bc4" } }, { @@ -4782,7 +5515,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/VictoryRoad_1F.json", + "sha256": "057dcd01c2419bf96d00bc5db4f997a79e39deaed69c413c613d91c90afebe5b" + } }, { "name": "VictoryRoad_2F", @@ -4812,7 +5549,11 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/VictoryRoad_2F.json", + "sha256": "9825d03e495583c79cf20756de5bc9057035511e8bd53b172fd9aafe129cf8f6" + } }, { "name": "VictoryRoad_3F", @@ -4842,17 +5583,33 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/VictoryRoad_3F.json", + "sha256": "9962a4b7c5203da0b55ffdb78e6f73bd99ac38c249ca76a632332a5f2f1ba0b8" + } }, { "name": "ViridianCity", "file": "data/games/frlg/maps/runtime/ViridianCity.json", - "sha256": "6a671a0a0b06f78f566b89646f6b0f00c91c240a36300dff861f970455f99909", + "sha256": "c18f797d9fe5edf8fceb86f5e439778b44f78cf4397cd6b566f3ff7246c2d8cb", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity.json", "source": { "decomp_file": "data/maps/ViridianCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/ViridianCity/map.json", + "events_sha256": "5ce922b65f76335556ace9a047feeb1968854b604c8469c39cbbd60985f61bc1", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + } }, "target_game": "frlg", "source_game": "firered", @@ -4878,6 +5635,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/ViridianCity.json", + "sha256": "c18f797d9fe5edf8fceb86f5e439778b44f78cf4397cd6b566f3ff7246c2d8cb" } }, { @@ -4909,17 +5670,22 @@ "opened_tiles": [] }, "preconditions": [], - "status": "candidate" + "status": "candidate", + "base": { + "file": "data/games/frlg/maps/base/ViridianCity_Gym.json", + "sha256": "d1b79588bc91cbb2562b088e9f3e3af10947d01f7abef025e22218e059e66d95" + } }, { "name": "ViridianCity_Mart", "file": "data/games/frlg/maps/runtime/ViridianCity_Mart.json", - "sha256": "1b2b23f8f9a1b1fbe266f12bdac96cdf649d974b057e84bf9cba6befbaa15b3b", + "sha256": "5e14587080521d433626347fa37024eb1ee36b4fe07a164e19e72714b1b755e8", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_Mart.json", "source": { "decomp_file": "data/maps/ViridianCity_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "target_game": "frlg", "source_game": "firered", @@ -4945,12 +5711,16 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/ViridianCity_Mart.json", + "sha256": "5e14587080521d433626347fa37024eb1ee36b4fe07a164e19e72714b1b755e8" } }, { "name": "ViridianCity_PokemonCenter_1F", "file": "data/games/frlg/maps/runtime/ViridianCity_PokemonCenter_1F.json", - "sha256": "10a59d362ea8e984079c7ca4389f8a62f9a4b282231fc8d7900f0557592a6776", + "sha256": "e5e5692ebb964cb14a7ab5049ef8bdc55354914491e4bdbc0a617ad119a7acbb", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_PokemonCenter_1F.json", "source": { "decomp_file": "data/maps/ViridianCity_PokemonCenter_1F/map.json", @@ -4981,17 +5751,34 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/ViridianCity_PokemonCenter_1F.json", + "sha256": "e5e5692ebb964cb14a7ab5049ef8bdc55354914491e4bdbc0a617ad119a7acbb" } }, { "name": "ViridianForest", "file": "data/games/frlg/maps/runtime/ViridianForest.json", - "sha256": "89495fc3e132c4e3924923ad5cd4d3d82a782fe60fd9e4c1736bccc5eb50a70b", + "sha256": "b076b2e982ed1095534dc8d471947d04735518859a092385f770b47ee2851a8b", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianForest.json", "source": { "decomp_file": "data/maps/ViridianForest/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "item_identities": { + "repository": "pret/pokefirered", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "events": "data/maps/ViridianForest/map.json", + "events_sha256": "6d6f082604d3c220eeb2c72cb6a606403330df44c58d9ed2523cd81c53fdaba2", + "catalog": "data/maps/item-identities.json", + "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", + "source_game": "firered", + "target_game": "frlg", + "target_game_relation": "native_decomp", + "verification": "FRLG source-derived; collection not observed" + }, + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", @@ -5017,6 +5804,10 @@ "basis": "approved-runtime-pack", "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + }, + "base": { + "file": "data/games/frlg/maps/base/ViridianForest.json", + "sha256": "b076b2e982ed1095534dc8d471947d04735518859a092385f770b47ee2851a8b" } } ] diff --git a/docs/maps/OVERLAYS.md b/docs/maps/OVERLAYS.md index 7447593..3abadb8 100644 --- a/docs/maps/OVERLAYS.md +++ b/docs/maps/OVERLAYS.md @@ -79,6 +79,87 @@ or overlays. not verify tiles the run never touched; the promotion records the run so that limit stays visible. +## Step 1 as built (FRLG) + +### Layout and format + +- `data/games/frlg/maps/base/.json`: all 152 maps, `pokesim-runtime-map/2` + in the contract format. `frlg_decomp_map_builder --all --scope ... --manifest + ... --out data/games/frlg/maps/base --check` reproduces every one; with + `--manifest`, verified maps outside the scope (8 Centers, Cerulean Cave, + RivalsHouse, Museum) get bases too. +- `data/games/frlg/maps/overlays/.json`: `pokesim-map-overlay/1` + (`schemas/map-overlay.schema.json`): `{format, map, operations}`. A `tile` + operation takes `coords` (a list, so one fix such as a gate is one + operation) and `glyph`; `when` is `{flag, after_checkpoint}` (either or both) + and is required for `story_state` and only there; a `generator_gap` names + its `evidence.generator_fix`. An operation that changes nothing fails, so a + generator fix cannot leave a stale operation behind. +- `data/games/frlg/maps/runtime/.json`: unchanged path and format. It is + now derived: the base bytes for a map without an overlay, else base + + overlays at story state `complete` (every `when` passed), with + `source.overlay = {file, story_state}`. +- Manifest: each FRLG entry keeps `file`/`sha256` (the runtime file) and adds + `base: {file, sha256}` and, when present, `overlay: {file, sha256}`. + +`pokesim.maps.map_overlays` implements `effective_map(name, story_state)` +(`StoryState(checkpoint, flags)`, `NEW_GAME`, `COMPLETE`; an operation applies +once its flag is set or once the state's checkpoint is later than +`after_checkpoint`), `audit ` / `audit --all`, `effective `, +`check` and `write`. + +### What the verified maps' hand edits became + +Every difference between the 57 verified files and their regenerated bases: + +| Difference | Maps | Became | +|---|---:|---| +| Vermilion Gym's beams open, (4..6, 6..7) | 1 | Overlay: `tile`, `story_state`, when `FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES` / after 00.23 (was `OPENED_TILES`). | +| Water behind collision drawn as `#` (SSAnne_Exterior 602 tiles, VermilionCity 156) | 2 | Dropped, no overlay: consumers do not need it. Python routing blocks `w`; Arduino's walker blocks water by elevation and AutoStory's `story_route_costs()` forbids Surf. Both maps keep their elevation grids. | +| Warps and connections into maps the v1 pack lacked (59 warps, 7 connections) and their arrival points | 21 | Generator output (the 31 pending relinks and the one-way connections are gone). | +| Object provenance, pickup identities, starter interactions | 53 | Generator output (`source_event`, `source_script`, `source_local_id`, `item`, `quantity`, `interaction`). | +| Elevation grid left out where every walkable tile is ground | 5 | Generator output with `source.elevation_omitted` (CeruleanCity_Mart, PewterCity_Mart, ViridianCity_Mart, SSAnne_1F_Corridor, VermilionCity_Gym). | + +`src/pokesim/maps/testdata/frlg-v1-to-base-delta.json` records the generated +differences per map; the publication test undoes exactly those and still +reproduces the reviewed v1 digests, so nothing else changed. + +Generator fixes in this step: every manifest map gets a base; the omission of +an elevation grid is limited to lossless cases (never with water, never on a +map with nowhere to search from); a collision-free `MB_COUNTER` is floor; and +`OPENED_TILES` left the generator. 14 candidates gain their elevation grids. + +### Consumer (Arduino-Source) + +**Recommended interim:** keep reading `runtime/` (the pre-resolved effective +maps at story state `complete`) and switch to base + overlays in step 4. The +export layout, file names and count are unchanged (152 FRLG maps; the export +copies `runtime/` only), so adopting this revision needs only: + +1. `devtools/maps/map-resources.lock.json`: `games.frlg.revision` to the merge + commit on main and `manifest_sha256` to that manifest's hash (`consumer_sync + update --layout resources`). 71 FRLG files change bytes (all 57 verified, 14 + candidates); BDSP is untouched. +2. Re-run the FRLG overworld map and route tests: verified maps now link the + gates, houses and connections they used to leave open, so a route may use + a newly linked map when both are loaded. Links into unloaded maps stay dead + ends (`take_warp`/`cross_edge` return nothing). +3. `devtools/runtime-map-tests/prepare_parity.py` stays pinned to its v1 + fixture revision. If it is moved to this revision, expect 348 pairs + (2 x (152 FRLG + 22 BDSP), not 150), and skip the `enrich_map` variant for + FRLG: the item catalog's FRLG map-content pins describe the v1 maps (FRLG + identities are generator-owned now; the pins retire with step 2's catalog + republish, which also touches BDSP). +4. `Pokemon_MapData.cpp`'s glyph table still lacks `u d l r o H B`. None of + AutoStory's current maps contain them; add them before + RocketHideout_B2F/B3F, ViridianCity_Gym, PokemonMansion_3F or + VictoryRoad_1F-3F join its map list. + +**Step 4 (later):** read `base/` and `overlays/`, port `effective_map` to C++ +with shared test vectors from `test_map_overlays.py`, pass the checkpoint and +flags AutoStory knows, and extend the export (`consumer_sync`) with the two +directories. + ## Migration Each step is its own PR; the existing tests must show no behaviour change @@ -98,3 +179,9 @@ except where a step says otherwise. - 2026-11-09: design written after the FRLG single-map-set change (#81); step 1 started. +- 2026-11-09: step 1 (FRLG): one generator mode for all 152 bases (every + warp and connection linked, water kept as water with its elevation grid, + OPENED_TILES removed); Vermilion Gym's beams are the only overlay + (`story_state`); water-as-wall dropped; `map_overlays` with + `effective_map`, `audit`, `check`, `write`; overlay schema; runtime files + pre-resolved at story state `complete` as the consumer's interim. diff --git a/docs/maps/runtime-maps.md b/docs/maps/runtime-maps.md index 1f89fcd..0c7ee67 100644 --- a/docs/maps/runtime-maps.md +++ b/docs/maps/runtime-maps.md @@ -68,7 +68,10 @@ and navigation fields and preserves unknown extensions. Tiles: `#` blocked, `.` open, `~` encounter terrain (including cave floor), `w` water, `^v<>` directional ledges, `D` door/warp entrance, `S` sign, -space outside. **`8/2/4/6` close the north/south/west/east side of a tile**; +space outside; FRLG adds spin tiles `u d l r` (forced north/south/west/east) +and `o` (stop spinning), `H` hole (fall warp) and `B` Strength button. The +canonical table is `data/games/frlg/maps/tile-legend.json` (with +`runtime_symbols.SYMBOLS` and the runtime-map schema's tile pattern). **`8/2/4/6` close the north/south/west/east side of a tile**; they are not the forced-movement glyphs of the older `pokenav-map/1` schema. Some closed-side encounter tiles additionally appear in FRLG's `wild` region. Preserve elevation and region semantics when adapting these maps. @@ -113,10 +116,12 @@ Do not promote a `show`/`still` assumption or an unverified interior into a confirmed BDSP fact. Older fixtures' pending offsets remain unresolved; they have not been silently applied to the new coordinate frames. -FRLG also has scenario assumptions: Vermilion Gym's barriers are baked open -by `OPENED_TILES` after `FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES`. The manifest -labels this entry precondition. It is not an initial-state gym map. Story -flag sets and NPC hide flags must eventually be replayed by the game adapter. +FRLG also has scenario assumptions: Vermilion Gym's barriers are open in the +published runtime file, through the `story_state` overlay operation that +applies after `FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES` (checkpoint 00.23); its +base keeps them closed ([OVERLAYS.md](OVERLAYS.md)). The manifest labels this +entry precondition. Story flag sets and NPC hide flags must eventually be +replayed by the game adapter. ## Parser and builder modules @@ -127,7 +132,8 @@ planner or simulator, independent of AutoStory. |---|---| | `dppt_map_decomp_parser.py` | Parse Diamond/Platinum source headers, matrices, land data and events. These are BDSP baselines, not BDSP-native files. | | `bdsp_decomp_map_builder.py` | Build BDSP runtime maps from those parsed sources, crops, console corrections and story assumptions. | -| `frlg_decomp_map_builder.py` | Read pinned FireRed source maps/metatiles and build the FRLG runtime pack. | +| `frlg_decomp_map_builder.py` | Read pinned FireRed source maps/metatiles and build the FRLG base maps. | +| `map_overlays.py` | Apply authored overlay operations to a base (`effective_map(name, story_state)`), audit them and derive the FRLG runtime files. | | `runtime_map_schema.py` | Validate the shared runtime format's structural and coordinate invariants. | | `runtime_map_pack.py` | Audit, apply patches to copies, and export packs. | @@ -138,7 +144,8 @@ Run from the repository root; Python stdlib only: ```sh PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --all \ --scope data/games/frlg/maps/pokeguy-map-scope.json --item-identities \ - --out data/games/frlg/maps/runtime --manifest data/maps/runtime-manifest.json --check + --out data/games/frlg/maps/base --manifest data/maps/runtime-manifest.json --check +PYTHONPATH=src python3 -m pokesim.maps.map_overlays check PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set check PYTHONPATH=src python3 -m pokesim.maps.bdsp_decomp_map_builder --check PYTHONPATH=src python3 -m pokesim.maps.runtime_map_pack diff --git a/integrations/arduino-source/README.md b/integrations/arduino-source/README.md index ba43972..f67018a 100644 --- a/integrations/arduino-source/README.md +++ b/integrations/arduino-source/README.md @@ -161,6 +161,11 @@ separate integration change. ## Prepared resource packs +FRLG runtime files are base + overlays pre-resolved at story state `complete` +(the interim until the consumer applies overlays itself); see +[OVERLAYS.md](../../docs/maps/OVERLAYS.md#consumer-arduino-source) for what a +lock bump past that change needs. + Use `consumer_sync --layout resources` with the separate resource lock and `Packages/Resources/Pokemon/Maps/{frlg,bdsp}` destination. `prepare` materializes an existing approved lock; `update` selects new approved pins; `check` is read-only. diff --git a/schemas/map-overlay.schema.json b/schemas/map-overlay.schema.json new file mode 100644 index 0000000..1b81f36 --- /dev/null +++ b/schemas/map-overlay.schema.json @@ -0,0 +1,128 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/dayfine/PokemonSimulation/main/schemas/map-overlay.schema.json", + "title": "Authored operations over a generated base map (docs/maps/OVERLAYS.md)", + "type": "object", + "properties": { + "format": {"const": "pokesim-map-overlay/1"}, + "map": {"type": "string", "pattern": "^[A-Za-z0-9_]+$"}, + "operations": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/operation"}} + }, + "required": ["format", "map", "operations"], + "additionalProperties": false, + "$defs": { + "coord": { + "type": "array", + "prefixItems": [{"type": "integer", "minimum": 0}, {"type": "integer", "minimum": 0}], + "items": false, + "minItems": 2 + }, + "glyph": {"type": "string", "pattern": "^[#.~w^v<>DS 8246udlroHB]$"}, + "checkpoint": {"type": "string", "pattern": "^[0-9]+[a-z]*(\\.[0-9]+[a-z]*)*$"}, + "common": { + "properties": { + "op": {"enum": ["tile", "link", "object", "trigger", "point"]}, + "why": {"enum": ["console_measured", "remake_delta", "story_state", "generator_gap"]}, + "when": { + "type": "object", + "properties": { + "flag": {"type": "string", "pattern": "^FLAG_[A-Z0-9_]+$"}, + "after_checkpoint": {"$ref": "#/$defs/checkpoint"} + }, + "minProperties": 1, + "additionalProperties": false + }, + "evidence": {"type": "object", "minProperties": 1}, + "status": {"enum": ["candidate", "verified"]} + }, + "required": ["op", "why", "evidence", "status"], + "allOf": [ + { + "if": {"properties": {"why": {"const": "story_state"}}}, + "then": {"required": ["when"]}, + "else": {"not": {"required": ["when"]}} + }, + { + "if": {"properties": {"why": {"const": "generator_gap"}}}, + "then": {"properties": {"evidence": {"required": ["generator_fix"]}}} + } + ] + }, + "operation": { + "allOf": [{"$ref": "#/$defs/common"}], + "oneOf": [ + { + "properties": { + "op": {"const": "tile"}, + "coords": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/coord"}}, + "glyph": {"$ref": "#/$defs/glyph"} + }, + "required": ["coords", "glyph"] + }, + { + "properties": { + "op": {"const": "point"}, + "name": {"type": "string", "minLength": 1}, + "coord": {"$ref": "#/$defs/coord"}, + "remove": {"const": true} + }, + "required": ["name"], + "oneOf": [{"required": ["coord"]}, {"required": ["remove"]}] + }, + { + "properties": { + "op": {"const": "link"}, + "kind": {"const": "warp"}, + "index": {"type": "integer", "minimum": 0}, + "to_map": {"type": "string"}, + "to_point": {"type": "string"} + }, + "required": ["kind", "index"] + }, + { + "properties": { + "op": {"const": "link"}, + "kind": {"const": "connection"}, + "action": {"enum": ["add", "remove"]}, + "side": {"enum": ["north", "south", "west", "east"]}, + "to_map": {"type": "string"}, + "offset": {"type": "integer"} + }, + "required": ["kind", "action", "side", "to_map", "offset"] + }, + { + "properties": { + "op": {"const": "object"}, + "action": {"const": "add"}, + "object": { + "type": "object", + "properties": {"name": {"type": "string"}, "kind": {"type": "string"}, "coord": {"$ref": "#/$defs/coord"}}, + "required": ["name", "kind", "coord"] + } + }, + "required": ["action", "object"] + }, + { + "properties": { + "op": {"const": "object"}, + "action": {"const": "remove"}, + "name": {"type": "string"}, + "at": {"$ref": "#/$defs/coord"} + }, + "required": ["action", "name", "at"] + }, + { + "properties": { + "op": {"const": "object"}, + "action": {"const": "move"}, + "name": {"type": "string"}, + "at": {"$ref": "#/$defs/coord"}, + "to": {"$ref": "#/$defs/coord"} + }, + "required": ["action", "name", "at", "to"] + }, + {"properties": {"op": {"const": "trigger"}, "action": {"enum": ["add", "remove"]}}, "required": ["action"]} + ] + } + } +} diff --git a/src/pokesim/formats/json_schema.py b/src/pokesim/formats/json_schema.py index 3b247b8..63bfc7b 100644 --- a/src/pokesim/formats/json_schema.py +++ b/src/pokesim/formats/json_schema.py @@ -36,6 +36,10 @@ def published(): """Enumerate current runtime packs and the checked-in FRLG case document.""" for path in sorted(ROOT.glob('data/games/*/maps/runtime/*.json')): yield 'runtime-map-v2', path + for path in sorted(ROOT.glob('data/games/*/maps/base/*.json')): + yield 'runtime-map-v2', path + for path in sorted(ROOT.glob('data/games/*/maps/overlays/*.json')): + yield 'map-overlay', path yield 'frlg-battle-cases', ROOT / 'data/games/frlg/battles/cases.json' for path in sorted(ROOT.glob('data/story/native/*.json')): yield 'native-checkpoint-export', path diff --git a/src/pokesim/maps/frlg_decomp_map_builder.py b/src/pokesim/maps/frlg_decomp_map_builder.py index ee80140..5e9e184 100644 --- a/src/pokesim/maps/frlg_decomp_map_builder.py +++ b/src/pokesim/maps/frlg_decomp_map_builder.py @@ -21,8 +21,10 @@ /.json in the schema of Pokemon::MapData (Pokemon_MapData.h). A map whose header doesn't allow running (indoors) says so; a trainer has their sight and the ways they look. -Warps and connections lead only to maps in the same run: a warp to another map -has no destination, and a connection to one is left out. A warp arrives at +Warps and connections lead only to maps in the same run (with --all, the whole +catalog, scope-excluded maps included, so every source link is emitted by +name): a warp to a map outside the run has no destination, and a connection to +one is left out. A warp arrives at point "warp_" of its map, the tile of that map's warp n. Other named points and flag sets come from POINTS and FLAG_SETS below. @@ -36,6 +38,12 @@ they are allowed outside the scope and not compared; every candidate must be in scope and match the generator byte for byte. Export the generated pack with pokesim.maps.runtime_map_pack for Arduino consumers. + +Base maps (docs/maps/OVERLAYS.md): with --all, --scope and --manifest, every +manifest map gets a base, including verified maps outside the scope, and --check +compares every one byte for byte. Bases are never edited by hand; story state, +console measurements and remake deltas are overlay operations in +data/games/frlg/maps/overlays/.json (pokesim.maps.map_overlays). """ import argparse from collections import deque @@ -80,9 +88,12 @@ } # Ledges, by the way the player hops over them. LEDGES = {'MB_JUMP_' + direction.name: glyph for direction, glyph in LEDGE_GLYPHS.items()} +# MB_COUNTER only lets the player talk to someone across it +# (MetatileBehavior_IsCounter()); walking is decided by the collision bit, so a +# counter tile without collision (PewterCity_Museum_1F (11, 5)) is floor. FLOOR = ( 'MB_NORMAL', 'MB_CAVE', 'MB_ROCK_STAIRS', 'MB_TALL_GRASS', - 'MB_SAND', 'MB_SAND_CAVE', 'MB_MOUNTAIN_TOP', 'MB_ICE', + 'MB_SAND', 'MB_SAND_CAVE', 'MB_MOUNTAIN_TOP', 'MB_ICE', 'MB_COUNTER', ) # pret/pokefirered src/metatile_behavior.c, sBehaviorSurfable at COMMIT. # Preserve water in the full baseline; it remains blocked for walking. Surf, @@ -146,18 +157,6 @@ 'VermilionCity': {'new_game': ['FLAG_HIDE_VERMILION_CITY_OAKS_AIDE']}, } -# Tiles a script changes for good once the story is past it, written as -# the story finds them after: Vermilion Gym's beams across rows 6 and 7 -# go off once both switches are found -# (VermilionCity_Gym_EventScript_SetBeamsOff: (4..6, 6..7) floor, -# FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES). No route of the story's goes -# north of them before that, and one after can't end a leg on them as on -# a wall. -OPENED_TILES = { - 'VermilionCity_Gym': [(x, y) for y in (6, 7) for x in (4, 5, 6)], -} - - class Decomp: def __init__(self, commit, cache): self.commit = commit @@ -377,15 +376,11 @@ def elevation_omission_reason(tiles, elevation, warps=None, points=None): for tile, level in zip(row, levels) if tile not in UNWALKABLE): return 'all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles' - # 2. Ground land with flat water: water has no bridges or level changes - no_bridge_levels = not any(c in '456789abcdef' for r in elevation for c in r if c != '3') - land_and_water = all((level == GROUND if tile != 'w' else level in ('0', '1', '3')) - for row, levels in zip(tiles, elevation) - for tile, level in zip(row, levels) if tile not in UNWALKABLE) - if land_and_water and no_bridge_levels: - return 'all walkable land is ground level (3); water is flat without bridges' + # Water is never omitted: Arduino's FRLG walker reads a missing grid as ground + # everywhere, and water's own level (1) is what stops a walking player from + # stepping onto it (the elevation mismatch that starts Surf instead). - # 3. Reachable tiles: all reachable land is level 3, and any non-3 tiles are isolated/unreachable obstacles + # 2. Reachable tiles: all reachable land (and water) is level 3, and any non-3 tiles are isolated/unreachable obstacles if warps is not None and points is not None: h, w = len(tiles), len(tiles[0]) starts = set() @@ -407,10 +402,11 @@ def elevation_omission_reason(tiles, elevation, warps=None, points=None): visited.add((nx, ny)) queue.append((nx, ny)) - reachable_land_3 = all(elevation[y][x] == GROUND for (x, y) in visited if tiles[y][x] not in UNWALKABLE and tiles[y][x] != 'w') - reachable_water_flat = all(elevation[y][x] in ('0', '1', '3') for (x, y) in visited if tiles[y][x] == 'w') - no_reachable_bridges = not any(elevation[y][x] in '456789abcdef' for (x, y) in visited if elevation[y][x] != '3') - if reachable_land_3 and reachable_water_flat and no_reachable_bridges: + reachable_ground = all(elevation[y][x] == GROUND for (x, y) in visited if tiles[y][x] not in UNWALKABLE) + # A map entered only by its connections has no start to search from. + flat_water = all(level == GROUND for row, levels in zip(tiles, elevation) + for tile, level in zip(row, levels) if tile == 'w') + if visited and reachable_ground and flat_water: return 'all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles' return None @@ -472,8 +468,6 @@ def map_json(decomp, name, sources, layouts, names, loaded, unhandled, land_maps tiles, elevation, entries, wild_edges = grid( decomp, layouts[source['layout']], names, unhandled, signs, source['id'] in land_maps, unresolved ) - for x, y in ([] if candidate else OPENED_TILES.get(name, [])): - tiles[y] = tiles[y][:x] + '.' + tiles[y][x + 1:] warp_events = source.get('warp_events', []) points = {n: [x, y] for n, (x, y) in POINTS.get(name, {}).items()} for index in sorted(arrivals(sources, loaded)[name]): @@ -508,8 +502,6 @@ def map_json(decomp, name, sources, layouts, names, loaded, unhandled, land_maps obj['source_local_id'] = original['local_id'] if unresolved: data['unresolved_tiles'] = unresolved - if name in OPENED_TILES: - data['source']['unapplied_story_patch'] = 'OPENED_TILES: preserve decomp baseline until story state is bound' if include_item_identities: events_hash = hashlib.sha256(decomp.read(f'data/maps/{name}/map.json')).hexdigest() data['objects'], identity_source = enrich_objects(data['objects'], 'frlg', name, events_hash, source_revision=getattr(decomp, 'commit', COMMIT)) @@ -565,18 +557,18 @@ def main(): parser.add_argument('--check', action='store_true', help='check the files in --out instead of writing them') parser.add_argument('--all', dest='all_maps', action='store_true', help='generate the pinned full catalog into an empty candidate directory') parser.add_argument('--scope', help='with --all: explicit reviewed exclusion inventory; preserve boundary links') - parser.add_argument('--manifest', help='with --check: map statuses; verified maps are reviewed content, not compared') + parser.add_argument('--manifest', help='with --all and --scope: every manifest map gets a base, in scope or not') parser.add_argument('maps', nargs='*', help='default: the maps already in --out') args = parser.parse_args() decomp = Decomp(args.commit, args.cache) if args.scope and not args.all_maps: parser.error('--scope requires --all') - if args.manifest and not (args.check and args.scope): - parser.error('--manifest requires --check and --scope') - verified = set() + if args.manifest and not args.scope: + parser.error('--manifest requires --all and --scope') + listed = set() if args.manifest: status = statuses(json.loads(open(args.manifest).read())) - verified = {name for name, value in status.items() if value == 'verified'} + listed = set(status) if args.all_maps: if args.maps: parser.error('--all cannot be combined with explicit map names') @@ -592,6 +584,8 @@ def main(): parser.error('no maps given, and none in --out') excluded = read_scope(args.scope, args.maps, args.commit) if args.scope else {} + # A listed map outside the scope (a verified Center, Cerulean Cave) still gets its base. + excluded = {name: reason for name, reason in excluded.items() if name not in listed} names = behaviors(decomp) layouts = {l['id']: l for l in json.loads(decomp.read('data/layouts/layouts.json'))['layouts'] if 'id' in l} sources = {m: json.loads(decomp.read(f'data/maps/{m}/map.json')) for m in args.maps} @@ -600,7 +594,7 @@ def main(): land_maps = land_encounter_maps(decomp) maps = [] for name in args.maps: - if name in excluded or name in verified: + if name in excluded: continue data = map_json(decomp, name, sources, layouts, names, loaded, unhandled, land_maps, args.item_identities, candidate=args.all_maps) text = contract_json_text(compact_map(data)) if args.all_maps else json_text(data) @@ -612,7 +606,7 @@ def main(): if args.check: differ = [] if args.scope: - unexpected = {f[:-5] for f in os.listdir(args.out) if f.endswith('.json')} - {n for n, _ in maps} - verified + unexpected = {f[:-5] for f in os.listdir(args.out) if f.endswith('.json')} - {n for n, _ in maps} if unexpected: sys.exit('Out-of-scope map files: ' + ' '.join(sorted(unexpected))) for name, text in maps: @@ -620,14 +614,12 @@ def main(): if not os.path.exists(path) or open(path, newline='').read() != text: differ.append(name) if args.manifest: - candidates = {name for name, value in status.items() if value == 'candidate'} - if candidates != {n for n, _ in maps}: - sys.exit('Candidate statuses differ from the generated scope: ' - + ' '.join(sorted(candidates ^ {n for n, _ in maps}))) + if listed != {n for n, _ in maps}: + sys.exit('Manifest maps differ from the generated bases: ' + + ' '.join(sorted(listed ^ {n for n, _ in maps}))) if differ: sys.exit(f'Differ from the generator: {" ".join(differ)}. Regenerate them without --check.') - skipped = f' ({len(verified)} verified maps not compared)' if verified else '' - print(f'{len(maps)} maps in {args.out} match the generator{skipped}.') + print(f'{len(maps)} maps in {args.out} match the generator.') return os.makedirs(args.out, exist_ok=True) for name, text in maps: diff --git a/src/pokesim/maps/frlg_import_audit.py b/src/pokesim/maps/frlg_import_audit.py index a5e8a8e..ef5959b 100644 --- a/src/pokesim/maps/frlg_import_audit.py +++ b/src/pokesim/maps/frlg_import_audit.py @@ -73,8 +73,7 @@ def audit(candidate, schema=False, scope=None, manifest=None): 'unlinked_warps': sum('to_map' not in w for w in data.get('warps', [])), 'dynamic_warps': sum(w.get('unresolved') == 'dynamic_destination' for w in data.get('warps', [])), 'unresolved_pickups': sum('item' not in o for o in data.get('items', [])), - 'identified_pickups': sum('item' in o for o in data.get('items', [])), - 'unapplied_story_patches': int('unapplied_story_patch' in data['source'])} + 'identified_pickups': sum('item' in o for o in data.get('items', []))} totals.update(counts) if any(v for k, v in counts.items() if k != 'identified_pickups'): gaps.append(dict(map=name, **counts)) diff --git a/src/pokesim/maps/frlg_map_set.py b/src/pokesim/maps/frlg_map_set.py index f39b8df..5466463 100644 --- a/src/pokesim/maps/frlg_map_set.py +++ b/src/pokesim/maps/frlg_map_set.py @@ -3,12 +3,16 @@ Every FRLG map lives in data/games/frlg/maps/runtime/ and has one manifest entry in data/maps/runtime-manifest.json with a ``status``: -- ``candidate``: generated from pret/pokefirered, unreviewed. The generator - owns its bytes (``frlg_decomp_map_builder --check`` reproduces them). +- ``candidate``: generated from pret/pokefirered, unreviewed. - ``verified``: reviewed content. ``verified`` records the basis: either an ``approved-runtime-pack`` (approved before per-map console records), or a ``console-run`` with the run, date and checkpoint that walked it. +Either way the bytes are derived: ``maps/base/.json`` is the generator's +(``frlg_decomp_map_builder --check``), ``maps/overlays/.json`` holds the +authored operations, and the runtime file is base + overlays +(``map_overlays check``). Each entry references its base and overlay with hashes. + Promotion edits only the manifest, so map bytes and hashes stay unchanged. From the repository root: @@ -27,6 +31,7 @@ from pathlib import Path import re +from .map_overlays import pack_refs from .runtime_map_coordinates import legacy_map from .runtime_map_schema import validate @@ -98,9 +103,10 @@ def link_gaps(maps, status, excluded): """Classify every named link that does not resolve inside the set. ``boundary``: the destination is scope-excluded and not in the set (a dead - end, never a successful transition). ``pending_relink``: a candidate links - into a verified map that does not (yet) define the return point or - connection, because reviewed maps were built without that neighbor. + end, never a successful transition; a scripted Center or elevator keeps its + name). ``pending_relink``: a candidate links into a verified map that does + not define the return point. Since verified maps are generated bases too, + there are none; the category stays to report a regression. Anything else is an error. Returns (boundary, pending_relink, errors). """ boundary, pending, errors = [], [], [] @@ -116,7 +122,7 @@ def link_gaps(maps, status, excluded): return boundary, pending, errors -def candidate_entry(name, raw): +def candidate_entry(name, raw, root=ROOT): data = legacy_map(json.loads(raw)) validate(data) return dict(name=name, file=f'{DIRECTORY}/{name}.json', sha256=hashlib.sha256(raw).hexdigest(), @@ -125,7 +131,7 @@ def candidate_entry(name, raw): coordinate_frame={'kind': 'local tiles', 'origin': [0, 0], 'width': len(data['tiles'][0]), 'height': len(data['tiles']), 'origin_space': 'map layout'}, terrain_corrections=[], generation_overrides={'opened_tiles': []}, preconditions=[], - status='candidate') + status='candidate', **pack_refs(name, 'frlg', root)) def sync_candidates(manifest, root=ROOT): @@ -144,7 +150,7 @@ def sync_candidates(manifest, root=ROOT): entry = entries.get(name) if entry is not None and entry.get('status') != 'candidate': continue - fresh = candidate_entry(name, raw) + fresh = candidate_entry(name, raw, root) if entry != fresh: changed.append(name) if entry is None: diff --git a/src/pokesim/maps/goldens/frlg-fan-club.json b/src/pokesim/maps/goldens/frlg-fan-club.json index 92820b7..6dcf5f6 100644 --- a/src/pokesim/maps/goldens/frlg-fan-club.json +++ b/src/pokesim/maps/goldens/frlg-fan-club.json @@ -2,7 +2,7 @@ "format": "pokesim-route-golden/1", "game": "frlg", "map": "VermilionCity_PokemonFanClub", - "map_sha256": "146f77582ebcc7a950c42d72d70d53b02b51af5bf6fc5ad54468cdc16d806c1c", + "map_sha256": "01d5650bcff496a61c2f26710ec339ff4802afac16d7b66732b46933e9667bc4", "coordinate_frame": { "kind": "local tiles", "origin": [ diff --git a/src/pokesim/maps/goldens/frlg-pallet-town.json b/src/pokesim/maps/goldens/frlg-pallet-town.json index c584d80..d1e7659 100644 --- a/src/pokesim/maps/goldens/frlg-pallet-town.json +++ b/src/pokesim/maps/goldens/frlg-pallet-town.json @@ -2,7 +2,7 @@ "format": "pokesim-route-golden/1", "game": "frlg", "map": "PalletTown", - "map_sha256": "0dc7446f568097b36a9479954f01afe546cb64c82bb0efa91da0cb66ad950f9f", + "map_sha256": "92ebe424c07773ba087b8fc8d2b8251876dd3b97b9aea47a1fee8d36abd6ab0c", "coordinate_frame": { "kind": "local tiles", "origin": [ diff --git a/src/pokesim/maps/map_overlays.py b/src/pokesim/maps/map_overlays.py new file mode 100644 index 0000000..8f7786d --- /dev/null +++ b/src/pokesim/maps/map_overlays.py @@ -0,0 +1,411 @@ +r"""Map overlays: a generated base plus authored operations (docs/maps/OVERLAYS.md). + +Each FRLG map has three published files: + +- ``maps/base/.json``: the generator's output, never edited by hand + (``frlg_decomp_map_builder --check`` reproduces it byte for byte). +- ``maps/overlays/.json`` (optional): the ordered operations authored on + top of the base, each with why, when, evidence and status + (``schemas/map-overlay.schema.json``). +- ``maps/runtime/.json``: the effective map at ``RUNTIME_STORY_STATE``, + pre-resolved for consumers that do not apply overlays yet. It is derived, + never edited: ``check`` fails if it differs from base + overlays. + +From the repository root: + + PYTHONPATH=src python3 -m pokesim.maps.map_overlays audit VermilionCity_Gym + PYTHONPATH=src python3 -m pokesim.maps.map_overlays audit --all + PYTHONPATH=src python3 -m pokesim.maps.map_overlays effective VermilionCity_Gym --checkpoint 00.23 + PYTHONPATH=src python3 -m pokesim.maps.map_overlays check + PYTHONPATH=src python3 -m pokesim.maps.map_overlays write + +``write`` regenerates every runtime file from base + overlays and refreshes the +FRLG manifest entries (runtime hash and source, base and overlay references); +statuses are kept. +""" + +import argparse +import copy +from dataclasses import dataclass, field +import hashlib +import json +from pathlib import Path +import re +import sys + +from pokesim.formats.contract_format import json_text as contract_json_text +from .runtime_map_coordinates import compact_map, legacy_map +from .runtime_map_schema import validate +from .runtime_symbols import SYMBOLS + + +ROOT = Path(__file__).resolve().parents[3] +MANIFEST = ROOT / 'data/maps/runtime-manifest.json' +FORMAT = 'pokesim-map-overlay/1' +GAMES = ('frlg',) +OPS = ('tile', 'link', 'object', 'trigger', 'point') +WHYS = ('console_measured', 'remake_delta', 'story_state', 'generator_gap') +STATUSES = ('candidate', 'verified') +# The story state the published runtime files are resolved at: every +# operation applies, as for a player past every `when`. This matches what +# the runtime files held before overlays (Vermilion Gym's beams open). +RUNTIME_STORY_STATE = 'complete' +CHECKPOINT = re.compile(r'(\d+)([a-z]*)\Z') + + +def directory(game, kind): + return f'data/games/{game}/maps/{kind}' + + +def path_of(game, kind, name, root=ROOT): + return Path(root) / directory(game, kind) / (name + '.json') + + +@dataclass(frozen=True) +class StoryState: + """Where the story is: the checkpoint about to run (or running) and the + flags known set. ``complete`` is past every `when`.""" + checkpoint: str = None + flags: frozenset = field(default_factory=frozenset) + complete: bool = False + + +COMPLETE = StoryState(complete=True) +NEW_GAME = StoryState() + + +def checkpoint_key(checkpoint): + """Order checkpoint ids such as '00.12', '00.12b', '01.03'.""" + parts = [] + for part in checkpoint.split('.'): + match = CHECKPOINT.fullmatch(part) + if not match: + raise ValueError('invalid checkpoint id: ' + repr(checkpoint)) + parts.append((int(match.group(1)), match.group(2))) + return tuple(parts) + + +def applies(operation, state): + """Whether an operation is in effect at this story state. One without + `when` always is; one with `when` is once its flag is set or once the + story is past its checkpoint (the state's checkpoint is later).""" + when = operation.get('when') + if when is None or state.complete: + return True + if 'flag' in when and when['flag'] in state.flags: + return True + return ('after_checkpoint' in when and state.checkpoint is not None + and checkpoint_key(state.checkpoint) > checkpoint_key(when['after_checkpoint'])) + + +def check_overlay(overlay, name=None): + """Raise ValueError unless the overlay is structurally valid (the schema + plus the cross-field rules it cannot say).""" + if not isinstance(overlay, dict) or set(overlay) != {'format', 'map', 'operations'}: + raise ValueError('overlay needs exactly format, map and operations') + if overlay['format'] != FORMAT: + raise ValueError('unsupported overlay format: ' + repr(overlay['format'])) + if name is not None and overlay['map'] != name: + raise ValueError(f'overlay for {overlay["map"]} is in the file of {name}') + if not isinstance(overlay['operations'], list) or not overlay['operations']: + raise ValueError(overlay['map'] + ': an overlay file has at least one operation') + for index, op in enumerate(overlay['operations']): + where = f'{overlay["map"]} operation {index}' + if op.get('op') not in OPS: + raise ValueError(where + ': op must be one of ' + ', '.join(OPS)) + if op.get('why') not in WHYS: + raise ValueError(where + ': why must be one of ' + ', '.join(WHYS)) + if op.get('status') not in STATUSES: + raise ValueError(where + ': status must be one of ' + ', '.join(STATUSES)) + if not isinstance(op.get('evidence'), dict) or not op['evidence']: + raise ValueError(where + ': evidence is required') + when = op.get('when') + if (op['why'] == 'story_state') != (when is not None): + raise ValueError(where + ': `when` is required for story_state and only for it') + if when is not None: + if not isinstance(when, dict) or not when or set(when) - {'flag', 'after_checkpoint'}: + raise ValueError(where + ': when needs flag and/or after_checkpoint') + if 'after_checkpoint' in when: + checkpoint_key(when['after_checkpoint']) + if op['op'] == 'tile' and op.get('glyph') not in SYMBOLS: + raise ValueError(where + ': unknown tile glyph ' + repr(op.get('glyph'))) + if op['why'] == 'generator_gap' and not op['evidence'].get('generator_fix'): + raise ValueError(where + ': a generator_gap names the generator fix that removes it') + return overlay + + +def _coord(value, where): + if (not isinstance(value, list) or len(value) != 2 + or not all(type(v) is int and v >= 0 for v in value)): + raise ValueError(where + ': coordinate must be [x, y]') + return value + + +def _apply(data, op, where): + """Apply one operation to a legacy-form map in place; describe its effect. + An operation that changes nothing is an error: it is stale.""" + kind = op['op'] + effects = [] + if kind == 'tile': + rows = [list(row) for row in data['tiles']] + for coord in op['coords']: + x, y = _coord(coord, where) + if y >= len(rows) or x >= len(rows[0]): + raise ValueError(f'{where}: tile ({x}, {y}) is off the map') + if rows[y][x] == op['glyph']: + raise ValueError(f'{where}: tile ({x}, {y}) is already {op["glyph"]!r}') + effects.append(f'tile ({x}, {y}) {rows[y][x]!r} -> {op["glyph"]!r}') + rows[y][x] = op['glyph'] + data['tiles'] = [''.join(row) for row in rows] + elif kind == 'point': + points = data.setdefault('points', {}) + old = points.get(op['name']) + if op.get('remove'): + if old is None: + raise ValueError(f'{where}: no point {op["name"]} to remove') + del points[op['name']] + effects.append(f'point {op["name"]} {old} removed') + else: + new = _coord(op['coord'], where) + if old == new: + raise ValueError(f'{where}: point {op["name"]} is already {new}') + points[op['name']] = list(new) + effects.append(f'point {op["name"]} {old} -> {new}') + elif kind == 'link' and op['kind'] == 'warp': + warps = data.get('warps', []) + if not 0 <= op['index'] < len(warps): + raise ValueError(f'{where}: no warp {op["index"]}') + warp = warps[op['index']] + old = (warp.get('to_map'), warp.get('to_point')) + new = (op.get('to_map'), op.get('to_point')) + if old == new: + raise ValueError(f'{where}: warp {op["index"]} already leads to {new}') + for key, value in zip(('to_map', 'to_point'), new): + if value is None: + warp.pop(key, None) + else: + warp[key] = value + effects.append(f'warp {op["index"]} {old} -> {new}') + elif kind == 'link' and op['kind'] == 'connection': + connections = data.setdefault('connections', []) + record = {'side': op['side'], 'to_map': op['to_map'], 'offset': op['offset']} + if op['action'] == 'add': + if record in connections: + raise ValueError(f'{where}: connection {record} already exists') + connections.append(record) + else: + if record not in connections: + raise ValueError(f'{where}: no connection {record} to remove') + connections.remove(record) + effects.append(f'connection {op["action"]} {record}') + elif kind == 'object': + objects = data.setdefault('objects', []) + if op['action'] == 'add': + record = copy.deepcopy(op['object']) + x, y = _coord(record.pop('coord'), where) + record['x'], record['y'] = x, y + objects.append(record) + effects.append(f'object {record["name"]} added at ({x}, {y})') + else: + x, y = _coord(op['at'], where) + found = [o for o in objects if o.get('name') == op['name'] and (o['x'], o['y']) == (x, y)] + if len(found) != 1: + raise ValueError(f'{where}: expected one {op["name"]} at ({x}, {y}), found {len(found)}') + if op['action'] == 'remove': + objects.remove(found[0]) + effects.append(f'object {op["name"]} at ({x}, {y}) removed') + else: + to = _coord(op['to'], where) + found[0]['x'], found[0]['y'] = to + effects.append(f'object {op["name"]} ({x}, {y}) -> ({to[0]}, {to[1]})') + else: + raise ValueError(f'{where}: {kind} operations are not supported by this map format yet') + return effects + + +def resolve(base, overlay, state=COMPLETE): + """The effective map: a copy of `base` (wire or legacy form) with the + overlay operations that apply at `state`, in order. Returns (map in + legacy form, [(operation, effects)] of the applied operations).""" + data = legacy_map(base) + applied = [] + if overlay is not None: + check_overlay(overlay, data['name']) + for index, op in enumerate(overlay['operations']): + if applies(op, state): + applied.append((op, _apply(data, op, f'{data["name"]} operation {index}'))) + validate(data) + return data, applied + + +def read_json(path): + return json.loads(Path(path).read_text(encoding='utf-8')) + + +def read_overlay(name, game='frlg', root=ROOT): + path = path_of(game, 'overlays', name, root) + return check_overlay(read_json(path), name) if path.exists() else None + + +def effective_map(name, story_state=COMPLETE, game='frlg', root=ROOT): + """Base + the overlay operations that apply at `story_state` (legacy form).""" + return resolve(read_json(path_of(game, 'base', name, root)), read_overlay(name, game, root), story_state)[0] + + +def runtime_bytes(name, game='frlg', root=ROOT): + """The published runtime file: the base's bytes when the map has no + overlay, else the effective map at RUNTIME_STORY_STATE, stamped with it.""" + base_path = path_of(game, 'base', name, root) + overlay = read_overlay(name, game, root) + if overlay is None: + return base_path.read_bytes() + data, _ = resolve(read_json(base_path), overlay, COMPLETE) + data['source']['overlay'] = {'file': directory(game, 'overlays') + f'/{name}.json', + 'story_state': RUNTIME_STORY_STATE} + return contract_json_text(compact_map(data)).encode('utf-8') + + +def names(game='frlg', root=ROOT): + return sorted(p.stem for p in (Path(root) / directory(game, 'base')).glob('*.json')) + + +def overlay_names(game='frlg', root=ROOT): + return sorted(p.stem for p in (Path(root) / directory(game, 'overlays')).glob('*.json')) + + +def sha256(raw): + return hashlib.sha256(raw).hexdigest() + + +def file_ref(game, kind, name, root=ROOT): + path = path_of(game, kind, name, root) + return {'file': f'{directory(game, kind)}/{name}.json', 'sha256': sha256(path.read_bytes())} + + +def pack_refs(name, game='frlg', root=ROOT): + """The manifest's base and (if any) overlay references for a map.""" + refs = {'base': file_ref(game, 'base', name, root)} + if path_of(game, 'overlays', name, root).exists(): + refs['overlay'] = file_ref(game, 'overlays', name, root) + return refs + + +def audit(name, game='frlg', root=ROOT): + """Every difference of the map from its base, grouped by why. Returns text.""" + overlay = read_overlay(name, game, root) + lines = [f'{name}: base {directory(game, "base")}/{name}.json'] + if overlay is None: + lines.append(' no overlay: the effective map is the base at every story state') + return '\n'.join(lines) + _, applied = resolve(read_json(path_of(game, 'base', name, root)), overlay, COMPLETE) + for why in WHYS: + group = [(op, effects) for op, effects in applied if op['why'] == why] + if not group: + continue + lines.append(f' {why}: {len(group)} operation(s)') + for op, effects in group: + when = op.get('when') + when_text = ' when ' + ', '.join(f'{k}={v}' for k, v in when.items()) if when else '' + lines.append(f' {op["op"]} [{op["status"]}]{when_text}') + lines.extend(' ' + effect for effect in effects) + lines.append(' evidence: ' + json.dumps(op['evidence'], sort_keys=True)) + return '\n'.join(lines) + + +def check(game='frlg', root=ROOT, manifest_path=MANIFEST): + """Raise ValueError unless every overlay applies cleanly, every runtime + file is base + overlays at RUNTIME_STORY_STATE and the manifest records + the runtime, base and overlay hashes.""" + errors = [] + base = set(names(game, root)) + runtime = {p.stem for p in (Path(root) / directory(game, 'runtime')).glob('*.json')} + if base != runtime: + errors.append('base and runtime inventories differ: ' + ' '.join(sorted(base ^ runtime))) + stray = set(overlay_names(game, root)) - base + if stray: + errors.append('overlays without a base map: ' + ' '.join(sorted(stray))) + entries = {e['name']: e for e in json.loads(Path(manifest_path).read_text())['games'][game]['maps']} + for name in sorted(base & runtime): + try: + expected = runtime_bytes(name, game, root) + except ValueError as error: + errors.append(str(error)) + continue + if path_of(game, 'runtime', name, root).read_bytes() != expected: + errors.append(name + ': runtime file is not base + overlays; run map_overlays write') + entry = entries.get(name) + if entry is None: + errors.append(name + ': no manifest entry') + continue + if entry.get('sha256') != sha256(expected): + errors.append(name + ': manifest runtime sha256 is stale') + refs = pack_refs(name, game, root) + for key in ('base', 'overlay'): + if entry.get(key) != refs.get(key): + errors.append(f'{name}: manifest {key} reference is stale') + if errors: + raise ValueError('\n'.join(errors)) + return len(base) + + +def write(game='frlg', root=ROOT, manifest_path=MANIFEST): + """Write every runtime file from base + overlays and refresh the manifest + entries' runtime hash/source and base/overlay references.""" + manifest = json.loads(Path(manifest_path).read_text()) + entries = {e['name']: e for e in manifest['games'][game]['maps']} + for name in names(game, root): + raw = runtime_bytes(name, game, root) + path_of(game, 'runtime', name, root).write_bytes(raw) + entry = entries.get(name) + if entry is None: + continue # frlg_map_set sync-candidates adds new maps + entry['sha256'] = sha256(raw) + entry['source'] = legacy_map(json.loads(raw))['source'] + entry.pop('base', None) + entry.pop('overlay', None) + entry.update(pack_refs(name, game, root)) + Path(manifest_path).write_text(json.dumps(manifest, indent=2) + '\n') + + +def _state(args): + if args.complete: + return COMPLETE + return StoryState(checkpoint=args.checkpoint, flags=frozenset(args.flag or ())) + + +def main(argv=None): + parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument('--game', default='frlg', choices=GAMES) + sub = parser.add_subparsers(dest='command', required=True) + up = sub.add_parser('audit', help='list a map\'s differences from its base, grouped by why') + up.add_argument('map', nargs='?') + up.add_argument('--all', action='store_true', help='every map with an overlay') + up = sub.add_parser('effective', help='print the effective map at a story state') + up.add_argument('map') + up.add_argument('--checkpoint', help='the checkpoint about to run, e.g. 00.24') + up.add_argument('--flag', action='append', help='a flag known set (repeatable)') + up.add_argument('--complete', action='store_true', help='past every `when` (the runtime files)') + sub.add_parser('check', help='check overlays, runtime files and manifest references') + sub.add_parser('write', help='write runtime files and manifest references from base + overlays') + args = parser.parse_args(argv) + try: + if args.command == 'audit': + if args.all == bool(args.map): + parser.error('give a map or --all') + for name in (overlay_names(args.game) if args.all else [args.map]): + print(audit(name, args.game)) + elif args.command == 'effective': + data = effective_map(args.map, _state(args), args.game) + sys.stdout.write(contract_json_text(compact_map(data))) + elif args.command == 'check': + count = check(args.game) + print(f'{count} {args.game} runtime maps are base + overlays at story state {RUNTIME_STORY_STATE}; ' + f'{len(overlay_names(args.game))} overlay file(s)') + else: + write(args.game) + except (ValueError, FileNotFoundError) as error: + parser.exit(1, str(error) + '\n') + + +if __name__ == '__main__': + main() diff --git a/src/pokesim/maps/test_frlg_decomp_map_builder.py b/src/pokesim/maps/test_frlg_decomp_map_builder.py index f688641..b014f91 100644 --- a/src/pokesim/maps/test_frlg_decomp_map_builder.py +++ b/src/pokesim/maps/test_frlg_decomp_map_builder.py @@ -197,7 +197,7 @@ def read(self, path): self.assertEqual(legacy[0], ['..']) self.assertEqual(unresolved, {'MB_CRACKED_ICE': [[0, 0]]}) - def test_candidate_keeps_closed_source_gym_barriers(self): + def test_base_keeps_closed_source_gym_barriers_in_every_mode(self): from unittest.mock import patch sources = {'VermilionCity_Gym': {'id': 'GYM', 'layout': 'L'}} class Source: @@ -209,9 +209,10 @@ def grid(*args): {'L': {}}, {}, {'GYM': 'VermilionCity_Gym'}, {}, candidate=True) legacy = frlg_maps.map_json(Source(), 'VermilionCity_Gym', sources, {'L': {}}, {}, {'GYM': 'VermilionCity_Gym'}, {}) + # The opened beams are a story_state overlay operation, not generator output. self.assertEqual(candidate['tiles'][6][4], '#') - self.assertEqual(legacy['tiles'][6][4], '.') - self.assertIn('unapplied_story_patch', candidate['source']) + self.assertEqual(legacy['tiles'][6][4], '#') + self.assertNotIn('unapplied_story_patch', candidate['source']) class CandidateWaterTest(unittest.TestCase): @@ -248,9 +249,14 @@ def test_elevation_omission_reason(self): # 1. Pure ground self.assertIn('all walkable tiles are ground level', frlg_maps.elevation_omission_reason(['..#'], ['331'])) - # 2. Ground land with flat water - self.assertIn('water is flat without bridges', - frlg_maps.elevation_omission_reason(['.w.'], ['313'])) + # 2. Water keeps its grid: a missing grid reads as ground, and water's own + # level is what stops a walking player (Arduino's FRLG walker). + self.assertIsNone(frlg_maps.elevation_omission_reason(['.w.'], ['313'])) + self.assertIsNone(frlg_maps.elevation_omission_reason(['.w.'], ['313'], [{'coord': [0, 0]}], {})) + # A map entered only by its connections has nothing to search from. + self.assertIsNone(frlg_maps.elevation_omission_reason(['.#.'], ['330'], [], {})) + self.assertIn('all reachable land is ground level', + frlg_maps.elevation_omission_reason(['.#.'], ['330'], [{'coord': [0, 0]}], {})) # 3. Multi-level bridge cannot be omitted self.assertIsNone(frlg_maps.elevation_omission_reason(['.w.'], ['3f3'])) self.assertIsNone(frlg_maps.elevation_omission_reason(['...'], ['343'])) diff --git a/src/pokesim/maps/test_frlg_import_audit.py b/src/pokesim/maps/test_frlg_import_audit.py index 3cd7276..1440461 100644 --- a/src/pokesim/maps/test_frlg_import_audit.py +++ b/src/pokesim/maps/test_frlg_import_audit.py @@ -26,13 +26,13 @@ def test_checked_candidates_have_fixed_links_and_visible_gaps(self): self.assertEqual(report['totals']['unlinked_warps'], 0) self.assertEqual(report['totals']['scope_boundary_warps'], 59) self.assertEqual(report['totals']['scope_boundary_connections'], 2) - # Candidate warps into reviewed maps built without that neighbor. - self.assertEqual(report['totals']['pending_relink_warps'], 31) + # Verified maps are generated bases too, so every return point exists. + self.assertEqual(report['totals']['pending_relink_warps'], 0) self.assertEqual(report['totals']['unknown_tiles'], 0) self.assertEqual(report['totals']['unresolved_pickups'], 79) - self.assertEqual(report['totals']['unapplied_story_patches'], 0) - self.assertEqual(report['elevation_grids_retained'], 11) - self.assertEqual(report['elevation_grids_omitted'], 84) + # Maps with water keep their grid: water's level is what stops walking onto it. + self.assertEqual(report['elevation_grids_retained'], 25) + self.assertEqual(report['elevation_grids_omitted'], 70) self.assertFalse(report['schema_checked']) def test_verified_maps_outside_scope_need_their_status(self): diff --git a/src/pokesim/maps/test_frlg_map_set.py b/src/pokesim/maps/test_frlg_map_set.py index aecb544..6a46218 100644 --- a/src/pokesim/maps/test_frlg_map_set.py +++ b/src/pokesim/maps/test_frlg_map_set.py @@ -83,8 +83,15 @@ def test_link_rules_allow_only_boundaries_and_pending_relinks(self): status = map_set.statuses(self.manifest) excluded = map_set.read_excluded(maps) boundary, pending, errors = map_set.link_gaps(maps, status, excluded) - self.assertEqual((len(boundary), len(pending), errors), (61, 31, [])) - self.assertIn(('ViridianCity_Gym', 'ViridianCity', 'warp_2'), pending) + # Every source warp and connection is linked by name (OVERLAYS.md step 1): the + # 31 pending relinks are gone, and links into scope-excluded maps (scripted + # Centers and elevators included) keep their target as boundaries. + self.assertEqual((len(boundary), len(pending), errors), (102, 0, [])) + self.assertIn(('ViridianCity', 'ViridianCity_Gym', 'warp_1'), + [(n, w['to_map'], w['to_point']) for n, d in maps.items() for w in d['warps'] if 'to_map' in w]) + self.assertIn(('ViridianCity', 'ViridianCity_PokemonCenter_1F', 'warp_1'), + [(n, w['to_map'], w['to_point']) for n, d in maps.items() for w in d['warps'] if 'to_map' in w]) + self.assertIn(('CeladonCity', 'CeladonCity_PokemonCenter_1F', 'warp_1'), boundary) # A verified map may not depend on a missing point, even in a candidate. broken = copy.deepcopy(maps) broken['ViridianCity']['warps'][0].update(to_map='Route11', to_point='warp_99') diff --git a/src/pokesim/maps/test_item_identity.py b/src/pokesim/maps/test_item_identity.py index f591116..c0e5fd3 100644 --- a/src/pokesim/maps/test_item_identity.py +++ b/src/pokesim/maps/test_item_identity.py @@ -27,7 +27,14 @@ def test_catalog_pin_digest_and_all_existing_item_ball_records(self): continue data = load(ROOT / entry['file']) original = copy.deepcopy(data) - enriched = identity.enrich_map(data, game) + if game == 'frlg': + # Generated base + overlays (docs/maps/OVERLAYS.md): the generator derives + # identities from the catalog by source event, and its --check pins them. + # The catalog's FRLG map-content pins describe the v1 reviewed maps; they + # retire with the next catalog republish (OVERLAYS.md migration step 2). + enriched = copy.deepcopy(data) + else: + enriched = identity.enrich_map(data, game) self.assertEqual(data, original) self.assertEqual(enriched['tiles'], data['tiles']) validate(enriched) @@ -82,11 +89,11 @@ def test_published_bdsp_items_are_enriched_and_rechecking_rejects_drift(self): identity.enrich_map(changed, 'bdsp') def test_forest_pickups_and_starter_balls_are_distinct(self): - forest = identity.enrich_map(load(ROOT / 'data/games/frlg/maps/runtime/ViridianForest.json'), 'frlg') + forest = load(ROOT / 'data/games/frlg/maps/runtime/ViridianForest.json') items = compact_map(forest)['items'] self.assertEqual([r['item'] for r in items], ['poke_ball', 'antidote', 'potion', 'potion']) self.assertEqual(len({r['source_event'] for r in items}), 4) - lab = identity.enrich_map(load(ROOT / 'data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json'), 'frlg') + lab = load(ROOT / 'data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json') compact = compact_map(lab) self.assertNotIn('items', compact) self.assertEqual([o['interaction']['species'] for o in compact['interactables']], diff --git a/src/pokesim/maps/test_map_overlays.py b/src/pokesim/maps/test_map_overlays.py new file mode 100644 index 0000000..46e13b6 --- /dev/null +++ b/src/pokesim/maps/test_map_overlays.py @@ -0,0 +1,213 @@ +"""Overlays over generated base maps: resolution, story-state gating, audit and the published pack.""" + +import copy +import json +import unittest + +try: + import jsonschema +except ImportError: + jsonschema = None + +from . import map_overlays as overlays +from .map_overlays import COMPLETE, NEW_GAME, StoryState + + +SOURCE = {'decomp_file': 'x', 'revision': 'x', 'date': 'x'} + + +def base_map(**extra): + data = {'format': 'pokesim-runtime-map/2', 'name': 'Test', 'source': dict(SOURCE), + 'tiles': ['...', '.#.', '...'], + 'points': {'warp_0': [0, 0]}, + 'npcs': [{'name': 'man', 'coord': [2, 2]}], + 'warps': [{'coord': [0, 0], 'enter': 'walk_into'}], + 'connections': [{'side': 'north', 'to_map': 'Other', 'offset': 0}]} + data.update(extra) + return data + + +def op(op_name, why='console_measured', status='candidate', **fields): + result = {'op': op_name, 'why': why, 'evidence': {'run': 'test'}, 'status': status} + result.update(fields) + return result + + +def overlay(*operations): + return {'format': overlays.FORMAT, 'map': 'Test', 'operations': list(operations)} + + +GATE = op('tile', why='story_state', coords=[[1, 1]], glyph='.', + when={'flag': 'FLAG_GATE_OPEN', 'after_checkpoint': '00.23'}) + + +class ResolveTest(unittest.TestCase): + def test_no_overlay_is_the_base(self): + data, applied = overlays.resolve(base_map(), None) + self.assertEqual(data['tiles'], base_map()['tiles']) + self.assertEqual(applied, []) + + def test_resolution_copies_and_keeps_the_base(self): + base = base_map() + before = copy.deepcopy(base) + data, applied = overlays.resolve(base, overlay(GATE)) + self.assertEqual(base, before) + self.assertEqual(data['tiles'][1], '...') + self.assertEqual(applied[0][1], ["tile (1, 1) '#' -> '.'"]) + + def test_story_state_applies_after_its_flag_or_checkpoint(self): + cases = [(NEW_GAME, '#'), (COMPLETE, '.'), + (StoryState(checkpoint='00.22'), '#'), (StoryState(checkpoint='00.23'), '#'), + (StoryState(checkpoint='00.23b'), '.'), (StoryState(checkpoint='00.24'), '.'), + (StoryState(checkpoint='01.00'), '.'), + (StoryState(checkpoint='00.05', flags=frozenset({'FLAG_GATE_OPEN'})), '.'), + (StoryState(flags=frozenset({'FLAG_OTHER'})), '#')] + for state, glyph in cases: + with self.subTest(state=state): + self.assertEqual(overlays.resolve(base_map(), overlay(GATE), state)[0]['tiles'][1][1], glyph) + + def test_operations_without_when_always_apply(self): + wall = op('tile', coords=[[0, 2]], glyph='#') + self.assertEqual(overlays.resolve(base_map(), overlay(wall), NEW_GAME)[0]['tiles'][2], '#..') + + def test_operations_apply_in_order(self): + first = op('tile', coords=[[0, 2]], glyph='#') + second = op('tile', coords=[[0, 2]], glyph='w') + self.assertEqual(overlays.resolve(base_map(), overlay(first, second))[0]['tiles'][2], 'w..') + + def test_points_links_and_objects(self): + data, applied = overlays.resolve(base_map(), overlay( + op('point', name='sign', coord=[2, 0]), + op('point', name='warp_0', remove=True), + op('link', kind='warp', index=0, to_map='Other', to_point='warp_3'), + op('link', kind='connection', action='remove', side='north', to_map='Other', offset=0), + op('link', kind='connection', action='add', side='south', to_map='Else', offset=2), + op('object', action='move', name='man', at=[2, 2], to=[2, 1]), + op('object', action='add', object={'name': 'girl', 'kind': 'npc', 'coord': [0, 2]}), + op('object', action='remove', name='girl', at=[0, 2]))) + self.assertEqual(data['points'], {'sign': [2, 0]}) + self.assertEqual((data['warps'][0]['to_map'], data['warps'][0]['to_point']), ('Other', 'warp_3')) + self.assertEqual(data['connections'], [{'side': 'south', 'to_map': 'Else', 'offset': 2}]) + self.assertEqual([(o['name'], o['x'], o['y']) for o in data['objects']], [('man', 2, 1)]) + self.assertEqual(len(applied), 8) + + def test_stale_or_impossible_operations_fail(self): + for bad in (op('tile', coords=[[0, 0]], glyph='.'), # changes nothing + op('tile', coords=[[3, 0]], glyph='#'), # off the map + op('point', name='warp_0', coord=[0, 0]), + op('point', name='nowhere', remove=True), + op('link', kind='warp', index=4, to_map='Other', to_point='warp_0'), + op('link', kind='connection', action='add', side='north', to_map='Other', offset=0), + op('object', action='remove', name='man', at=[0, 0]), + op('trigger', action='add')): + with self.subTest(op=bad), self.assertRaises(ValueError): + overlays.resolve(base_map(), overlay(bad)) + + def test_invalid_overlays_fail(self): + for change in (lambda o: o.update(format='other'), + lambda o: o.update(map='Elsewhere'), + lambda o: o.update(operations=[]), + lambda o: o['operations'][0].update(why='because'), + lambda o: o['operations'][0].update(status='approved'), + lambda o: o['operations'][0].pop('evidence'), + lambda o: o['operations'][0].pop('when'), + lambda o: o['operations'][0].update(why='console_measured'), + lambda o: o['operations'][0].update(when={'after_checkpoint': 'soon'}), + lambda o: o['operations'][0].update(why='generator_gap', when=None)): + data = overlay(copy.deepcopy(GATE)) + change(data) + if data['operations'] and data['operations'][0].get('when', 0) is None: + del data['operations'][0]['when'] + with self.subTest(data=data), self.assertRaises(ValueError): + overlays.resolve(base_map(), data) + + def test_generator_gap_names_its_fix(self): + gap = op('tile', why='generator_gap', coords=[[0, 2]], glyph='#') + with self.assertRaisesRegex(ValueError, 'generator fix'): + overlays.resolve(base_map(), overlay(gap)) + gap['evidence']['generator_fix'] = 'emit water behind collision as w' + self.assertEqual(overlays.resolve(base_map(), overlay(gap))[0]['tiles'][2], '#..') + + def test_checkpoint_order(self): + keys = [overlays.checkpoint_key(c) for c in ('00.05', '00.12', '00.12b', '00.13', '01.00')] + self.assertEqual(keys, sorted(keys)) + with self.assertRaises(ValueError): + overlays.checkpoint_key('00.x5') + + +class PublishedPackTest(unittest.TestCase): + def test_runtime_files_are_base_plus_overlays(self): + self.assertEqual(overlays.check(), 152) + + def test_vermilion_gym_beams_open_after_the_switches(self): + beams = [(x, y) for y in (6, 7) for x in (4, 5, 6)] + closed = overlays.effective_map('VermilionCity_Gym', NEW_GAME) + during = overlays.effective_map('VermilionCity_Gym', StoryState(checkpoint='00.23')) + after = overlays.effective_map('VermilionCity_Gym', StoryState(checkpoint='00.24')) + flagged = overlays.effective_map('VermilionCity_Gym', + StoryState(flags=frozenset({'FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES'}))) + runtime = json.loads(overlays.path_of('frlg', 'runtime', 'VermilionCity_Gym').read_text()) + for x, y in beams: + self.assertEqual(closed['tiles'][y][x], '#') + self.assertEqual(during['tiles'][y][x], '#') + self.assertEqual(after['tiles'][y][x], '.') + self.assertEqual(flagged['tiles'][y][x], '.') + self.assertEqual(runtime['tiles'][y][x], '.') + self.assertEqual(runtime['source']['overlay'], { + 'file': 'data/games/frlg/maps/overlays/VermilionCity_Gym.json', 'story_state': 'complete'}) + + def test_maps_without_overlays_publish_base_bytes(self): + for name in ('VermilionCity', 'SSAnne_Exterior', 'Route1'): + with self.subTest(map=name): + self.assertFalse(overlays.path_of('frlg', 'overlays', name).exists()) + self.assertEqual(overlays.path_of('frlg', 'runtime', name).read_bytes(), + overlays.path_of('frlg', 'base', name).read_bytes()) + + def test_water_is_water_not_wall(self): + # The v1 pack drew water behind collision as walls; the base keeps it water. + for name in ('VermilionCity', 'SSAnne_Exterior'): + data = overlays.effective_map(name) + self.assertTrue(any('w' in row for row in data['tiles'])) + self.assertIn('elevation', data) + + def test_audit_groups_by_why(self): + text = overlays.audit('VermilionCity_Gym') + self.assertIn('story_state: 1 operation(s)', text) + self.assertIn('when flag=FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, after_checkpoint=00.23', text) + self.assertEqual(text.count("'#' -> '.'"), 6) + self.assertIn('no overlay', overlays.audit('Route1')) + + def test_manifest_lists_base_and_overlay_hashes(self): + manifest = json.loads(overlays.MANIFEST.read_text()) + entries = {e['name']: e for e in manifest['games']['frlg']['maps']} + self.assertEqual(entries['VermilionCity_Gym']['overlay']['file'], + 'data/games/frlg/maps/overlays/VermilionCity_Gym.json') + self.assertEqual(sum('overlay' in e for e in entries.values()), len(overlays.overlay_names())) + self.assertTrue(all(e['base']['file'] == f'data/games/frlg/maps/base/{n}.json' for n, e in entries.items())) + + +@unittest.skipUnless(jsonschema, 'install schemas/requirements.txt for schema tests') +class OverlaySchemaTest(unittest.TestCase): + def test_schema_matches_the_reader(self): + from pokesim.formats.json_schema import validator + check = validator('map-overlay') + good = overlay(GATE, op('point', name='sign', coord=[2, 0]), + op('link', kind='connection', action='add', side='south', to_map='Else', offset=2), + op('object', action='move', name='man', at=[2, 2], to=[2, 1])) + self.assertEqual(list(check.iter_errors(good)), []) + for change in (lambda o: o['operations'][0].pop('when'), + lambda o: o['operations'][1].update(when={'flag': 'FLAG_X'}), + lambda o: o['operations'][0].update(why='because'), + lambda o: o['operations'][0].update(glyph='?'), + lambda o: o['operations'][1].update(why='generator_gap'), + lambda o: o.update(extra=1)): + data = copy.deepcopy(good) + change(data) + with self.subTest(data=data): + self.assertTrue(list(check.iter_errors(data))) + with self.assertRaises(ValueError): + overlays.check_overlay(data) + + +if __name__ == '__main__': + unittest.main() diff --git a/src/pokesim/maps/test_runtime_map_pack.py b/src/pokesim/maps/test_runtime_map_pack.py index d94651d..da6d530 100644 --- a/src/pokesim/maps/test_runtime_map_pack.py +++ b/src/pokesim/maps/test_runtime_map_pack.py @@ -8,7 +8,7 @@ import tempfile import unittest -from pokesim.maps import bdsp_decomp_map_builder as bdsp, frlg_decomp_map_builder as frlg, runtime_map_pack as pack +from pokesim.maps import bdsp_decomp_map_builder as bdsp, map_overlays as overlays, runtime_map_pack as pack class PackTest(unittest.TestCase): @@ -30,8 +30,10 @@ def test_inventory_checksums_geometry_and_graph(self): self.assertEqual(entry['generation_overrides']['coord_events'], json.loads(json.dumps(bdsp.COORD_EVENTS.get(entry['name'], {})))) else: - self.assertEqual(entry['generation_overrides']['opened_tiles'], - [list(p) for p in frlg.OPENED_TILES.get(entry['name'], [])]) + # Authored changes are overlay operations now (map_overlays), not generator tables. + self.assertEqual(entry['generation_overrides']['opened_tiles'], []) + self.assertEqual({k: entry[k] for k in ('base', 'overlay') if k in entry}, + overlays.pack_refs(entry['name'])) def test_corrections_apply_to_copy_and_keep_evidence_and_extensions(self): raw = pack.load(pack.ROOT / 'data/games/bdsp/maps/runtime/Route202.json') @@ -57,6 +59,8 @@ def test_invalid_geometry_and_warp_entry_rejected(self): def test_unresolved_warps_are_retained_not_walls(self): raw = pack.load(pack.ROOT / 'data/games/frlg/maps/runtime/VermilionCity.json') + # The generator links every FRLG source warp by name, so make one unresolved. + del raw['warps'][0]['to_map'], raw['warps'][0]['to_point'] unresolved = [warp for warp in raw['warps'] if 'to_map' not in warp] self.assertTrue(unresolved) self.assertTrue(all(warp in pack.effective_map(raw)['warps'] for warp in unresolved)) diff --git a/src/pokesim/maps/test_runtime_map_publication.py b/src/pokesim/maps/test_runtime_map_publication.py index e9af6e6..bdcc647 100644 --- a/src/pokesim/maps/test_runtime_map_publication.py +++ b/src/pokesim/maps/test_runtime_map_publication.py @@ -55,6 +55,40 @@ def undo_added_links(game, data): data['connections'] = [c for c in data['connections'] if c['to_map'] not in connections] +# What each approved FRLG map gained when it became generated base + overlays +# (docs/maps/OVERLAYS.md step 1): every source warp and connection linked, their +# arrival points, object provenance and pickup identities, elevation grids left +# out where every walkable tile is ground, and water drawn as water. Nothing +# else may differ from the reviewed pack, so undoing exactly this must +# reproduce the v1 digests. +FRLG_BASE_DELTA = ROOT / 'src/pokesim/maps/testdata/frlg-v1-to-base-delta.json' +DELTA_KEYS = {'points_added', 'warps_linked', 'connections_added', 'object_fields_added', + 'source_fields_added', 'elevation_omitted', 'water_was_wall'} + + +def undo_base_delta(game, data, deltas): + delta = deltas.get(data['name'], {}) if game == 'frlg' else {} + assert set(delta) <= DELTA_KEYS, set(delta) - DELTA_KEYS + for name in delta.get('points_added', []): + del data['points'][name] + for index in delta.get('warps_linked', []): + del data['warps'][index]['to_map'], data['warps'][index]['to_point'] + if 'connections_added' in delta: + data['connections'] = [c for c in data['connections'] if c not in delta['connections_added']] + for obj in data.get('objects', []): + for field in delta.get('object_fields_added', []): + obj.pop(field, None) + for field in delta.get('source_fields_added', []): + del data['source'][field] + if 'elevation_omitted' in delta: + assert 'elevation' not in data and 'elevation_omitted' in delta['source_fields_added'] + data['elevation'] = delta['elevation_omitted'] + for y, row in delta.get('water_was_wall', {}).items(): + now = data['tiles'][int(y)] + assert all(a == b or (a, b) == ('#', 'w') for a, b in zip(row, now)), y + data['tiles'][int(y)] = row + + def current_world(game, names, context): return RuntimeWorld([LocalMap(json.loads((ROOT / 'data/games' / game / 'maps/runtime' / (name + '.json')).read_text()), game, @@ -67,6 +101,7 @@ def test_all_published_values_match_reviewed_v1_baseline_and_stable_formatter(se manifest = audit() self.assertEqual(manifest['runtime_format'], COMPACT) baseline = json.loads(BASELINE.read_text()) + deltas = json.loads(FRLG_BASE_DELTA.read_text())['maps'] self.assertEqual(set(baseline['games']), set(manifest['games'])) count = 0 for game, pack in manifest['games'].items(): @@ -90,11 +125,13 @@ def test_all_published_values_match_reviewed_v1_baseline_and_stable_formatter(se continue for field in ('item', 'quantity', 'source_event', 'hide_flag'): item.pop(field, None) + undo_base_delta(game, baseline_data, deltas) undo_corrections(game, baseline_data) undo_added_links(game, baseline_data) digest = hashlib.sha256(json.dumps(compact_map(baseline_data), sort_keys=True).encode()).hexdigest() self.assertEqual(digest, baseline['games'][game][entry['name']]) - self.assertEqual(raw, map_text(data)) + if game != 'frlg': # FRLG runtime files are base + overlays in the contract format. + self.assertEqual(raw, map_text(data)) count += 1 self.assertEqual(count, 79) diff --git a/src/pokesim/maps/testdata/frlg-v1-to-base-delta.json b/src/pokesim/maps/testdata/frlg-v1-to-base-delta.json new file mode 100644 index 0000000..365b638 --- /dev/null +++ b/src/pokesim/maps/testdata/frlg-v1-to-base-delta.json @@ -0,0 +1,398 @@ +{ + "format": "pokesim-frlg-v1-delta/1", + "note": "What each approved FRLG map gained between the reviewed v1 pack and the generated base + overlays (docs/maps/OVERLAYS.md step 1). The publication test undoes exactly this and must reproduce the v1 value digests.", + "maps": { + "CeruleanCave_1F": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["item_identities"] + }, + "CeruleanCave_2F": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "CeruleanCave_B1F": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["item_identities"] + }, + "CeruleanCity": { + "points_added": ["warp_0", "warp_2", "warp_8", "warp_12", "warp_13"], + "warps_linked": [0, 2, 8, 12, 13], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "CeruleanCity_BikeShop": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "CeruleanCity_Gym": {"object_fields_added": ["source_event", "source_script"]}, + "CeruleanCity_House2": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "CeruleanCity_Mart": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"], + "elevation_omitted": [ + "00000000000", + "00000000000", + "00303333330", + "33003333333", + "00003330030", + "33333330030", + "30033330030", + "33333333333", + "00000000000" + ] + }, + "CeruleanCity_PokemonCenter_1F": { + "points_added": ["warp_3"], + "warps_linked": [3], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "LavenderTown": { + "points_added": ["warp_0", "warp_2", "warp_3", "warp_4", "warp_5"], + "warps_linked": [0, 2, 3, 4, 5], + "connections_added": [ + {"side": "south", "to_map": "Route12", "offset": 0}, + {"side": "west", "to_map": "Route8", "offset": 0} + ], + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "LavenderTown_PokemonCenter_1F": { + "points_added": ["warp_3"], + "warps_linked": [3], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "MtMoon_1F": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "MtMoon_B1F": {"source_fields_added": ["elevation_omitted"]}, + "MtMoon_B2F": { + "object_fields_added": ["item", "quantity", "source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "PalletTown": { + "connections_added": [{"side": "south", "to_map": "Route21_North", "offset": 0}], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "PalletTown_PlayersHouse_1F": { + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "PalletTown_ProfessorOaksLab": { + "object_fields_added": ["interaction", "source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "PalletTown_RivalsHouse": { + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "PewterCity": { + "points_added": ["warp_4", "warp_6"], + "warps_linked": [4, 6], + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "PewterCity_Gym": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "PewterCity_Mart": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"], + "elevation_omitted": [ + "00000000000", + "00000000000", + "00303333330", + "33003333333", + "00003330030", + "33333330030", + "30033330030", + "33333333333", + "00000000000" + ] + }, + "PewterCity_Museum_1F": { + "points_added": ["warp_5"], + "warps_linked": [5], + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "PewterCity_PokemonCenter_1F": { + "points_added": ["warp_3"], + "warps_linked": [3], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "RockTunnel_1F": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "RockTunnel_B1F": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "Route1": {"object_fields_added": ["source_event", "source_script"], "source_fields_added": ["elevation_omitted"]}, + "Route10": { + "points_added": ["warp_2", "warp_4"], + "warps_linked": [2, 4], + "object_fields_added": ["source_event", "source_script"] + }, + "Route10_PokemonCenter_1F": { + "points_added": ["warp_3"], + "warps_linked": [3], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "Route2": { + "points_added": ["warp_3", "warp_4", "warp_5", "warp_6"], + "warps_linked": [3, 4, 5, 6, 7, 8], + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "Route22": { + "points_added": ["warp_0"], + "warps_linked": [0, 1], + "connections_added": [{"side": "north", "to_map": "Route23", "offset": 0}], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "Route24": { + "object_fields_added": ["item", "quantity", "source_event", "source_local_id", "source_script"], + "source_fields_added": ["item_identities"] + }, + "Route25": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["item_identities"] + }, + "Route25_SeaCottage": { + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "Route2_ViridianForest_NorthEntrance": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "Route2_ViridianForest_SouthEntrance": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "Route3": {"object_fields_added": ["source_event", "source_script"], "source_fields_added": ["elevation_omitted"]}, + "Route4": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["item_identities"] + }, + "Route4_PokemonCenter_1F": { + "points_added": ["warp_3"], + "warps_linked": [3], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "Route5": { + "points_added": ["warp_1", "warp_2", "warp_3"], + "warps_linked": [1, 2, 3], + "connections_added": [{"side": "south", "to_map": "SaffronCity_Connection", "offset": 0}], + "source_fields_added": ["elevation_omitted"] + }, + "Route6": { + "points_added": ["warp_1"], + "warps_linked": [1, 2], + "connections_added": [{"side": "north", "to_map": "SaffronCity_Connection", "offset": 0}], + "object_fields_added": ["source_event", "source_script"] + }, + "Route9": { + "object_fields_added": ["item", "quantity", "source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + }, + "SSAnne_1F_Corridor": { + "points_added": ["warp_1", "warp_5", "warp_6", "warp_7", "warp_8", "warp_9", "warp_10", "warp_11", "warp_12"], + "warps_linked": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12], + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"], + "elevation_omitted": [ + "0000000000000000000000000000000", + "0000000000000000000000000000000", + "0000000000000000003330000000000", + "0000000000000000003330000000000", + "0000000000000000003330000000000", + "0000000000000000003330000000000", + "0000000000000000003330000000000", + "0000000000000000003330000000000", + "0003333333333333333333333333330", + "0003333333333333333333333333330", + "0333333333333333333333333333330", + "0333000000000000000000000033330", + "0333000000000000000000000033330", + "0333000000000000000000000033330", + "0333000000000000000000000033330", + "0333000000000000000000000033330", + "0333000000000000000000000033330", + "0333000000000000000000000000330", + "0333000000000000000000000000330", + "0000000000000000000000000000000", + "0000000000000000000000000000000" + ] + }, + "SSAnne_2F_Corridor": { + "points_added": ["warp_1", "warp_3", "warp_4", "warp_5", "warp_6", "warp_7", "warp_8"], + "warps_linked": [1, 3, 4, 5, 6, 7, 8], + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "SSAnne_CaptainsOffice": { + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "SSAnne_Exterior": { + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "water_was_wall": { + "0": "wwwwwwwwww##wwwwwwwwwwwwwwwwww#####wwwwwwwwww#########################", + "1": "wwwwwwwwww##wwwwwwwwwwwwwwwwww#####wwwwwwwwww#########################", + "2": "wwww##wwwwwwwwwwwwwwwwwwwwwwww#####wwwwwwwwww##........###.###########", + "3": "wwww##wwwwwwwwwwwwww####wwwwww#####wwwwwwwww###........###.###########", + "4": "##wwwwwwww##ww##ww######www##w#####w##wwww#####............###########", + "5": "##wwwww##w##########www#########.#######ww##wwwwwwwwwwwww..###########", + "6": "wwww##w####w##ww##wwwww####ww##...##ww####wwwwwwwwwwwwwww..###########", + "7": "wwww####w##wwwwwwwwwwwwwwwwwwww...wwwwww##wwwwwwwwwwwwwww..###########", + "8": "www##w##wwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..###########", + "9": "w####wwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..###########", + "10": "w##wwwwwwwwwwwwwwwwwwww##wwwwww#.#wwwwww##wwwwwwwwwwwwwww..###########", + "11": "ww##wwwwwwwwwwwwwwwww####ww#####.###ww######wwwwwwwwwwwww..###########", + "12": "ww##wwwwwwwwwwwwwwwww##ww#######.#######ww##wwwwwwwwwwwww..###########", + "13": "##wwwwwwwwwwwwwwwwww##www##www##.##w##wwwwww##wwwwwwwwwww..###########", + "14": "##wwwwwwwwwwwwwwww####wwwwwwww##.##wwwwwwwww##wwwwwwwwwww..###########", + "15": "w##wwwwwwwwwwwwwww##wwwwwwwwww######wwwwwwwww##wwwwwwwwww..###########", + "16": "w##wwwwwwwwwwwwww##wwwwwwwwwwwwwwwwwwwwwwwwww##ww##wwwwww..###########", + "17": "ww##wwwwwwwwww##w##wwwwwwwwwwwwwwwwwwwwwwwwwwww####wwwwww..###########", + "18": "ww##w##wwwww######wwwwwwwwwwwwwwwwwwwwwwwwwwwww##w##wwwww..###########", + "19": "www####w##ww##ww##wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##wwwww..###########", + "20": "www##w######wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", + "21": "wwwwww##ww##wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", + "22": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##wwww..###########", + "23": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww####ww..###########", + "24": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##ww..###########", + "25": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", + "26": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##www..###########", + "27": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##ww..###########", + "28": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww####..###########", + "29": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#################", + "30": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###############", + "31": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################" + } + }, + "UndergroundPath_NorthEntrance": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "UndergroundPath_NorthSouthTunnel": {"source_fields_added": ["elevation_omitted"]}, + "UndergroundPath_SouthEntrance": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted"] + }, + "VermilionCity": { + "points_added": ["warp_3", "warp_6", "warp_7", "warp_8"], + "warps_linked": [3, 6, 7, 8], + "connections_added": [{"side": "east", "to_map": "Route11", "offset": 10}], + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "water_was_wall": { + "2": "wwwwww####wwwwwwwwwww#...#######################", + "3": "wwww######www#####www#...#######################", + "4": "wwww##ww##############...#######################", + "5": "www##www##############...#######################", + "6": "www##www#D###SSD######...########S##############", + "7": "ww##wwww.................................#######", + "8": "ww##wwww.................................#######", + "9": "w##wwwww.................................#######", + "10": "w##wwwwwwwwwww...........................#######", + "11": "w##wwwwwwwwwww...........................#######", + "12": "w##wwwwwwwwwwwwwwwww.....................#######", + "13": "w##wwwwwwwwwwwwwwwww.....................#######", + "14": "w##wwwwwwww.....wwww.....................#######", + "15": "ww##wwww...#####..####.....####..........#######", + "16": "ww##wwww...#####..####.....####..........##.....", + "17": "www##www..S#D###..#D##.....SSD###############S##", + "18": "www##www..........................S.............", + "19": "ww##wwww........................................", + "20": "ww##wwww........................................", + "21": "ww##wwww.......................www.....wwwwwwwww", + "22": "ww##wwww...#######.........####www.....wwwwwwwww", + "23": "www##www...#######..wwww...####www64.64wwwwwwwww", + "24": "www##www##S########.wwww...#D##www.....ww#######", + "25": "www##www.....#D#....wwww.......wwww...www#######", + "26": "www##www............wwwwwwwwwwwwwww...www#######", + "27": "ww##wwww............wwwwwwwwwwwwwww...www#######", + "28": "ww##wwww............ww................www#######", + "29": "ww##wwwwwwwwwwwwwwwwww................www##wwwww", + "30": "ww##wwwwwwwwwwwwwwwwww................www##wwwww", + "31": "www##wwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwww##wwwww", + "32": "www##wwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwww##wwwww", + "33": "wwwww##wwwwwwwwwwwww##...####wwwwwwwwwww##wwwwww", + "34": "wwwww##wwwwwwwww######...########wwww##w##wwwwww", + "35": "wwwwww##wwwwww######ww###wwww####wwww##w##wwwwww", + "36": "wwwwww####wwww##wwwwww###wwwwwwww##wwwww##wwwwww", + "37": "wwwwwwww######wwwwwwww.#.wwwwwwww########wwwwwww", + "38": "wwwwwwwwww####wwwwwwww.#.wwwwwwwwww######wwwwwww" + } + }, + "VermilionCity_Gym": { + "object_fields_added": ["source_event", "source_script"], + "source_fields_added": ["elevation_omitted", "overlay"], + "elevation_omitted": [ + "00000000000", + "00000000000", + "03303330330", + "03333333330", + "03333333330", + "03333333330", + "00000000000", + "00000000000", + "33333333333", + "33333333333", + "30303030303", + "33333333333", + "30303030303", + "33333333333", + "30303030303", + "33333333333", + "33333333333", + "33303330333", + "33333333333", + "33333333333", + "00000000000" + ] + }, + "VermilionCity_PokemonCenter_1F": { + "points_added": ["warp_3"], + "warps_linked": [3], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "VermilionCity_PokemonFanClub": {"object_fields_added": ["source_event", "source_local_id", "source_script"]}, + "ViridianCity": { + "points_added": ["warp_1", "warp_2", "warp_3"], + "warps_linked": [1, 2, 3], + "object_fields_added": ["item", "quantity", "source_event", "source_local_id", "source_script"], + "source_fields_added": ["item_identities"] + }, + "ViridianCity_Mart": { + "object_fields_added": ["source_event", "source_local_id", "source_script"], + "source_fields_added": ["elevation_omitted"], + "elevation_omitted": [ + "00000000000", + "00000000000", + "00303333330", + "33003333333", + "00003330030", + "33333330030", + "30033330030", + "33333333333", + "00000000000" + ] + }, + "ViridianCity_PokemonCenter_1F": { + "points_added": ["warp_3"], + "warps_linked": [3], + "object_fields_added": ["source_event", "source_local_id", "source_script"] + }, + "ViridianForest": { + "object_fields_added": ["item", "quantity", "source_event", "source_script"], + "source_fields_added": ["elevation_omitted", "item_identities"] + } + } +} diff --git a/src/pokesim/story/test_checkpoint_replay.py b/src/pokesim/story/test_checkpoint_replay.py index a03f70d..c7d7aae 100644 --- a/src/pokesim/story/test_checkpoint_replay.py +++ b/src/pokesim/story/test_checkpoint_replay.py @@ -9,6 +9,7 @@ import tempfile import unittest +from pokesim.maps.pinned_runtime_map import read_pinned_map from pokesim.maps.runtime_map_pack import ROOT from .replay_binding import PROFILE, load_binding from .checkpoint_replay import run, summary @@ -197,10 +198,11 @@ def test_second_checkpoint_uses_same_loader_and_runner_without_parcel_names(self (root / 'capture.json').write_bytes(raw) profile['capture']['file'] = 'capture.json' profile['capture']['sha256'] = hashlib.sha256(raw).hexdigest() - for name in profile['maps']: + for name, digest in profile['maps'].items(): relative = Path('data/games/frlg/maps/runtime', name + '.json') (root / relative).parent.mkdir(parents=True, exist_ok=True) - (root / relative).write_bytes((ROOT / relative).read_bytes()) + # The pinned bytes (from local history once the published map moved on). + (root / relative).write_bytes(read_pinned_map(profile['map_revision'], 'frlg', name, digest)) path = root / 'binding.json' path.write_text(json.dumps(profile)) binding = load_binding(path, root)