From 7225e71e4b3d8728cb18a8c928d6ac7a837105ba Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 08:36:43 -0800 Subject: [PATCH 1/6] Navigation tests: match shared FileIO Windows compiler policy --- .github/workflows/runtime-map-reader.yml | 1 + devtools/runtime-map-tests/CMakeLists.txt | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/.github/workflows/runtime-map-reader.yml b/.github/workflows/runtime-map-reader.yml index df64d64bbf..8fd458d46b 100644 --- a/.github/workflows/runtime-map-reader.yml +++ b/.github/workflows/runtime-map-reader.yml @@ -5,6 +5,7 @@ on: jobs: native-schema: strategy: + fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} diff --git a/devtools/runtime-map-tests/CMakeLists.txt b/devtools/runtime-map-tests/CMakeLists.txt index 379c1e1694..7cfd49cc21 100644 --- a/devtools/runtime-map-tests/CMakeLists.txt +++ b/devtools/runtime-map-tests/CMakeLists.txt @@ -22,6 +22,10 @@ add_library(RuntimeMapDecoder STATIC ) target_include_directories(RuntimeMapDecoder PUBLIC "${ROOT}" "${ROOT}/SerialPrograms/Source") target_compile_features(RuntimeMapDecoder PUBLIC cxx_std_23) +# Match the application's existing policy for this unchanged platform-specific helper. +if(MSVC) + set_property(SOURCE "${ROOT}/Common/Cpp/Filesystem/FileIO.cpp" APPEND PROPERTY COMPILE_OPTIONS /wd4505) +endif() add_executable(RuntimeMapTests "${NAV}/Pokemon_RuntimeMap_Tests.cpp") target_compile_definitions(RuntimeMapTests PRIVATE PA_RUNTIME_MAP_STANDALONE) target_link_libraries(RuntimeMapTests PRIVATE RuntimeMapDecoder) From 94c8cdf3a374737499494b61490bac0574b2427e Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 09:29:44 -0800 Subject: [PATCH 2/6] Build FRLG map data from verified pinned Packages resources --- .../workflows/cpp-ci-serial-programs-base.yml | 15 + .gitignore | 3 + SerialPrograms/CMakeLists.txt | 4 +- .../Overworld/Maps/CeruleanCave_1F.json | 194 ----------- .../Overworld/Maps/CeruleanCave_2F.json | 180 ---------- .../Overworld/Maps/CeruleanCave_B1F.json | 159 --------- .../Overworld/Maps/CeruleanCity.json | 304 ----------------- .../Overworld/Maps/CeruleanCity_BikeShop.json | 75 ---- .../Overworld/Maps/CeruleanCity_Gym.json | 116 ------- .../Overworld/Maps/CeruleanCity_House2.json | 76 ----- .../Overworld/Maps/CeruleanCity_Mart.json | 86 ----- .../Maps/CeruleanCity_PokemonCenter_1F.json | 126 ------- .../PokemonFRLG/Overworld/Maps/MtMoon_1F.json | 229 ------------- .../Overworld/Maps/MtMoon_B1F.json | 121 ------- .../Overworld/Maps/MtMoon_B2F.json | 218 ------------ .../Overworld/Maps/PalletTown.json | 122 ------- .../Maps/PalletTown_PlayersHouse_1F.json | 65 ---- .../Maps/PalletTown_PlayersHouse_2F.json | 47 --- .../Maps/PalletTown_ProfessorOaksLab.json | 128 ------- .../Maps/PalletTown_RivalsHouse.json | 70 ---- .../Overworld/Maps/PewterCity.json | 172 ---------- .../Overworld/Maps/PewterCity_Gym.json | 80 ----- .../Overworld/Maps/PewterCity_Mart.json | 79 ----- .../Overworld/Maps/PewterCity_Museum_1F.json | 109 ------ .../Maps/PewterCity_PokemonCenter_1F.json | 111 ------ .../PokemonFRLG/Overworld/Maps/Route1.json | 91 ----- .../PokemonFRLG/Overworld/Maps/Route10.json | 321 ------------------ .../Maps/Route10_PokemonCenter_1F.json | 110 ------ .../PokemonFRLG/Overworld/Maps/Route2.json | 211 ------------ .../PokemonFRLG/Overworld/Maps/Route22.json | 90 ----- .../PokemonFRLG/Overworld/Maps/Route24.json | 183 ---------- .../PokemonFRLG/Overworld/Maps/Route25.json | 200 ----------- .../Overworld/Maps/Route25_SeaCottage.json | 66 ---- .../Route2_ViridianForest_NorthEntrance.json | 78 ----- .../Route2_ViridianForest_SouthEntrance.json | 78 ----- .../PokemonFRLG/Overworld/Maps/Route3.json | 142 -------- .../PokemonFRLG/Overworld/Maps/Route4.json | 148 -------- .../Maps/Route4_PokemonCenter_1F.json | 112 ------ .../PokemonFRLG/Overworld/Maps/Route5.json | 86 ----- .../PokemonFRLG/Overworld/Maps/Route6.json | 176 ---------- .../PokemonFRLG/Overworld/Maps/Route9.json | 175 ---------- .../Overworld/Maps/SSAnne_1F_Corridor.json | 148 -------- .../Overworld/Maps/SSAnne_2F_Corridor.json | 108 ------ .../Overworld/Maps/SSAnne_CaptainsOffice.json | 42 --- .../Overworld/Maps/SSAnne_Exterior.json | 129 ------- .../Maps/UndergroundPath_NorthEntrance.json | 64 ---- .../UndergroundPath_NorthSouthTunnel.json | 96 ------ .../Maps/UndergroundPath_SouthEntrance.json | 64 ---- .../Overworld/Maps/VermilionCity.json | 246 -------------- .../Overworld/Maps/VermilionCity_Gym.json | 137 -------- .../Maps/VermilionCity_PokemonCenter_1F.json | 125 ------- .../Maps/VermilionCity_PokemonFanClub.json | 103 ------ .../Overworld/Maps/ViridianCity.json | 216 ------------ .../Overworld/Maps/ViridianCity_Mart.json | 92 ----- .../Maps/ViridianCity_PokemonCenter_1F.json | 99 ------ .../Overworld/Maps/ViridianForest.json | 224 ------------ .../Overworld/PokemonFRLG_OverworldMaps.h | 4 +- .../cmake/PokesimMapResources.cmake | 15 + devtools/maps/RESOURCE_MAPS.md | 44 +++ devtools/maps/map-resources.lock.json | 11 + 60 files changed, 93 insertions(+), 7030 deletions(-) delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_2F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_B1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_BikeShop.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Gym.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_House2.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Mart.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_PokemonCenter_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B2F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_2F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_ProfessorOaksLab.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_RivalsHouse.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Gym.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Mart.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Museum_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_PokemonCenter_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route1.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10_PokemonCenter_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route22.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route24.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25_SeaCottage.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_NorthEntrance.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_SouthEntrance.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route3.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4_PokemonCenter_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route5.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route6.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route9.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_1F_Corridor.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_2F_Corridor.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_CaptainsOffice.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_Exterior.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthEntrance.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthSouthTunnel.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_SouthEntrance.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_Gym.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonCenter_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonFanClub.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_Mart.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_PokemonCenter_1F.json delete mode 100644 SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianForest.json create mode 100644 SerialPrograms/cmake/PokesimMapResources.cmake create mode 100644 devtools/maps/RESOURCE_MAPS.md create mode 100644 devtools/maps/map-resources.lock.json diff --git a/.github/workflows/cpp-ci-serial-programs-base.yml b/.github/workflows/cpp-ci-serial-programs-base.yml index 58f1a9d890..c4b41e4aaf 100644 --- a/.github/workflows/cpp-ci-serial-programs-base.yml +++ b/.github/workflows/cpp-ci-serial-programs-base.yml @@ -88,6 +88,19 @@ jobs: ref: 'master' path: 'Arduino-Source/Packages' + - name: Install Python for pinned map preparation + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Prepare approved FRLG map resources + id: map-resources + uses: dayfine/PokemonSimulation/integrations/arduino-source/verify-map-packs@0efe131008c4bcdceb4d036a7022171cbcb2375a + with: + layout: resources + operation: prepare + consumer-directory: Arduino-Source + - name: Install Qt uses: jurplel/install-qt-action@v4 with: @@ -204,6 +217,8 @@ jobs: # every file missed, compiling took 10-40% longer than before on Linux and macOS, and # about twice as long on Windows. CCACHE_DEPEND: 1 + POKESIM_TOOLS_SOURCE: ${{ steps.map-resources.outputs.tools-source }} + POKESIM_SOURCE_CACHE: ${{ steps.map-resources.outputs.source-cache }} run: | cd Arduino-Source/SerialPrograms mkdir bin diff --git a/.gitignore b/.gitignore index ef6f409ae9..a6b04ddffd 100644 --- a/.gitignore +++ b/.gitignore @@ -81,3 +81,6 @@ Packages/* # Local agent/linter environments. .venv-code-health/ __pycache__/ + +# External PokemonSimulation tools/data cache; prepared maps live in ignored Packages. +.pokesim-map-source/ diff --git a/SerialPrograms/CMakeLists.txt b/SerialPrograms/CMakeLists.txt index 9b3302b834..bdf2e03615 100644 --- a/SerialPrograms/CMakeLists.txt +++ b/SerialPrograms/CMakeLists.txt @@ -197,7 +197,9 @@ add_library(SerialProgramsLib STATIC ${CORE_LIBRARY_SOURCES} ${LIBRARY_SOURCES}) include(cmake/EmbedTextFiles.cmake) pa_embed_text_files(SerialProgramsLib Source/Pokemon/Navigation/TestMaps Pokemon/Navigation/Pokemon_Navigation_Tests.h PokemonAutomation::Pokemon navigation_test_map_json) -pa_embed_text_files(SerialProgramsLib Source/VideoGames/PokemonFRLG/Overworld/Maps +include(cmake/PokesimMapResources.cmake) +pa_frlg_map_resources(FRLG_MAP_RESOURCES) +pa_embed_text_files(SerialProgramsLib "${FRLG_MAP_RESOURCES}" VideoGames/PokemonFRLG/Overworld/PokemonFRLG_OverworldMaps.h PokemonAutomation::NintendoSwitch::PokemonFRLG overworld_map_json) pa_embed_text_files(SerialProgramsLib Source/VideoGames/PokemonFRLG/Programs/AutoStory/BattleData VideoGames/PokemonFRLG/Programs/AutoStory/PokemonFRLG_AutoStoryBattleData.h PokemonAutomation::NintendoSwitch::PokemonFRLG autostory_battle_json) diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_1F.json deleted file mode 100644 index e1539f229f..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_1F.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "name": "CeruleanCave_1F", - "source": { - "decomp_file": "data/maps/CeruleanCave_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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": [ - { - "x": 33, - "y": 21, - "enter": "walk_south", - "to_map": "CeruleanCity", - "to_point": "warp_7" - }, - { - "x": 34, - "y": 2, - "enter": "step_on", - "to_map": "CeruleanCave_2F", - "to_point": "warp_0" - }, - { - "x": 1, - "y": 7, - "enter": "step_on", - "to_map": "CeruleanCave_B1F", - "to_point": "warp_0" - }, - { - "x": 10, - "y": 2, - "enter": "step_on", - "to_map": "CeruleanCave_2F", - "to_point": "warp_1" - }, - { - "x": 5, - "y": 15, - "enter": "step_on", - "to_map": "CeruleanCave_2F", - "to_point": "warp_2" - }, - { - "x": 30, - "y": 10, - "enter": "step_on", - "to_map": "CeruleanCave_2F", - "to_point": "warp_3" - }, - { - "x": 24, - "y": 11, - "enter": "step_on", - "to_map": "CeruleanCave_2F", - "to_point": "warp_4" - }, - { - "x": 2, - "y": 4, - "enter": "step_on", - "to_map": "CeruleanCave_2F", - "to_point": "warp_5" - } - ], - "objects": [ - { - "name": "item_ball", - "kind": "item", - "x": 7, - "y": 3, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_NUGGET" - }, - { - "name": "item_ball", - "kind": "item", - "x": 11, - "y": 16, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_FULL_RESTORE" - }, - { - "name": "item_ball", - "kind": "item", - "x": 25, - "y": 5, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_1F_MAX_ELIXIR" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 7, - "y": 21, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 13, - "y": 21, - "hide_flag": "FLAG_TEMP_13" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 5, - "y": 20, - "hide_flag": "FLAG_TEMP_14" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 14, - "y": 20, - "hide_flag": "FLAG_TEMP_15" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 11, - "y": 21, - "hide_flag": "FLAG_TEMP_16" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 9, - "y": 18, - "hide_flag": "FLAG_TEMP_17" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_2F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_2F.json deleted file mode 100644 index fa72ccc628..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_2F.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "name": "CeruleanCave_2F", - "source": { - "decomp_file": "data/maps/CeruleanCave_2F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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": [ - { - "x": 33, - "y": 4, - "enter": "step_on", - "to_map": "CeruleanCave_1F", - "to_point": "warp_1" - }, - { - "x": 13, - "y": 4, - "enter": "step_on", - "to_map": "CeruleanCave_1F", - "to_point": "warp_3" - }, - { - "x": 7, - "y": 14, - "enter": "step_on", - "to_map": "CeruleanCave_1F", - "to_point": "warp_4" - }, - { - "x": 26, - "y": 9, - "enter": "step_on", - "to_map": "CeruleanCave_1F", - "to_point": "warp_5" - }, - { - "x": 23, - "y": 10, - "enter": "step_on", - "to_map": "CeruleanCave_1F", - "to_point": "warp_6" - }, - { - "x": 5, - "y": 6, - "enter": "step_on", - "to_map": "CeruleanCave_1F", - "to_point": "warp_7" - } - ], - "objects": [ - { - "name": "item_ball", - "kind": "item", - "x": 9, - "y": 18, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_PP_UP" - }, - { - "name": "item_ball", - "kind": "item", - "x": 29, - "y": 16, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_ULTRA_BALL" - }, - { - "name": "item_ball", - "kind": "item", - "x": 33, - "y": 12, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_2F_FULL_RESTORE" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 33, - "y": 10, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 33, - "y": 9, - "hide_flag": "FLAG_TEMP_13" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 25, - "y": 11, - "hide_flag": "FLAG_TEMP_14" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 28, - "y": 20, - "hide_flag": "FLAG_TEMP_15" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 30, - "y": 20, - "hide_flag": "FLAG_TEMP_16" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 9, - "y": 13, - "hide_flag": "FLAG_TEMP_17" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 23, - "y": 16, - "hide_flag": "FLAG_TEMP_18" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 13, - "y": 6, - "hide_flag": "FLAG_TEMP_19" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 4, - "y": 12, - "hide_flag": "FLAG_TEMP_1A" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 10, - "y": 20, - "hide_flag": "FLAG_TEMP_1B" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_B1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_B1F.json deleted file mode 100644 index b06ee61a5f..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_B1F.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "name": "CeruleanCave_B1F", - "source": { - "decomp_file": "data/maps/CeruleanCave_B1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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": [ - { - "x": 5, - "y": 7, - "enter": "step_on", - "to_map": "CeruleanCave_1F", - "to_point": "warp_2" - } - ], - "objects": [ - { - "name": "item_ball", - "kind": "item", - "x": 31, - "y": 9, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_ULTRA_BALL" - }, - { - "name": "item_ball", - "kind": "item", - "x": 32, - "y": 2, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_B1F_MAX_REVIVE" - }, - { - "name": "mewtwo", - "kind": "npc", - "x": 7, - "y": 12, - "hide_flag": "FLAG_HIDE_MEWTWO" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 37, - "y": 1, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 38, - "y": 2, - "hide_flag": "FLAG_TEMP_13" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 35, - "y": 1, - "hide_flag": "FLAG_TEMP_14" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 37, - "y": 4, - "hide_flag": "FLAG_TEMP_15" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 35, - "y": 5, - "hide_flag": "FLAG_TEMP_16" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 2, - "y": 2, - "hide_flag": "FLAG_TEMP_17" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 4, - "y": 1, - "hide_flag": "FLAG_TEMP_18" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 6, - "y": 1, - "hide_flag": "FLAG_TEMP_19" - }, - { - "name": "rock_smash_rock", - "kind": "npc", - "x": 3, - "y": 4, - "hide_flag": "FLAG_TEMP_1A" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity.json deleted file mode 100644 index 003c2d8035..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "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_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] - }, - "warps": [ - { - "x": 10, - "y": 11, - "enter": "walk_into" - }, - { - "x": 30, - "y": 11, - "enter": "walk_into", - "to_map": "CeruleanCity_House2", - "to_point": "warp_1" - }, - { - "x": 15, - "y": 17, - "enter": "walk_into" - }, - { - "x": 22, - "y": 19, - "enter": "walk_into", - "to_map": "CeruleanCity_PokemonCenter_1F", - "to_point": "warp_1" - }, - { - "x": 31, - "y": 21, - "enter": "walk_into", - "to_map": "CeruleanCity_Gym", - "to_point": "warp_1" - }, - { - "x": 13, - "y": 28, - "enter": "cave_entrance", - "to_map": "CeruleanCity_BikeShop", - "to_point": "warp_1" - }, - { - "x": 29, - "y": 28, - "enter": "walk_into", - "to_map": "CeruleanCity_Mart", - "to_point": "warp_1" - }, - { - "x": 1, - "y": 12, - "enter": "cave_entrance", - "to_map": "CeruleanCave_1F", - "to_point": "warp_0" - }, - { - "x": 10, - "y": 8, - "enter": "walk_south" - }, - { - "x": 31, - "y": 8, - "enter": "walk_south", - "to_map": "CeruleanCity_House2", - "to_point": "warp_3" - }, - { - "x": 31, - "y": 9, - "enter": "walk_into", - "to_map": "CeruleanCity_House2", - "to_point": "warp_3" - }, - { - "x": 14, - "y": 28, - "enter": "cave_entrance", - "to_map": "CeruleanCity_BikeShop", - "to_point": "warp_1" - }, - { - "x": 23, - "y": 28, - "enter": "walk_into" - }, - { - "x": 17, - "y": 11, - "enter": "walk_into" - } - ], - "objects": [ - { - "name": "policeman", - "kind": "npc", - "x": 31, - "y": 12 - }, - { - "name": "rocket_m", - "kind": "npc", - "x": 33, - "y": 6, - "hide_flag": "FLAG_HIDE_CERULEAN_ROCKET" - }, - { - "name": "little_boy", - "kind": "npc", - "x": 16, - "y": 21, - "wander": { - "x0": 16, - "y0": 18, - "x1": 16, - "y1": 24 - } - }, - { - "name": "balding_man", - "kind": "npc", - "x": 9, - "y": 23, - "wander": { - "x0": 8, - "y0": 22, - "x1": 10, - "y1": 24 - } - }, - { - "name": "slowbro", - "kind": "npc", - "x": 32, - "y": 29 - }, - { - "name": "lass", - "kind": "npc", - "x": 33, - "y": 29 - }, - { - "name": "youngster", - "kind": "npc", - "x": 34, - "y": 22 - }, - { - "name": "blue", - "kind": "npc", - "x": 22, - "y": 0, - "hide_flag": "FLAG_HIDE_CERULEAN_RIVAL" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 26, - "y": 32, - "hide_flag": "FLAG_TEMP_13" - }, - { - "name": "woman_1", - "kind": "npc", - "x": 12, - "y": 30 - }, - { - "name": "cooltrainer_m", - "kind": "npc", - "x": 1, - "y": 13, - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_GUARD" - } - ], - "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 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_BikeShop.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_BikeShop.json deleted file mode 100644 index ad5464b469..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_BikeShop.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "CeruleanCity_BikeShop", - "source": { - "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - ".####...#..", - "..#.##..#..", - ".#..#...###", - "..#.#.....#", - "........#..", - "..#........", - "..#......#.", - "###########" - ], - "points": { - "warp_1": [5, 8] - }, - "warps": [ - { - "x": 4, - "y": 9, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_5" - }, - { - "x": 5, - "y": 8, - "enter": "walk_south", - "to_map": "CeruleanCity", - "to_point": "warp_5" - }, - { - "x": 6, - "y": 9, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_5" - } - ], - "objects": [ - { - "name": "man", - "kind": "npc", - "x": 9, - "y": 3 - }, - { - "name": "youngster", - "kind": "npc", - "x": 9, - "y": 7, - "wander": { - "x0": 8, - "y0": 6, - "x1": 10, - "y1": 8 - } - }, - { - "name": "woman_2", - "kind": "npc", - "x": 5, - "y": 5 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Gym.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Gym.json deleted file mode 100644 index 519944eecb..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Gym.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "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": [ - { - "x": 7, - "y": 18, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_4" - }, - { - "x": 8, - "y": 18, - "enter": "walk_south", - "to_map": "CeruleanCity", - "to_point": "warp_4" - }, - { - "x": 9, - "y": 18, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_4" - } - ], - "objects": [ - { - "name": "swimmer_m_water", - "kind": "npc", - "x": 10, - "y": 12, - "facing": "west", - "trainer": { - "sight": 1 - } - }, - { - "name": "picnicker", - "kind": "npc", - "x": 4, - "y": 7, - "facing": "east", - "trainer": { - "sight": 4 - } - }, - { - "name": "misty", - "kind": "npc", - "x": 8, - "y": 6 - }, - { - "name": "gym_guy", - "kind": "npc", - "x": 7, - "y": 16 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_House2.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_House2.json deleted file mode 100644 index 2abad6df50..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_House2.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "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": [ - { - "x": 2, - "y": 7, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_1" - }, - { - "x": 3, - "y": 7, - "enter": "walk_south", - "to_map": "CeruleanCity", - "to_point": "warp_1" - }, - { - "x": 4, - "y": 7, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_1" - }, - { - "x": 4, - "y": 1, - "enter": "cave_entrance", - "to_map": "CeruleanCity", - "to_point": "warp_9" - } - ], - "objects": [ - { - "name": "hiker", - "kind": "npc", - "x": 1, - "y": 2 - }, - { - "name": "lass", - "kind": "npc", - "x": 7, - "y": 6, - "wander": { - "x0": 6, - "y0": 5, - "x1": 8, - "y1": 7 - } - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Mart.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Mart.json deleted file mode 100644 index db4c9defee..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Mart.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "CeruleanCity_Mart", - "source": { - "decomp_file": "data/maps/CeruleanCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "elevation": [ - "00000000000", - "00000000000", - "00303333330", - "33003333333", - "00003330030", - "33333330030", - "30033330030", - "33333333333", - "00000000000" - ], - "points": { - "clerk_front": [4, 3], - "warp_1": [4, 7] - }, - "warps": [ - { - "x": 3, - "y": 7, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_6" - }, - { - "x": 4, - "y": 7, - "enter": "walk_south", - "to_map": "CeruleanCity", - "to_point": "warp_6" - }, - { - "x": 5, - "y": 7, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_6" - } - ], - "objects": [ - { - "name": "clerk", - "kind": "npc", - "x": 2, - "y": 3 - }, - { - "name": "woman_1", - "kind": "npc", - "x": 9, - "y": 2, - "wander": { - "x0": 5, - "y0": 2, - "x1": 10, - "y1": 2 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 1, - "y": 7 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_PokemonCenter_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_PokemonCenter_1F.json deleted file mode 100644 index 28d628941f..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_PokemonCenter_1F.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "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] - }, - "warps": [ - { - "x": 6, - "y": 8, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_3" - }, - { - "x": 7, - "y": 8, - "enter": "walk_south", - "to_map": "CeruleanCity", - "to_point": "warp_3" - }, - { - "x": 8, - "y": 8, - "enter": "walk_into", - "to_map": "CeruleanCity", - "to_point": "warp_3" - }, - { - "x": 1, - "y": 6, - "enter": "step_on" - } - ], - "objects": [ - { - "name": "nurse", - "kind": "npc", - "x": 7, - "y": 2 - }, - { - "name": "gentleman", - "kind": "npc", - "x": 12, - "y": 5 - }, - { - "name": "rocker", - "kind": "npc", - "x": 5, - "y": 4, - "wander": { - "x0": 4, - "y0": 4, - "x1": 6, - "y1": 4 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 4, - "y": 8, - "wander": { - "x0": 3, - "y0": 8, - "x1": 5, - "y1": 8 - } - }, - { - "name": "lass", - "kind": "npc", - "x": 3, - "y": 3 - }, - { - "name": "0", - "kind": "npc", - "x": 2, - "y": 1, - "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS" - }, - { - "name": "0", - "kind": "npc", - "x": 3, - "y": 1, - "hide_flag": "FLAG_HIDE_POSTGAME_GOSSIPERS" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_1F.json deleted file mode 100644 index cf3836faa8..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_1F.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "name": "MtMoon_1F", - "source": { - "decomp_file": "data/maps/MtMoon_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "################################################", - "################################################", - "##~~~~~~~~~#########~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~#######~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~.~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~#~~~~##", - "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~####~~##", - "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~~##~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~#####~~~~~####~~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~.####~~~~~~~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~###~~~~####~~~~~~~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~###~~~~###~~~~~~~~.~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "##~~~~#################~~~~###~~~~~~~~~###~~~~##", - "##~~~~~################~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###############~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~S~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~~##~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~####~~~#####~~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~#####~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~####~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~.~####~~~~~~~~~~~~~~~~~~~~~~##", - "################################################", - "################################################" - ], - "points": { - "warp_0": [5, 6], - "warp_1": [19, 14], - "warp_2": [31, 16], - "warp_3": [18, 37] - }, - "warps": [ - { - "x": 5, - "y": 6, - "enter": "step_on", - "to_map": "MtMoon_B1F", - "to_point": "warp_0" - }, - { - "x": 19, - "y": 14, - "enter": "step_on", - "to_map": "MtMoon_B1F", - "to_point": "warp_1" - }, - { - "x": 31, - "y": 16, - "enter": "step_on", - "to_map": "MtMoon_B1F", - "to_point": "warp_2" - }, - { - "x": 18, - "y": 37, - "enter": "walk_south", - "to_map": "Route4", - "to_point": "warp_0" - } - ], - "objects": [ - { - "name": "lass", - "kind": "npc", - "x": 20, - "y": 26, - "facing": "south", - "trainer": { - "sight": 2 - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 36, - "y": 30, - "facing": "east", - "trainer": { - "sight": 2 - } - }, - { - "name": "scientist", - "kind": "npc", - "x": 30, - "y": 35, - "trainer": { - "sight": 4, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "lass", - "kind": "npc", - "x": 33, - "y": 4, - "trainer": { - "sight": 2, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 7, - "y": 26, - "facing": "south", - "trainer": { - "sight": 4 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 13, - "y": 17, - "facing": "east", - "trainer": { - "sight": 4 - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 7, - "y": 10, - "wander": { - "x0": 5, - "y0": 8, - "x1": 9, - "y1": 12 - }, - "trainer": { - "sight": 1, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "item_ball", - "kind": "item", - "x": 2, - "y": 22, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_PARALYZE_HEAL" - }, - { - "name": "item_ball", - "kind": "item", - "x": 11, - "y": 35, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_TM09" - }, - { - "name": "item_ball", - "kind": "item", - "x": 26, - "y": 32, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_POTION" - }, - { - "name": "item_ball", - "kind": "item", - "x": 42, - "y": 35, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_RARE_CANDY" - }, - { - "name": "item_ball", - "kind": "item", - "x": 44, - "y": 21, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_ESCAPE_ROPE" - }, - { - "name": "item_ball", - "kind": "item", - "x": 3, - "y": 2, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_MOON_STONE" - }, - { - "name": "balding_man", - "kind": "npc", - "x": 42, - "y": 7 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B1F.json deleted file mode 100644 index 448aa61f4d..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B1F.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "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": [ - { - "x": 3, - "y": 3, - "enter": "step_on", - "to_map": "MtMoon_1F", - "to_point": "warp_0" - }, - { - "x": 25, - "y": 4, - "enter": "step_on", - "to_map": "MtMoon_1F", - "to_point": "warp_1" - }, - { - "x": 43, - "y": 21, - "enter": "step_on", - "to_map": "MtMoon_1F", - "to_point": "warp_2" - }, - { - "x": 22, - "y": 18, - "enter": "step_on", - "to_map": "MtMoon_B2F", - "to_point": "warp_0" - }, - { - "x": 17, - "y": 5, - "enter": "step_on", - "to_map": "MtMoon_B2F", - "to_point": "warp_1" - }, - { - "x": 26, - "y": 36, - "enter": "step_on", - "to_map": "MtMoon_B2F", - "to_point": "warp_2" - }, - { - "x": 39, - "y": 4, - "enter": "step_on", - "to_map": "MtMoon_B2F", - "to_point": "warp_3" - }, - { - "x": 45, - "y": 4, - "enter": "step_on", - "to_map": "Route4", - "to_point": "warp_1" - } - ], - "objects": [], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B2F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B2F.json deleted file mode 100644 index 33c98997eb..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B2F.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "name": "MtMoon_B2F", - "source": { - "decomp_file": "data/maps/MtMoon_B2F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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": [ - { - "x": 25, - "y": 21, - "enter": "step_on", - "to_map": "MtMoon_B1F", - "to_point": "warp_3" - }, - { - "x": 31, - "y": 11, - "enter": "step_on", - "to_map": "MtMoon_B1F", - "to_point": "warp_4" - }, - { - "x": 17, - "y": 31, - "enter": "step_on", - "to_map": "MtMoon_B1F", - "to_point": "warp_5" - }, - { - "x": 5, - "y": 10, - "enter": "step_on", - "to_map": "MtMoon_B1F", - "to_point": "warp_6" - } - ], - "objects": [ - { - "name": "fossil", - "kind": "npc", - "x": 13, - "y": 7, - "hide_flag": "FLAG_HIDE_DOME_FOSSIL" - }, - { - "name": "fossil", - "kind": "npc", - "x": 14, - "y": 7, - "hide_flag": "FLAG_HIDE_HELIX_FOSSIL" - }, - { - "name": "scientist", - "kind": "npc", - "x": 13, - "y": 11 - }, - { - "name": "rocket_m", - "kind": "npc", - "x": 37, - "y": 21, - "trainer": { - "sight": 3, - "looks": [ - "north", - "east", - "south", - "west" - ] - }, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - }, - { - "name": "rocket_m", - "kind": "npc", - "x": 12, - "y": 20, - "facing": "south", - "trainer": { - "sight": 2 - }, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - }, - { - "name": "rocket_m", - "kind": "npc", - "x": 35, - "y": 12, - "facing": "north", - "trainer": { - "sight": 4 - }, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - }, - { - "name": "rocket_m", - "kind": "npc", - "x": 18, - "y": 27, - "facing": "south", - "trainer": { - "sight": 4 - }, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS" - }, - { - "name": "item_ball", - "kind": "item", - "x": 30, - "y": 26, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_STAR_PIECE" - }, - { - "name": "item_ball", - "kind": "item", - "x": 35, - "y": 5, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_TM46" - }, - { - "name": "item_ball", - "kind": "item", - "x": 24, - "y": 6, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_REVIVE" - }, - { - "name": "item_ball", - "kind": "item", - "x": 3, - "y": 11, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_ANTIDOTE" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown.json deleted file mode 100644 index 63540ac440..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "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": [ - { - "x": 6, - "y": 7, - "enter": "walk_into", - "to_map": "PalletTown_PlayersHouse_1F", - "to_point": "warp_1" - }, - { - "x": 15, - "y": 7, - "enter": "walk_into", - "to_map": "PalletTown_RivalsHouse", - "to_point": "warp_0" - }, - { - "x": 16, - "y": 13, - "enter": "walk_into", - "to_map": "PalletTown_ProfessorOaksLab", - "to_point": "warp_0" - } - ], - "objects": [ - { - "name": "woman_1", - "kind": "npc", - "x": 3, - "y": 10, - "wander": { - "x0": 2, - "y0": 6, - "x1": 4, - "y1": 14 - } - }, - { - "name": "fat_man", - "kind": "npc", - "x": 13, - "y": 17, - "wander": { - "x0": 7, - "y0": 15, - "x1": 19, - "y1": 19 - } - }, - { - "name": "prof_oak", - "kind": "npc", - "x": 10, - "y": 8, - "hide_flag": "FLAG_HIDE_OAK_IN_PALLET_TOWN" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "north", - "to_map": "Route1", - "offset": 0 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_1F.json deleted file mode 100644 index bc171fed17..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_1F.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "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": [ - { - "x": 5, - "y": 8, - "enter": "walk_into", - "to_map": "PalletTown", - "to_point": "warp_0" - }, - { - "x": 4, - "y": 8, - "enter": "walk_south", - "to_map": "PalletTown", - "to_point": "warp_0" - }, - { - "x": 10, - "y": 2, - "enter": "walk_east", - "to_map": "PalletTown_PlayersHouse_2F", - "to_point": "warp_0" - }, - { - "x": 3, - "y": 9, - "enter": "walk_into", - "to_map": "PalletTown", - "to_point": "warp_0" - } - ], - "objects": [ - { - "name": "mom", - "kind": "npc", - "x": 8, - "y": 4 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_2F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_2F.json deleted file mode 100644 index 7ca500d896..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_2F.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "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": [ - { - "x": 10, - "y": 2, - "enter": "walk_west", - "to_map": "PalletTown_PlayersHouse_1F", - "to_point": "warp_2" - } - ], - "objects": [], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_ProfessorOaksLab.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_ProfessorOaksLab.json deleted file mode 100644 index 724be58581..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_ProfessorOaksLab.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "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": [ - { - "x": 6, - "y": 12, - "enter": "walk_south", - "to_map": "PalletTown", - "to_point": "warp_2" - }, - { - "x": 7, - "y": 12, - "enter": "walk_into", - "to_map": "PalletTown", - "to_point": "warp_2" - }, - { - "x": 5, - "y": 12, - "enter": "walk_into", - "to_map": "PalletTown", - "to_point": "warp_2" - } - ], - "objects": [ - { - "name": "scientist", - "kind": "npc", - "x": 3, - "y": 11 - }, - { - "name": "worker_f", - "kind": "npc", - "x": 2, - "y": 10, - "wander": { - "x0": 2, - "y0": 6, - "x1": 2, - "y1": 13 - } - }, - { - "name": "scientist", - "kind": "npc", - "x": 11, - "y": 10 - }, - { - "name": "prof_oak", - "kind": "npc", - "x": 6, - "y": 3, - "hide_flag": "FLAG_HIDE_OAK_IN_HIS_LAB" - }, - { - "name": "item_ball", - "kind": "item", - "x": 8, - "y": 4, - "hide_flag": "FLAG_HIDE_BULBASAUR_BALL" - }, - { - "name": "item_ball", - "kind": "item", - "x": 9, - "y": 4, - "hide_flag": "FLAG_HIDE_SQUIRTLE_BALL" - }, - { - "name": "item_ball", - "kind": "item", - "x": 10, - "y": 4, - "hide_flag": "FLAG_HIDE_CHARMANDER_BALL" - }, - { - "name": "blue", - "kind": "npc", - "x": 5, - "y": 4, - "hide_flag": "FLAG_HIDE_RIVAL_IN_LAB" - }, - { - "name": "pokedex", - "kind": "npc", - "x": 4, - "y": 1, - "hide_flag": "FLAG_HIDE_POKEDEX" - }, - { - "name": "pokedex", - "kind": "npc", - "x": 5, - "y": 1, - "hide_flag": "FLAG_HIDE_POKEDEX" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_RivalsHouse.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_RivalsHouse.json deleted file mode 100644 index 641924ae26..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_RivalsHouse.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "PalletTown_RivalsHouse", - "source": { - "decomp_file": "data/maps/PalletTown_RivalsHouse/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "#############", - "#############", - ".............", - ".............", - "......##.....", - "......##.....", - ".............", - ".............", - "#...........#", - "#############" - ], - "points": { - "warp_0": [4, 8] - }, - "warps": [ - { - "x": 4, - "y": 8, - "enter": "walk_south", - "to_map": "PalletTown", - "to_point": "warp_1" - }, - { - "x": 5, - "y": 8, - "enter": "walk_into", - "to_map": "PalletTown", - "to_point": "warp_1" - }, - { - "x": 3, - "y": 8, - "enter": "walk_into", - "to_map": "PalletTown", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "daisy", - "kind": "npc", - "x": 10, - "y": 6, - "wander": { - "x0": 9, - "y0": 3, - "x1": 11, - "y1": 9 - } - }, - { - "name": "town_map", - "kind": "npc", - "x": 6, - "y": 4, - "hide_flag": "FLAG_HIDE_TOWN_MAP" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity.json deleted file mode 100644 index 845d8ae7dc..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "name": "PewterCity", - "source": { - "decomp_file": "data/maps/PewterCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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] - }, - "warps": [ - { - "x": 17, - "y": 6, - "enter": "cave_entrance", - "to_map": "PewterCity_Museum_1F", - "to_point": "warp_1" - }, - { - "x": 25, - "y": 4, - "enter": "walk_into", - "to_map": "PewterCity_Museum_1F", - "to_point": "warp_3" - }, - { - "x": 15, - "y": 16, - "enter": "walk_into", - "to_map": "PewterCity_Gym", - "to_point": "warp_1" - }, - { - "x": 28, - "y": 18, - "enter": "walk_into", - "to_map": "PewterCity_Mart", - "to_point": "warp_1" - }, - { - "x": 33, - "y": 11, - "enter": "walk_into" - }, - { - "x": 17, - "y": 25, - "enter": "walk_into", - "to_map": "PewterCity_PokemonCenter_1F", - "to_point": "warp_1" - }, - { - "x": 9, - "y": 30, - "enter": "walk_into" - } - ], - "objects": [ - { - "name": "lass", - "kind": "npc", - "x": 6, - "y": 15 - }, - { - "name": "man", - "kind": "npc", - "x": 33, - "y": 17, - "hide_flag": "FLAG_HIDE_PEWTER_MUSEUM_GUIDE" - }, - { - "name": "fat_man", - "kind": "npc", - "x": 21, - "y": 28 - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 33, - "y": 27, - "wander": { - "x0": 31, - "y0": 27, - "x1": 35, - "y1": 27 - } - }, - { - "name": "boy", - "kind": "npc", - "x": 42, - "y": 20, - "hide_flag": "FLAG_HIDE_PEWTER_CITY_GYM_GUIDE" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 30, - "y": 5, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "scientist", - "kind": "npc", - "x": 46, - "y": 20, - "hide_flag": "FLAG_HIDE_PEWTER_CITY_RUNNING_SHOES_GUY" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "south", - "to_map": "Route2", - "offset": 12 - }, - { - "side": "east", - "to_map": "Route3", - "offset": 10 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Gym.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Gym.json deleted file mode 100644 index 5f5f46c50b..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Gym.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "PewterCity_Gym", - "source": { - "decomp_file": "data/maps/PewterCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "#############", - "####.....####", - "#############", - "#....#.#....#", - "#...........#", - "#...#...#...#", - "#...........#", - "#..#.#.#.#..#", - "##.........##", - "#...#...#...#", - "##.........##", - "#...........#", - "#...S...S...#", - "#...........#", - "#...........#", - "#############" - ], - "points": { - "brock_front": [6, 6], - "warp_1": [6, 14] - }, - "warps": [ - { - "x": 5, - "y": 14, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_2" - }, - { - "x": 6, - "y": 14, - "enter": "walk_south", - "to_map": "PewterCity", - "to_point": "warp_2" - }, - { - "x": 7, - "y": 14, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_2" - } - ], - "objects": [ - { - "name": "brock", - "kind": "npc", - "x": 6, - "y": 5 - }, - { - "name": "camper", - "kind": "npc", - "x": 3, - "y": 8, - "facing": "east", - "trainer": { - "sight": 4 - } - }, - { - "name": "gym_guy", - "kind": "npc", - "x": 7, - "y": 12 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Mart.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Mart.json deleted file mode 100644 index 29f7f0d2cd..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Mart.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "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": [ - { - "x": 3, - "y": 7, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_3" - }, - { - "x": 4, - "y": 7, - "enter": "walk_south", - "to_map": "PewterCity", - "to_point": "warp_3" - }, - { - "x": 5, - "y": 7, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_3" - } - ], - "objects": [ - { - "name": "youngster", - "kind": "npc", - "x": 8, - "y": 2 - }, - { - "name": "boy", - "kind": "npc", - "x": 6, - "y": 4 - }, - { - "name": "clerk", - "kind": "npc", - "x": 2, - "y": 3 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Museum_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Museum_1F.json deleted file mode 100644 index ee0947b080..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Museum_1F.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "PewterCity_Museum_1F", - "source": { - "decomp_file": "data/maps/PewterCity_Museum_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "############################", - "############################", - "...............#............", - "...............#......#....#", - "...####........#...........#", - "...............#............", - "...........#...#...........#", - "...####..###...###.........#", - ".........###.....#..........", - "#........###....##......##..", - "############################" - ], - "points": { - "warp_1": [14, 9], - "warp_3": [21, 9] - }, - "warps": [ - { - "x": 13, - "y": 9, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_0" - }, - { - "x": 14, - "y": 9, - "enter": "walk_south", - "to_map": "PewterCity", - "to_point": "warp_0" - }, - { - "x": 15, - "y": 9, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_0" - }, - { - "x": 21, - "y": 9, - "enter": "walk_south", - "to_map": "PewterCity", - "to_point": "warp_1" - }, - { - "x": 22, - "y": 9, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_1" - }, - { - "x": 8, - "y": 8, - "enter": "walk_east" - } - ], - "objects": [ - { - "name": "worker_m", - "kind": "npc", - "x": 16, - "y": 5 - }, - { - "name": "old_man_1", - "kind": "npc", - "x": 2, - "y": 4 - }, - { - "name": "scientist", - "kind": "npc", - "x": 21, - "y": 3 - }, - { - "name": "old_amber", - "kind": "npc", - "x": 22, - "y": 3, - "hide_flag": "FLAG_HIDE_OLD_AMBER" - }, - { - "name": "scientist", - "kind": "npc", - "x": 26, - "y": 4 - }, - { - "name": "scientist", - "kind": "npc", - "x": 26, - "y": 7 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_PokemonCenter_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_PokemonCenter_1F.json deleted file mode 100644 index 87ce82cab4..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_PokemonCenter_1F.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "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] - }, - "warps": [ - { - "x": 6, - "y": 8, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_5" - }, - { - "x": 7, - "y": 8, - "enter": "walk_south", - "to_map": "PewterCity", - "to_point": "warp_5" - }, - { - "x": 8, - "y": 8, - "enter": "walk_into", - "to_map": "PewterCity", - "to_point": "warp_5" - }, - { - "x": 1, - "y": 6, - "enter": "step_on" - } - ], - "objects": [ - { - "name": "jigglypuff", - "kind": "npc", - "x": 2, - "y": 2 - }, - { - "name": "gentleman", - "kind": "npc", - "x": 4, - "y": 8 - }, - { - "name": "nurse", - "kind": "npc", - "x": 7, - "y": 2 - }, - { - "name": "youngster", - "kind": "npc", - "x": 1, - "y": 2 - }, - { - "name": "woman_1", - "kind": "npc", - "x": 13, - "y": 2 - }, - { - "name": "gba_kid", - "kind": "npc", - "x": 10, - "y": 7 - }, - { - "name": "gba_kid", - "kind": "npc", - "x": 14, - "y": 6 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route1.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route1.json deleted file mode 100644 index c48c746b72..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route1.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "Route1", - "source": { - "decomp_file": "data/maps/Route1/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "##########....##########", - "##########....##########", - "##....................##", - "##....................##", - "##......##............##", - "##vvvvvv##vvvvvv......##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##vvvvvv##~~~~~~~~~~~~##", - "##......##............##", - "##....................##", - "##..............~~~~~~##", - "##..............~~~~~~##", - "####vvvvvv######~~~~~~##", - "####......######~~~~~~##", - "##..............~~~~~~##", - "##....................##", - "##....................##", - "##vv.vvvv..vvvvvvvvvvv##", - "##....................##", - "##....................##", - "##....................##", - "##..........~~~~~~....##", - "############~~~~~~....##", - "############~~~~~~vvvv##", - "##..........~~~~~~....##", - "##..........~~~~~~....##", - "##....................##", - "##....................##", - "##vvvv...Svvvvvvvvvvvv##", - "##..~~~~~~~......~~~~~##", - "##..~~~~~~~......~~~~~##", - "##~~~~~~~......~~~~~..##", - "##~~~~~~~...~~.~~~~~..##", - "############~~##########", - "##.........#~~#.......##", - "############~~##########", - "############~~##########" - ], - "points": {}, - "warps": [], - "objects": [ - { - "name": "clerk", - "kind": "npc", - "x": 6, - "y": 28, - "wander": { - "x0": 6, - "y0": 27, - "x1": 6, - "y1": 29 - } - }, - { - "name": "boy", - "kind": "npc", - "x": 19, - "y": 16, - "wander": { - "x0": 18, - "y0": 16, - "x1": 20, - "y1": 16 - } - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "north", - "to_map": "ViridianCity", - "offset": -12 - }, - { - "side": "south", - "to_map": "PalletTown", - "offset": 0 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10.json deleted file mode 100644 index 3f3acb6179..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10.json +++ /dev/null @@ -1,321 +0,0 @@ -{ - "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_3": [13, 20] - }, - "warps": [ - { - "x": 8, - "y": 19, - "enter": "cave_entrance" - }, - { - "x": 8, - "y": 57, - "enter": "cave_entrance" - }, - { - "x": 7, - "y": 40, - "enter": "cave_entrance" - }, - { - "x": 13, - "y": 20, - "enter": "walk_into", - "to_map": "Route10_PokemonCenter_1F", - "to_point": "warp_1" - }, - { - "x": 2, - "y": 37, - "enter": "walk_east" - } - ], - "objects": [ - { - "name": "picnicker", - "kind": "npc", - "x": 7, - "y": 60, - "trainer": { - "sight": 2, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 4, - "y": 62, - "trainer": { - "sight": 1, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "poke_maniac", - "kind": "npc", - "x": 15, - "y": 70, - "wander": { - "x0": 13, - "y0": 70, - "x1": 17, - "y1": 70 - }, - "trainer": { - "sight": 2, - "looks": [ - "west", - "east" - ] - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 4, - "y": 68, - "facing": "west", - "trainer": { - "sight": 2 - } - }, - { - "name": "poke_maniac", - "kind": "npc", - "x": 13, - "y": 44, - "facing": "west", - "trainer": { - "sight": 5 - } - }, - { - "name": "picnicker", - "kind": "npc", - "x": 9, - "y": 27, - "facing": "south", - "trainer": { - "sight": 2 - } - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 10, - "y": 20, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 10, - "y": 22, - "hide_flag": "FLAG_TEMP_13" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 10, - "y": 24, - "hide_flag": "FLAG_TEMP_14" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 10, - "y": 26, - "hide_flag": "FLAG_TEMP_15" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "west", - "to_map": "Route9", - "offset": 0 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10_PokemonCenter_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10_PokemonCenter_1F.json deleted file mode 100644 index 4f4c5f3a1d..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10_PokemonCenter_1F.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "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] - }, - "warps": [ - { - "x": 6, - "y": 8, - "enter": "walk_into", - "to_map": "Route10", - "to_point": "warp_3" - }, - { - "x": 7, - "y": 8, - "enter": "walk_south", - "to_map": "Route10", - "to_point": "warp_3" - }, - { - "x": 8, - "y": 8, - "enter": "walk_into", - "to_map": "Route10", - "to_point": "warp_3" - }, - { - "x": 1, - "y": 6, - "enter": "step_on" - } - ], - "objects": [ - { - "name": "nurse", - "kind": "npc", - "x": 7, - "y": 2 - }, - { - "name": "gentleman", - "kind": "npc", - "x": 9, - "y": 4, - "wander": { - "x0": 8, - "y0": 4, - "x1": 10, - "y1": 4 - } - }, - { - "name": "fat_man", - "kind": "npc", - "x": 2, - "y": 3, - "wander": { - "x0": 1, - "y0": 3, - "x1": 3, - "y1": 3 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 14, - "y": 6 - }, - { - "name": "scientist", - "kind": "npc", - "x": 12, - "y": 5 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2.json deleted file mode 100644 index 706949faeb..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "name": "Route2", - "source": { - "decomp_file": "data/maps/Route2/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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] - }, - "warps": [ - { - "x": 5, - "y": 13, - "enter": "walk_south", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_3" - }, - { - "x": 6, - "y": 13, - "enter": "walk_south", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_3" - }, - { - "x": 5, - "y": 51, - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_1" - }, - { - "x": 17, - "y": 11, - "enter": "cave_entrance" - }, - { - "x": 17, - "y": 22, - "enter": "walk_into" - }, - { - "x": 18, - "y": 46, - "enter": "cave_entrance" - }, - { - "x": 18, - "y": 41, - "enter": "walk_south" - }, - { - "x": 19, - "y": 41, - "enter": "walk_south" - }, - { - "x": 19, - "y": 46, - "enter": "cave_entrance" - }, - { - "x": 6, - "y": 51, - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "cut_tree", - "kind": "npc", - "x": 16, - "y": 62, - "hide_flag": "FLAG_TEMP_14" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 15, - "y": 69, - "hide_flag": "FLAG_TEMP_13" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 11, - "y": 13, - "hide_flag": "FLAG_TEMP_15" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 18, - "y": 26, - "hide_flag": "FLAG_TEMP_16" - }, - { - "name": "item_ball", - "kind": "item", - "x": 17, - "y": 54, - "hide_flag": "FLAG_HIDE_ROUTE2_ETHER" - }, - { - "name": "item_ball", - "kind": "item", - "x": 17, - "y": 64, - "hide_flag": "FLAG_HIDE_ROUTE2_PARALYZE_HEAL" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "north", - "to_map": "PewterCity", - "offset": -12 - }, - { - "side": "south", - "to_map": "ViridianCity", - "offset": -12 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route22.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route22.json deleted file mode 100644 index be2d5629b2..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route22.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "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": [ - { - "x": 8, - "y": 5, - "enter": "walk_into" - }, - { - "x": 9, - "y": 5, - "enter": "walk_into" - } - ], - "objects": [ - { - "name": "blue", - "kind": "npc", - "x": 25, - "y": 4, - "hide_flag": "FLAG_HIDE_ROUTE_22_RIVAL" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "east", - "to_map": "ViridianCity", - "offset": -10 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route24.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route24.json deleted file mode 100644 index c8402d903e..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route24.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "name": "Route24", - "source": { - "decomp_file": "data/maps/Route24/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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": [], - "objects": [ - { - "name": "man", - "kind": "npc", - "x": 12, - "y": 15, - "hide_flag": "FLAG_HIDE_NUGGET_BRIDGE_ROCKET" - }, - { - "name": "camper", - "kind": "npc", - "x": 12, - "y": 19, - "facing": "west", - "trainer": { - "sight": 2 - } - }, - { - "name": "lass", - "kind": "npc", - "x": 10, - "y": 22, - "facing": "east", - "trainer": { - "sight": 2 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 12, - "y": 25, - "facing": "west", - "trainer": { - "sight": 2 - } - }, - { - "name": "lass", - "kind": "npc", - "x": 10, - "y": 28, - "facing": "east", - "trainer": { - "sight": 2 - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 12, - "y": 31, - "facing": "west", - "trainer": { - "sight": 2 - } - }, - { - "name": "camper", - "kind": "npc", - "x": 5, - "y": 21, - "facing": "north", - "trainer": { - "sight": 5 - } - }, - { - "name": "item_ball", - "kind": "item", - "x": 11, - "y": 4, - "hide_flag": "FLAG_HIDE_ROUTE24_TM45" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "south", - "to_map": "CeruleanCity", - "offset": -12 - }, - { - "side": "east", - "to_map": "Route25", - "offset": 0 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25.json deleted file mode 100644 index 29dcb02843..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "name": "Route25", - "source": { - "decomp_file": "data/maps/Route25/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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": [ - { - "x": 51, - "y": 4, - "enter": "walk_into", - "to_map": "Route25_SeaCottage", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "hiker", - "kind": "npc", - "x": 11, - "y": 4, - "facing": "east", - "trainer": { - "sight": 4 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 18, - "y": 2, - "facing": "south", - "trainer": { - "sight": 2 - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 17, - "y": 7, - "facing": "east", - "trainer": { - "sight": 2 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 22, - "y": 4, - "trainer": { - "sight": 2, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "picnicker", - "kind": "npc", - "x": 22, - "y": 8, - "facing": "east", - "trainer": { - "sight": 2 - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 27, - "y": 9, - "facing": "north", - "trainer": { - "sight": 3 - } - }, - { - "name": "camper", - "kind": "npc", - "x": 28, - "y": 4, - "facing": "south", - "trainer": { - "sight": 3 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 36, - "y": 4, - "trainer": { - "sight": 2, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "lass", - "kind": "npc", - "x": 42, - "y": 5, - "facing": "south", - "trainer": { - "sight": 3 - } - }, - { - "name": "item_ball", - "kind": "item", - "x": 26, - "y": 2, - "hide_flag": "FLAG_HIDE_ROUTE25_TM43" - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 30, - "y": 3, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "beauty", - "kind": "npc", - "x": 49, - "y": 10 - }, - { - "name": "man", - "kind": "npc", - "x": 49, - "y": 11 - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "west", - "to_map": "Route24", - "offset": 0 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25_SeaCottage.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25_SeaCottage.json deleted file mode 100644 index 0ec5259806..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25_SeaCottage.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "Route25_SeaCottage", - "source": { - "decomp_file": "data/maps/Route25_SeaCottage/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "###############", - "###############", - "#.##########..#", - "###D######D#.##", - "..............#", - "....##........#", - "..............#", - "#.............#", - "#..............", - "###..........##", - "###############" - ], - "points": { - "warp_1": [7, 9] - }, - "warps": [ - { - "x": 6, - "y": 9, - "enter": "walk_into", - "to_map": "Route25", - "to_point": "warp_0" - }, - { - "x": 7, - "y": 9, - "enter": "walk_south", - "to_map": "Route25", - "to_point": "warp_0" - }, - { - "x": 8, - "y": 9, - "enter": "walk_into", - "to_map": "Route25", - "to_point": "warp_0" - } - ], - "objects": [ - { - "name": "bill", - "kind": "npc", - "x": 7, - "y": 5, - "hide_flag": "FLAG_HIDE_BILL_HUMAN_SEA_COTTAGE" - }, - { - "name": "clefairy", - "kind": "npc", - "x": 10, - "y": 6, - "hide_flag": "FLAG_HIDE_BILL_CLEFAIRY" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_NorthEntrance.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_NorthEntrance.json deleted file mode 100644 index 021edbb11d..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_NorthEntrance.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "Route2_ViridianForest_NorthEntrance", - "source": { - "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "###############", - "#######.#######", - "##...#...#...##", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#.............#", - "###############" - ], - "points": { - "warp_1": [7, 10], - "warp_3": [7, 1] - }, - "warps": [ - { - "x": 6, - "y": 10, - "enter": "walk_into", - "to_map": "ViridianForest", - "to_point": "warp_2" - }, - { - "x": 7, - "y": 10, - "enter": "walk_south", - "to_map": "ViridianForest", - "to_point": "warp_2" - }, - { - "x": 8, - "y": 10, - "enter": "walk_into", - "to_map": "ViridianForest", - "to_point": "warp_2" - }, - { - "x": 7, - "y": 1, - "enter": "cave_entrance", - "to_map": "Route2", - "to_point": "warp_0" - } - ], - "objects": [ - { - "name": "youngster", - "kind": "npc", - "x": 5, - "y": 4 - }, - { - "name": "old_man_1", - "kind": "npc", - "x": 4, - "y": 7 - }, - { - "name": "cooltrainer_f", - "kind": "npc", - "x": 10, - "y": 5 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_SouthEntrance.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_SouthEntrance.json deleted file mode 100644 index 3b00abc4eb..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_SouthEntrance.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "Route2_ViridianForest_SouthEntrance", - "source": { - "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "###############", - "#######.#######", - "##...#...#...##", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#.............#", - "###############" - ], - "points": { - "warp_1": [7, 10], - "warp_3": [7, 1] - }, - "warps": [ - { - "x": 6, - "y": 10, - "enter": "walk_into", - "to_map": "Route2", - "to_point": "warp_2" - }, - { - "x": 7, - "y": 10, - "enter": "walk_south", - "to_map": "Route2", - "to_point": "warp_2" - }, - { - "x": 8, - "y": 10, - "enter": "walk_into", - "to_map": "Route2", - "to_point": "warp_2" - }, - { - "x": 7, - "y": 1, - "enter": "cave_entrance", - "to_map": "ViridianForest", - "to_point": "warp_0" - } - ], - "objects": [ - { - "name": "woman_2", - "kind": "npc", - "x": 10, - "y": 6 - }, - { - "name": "woman_1", - "kind": "npc", - "x": 4, - "y": 7, - "wander": { - "x0": 3, - "y0": 6, - "x1": 5, - "y1": 8 - } - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route3.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route3.json deleted file mode 100644 index 91a4f7fc9c..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route3.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "name": "Route3", - "source": { - "decomp_file": "data/maps/Route3/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "####################################################################........########", - "####################################################################........########", - "####################################################################........########", - "#############......................#################################.......#########", - "###########..........................###############################.....###########", - "###########..........................######................#########.....###########", - "###########.........###.......##.....#####...................#######.....###########", - "###########vvv..vvvv###vvvvvvv##vvv..#####...................#######.....###########", - "#######.............###.......##.....#####vvvv..#######vvvvv.#######vvv..###########", - "....................###.......##................#######......#######.....###########", - "....................###.......###...............#######......#####.......~~~~#######", - ".........###........###.......###~~~~~~~........#######...............##S~~~~~~#####", - "..##########vvvv..vv###vvvvvvv###~~~~~~~~~~~~~~########................~~~~~~~~#####", - "############........###.......###~~~~~~~~~~~~~~########................~~~~~~~~#####", - "############.................######~~~~~~~~~~~~########...............~~~~~~~~~#####", - "##############...............######~~~~~~~~~~~~##########.............~~~~~~~~~#####", - "#######################################~~~~~~~~##########.............~~~~~~########", - "####################################################################################", - "####################################################################################", - "####################################################################################" - ], - "points": {}, - "warps": [], - "objects": [ - { - "name": "youngster", - "kind": "npc", - "x": 70, - "y": 13 - }, - { - "name": "lass", - "kind": "npc", - "x": 40, - "y": 11, - "wander": { - "x0": 40, - "y0": 10, - "x1": 40, - "y1": 12 - }, - "trainer": { - "sight": 3, - "looks": [ - "north", - "south" - ] - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 32, - "y": 6, - "facing": "east", - "trainer": { - "sight": 4 - } - }, - { - "name": "lass", - "kind": "npc", - "x": 30, - "y": 3, - "facing": "west", - "trainer": { - "sight": 5 - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 25, - "y": 4, - "facing": "south", - "trainer": { - "sight": 2 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 29, - "y": 10, - "facing": "west", - "trainer": { - "sight": 5 - } - }, - { - "name": "lass", - "kind": "npc", - "x": 19, - "y": 9, - "facing": "west", - "trainer": { - "sight": 5 - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 12, - "y": 6, - "facing": "east", - "trainer": { - "sight": 3 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 17, - "y": 4, - "facing": "south", - "trainer": { - "sight": 2 - } - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "north", - "to_map": "Route4", - "offset": 60 - }, - { - "side": "west", - "to_map": "PewterCity", - "offset": -10 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4.json deleted file mode 100644 index 5c8b219633..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "name": "Route4", - "source": { - "decomp_file": "data/maps/Route4/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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": [ - { - "x": 19, - "y": 5, - "enter": "cave_entrance", - "to_map": "MtMoon_1F", - "to_point": "warp_3" - }, - { - "x": 32, - "y": 5, - "enter": "cave_entrance", - "to_map": "MtMoon_B1F", - "to_point": "warp_7" - }, - { - "x": 12, - "y": 5, - "enter": "walk_into", - "to_map": "Route4_PokemonCenter_1F", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "woman_1", - "kind": "npc", - "x": 9, - "y": 8, - "wander": { - "x0": 8, - "y0": 7, - "x1": 10, - "y1": 9 - } - }, - { - "name": "lass", - "kind": "npc", - "x": 75, - "y": 3, - "facing": "east", - "trainer": { - "sight": 4 - } - }, - { - "name": "item_ball", - "kind": "item", - "x": 67, - "y": 5, - "hide_flag": "FLAG_HIDE_ROUTE4_TM05" - }, - { - "name": "boy", - "kind": "npc", - "x": 15, - "y": 14, - "wander": { - "x0": 14, - "y0": 14, - "x1": 16, - "y1": 14 - } - }, - { - "name": "black_belt", - "kind": "npc", - "x": 47, - "y": 3 - }, - { - "name": "black_belt", - "kind": "npc", - "x": 50, - "y": 3 - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "south", - "to_map": "Route3", - "offset": -60 - }, - { - "side": "east", - "to_map": "CeruleanCity", - "offset": -10 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4_PokemonCenter_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4_PokemonCenter_1F.json deleted file mode 100644 index c3fe2d586c..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4_PokemonCenter_1F.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "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] - }, - "warps": [ - { - "x": 6, - "y": 8, - "enter": "walk_into", - "to_map": "Route4", - "to_point": "warp_2" - }, - { - "x": 7, - "y": 8, - "enter": "walk_south", - "to_map": "Route4", - "to_point": "warp_2" - }, - { - "x": 8, - "y": 8, - "enter": "walk_into", - "to_map": "Route4", - "to_point": "warp_2" - }, - { - "x": 1, - "y": 6, - "enter": "step_on" - } - ], - "objects": [ - { - "name": "nurse", - "kind": "npc", - "x": 7, - "y": 2 - }, - { - "name": "balding_man", - "kind": "npc", - "x": 1, - "y": 3 - }, - { - "name": "gentleman", - "kind": "npc", - "x": 12, - "y": 5 - }, - { - "name": "boy", - "kind": "npc", - "x": 5, - "y": 4, - "wander": { - "x0": 4, - "y0": 3, - "x1": 6, - "y1": 5 - } - }, - { - "name": "youngster", - "kind": "npc", - "x": 14, - "y": 4 - }, - { - "name": "clipboard", - "kind": "npc", - "x": 12, - "y": 6 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route5.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route5.json deleted file mode 100644 index 1b4d929c1d..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route5.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "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": [ - { - "x": 31, - "y": 31, - "enter": "walk_into", - "to_map": "UndergroundPath_NorthEntrance", - "to_point": "warp_1" - }, - { - "x": 23, - "y": 25, - "enter": "walk_into" - }, - { - "x": 24, - "y": 32, - "enter": "walk_south" - }, - { - "x": 25, - "y": 32, - "enter": "walk_south" - } - ], - "objects": [], - "flag_sets": {}, - "connections": [ - { - "side": "north", - "to_map": "CeruleanCity", - "offset": 0 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route6.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route6.json deleted file mode 100644 index 4ce8f0cda2..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route6.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "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] - }, - "warps": [ - { - "x": 19, - "y": 13, - "enter": "walk_into", - "to_map": "UndergroundPath_SouthEntrance", - "to_point": "warp_1" - }, - { - "x": 12, - "y": 5, - "enter": "cave_entrance" - }, - { - "x": 13, - "y": 5, - "enter": "cave_entrance" - } - ], - "objects": [ - { - "name": "bug_catcher", - "kind": "npc", - "x": 3, - "y": 16, - "facing": "east", - "trainer": { - "sight": 5 - } - }, - { - "name": "camper", - "kind": "npc", - "x": 12, - "y": 21 - }, - { - "name": "picnicker", - "kind": "npc", - "x": 13, - "y": 21 - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 20, - "y": 25, - "facing": "west", - "trainer": { - "sight": 3 - } - }, - { - "name": "picnicker", - "kind": "npc", - "x": 13, - "y": 32, - "facing": "west", - "trainer": { - "sight": 3 - } - }, - { - "name": "camper", - "kind": "npc", - "x": 13, - "y": 33, - "facing": "west", - "trainer": { - "sight": 3 - } - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "south", - "to_map": "VermilionCity", - "offset": -12 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route9.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route9.json deleted file mode 100644 index dae6c11e89..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route9.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "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": [], - "objects": [ - { - "name": "picnicker", - "kind": "npc", - "x": 14, - "y": 10, - "facing": "west", - "trainer": { - "sight": 3 - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 20, - "y": 17, - "trainer": { - "sight": 4, - "looks": [ - "north", - "west" - ] - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 61, - "y": 16, - "facing": "south", - "trainer": { - "sight": 1 - } - }, - { - "name": "camper", - "kind": "npc", - "x": 26, - "y": 7, - "trainer": { - "sight": 3, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 26, - "y": 1, - "facing": "south", - "trainer": { - "sight": 2 - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 49, - "y": 7, - "facing": "east", - "trainer": { - "sight": 3 - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 53, - "y": 2, - "wander": { - "x0": 50, - "y0": 2, - "x1": 56, - "y1": 2 - }, - "trainer": { - "sight": 1, - "looks": [ - "west", - "east" - ] - } - }, - { - "name": "picnicker", - "kind": "npc", - "x": 60, - "y": 9, - "facing": "east", - "trainer": { - "sight": 4 - } - }, - { - "name": "camper", - "kind": "npc", - "x": 36, - "y": 6, - "facing": "east", - "trainer": { - "sight": 5 - } - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 2, - "y": 8, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "item_ball", - "kind": "item", - "x": 12, - "y": 17, - "hide_flag": "FLAG_HIDE_ROUTE9_TM40" - }, - { - "name": "item_ball", - "kind": "item", - "x": 65, - "y": 17, - "hide_flag": "FLAG_HIDE_ROUTE9_BURN_HEAL" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "west", - "to_map": "CeruleanCity", - "offset": -10 - }, - { - "side": "east", - "to_map": "Route10", - "offset": 0 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_1F_Corridor.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_1F_Corridor.json deleted file mode 100644 index ef4b147d64..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_1F_Corridor.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "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": [ - { - "x": 3, - "y": 8, - "enter": "walk_west", - "to_map": "SSAnne_2F_Corridor", - "to_point": "warp_0" - }, - { - "x": 2, - "y": 18, - "enter": "walk_south" - }, - { - "x": 19, - "y": 1, - "enter": "walk_into", - "to_map": "SSAnne_Exterior", - "to_point": "warp_2" - }, - { - "x": 20, - "y": 0, - "enter": "walk_into", - "to_map": "SSAnne_Exterior", - "to_point": "warp_3" - }, - { - "x": 3, - "y": 20, - "enter": "walk_into" - }, - { - "x": 28, - "y": 17, - "enter": "walk_west" - }, - { - "x": 5, - "y": 10, - "enter": "walk_south" - }, - { - "x": 8, - "y": 10, - "enter": "walk_south" - }, - { - "x": 11, - "y": 10, - "enter": "walk_south" - }, - { - "x": 14, - "y": 10, - "enter": "walk_south" - }, - { - "x": 17, - "y": 10, - "enter": "walk_south" - }, - { - "x": 23, - "y": 10, - "enter": "walk_south" - }, - { - "x": 20, - "y": 10, - "enter": "walk_south" - } - ], - "objects": [ - { - "name": "sailor", - "kind": "npc", - "x": 18, - "y": 8 - }, - { - "name": "worker_m", - "kind": "npc", - "x": 12, - "y": 9 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_2F_Corridor.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_2F_Corridor.json deleted file mode 100644 index 9f74e4ce17..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_2F_Corridor.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "SSAnne_2F_Corridor", - "source": { - "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "##################################", - "##################################", - "#..###########################.###", - "#..###########################.###", - "#....#########################...#", - "#....#########################...#", - "#....#########################...#", - "#....#########################...#", - "#....#######################.....#", - "#....#######################.....#", - "#....#D###D###D###D###D###D#.....#", - "###..............................#", - "###..............................#", - "###..............................#", - "#................................#", - "##################################" - ], - "points": { - "warp_0": [2, 2], - "warp_2": [30, 2] - }, - "warps": [ - { - "x": 2, - "y": 2, - "enter": "walk_east", - "to_map": "SSAnne_1F_Corridor", - "to_point": "warp_0" - }, - { - "x": 3, - "y": 12, - "enter": "walk_west" - }, - { - "x": 30, - "y": 2, - "enter": "walk_east", - "to_map": "SSAnne_CaptainsOffice", - "to_point": "warp_0" - }, - { - "x": 6, - "y": 10, - "enter": "walk_into" - }, - { - "x": 10, - "y": 10, - "enter": "walk_into" - }, - { - "x": 14, - "y": 10, - "enter": "walk_into" - }, - { - "x": 18, - "y": 10, - "enter": "walk_into" - }, - { - "x": 22, - "y": 10, - "enter": "walk_into" - }, - { - "x": 26, - "y": 10, - "enter": "walk_into" - } - ], - "objects": [ - { - "name": "blue", - "kind": "npc", - "x": 30, - "y": 2, - "hide_flag": "FLAG_HIDE_SS_ANNE_RIVAL" - }, - { - "name": "sailor", - "kind": "npc", - "x": 2, - "y": 7, - "wander": { - "x0": 2, - "y0": 5, - "x1": 2, - "y1": 9 - } - } - ], - "flag_sets": { - "new_game": [ - "FLAG_HIDE_SS_ANNE_RIVAL" - ] - }, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_CaptainsOffice.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_CaptainsOffice.json deleted file mode 100644 index 03a230a27e..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_CaptainsOffice.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "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": [ - { - "x": 3, - "y": 7, - "enter": "walk_west", - "to_map": "SSAnne_2F_Corridor", - "to_point": "warp_2" - } - ], - "objects": [ - { - "name": "captain", - "kind": "npc", - "x": 5, - "y": 4 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_Exterior.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_Exterior.json deleted file mode 100644 index 20658451d2..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_Exterior.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "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": [ - { - "x": 31, - "y": 5, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_0" - }, - { - "x": 32, - "y": 5, - "enter": "walk_north", - "to_map": "VermilionCity", - "to_point": "warp_1" - }, - { - "x": 32, - "y": 14, - "enter": "walk_south", - "to_map": "SSAnne_1F_Corridor", - "to_point": "warp_2" - }, - { - "x": 33, - "y": 15, - "enter": "walk_into", - "to_map": "SSAnne_1F_Corridor", - "to_point": "warp_3" - }, - { - "x": 33, - "y": 5, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_2" - } - ], - "objects": [ - { - "name": "ss_anne", - "kind": "npc", - "x": 30, - "y": 16, - "hide_flag": "FLAG_HIDE_SS_ANNE" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthEntrance.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthEntrance.json deleted file mode 100644 index 7ae2377b26..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthEntrance.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "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": [ - { - "x": 5, - "y": 8, - "enter": "walk_into", - "to_map": "Route5", - "to_point": "warp_0" - }, - { - "x": 6, - "y": 8, - "enter": "walk_south", - "to_map": "Route5", - "to_point": "warp_0" - }, - { - "x": 7, - "y": 8, - "enter": "walk_into", - "to_map": "Route5", - "to_point": "warp_0" - }, - { - "x": 7, - "y": 4, - "enter": "walk_west", - "to_map": "UndergroundPath_NorthSouthTunnel", - "to_point": "warp_0" - } - ], - "objects": [ - { - "name": "little_girl", - "kind": "npc", - "x": 5, - "y": 6 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthSouthTunnel.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthSouthTunnel.json deleted file mode 100644 index 72752cc45a..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_NorthSouthTunnel.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "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": [ - { - "x": 4, - "y": 3, - "enter": "walk_east", - "to_map": "UndergroundPath_NorthEntrance", - "to_point": "warp_3" - }, - { - "x": 3, - "y": 60, - "enter": "walk_west", - "to_map": "UndergroundPath_SouthEntrance", - "to_point": "warp_3" - } - ], - "objects": [], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_SouthEntrance.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_SouthEntrance.json deleted file mode 100644 index 000f7e215e..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/UndergroundPath_SouthEntrance.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "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": [ - { - "x": 5, - "y": 8, - "enter": "walk_into", - "to_map": "Route6", - "to_point": "warp_0" - }, - { - "x": 6, - "y": 8, - "enter": "walk_south", - "to_map": "Route6", - "to_point": "warp_0" - }, - { - "x": 7, - "y": 8, - "enter": "walk_into", - "to_map": "Route6", - "to_point": "warp_0" - }, - { - "x": 7, - "y": 4, - "enter": "walk_west", - "to_map": "UndergroundPath_NorthSouthTunnel", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "woman_2", - "kind": "npc", - "x": 5, - "y": 6 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity.json deleted file mode 100644 index 8d7cd08e6e..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "name": "VermilionCity", - "source": { - "decomp_file": "data/maps/VermilionCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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] - }, - "warps": [ - { - "x": 22, - "y": 34, - "enter": "walk_south", - "to_map": "SSAnne_Exterior", - "to_point": "warp_1" - }, - { - "x": 23, - "y": 34, - "enter": "walk_south", - "to_map": "SSAnne_Exterior", - "to_point": "warp_1" - }, - { - "x": 24, - "y": 34, - "enter": "walk_south", - "to_map": "SSAnne_Exterior", - "to_point": "warp_1" - }, - { - "x": 9, - "y": 6, - "enter": "walk_into" - }, - { - "x": 15, - "y": 6, - "enter": "walk_into", - "to_map": "VermilionCity_PokemonCenter_1F", - "to_point": "warp_1" - }, - { - "x": 12, - "y": 17, - "enter": "walk_into", - "to_map": "VermilionCity_PokemonFanClub", - "to_point": "warp_1" - }, - { - "x": 19, - "y": 17, - "enter": "walk_into" - }, - { - "x": 29, - "y": 17, - "enter": "walk_into" - }, - { - "x": 28, - "y": 24, - "enter": "walk_into" - }, - { - "x": 14, - "y": 25, - "enter": "walk_into", - "to_map": "VermilionCity_Gym", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "woman_1", - "kind": "npc", - "x": 22, - "y": 11, - "wander": { - "x0": 18, - "y0": 11, - "x1": 26, - "y1": 11 - } - }, - { - "name": "old_man_1", - "kind": "npc", - "x": 17, - "y": 9 - }, - { - "name": "old_man_2", - "kind": "npc", - "x": 36, - "y": 10 - }, - { - "name": "machop", - "kind": "npc", - "x": 35, - "y": 11, - "wander": { - "x0": 33, - "y0": 9, - "x1": 37, - "y1": 13 - } - }, - { - "name": "sailor", - "kind": "npc", - "x": 31, - "y": 30, - "wander": { - "x0": 27, - "y0": 30, - "x1": 35, - "y1": 30 - } - }, - { - "name": "sailor", - "kind": "npc", - "x": 24, - "y": 33 - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 19, - "y": 24, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "scientist", - "kind": "npc", - "x": 25, - "y": 7, - "hide_flag": "FLAG_HIDE_VERMILION_CITY_OAKS_AIDE" - } - ], - "flag_sets": { - "new_game": [ - "FLAG_HIDE_VERMILION_CITY_OAKS_AIDE" - ] - }, - "connections": [ - { - "side": "north", - "to_map": "Route6", - "offset": 12 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_Gym.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_Gym.json deleted file mode 100644 index 2ed0d496e1..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_Gym.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "name": "VermilionCity_Gym", - "source": { - "decomp_file": "data/maps/VermilionCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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] - }, - "warps": [ - { - "x": 4, - "y": 19, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_9" - }, - { - "x": 5, - "y": 19, - "enter": "walk_south", - "to_map": "VermilionCity", - "to_point": "warp_9" - }, - { - "x": 6, - "y": 19, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_9" - } - ], - "objects": [ - { - "name": "lt_surge", - "kind": "npc", - "x": 5, - "y": 2 - }, - { - "name": "balding_man", - "kind": "npc", - "x": 2, - "y": 11, - "trainer": { - "sight": 3, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "sailor", - "kind": "npc", - "x": 8, - "y": 13, - "trainer": { - "sight": 3, - "looks": [ - "north", - "east", - "south", - "west" - ] - } - }, - { - "name": "gym_guy", - "kind": "npc", - "x": 4, - "y": 17 - }, - { - "name": "gentleman", - "kind": "npc", - "x": 7, - "y": 8, - "facing": "west", - "trainer": { - "sight": 3 - } - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonCenter_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonCenter_1F.json deleted file mode 100644 index 5e53a3ba51..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonCenter_1F.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "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] - }, - "warps": [ - { - "x": 6, - "y": 8, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_4" - }, - { - "x": 7, - "y": 8, - "enter": "walk_south", - "to_map": "VermilionCity", - "to_point": "warp_4" - }, - { - "x": 8, - "y": 8, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_4" - }, - { - "x": 1, - "y": 6, - "enter": "step_on" - } - ], - "objects": [ - { - "name": "nurse", - "kind": "npc", - "x": 7, - "y": 2 - }, - { - "name": "man", - "kind": "npc", - "x": 4, - "y": 8, - "wander": { - "x0": 3, - "y0": 8, - "x1": 5, - "y1": 8 - } - }, - { - "name": "hiker", - "kind": "npc", - "x": 12, - "y": 5 - }, - { - "name": "youngster", - "kind": "npc", - "x": 14, - "y": 4, - "wander": { - "x0": 14, - "y0": 3, - "x1": 14, - "y1": 5 - } - }, - { - "name": "cooltrainer_f", - "kind": "npc", - "x": 6, - "y": 4 - }, - { - "name": "0", - "kind": "npc", - "x": 2, - "y": 1, - "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL" - }, - { - "name": "0", - "kind": "npc", - "x": 3, - "y": 1, - "hide_flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonFanClub.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonFanClub.json deleted file mode 100644 index e087d94793..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/VermilionCity_PokemonFanClub.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "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": [ - { - "x": 4, - "y": 10, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_5" - }, - { - "x": 5, - "y": 10, - "enter": "walk_south", - "to_map": "VermilionCity", - "to_point": "warp_5" - }, - { - "x": 6, - "y": 10, - "enter": "walk_into", - "to_map": "VermilionCity", - "to_point": "warp_5" - } - ], - "objects": [ - { - "name": "gentleman", - "kind": "npc", - "x": 5, - "y": 4 - }, - { - "name": "worker_f", - "kind": "npc", - "x": 6, - "y": 4 - }, - { - "name": "pikachu", - "kind": "npc", - "x": 7, - "y": 6 - }, - { - "name": "seel", - "kind": "npc", - "x": 4, - "y": 6 - }, - { - "name": "woman_1", - "kind": "npc", - "x": 4, - "y": 5 - }, - { - "name": "fat_man", - "kind": "npc", - "x": 7, - "y": 5 - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity.json deleted file mode 100644 index 5bf976082a..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "name": "ViridianCity", - "source": { - "decomp_file": "data/maps/ViridianCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "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] - }, - "warps": [ - { - "x": 26, - "y": 26, - "enter": "walk_into", - "to_map": "ViridianCity_PokemonCenter_1F", - "to_point": "warp_1" - }, - { - "x": 25, - "y": 11, - "enter": "walk_into" - }, - { - "x": 36, - "y": 10, - "enter": "walk_into" - }, - { - "x": 25, - "y": 18, - "enter": "walk_into" - }, - { - "x": 36, - "y": 19, - "enter": "walk_into", - "to_map": "ViridianCity_Mart", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "fat_man", - "kind": "npc", - "x": 8, - "y": 26 - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 11, - "y": 24, - "hide_flag": "FLAG_TEMP_11" - }, - { - "name": "old_man_1", - "kind": "npc", - "x": 34, - "y": 11 - }, - { - "name": "var_0", - "kind": "npc", - "x": 21, - "y": 6 - }, - { - "name": "woman_3", - "kind": "npc", - "x": 20, - "y": 12 - }, - { - "name": "youngster", - "kind": "npc", - "x": 33, - "y": 26, - "wander": { - "x0": 33, - "y0": 24, - "x1": 33, - "y1": 28 - } - }, - { - "name": "boy", - "kind": "npc", - "x": 16, - "y": 22, - "wander": { - "x0": 15, - "y0": 20, - "x1": 17, - "y1": 24 - } - }, - { - "name": "cut_tree", - "kind": "npc", - "x": 18, - "y": 5, - "hide_flag": "FLAG_TEMP_12" - }, - { - "name": "item_ball", - "kind": "item", - "x": 17, - "y": 5, - "hide_flag": "FLAG_HIDE_VIRIDIAN_CITY_POTION" - } - ], - "flag_sets": {}, - "connections": [ - { - "side": "north", - "to_map": "Route2", - "offset": 12 - }, - { - "side": "south", - "to_map": "Route1", - "offset": 12 - }, - { - "side": "west", - "to_map": "Route22", - "offset": 10 - } - ] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_Mart.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_Mart.json deleted file mode 100644 index 9b3e8509a4..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_Mart.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "name": "ViridianCity_Mart", - "source": { - "decomp_file": "data/maps/ViridianCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "elevation": [ - "00000000000", - "00000000000", - "00303333330", - "33003333333", - "00003330030", - "33333330030", - "30033330030", - "33333333333", - "00000000000" - ], - "points": { - "clerk_front": [4, 3], - "warp_1": [4, 7] - }, - "warps": [ - { - "x": 3, - "y": 7, - "enter": "walk_into", - "to_map": "ViridianCity", - "to_point": "warp_4" - }, - { - "x": 4, - "y": 7, - "enter": "walk_south", - "to_map": "ViridianCity", - "to_point": "warp_4" - }, - { - "x": 5, - "y": 7, - "enter": "walk_into", - "to_map": "ViridianCity", - "to_point": "warp_4" - } - ], - "objects": [ - { - "name": "clerk", - "kind": "npc", - "x": 2, - "y": 3 - }, - { - "name": "youngster", - "kind": "npc", - "x": 6, - "y": 2, - "wander": { - "x0": 5, - "y0": 1, - "x1": 7, - "y1": 3 - } - }, - { - "name": "woman_1", - "kind": "npc", - "x": 9, - "y": 5, - "wander": { - "x0": 9, - "y0": 4, - "x1": 9, - "y1": 6 - } - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_PokemonCenter_1F.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_PokemonCenter_1F.json deleted file mode 100644 index e0341f1440..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianCity_PokemonCenter_1F.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "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] - }, - "warps": [ - { - "x": 6, - "y": 8, - "enter": "walk_into", - "to_map": "ViridianCity", - "to_point": "warp_0" - }, - { - "x": 7, - "y": 8, - "enter": "walk_south", - "to_map": "ViridianCity", - "to_point": "warp_0" - }, - { - "x": 8, - "y": 8, - "enter": "walk_into", - "to_map": "ViridianCity", - "to_point": "warp_0" - }, - { - "x": 1, - "y": 6, - "enter": "step_on" - } - ], - "objects": [ - { - "name": "nurse", - "kind": "npc", - "x": 7, - "y": 2 - }, - { - "name": "gentleman", - "kind": "npc", - "x": 12, - "y": 5 - }, - { - "name": "boy", - "kind": "npc", - "x": 4, - "y": 7 - }, - { - "name": "youngster", - "kind": "npc", - "x": 2, - "y": 3, - "wander": { - "x0": 1, - "y0": 2, - "x1": 3, - "y1": 4 - } - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianForest.json b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianForest.json deleted file mode 100644 index a6e51104b3..0000000000 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/ViridianForest.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "name": "ViridianForest", - "source": { - "decomp_file": "data/maps/ViridianForest/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" - }, - "tiles": [ - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "###########.............###........................###", - "###########.............###........................###", - "###########.............###........................###", - "#..#####..#.............###.....###############....###", - "####...####.............###.....###############....###", - "####...####.............###.....###############....###", - "####...####.....###.....###.....###############....###", - "####..S####~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.......#########", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~........#########", - "###~~~~~###~~~~~###~~~~~###~~~~~~######......#########", - "###~~~~~###~~~~~###~~~~~###...~~~######......#########", - "###~~~~~###~~~~~###.....###......######......#########", - "###~~~~~###~~~~~###..............######......#########", - "###~~~~~###~~~~~#####............######......#########", - "###~~~~~###~~~~~#####............######............###", - "###~~~~~###~~~~~~~#####################....S.......###", - "###~~~~~...~~~~~~~#####################............###", - "###...............#####################............###", - "###......S........#####################~~~~........###", - "###...............#####################~~~~~###....###", - "###.....................###############~~~~~###....###", - "###.....................###############~~~~~###....###", - "###.....................###############~~~~~###....###", - "##################......###############~~~~~###....###", - "##################......###############~~~~~###....###", - "#######################################~~~~~###....###", - "#######################################~~~~~###....###", - "#######################################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######~~~~........###", - "############~~~~~~~~~~~~~~~~S..~~######~~~.........###", - "############~~~~~~~~~~~~~~~~...~~######~~~.........###", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", - "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", - "###~~~~~~~~~...~~~~~~~~~~~~.###.~~~~~~~~~...~~~~~~~###", - "###~~~~~~~~~....~~~~~~~~~~.......~~~~~~~....~~~~~~~###", - "###~~~~~~~~............................S....~~~~~~~###", - "###~~~~~~~~....................S...........~~~~~~~~###", - "###~~~~~~~~................................~~~~~~~~###", - "###########################......#####################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################" - ], - "points": { - "warp_0": [29, 62], - "warp_2": [5, 9] - }, - "warps": [ - { - "x": 29, - "y": 62, - "enter": "walk_south", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_3" - }, - { - "x": 28, - "y": 62, - "enter": "walk_south", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_3" - }, - { - "x": 5, - "y": 9, - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_1" - }, - { - "x": 6, - "y": 9, - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_1" - }, - { - "x": 30, - "y": 62, - "enter": "walk_south", - "to_map": "Route2_ViridianForest_SouthEntrance", - "to_point": "warp_3" - }, - { - "x": 4, - "y": 9, - "enter": "cave_entrance", - "to_map": "Route2_ViridianForest_NorthEntrance", - "to_point": "warp_1" - } - ], - "objects": [ - { - "name": "youngster", - "kind": "npc", - "x": 29, - "y": 58 - }, - { - "name": "boy", - "kind": "npc", - "x": 45, - "y": 58 - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 47, - "y": 45, - "facing": "west", - "trainer": { - "sight": 5 - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 47, - "y": 29, - "facing": "west", - "trainer": { - "sight": 4 - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 7, - "y": 22, - "facing": "west", - "trainer": { - "sight": 4 - } - }, - { - "name": "item_ball", - "kind": "item", - "x": 5, - "y": 41, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POKE_BALL" - }, - { - "name": "item_ball", - "kind": "item", - "x": 40, - "y": 21, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_ANTIDOTE" - }, - { - "name": "item_ball", - "kind": "item", - "x": 21, - "y": 34, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION" - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 43, - "y": 6, - "trainer": { - "sight": 1, - "looks": [ - "south", - "north" - ] - } - }, - { - "name": "bug_catcher", - "kind": "npc", - "x": 16, - "y": 5, - "facing": "north", - "trainer": { - "sight": 1 - } - }, - { - "name": "item_ball", - "kind": "item", - "x": 49, - "y": 60, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION_2" - } - ], - "flag_sets": {}, - "connections": [] -} diff --git a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/PokemonFRLG_OverworldMaps.h b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/PokemonFRLG_OverworldMaps.h index 7fa58f230e..5f0b05d189 100644 --- a/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/PokemonFRLG_OverworldMaps.h +++ b/SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/PokemonFRLG_OverworldMaps.h @@ -11,8 +11,8 @@ * Center, and the S.S. Anne's corridors to the Captain's office; and the * three floors of Cerulean Cave, where Mewtwo waits on B1F. * - * Each map is a JSON file, Maps/.json next to this file, generated by - * devtools/maps/frlg_maps.py and built into the program by CMake + * Each map is a pinned PokemonSimulation JSON resource, prepared under + * Packages/Resources/Pokemon/Maps/frlg and built into the program by CMake * (pa_embed_text_files() in cmake/EmbedTextFiles.cmake), so the program and * its tests read the same copy. The schema is Pokemon::MapData's * (Pokemon/Navigation/Pokemon_MapData.h). A warp leads to point diff --git a/SerialPrograms/cmake/PokesimMapResources.cmake b/SerialPrograms/cmake/PokesimMapResources.cmake new file mode 100644 index 0000000000..67d0124ce1 --- /dev/null +++ b/SerialPrograms/cmake/PokesimMapResources.cmake @@ -0,0 +1,15 @@ +# Resolve FRLG's prepared map input. Configuration never prepares or downloads maps. +# Supply -DPOKESIM_TOOLS_SOURCE=/path/to/tools -DPOKESIM_SOURCE_CACHE=/path/to/cache. +# See devtools/maps/RESOURCE_MAPS.md for the explicit prepare step and pinned CI. +function(pa_frlg_map_resources OUT) + get_filename_component(CONSUMER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../.." ABSOLUTE) + set(POKESIM_TOOLS_SOURCE "$ENV{POKESIM_TOOLS_SOURCE}" CACHE PATH "Pinned PokemonSimulation tools checkout") + set(POKESIM_SOURCE_CACHE "$ENV{POKESIM_SOURCE_CACHE}" CACHE PATH "Approved publishing Git cache") + if(NOT POKESIM_TOOLS_SOURCE OR NOT POKESIM_SOURCE_CACHE) + message(FATAL_ERROR "Set POKESIM_TOOLS_SOURCE and POKESIM_SOURCE_CACHE after preparing devtools/maps/map-resources.lock.json; see devtools/maps/RESOURCE_MAPS.md.") + endif() + include("${POKESIM_TOOLS_SOURCE}/integrations/arduino-source/resource-maps.cmake") + pa_pokesim_map_directory(MAPS frlg "${CONSUMER}" "${POKESIM_SOURCE_CACHE}") + file(RELATIVE_PATH RELATIVE_MAPS "${CMAKE_CURRENT_SOURCE_DIR}" "${MAPS}") + set(${OUT} "${RELATIVE_MAPS}" PARENT_SCOPE) +endfunction() diff --git a/devtools/maps/RESOURCE_MAPS.md b/devtools/maps/RESOURCE_MAPS.md new file mode 100644 index 0000000000..391e339cb9 --- /dev/null +++ b/devtools/maps/RESOURCE_MAPS.md @@ -0,0 +1,44 @@ +# FRLG map resources + +FRLG's existing `overworld_map_json()` API now embeds JSON from prepared +`Packages/Resources/Pokemon/Maps/frlg`, rather than an authored source-map copy. +Its native map decoder, route/story/recovery code and controller behavior are +unchanged. Resource preparation happens before configuring, with no implicit +fallback to the deleted source directory and no map download during configure. +This is a change of build input, not runtime filesystem loading. + +The resource lock pins PokemonSimulation main `40717c7c809c415c751fd7a348dfc1895f7ec3d7`. +All 53 maps were compared byte-for-byte with the original native tree before +removing that copy. This initial adoption uses the approved v1 pack; upgrading +to v2 is a later explicit lock change after Simulation #56 lands and native +validation passes. #114's shared v2 reader is already present in this handoff. +BDSP's held map differences are not imported or overwritten. + +Clone a full tools/data checkout outside deployed Resources, then explicitly +select the pinned tool version used by CI (a draft dependency until Simulation +#57 lands): + +```sh +git clone https://github.com/dayfine/PokemonSimulation.git /path/to/pokesim +git -C /path/to/pokesim checkout 0efe131008c4bcdceb4d036a7022171cbcb2375a +PYTHONPATH=/path/to/pokesim/src python3 -m pokesim.maps.consumer_sync prepare \ + --layout resources --source /path/to/pokesim --consumer /path/to/Arduino-Source +cmake -S SerialPrograms -B /path/to/build \ + -DPOKESIM_TOOLS_SOURCE=/path/to/pokesim -DPOKESIM_SOURCE_CACHE=/path/to/pokesim +``` + +CI checks out Packages, prepares this same resource lock through the pinned +integration action, and passes its tools/cache paths to CMake. Missing, partial, +modified, extra or unapproved resource data fails before compilation. The pack +includes pinned license/provenance. Generated resources and external caches are +ignored; the resource lock is checked in. + +The old FRLG Python builder is retained temporarily because `frlg_battle_data.py` +imports its decomp reader. Move that dependency to the simulation owner before +removing the module; do not break battle-data regeneration as incidental cleanup. +The shared Sinnoh decomp CLI also remains a separate consumer migration. + +Native map, story, transition and recovery tests must run from this tree without +the old map directory before adopting this handoff in the owning chain. This +fork setup is not yet an upstream resource submission: handoff must make the +required data available through the agreed Packages repository/process. diff --git a/devtools/maps/map-resources.lock.json b/devtools/maps/map-resources.lock.json new file mode 100644 index 0000000000..eea4b7199f --- /dev/null +++ b/devtools/maps/map-resources.lock.json @@ -0,0 +1,11 @@ +{ + "format": "pokesim-map-resource-lock/1", + "repository": "dayfine/PokemonSimulation", + "games": { + "frlg": { + "revision": "40717c7c809c415c751fd7a348dfc1895f7ec3d7", + "manifest_path": "data/maps/runtime-manifest.json", + "manifest_sha256": "d2ee1c66222eee741103149c3a6db245ee51115ad6e87a79f7a3fe6e7a7b0176" + } + } +} From 60d1343c47cbfba2d4af2dc8a810434a75a2dd24 Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 09:43:19 -0800 Subject: [PATCH 3/6] Canonicalize embedded map dependencies to prevent duplicate Ninja outputs --- SerialPrograms/cmake/EmbedTextFiles.cmake | 5 ++++- devtools/runtime-map-tests/CMakeLists.txt | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/SerialPrograms/cmake/EmbedTextFiles.cmake b/SerialPrograms/cmake/EmbedTextFiles.cmake index 3bf5f4ae91..943c6f25ab 100644 --- a/SerialPrograms/cmake/EmbedTextFiles.cmake +++ b/SerialPrograms/cmake/EmbedTextFiles.cmake @@ -17,7 +17,10 @@ # at run time, so no literal exceeds MSVC's limit of 16380 bytes. function(pa_embed_text_files TARGET FOLDER HEADER NAMESPACE FUNCTION) - file(GLOB FILES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${FOLDER}/*.json") + # Canonicalize once so resource verification and embedding watch the same + # paths. Mixed absolute/../ aliases can produce duplicate Ninja outputs. + file(REAL_PATH "${FOLDER}" MAP_DIRECTORY BASE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + file(GLOB FILES CONFIGURE_DEPENDS "${MAP_DIRECTORY}/*.json") if(NOT FILES) message(FATAL_ERROR "pa_embed_text_files(): no .json files in ${FOLDER}.") endif() diff --git a/devtools/runtime-map-tests/CMakeLists.txt b/devtools/runtime-map-tests/CMakeLists.txt index 7cfd49cc21..71d5d94407 100644 --- a/devtools/runtime-map-tests/CMakeLists.txt +++ b/devtools/runtime-map-tests/CMakeLists.txt @@ -38,8 +38,21 @@ add_executable(RuntimeMapLegacyTests ) target_link_libraries(RuntimeMapLegacyTests PRIVATE RuntimeMapDecoder) include("${ROOT}/SerialPrograms/cmake/EmbedTextFiles.cmake") +# Resource consumers also register canonical paths; embed dependencies must not +# retain a second ../ alias, which Ninja can treat as duplicate generated outputs. +file(GLOB CANONICAL_MAPS "${NAV}/TestMaps/*.json") +set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CANONICAL_MAPS}) pa_embed_text_files(RuntimeMapLegacyTests ../../SerialPrograms/Source/Pokemon/Navigation/TestMaps Pokemon/Navigation/Pokemon_Navigation_Tests.h PokemonAutomation::Pokemon navigation_test_map_json) +get_property(MAP_DEPENDENCIES DIRECTORY PROPERTY CMAKE_CONFIGURE_DEPENDS) +foreach(INPUT IN LISTS MAP_DEPENDENCIES) + if(INPUT MATCHES "TestMaps/.*\\.json$") + file(REAL_PATH "${INPUT}" CANONICAL_INPUT) + if(NOT INPUT STREQUAL CANONICAL_INPUT) + message(FATAL_ERROR "Map embedding registered a noncanonical dependency: ${INPUT}") + endif() + endif() +endforeach() foreach(target RuntimeMapDecoder RuntimeMapTests RuntimeMapLegacyTests) if(MSVC) target_compile_definitions(${target} PRIVATE _CRT_SECURE_NO_WARNINGS) From 7e6c91e27ac2c9efd7f6ad426698d87ebbce672d Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 09:49:03 -0800 Subject: [PATCH 4/6] Retire duplicate FRLG map builder through the Simulation battle-data exporter --- .../workflows/cpp-ci-serial-programs-base.yml | 2 +- devtools/maps/RESOURCE_MAPS.md | 14 +- devtools/maps/frlg_battle_data.py | 277 +---------- devtools/maps/frlg_maps.py | 444 ------------------ devtools/maps/tests/test_frlg_maps.py | 90 ---- 5 files changed, 16 insertions(+), 811 deletions(-) delete mode 100644 devtools/maps/frlg_maps.py delete mode 100644 devtools/maps/tests/test_frlg_maps.py diff --git a/.github/workflows/cpp-ci-serial-programs-base.yml b/.github/workflows/cpp-ci-serial-programs-base.yml index c4b41e4aaf..3e35ead78a 100644 --- a/.github/workflows/cpp-ci-serial-programs-base.yml +++ b/.github/workflows/cpp-ci-serial-programs-base.yml @@ -95,7 +95,7 @@ jobs: - name: Prepare approved FRLG map resources id: map-resources - uses: dayfine/PokemonSimulation/integrations/arduino-source/verify-map-packs@0efe131008c4bcdceb4d036a7022171cbcb2375a + uses: dayfine/PokemonSimulation/integrations/arduino-source/verify-map-packs@8436751a34b08da777fee11e6e2106624494f486 with: layout: resources operation: prepare diff --git a/devtools/maps/RESOURCE_MAPS.md b/devtools/maps/RESOURCE_MAPS.md index 391e339cb9..f190f3cb98 100644 --- a/devtools/maps/RESOURCE_MAPS.md +++ b/devtools/maps/RESOURCE_MAPS.md @@ -16,11 +16,11 @@ BDSP's held map differences are not imported or overwritten. Clone a full tools/data checkout outside deployed Resources, then explicitly select the pinned tool version used by CI (a draft dependency until Simulation -#57 lands): +#57 and #58 land): ```sh git clone https://github.com/dayfine/PokemonSimulation.git /path/to/pokesim -git -C /path/to/pokesim checkout 0efe131008c4bcdceb4d036a7022171cbcb2375a +git -C /path/to/pokesim checkout 8436751a34b08da777fee11e6e2106624494f486 PYTHONPATH=/path/to/pokesim/src python3 -m pokesim.maps.consumer_sync prepare \ --layout resources --source /path/to/pokesim --consumer /path/to/Arduino-Source cmake -S SerialPrograms -B /path/to/build \ @@ -33,10 +33,12 @@ modified, extra or unapproved resource data fails before compilation. The pack includes pinned license/provenance. Generated resources and external caches are ignored; the resource lock is checked in. -The old FRLG Python builder is retained temporarily because `frlg_battle_data.py` -imports its decomp reader. Move that dependency to the simulation owner before -removing the module; do not break battle-data regeneration as incidental cleanup. -The shared Sinnoh decomp CLI also remains a separate consumer migration. +The duplicate FRLG builder and Python tests are removed. `frlg_battle_data.py` +is a thin CLI forwarder to `pokesim.games.frlg.battle_data_export`; set +`PYTHONPATH=/src` when running it. All five existing battle-data +outputs reproduced byte-for-byte after the move. Map-builder tests already live +beside their source in PokemonSimulation. Native game tests remain here. +The shared Sinnoh decomp CLI remains a separate consumer migration. Native map, story, transition and recovery tests must run from this tree without the old map directory before adopting this handoff in the owning chain. This diff --git a/devtools/maps/frlg_battle_data.py b/devtools/maps/frlg_battle_data.py index d89c74e5ec..b46a637431 100644 --- a/devtools/maps/frlg_battle_data.py +++ b/devtools/maps/frlg_battle_data.py @@ -1,277 +1,14 @@ -"""Writes the FRLG battle data AutoStory chooses its attacks from, as JSON, from the pret/pokefirered decompilation. +"""Forward native battle-data generation to the pinned PokemonSimulation tools. -Usage: - python3 devtools/maps/frlg_battle_data.py --out SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/BattleData - python3 devtools/maps/frlg_battle_data.py --out --check +Example: + PYTHONPATH=/path/to/pokesim/src python3 devtools/maps/frlg_battle_data.py \ + --out SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/BattleData --check -Reads, at frlg_maps.COMMIT (cached in --cache like frlg_maps.py): -- src/battle_main.c gTypeEffectiveness: type_chart.json, each pairing that - isn't 1x, in tenths; -- src/data/pokemon/species_info.h: species.json, every species' two types - and base stats: HP, Attack, Defense, Sp. Atk, Sp. Def, Speed; -- src/data/battle_moves.h: moves.json, every move's power, type, PP, - accuracy, priority, effect (EFFECT_FLINCH_HIT is "flinch-hit") and its - secondary effect's chance; -- src/data/trainers.h and src/data/trainer_parties.h: trainers.json, every - trainer's AI flags (AI_SCRIPT_TRY_TO_FAINT is "try-to-faint"), items and - party (not the Ruby/Sapphire placeholders, DUMMY_TRAINER_MON): each - member's species, level, iv (0 to 255, as pret has it), nature and moves. - A party that gives no moves gets the game's (GiveBoxMonInitialMoveset: - the last four of its level-up moves up to its level, from - src/data/pokemon/level_up_learnsets.h). The nature is the one - CreateNPCTrainerParty's personality gives: a hash of the trainer's and - the species' names (charmap.txt) on top of 0x78 for a female trainer, - 0x80 for a double battle, else 0x88, mod 25; -- data/maps/*/scripts.inc, map.json and data/scripts/trainers.inc: - map_trainers.json, the trainers each map battles (trainerbattle_* - TRAINER_X in its scripts or its objects'). -Names are the program's slugs: SPECIES_MR_MIME is "mr-mime", MOVE_WATER_GUN -"water-gun", TYPE_WATER "water". One entry per line, so a change in pret -shows as a line in the diff. --check writes nothing: it regenerates the files -and fails if any differs. +The implementation and FireRed source pin belong to PokemonSimulation. Use the +same tools checkout documented in RESOURCE_MAPS.md; no map-builder copy is needed. """ -import argparse -import json -import os -import re -import sys -from concurrent.futures import ThreadPoolExecutor -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -import frlg_maps # noqa: E402 - -# Slugs the plain rule (lower case, '_' to '-') gets wrong: the program's -# names, from Resources/Pokemon/Pokedex/Pokedex-National.json and PokeAPI. -SPECIES_SLUGS = {'FARFETCHD': 'farfetch-d'} -MOVE_SLUGS = { - 'FAINT_ATTACK': 'feint-attack', - 'HI_JUMP_KICK': 'high-jump-kick', - 'SMELLING_SALT': 'smelling-salts', - 'VICE_GRIP': 'vise-grip', -} -# Not species a battle can show. -SKIPPED_SPECIES = re.compile(r'NONE$|EGG$|OLD_UNOWN_') -# The AI flags, as include/constants/battle_ai.h names them. -AI_FLAG = re.compile(r'AI_SCRIPT_(\w+)') -# gTypeEffectiveness's multipliers, in tenths. -MULTIPLIERS = {'TYPE_MUL_NO_EFFECT': 0, 'TYPE_MUL_NOT_EFFECTIVE': 5, 'TYPE_MUL_SUPER_EFFECTIVE': 20} - - -def slug(name, fixes=None): - return (fixes or {}).get(name) or name.lower().replace('_', '-') - - -def type_slug(name): - return name[len('TYPE_'):].lower() - - -def entries(text, prefix): - """(NAME, body) for each designated initializer `[PREFIX_NAME] = { body }`.""" - pattern = re.compile(r'\[' + prefix + r'_(\w+)\]\s*=\s*\{((?:(?!\n \[).)*?)\n \},', re.S) - return pattern.findall(text) - - -def field(body, name): - match = re.search(r'\.' + name + r'\s*=\s*([^,\n]+(?:\{[^}]*\})?)', body) - return match.group(1).strip() if match else None - - -def type_chart(text): - table = re.search(r'gTypeEffectiveness\[\d+\]\s*=\s*\{(.*?)\};', text, re.S).group(1) - chart = [] - for attack, defend, mul in re.findall(r'(TYPE_\w+),\s*(TYPE_\w+),\s*(TYPE_MUL_\w+)', table): - if attack in ('TYPE_FORESIGHT', 'TYPE_ENDTABLE'): - continue - chart.append([type_slug(attack), type_slug(defend), MULTIPLIERS[mul]]) - return chart - - -def species(text): - data = {} - for name, body in entries(text, 'SPECIES'): - if SKIPPED_SPECIES.search(name): - continue - types = re.search(r'\.types\s*=\s*\{(TYPE_\w+),\s*(TYPE_\w+)\}', body) - stats = [int(field(body, f)) for f in ('baseHP', 'baseAttack', 'baseDefense', 'baseSpAttack', 'baseSpDefense', 'baseSpeed')] - data[slug(name, SPECIES_SLUGS)] = [type_slug(types.group(1)), type_slug(types.group(2))] + stats - return data - - -def moves(text): - data = {} - for name, body in entries(text, 'MOVE'): - if name == 'NONE': - continue - data[slug(name, MOVE_SLUGS)] = [ - int(field(body, 'power')), type_slug(field(body, 'type')), int(field(body, 'pp')), - int(field(body, 'accuracy')), int(field(body, 'priority')), - slug(field(body, 'effect')[len('EFFECT_'):]), int(field(body, 'secondaryEffectChance')), - ] - return data - - -def learnsets(text, pointers): - """{species slug: [(level, move slug), ...]} from level_up_learnsets.h.""" - by_name = {} - for name, body in re.findall(r'static const u16 (s\w+LevelUpLearnset)\[\]\s*=\s*\{(.*?)\};', text, re.S): - by_name[name] = [(int(lvl), slug(move, MOVE_SLUGS)) for lvl, move in re.findall(r'LEVEL_UP_MOVE\(\s*(\d+),\s*MOVE_(\w+)\)', body)] - return {slug(s, SPECIES_SLUGS): by_name[n] for s, n in re.findall(r'\[SPECIES_(\w+)\]\s*=\s*(s\w+LevelUpLearnset)', pointers)} - - -def initial_moves(learnset, level): - """GiveBoxMonInitialMoveset: each level-up move up to `level` in turn; - one already known is skipped, a fifth pushes out the first.""" - known = [] - for move_level, move in learnset: - if move_level > level: - break - if move in known: - continue - if len(known) == 4: - known.pop(0) - known.append(move) - return known - - -def charmap(text): - """{character: byte} for the single characters charmap.txt maps.""" - chars = {} - for char, code in re.findall(r"^'(\\?.)'\s*=\s*([0-9A-F]{2})\s*$", text, re.M): - chars[char[-1]] = int(code, 16) - return chars - - -def name_sum(name, chars): - return sum(chars[c] for c in name) - - -def species_names(text): - return {slug(name, SPECIES_SLUGS): value for name, value in re.findall(r'\[SPECIES_(\w+)\]\s*=\s*_\("(.*?)"\)', text)} - - -def parties(text, moves_at): - """sParty_X: [(species, level, iv, [moves]), ...]; `moves_at(species, - level)` gives a member's moves where the party doesn't.""" - data = {} - # A placeholder's {DUMMY_TRAINER_MON} on one line doesn't match. - for name, body in re.findall(r'struct TrainerMon\w+ (sParty_\w+)\[\]\s*=\s*\{\n((?:(?!\nstatic ).)*?)\n\};', text, re.S): - party = [] - for mon in re.findall(r'\{(.*?)\n \}', body, re.S): - species, level = slug(field(mon, 'species')[len('SPECIES_'):], SPECIES_SLUGS), int(field(mon, 'lvl')) - given = re.search(r'\.moves\s*=\s*\{(.*?)\}', mon) - if given: - moves = [slug(m.strip()[len('MOVE_'):], MOVE_SLUGS) for m in given.group(1).split(',') if m.strip() != 'MOVE_NONE'] - else: - moves = moves_at(species, level) - party.append((species, level, int(field(mon, 'iv')), moves)) - data[name] = party - return data - - -def personality_base(body): - """CreateNPCTrainerParty's personality before the name hash.""" - if field(body, 'doubleBattle') == 'TRUE': - return 0x80 - if 'F_TRAINER_FEMALE' in field(body, 'encounterMusic_gender'): - return 0x78 - return 0x88 - - -def trainers(text, party_text, learned, names, chars): - by_party = parties(party_text, lambda species, level: initial_moves(learned.get(species, []), level)) - data = {} - for name, body in entries(text, 'TRAINER'): - if name == 'NONE': - continue - party = re.search(r'\.party\s*=\s*\w+\((sParty_\w+)\)', body) - # Left out: the Ruby/Sapphire placeholders (DUMMY_TRAINER_MON). - if not party or party.group(1) not in by_party: - continue - trainer_sum = name_sum(re.search(r'\.trainerName\s*=\s*_\("(.*?)"\)', body).group(1), chars) - name_hash = 0 - members = [] - for species, level, iv, moves in by_party[party.group(1)]: - name_hash += trainer_sum + name_sum(names[species], chars) - nature = ((personality_base(body) + (name_hash << 8)) & 0xFFFFFFFF) % 25 - members.append([species, level, iv, nature, moves]) - items = re.search(r'\.items\s*=\s*\{(.*?)\}', body).group(1) - data['TRAINER_' + name] = { - 'ai': [slug(flag) for flag in AI_FLAG.findall(field(body, 'aiFlags') or '')], - 'items': [slug(item.strip()[len('ITEM_'):]) for item in items.split(',') if item.strip() not in ('', 'ITEM_NONE')], - 'party': members, - } - return data - - -def script_trainers(text): - """{label: TRAINER_X} for each script whose first line battles a trainer.""" - return dict(re.findall(r'^(\w+)::\n\s*trainerbattle\w* (TRAINER_\w+)', text, re.M)) - - -def map_trainers(decomp): - """The trainers each map battles: in its own scripts, and its objects' - scripts in data/scripts/trainers.inc (most trainers on routes).""" - groups = json.loads(decomp.read('data/maps/map_groups.json')) - names = sorted(m for group in groups['group_order'] for m in groups[group]) - shared = script_trainers(decomp.read('data/scripts/trainers.inc').decode()) - read = lambda m: (decomp.read(f'data/maps/{m}/scripts.inc').decode(), json.loads(decomp.read(f'data/maps/{m}/map.json'))) - with ThreadPoolExecutor(16) as pool: - sources = list(pool.map(read, names)) - data = {} - for name, (scripts, source) in zip(names, sources): - battled = set(re.findall(r'trainerbattle\w* (TRAINER_\w+)', scripts)) - battled |= {shared[o['script']] for o in source.get('object_events', []) if o.get('script') in shared} - if battled: - data[name] = sorted(battled) - return data - - -def json_lines(data): - """A JSON object (or a list), one entry per line.""" - if isinstance(data, list): - lines = [json.dumps(item) for item in data] - return '[\n' + ',\n'.join(lines) + '\n]\n' - lines = [f'{json.dumps(key)}: {json.dumps(value)}' for key, value in data.items()] - return '{\n' + ',\n'.join(lines) + '\n}\n' - - -def files(decomp): - read = lambda rel: decomp.read(rel).decode() - return { - 'type_chart': json_lines(type_chart(read('src/battle_main.c'))), - 'species': json_lines(species(read('src/data/pokemon/species_info.h'))), - 'moves': json_lines(moves(read('src/data/battle_moves.h'))), - 'trainers': json_lines(trainers( - read('src/data/trainers.h'), read('src/data/trainer_parties.h'), - learnsets(read('src/data/pokemon/level_up_learnsets.h'), read('src/data/pokemon/level_up_learnset_pointers.h')), - species_names(read('src/data/text/species_names.h')), charmap(read('charmap.txt')), - )), - 'map_trainers': json_lines(map_trainers(decomp)), - } - - -def main(): - parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) - parser.add_argument('--commit', default=frlg_maps.COMMIT) - parser.add_argument('--cache', default=os.path.expanduser('~/.cache/pokefirered')) - parser.add_argument('--out', required=True, help='folder of the .json files') - parser.add_argument('--check', action='store_true', help='check the files in --out instead of writing them') - args = parser.parse_args() - generated = files(frlg_maps.Decomp(args.commit, args.cache)) - if args.check: - differ = [] - for name, text in generated.items(): - path = os.path.join(args.out, name + '.json') - if not os.path.exists(path) or open(path, newline='').read() != text: - differ.append(name) - if differ: - sys.exit(f'Differ from the generator: {" ".join(differ)}. Regenerate them without --check.') - print(f'{len(generated)} files in {args.out} match the generator.') - return - os.makedirs(args.out, exist_ok=True) - for name, text in generated.items(): - with open(os.path.join(args.out, name + '.json'), 'w', newline='') as out: - out.write(text) +from pokesim.games.frlg.battle_data_export import main if __name__ == '__main__': diff --git a/devtools/maps/frlg_maps.py b/devtools/maps/frlg_maps.py deleted file mode 100644 index 6af5fd6f06..0000000000 --- a/devtools/maps/frlg_maps.py +++ /dev/null @@ -1,444 +0,0 @@ -"""Writes FRLG overworld maps as JSON, from the pret/pokefirered decompilation. - -TODO: move the maps to PokemonAutomation/Packages (Resources/PokemonFRLG/Maps) when ready. - -Usage: - python3 devtools/maps/frlg_maps.py --out SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps \ - Route3 Route4 Route4_PokemonCenter_1F - python3 devtools/maps/frlg_maps.py --out - python3 devtools/maps/frlg_maps.py --out --check - -Downloads each map's data/maps//map.json, its layout's map.bin and its -tilesets' metatile_attributes.bin at --commit into --cache, then writes -/.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 -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. - -Without map names, the maps are the ones already in --out; with them, those -maps are added to the ones in --out, so warps and connections still join -them all. --check writes nothing: it regenerates them and fails if any file -differs. The program -builds in the files of SerialPrograms/Source/VideoGames/PokemonFRLG/ -Overworld/Maps, the folder to write and check. -""" -import argparse -import json -import os -import re -import struct -import subprocess -import sys - -COMMIT = 'ce6406d8c2eaf46d543c8a2606de0c3cb1951982' -# When COMMIT was pinned, for each map's "source". -COMMIT_DATE = '2026-10-31' - -# Behaviors with a glyph of their own (Pokemon_MapData.h has the legend). -TERRAIN = { - 'MB_TALL_GRASS': '~', 'MB_WARP_DOOR': 'D', - 'MB_IMPASSABLE_NORTH': '8', 'MB_IMPASSABLE_SOUTH': '2', - 'MB_IMPASSABLE_EAST': '6', 'MB_IMPASSABLE_WEST': '4', -} -# Open tiles whose warp is taken other than by walking into it: how. -WARP_ENTRIES = { - 'MB_CAVE_DOOR': 'cave_entrance', - 'MB_LADDER': 'step_on', 'MB_UP_ESCALATOR': 'step_on', 'MB_DOWN_ESCALATOR': 'step_on', - 'MB_SOUTH_ARROW_WARP': 'walk_south', 'MB_NORTH_ARROW_WARP': 'walk_north', - 'MB_EAST_ARROW_WARP': 'walk_east', 'MB_WEST_ARROW_WARP': 'walk_west', - # Stairs at the side of a room warp like an exit mat, the way the stairs - # go up or down (IsDirectionalStairWarpMetatileBehavior()). - 'MB_UP_RIGHT_STAIR_WARP': 'walk_east', 'MB_DOWN_RIGHT_STAIR_WARP': 'walk_east', - 'MB_UP_LEFT_STAIR_WARP': 'walk_west', 'MB_DOWN_LEFT_STAIR_WARP': 'walk_west', -} -# Ledges, by the way the player hops over them. -LEDGES = {'MB_JUMP_NORTH': '^', 'MB_JUMP_SOUTH': 'v', 'MB_JUMP_WEST': '<', 'MB_JUMP_EAST': '>'} -FLOOR = ('MB_NORMAL', 'MB_CAVE', 'MB_ROCK_STAIRS', 'MB_TALL_GRASS') -# A metatile's encounter type (METATILE_ATTRIBUTE_ENCOUNTER_TYPE in -# include/fieldmap.h): on a map with land encounters, a step onto a LAND -# tile may start a wild battle, as on every floor tile of a cave. -ENCOUNTER_TYPE_SHIFT, ENCOUNTER_TYPE_MASK = 24, 0x7 -TILE_ENCOUNTER_LAND = 1 -# Open tiles closed on one side, and the region that lists those of them -# with wild encounters, which their glyph can't say. -CLOSED_GLYPHS = '8264' -WILD_REGION = 'wild' -DIRECTIONS = {'up': 'north', 'down': 'south', 'left': 'west', 'right': 'east'} - -# Places and flag sets the decompilation doesn't name, written into the map -# they belong to. -# A `*_front` point is where the player stands to talk to someone across a -# counter, or to walk north through a door. -POINTS = { - # Where a new game starts (WarpToPlayersRoom() in src/new_game.c). - 'PalletTown_PlayersHouse_2F': {'start': (6, 6)}, - 'PalletTown': {'oaks_lab_front': (16, 14)}, - # The clerk is across the counter to the west. - 'ViridianCity_Mart': {'clerk_front': (4, 3)}, - 'ViridianCity_PokemonCenter_1F': {'nurse_front': (7, 4)}, - 'PewterCity': {'gym_front': (15, 17)}, - 'PewterCity_PokemonCenter_1F': {'nurse_front': (7, 4)}, - 'PewterCity_Gym': {'brock_front': (6, 6)}, - # The Magikarp salesman is at (1, 3), west of `salesman_front`. - 'Route4_PokemonCenter_1F': {'nurse_front': (7, 4), 'salesman_front': (2, 3)}, - # The tile in front of the PC. - 'CeruleanCity_PokemonCenter_1F': {'pc': (11, 2), 'nurse_front': (7, 4)}, - # The clerk (2, 3) is across the counter to the west. - 'CeruleanCity_Mart': {'clerk_front': (4, 3)}, - # Below Misty (8, 6). - 'CeruleanCity_Gym': {'misty_front': (8, 7)}, - # Where the player stands after entering from Cerulean City. - 'CeruleanCave_1F': {'entrance': (33, 21)}, - # Mewtwo's tile. Its battle starts by talking to it from the south. - 'CeruleanCave_B1F': {'mewtwo': (7, 12)}, - 'VermilionCity_PokemonCenter_1F': {'nurse_front': (7, 4)}, -} -FLAG_SETS = { - # Set once the player has entered the Hall of Fame. They clear the way - # to Cerulean Cave: its guard, the rival and the Rocket. - 'CeruleanCity': {'after_hall_of_fame': [ - 'FLAG_HIDE_CERULEAN_CAVE_GUARD', - 'FLAG_HIDE_CERULEAN_RIVAL', - 'FLAG_HIDE_CERULEAN_ROCKET', - ]}, - # Set at every new game (EventScript_ResetAllMapFlags in - # data/event_scripts.s): people who are on the map only in a scene. - # The S.S. Anne's rival stands on the Captain's door until his scene - # brings him out. - 'SSAnne_2F_Corridor': {'new_game': ['FLAG_HIDE_SS_ANNE_RIVAL']}, - '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.raw = 'https://raw.githubusercontent.com/pret/pokefirered/' + commit - self.cache = os.path.join(cache, commit) - - def path(self, rel): - local = os.path.join(self.cache, rel) - if not os.path.exists(local): - os.makedirs(os.path.dirname(local), exist_ok=True) - subprocess.run(['curl', '-sfL', f'{self.raw}/{rel}', '-o', local], check=True) - return local - - def read(self, rel): - with open(self.path(rel), 'rb') as file: - return file.read() - - -def behaviors(decomp): - names = {} - for line in decomp.read('include/constants/metatile_behaviors.h').decode().splitlines(): - match = re.match(r'#define (MB_\w+)\s+(0x[0-9A-Fa-f]+|\d+)', line) - if match: - names[int(match.group(2), 0)] = match.group(1) - return names - - -def tileset_attributes(decomp, symbol): - """The metatile attributes of tileset `symbol` (gTileset_), from the - file src/data/tilesets/metatiles.h names for gMetatileAttributes_: - folder names don't always follow the symbol (gTileset_SSAnne is ss_anne).""" - attributes = symbol.replace('gTileset_', 'gMetatileAttributes_') - match = re.search( - r'\b' + attributes + r'\[\]\s*=\s*INCBIN_U32\("([^"]+)"\)', - decomp.read('src/data/tilesets/metatiles.h').decode(), - ) - if not match: - sys.exit(f'No {attributes} in src/data/tilesets/metatiles.h.') - data = decomp.read(match.group(1)) - return [struct.unpack_from('> ENCOUNTER_TYPE_SHIFT) & ENCOUNTER_TYPE_MASK == TILE_ENCOUNTER_LAND - - -def encounter_glyph(glyph, attributes): - """On a map with land encounters: `glyph` for a tile with these metatile - attributes, open floor where wild Pokemon appear written as tall grass.""" - return '~' if glyph == '.' and land_encounter(attributes) else glyph - - -def wild_edge(glyph, attributes): - """On a map with land encounters: whether a tile closed on one side, with - these metatile attributes, has wild encounters. Its glyph can't say so; - the map lists it in region WILD_REGION.""" - return glyph in CLOSED_GLYPHS and land_encounter(attributes) - - -def grid(decomp, layout, names, unhandled, signs=frozenset(), land_encounters=False): - """The map's tile rows, elevation rows, how the warp on each tile is - entered, by (x, y), where it isn't by walking into it, and the tiles closed - on one side that have wild encounters. With `land_encounters`, open floor - where wild Pokemon appear (a cave's) is written as tall grass, the glyph - for "open, with wild encounters".""" - width, height = layout['width'], layout['height'] - blocks = decomp.read(layout['blockdata_filepath']) - primary = tileset_attributes(decomp, layout['primary_tileset']) - secondary = tileset_attributes(decomp, layout['secondary_tileset']) - tiles, elevation, entries, wild_edges = [], [], {}, [] - for y in range(height): - row, levels = '', '' - for x in range(width): - value = struct.unpack_from('> 10) & 3, value >> 12 - attributes = primary[metatile] if metatile < 640 else secondary[metatile - 640] - behavior = names.get(attributes & 0x1ff, hex(attributes & 0x1ff)) - glyph, entry = tile_glyph(behavior, collision, unhandled, (x, y) in signs) - if land_encounters and entry is None: - glyph = encounter_glyph(glyph, attributes) - if wild_edge(glyph, attributes): - wild_edges.append([x, y]) - row += glyph - if entry: - entries[(x, y)] = entry - levels += '%x' % level - tiles.append(row) - elevation.append(levels) - return tiles, elevation, entries, wild_edges - - -def wander_box(obj, tiles): - """The tiles a wandering person may stand on, kept inside the map, or None - if they stand still.""" - movement = obj.get('movement_type', '') - if 'WANDER' not in movement: - return None - x = 0 if 'UP_AND_DOWN' in movement else int(obj.get('movement_range_x') or 0) - y = 0 if 'LEFT_AND_RIGHT' in movement else int(obj.get('movement_range_y') or 0) - if x == 0 and y == 0: - return None - return { - 'x0': max(obj['x'] - x, 0), 'y0': max(obj['y'] - y, 0), - 'x1': min(obj['x'] + x, len(tiles[0]) - 1), 'y1': min(obj['y'] + y, len(tiles) - 1), - } - - -# Which way a person stands, by how they move. -FACINGS = { - 'MOVEMENT_TYPE_FACE_UP': 'north', 'MOVEMENT_TYPE_FACE_DOWN': 'south', - 'MOVEMENT_TYPE_FACE_LEFT': 'west', 'MOVEMENT_TYPE_FACE_RIGHT': 'east', -} -# The ways a trainer who turns looks. A trainer who moves some other way -# (wanders, looks around) may look any way. -TURNING_LOOKS = { - 'MOVEMENT_TYPE_FACE_DOWN_AND_UP': ['south', 'north'], - 'MOVEMENT_TYPE_FACE_LEFT_AND_RIGHT': ['west', 'east'], - 'MOVEMENT_TYPE_FACE_UP_AND_LEFT': ['north', 'west'], - 'MOVEMENT_TYPE_FACE_UP_AND_RIGHT': ['north', 'east'], - 'MOVEMENT_TYPE_FACE_DOWN_AND_LEFT': ['south', 'west'], - 'MOVEMENT_TYPE_FACE_DOWN_AND_RIGHT': ['south', 'east'], - 'MOVEMENT_TYPE_WANDER_UP_AND_DOWN': ['north', 'south'], - 'MOVEMENT_TYPE_WANDER_LEFT_AND_RIGHT': ['west', 'east'], -} -ALL_LOOKS = ['north', 'east', 'south', 'west'] - - -def trainer(obj): - """A trainer's sight and, unless they only face one way, the ways they - look; None for anyone who doesn't battle on sight.""" - sight = int(obj.get('trainer_sight_or_berry_tree_id') or 0) - if obj.get('trainer_type') != 'TRAINER_TYPE_NORMAL' or sight < 1: - return None - movement = obj.get('movement_type', '') - if movement in FACINGS: - return {'sight': sight} - return {'sight': sight, 'looks': TURNING_LOOKS.get(movement, ALL_LOOKS)} - - -def map_object(obj, tiles): - kind = obj['graphics_id'].replace('OBJ_EVENT_GFX_', '').lower() - data = {'name': kind, 'kind': 'item' if kind == 'item_ball' else 'npc', 'x': obj['x'], 'y': obj['y']} - box = wander_box(obj, tiles) - if box: - data['wander'] = box - sight = trainer(obj) - if sight: - # A trainer who faces one way looks that way. - if 'looks' not in sight: - data['facing'] = FACINGS[obj['movement_type']] - data['trainer'] = sight - flag = obj.get('flag') or '0' - if flag != '0': - data['hide_flag'] = flag - return data - - -# Tiles the player never walks onto: their elevation only matters for doors, -# which the player is put on by a warp and leaves at once. -UNWALKABLE = '#^v<>DS' -GROUND = '3' - - -def ground_only(tiles, elevation): - """Whether every walkable tile is at ground level, so that the map can - leave out its elevation grid (the loader reads ground everywhere).""" - return all(level == GROUND for row, levels in zip(tiles, elevation) - for tile, level in zip(row, levels) if tile not in UNWALKABLE) - - -def warp_point(index): - return f'warp_{index}' - - -def warp(event, entries, loaded, sources): - """A warp event as MapData's warp: how it is entered, and the point it - leads to, if its map is loaded and has that warp.""" - data = {'x': event['x'], 'y': event['y'], 'enter': entries.get((event['x'], event['y']), 'walk_into')} - to_map, index = loaded.get(event['dest_map']), int(event['dest_warp_id']) - if to_map is not None and index < len(sources[to_map].get('warp_events', [])): - data['to_map'] = to_map - data['to_point'] = warp_point(index) - return data - - -def arrivals(sources, loaded): - """For each map, the indices of its warps that a warp leads to.""" - arriving = {name: set() for name in sources} - for source in sources.values(): - for event in source.get('warp_events', []): - to_map = loaded.get(event['dest_map']) - if to_map is not None and int(event['dest_warp_id']) < len(sources[to_map].get('warp_events', [])): - arriving[to_map].add(int(event['dest_warp_id'])) - return arriving - - -def land_encounter_maps(decomp): - """The ids of the maps that have land encounters (src/data/wild_encounters.json).""" - groups = json.loads(decomp.read('src/data/wild_encounters.json'))['wild_encounter_groups'] - return {e['map'] for group in groups for e in group.get('encounters', []) if 'land_mons' in e} - - -def map_json(decomp, name, sources, layouts, names, loaded, unhandled, land_maps=frozenset()): - source = sources[name] - signs = frozenset((e['x'], e['y']) for e in source.get('bg_events', []) if e.get('type') == 'sign') - tiles, elevation, entries, wild_edges = grid( - decomp, layouts[source['layout']], names, unhandled, signs, source['id'] in land_maps - ) - for x, y in 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]): - points[warp_point(index)] = [warp_events[index]['x'], warp_events[index]['y']] - data = { - 'name': name, - 'source': {'decomp_file': f'data/maps/{name}/map.json', 'revision': COMMIT, 'date': COMMIT_DATE}, - 'allow_running': source.get('allow_running', True), - 'tiles': tiles, 'elevation': elevation, - 'points': points, - 'regions': {WILD_REGION: wild_edges} if wild_edges else {}, - 'warps': [warp(event, entries, loaded, sources) for event in warp_events], - # A few objects stand off the map, where no route meets them. - 'objects': [ - map_object(obj, tiles) for obj in source.get('object_events', []) - if 0 <= obj['x'] < len(tiles[0]) and 0 <= obj['y'] < len(tiles) - ], - 'flag_sets': FLAG_SETS.get(name, {}), - 'connections': [ - {'side': DIRECTIONS[c['direction']], 'to_map': loaded[c['map']], 'offset': c['offset']} - for c in (source.get('connections') or []) if c['map'] in loaded - ], - } - if not data['regions']: - del data['regions'] - if ground_only(tiles, elevation): - del data['elevation'] - if data['allow_running']: - del data['allow_running'] - return data - - -def json_text(data): - text = json.dumps(data, indent=4) - # A point's [x, y] on one line. - return re.sub(r'\[\s*(-?\d+),\s*(-?\d+)\s*\]', r'[\1, \2]', text) + '\n' - - -def main(): - parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) - parser.add_argument('--commit', default=COMMIT) - parser.add_argument('--cache', default=os.path.expanduser('~/.cache/pokefirered')) - parser.add_argument('--out', required=True, help='folder of the .json files') - parser.add_argument('--check', action='store_true', help='check the files in --out instead of writing them') - parser.add_argument('maps', nargs='*', help='default: the maps already in --out') - args = parser.parse_args() - if os.path.isdir(args.out): - args.maps = sorted(set(args.maps) | {f[:-5] for f in os.listdir(args.out) if f.endswith('.json')}) - if not args.maps: - parser.error('no maps given, and none in --out') - - decomp = Decomp(args.commit, args.cache) - 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} - loaded = {source['id']: m for m, source in sources.items()} - unhandled = {} - land_maps = land_encounter_maps(decomp) - maps = [(name, json_text(map_json(decomp, name, sources, layouts, names, loaded, unhandled, land_maps))) for name in args.maps] - if unhandled: - print(f'Non-collision behaviors written as floor: {unhandled}') - if args.check: - differ = [] - for name, text in maps: - path = os.path.join(args.out, name + '.json') - if not os.path.exists(path) or open(path, newline='').read() != text: - differ.append(name) - if differ: - sys.exit(f'Differ from the generator: {" ".join(differ)}. Regenerate them without --check.') - print(f'{len(maps)} maps in {args.out} match the generator.') - return - os.makedirs(args.out, exist_ok=True) - for name, text in maps: - with open(os.path.join(args.out, name + '.json'), 'w', newline='') as out: - out.write(text) - - -if __name__ == '__main__': - main() diff --git a/devtools/maps/tests/test_frlg_maps.py b/devtools/maps/tests/test_frlg_maps.py deleted file mode 100644 index a25d3051d1..0000000000 --- a/devtools/maps/tests/test_frlg_maps.py +++ /dev/null @@ -1,90 +0,0 @@ -import unittest - -from devtools.maps import frlg_maps - -TILES = ['.....'] * 5 - - -def event(**fields): - obj = {'graphics_id': 'OBJ_EVENT_GFX_BUG_CATCHER', 'x': 2, 'y': 2, 'movement_type': 'MOVEMENT_TYPE_FACE_RIGHT', - 'movement_range_x': 1, 'movement_range_y': 1, 'trainer_type': 'TRAINER_TYPE_NORMAL', - 'trainer_sight_or_berry_tree_id': '3', 'flag': '0'} - obj.update(fields) - return obj - - -class TrainerTest(unittest.TestCase): - def test_facing_trainer_looks_ahead(self): - data = frlg_maps.map_object(event(), TILES) - self.assertEqual(data['facing'], 'east') - self.assertEqual(data['trainer'], {'sight': 3}) - - def test_wandering_trainer_looks_both_ways(self): - data = frlg_maps.map_object(event(movement_type='MOVEMENT_TYPE_WANDER_UP_AND_DOWN'), TILES) - self.assertNotIn('facing', data) - self.assertEqual(data['trainer'], {'sight': 3, 'looks': ['north', 'south']}) - self.assertEqual(data['wander'], {'x0': 2, 'y0': 1, 'x1': 2, 'y1': 3}) - - def test_trainer_looking_around_looks_every_way(self): - data = frlg_maps.map_object(event(movement_type='MOVEMENT_TYPE_LOOK_AROUND'), TILES) - self.assertEqual(data['trainer']['looks'], frlg_maps.ALL_LOOKS) - - def test_others_are_no_trainers(self): - for fields in ({'trainer_type': 'TRAINER_TYPE_NONE'}, {'trainer_sight_or_berry_tree_id': '0'}): - data = frlg_maps.map_object(event(**fields), TILES) - self.assertNotIn('trainer', data) - self.assertNotIn('facing', data) - - -class EncounterTest(unittest.TestCase): - # MtMoon_1F's cave floor: behavior MB_CAVE (0x08), encounter type LAND. - CAVE_FLOOR = 0x08 | (frlg_maps.TILE_ENCOUNTER_LAND << frlg_maps.ENCOUNTER_TYPE_SHIFT) - - def test_cave_floor_has_wild_encounters(self): - self.assertEqual(frlg_maps.encounter_glyph('.', self.CAVE_FLOOR), '~') - - def test_floor_without_encounters_stays_open(self): - self.assertEqual(frlg_maps.encounter_glyph('.', 0x08), '.') - - def test_walls_stay_walls(self): - self.assertEqual(frlg_maps.encounter_glyph('#', self.CAVE_FLOOR), '#') - - # MtMoon_B2F's floor closed on the north: MB_IMPASSABLE_NORTH (0x32), - # encounter type LAND, as wild as the cave floor around it. - CLOSED_NORTH = 0x32 | (frlg_maps.TILE_ENCOUNTER_LAND << frlg_maps.ENCOUNTER_TYPE_SHIFT) - - def test_closed_side_floor_has_wild_encounters(self): - for glyph in '8264': - self.assertTrue(frlg_maps.wild_edge(glyph, self.CLOSED_NORTH)) - - def test_closed_side_floor_without_encounters_is_not_wild(self): - self.assertFalse(frlg_maps.wild_edge('8', 0x32)) - - def test_other_tiles_are_no_wild_edges(self): - for glyph in '.~#': - self.assertFalse(frlg_maps.wild_edge(glyph, self.CAVE_FLOOR)) - - -class FakeDecomp: - def __init__(self, files): - self.files = files - - def read(self, rel): - return self.files[rel] - - -class TilesetTest(unittest.TestCase): - # gTileset_SSAnne's folder is ss_anne, which the symbol doesn't say. - METATILES = (b'const u32 gMetatileAttributes_SS[] = INCBIN_U32("data/tilesets/secondary/ss/metatile_attributes.bin");\n' - b'const u32 gMetatileAttributes_SSAnne[] = INCBIN_U32("data/tilesets/secondary/ss_anne/metatile_attributes.bin");\n') - - def test_attributes_from_the_file_metatiles_h_names(self): - decomp = FakeDecomp({ - 'src/data/tilesets/metatiles.h': self.METATILES, - 'data/tilesets/secondary/ss_anne/metatile_attributes.bin': bytes([1, 0, 0, 0, 0x22, 0, 0, 1]), - }) - self.assertEqual(frlg_maps.tileset_attributes(decomp, 'gTileset_SSAnne'), [1, 0x01000022]) - - -if __name__ == '__main__': - unittest.main() From fbc6ec2d1016752f1e33ebfb8c17661327ddcb4b Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 20:02:30 -0800 Subject: [PATCH 5/6] Adopt published v2 FRLG resource pack and approved Simulation tools --- .../workflows/cpp-ci-serial-programs-base.yml | 2 +- .github/workflows/runtime-map-reader.yml | 2 +- devtools/maps/RESOURCE_MAPS.md | 16 ++++++++-------- devtools/maps/map-resources.lock.json | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/cpp-ci-serial-programs-base.yml b/.github/workflows/cpp-ci-serial-programs-base.yml index 3e35ead78a..743c68fdbb 100644 --- a/.github/workflows/cpp-ci-serial-programs-base.yml +++ b/.github/workflows/cpp-ci-serial-programs-base.yml @@ -95,7 +95,7 @@ jobs: - name: Prepare approved FRLG map resources id: map-resources - uses: dayfine/PokemonSimulation/integrations/arduino-source/verify-map-packs@8436751a34b08da777fee11e6e2106624494f486 + uses: dayfine/PokemonSimulation/integrations/arduino-source/verify-map-packs@906956e94fc912ae9adb0e44845da780f3bc7e4c with: layout: resources operation: prepare diff --git a/.github/workflows/runtime-map-reader.yml b/.github/workflows/runtime-map-reader.yml index 8fd458d46b..9d6fda1c85 100644 --- a/.github/workflows/runtime-map-reader.yml +++ b/.github/workflows/runtime-map-reader.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v7 with: repository: dayfine/PokemonSimulation - ref: 40717c7c809c415c751fd7a348dfc1895f7ec3d7 + ref: 906956e94fc912ae9adb0e44845da780f3bc7e4c path: publisher - uses: actions/setup-python@v6 with: diff --git a/devtools/maps/RESOURCE_MAPS.md b/devtools/maps/RESOURCE_MAPS.md index f190f3cb98..7d314b00e4 100644 --- a/devtools/maps/RESOURCE_MAPS.md +++ b/devtools/maps/RESOURCE_MAPS.md @@ -7,20 +7,20 @@ unchanged. Resource preparation happens before configuring, with no implicit fallback to the deleted source directory and no map download during configure. This is a change of build input, not runtime filesystem loading. -The resource lock pins PokemonSimulation main `40717c7c809c415c751fd7a348dfc1895f7ec3d7`. -All 53 maps were compared byte-for-byte with the original native tree before -removing that copy. This initial adoption uses the approved v1 pack; upgrading -to v2 is a later explicit lock change after Simulation #56 lands and native -validation passes. #114's shared v2 reader is already present in this handoff. +The resource lock and CI tools pin published PokemonSimulation main +`906956e94fc912ae9adb0e44845da780f3bc7e4c`. The 53-map resource pack now uses the +compact v2 wire format, read by #114's shared decoder. V2 groups records by kind +and omits empty sections; map geometry, triggers and per-kind record order must +match the previous v1 pack. Native schema, map, route/story and recovery tests +verify this adoption; their current results are recorded in the fork PR. BDSP's held map differences are not imported or overwritten. Clone a full tools/data checkout outside deployed Resources, then explicitly -select the pinned tool version used by CI (a draft dependency until Simulation -#57 and #58 land): +select the published tool version used by CI: ```sh git clone https://github.com/dayfine/PokemonSimulation.git /path/to/pokesim -git -C /path/to/pokesim checkout 8436751a34b08da777fee11e6e2106624494f486 +git -C /path/to/pokesim checkout 906956e94fc912ae9adb0e44845da780f3bc7e4c PYTHONPATH=/path/to/pokesim/src python3 -m pokesim.maps.consumer_sync prepare \ --layout resources --source /path/to/pokesim --consumer /path/to/Arduino-Source cmake -S SerialPrograms -B /path/to/build \ diff --git a/devtools/maps/map-resources.lock.json b/devtools/maps/map-resources.lock.json index eea4b7199f..3bded16bc7 100644 --- a/devtools/maps/map-resources.lock.json +++ b/devtools/maps/map-resources.lock.json @@ -3,9 +3,9 @@ "repository": "dayfine/PokemonSimulation", "games": { "frlg": { - "revision": "40717c7c809c415c751fd7a348dfc1895f7ec3d7", + "revision": "906956e94fc912ae9adb0e44845da780f3bc7e4c", "manifest_path": "data/maps/runtime-manifest.json", - "manifest_sha256": "d2ee1c66222eee741103149c3a6db245ee51115ad6e87a79f7a3fe6e7a7b0176" + "manifest_sha256": "856e07a265da0b273172a7aa97a2aa335c90ea0a39162d50912b55fb60a86bc7" } } } From 3df56e0730328365eefddd8291c7505994de1425 Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 20:05:29 -0800 Subject: [PATCH 6/6] Allow native map parity fixtures from pinned v2 publishers --- .github/workflows/runtime-map-reader.yml | 4 ++-- devtools/runtime-map-tests/prepare_parity.py | 14 ++++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/runtime-map-reader.yml b/.github/workflows/runtime-map-reader.yml index 8fd458d46b..1fd59940a7 100644 --- a/.github/workflows/runtime-map-reader.yml +++ b/.github/workflows/runtime-map-reader.yml @@ -14,12 +14,12 @@ jobs: - uses: actions/checkout@v7 with: repository: dayfine/PokemonSimulation - ref: 40717c7c809c415c751fd7a348dfc1895f7ec3d7 + ref: 906956e94fc912ae9adb0e44845da780f3bc7e4c path: publisher - uses: actions/setup-python@v6 with: python-version: '3.12' - - run: python devtools/runtime-map-tests/prepare_parity.py --publisher publisher --out runtime-map-pairs.json + - run: python devtools/runtime-map-tests/prepare_parity.py --publisher publisher --publisher-revision 906956e94fc912ae9adb0e44845da780f3bc7e4c --out runtime-map-pairs.json - run: cmake -S devtools/runtime-map-tests -B build-runtime-maps -DCMAKE_BUILD_TYPE=Debug - run: cmake --build build-runtime-maps --config Debug -j4 - run: ctest --test-dir build-runtime-maps -C Debug --output-on-failure diff --git a/devtools/runtime-map-tests/prepare_parity.py b/devtools/runtime-map-tests/prepare_parity.py index 5e513c22c7..fb1cdea9ef 100644 --- a/devtools/runtime-map-tests/prepare_parity.py +++ b/devtools/runtime-map-tests/prepare_parity.py @@ -10,6 +10,7 @@ import argparse import json +import re from pathlib import Path import subprocess import sys @@ -22,19 +23,24 @@ def main(): parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('--publisher', type=Path, required=True) parser.add_argument('--out', type=Path, required=True) + parser.add_argument('--publisher-revision', default=PUBLISHER_REVISION, + help='Full immutable publisher SHA; defaults to the original v1 fixture pin') args = parser.parse_args() + revision = args.publisher_revision + if not re.fullmatch(r'[0-9a-f]{40}', revision): + parser.error('Publisher revision must be a full lowercase commit SHA') publisher = args.publisher.resolve() def git(*arguments): return subprocess.check_output(['git', '-C', str(publisher), *arguments], text=True).strip() - if git('rev-parse', 'HEAD') != PUBLISHER_REVISION or git('status', '--porcelain', '--untracked-files=no'): - parser.error('Publisher must be a clean checkout of ' + PUBLISHER_REVISION) + if git('rev-parse', 'HEAD') != revision or git('status', '--porcelain', '--untracked-files=no'): + parser.error('Publisher must be a clean checkout of ' + revision) sys.path.insert(0, str(publisher / 'src')) from pokesim.maps.item_identity import enrich_map from pokesim.maps.runtime_map_coordinates import compact_map, legacy_map pairs = [] for game in ('frlg', 'bdsp'): for path in sorted((publisher / 'data/games' / game / 'maps/runtime').glob('*.json')): - source = json.loads(path.read_text(encoding='utf-8')) + source = legacy_map(json.loads(path.read_text(encoding='utf-8'))) for variant in (source, enrich_map(source, game)): compact = compact_map(variant) pairs.append({'input': compact, 'expectation': legacy_map(compact)}) @@ -42,7 +48,7 @@ def git(*arguments): parser.error('Expected both variants of all 75 pinned maps') with args.out.open('x', encoding='utf-8') as stream: json.dump(pairs, stream) - print('Prepared 150 full map records from ' + PUBLISHER_REVISION) + print('Prepared 150 full map records from ' + revision) if __name__ == '__main__':