From 94c8cdf3a374737499494b61490bac0574b2427e Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 09:29:44 -0800 Subject: [PATCH 1/5] 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 7e6c91e27ac2c9efd7f6ad426698d87ebbce672d Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 09:49:03 -0800 Subject: [PATCH 2/5] 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 3/5] 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 d075fccd5a5826f84319abdfdd7dcac8c67f7624 Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 20:48:26 -0800 Subject: [PATCH 4/5] Run full native validation against complete pinned image fixtures --- .github/workflows/cpp-ci-serial-programs-base.yml | 4 +++- devtools/maps/RESOURCE_MAPS.md | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cpp-ci-serial-programs-base.yml b/.github/workflows/cpp-ci-serial-programs-base.yml index 743c68fdbb..713c372b30 100644 --- a/.github/workflows/cpp-ci-serial-programs-base.yml +++ b/.github/workflows/cpp-ci-serial-programs-base.yml @@ -260,7 +260,9 @@ jobs: uses: actions/checkout@v7 if: inputs.run-tests with: - repository: 'PokemonAutomation/CommandLineTests' + # Complete fork fixtures include pending FRLG image submissions. + repository: 'dayfine/CommandLineTests' + ref: '49e507fde8c3a54cd0264db0dbea7c3ee3618085' path: 'CommandLineTests' # The unit tests assume the downloadable resources they need are already downloaded diff --git a/devtools/maps/RESOURCE_MAPS.md b/devtools/maps/RESOURCE_MAPS.md index 7d314b00e4..9f35a64271 100644 --- a/devtools/maps/RESOURCE_MAPS.md +++ b/devtools/maps/RESOURCE_MAPS.md @@ -44,3 +44,13 @@ 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. + +## Full native test fixtures + +Fork CI pins `dayfine/CommandLineTests` at +`49e507fde8c3a54cd0264db0dbea7c3ee3618085`. This includes the pending FRLG +fixture submissions needed by the existing native image tests and preserves +all current upstream fixture files. It is a test-data pin, independent of the +map resource lock. The upstream-only fixture checkout lacked 69 required frames; +those failures must not be skipped or treated as passing detector tests. +Upstream handoff must also arrange publication of the required image fixtures. From 37d4bde7dce83034a0f4e4ca09b199833c20fd37 Mon Sep 17 00:00:00 2001 From: dayfine Date: Fri, 6 Nov 2026 21:04:29 -0800 Subject: [PATCH 5/5] Include native image golden sidecars in fixture pin --- .github/workflows/cpp-ci-serial-programs-base.yml | 2 +- devtools/maps/RESOURCE_MAPS.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cpp-ci-serial-programs-base.yml b/.github/workflows/cpp-ci-serial-programs-base.yml index 713c372b30..aed4c045ea 100644 --- a/.github/workflows/cpp-ci-serial-programs-base.yml +++ b/.github/workflows/cpp-ci-serial-programs-base.yml @@ -262,7 +262,7 @@ jobs: with: # Complete fork fixtures include pending FRLG image submissions. repository: 'dayfine/CommandLineTests' - ref: '49e507fde8c3a54cd0264db0dbea7c3ee3618085' + ref: 'd150a6c547434110a920f95ba7857b93d5bb9222' path: 'CommandLineTests' # The unit tests assume the downloadable resources they need are already downloaded diff --git a/devtools/maps/RESOURCE_MAPS.md b/devtools/maps/RESOURCE_MAPS.md index 9f35a64271..3b02a8d8f9 100644 --- a/devtools/maps/RESOURCE_MAPS.md +++ b/devtools/maps/RESOURCE_MAPS.md @@ -48,7 +48,7 @@ required data available through the agreed Packages repository/process. ## Full native test fixtures Fork CI pins `dayfine/CommandLineTests` at -`49e507fde8c3a54cd0264db0dbea7c3ee3618085`. This includes the pending FRLG +`d150a6c547434110a920f95ba7857b93d5bb9222`. This includes the pending FRLG fixture submissions needed by the existing native image tests and preserves all current upstream fixture files. It is a test-data pin, independent of the map resource lock. The upstream-only fixture checkout lacked 69 required frames;