diff --git a/.github/workflows/json-schema.yml b/.github/workflows/json-schema.yml index c423c66..dc06a6a 100644 --- a/.github/workflows/json-schema.yml +++ b/.github/workflows/json-schema.yml @@ -14,16 +14,19 @@ jobs: - run: python -m pip install -r schemas/requirements.txt - run: PYTHONPATH=src python -m unittest pokesim.formats.test_json_schema pokesim.story.test_native_export - run: PYTHONPATH=src python -m pokesim.formats.json_schema --check-published - - name: Audit the full FRLG source candidate without publishing it + - name: Audit the FRLG map set's candidate maps (statuses from the manifest) run: >- PYTHONPATH=src python -m pokesim.maps.frlg_import_audit - data/games/frlg/maps/source-candidate --schema + data/games/frlg/maps/runtime --schema + --manifest data/maps/runtime-manifest.json --scope data/games/frlg/maps/pokeguy-map-scope.json --out "${{ runner.temp }}/frlg-source-audit.json" - - name: Check full candidate compact formatting + - name: Check FRLG map statuses + run: PYTHONPATH=src python -m pokesim.maps.frlg_map_set check + # Candidate map bytes are checked exactly by frlg-source-reproduction below. + - name: Check the map scope's compact formatting run: >- PYTHONPATH=src python -m pokesim.formats.contract_format --check - data/games/frlg/maps/source-candidate/*.json data/games/frlg/maps/pokeguy-map-scope.json - uses: actions/upload-artifact@v4 with: @@ -45,4 +48,5 @@ jobs: run: >- PYTHONPATH=src python -m pokesim.maps.frlg_decomp_map_builder --all --scope data/games/frlg/maps/pokeguy-map-scope.json - --item-identities --out data/games/frlg/maps/source-candidate --check + --item-identities --out data/games/frlg/maps/runtime + --manifest data/maps/runtime-manifest.json --check diff --git a/README.md b/README.md index d612b49..d262de2 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ with configurable minimum-win-rate and reliability-quota criteria. The [AutoStory integration plan](docs/autostory-plan.md) tracks map ownership, route planning and shared FRLG/BDSP simulation. The [imported map packs](docs/maps/runtime-maps.md) -include 53 FRLG and 22 BDSP maps, portable generators, corrections, provenance +include 152 FRLG maps (57 verified, 95 candidates; one set with per-map status) and 22 BDSP maps, portable generators, corrections, provenance and a byte-identical export for Arduino consumers. The [local runtime-map planner](docs/navigation/RUNTIME_ROUTES.md) now computes and draws routes inside a pinned FRLG or BDSP map, recording its inputs and state. diff --git a/data/games/frlg/maps/README.md b/data/games/frlg/maps/README.md new file mode 100644 index 0000000..50d015d --- /dev/null +++ b/data/games/frlg/maps/README.md @@ -0,0 +1,123 @@ +# FRLG map set + +One copy of each FRLG map, in `runtime/`. Each map's **status** lives in its +entry in [`data/maps/runtime-manifest.json`](../../../maps/runtime-manifest.json): + +| Status | Meaning | Count | +|---|---|---:| +| `verified` | Reviewed content. `verified.basis` is `approved-runtime-pack` (in the approved pack before this set existed; no per-map run was recorded) or `console-run` (`run`, `date`, `checkpoint`, optional `consumer_revision`). | 57 | +| `candidate` | Generated from `pret/pokefirered@ce6406d8`, unreviewed. Bytes are owned by the generator. | 95 | + +Every entry also records its `source` (pret file and commit), the same object +as the map file's `source`. The status is kept out of the map bytes, so +promoting a map changes only the manifest: map hashes stay the same. + +`runtime/` is the directory the published manifest and the Arduino-Source +resource pin read (`data/games/frlg/maps/runtime/.json`). "Runtime" names +the published map format, not approval. There is no other FRLG map directory. + +## Workflow + +1. **Pull candidates into a run.** Bumping Arduino-Source's + `devtools/maps/map-resources.lock.json` to a newer main commit publishes every + map, candidates included, into `Packages/Resources/Pokemon/Maps/frlg`. AutoStory + parses only the maps named in its own map list, so a candidate is used once + it is added there. +2. **Promote on a console pass.** After a run walks a candidate map, record it: + + ```sh + PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set promote Route11 \ + --run --date 2026-11-10 --checkpoint 00.14 \ + --consumer-revision + ``` +3. **Publish the status.** Merge the manifest change to main and bump the + consumer lock to that commit (`manifest_sha256` changes; map bytes do not). + +A map **fix** is a separate change. It edits the map, updates its manifest +hash/corrections with evidence, and needs the usual review. Do not substitute a +candidate's bytes for a verified map to make a route pass. To regenerate +candidates after a generator change, generate into an empty directory, copy only +`candidate` maps into `runtime/`, then run `frlg_map_set sync-candidates`. +That command rewrites candidate entries from the files and never touches verified ones. + +## Scope + +[`pokeguy-map-scope.json`](pokeguy-map-scope.json) lists the 285 catalog maps +the generator does **not** publish as candidates (425-map catalog): + +| Excluded group | Maps | +|---|---:| +| Sevii, event islands and island Trainer Tower | 164 | +| Multiplayer facilities | 5 | +| Optional mainland caves, routes and legendary destinations | 13 | +| Unused interiors, cabins and upper floors | 77 | +| Mainland Pokemon Centers and elevators (scripted in AutoStory) | 26 | + +**Pokemon Centers and elevators are scripted in AutoStory, not mapped.** The +Centers are mostly identical and the elevators are small, so a per-building map +costs more than a script. `IndigoPlateau_PokemonCenter_1F` stays a candidate +because it is the Elite Four lobby. Eight Center 1F maps were verified before +this decision and stay in the set with their status. + +Verified maps may lie outside the scope: those 8 Centers, `CeruleanCave_1F`, +`CeruleanCave_2F`, `CeruleanCave_B1F`, `PalletTown_RivalsHouse` and +`PewterCity_Museum_1F`. Every candidate must be in scope and every in-scope +map must be present. + +This is a conservative first-Champion scope, not a visited-map ledger. The ship +healing cabin is **SSAnne_1F_Room6** (pinned source heal script). Tea, Fly, +Bill, Safari Surf and Warden reward rooms are retained. LeafGreen-specific +version conditions still need review. + +## Checks + +```sh +PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set check +PYTHONPATH=src python3 -m pokesim.maps.runtime_map_pack +PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --all \ + --scope data/games/frlg/maps/pokeguy-map-scope.json --item-identities \ + --out data/games/frlg/maps/runtime --manifest data/maps/runtime-manifest.json --check +python3 -m pip install -r schemas/requirements.txt +PYTHONPATH=src python3 -m pokesim.maps.frlg_import_audit data/games/frlg/maps/runtime \ + --schema --manifest data/maps/runtime-manifest.json \ + --scope data/games/frlg/maps/pokeguy-map-scope.json --out /tmp/frlg-import-audit.json +``` + +The generator `--check` regenerates the in-scope catalog. It requires every +candidate to match byte for byte and skips verified maps (reviewed content may +legitimately differ from the generator). The pack audit allows exactly two +kinds of unresolved link: + +- **Boundary**: the destination is scope-excluded and absent, so the link is a dead end, never a successful transition (59 warps, 2 connections). +- **Pending relink**: a candidate warps into a verified map that has no return point yet (31 warps). Verified maps were built while their neighbors were absent, so their warps toward candidates carry no destination, and some candidate connections are one-way. Relinking edits reviewed maps and needs approval with evidence. + +Pending relinks by verified map: CeruleanCity (CeruleanCity_House1), +LavenderTown (LavenderTown_Mart, LavenderTown_VolunteerPokemonHouse, +PokemonTower_1F), Route2 (Route2_EastBuilding), Route22 (Route22_NorthEntrance), +Route5 (Route5_SouthEntrance), Route6 (Route6_NorthEntrance), +SSAnne_1F_Corridor (SSAnne_1F_Room6), VermilionCity (VermilionCity_Mart), +ViridianCity (ViridianCity_Gym). One-way connections into verified maps come from +Route21_North, Route12, Route23, Route8, SaffronCity_Connection, Route11 and +SaffronCity. + +## Candidate gaps + +| Gap | Count | +|---|---:| +| Cells with unsupported non-collision behavior | 0 | +| Dynamic warp destinations | 0 | +| Pickups without a pinned identity catalog entry | 79 | + +84 candidates omit their elevation grid with an `elevation_omitted` reason in +`source`. Every relevant walkable cell is then default ground (3). 11 keep their +grids (bridges, stairs, multi-level terrain). Glyphs beyond the original set are +documented in [tile-legend.json](tile-legend.json): spin tiles `u d l r o` +(RocketHideout_B2F/B3F, ViridianCity_Gym), holes `H` (PokemonMansion_3F, +VictoryRoad_3F) and Strength buttons `B` (VictoryRoad_1F/2F/3F). Arduino's +native decoder needs those glyphs before those maps join its map list. + +NPCs and pickups keep source event, script and optional local-ID provenance. +`source_event` is a zero-based source array index, not an in-game object ID. +Scripted geometry, flags, hidden/background interactions, coordinate triggers +and game-version differences still need review. Structural validity does not +establish story traversability. diff --git a/data/games/frlg/maps/pokeguy-map-scope.json b/data/games/frlg/maps/pokeguy-map-scope.json index 71a0916..2d29f80 100644 --- a/data/games/frlg/maps/pokeguy-map-scope.json +++ b/data/games/frlg/maps/pokeguy-map-scope.json @@ -2,7 +2,7 @@ "format": "pokesim-frlg-map-scope/1", "source_revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "catalog_count": 425, - "purpose": "PokeGuy first-Champion candidate; conservative review scope, not an exact visited-map ledger.", + "purpose": "PokeGuy first-Champion candidate scope: the maps the generator publishes as candidates. Conservative review scope, not an exact visited-map ledger. Verified maps may lie outside it; see README.md.", "evidence": { "notes_commit": "11cbf77e0271e97b3639f9d5d419d0549ebec0bf", "notes_path": "pokemon_sv/FRLG_POKEGUY_15934_VIDEO_NOTES.md", @@ -205,7 +205,7 @@ }, { "reason": "unused-interiors", - "basis": "No entry in the reviewed run; required reward rooms, traversed houses, ship healing cabin and uncertain Silph floors are retained. Alternative healing plans may need to restore Pokemon Centers.", + "basis": "No entry in the reviewed run; required reward rooms, traversed houses, ship healing cabin and uncertain Silph floors are retained.", "maps": [ "CeladonCity_Condominiums_2F", "CeladonCity_Condominiums_3F", @@ -214,21 +214,14 @@ "CeladonCity_DepartmentStore_2F", "CeladonCity_DepartmentStore_3F", "CeladonCity_DepartmentStore_4F", - "CeladonCity_DepartmentStore_Elevator", "CeladonCity_DepartmentStore_Roof", "CeladonCity_GameCorner_PrizeRoom", "CeladonCity_Hotel", "CeladonCity_House1", - "CeladonCity_PokemonCenter_1F", - "CeladonCity_PokemonCenter_2F", "CeladonCity_Restaurant", "CeruleanCity_House3", "CeruleanCity_House4", "CeruleanCity_House5", - "CeruleanCity_PokemonCenter_1F", - "CeruleanCity_PokemonCenter_2F", - "CinnabarIsland_PokemonCenter_1F", - "CinnabarIsland_PokemonCenter_2F", "CinnabarIsland_PokemonLab_Entrance", "CinnabarIsland_PokemonLab_ExperimentRoom", "CinnabarIsland_PokemonLab_Lounge", @@ -236,24 +229,14 @@ "FuchsiaCity_House1", "FuchsiaCity_House2", "FuchsiaCity_House3", - "FuchsiaCity_PokemonCenter_1F", - "FuchsiaCity_PokemonCenter_2F", "FuchsiaCity_SafariZone_Office", - "IndigoPlateau_PokemonCenter_2F", "LavenderTown_House1", "LavenderTown_House2", - "LavenderTown_PokemonCenter_1F", - "LavenderTown_PokemonCenter_2F", "PalletTown_RivalsHouse", "PewterCity_House1", "PewterCity_House2", "PewterCity_Museum_1F", "PewterCity_Museum_2F", - "PewterCity_PokemonCenter_1F", - "PewterCity_PokemonCenter_2F", - "RocketHideout_Elevator", - "Route10_PokemonCenter_1F", - "Route10_PokemonCenter_2F", "Route11_EastEntrance_2F", "Route12_FishingHouse", "Route12_NorthEntrance_2F", @@ -263,8 +246,6 @@ "Route19_UnusedHouse", "Route23_UnusedHouse", "Route2_House", - "Route4_PokemonCenter_1F", - "Route4_PokemonCenter_2F", "Route5_PokemonDayCare", "Route6_UnusedHouse", "SSAnne_1F_Room1", @@ -297,19 +278,44 @@ "SaffronCity_Dojo", "SaffronCity_House", "SaffronCity_MrPsychicsHouse", - "SaffronCity_PokemonCenter_1F", - "SaffronCity_PokemonCenter_2F", "SaffronCity_PokemonTrainerFanClub", - "SilphCo_Elevator", "VermilionCity_House1", "VermilionCity_House2", "VermilionCity_House3", + "ViridianCity_House", + "ViridianCity_School" + ] + }, + { + "reason": "scripted-in-autostory", + "basis": "Mainland Pokemon Centers (1F/2F) and elevators are scripted in AutoStory, not mapped: the Centers are mostly identical and the elevators are small, so per-building maps cost more than a script. IndigoPlateau_PokemonCenter_1F stays mapped as the Elite Four lobby. Center maps already verified before this decision remain in the map set with their status.", + "maps": [ + "CeladonCity_DepartmentStore_Elevator", + "CeladonCity_PokemonCenter_1F", + "CeladonCity_PokemonCenter_2F", + "CeruleanCity_PokemonCenter_1F", + "CeruleanCity_PokemonCenter_2F", + "CinnabarIsland_PokemonCenter_1F", + "CinnabarIsland_PokemonCenter_2F", + "FuchsiaCity_PokemonCenter_1F", + "FuchsiaCity_PokemonCenter_2F", + "IndigoPlateau_PokemonCenter_2F", + "LavenderTown_PokemonCenter_1F", + "LavenderTown_PokemonCenter_2F", + "PewterCity_PokemonCenter_1F", + "PewterCity_PokemonCenter_2F", + "RocketHideout_Elevator", + "Route10_PokemonCenter_1F", + "Route10_PokemonCenter_2F", + "Route4_PokemonCenter_1F", + "Route4_PokemonCenter_2F", + "SaffronCity_PokemonCenter_1F", + "SaffronCity_PokemonCenter_2F", + "SilphCo_Elevator", "VermilionCity_PokemonCenter_1F", "VermilionCity_PokemonCenter_2F", - "ViridianCity_House", "ViridianCity_PokemonCenter_1F", - "ViridianCity_PokemonCenter_2F", - "ViridianCity_School" + "ViridianCity_PokemonCenter_2F" ] } ] diff --git a/data/games/frlg/maps/source-candidate/CeladonCity.json b/data/games/frlg/maps/runtime/CeladonCity.json similarity index 99% rename from data/games/frlg/maps/source-candidate/CeladonCity.json rename to data/games/frlg/maps/runtime/CeladonCity.json index e40f367..7631946 100644 --- a/data/games/frlg/maps/source-candidate/CeladonCity.json +++ b/data/games/frlg/maps/runtime/CeladonCity.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CeladonCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/CeladonCity_Condominiums_1F.json b/data/games/frlg/maps/runtime/CeladonCity_Condominiums_1F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/CeladonCity_Condominiums_1F.json rename to data/games/frlg/maps/runtime/CeladonCity_Condominiums_1F.json index b0ea3c0..3afc216 100644 --- a/data/games/frlg/maps/source-candidate/CeladonCity_Condominiums_1F.json +++ b/data/games/frlg/maps/runtime/CeladonCity_Condominiums_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CeladonCity_Condominiums_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CeladonCity_DepartmentStore_1F.json b/data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_1F.json similarity index 96% rename from data/games/frlg/maps/source-candidate/CeladonCity_DepartmentStore_1F.json rename to data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_1F.json index db9e6af..b9a7e8f 100644 --- a/data/games/frlg/maps/source-candidate/CeladonCity_DepartmentStore_1F.json +++ b/data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CeladonCity_DepartmentStore_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CeladonCity_DepartmentStore_5F.json b/data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_5F.json similarity index 96% rename from data/games/frlg/maps/source-candidate/CeladonCity_DepartmentStore_5F.json rename to data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_5F.json index 0434219..81900af 100644 --- a/data/games/frlg/maps/source-candidate/CeladonCity_DepartmentStore_5F.json +++ b/data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_5F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CeladonCity_DepartmentStore_5F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CeladonCity_GameCorner.json b/data/games/frlg/maps/runtime/CeladonCity_GameCorner.json similarity index 98% rename from data/games/frlg/maps/source-candidate/CeladonCity_GameCorner.json rename to data/games/frlg/maps/runtime/CeladonCity_GameCorner.json index 95ab13b..8c38b4e 100644 --- a/data/games/frlg/maps/source-candidate/CeladonCity_GameCorner.json +++ b/data/games/frlg/maps/runtime/CeladonCity_GameCorner.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CeladonCity_GameCorner/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CeladonCity_Gym.json b/data/games/frlg/maps/runtime/CeladonCity_Gym.json similarity index 98% rename from data/games/frlg/maps/source-candidate/CeladonCity_Gym.json rename to data/games/frlg/maps/runtime/CeladonCity_Gym.json index a818430..ca39cb5 100644 --- a/data/games/frlg/maps/source-candidate/CeladonCity_Gym.json +++ b/data/games/frlg/maps/runtime/CeladonCity_Gym.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CeladonCity_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CeruleanCity_House1.json b/data/games/frlg/maps/runtime/CeruleanCity_House1.json similarity index 95% rename from data/games/frlg/maps/source-candidate/CeruleanCity_House1.json rename to data/games/frlg/maps/runtime/CeruleanCity_House1.json index 57febbf..18fb648 100644 --- a/data/games/frlg/maps/source-candidate/CeruleanCity_House1.json +++ b/data/games/frlg/maps/runtime/CeruleanCity_House1.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CeruleanCity_House1/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CinnabarIsland.json b/data/games/frlg/maps/runtime/CinnabarIsland.json similarity index 97% rename from data/games/frlg/maps/source-candidate/CinnabarIsland.json rename to data/games/frlg/maps/runtime/CinnabarIsland.json index 42ddc92..af261e1 100644 --- a/data/games/frlg/maps/source-candidate/CinnabarIsland.json +++ b/data/games/frlg/maps/runtime/CinnabarIsland.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CinnabarIsland/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/CinnabarIsland_Gym.json b/data/games/frlg/maps/runtime/CinnabarIsland_Gym.json similarity index 98% rename from data/games/frlg/maps/source-candidate/CinnabarIsland_Gym.json rename to data/games/frlg/maps/runtime/CinnabarIsland_Gym.json index bd9d92f..d1b31f6 100644 --- a/data/games/frlg/maps/source-candidate/CinnabarIsland_Gym.json +++ b/data/games/frlg/maps/runtime/CinnabarIsland_Gym.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CinnabarIsland_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CinnabarIsland_Mart.json b/data/games/frlg/maps/runtime/CinnabarIsland_Mart.json similarity index 95% rename from data/games/frlg/maps/source-candidate/CinnabarIsland_Mart.json rename to data/games/frlg/maps/runtime/CinnabarIsland_Mart.json index b950081..1bc4eae 100644 --- a/data/games/frlg/maps/source-candidate/CinnabarIsland_Mart.json +++ b/data/games/frlg/maps/runtime/CinnabarIsland_Mart.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/CinnabarIsland_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/FuchsiaCity.json b/data/games/frlg/maps/runtime/FuchsiaCity.json similarity index 99% rename from data/games/frlg/maps/source-candidate/FuchsiaCity.json rename to data/games/frlg/maps/runtime/FuchsiaCity.json index 5f8d2eb..b971c35 100644 --- a/data/games/frlg/maps/source-candidate/FuchsiaCity.json +++ b/data/games/frlg/maps/runtime/FuchsiaCity.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/FuchsiaCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/FuchsiaCity_Gym.json b/data/games/frlg/maps/runtime/FuchsiaCity_Gym.json similarity index 97% rename from data/games/frlg/maps/source-candidate/FuchsiaCity_Gym.json rename to data/games/frlg/maps/runtime/FuchsiaCity_Gym.json index 45315f7..ed7ab70 100644 --- a/data/games/frlg/maps/source-candidate/FuchsiaCity_Gym.json +++ b/data/games/frlg/maps/runtime/FuchsiaCity_Gym.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/FuchsiaCity_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/FuchsiaCity_Mart.json b/data/games/frlg/maps/runtime/FuchsiaCity_Mart.json similarity index 95% rename from data/games/frlg/maps/source-candidate/FuchsiaCity_Mart.json rename to data/games/frlg/maps/runtime/FuchsiaCity_Mart.json index 19365df..1c1fdd4 100644 --- a/data/games/frlg/maps/source-candidate/FuchsiaCity_Mart.json +++ b/data/games/frlg/maps/runtime/FuchsiaCity_Mart.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/FuchsiaCity_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/FuchsiaCity_SafariZone_Entrance.json b/data/games/frlg/maps/runtime/FuchsiaCity_SafariZone_Entrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/FuchsiaCity_SafariZone_Entrance.json rename to data/games/frlg/maps/runtime/FuchsiaCity_SafariZone_Entrance.json index 9da0830..43a807a 100644 --- a/data/games/frlg/maps/source-candidate/FuchsiaCity_SafariZone_Entrance.json +++ b/data/games/frlg/maps/runtime/FuchsiaCity_SafariZone_Entrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/FuchsiaCity_SafariZone_Entrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/FuchsiaCity_WardensHouse.json b/data/games/frlg/maps/runtime/FuchsiaCity_WardensHouse.json similarity index 96% rename from data/games/frlg/maps/source-candidate/FuchsiaCity_WardensHouse.json rename to data/games/frlg/maps/runtime/FuchsiaCity_WardensHouse.json index 9d4c721..a5489fc 100644 --- a/data/games/frlg/maps/source-candidate/FuchsiaCity_WardensHouse.json +++ b/data/games/frlg/maps/runtime/FuchsiaCity_WardensHouse.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/FuchsiaCity_WardensHouse/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/IndigoPlateau_Exterior.json b/data/games/frlg/maps/runtime/IndigoPlateau_Exterior.json similarity index 96% rename from data/games/frlg/maps/source-candidate/IndigoPlateau_Exterior.json rename to data/games/frlg/maps/runtime/IndigoPlateau_Exterior.json index 9277c66..11e99d1 100644 --- a/data/games/frlg/maps/source-candidate/IndigoPlateau_Exterior.json +++ b/data/games/frlg/maps/runtime/IndigoPlateau_Exterior.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/IndigoPlateau_Exterior/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/IndigoPlateau_PokemonCenter_1F.json b/data/games/frlg/maps/runtime/IndigoPlateau_PokemonCenter_1F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/IndigoPlateau_PokemonCenter_1F.json rename to data/games/frlg/maps/runtime/IndigoPlateau_PokemonCenter_1F.json index 1ac2590..20c64a9 100644 --- a/data/games/frlg/maps/source-candidate/IndigoPlateau_PokemonCenter_1F.json +++ b/data/games/frlg/maps/runtime/IndigoPlateau_PokemonCenter_1F.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/IndigoPlateau_PokemonCenter_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "allow_running": false, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/LavenderTown_Mart.json b/data/games/frlg/maps/runtime/LavenderTown_Mart.json similarity index 96% rename from data/games/frlg/maps/source-candidate/LavenderTown_Mart.json rename to data/games/frlg/maps/runtime/LavenderTown_Mart.json index b223a07..0240ff7 100644 --- a/data/games/frlg/maps/source-candidate/LavenderTown_Mart.json +++ b/data/games/frlg/maps/runtime/LavenderTown_Mart.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/LavenderTown_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/LavenderTown_VolunteerPokemonHouse.json b/data/games/frlg/maps/runtime/LavenderTown_VolunteerPokemonHouse.json similarity index 97% rename from data/games/frlg/maps/source-candidate/LavenderTown_VolunteerPokemonHouse.json rename to data/games/frlg/maps/runtime/LavenderTown_VolunteerPokemonHouse.json index 23b9d3e..299365e 100644 --- a/data/games/frlg/maps/source-candidate/LavenderTown_VolunteerPokemonHouse.json +++ b/data/games/frlg/maps/runtime/LavenderTown_VolunteerPokemonHouse.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/LavenderTown_VolunteerPokemonHouse/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonLeague_AgathasRoom.json b/data/games/frlg/maps/runtime/PokemonLeague_AgathasRoom.json similarity index 95% rename from data/games/frlg/maps/source-candidate/PokemonLeague_AgathasRoom.json rename to data/games/frlg/maps/runtime/PokemonLeague_AgathasRoom.json index a99bac8..026a6de 100644 --- a/data/games/frlg/maps/source-candidate/PokemonLeague_AgathasRoom.json +++ b/data/games/frlg/maps/runtime/PokemonLeague_AgathasRoom.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonLeague_AgathasRoom/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonLeague_BrunosRoom.json b/data/games/frlg/maps/runtime/PokemonLeague_BrunosRoom.json similarity index 95% rename from data/games/frlg/maps/source-candidate/PokemonLeague_BrunosRoom.json rename to data/games/frlg/maps/runtime/PokemonLeague_BrunosRoom.json index 0b2aa44..e9e4bc7 100644 --- a/data/games/frlg/maps/source-candidate/PokemonLeague_BrunosRoom.json +++ b/data/games/frlg/maps/runtime/PokemonLeague_BrunosRoom.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonLeague_BrunosRoom/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonLeague_ChampionsRoom.json b/data/games/frlg/maps/runtime/PokemonLeague_ChampionsRoom.json similarity index 95% rename from data/games/frlg/maps/source-candidate/PokemonLeague_ChampionsRoom.json rename to data/games/frlg/maps/runtime/PokemonLeague_ChampionsRoom.json index 79ae75f..9e9cac6 100644 --- a/data/games/frlg/maps/source-candidate/PokemonLeague_ChampionsRoom.json +++ b/data/games/frlg/maps/runtime/PokemonLeague_ChampionsRoom.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/PokemonLeague_ChampionsRoom/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "allow_running": false, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/PokemonLeague_HallOfFame.json b/data/games/frlg/maps/runtime/PokemonLeague_HallOfFame.json similarity index 94% rename from data/games/frlg/maps/source-candidate/PokemonLeague_HallOfFame.json rename to data/games/frlg/maps/runtime/PokemonLeague_HallOfFame.json index 44f1528..d451cb4 100644 --- a/data/games/frlg/maps/source-candidate/PokemonLeague_HallOfFame.json +++ b/data/games/frlg/maps/runtime/PokemonLeague_HallOfFame.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonLeague_HallOfFame/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonLeague_LancesRoom.json b/data/games/frlg/maps/runtime/PokemonLeague_LancesRoom.json similarity index 96% rename from data/games/frlg/maps/source-candidate/PokemonLeague_LancesRoom.json rename to data/games/frlg/maps/runtime/PokemonLeague_LancesRoom.json index f90b75a..3c1041f 100644 --- a/data/games/frlg/maps/source-candidate/PokemonLeague_LancesRoom.json +++ b/data/games/frlg/maps/runtime/PokemonLeague_LancesRoom.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonLeague_LancesRoom/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonLeague_LoreleisRoom.json b/data/games/frlg/maps/runtime/PokemonLeague_LoreleisRoom.json similarity index 95% rename from data/games/frlg/maps/source-candidate/PokemonLeague_LoreleisRoom.json rename to data/games/frlg/maps/runtime/PokemonLeague_LoreleisRoom.json index 4d45599..d9ae0e6 100644 --- a/data/games/frlg/maps/source-candidate/PokemonLeague_LoreleisRoom.json +++ b/data/games/frlg/maps/runtime/PokemonLeague_LoreleisRoom.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonLeague_LoreleisRoom/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonMansion_1F.json b/data/games/frlg/maps/runtime/PokemonMansion_1F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/PokemonMansion_1F.json rename to data/games/frlg/maps/runtime/PokemonMansion_1F.json index 30407ed..9b72d4b 100644 --- a/data/games/frlg/maps/source-candidate/PokemonMansion_1F.json +++ b/data/games/frlg/maps/runtime/PokemonMansion_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonMansion_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/PokemonMansion_2F.json b/data/games/frlg/maps/runtime/PokemonMansion_2F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/PokemonMansion_2F.json rename to data/games/frlg/maps/runtime/PokemonMansion_2F.json index 9936acc..93139ae 100644 --- a/data/games/frlg/maps/source-candidate/PokemonMansion_2F.json +++ b/data/games/frlg/maps/runtime/PokemonMansion_2F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonMansion_2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/PokemonMansion_3F.json b/data/games/frlg/maps/runtime/PokemonMansion_3F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/PokemonMansion_3F.json rename to data/games/frlg/maps/runtime/PokemonMansion_3F.json index bc483c0..197562f 100644 --- a/data/games/frlg/maps/source-candidate/PokemonMansion_3F.json +++ b/data/games/frlg/maps/runtime/PokemonMansion_3F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonMansion_3F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/PokemonMansion_B1F.json b/data/games/frlg/maps/runtime/PokemonMansion_B1F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/PokemonMansion_B1F.json rename to data/games/frlg/maps/runtime/PokemonMansion_B1F.json index 9839175..cbdd396 100644 --- a/data/games/frlg/maps/source-candidate/PokemonMansion_B1F.json +++ b/data/games/frlg/maps/runtime/PokemonMansion_B1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonMansion_B1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/PokemonTower_1F.json b/data/games/frlg/maps/runtime/PokemonTower_1F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/PokemonTower_1F.json rename to data/games/frlg/maps/runtime/PokemonTower_1F.json index 20c1e04..644ee00 100644 --- a/data/games/frlg/maps/source-candidate/PokemonTower_1F.json +++ b/data/games/frlg/maps/runtime/PokemonTower_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonTower_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonTower_2F.json b/data/games/frlg/maps/runtime/PokemonTower_2F.json similarity index 96% rename from data/games/frlg/maps/source-candidate/PokemonTower_2F.json rename to data/games/frlg/maps/runtime/PokemonTower_2F.json index 4b8fba0..0797963 100644 --- a/data/games/frlg/maps/source-candidate/PokemonTower_2F.json +++ b/data/games/frlg/maps/runtime/PokemonTower_2F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonTower_2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonTower_3F.json b/data/games/frlg/maps/runtime/PokemonTower_3F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/PokemonTower_3F.json rename to data/games/frlg/maps/runtime/PokemonTower_3F.json index e330928..bfe28e2 100644 --- a/data/games/frlg/maps/source-candidate/PokemonTower_3F.json +++ b/data/games/frlg/maps/runtime/PokemonTower_3F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonTower_3F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonTower_4F.json b/data/games/frlg/maps/runtime/PokemonTower_4F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/PokemonTower_4F.json rename to data/games/frlg/maps/runtime/PokemonTower_4F.json index 1724e82..40cd8dc 100644 --- a/data/games/frlg/maps/source-candidate/PokemonTower_4F.json +++ b/data/games/frlg/maps/runtime/PokemonTower_4F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonTower_4F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonTower_5F.json b/data/games/frlg/maps/runtime/PokemonTower_5F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/PokemonTower_5F.json rename to data/games/frlg/maps/runtime/PokemonTower_5F.json index 01cfd6b..ab45704 100644 --- a/data/games/frlg/maps/source-candidate/PokemonTower_5F.json +++ b/data/games/frlg/maps/runtime/PokemonTower_5F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonTower_5F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonTower_6F.json b/data/games/frlg/maps/runtime/PokemonTower_6F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/PokemonTower_6F.json rename to data/games/frlg/maps/runtime/PokemonTower_6F.json index 670c06c..e8c4b9e 100644 --- a/data/games/frlg/maps/source-candidate/PokemonTower_6F.json +++ b/data/games/frlg/maps/runtime/PokemonTower_6F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonTower_6F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/PokemonTower_7F.json b/data/games/frlg/maps/runtime/PokemonTower_7F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/PokemonTower_7F.json rename to data/games/frlg/maps/runtime/PokemonTower_7F.json index 87c50a2..7c72731 100644 --- a/data/games/frlg/maps/source-candidate/PokemonTower_7F.json +++ b/data/games/frlg/maps/runtime/PokemonTower_7F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/PokemonTower_7F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/RocketHideout_B1F.json b/data/games/frlg/maps/runtime/RocketHideout_B1F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/RocketHideout_B1F.json rename to data/games/frlg/maps/runtime/RocketHideout_B1F.json index 6df84ff..f2f9938 100644 --- a/data/games/frlg/maps/source-candidate/RocketHideout_B1F.json +++ b/data/games/frlg/maps/runtime/RocketHideout_B1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/RocketHideout_B1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/RocketHideout_B2F.json b/data/games/frlg/maps/runtime/RocketHideout_B2F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/RocketHideout_B2F.json rename to data/games/frlg/maps/runtime/RocketHideout_B2F.json index 65e9f57..7a33cda 100644 --- a/data/games/frlg/maps/source-candidate/RocketHideout_B2F.json +++ b/data/games/frlg/maps/runtime/RocketHideout_B2F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/RocketHideout_B2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/RocketHideout_B3F.json b/data/games/frlg/maps/runtime/RocketHideout_B3F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/RocketHideout_B3F.json rename to data/games/frlg/maps/runtime/RocketHideout_B3F.json index 920b892..284ffc5 100644 --- a/data/games/frlg/maps/source-candidate/RocketHideout_B3F.json +++ b/data/games/frlg/maps/runtime/RocketHideout_B3F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/RocketHideout_B3F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/RocketHideout_B4F.json b/data/games/frlg/maps/runtime/RocketHideout_B4F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/RocketHideout_B4F.json rename to data/games/frlg/maps/runtime/RocketHideout_B4F.json index 295ef4b..eb43c2d 100644 --- a/data/games/frlg/maps/source-candidate/RocketHideout_B4F.json +++ b/data/games/frlg/maps/runtime/RocketHideout_B4F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/RocketHideout_B4F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route11.json b/data/games/frlg/maps/runtime/Route11.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route11.json rename to data/games/frlg/maps/runtime/Route11.json index 4796207..9042602 100644 --- a/data/games/frlg/maps/source-candidate/Route11.json +++ b/data/games/frlg/maps/runtime/Route11.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route11/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route11_EastEntrance_1F.json b/data/games/frlg/maps/runtime/Route11_EastEntrance_1F.json similarity index 96% rename from data/games/frlg/maps/source-candidate/Route11_EastEntrance_1F.json rename to data/games/frlg/maps/runtime/Route11_EastEntrance_1F.json index 93373c1..53d7b4a 100644 --- a/data/games/frlg/maps/source-candidate/Route11_EastEntrance_1F.json +++ b/data/games/frlg/maps/runtime/Route11_EastEntrance_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route11_EastEntrance_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route12.json b/data/games/frlg/maps/runtime/Route12.json similarity index 99% rename from data/games/frlg/maps/source-candidate/Route12.json rename to data/games/frlg/maps/runtime/Route12.json index 813f22c..18a107e 100644 --- a/data/games/frlg/maps/source-candidate/Route12.json +++ b/data/games/frlg/maps/runtime/Route12.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/Route12/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "###########..###########", diff --git a/data/games/frlg/maps/source-candidate/Route12_NorthEntrance_1F.json b/data/games/frlg/maps/runtime/Route12_NorthEntrance_1F.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route12_NorthEntrance_1F.json rename to data/games/frlg/maps/runtime/Route12_NorthEntrance_1F.json index 653a36d..0dff864 100644 --- a/data/games/frlg/maps/source-candidate/Route12_NorthEntrance_1F.json +++ b/data/games/frlg/maps/runtime/Route12_NorthEntrance_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route12_NorthEntrance_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route13.json b/data/games/frlg/maps/runtime/Route13.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route13.json rename to data/games/frlg/maps/runtime/Route13.json index 5a1d3ac..905bad3 100644 --- a/data/games/frlg/maps/source-candidate/Route13.json +++ b/data/games/frlg/maps/runtime/Route13.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route13/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route14.json b/data/games/frlg/maps/runtime/Route14.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route14.json rename to data/games/frlg/maps/runtime/Route14.json index da119fc..fe3ec8c 100644 --- a/data/games/frlg/maps/source-candidate/Route14.json +++ b/data/games/frlg/maps/runtime/Route14.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route14/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route15.json b/data/games/frlg/maps/runtime/Route15.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route15.json rename to data/games/frlg/maps/runtime/Route15.json index 00c37fd..d7721fd 100644 --- a/data/games/frlg/maps/source-candidate/Route15.json +++ b/data/games/frlg/maps/runtime/Route15.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route15/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route15_WestEntrance_1F.json b/data/games/frlg/maps/runtime/Route15_WestEntrance_1F.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route15_WestEntrance_1F.json rename to data/games/frlg/maps/runtime/Route15_WestEntrance_1F.json index 4c117d0..86eeafe 100644 --- a/data/games/frlg/maps/source-candidate/Route15_WestEntrance_1F.json +++ b/data/games/frlg/maps/runtime/Route15_WestEntrance_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route15_WestEntrance_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route16.json b/data/games/frlg/maps/runtime/Route16.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route16.json rename to data/games/frlg/maps/runtime/Route16.json index 5b2601f..a0e2371 100644 --- a/data/games/frlg/maps/source-candidate/Route16.json +++ b/data/games/frlg/maps/runtime/Route16.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route16/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route16_House.json b/data/games/frlg/maps/runtime/Route16_House.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route16_House.json rename to data/games/frlg/maps/runtime/Route16_House.json index 26e81d9..7ff0b74 100644 --- a/data/games/frlg/maps/source-candidate/Route16_House.json +++ b/data/games/frlg/maps/runtime/Route16_House.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route16_House/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/Route16_NorthEntrance_1F.json b/data/games/frlg/maps/runtime/Route16_NorthEntrance_1F.json similarity index 96% rename from data/games/frlg/maps/source-candidate/Route16_NorthEntrance_1F.json rename to data/games/frlg/maps/runtime/Route16_NorthEntrance_1F.json index 293657d..f714263 100644 --- a/data/games/frlg/maps/source-candidate/Route16_NorthEntrance_1F.json +++ b/data/games/frlg/maps/runtime/Route16_NorthEntrance_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route16_NorthEntrance_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route18.json b/data/games/frlg/maps/runtime/Route18.json similarity index 97% rename from data/games/frlg/maps/source-candidate/Route18.json rename to data/games/frlg/maps/runtime/Route18.json index 91d7028..e3920c7 100644 --- a/data/games/frlg/maps/source-candidate/Route18.json +++ b/data/games/frlg/maps/runtime/Route18.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route18/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route18_EastEntrance_1F.json b/data/games/frlg/maps/runtime/Route18_EastEntrance_1F.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route18_EastEntrance_1F.json rename to data/games/frlg/maps/runtime/Route18_EastEntrance_1F.json index 33b058d..a656b36 100644 --- a/data/games/frlg/maps/source-candidate/Route18_EastEntrance_1F.json +++ b/data/games/frlg/maps/runtime/Route18_EastEntrance_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route18_EastEntrance_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route19.json b/data/games/frlg/maps/runtime/Route19.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route19.json rename to data/games/frlg/maps/runtime/Route19.json index 10fb8fa..b70ec19 100644 --- a/data/games/frlg/maps/source-candidate/Route19.json +++ b/data/games/frlg/maps/runtime/Route19.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route19/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route20.json b/data/games/frlg/maps/runtime/Route20.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route20.json rename to data/games/frlg/maps/runtime/Route20.json index 7e19684..8207dbb 100644 --- a/data/games/frlg/maps/source-candidate/Route20.json +++ b/data/games/frlg/maps/runtime/Route20.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route20/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route21_North.json b/data/games/frlg/maps/runtime/Route21_North.json similarity index 97% rename from data/games/frlg/maps/source-candidate/Route21_North.json rename to data/games/frlg/maps/runtime/Route21_North.json index 2df5363..0a5e805 100644 --- a/data/games/frlg/maps/source-candidate/Route21_North.json +++ b/data/games/frlg/maps/runtime/Route21_North.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route21_North/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route21_South.json b/data/games/frlg/maps/runtime/Route21_South.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route21_South.json rename to data/games/frlg/maps/runtime/Route21_South.json index e73c092..2c80991 100644 --- a/data/games/frlg/maps/source-candidate/Route21_South.json +++ b/data/games/frlg/maps/runtime/Route21_South.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route21_South/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route22_NorthEntrance.json b/data/games/frlg/maps/runtime/Route22_NorthEntrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route22_NorthEntrance.json rename to data/games/frlg/maps/runtime/Route22_NorthEntrance.json index eed8e61..a37d579 100644 --- a/data/games/frlg/maps/source-candidate/Route22_NorthEntrance.json +++ b/data/games/frlg/maps/runtime/Route22_NorthEntrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route22_NorthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/Route23.json b/data/games/frlg/maps/runtime/Route23.json similarity index 99% rename from data/games/frlg/maps/source-candidate/Route23.json rename to data/games/frlg/maps/runtime/Route23.json index e23e5b3..125e9aa 100644 --- a/data/games/frlg/maps/source-candidate/Route23.json +++ b/data/games/frlg/maps/runtime/Route23.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route23/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route2_EastBuilding.json b/data/games/frlg/maps/runtime/Route2_EastBuilding.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route2_EastBuilding.json rename to data/games/frlg/maps/runtime/Route2_EastBuilding.json index def07fc..8c69fe2 100644 --- a/data/games/frlg/maps/source-candidate/Route2_EastBuilding.json +++ b/data/games/frlg/maps/runtime/Route2_EastBuilding.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route2_EastBuilding/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route5_SouthEntrance.json b/data/games/frlg/maps/runtime/Route5_SouthEntrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route5_SouthEntrance.json rename to data/games/frlg/maps/runtime/Route5_SouthEntrance.json index a2164ba..5c61f5f 100644 --- a/data/games/frlg/maps/source-candidate/Route5_SouthEntrance.json +++ b/data/games/frlg/maps/runtime/Route5_SouthEntrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route5_SouthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route6_NorthEntrance.json b/data/games/frlg/maps/runtime/Route6_NorthEntrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route6_NorthEntrance.json rename to data/games/frlg/maps/runtime/Route6_NorthEntrance.json index dd8733d..df3ec56 100644 --- a/data/games/frlg/maps/source-candidate/Route6_NorthEntrance.json +++ b/data/games/frlg/maps/runtime/Route6_NorthEntrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route6_NorthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route7.json b/data/games/frlg/maps/runtime/Route7.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route7.json rename to data/games/frlg/maps/runtime/Route7.json index 4c59256..8af4122 100644 --- a/data/games/frlg/maps/source-candidate/Route7.json +++ b/data/games/frlg/maps/runtime/Route7.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route7/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route7_EastEntrance.json b/data/games/frlg/maps/runtime/Route7_EastEntrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route7_EastEntrance.json rename to data/games/frlg/maps/runtime/Route7_EastEntrance.json index 7a03d95..a56d211 100644 --- a/data/games/frlg/maps/source-candidate/Route7_EastEntrance.json +++ b/data/games/frlg/maps/runtime/Route7_EastEntrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route7_EastEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route8.json b/data/games/frlg/maps/runtime/Route8.json similarity index 98% rename from data/games/frlg/maps/source-candidate/Route8.json rename to data/games/frlg/maps/runtime/Route8.json index 8017eac..9ad50ed 100644 --- a/data/games/frlg/maps/source-candidate/Route8.json +++ b/data/games/frlg/maps/runtime/Route8.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route8/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/Route8_WestEntrance.json b/data/games/frlg/maps/runtime/Route8_WestEntrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/Route8_WestEntrance.json rename to data/games/frlg/maps/runtime/Route8_WestEntrance.json index dca9111..717be95 100644 --- a/data/games/frlg/maps/source-candidate/Route8_WestEntrance.json +++ b/data/games/frlg/maps/runtime/Route8_WestEntrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/Route8_WestEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SSAnne_1F_Room6.json b/data/games/frlg/maps/runtime/SSAnne_1F_Room6.json similarity index 92% rename from data/games/frlg/maps/source-candidate/SSAnne_1F_Room6.json rename to data/games/frlg/maps/runtime/SSAnne_1F_Room6.json index 3278ec1..5e73614 100644 --- a/data/games/frlg/maps/source-candidate/SSAnne_1F_Room6.json +++ b/data/games/frlg/maps/runtime/SSAnne_1F_Room6.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SSAnne_1F_Room6/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": ["######", "##D###", ".....#", "......", "......", "##..#.", "##..#.", "##...."], diff --git a/data/games/frlg/maps/source-candidate/SafariZone_Center.json b/data/games/frlg/maps/runtime/SafariZone_Center.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SafariZone_Center.json rename to data/games/frlg/maps/runtime/SafariZone_Center.json index 547c48e..baccfbe 100644 --- a/data/games/frlg/maps/source-candidate/SafariZone_Center.json +++ b/data/games/frlg/maps/runtime/SafariZone_Center.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SafariZone_Center/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SafariZone_East.json b/data/games/frlg/maps/runtime/SafariZone_East.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SafariZone_East.json rename to data/games/frlg/maps/runtime/SafariZone_East.json index 13ee8e3..3baf6b1 100644 --- a/data/games/frlg/maps/source-candidate/SafariZone_East.json +++ b/data/games/frlg/maps/runtime/SafariZone_East.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/SafariZone_East/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "######################################################", diff --git a/data/games/frlg/maps/source-candidate/SafariZone_North.json b/data/games/frlg/maps/runtime/SafariZone_North.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SafariZone_North.json rename to data/games/frlg/maps/runtime/SafariZone_North.json index d089e94..265ded2 100644 --- a/data/games/frlg/maps/source-candidate/SafariZone_North.json +++ b/data/games/frlg/maps/runtime/SafariZone_North.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/SafariZone_North/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "#########################################################", diff --git a/data/games/frlg/maps/source-candidate/SafariZone_SecretHouse.json b/data/games/frlg/maps/runtime/SafariZone_SecretHouse.json similarity index 95% rename from data/games/frlg/maps/source-candidate/SafariZone_SecretHouse.json rename to data/games/frlg/maps/runtime/SafariZone_SecretHouse.json index 0fee5cc..e659a82 100644 --- a/data/games/frlg/maps/source-candidate/SafariZone_SecretHouse.json +++ b/data/games/frlg/maps/runtime/SafariZone_SecretHouse.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SafariZone_SecretHouse/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/SafariZone_West.json b/data/games/frlg/maps/runtime/SafariZone_West.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SafariZone_West.json rename to data/games/frlg/maps/runtime/SafariZone_West.json index e01f463..dd74158 100644 --- a/data/games/frlg/maps/source-candidate/SafariZone_West.json +++ b/data/games/frlg/maps/runtime/SafariZone_West.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/SafariZone_West/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "################################################", diff --git a/data/games/frlg/maps/source-candidate/SaffronCity.json b/data/games/frlg/maps/runtime/SaffronCity.json similarity index 99% rename from data/games/frlg/maps/source-candidate/SaffronCity.json rename to data/games/frlg/maps/runtime/SaffronCity.json index 86240b2..b1485bc 100644 --- a/data/games/frlg/maps/source-candidate/SaffronCity.json +++ b/data/games/frlg/maps/runtime/SaffronCity.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SaffronCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SaffronCity_Connection.json b/data/games/frlg/maps/runtime/SaffronCity_Connection.json similarity index 97% rename from data/games/frlg/maps/source-candidate/SaffronCity_Connection.json rename to data/games/frlg/maps/runtime/SaffronCity_Connection.json index 5693c17..4798ed4 100644 --- a/data/games/frlg/maps/source-candidate/SaffronCity_Connection.json +++ b/data/games/frlg/maps/runtime/SaffronCity_Connection.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SaffronCity_Connection/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SaffronCity_Gym.json b/data/games/frlg/maps/runtime/SaffronCity_Gym.json similarity index 99% rename from data/games/frlg/maps/source-candidate/SaffronCity_Gym.json rename to data/games/frlg/maps/runtime/SaffronCity_Gym.json index 47f018a..920b812 100644 --- a/data/games/frlg/maps/source-candidate/SaffronCity_Gym.json +++ b/data/games/frlg/maps/runtime/SaffronCity_Gym.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SaffronCity_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/SaffronCity_Mart.json b/data/games/frlg/maps/runtime/SaffronCity_Mart.json similarity index 95% rename from data/games/frlg/maps/source-candidate/SaffronCity_Mart.json rename to data/games/frlg/maps/runtime/SaffronCity_Mart.json index b0273d2..2a14fea 100644 --- a/data/games/frlg/maps/source-candidate/SaffronCity_Mart.json +++ b/data/games/frlg/maps/runtime/SaffronCity_Mart.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SaffronCity_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/SilphCo_10F.json b/data/games/frlg/maps/runtime/SilphCo_10F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SilphCo_10F.json rename to data/games/frlg/maps/runtime/SilphCo_10F.json index 22fa3a9..33701e1 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_10F.json +++ b/data/games/frlg/maps/runtime/SilphCo_10F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_10F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_11F.json b/data/games/frlg/maps/runtime/SilphCo_11F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/SilphCo_11F.json rename to data/games/frlg/maps/runtime/SilphCo_11F.json index 3ab526c..4c380cf 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_11F.json +++ b/data/games/frlg/maps/runtime/SilphCo_11F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_11F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_1F.json b/data/games/frlg/maps/runtime/SilphCo_1F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/SilphCo_1F.json rename to data/games/frlg/maps/runtime/SilphCo_1F.json index bec3410..d34bf4f 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_1F.json +++ b/data/games/frlg/maps/runtime/SilphCo_1F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_2F.json b/data/games/frlg/maps/runtime/SilphCo_2F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SilphCo_2F.json rename to data/games/frlg/maps/runtime/SilphCo_2F.json index 014e310..0896c92 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_2F.json +++ b/data/games/frlg/maps/runtime/SilphCo_2F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_3F.json b/data/games/frlg/maps/runtime/SilphCo_3F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SilphCo_3F.json rename to data/games/frlg/maps/runtime/SilphCo_3F.json index c1cd1e4..f37add2 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_3F.json +++ b/data/games/frlg/maps/runtime/SilphCo_3F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_3F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_4F.json b/data/games/frlg/maps/runtime/SilphCo_4F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SilphCo_4F.json rename to data/games/frlg/maps/runtime/SilphCo_4F.json index 0fb3a72..0d1721a 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_4F.json +++ b/data/games/frlg/maps/runtime/SilphCo_4F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_4F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_5F.json b/data/games/frlg/maps/runtime/SilphCo_5F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SilphCo_5F.json rename to data/games/frlg/maps/runtime/SilphCo_5F.json index a21a32b..7d34e1a 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_5F.json +++ b/data/games/frlg/maps/runtime/SilphCo_5F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_5F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_6F.json b/data/games/frlg/maps/runtime/SilphCo_6F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SilphCo_6F.json rename to data/games/frlg/maps/runtime/SilphCo_6F.json index a8dfe93..59a392d 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_6F.json +++ b/data/games/frlg/maps/runtime/SilphCo_6F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_6F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_7F.json b/data/games/frlg/maps/runtime/SilphCo_7F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/SilphCo_7F.json rename to data/games/frlg/maps/runtime/SilphCo_7F.json index e2e2d3d..cd8f49e 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_7F.json +++ b/data/games/frlg/maps/runtime/SilphCo_7F.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/SilphCo_7F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/SilphCo_8F.json b/data/games/frlg/maps/runtime/SilphCo_8F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/SilphCo_8F.json rename to data/games/frlg/maps/runtime/SilphCo_8F.json index 730ad5d..86d3afb 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_8F.json +++ b/data/games/frlg/maps/runtime/SilphCo_8F.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/SilphCo_8F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "###############################", diff --git a/data/games/frlg/maps/source-candidate/SilphCo_9F.json b/data/games/frlg/maps/runtime/SilphCo_9F.json similarity index 97% rename from data/games/frlg/maps/source-candidate/SilphCo_9F.json rename to data/games/frlg/maps/runtime/SilphCo_9F.json index a11206c..d3bbe8d 100644 --- a/data/games/frlg/maps/source-candidate/SilphCo_9F.json +++ b/data/games/frlg/maps/runtime/SilphCo_9F.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/SilphCo_9F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "###############################", diff --git a/data/games/frlg/maps/source-candidate/UndergroundPath_EastEntrance.json b/data/games/frlg/maps/runtime/UndergroundPath_EastEntrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/UndergroundPath_EastEntrance.json rename to data/games/frlg/maps/runtime/UndergroundPath_EastEntrance.json index c039426..9573677 100644 --- a/data/games/frlg/maps/source-candidate/UndergroundPath_EastEntrance.json +++ b/data/games/frlg/maps/runtime/UndergroundPath_EastEntrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/UndergroundPath_EastEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/UndergroundPath_EastWestTunnel.json b/data/games/frlg/maps/runtime/UndergroundPath_EastWestTunnel.json similarity index 95% rename from data/games/frlg/maps/source-candidate/UndergroundPath_EastWestTunnel.json rename to data/games/frlg/maps/runtime/UndergroundPath_EastWestTunnel.json index 234260a..790879c 100644 --- a/data/games/frlg/maps/source-candidate/UndergroundPath_EastWestTunnel.json +++ b/data/games/frlg/maps/runtime/UndergroundPath_EastWestTunnel.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/UndergroundPath_EastWestTunnel/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/UndergroundPath_WestEntrance.json b/data/games/frlg/maps/runtime/UndergroundPath_WestEntrance.json similarity index 95% rename from data/games/frlg/maps/source-candidate/UndergroundPath_WestEntrance.json rename to data/games/frlg/maps/runtime/UndergroundPath_WestEntrance.json index 2180071..96f2578 100644 --- a/data/games/frlg/maps/source-candidate/UndergroundPath_WestEntrance.json +++ b/data/games/frlg/maps/runtime/UndergroundPath_WestEntrance.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/UndergroundPath_WestEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "tiles": [ diff --git a/data/games/frlg/maps/source-candidate/VermilionCity_Mart.json b/data/games/frlg/maps/runtime/VermilionCity_Mart.json similarity index 95% rename from data/games/frlg/maps/source-candidate/VermilionCity_Mart.json rename to data/games/frlg/maps/runtime/VermilionCity_Mart.json index 0034093..30a8953 100644 --- a/data/games/frlg/maps/source-candidate/VermilionCity_Mart.json +++ b/data/games/frlg/maps/runtime/VermilionCity_Mart.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/VermilionCity_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/VictoryRoad_1F.json b/data/games/frlg/maps/runtime/VictoryRoad_1F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/VictoryRoad_1F.json rename to data/games/frlg/maps/runtime/VictoryRoad_1F.json index c93fa53..36bb65d 100644 --- a/data/games/frlg/maps/source-candidate/VictoryRoad_1F.json +++ b/data/games/frlg/maps/runtime/VictoryRoad_1F.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/VictoryRoad_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "################################################", diff --git a/data/games/frlg/maps/source-candidate/VictoryRoad_2F.json b/data/games/frlg/maps/runtime/VictoryRoad_2F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/VictoryRoad_2F.json rename to data/games/frlg/maps/runtime/VictoryRoad_2F.json index 77511fe..690ce95 100644 --- a/data/games/frlg/maps/source-candidate/VictoryRoad_2F.json +++ b/data/games/frlg/maps/runtime/VictoryRoad_2F.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/VictoryRoad_2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "##########################################~~~~~~~~~", diff --git a/data/games/frlg/maps/source-candidate/VictoryRoad_3F.json b/data/games/frlg/maps/runtime/VictoryRoad_3F.json similarity index 98% rename from data/games/frlg/maps/source-candidate/VictoryRoad_3F.json rename to data/games/frlg/maps/runtime/VictoryRoad_3F.json index e25500a..6cbb41a 100644 --- a/data/games/frlg/maps/source-candidate/VictoryRoad_3F.json +++ b/data/games/frlg/maps/runtime/VictoryRoad_3F.json @@ -4,8 +4,7 @@ "source": { "decomp_file": "data/maps/VictoryRoad_3F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" + "date": "2026-10-31" }, "tiles": [ "#######################~~##########~~~#~~~~~~", diff --git a/data/games/frlg/maps/source-candidate/ViridianCity_Gym.json b/data/games/frlg/maps/runtime/ViridianCity_Gym.json similarity index 98% rename from data/games/frlg/maps/source-candidate/ViridianCity_Gym.json rename to data/games/frlg/maps/runtime/ViridianCity_Gym.json index 7ecba97..d6e1d19 100644 --- a/data/games/frlg/maps/source-candidate/ViridianCity_Gym.json +++ b/data/games/frlg/maps/runtime/ViridianCity_Gym.json @@ -5,7 +5,6 @@ "decomp_file": "data/maps/ViridianCity_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "allow_running": false, diff --git a/data/games/frlg/maps/source-candidate/CeruleanCity.json b/data/games/frlg/maps/source-candidate/CeruleanCity.json deleted file mode 100644 index bc98179..0000000 --- a/data/games/frlg/maps/source-candidate/CeruleanCity.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity", - "source": { - "decomp_file": "data/maps/CeruleanCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "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#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#........#....###############" - ], - "points": { - "warp_0": [10, 11], - "warp_1": [30, 11], - "warp_2": [15, 17], - "warp_3": [22, 19], - "warp_4": [31, 21], - "warp_5": [13, 28], - "warp_6": [29, 28], - "warp_7": [1, 12], - "warp_8": [10, 8], - "warp_9": [31, 8], - "warp_12": [23, 28], - "warp_13": [17, 11] - }, - "warps": [ - {"coord": [10, 11], "enter": "walk_into", "to_map": "CeruleanCity_House1", "to_point": "warp_1"}, - {"coord": [30, 11], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_1"}, - {"coord": [15, 17], "enter": "walk_into", "to_map": "CeruleanCity_House3", "to_point": "warp_1"}, - {"coord": [22, 19], "enter": "walk_into", "to_map": "CeruleanCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [31, 21], "enter": "walk_into", "to_map": "CeruleanCity_Gym", "to_point": "warp_1"}, - {"coord": [13, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, - {"coord": [29, 28], "enter": "walk_into", "to_map": "CeruleanCity_Mart", "to_point": "warp_1"}, - {"coord": [1, 12], "enter": "cave_entrance", "to_map": "CeruleanCave_1F", "to_point": "warp_0"}, - {"coord": [10, 8], "enter": "walk_south", "to_map": "CeruleanCity_House1", "to_point": "warp_3"}, - {"coord": [31, 8], "enter": "walk_south", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, - {"coord": [31, 9], "enter": "walk_into", "to_map": "CeruleanCity_House2", "to_point": "warp_3"}, - {"coord": [14, 28], "enter": "cave_entrance", "to_map": "CeruleanCity_BikeShop", "to_point": "warp_1"}, - {"coord": [23, 28], "enter": "walk_into", "to_map": "CeruleanCity_House4", "to_point": "warp_0"}, - {"coord": [17, 11], "enter": "walk_into", "to_map": "CeruleanCity_House5", "to_point": "warp_0"} - ], - "flag_sets": { - "after_hall_of_fame": ["FLAG_HIDE_CERULEAN_CAVE_GUARD", "FLAG_HIDE_CERULEAN_RIVAL", "FLAG_HIDE_CERULEAN_ROCKET"] - }, - "connections": [ - {"side": "north", "to_map": "Route24", "offset": 12}, - {"side": "south", "to_map": "Route5", "offset": 0}, - {"side": "west", "to_map": "Route4", "offset": 10}, - {"side": "east", "to_map": "Route9", "offset": 10} - ], - "npcs": [ - { - "name": "policeman", - "coord": [31, 12], - "source_event": 0, - "source_script": "CeruleanCity_EventScript_Policeman", - "source_local_id": "LOCALID_CERULEAN_POLICEMAN" - }, - { - "name": "rocket_m", - "coord": [33, 6], - "hide_flag": "FLAG_HIDE_CERULEAN_ROCKET", - "source_event": 1, - "source_script": "CeruleanCity_EventScript_Grunt", - "source_local_id": "LOCALID_CERULEAN_GRUNT" - }, - { - "name": "little_boy", - "coord": [16, 21], - "wander": {"min": [16, 18], "max": [16, 24]}, - "source_event": 2, - "source_script": "CeruleanCity_EventScript_LittleBoy" - }, - { - "name": "balding_man", - "coord": [9, 23], - "wander": {"min": [8, 22], "max": [10, 24]}, - "source_event": 3, - "source_script": "CeruleanCity_EventScript_BaldingMan" - }, - { - "name": "slowbro", - "coord": [32, 29], - "source_event": 4, - "source_script": "CeruleanCity_EventScript_Slowbro", - "source_local_id": "LOCALID_CERULEAN_SLOWBRO" - }, - { - "name": "lass", - "coord": [33, 29], - "source_event": 5, - "source_script": "CeruleanCity_EventScript_Lass", - "source_local_id": "LOCALID_CERULEAN_LASS" - }, - {"name": "youngster", "coord": [34, 22], "source_event": 6, "source_script": "CeruleanCity_EventScript_Youngster"}, - { - "name": "blue", - "coord": [22, 0], - "hide_flag": "FLAG_HIDE_CERULEAN_RIVAL", - "source_event": 7, - "source_script": "0x0", - "source_local_id": "LOCALID_CERULEAN_RIVAL" - }, - { - "name": "cut_tree", - "coord": [26, 32], - "hide_flag": "FLAG_TEMP_13", - "source_event": 8, - "source_script": "EventScript_CutTree" - }, - { - "name": "woman_1", - "coord": [12, 30], - "source_event": 10, - "source_script": "CeruleanCity_EventScript_Woman", - "source_local_id": "LOCALID_CERULEAN_WOMAN" - }, - { - "name": "cooltrainer_m", - "coord": [1, 13], - "hide_flag": "FLAG_HIDE_CERULEAN_CAVE_GUARD", - "source_event": 11, - "source_script": "CeruleanCity_EventScript_CeruleanCaveGuard", - "source_local_id": "LOCALID_CERULEAN_CAVE_GUARD" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/CeruleanCity_BikeShop.json b/data/games/frlg/maps/source-candidate/CeruleanCity_BikeShop.json deleted file mode 100644 index 7a82ede..0000000 --- a/data/games/frlg/maps/source-candidate/CeruleanCity_BikeShop.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_BikeShop", - "source": { - "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - ".####...#..", - "..#.##..#..", - ".#..#...###", - "..#.#.....#", - "........#..", - "..#........", - "..#......#.", - "###########" - ], - "points": {"warp_1": [5, 8]}, - "warps": [ - {"coord": [4, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"}, - {"coord": [5, 8], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_5"}, - {"coord": [6, 9], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_5"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "man", "coord": [9, 3], "source_event": 0, "source_script": "CeruleanCity_BikeShop_EventScript_Clerk"}, - { - "name": "youngster", - "coord": [9, 7], - "wander": {"min": [8, 6], "max": [10, 8]}, - "source_event": 1, - "source_script": "CeruleanCity_BikeShop_EventScript_Youngster" - }, - {"name": "woman_2", "coord": [5, 5], "source_event": 2, "source_script": "CeruleanCity_BikeShop_EventScript_Woman"} - ] -} diff --git a/data/games/frlg/maps/source-candidate/CeruleanCity_Gym.json b/data/games/frlg/maps/source-candidate/CeruleanCity_Gym.json deleted file mode 100644 index 3eb6fb4..0000000 --- a/data/games/frlg/maps/source-candidate/CeruleanCity_Gym.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_Gym", - "source": { - "decomp_file": "data/maps/CeruleanCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" - }, - "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.#", - "#...............#", - "#################" - ], - "points": {"misty_front": [8, 7], "warp_1": [8, 18]}, - "warps": [ - {"coord": [7, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"}, - {"coord": [8, 18], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_4"}, - {"coord": [9, 18], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_4"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "swimmer_m_water", - "coord": [10, 12], - "facing": "west", - "trainer": {"sight": 1}, - "source_event": 0, - "source_script": "CeruleanCity_Gym_EventScript_Luis" - }, - { - "name": "picnicker", - "coord": [4, 7], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 1, - "source_script": "CeruleanCity_Gym_EventScript_Diana" - }, - {"name": "misty", "coord": [8, 6], "source_event": 2, "source_script": "CeruleanCity_Gym_EventScript_Misty"}, - {"name": "gym_guy", "coord": [7, 16], "source_event": 3, "source_script": "CeruleanCity_Gym_EventScript_GymGuy"} - ] -} diff --git a/data/games/frlg/maps/source-candidate/CeruleanCity_House2.json b/data/games/frlg/maps/source-candidate/CeruleanCity_House2.json deleted file mode 100644 index 4309805..0000000 --- a/data/games/frlg/maps/source-candidate/CeruleanCity_House2.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_House2", - "source": { - "decomp_file": "data/maps/CeruleanCity_House2/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "allow_running": false, - "tiles": [ - "##########", - "####.#####", - "........##", - ".........#", - "...##.....", - "...##.....", - "..........", - "#.......##", - "##########" - ], - "points": {"warp_1": [3, 7], "warp_3": [4, 1]}, - "warps": [ - {"coord": [2, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, - {"coord": [3, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_1"}, - {"coord": [4, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_1"}, - {"coord": [4, 1], "enter": "cave_entrance", "to_map": "CeruleanCity", "to_point": "warp_9"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "hiker", "coord": [1, 2], "source_event": 0, "source_script": "CeruleanCity_House2_EventScript_Hiker"}, - { - "name": "lass", - "coord": [7, 6], - "wander": {"min": [6, 5], "max": [8, 7]}, - "source_event": 1, - "source_script": "CeruleanCity_House2_EventScript_Lass" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/CeruleanCity_Mart.json b/data/games/frlg/maps/source-candidate/CeruleanCity_Mart.json deleted file mode 100644 index 1ee10a7..0000000 --- a/data/games/frlg/maps/source-candidate/CeruleanCity_Mart.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "CeruleanCity_Mart", - "source": { - "decomp_file": "data/maps/CeruleanCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "points": {"clerk_front": [4, 3], "warp_1": [4, 7]}, - "warps": [ - {"coord": [3, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"}, - {"coord": [4, 7], "enter": "walk_south", "to_map": "CeruleanCity", "to_point": "warp_6"}, - {"coord": [5, 7], "enter": "walk_into", "to_map": "CeruleanCity", "to_point": "warp_6"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "clerk", "coord": [2, 3], "source_event": 0, "source_script": "CeruleanCity_Mart_EventScript_Clerk"}, - { - "name": "woman_1", - "coord": [9, 2], - "wander": {"min": [5, 2], "max": [10, 2]}, - "source_event": 1, - "source_script": "CeruleanCity_Mart_EventScript_Woman" - }, - { - "name": "youngster", - "coord": [1, 7], - "source_event": 2, - "source_script": "CeruleanCity_Mart_EventScript_Youngster" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/LavenderTown.json b/data/games/frlg/maps/source-candidate/LavenderTown.json deleted file mode 100644 index d8ebc98..0000000 --- a/data/games/frlg/maps/source-candidate/LavenderTown.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "LavenderTown", - "source": { - "decomp_file": "data/maps/LavenderTown/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "########.....###########", - "########.....###########", - "#########....###########", - "#########....###########", - "#########...S###########", - "#...SSD##....###########", - "#............#####.#####", - "#....................S##", - "#.....................##", - "........#####.........##", - "........#####.........##", - ".......S##D##..S......##", - "#.....................##", - "#.................######", - "#..##########.....######", - "#..##########.....SSD###", - "#..##D####D##.........##", - "#.....................##", - "#.....................##", - "###########..###########" - ], - "points": { - "warp_0": [18, 6], - "warp_1": [6, 5], - "warp_2": [10, 11], - "warp_3": [5, 16], - "warp_4": [10, 16], - "warp_5": [20, 15] - }, - "warps": [ - {"coord": [18, 6], "enter": "cave_entrance", "to_map": "PokemonTower_1F", "to_point": "warp_1"}, - {"coord": [6, 5], "enter": "walk_into", "to_map": "LavenderTown_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [10, 11], "enter": "walk_into", "to_map": "LavenderTown_VolunteerPokemonHouse", "to_point": "warp_1"}, - {"coord": [5, 16], "enter": "walk_into", "to_map": "LavenderTown_House1", "to_point": "warp_1"}, - {"coord": [10, 16], "enter": "walk_into", "to_map": "LavenderTown_House2", "to_point": "warp_1"}, - {"coord": [20, 15], "enter": "walk_into", "to_map": "LavenderTown_Mart", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "Route10", "offset": 0}, - {"side": "south", "to_map": "Route12", "offset": 0}, - {"side": "west", "to_map": "Route8", "offset": 0} - ], - "npcs": [ - { - "name": "little_girl", - "coord": [19, 10], - "wander": {"min": [17, 9], "max": [21, 11]}, - "source_event": 0, - "source_script": "LavenderTown_EventScript_LittleGirl" - }, - {"name": "worker_m", "coord": [12, 12], "source_event": 1, "source_script": "LavenderTown_EventScript_WorkerM"}, - {"name": "boy", "coord": [10, 7], "source_event": 2, "source_script": "LavenderTown_EventScript_Boy"} - ] -} diff --git a/data/games/frlg/maps/source-candidate/MtMoon_1F.json b/data/games/frlg/maps/source-candidate/MtMoon_1F.json deleted file mode 100644 index 4c066e7..0000000 --- a/data/games/frlg/maps/source-candidate/MtMoon_1F.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "MtMoon_1F", - "source": { - "decomp_file": "data/maps/MtMoon_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/MtMoon_1F/map.json", - "events_sha256": "312b2de23d9942d3326da9fe9597b25ef7c3537bcedfcafa7922d5c8b8e8d8fc", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "################################################", - "################################################", - "##~~~~~~~~~#########~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~#######~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~#####~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~.~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~~#~~~~##", - "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~####~~##", - "##~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~~##~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~###############~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~~#####~~~~~####~~~~~~~~~~~~##", - "##~~~~~~~~~~~###~~~.####~~~~~~~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~###~~~~####~~~~~~~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~###~~~~###~~~~~~~~.~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "###########~~~~~~~~~###~~~~###~~~~~~~~~###~~~~##", - "##~~~~#################~~~~###~~~~~~~~~###~~~~##", - "##~~~~~################~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###############~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~S~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~###~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~~~~~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~~##~~~~##########~~~###~~~###~~~~##", - "##~~~~~~~~~~~####~~~#####~~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~######~~~~~~~###~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~#####~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~~~####~~~~~~~~~~~~~~~~~~~~~~##", - "##~~~~~~~~~~~####~.~####~~~~~~~~~~~~~~~~~~~~~~##", - "################################################", - "################################################" - ], - "points": {"warp_0": [5, 6], "warp_1": [19, 14], "warp_2": [31, 16], "warp_3": [18, 37]}, - "warps": [ - {"coord": [5, 6], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_0"}, - {"coord": [19, 14], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_1"}, - {"coord": [31, 16], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_2"}, - {"coord": [18, 37], "enter": "walk_south", "to_map": "Route4", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "lass", - "coord": [20, 26], - "facing": "south", - "trainer": {"sight": 2}, - "source_event": 0, - "source_script": "MtMoon_1F_EventScript_Iris" - }, - { - "name": "bug_catcher", - "coord": [36, 30], - "facing": "east", - "trainer": {"sight": 2}, - "source_event": 1, - "source_script": "MtMoon_1F_EventScript_Robby" - }, - { - "name": "scientist", - "coord": [30, 35], - "trainer": {"sight": 4, "looks": ["north", "east", "south", "west"]}, - "source_event": 2, - "source_script": "MtMoon_1F_EventScript_Jovan" - }, - { - "name": "lass", - "coord": [33, 4], - "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, - "source_event": 3, - "source_script": "MtMoon_1F_EventScript_Miriam" - }, - { - "name": "bug_catcher", - "coord": [7, 26], - "facing": "south", - "trainer": {"sight": 4}, - "source_event": 4, - "source_script": "MtMoon_1F_EventScript_Kent" - }, - { - "name": "youngster", - "coord": [13, 17], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 5, - "source_script": "MtMoon_1F_EventScript_Josh" - }, - { - "name": "hiker", - "coord": [7, 10], - "wander": {"min": [5, 8], "max": [9, 12]}, - "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, - "source_event": 6, - "source_script": "MtMoon_1F_EventScript_Marcos" - }, - {"name": "balding_man", "coord": [42, 7], "source_event": 13, "source_script": "MtMoon_1F_EventScript_BaldingMan"} - ], - "items": [ - { - "name": "item_ball", - "coord": [2, 22], - "source_event": 7, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_PARALYZE_HEAL", - "source_script": "MtMoon_1F_EventScript_ItemParalyzeHeal", - "item": "paralyze_heal" - }, - { - "name": "item_ball", - "coord": [11, 35], - "source_event": 8, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_TM09", - "source_script": "MtMoon_1F_EventScript_ItemTM09", - "item": "tm09" - }, - { - "name": "item_ball", - "coord": [26, 32], - "source_event": 9, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_POTION", - "source_script": "MtMoon_1F_EventScript_ItemPotion", - "item": "potion" - }, - { - "name": "item_ball", - "coord": [42, 35], - "source_event": 10, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_RARE_CANDY", - "source_script": "MtMoon_1F_EventScript_ItemRareCandy", - "item": "rare_candy" - }, - { - "name": "item_ball", - "coord": [44, 21], - "source_event": 11, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_ESCAPE_ROPE", - "source_script": "MtMoon_1F_EventScript_ItemEscapeRope", - "item": "escape_rope" - }, - { - "name": "item_ball", - "coord": [3, 2], - "source_event": 12, - "hide_flag": "FLAG_HIDE_MT_MOON_1F_MOON_STONE", - "source_script": "MtMoon_1F_EventScript_ItemMoonStone", - "item": "moon_stone" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/MtMoon_B1F.json b/data/games/frlg/maps/source-candidate/MtMoon_B1F.json deleted file mode 100644 index 33cc1a9..0000000 --- a/data/games/frlg/maps/source-candidate/MtMoon_B1F.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "MtMoon_B1F", - "source": { - "decomp_file": "data/maps/MtMoon_B1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "#################################################", - "#################################################", - "##################~~~~~~~~###############~~~~~###", - "##~.~~~##########~~~~~~~~#############~~~~~~~####", - "##~~~~~#########~~~~~~~~~.~##########~~.~~~~~.~##", - "##~~~~~#########~.~~~~~~~~~#########~~~~~~~~~~~##", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~###########################################", - "##~~~~~##########################################", - "##~~~#~##########################################", - "##~~~~###########################################", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~~##########################################", - "##~~~~~~~~~~~~~~~~~~~~~~#########################", - "##~~~~~~~~~~~~~~~~~~~~~~#########################", - "##~~~~~~~~~~~~~~~~~~~~.~#########################", - "#################################################", - "#################################################", - "#########################################~~.~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "#########################################~~~~####", - "##########################################~~~####", - "##########################################~~~####", - "##########################################~~~####", - "##########################~~~~~~~~~~~####~~~~####", - "#########################~~~~~~~~~~~~~~~~~~~~####", - "########################~~.~~~~~~~~~~~~~~~~~~####", - "#################################################", - "#################################################", - "#################################################" - ], - "points": { - "warp_0": [3, 3], - "warp_1": [25, 4], - "warp_2": [43, 21], - "warp_3": [22, 18], - "warp_4": [17, 5], - "warp_5": [26, 36], - "warp_6": [39, 4], - "warp_7": [45, 4] - }, - "warps": [ - {"coord": [3, 3], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_0"}, - {"coord": [25, 4], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_1"}, - {"coord": [43, 21], "enter": "step_on", "to_map": "MtMoon_1F", "to_point": "warp_2"}, - {"coord": [22, 18], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_0"}, - {"coord": [17, 5], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_1"}, - {"coord": [26, 36], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_2"}, - {"coord": [39, 4], "enter": "step_on", "to_map": "MtMoon_B2F", "to_point": "warp_3"}, - {"coord": [45, 4], "enter": "step_on", "to_map": "Route4", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [] -} diff --git a/data/games/frlg/maps/source-candidate/MtMoon_B2F.json b/data/games/frlg/maps/source-candidate/MtMoon_B2F.json deleted file mode 100644 index 4cc0f05..0000000 --- a/data/games/frlg/maps/source-candidate/MtMoon_B2F.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "MtMoon_B2F", - "source": { - "decomp_file": "data/maps/MtMoon_B2F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/MtMoon_B2F/map.json", - "events_sha256": "451a05df92c5df570c121affa75c846996d3561c12e7e5d67d91814482a37ff3", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "################################################", - "################################################", - "################################################", - "###~~~~~~~~~~~~~~~~~############################", - "###~~~~~~~~~~~~~~~~~############################", - "###~~~~~~~~~~~~~~~~~###~~~~######~~~~###########", - "###~~~~~~~~~~~~~~~~~###~~~~#~~~~#~~~~#~~~~######", - "###~~########~~########~~~~#~~~~##~~##~~~~######", - "##~~~~~~#8888~~88888###~~~~#~~~~~~~~~~~~~~######", - "##~~~#~~#~~~~~~~~~~~###~~~~#~~~~~~~~~~~~~~######", - "##~~~.#~#~~~~~~~~~~~###~~~~#~~##~~~~~~~~~~######", - "##~~~~~~#~~~~~~~~~~~###~~~~#~~#.~~~~~~~#~~######", - "##~~~~~######~~###~~###~~~~#~~~~~~~~~~~~~~######", - "#########~~~~~~~~#~~###~~~~#~~~~~~~~~~~~~~######", - "#vvvvvv#~~~~~~~~~#~~###~~~~88888888##8888888888#", - "########~~~~~~~~~######~~~~~~~~~~~~##~~~~~~~~~~#", - "########~~~~~~~~~~~~###~~~~~~~~~~~~##~~~~~~~~~~#", - "############~~~########~~~~~~~~~~~~##~~~~~~~~~~#", - "#######vvvv#~~~#vvvvvv#~~~~~~##~~#####~~##~~~~~#", - "############~~~########~~~~~~#~~~~~~~~~~~#~~~~~#", - "############~~~########~~#~~~#~~~~~~~~~~~#~~~~~#", - "########~~~~~~~~~~~~~##~~.~#~#~~~~~~~~~~~#~~~~~#", - "########~~~~~~~~~~~~~##~~~#~~#~~~~~~~~~~~#~~~~~#", - "########~~~~~##############################~~~~#", - "########~~~~~#vvvvvvvvvvvvvvvvvvvvvvvvvvvv#~~~~#", - "########~~~~~##############################~~~~#", - "########~~~~~###############~~~~###########~~~~#", - "########~~~~~##~~~~~~~~~~~~#~~~~#~~##~~~~~~~~~~#", - "########~~~~~###~~~~~~~~~~~##~~##~~##~~~~~~~~~~#", - "########~~~~~##~~~~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~##~~#~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~##~#.~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~####~~~~~~~~~~~~~~~~~~##~~~~~######", - "########~~~~~########################~~~~~######", - "########~~~~~#vvvvvvvvvvvvvvvvvvvvvv#~~~~~######", - "########~~~~~########################~~~~~######", - "########~~~~~########################~~~~~######", - "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", - "########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######", - "################################################" - ], - "points": {"warp_0": [25, 21], "warp_1": [31, 11], "warp_2": [17, 31], "warp_3": [5, 10]}, - "regions": { - "wild": [ - [9, 8], - [10, 8], - [11, 8], - [12, 8], - [15, 8], - [16, 8], - [17, 8], - [18, 8], - [19, 8], - [27, 14], - [28, 14], - [29, 14], - [30, 14], - [31, 14], - [32, 14], - [33, 14], - [34, 14], - [37, 14], - [38, 14], - [39, 14], - [40, 14], - [41, 14], - [42, 14], - [43, 14], - [44, 14], - [45, 14], - [46, 14] - ] - }, - "warps": [ - {"coord": [25, 21], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_3"}, - {"coord": [31, 11], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_4"}, - {"coord": [17, 31], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_5"}, - {"coord": [5, 10], "enter": "step_on", "to_map": "MtMoon_B1F", "to_point": "warp_6"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "fossil", - "coord": [13, 7], - "hide_flag": "FLAG_HIDE_DOME_FOSSIL", - "source_event": 0, - "source_script": "MtMoon_B2F_EventScript_DomeFossil", - "source_local_id": "LOCALID_DOME_FOSSIL" - }, - { - "name": "fossil", - "coord": [14, 7], - "hide_flag": "FLAG_HIDE_HELIX_FOSSIL", - "source_event": 1, - "source_script": "MtMoon_B2F_EventScript_HelixFossil", - "source_local_id": "LOCALID_HELIX_FOSSIL" - }, - { - "name": "scientist", - "coord": [13, 11], - "source_event": 2, - "source_script": "MtMoon_B2F_EventScript_Miguel", - "source_local_id": "LOCALID_MIGUEL" - }, - { - "name": "rocket_m", - "coord": [37, 21], - "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", - "source_event": 3, - "source_script": "MtMoon_B2F_EventScript_Grunt4" - }, - { - "name": "rocket_m", - "coord": [12, 20], - "facing": "south", - "trainer": {"sight": 2}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", - "source_event": 4, - "source_script": "MtMoon_B2F_EventScript_Grunt1" - }, - { - "name": "rocket_m", - "coord": [35, 12], - "facing": "north", - "trainer": {"sight": 4}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", - "source_event": 5, - "source_script": "MtMoon_B2F_EventScript_Grunt3" - }, - { - "name": "rocket_m", - "coord": [18, 27], - "facing": "south", - "trainer": {"sight": 4}, - "hide_flag": "FLAG_HIDE_MISC_KANTO_ROCKETS", - "source_event": 6, - "source_script": "MtMoon_B2F_EventScript_Grunt2" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [30, 26], - "source_event": 7, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_STAR_PIECE", - "source_script": "MtMoon_B2F_EventScript_ItemStarPiece", - "item": "star_piece" - }, - { - "name": "item_ball", - "coord": [35, 5], - "source_event": 8, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_TM46", - "source_script": "MtMoon_B2F_EventScript_ItemTM46", - "item": "tm46" - }, - { - "name": "item_ball", - "coord": [24, 6], - "source_event": 9, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_REVIVE", - "source_script": "MtMoon_B2F_EventScript_ItemRevive", - "item": "revive" - }, - { - "name": "item_ball", - "coord": [3, 11], - "source_event": 10, - "hide_flag": "FLAG_HIDE_MT_MOON_B2F_ANTIDOTE", - "source_script": "MtMoon_B2F_EventScript_ItemAntidote", - "item": "antidote" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/PalletTown.json b/data/games/frlg/maps/source-candidate/PalletTown.json deleted file mode 100644 index 3be1d50..0000000 --- a/data/games/frlg/maps/source-candidate/PalletTown.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "PalletTown", - "source": { - "decomp_file": "data/maps/PalletTown/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "tiles": [ - "############..##########", - "############..##########", - "##....................##", - "##....................##", - "##...#####....#####...##", - "##...#####....#####...##", - "##...#####....#####...##", - "##..S#D###...S#D###...##", - "##....................##", - "##....................##", - "##...........#######..##", - "##...####S...#######..##", - "##...........#######..##", - "##...........###D###..##", - "##...S................##", - "##....................##", - "##...........###S##...##", - "##.....wwww...........##", - "##.....wwww...........##", - "##.....wwww...........##" - ], - "points": {"oaks_lab_front": [16, 14], "warp_0": [6, 7], "warp_1": [15, 7], "warp_2": [16, 13]}, - "warps": [ - {"coord": [6, 7], "enter": "walk_into", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_1"}, - {"coord": [15, 7], "enter": "walk_into", "to_map": "PalletTown_RivalsHouse", "to_point": "warp_0"}, - {"coord": [16, 13], "enter": "walk_into", "to_map": "PalletTown_ProfessorOaksLab", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "Route1", "offset": 0}, - {"side": "south", "to_map": "Route21_North", "offset": 0} - ], - "npcs": [ - { - "name": "woman_1", - "coord": [3, 10], - "wander": {"min": [2, 6], "max": [4, 14]}, - "source_event": 0, - "source_script": "PalletTown_EventScript_SignLady", - "source_local_id": "LOCALID_PALLET_SIGN_LADY" - }, - { - "name": "fat_man", - "coord": [13, 17], - "wander": {"min": [7, 15], "max": [19, 19]}, - "source_event": 1, - "source_script": "PalletTown_EventScript_FatMan", - "source_local_id": "LOCALID_PALLET_FAT_MAN" - }, - { - "name": "prof_oak", - "coord": [10, 8], - "hide_flag": "FLAG_HIDE_OAK_IN_PALLET_TOWN", - "source_event": 2, - "source_script": "0x0", - "source_local_id": "LOCALID_PALLET_PROF_OAK" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/PalletTown_PlayersHouse_1F.json b/data/games/frlg/maps/source-candidate/PalletTown_PlayersHouse_1F.json deleted file mode 100644 index d9741ed..0000000 --- a/data/games/frlg/maps/source-candidate/PalletTown_PlayersHouse_1F.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "PalletTown_PlayersHouse_1F", - "source": { - "decomp_file": "data/maps/PalletTown_PlayersHouse_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "allow_running": false, - "tiles": [ - "#############", - "#############", - "#..........##", - "#............", - "#.....##.....", - "#.....##.....", - "#............", - "##..........#", - "#............", - "#############" - ], - "points": {"warp_1": [4, 8], "warp_2": [10, 2]}, - "warps": [ - {"coord": [5, 8], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"}, - {"coord": [4, 8], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_0"}, - {"coord": [10, 2], "enter": "walk_east", "to_map": "PalletTown_PlayersHouse_2F", "to_point": "warp_0"}, - {"coord": [3, 9], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "mom", - "coord": [8, 4], - "source_event": 0, - "source_script": "PalletTown_PlayersHouse_1F_EventScript_Mom", - "source_local_id": "LOCALID_MOM" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/PalletTown_PlayersHouse_2F.json b/data/games/frlg/maps/source-candidate/PalletTown_PlayersHouse_2F.json deleted file mode 100644 index 7b942d3..0000000 --- a/data/games/frlg/maps/source-candidate/PalletTown_PlayersHouse_2F.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "PalletTown_PlayersHouse_2F", - "source": { - "decomp_file": "data/maps/PalletTown_PlayersHouse_2F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" - }, - "allow_running": false, - "tiles": [ - "############", - "###########S", - "#.......##..", - "#.......##..", - "#.2...#.....", - "#.8...#.....", - "#.#.........", - "#...........", - "#..........." - ], - "elevation": [ - "000000000000", - "000000000000", - "033333330033", - "033333330033", - "033333033333", - "003033033333", - "040403333333", - "003033333333", - "033333333333" - ], - "points": {"start": [6, 6], "warp_0": [10, 2]}, - "warps": [{"coord": [10, 2], "enter": "walk_west", "to_map": "PalletTown_PlayersHouse_1F", "to_point": "warp_2"}], - "flag_sets": {}, - "connections": [] -} diff --git a/data/games/frlg/maps/source-candidate/PalletTown_ProfessorOaksLab.json b/data/games/frlg/maps/source-candidate/PalletTown_ProfessorOaksLab.json deleted file mode 100644 index 66b383d..0000000 --- a/data/games/frlg/maps/source-candidate/PalletTown_ProfessorOaksLab.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "PalletTown_ProfessorOaksLab", - "source": { - "decomp_file": "data/maps/PalletTown_ProfessorOaksLab/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/PalletTown_ProfessorOaksLab/map.json", - "events_sha256": "37906ed851a344cc63b41b303b41b6da091328b97b05b6e38d2570486d104704", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "allow_running": false, - "tiles": [ - "#############", - "######SS#####", - ".............", - "#............", - "###.....###..", - ".##..........", - ".............", - ".............", - "#####...#####", - ".............", - ".............", - ".............", - "#...........#", - "#############" - ], - "points": {"warp_0": [6, 12]}, - "warps": [ - {"coord": [6, 12], "enter": "walk_south", "to_map": "PalletTown", "to_point": "warp_2"}, - {"coord": [7, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"}, - {"coord": [5, 12], "enter": "walk_into", "to_map": "PalletTown", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "scientist", - "coord": [3, 11], - "source_event": 0, - "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide1" - }, - { - "name": "worker_f", - "coord": [2, 10], - "wander": {"min": [2, 6], "max": [2, 13]}, - "source_event": 1, - "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide3" - }, - { - "name": "scientist", - "coord": [11, 10], - "source_event": 2, - "source_script": "PalletTown_ProfessorOaksLab_EventScript_Aide2" - }, - { - "name": "prof_oak", - "coord": [6, 3], - "hide_flag": "FLAG_HIDE_OAK_IN_HIS_LAB", - "source_event": 3, - "source_script": "PalletTown_ProfessorOaksLab_EventScript_ProfOak", - "source_local_id": "LOCALID_OAKS_LAB_PROF_OAK" - }, - { - "name": "blue", - "coord": [5, 4], - "hide_flag": "FLAG_HIDE_RIVAL_IN_LAB", - "source_event": 7, - "source_script": "PalletTown_ProfessorOaksLab_EventScript_Rival", - "source_local_id": "LOCALID_OAKS_LAB_RIVAL" - }, - { - "name": "pokedex", - "coord": [4, 1], - "hide_flag": "FLAG_HIDE_POKEDEX", - "source_event": 8, - "source_script": "PalletTown_ProfessorOaksLab_EventScript_Pokedex", - "source_local_id": "LOCALID_POKEDEX_1" - }, - { - "name": "pokedex", - "coord": [5, 1], - "hide_flag": "FLAG_HIDE_POKEDEX", - "source_event": 9, - "source_script": "PalletTown_ProfessorOaksLab_EventScript_Pokedex", - "source_local_id": "LOCALID_POKEDEX_2" - } - ], - "interactables": [ - { - "name": "item_ball", - "coord": [8, 4], - "source_event": 4, - "hide_flag": "FLAG_HIDE_BULBASAUR_BALL", - "source_script": "PalletTown_ProfessorOaksLab_EventScript_BulbasaurBall", - "source_local_id": "LOCALID_BULBASAUR_BALL", - "interaction": {"kind": "starter_choice", "species": "bulbasaur"} - }, - { - "name": "item_ball", - "coord": [9, 4], - "source_event": 5, - "hide_flag": "FLAG_HIDE_SQUIRTLE_BALL", - "source_script": "PalletTown_ProfessorOaksLab_EventScript_SquirtleBall", - "source_local_id": "LOCALID_SQUIRTLE_BALL", - "interaction": {"kind": "starter_choice", "species": "squirtle"} - }, - { - "name": "item_ball", - "coord": [10, 4], - "source_event": 6, - "hide_flag": "FLAG_HIDE_CHARMANDER_BALL", - "source_script": "PalletTown_ProfessorOaksLab_EventScript_CharmanderBall", - "source_local_id": "LOCALID_CHARMANDER_BALL", - "interaction": {"kind": "starter_choice", "species": "charmander"} - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/PewterCity.json b/data/games/frlg/maps/source-candidate/PewterCity.json deleted file mode 100644 index a2721ec..0000000 --- a/data/games/frlg/maps/source-candidate/PewterCity.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "PewterCity", - "source": { - "decomp_file": "data/maps/PewterCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "################################################", - "#######################....#####################", - "####........#################.........##########", - "####........#################.........##########", - "####........#############D######......##########", - "####........###########...............##########", - "#######.....#####.#####..#######........########", - "####vvv..vvvvvvv...Svvvvvvvvvvvvvvvvv...########", - "####....................................########", - "####............................#####...########", - "######..........................#####...########", - "######..........................#D###...########", - "######..................................########", - "######...##.#######.##..................########", - "######...#############..................########", - "######...##.#######.##..................########", - "######...##S..#D#...##....####..........########", - "######...............#....######........########", - "######...............#....SSD###........########", - "######...............#.................S########", - "######################..........................", - "######..........................................", - "######.......#########..........................", - "######.......#########....##########............", - "######.......#########....##########....########", - "######.......##SSD####....#####S#####...########", - "######....................#.........#...########", - "######....................#.........#...########", - "######..#####.............#.........#...########", - "######..#####.............#.........#...########", - "######..#D###.......S.....#vvvv.vvvv#...########", - "######..................................########", - "######..................................########", - "######..................................########", - "######..................................########", - "######..................................########", - "####################....########################", - "####################....########################", - "####################....########################", - "####################....########################" - ], - "points": { - "gym_front": [15, 17], - "warp_0": [17, 6], - "warp_1": [25, 4], - "warp_2": [15, 16], - "warp_3": [28, 18], - "warp_4": [33, 11], - "warp_5": [17, 25], - "warp_6": [9, 30] - }, - "warps": [ - {"coord": [17, 6], "enter": "cave_entrance", "to_map": "PewterCity_Museum_1F", "to_point": "warp_1"}, - {"coord": [25, 4], "enter": "walk_into", "to_map": "PewterCity_Museum_1F", "to_point": "warp_3"}, - {"coord": [15, 16], "enter": "walk_into", "to_map": "PewterCity_Gym", "to_point": "warp_1"}, - {"coord": [28, 18], "enter": "walk_into", "to_map": "PewterCity_Mart", "to_point": "warp_1"}, - {"coord": [33, 11], "enter": "walk_into", "to_map": "PewterCity_House1", "to_point": "warp_1"}, - {"coord": [17, 25], "enter": "walk_into", "to_map": "PewterCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [9, 30], "enter": "walk_into", "to_map": "PewterCity_House2", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [ - {"side": "south", "to_map": "Route2", "offset": 12}, - {"side": "east", "to_map": "Route3", "offset": 10} - ], - "npcs": [ - {"name": "lass", "coord": [6, 15], "source_event": 0, "source_script": "PewterCity_EventScript_Lass"}, - { - "name": "man", - "coord": [33, 17], - "hide_flag": "FLAG_HIDE_PEWTER_MUSEUM_GUIDE", - "source_event": 1, - "source_script": "PewterCity_EventScript_MuseumGuide", - "source_local_id": "LOCALID_PEWTER_MUSEUM_GUIDE" - }, - {"name": "fat_man", "coord": [21, 28], "source_event": 2, "source_script": "PewterCity_EventScript_FatMan"}, - { - "name": "bug_catcher", - "coord": [33, 27], - "wander": {"min": [31, 27], "max": [35, 27]}, - "source_event": 3, - "source_script": "PewterCity_EventScript_BugCatcher" - }, - { - "name": "boy", - "coord": [42, 20], - "hide_flag": "FLAG_HIDE_PEWTER_CITY_GYM_GUIDE", - "source_event": 4, - "source_script": "PewterCity_EventScript_GymGuide", - "source_local_id": "LOCALID_PEWTER_GYM_GUIDE" - }, - { - "name": "cut_tree", - "coord": [30, 5], - "hide_flag": "FLAG_TEMP_12", - "source_event": 5, - "source_script": "EventScript_CutTree" - }, - { - "name": "scientist", - "coord": [46, 20], - "hide_flag": "FLAG_HIDE_PEWTER_CITY_RUNNING_SHOES_GUY", - "source_event": 6, - "source_script": "PewterCity_EventScript_RunningShoesAide", - "source_local_id": "LOCALID_PEWTER_AIDE" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/PewterCity_Gym.json b/data/games/frlg/maps/source-candidate/PewterCity_Gym.json deleted file mode 100644 index a5b4b94..0000000 --- a/data/games/frlg/maps/source-candidate/PewterCity_Gym.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "PewterCity_Gym", - "source": { - "decomp_file": "data/maps/PewterCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "allow_running": false, - "tiles": [ - "#############", - "####.....####", - "#############", - "#....#.#....#", - "#...........#", - "#...#...#...#", - "#...........#", - "#..#.#.#.#..#", - "##.........##", - "#...#...#...#", - "##.........##", - "#...........#", - "#...S...S...#", - "#...........#", - "#...........#", - "#############" - ], - "points": {"brock_front": [6, 6], "warp_1": [6, 14]}, - "warps": [ - {"coord": [5, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"}, - {"coord": [6, 14], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_2"}, - {"coord": [7, 14], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "brock", "coord": [6, 5], "source_event": 0, "source_script": "PewterCity_Gym_EventScript_Brock"}, - { - "name": "camper", - "coord": [3, 8], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 1, - "source_script": "PewterCity_Gym_EventScript_Liam" - }, - {"name": "gym_guy", "coord": [7, 12], "source_event": 2, "source_script": "PewterCity_Gym_EventScript_GymGuy"} - ] -} diff --git a/data/games/frlg/maps/source-candidate/PewterCity_Mart.json b/data/games/frlg/maps/source-candidate/PewterCity_Mart.json deleted file mode 100644 index 77c4ed1..0000000 --- a/data/games/frlg/maps/source-candidate/PewterCity_Mart.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "PewterCity_Mart", - "source": { - "decomp_file": "data/maps/PewterCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "points": {"warp_1": [4, 7]}, - "warps": [ - {"coord": [3, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"}, - {"coord": [4, 7], "enter": "walk_south", "to_map": "PewterCity", "to_point": "warp_3"}, - {"coord": [5, 7], "enter": "walk_into", "to_map": "PewterCity", "to_point": "warp_3"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "youngster", "coord": [8, 2], "source_event": 0, "source_script": "PewterCity_Mart_EventScript_Youngster"}, - {"name": "boy", "coord": [6, 4], "source_event": 1, "source_script": "PewterCity_Mart_EventScript_Boy"}, - {"name": "clerk", "coord": [2, 3], "source_event": 2, "source_script": "PewterCity_Mart_EventScript_Clerk"} - ] -} diff --git a/data/games/frlg/maps/source-candidate/README.md b/data/games/frlg/maps/source-candidate/README.md deleted file mode 100644 index 0a2d5fe..0000000 --- a/data/games/frlg/maps/source-candidate/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# PokeGuy FRLG source-map candidate - -140 maps retained from the 425-map catalog at -`pret/pokefirered@ce6406d8c2eaf46d543c8a2606de0c3cb1951982`. -The explicit exclusions and review basis live in -[../pokeguy-map-scope.json](../pokeguy-map-scope.json): - -| Excluded group | Maps | -|---|---:| -| Sevii, event islands and island Trainer Tower | 164 | -| Multiplayer facilities | 5 | -| Optional mainland caves, routes and legendary destinations | 13 | -| Unused interiors, cabins and upper floors | 103 | - -This is a conservative first-Champion review scope, not a verified visited-map -ledger. Uncertain transit floors (notably Silph) and mainland outdoor routes -remain until the complete event draft establishes their exact use. Restore -excluded Centers if an alternative plan adds healing there. The ship healing -cabin is **SSAnne_1F_Room6**, confirmed by its pinned source heal script; Tea, -Fly, Bill, Safari Surf and Warden reward rooms are also retained. - -These are **unreviewed candidates**, separate from the 53 approved maps in -`../runtime`. Approved maps, manifests and native resource pins are unchanged. -This is a FireRed source baseline; LeafGreen-specific version conditions still -need review for PokeGuy's plan. - -## Reproduce and audit - -Use an empty directory for generation; `--check` verifies without rewriting: - -```sh -PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder \ - --all --scope data/games/frlg/maps/pokeguy-map-scope.json \ - --item-identities --out /tmp/frlg-pokeguy-candidate -PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder \ - --all --scope data/games/frlg/maps/pokeguy-map-scope.json \ - --item-identities --out data/games/frlg/maps/source-candidate --check -python3 -m pip install -r schemas/requirements.txt -PYTHONPATH=src python3 -m pokesim.maps.frlg_import_audit \ - data/games/frlg/maps/source-candidate --schema \ - --scope data/games/frlg/maps/pokeguy-map-scope.json \ - --out /tmp/frlg-import-audit.json -``` - -`--all` without `--scope` can still regenerate the entire pinned source catalog -outside the repository. Scoped generation reads full source headers so it -preserves destinations into excluded maps. The audit accepts these **103 boundary -warps** only with the explicit exclusion inventory. Their missing destination -resources cannot be routed/executed successfully; they are not deleted doors or -successful no-op transitions. Unexpected missing destinations fail the audit. -CI reproduces the selected files from the full pinned source catalog. - -## Elevation and remaining gaps - -126 retained maps omit their elevation grids with an explicit `elevation_omitted` -reason recorded in `source`: every relevant walkable cell uses the loader's -default ground level (3). The other 14 keep their grids (bridges with level `f` -or `4`, stairs, or multi-level terrain like Route 12, Safari Zone, Victory Road, -Silph 8F/9F, etc.). A flat-looking room is not enough to erase these semantics. -Regression tests cover these distinctions, flat water, unreachable/counter tiles, -and irrelevant wall heights. Elevation omission is derived from source data rather -than a manually maintained map-name list; no new lossy omission was added. - -All 140 maps pass geometry/schema checks. Included fixed destinations resolve; -excluded destinations remain explicit boundaries. Current unresolved support: - -| Gap | Count | -|---|---:| -| Cells with unsupported non-collision behavior | 0 | -| Dynamic warp destinations | 0 | -| Pickups without a pinned identity catalog entry | 79 | -| Identified fixed pickups | 27 | -| Known late-story geometry patch left unapplied | 1 | - -All metatile behaviors encountered in the 140 candidate maps are resolved into -canonical glyphs. Full metadata and glyph specifications are documented in -[../tile-legend.json](../tile-legend.json): -- Forced spin mazes (`u, d, l, r` for `MB_SPIN_*` and `o` for `MB_STOP_SPINNING`) in Rocket Hideout and Viridian Gym. -- Floor pit holes (`H` for `MB_FALL_WARP`) with `step_on` entry in Pokémon Mansion and Victory Road. -- Boulder pressure switches (`B` for `MB_STRENGTH_BUTTON`) in Victory Road. -- Step-on teleport pads (`MB_REGULAR_WARP`) in Saffron Gym and Silph Co are mapped to floor with `step_on` entry. -- Sand, cave sand, mountain top and ice cosmetic floors (`MB_SAND`, `MB_SAND_CAVE`, `MB_MOUNTAIN_TOP`, `MB_ICE`) map to walkable open floor (`.` or cave encounter `~`). - -Dynamic warps preserve source tokens rather than inventing a fixed destination. -NPCs and pickups retain source event, script and optional local-ID provenance; -`source_event` is a zero-based source array index, not an in-game object ID. Unidentified pickups remain unresolved. - -Vermilion Gym retains its decomp baseline instead of the legacy builder's -late-story OPENED_TILES patch. Scripted geometry, flags, hidden/background -interactions, coordinate triggers and game-version differences still require -review. Structural validity does not establish story traversability. - -## Promotion gate - -Complete movement/stateful-geometry and source identity audits, review against -the corrected runtime pack, then publish an approved resource revision through -the normal manifest and consumer-pin process. Do not substitute this candidate -for corrected runtime resources merely to make a route pass. diff --git a/data/games/frlg/maps/source-candidate/RockTunnel_1F.json b/data/games/frlg/maps/source-candidate/RockTunnel_1F.json deleted file mode 100644 index 7c74ab9..0000000 --- a/data/games/frlg/maps/source-candidate/RockTunnel_1F.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "RockTunnel_1F", - "source": { - "decomp_file": "data/maps/RockTunnel_1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/RockTunnel_1F/map.json", - "events_sha256": "bf89c9e78f7373691783428c0143b6ecaa52be67edf508859ec175c79701a468", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "~~#####################~~~~~~~~~~~~~~~~~~######~", - "~~#~~~################~~~~~~~~~~~~~~~~~~~###~~#~", - "~~#~.~~#########~.~~~#~~~~~~~~~~~~~~~~~~~#~~~.#~", - "~~#~~~~~########~~~~~###################~#~~~~#~", - "~~#~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", - "###~~~~~########~~~~~~~~~~~~~~~~~~~~~~~#~#~~~~#~", - "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", - "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", - "#~~~~~~~~~~~####~~~~~~~~~~~~~~~~~~~~~~~###~~~~#~", - "#~~~~~~~~~~~############~~~~##############~~~~#~", - "#~~~~~###~~~############~~~~##############~~~~#~", - "#~~~~~###~~~~###########~~~~##############~~~~#~", - "#~~~~~###~~~~#####~~~###~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~~####~~~###~~~~.###~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~####~~~~###~~~~~#####~~~~~~~~~~~~~~~~~~~##~", - "#~~~~~####~~~###~~~~~#####~#~~~~~~~~~~~~~~#####~", - "#~~~~####~~~~~~~~~~~~##########################~", - "#~~~~~###~~~~~~~~~~~~##########################~", - "#~~~~~###~~~~~~~~~~~~##########################~", - "#~~~~####~~~~~~~~~~~~~~~~#####~~~#~~#####~~~###~", - "#~~~~~###~~~~~~~~~~~~~~~~####~~~~~~~####~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~.#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~####~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~#########~~~~~~~~###~~~~~~~#~", - "############################~~~~~~~~###~~~~~~~#~", - "############################~~~~~~~~###~~~~~~~#~", - "############################~~~~~~~~###~~~~~~##~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###~~~~~#~#~", - "############~~~~~~~~~~~########~~~~~~~~~~~~####~", - "############~~S~~~~~~~~########~~~~~~~~~~~~##~#~", - "############~~~~~~~#~~~##########~~~~~~~~~~~~~#~", - "############~~~~~~~~~~~########~###~~~~~~~~~~~#~", - "############~#~~~~~~#~~########################~", - "############~~~#~~.~~#~########################~", - "###############################################~", - "################################################" - ], - "points": { - "warp_0": [17, 2], - "warp_1": [45, 2], - "warp_2": [4, 2], - "warp_3": [20, 13], - "warp_4": [45, 21], - "warp_5": [18, 37] - }, - "warps": [ - {"coord": [17, 2], "enter": "step_on", "to_map": "Route10", "to_point": "warp_0"}, - {"coord": [45, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_0"}, - {"coord": [4, 2], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_1"}, - {"coord": [20, 13], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_2"}, - {"coord": [45, 21], "enter": "step_on", "to_map": "RockTunnel_B1F", "to_point": "warp_3"}, - {"coord": [18, 37], "enter": "walk_south", "to_map": "Route10", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "picnicker", - "coord": [26, 28], - "facing": "south", - "trainer": {"sight": 3}, - "source_event": 0, - "source_script": "RockTunnel_1F_EventScript_Dana" - }, - { - "name": "picnicker", - "coord": [39, 27], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 1, - "source_script": "RockTunnel_1F_EventScript_Ariana" - }, - { - "name": "picnicker", - "coord": [45, 24], - "facing": "west", - "trainer": {"sight": 5}, - "source_event": 2, - "source_script": "RockTunnel_1F_EventScript_Leah" - }, - { - "name": "hiker", - "coord": [20, 17], - "facing": "west", - "trainer": {"sight": 4}, - "source_event": 3, - "source_script": "RockTunnel_1F_EventScript_Lucas" - }, - { - "name": "hiker", - "coord": [5, 20], - "facing": "south", - "trainer": {"sight": 4}, - "source_event": 4, - "source_script": "RockTunnel_1F_EventScript_Oliver" - }, - { - "name": "hiker", - "coord": [7, 5], - "facing": "south", - "trainer": {"sight": 4}, - "source_event": 5, - "source_script": "RockTunnel_1F_EventScript_Lenny" - }, - { - "name": "poke_maniac", - "coord": [27, 10], - "facing": "west", - "trainer": {"sight": 3}, - "source_event": 6, - "source_script": "RockTunnel_1F_EventScript_Ashton" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [37, 5], - "source_event": 7, - "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_REPEL", - "source_script": "RockTunnel_1F_EventScript_ItemRepel", - "item": "repel" - }, - { - "name": "item_ball", - "coord": [33, 22], - "source_event": 8, - "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_PEARL", - "source_script": "RockTunnel_1F_EventScript_ItemPearl", - "item": "pearl" - }, - { - "name": "item_ball", - "coord": [22, 22], - "source_event": 9, - "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_1F_ESCAPE_ROPE", - "source_script": "RockTunnel_1F_EventScript_ItemEscapeRope", - "item": "escape_rope" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/RockTunnel_B1F.json b/data/games/frlg/maps/source-candidate/RockTunnel_B1F.json deleted file mode 100644 index 1fabed9..0000000 --- a/data/games/frlg/maps/source-candidate/RockTunnel_B1F.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "RockTunnel_B1F", - "source": { - "decomp_file": "data/maps/RockTunnel_B1F/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/RockTunnel_B1F/map.json", - "events_sha256": "668c7ede675ec83008984303faafef1d0b4d6ec5f11bcfb852e73a6280ad3cb8", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "###############################################~", - "###~~###~~~~####~~~~~##~#~~#######~~~~~~~#~####~", - "#~#~~###~~~~#####~~~~~#~~~~#####~#~~~~~~~~~~#~#~", - "#~.~~###~~~~####~~~~~~~~~~~~###~~.~~~~~~~~~~~##~", - "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~~~~~~~##~", - "#~~~~###~~~~###~~~~~~~~~~~~~###~~~~~~~~#~~~~~##~", - "#~~~~####~~~###~~~~~###~~~~~###~~~~~######~~~~#~", - "#~~~~###~~~####~~~~~###~~~~~###~~~~#######~~~~#~", - "#~~~~###~~~####~~~~~###########~~~~########~~~#~", - "#~~~~###~~~~###~~~~~###########~~~~########~~~#~", - "#~~~~###~~~####~~~~~###########~~~~~#######~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~####~~~~~~~####~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~.####~~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~#####~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~########~~~~~~~~~~#~", - "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", - "#~~~~###~~~~~~~~~~~~##################~~~~~~~~#~", - "#~~~~###~~~~~~~~~~~~##################~~~~~~~##~", - "#~~~~###~~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~~~###~", - "#~~~~###~~~~###~~~~~###~~~~~~~~~~~~~~~~~~~#~###~", - "#~~~~####~~~###~~~~~###~~~~~~~#################~", - "##~~~#####~~###~~~~~###~~~~~~~#################~", - "########~~~~###~~~~~###~~~~~~~#################~", - "########~~~~###########~~~~~~~#####~~~~~#~#####~", - "########~~~~###########~~~~~~~####~~~#~~~~~~###~", - "########~~~~###########~~~~~~~###~~~~~#~~~~~###~", - "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~.~~~~~~##~", - "#~~~~~~~~~~~#####~~~~~~~~~~~~~###~~~~~~~~~~~~##~", - "#~~~~~~~~~~~###~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", - "#~~~~~~~~~#####~~~~~~~~~~~~~~~###~~~~~~~~~~~~~#~", - "###############~~~~##############~~~~~~~~~~~~##~", - "###############~~~###############~~~~~~~~~~~~~#~", - "###############~~~###############~~~~~~~~~~~~~#~", - "#~~~~~~##~#~~~~~~~~~#~~~~####~~##~~~~~~~~~~~#~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~", - "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##~~~~~~~~~~~~~#~", - "###############################################~" - ], - "points": {"warp_0": [38, 28], "warp_1": [33, 3], "warp_2": [27, 12], "warp_3": [2, 3]}, - "warps": [ - {"coord": [38, 28], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_1"}, - {"coord": [33, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_2"}, - {"coord": [27, 12], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_3"}, - {"coord": [2, 3], "enter": "step_on", "to_map": "RockTunnel_1F", "to_point": "warp_4"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "poke_maniac", - "coord": [2, 6], - "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, - "source_event": 0, - "source_script": "RockTunnel_B1F_EventScript_Cooper" - }, - { - "name": "hiker", - "coord": [5, 11], - "facing": "south", - "trainer": {"sight": 4}, - "source_event": 1, - "source_script": "RockTunnel_B1F_EventScript_Dudley" - }, - { - "name": "picnicker", - "coord": [11, 15], - "facing": "south", - "trainer": {"sight": 4}, - "source_event": 2, - "source_script": "RockTunnel_B1F_EventScript_Sofia" - }, - { - "name": "hiker", - "coord": [36, 11], - "facing": "south", - "trainer": {"sight": 3}, - "source_event": 3, - "source_script": "RockTunnel_B1F_EventScript_Allen" - }, - { - "name": "hiker", - "coord": [41, 5], - "facing": "east", - "trainer": {"sight": 3}, - "source_event": 4, - "source_script": "RockTunnel_B1F_EventScript_Eric" - }, - { - "name": "poke_maniac", - "coord": [23, 23], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 5, - "source_script": "RockTunnel_B1F_EventScript_Steve" - }, - { - "name": "picnicker", - "coord": [15, 33], - "facing": "east", - "trainer": {"sight": 2}, - "source_event": 6, - "source_script": "RockTunnel_B1F_EventScript_Martha" - }, - { - "name": "poke_maniac", - "coord": [29, 35], - "facing": "south", - "trainer": {"sight": 3}, - "source_event": 7, - "source_script": "RockTunnel_B1F_EventScript_Winston" - }, - { - "name": "youngster", - "coord": [2, 29], - "source_event": 8, - "source_script": "RockTunnel_B1F_EventScript_RockSlideTutor" - }, - { - "name": "rock_smash_rock", - "coord": [1, 20], - "hide_flag": "FLAG_TEMP_12", - "source_event": 11, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [1, 22], - "hide_flag": "FLAG_TEMP_13", - "source_event": 12, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [4, 23], - "hide_flag": "FLAG_TEMP_14", - "source_event": 13, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [2, 23], - "hide_flag": "FLAG_TEMP_15", - "source_event": 14, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [39, 26], - "hide_flag": "FLAG_TEMP_16", - "source_event": 15, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [42, 26], - "hide_flag": "FLAG_TEMP_17", - "source_event": 16, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [43, 28], - "hide_flag": "FLAG_TEMP_18", - "source_event": 17, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [45, 30], - "hide_flag": "FLAG_TEMP_19", - "source_event": 18, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [45, 33], - "hide_flag": "FLAG_TEMP_1A", - "source_event": 19, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [25, 1], - "hide_flag": "FLAG_TEMP_1B", - "source_event": 20, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [27, 4], - "hide_flag": "FLAG_TEMP_1C", - "source_event": 21, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [23, 2], - "hide_flag": "FLAG_TEMP_1D", - "source_event": 22, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [26, 2], - "hide_flag": "FLAG_TEMP_1E", - "source_event": 23, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [24, 7], - "hide_flag": "FLAG_TEMP_1F", - "source_event": 24, - "source_script": "EventScript_RockSmash" - }, - { - "name": "rock_smash_rock", - "coord": [27, 6], - "hide_flag": "FLAG_TEMP_11", - "source_event": 25, - "source_script": "EventScript_RockSmash" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [2, 37], - "source_event": 9, - "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_REVIVE", - "source_script": "RockTunnel_B1F_EventScript_ItemRevive", - "item": "revive" - }, - { - "name": "item_ball", - "coord": [9, 2], - "source_event": 10, - "hide_flag": "FLAG_HIDE_ROCK_TUNNEL_B1F_MAX_ETHER", - "source_script": "RockTunnel_B1F_EventScript_ItemMaxEther", - "item": "max_ether" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route1.json b/data/games/frlg/maps/source-candidate/Route1.json deleted file mode 100644 index 7cddf40..0000000 --- a/data/games/frlg/maps/source-candidate/Route1.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route1", - "source": { - "decomp_file": "data/maps/Route1/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "##########....##########", - "##########....##########", - "##....................##", - "##....................##", - "##......##............##", - "##vvvvvv##vvvvvv......##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##......##~~~~~~~~~~~~##", - "##vvvvvv##~~~~~~~~~~~~##", - "##......##............##", - "##....................##", - "##..............~~~~~~##", - "##..............~~~~~~##", - "####vvvvvv######~~~~~~##", - "####......######~~~~~~##", - "##..............~~~~~~##", - "##....................##", - "##....................##", - "##vv.vvvv..vvvvvvvvvvv##", - "##....................##", - "##....................##", - "##....................##", - "##..........~~~~~~....##", - "############~~~~~~....##", - "############~~~~~~vvvv##", - "##..........~~~~~~....##", - "##..........~~~~~~....##", - "##....................##", - "##....................##", - "##vvvv...Svvvvvvvvvvvv##", - "##..~~~~~~~......~~~~~##", - "##..~~~~~~~......~~~~~##", - "##~~~~~~~......~~~~~..##", - "##~~~~~~~...~~.~~~~~..##", - "############~~##########", - "##.........#~~#.......##", - "############~~##########", - "############~~##########" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "ViridianCity", "offset": -12}, - {"side": "south", "to_map": "PalletTown", "offset": 0} - ], - "npcs": [ - { - "name": "clerk", - "coord": [6, 28], - "wander": {"min": [6, 27], "max": [6, 29]}, - "source_event": 0, - "source_script": "Route1_EventScript_MartClerk" - }, - { - "name": "boy", - "coord": [19, 16], - "wander": {"min": [18, 16], "max": [20, 16]}, - "source_event": 1, - "source_script": "Route1_EventScript_Boy" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route10.json b/data/games/frlg/maps/source-candidate/Route10.json deleted file mode 100644 index 13afac3..0000000 --- a/data/games/frlg/maps/source-candidate/Route10.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route10", - "source": { - "decomp_file": "data/maps/Route10/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "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.##########", - "###########...##########", - "########......##########", - "########......##########", - "########.....###########", - "########.....###########" - ], - "points": {"warp_0": [8, 19], "warp_1": [8, 57], "warp_2": [7, 40], "warp_3": [13, 20], "warp_4": [2, 37]}, - "warps": [ - {"coord": [8, 19], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_0"}, - {"coord": [8, 57], "enter": "cave_entrance", "to_map": "RockTunnel_1F", "to_point": "warp_5"}, - {"coord": [7, 40], "enter": "cave_entrance", "to_map": "PowerPlant", "to_point": "warp_1"}, - {"coord": [13, 20], "enter": "walk_into", "to_map": "Route10_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [2, 37], "enter": "walk_east", "to_map": "PowerPlant", "to_point": "warp_3"} - ], - "flag_sets": {}, - "connections": [ - {"side": "south", "to_map": "LavenderTown", "offset": 0}, - {"side": "west", "to_map": "Route9", "offset": 0} - ], - "npcs": [ - { - "name": "picnicker", - "coord": [7, 60], - "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, - "source_event": 0, - "source_script": "Route10_EventScript_Carol" - }, - { - "name": "hiker", - "coord": [4, 62], - "trainer": {"sight": 1, "looks": ["north", "east", "south", "west"]}, - "source_event": 1, - "source_script": "Route10_EventScript_Clark" - }, - { - "name": "poke_maniac", - "coord": [15, 70], - "wander": {"min": [13, 70], "max": [17, 70]}, - "trainer": {"sight": 2, "looks": ["west", "east"]}, - "source_event": 2, - "source_script": "Route10_EventScript_Herman" - }, - { - "name": "hiker", - "coord": [4, 68], - "facing": "west", - "trainer": {"sight": 2}, - "source_event": 3, - "source_script": "Route10_EventScript_Trent" - }, - { - "name": "poke_maniac", - "coord": [13, 44], - "facing": "west", - "trainer": {"sight": 5}, - "source_event": 4, - "source_script": "Route10_EventScript_Mark" - }, - { - "name": "picnicker", - "coord": [9, 27], - "facing": "south", - "trainer": {"sight": 2}, - "source_event": 5, - "source_script": "Route10_EventScript_Heidi" - }, - { - "name": "cut_tree", - "coord": [10, 20], - "hide_flag": "FLAG_TEMP_12", - "source_event": 6, - "source_script": "EventScript_CutTree" - }, - { - "name": "cut_tree", - "coord": [10, 22], - "hide_flag": "FLAG_TEMP_13", - "source_event": 7, - "source_script": "EventScript_CutTree" - }, - { - "name": "cut_tree", - "coord": [10, 24], - "hide_flag": "FLAG_TEMP_14", - "source_event": 8, - "source_script": "EventScript_CutTree" - }, - { - "name": "cut_tree", - "coord": [10, 26], - "hide_flag": "FLAG_TEMP_15", - "source_event": 9, - "source_script": "EventScript_CutTree" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route2.json b/data/games/frlg/maps/source-candidate/Route2.json deleted file mode 100644 index f48378f..0000000 --- a/data/games/frlg/maps/source-candidate/Route2.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route2", - "source": { - "decomp_file": "data/maps/Route2/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/Route2/map.json", - "events_sha256": "2562e3736b600c95b8c0a4c2a1bb3fb062f5c50208bebc43cd4303328ccda7ea", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "########....############", - "########....############", - "##~~~~~~~...############", - "##~~~~~~~...#.........##", - "##~~~~~~~...#.........##", - "##~~~~~~~...#.........##", - "##~~~~~~~...#########.##", - "##~~~~~~~...#########.##", - "##~~~~~~~...#########.##", - "##..........#########.##", - "##..........#########.##", - "##..........#####.###.##", - "##..........#.S.......##", - "####....###.#.........##", - "###########...........##", - "##########............##", - "##############........##", - "##############........##", - "##############........##", - "##############........##", - "##############........##", - "###################...##", - "#################D#...##", - "##############........##", - "################......##", - "################......##", - "##################.#####", - "################......##", - "################......##", - "################......##", - "################......##", - "################......##", - "################vvv.vv##", - "################......##", - "################......##", - "################......##", - "################......##", - "################vvv.vv##", - "################......##", - "################......##", - "################......##", - "#################....###", - "########################", - "########################", - "########################", - "##........##############", - "##################..####", - "#################....###", - "################......##", - "################......##", - "###.####.#######......##", - "#####..#########vvv.vv##", - "####....########......##", - "##............##......##", - "##............##......##", - "##vvvvvvvvv...##......##", - "##....~~~~~~~.##......##", - "##....~~~~~~~.##vv.vvv##", - "##....~~~~~~~.##......##", - "##....~~~~~~~.##......##", - "##....~~~~~~~.##......##", - "##............##......##", - "##....................##", - "##....##########......##", - "##....##########......##", - "##....##########......##", - "##....##########......##", - "##............##......##", - "##............##......##", - "##....................##", - "##vvvvvvv..vvv..vv.vvv##", - "##............##......##", - "####..........##......##", - "####...S......##......##", - "####..........##......##", - "####..........##......##", - "####..........##......##", - "####..........##......##", - "#######.......##########", - "#######.....############" - ], - "points": { - "warp_0": [5, 13], - "warp_2": [5, 51], - "warp_3": [17, 11], - "warp_4": [17, 22], - "warp_5": [18, 46], - "warp_6": [18, 41] - }, - "warps": [ - {"coord": [5, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, - {"coord": [6, 13], "enter": "walk_south", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_3"}, - {"coord": [5, 51], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_1"}, - {"coord": [17, 11], "enter": "cave_entrance", "to_map": "DiglettsCave_NorthEntrance", "to_point": "warp_1"}, - {"coord": [17, 22], "enter": "walk_into", "to_map": "Route2_House", "to_point": "warp_1"}, - {"coord": [18, 46], "enter": "cave_entrance", "to_map": "Route2_EastBuilding", "to_point": "warp_1"}, - {"coord": [18, 41], "enter": "walk_south", "to_map": "Route2_EastBuilding", "to_point": "warp_3"}, - {"coord": [19, 41], "enter": "walk_south", "to_map": "Route2_EastBuilding", "to_point": "warp_3"}, - {"coord": [19, 46], "enter": "cave_entrance", "to_map": "Route2_EastBuilding", "to_point": "warp_1"}, - {"coord": [6, 51], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "PewterCity", "offset": -12}, - {"side": "south", "to_map": "ViridianCity", "offset": -12} - ], - "npcs": [ - { - "name": "cut_tree", - "coord": [16, 62], - "hide_flag": "FLAG_TEMP_14", - "source_event": 0, - "source_script": "EventScript_CutTree" - }, - { - "name": "cut_tree", - "coord": [15, 69], - "hide_flag": "FLAG_TEMP_13", - "source_event": 1, - "source_script": "EventScript_CutTree" - }, - { - "name": "cut_tree", - "coord": [11, 13], - "hide_flag": "FLAG_TEMP_15", - "source_event": 2, - "source_script": "EventScript_CutTree" - }, - { - "name": "cut_tree", - "coord": [18, 26], - "hide_flag": "FLAG_TEMP_16", - "source_event": 3, - "source_script": "EventScript_CutTree" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [17, 54], - "source_event": 4, - "hide_flag": "FLAG_HIDE_ROUTE2_ETHER", - "source_script": "Route2_EventScript_ItemEther", - "item": "ether" - }, - { - "name": "item_ball", - "coord": [17, 64], - "source_event": 5, - "hide_flag": "FLAG_HIDE_ROUTE2_PARALYZE_HEAL", - "source_script": "Route2_EventScript_ItemParalyzeHeal", - "item": "paralyze_heal" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route22.json b/data/games/frlg/maps/source-candidate/Route22.json deleted file mode 100644 index 3f465f1..0000000 --- a/data/games/frlg/maps/source-candidate/Route22.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route22", - "source": { - "decomp_file": "data/maps/Route22/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "tiles": [ - "#############################################...", - "###########################################.#...", - "##################################........#.###.", - "##################################vvvv.vvv#...##", - "######################....................#.....", - "########D######...........................######", - "#####.......###.........................##......", - "###...........#.............######......##......", - "###...........#vvvvvvvwwwwww######vv..vv##......", - "###vvvvvvv..vv#~~~~~~~wwwwww######~~~~~~##......", - "###...........#~~~~~~~wwwwww######~~~~~~##....##", - "###...........#~~~~~~~wwwwww######~~~~~~##....##", - "####...S#######~~~~~~~......######~~~~~~##....##", - "####...........~~~~~~~......######~~~~~~##....##", - "####........................######............##", - "####vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv..vvvvv##", - "####..........................................##", - "####..........................................##", - "####..........................................##", - "################################################", - "################################################", - "################################################", - "################################################", - "################################################" - ], - "points": {"warp_0": [8, 5]}, - "warps": [ - {"coord": [8, 5], "enter": "walk_into", "to_map": "Route22_NorthEntrance", "to_point": "warp_2"}, - {"coord": [9, 5], "enter": "walk_into", "to_map": "Route22_NorthEntrance", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "Route23", "offset": 0}, - {"side": "east", "to_map": "ViridianCity", "offset": -10} - ], - "npcs": [ - { - "name": "blue", - "coord": [25, 4], - "hide_flag": "FLAG_HIDE_ROUTE_22_RIVAL", - "source_event": 0, - "source_script": "0x0", - "source_local_id": "LOCALID_ROUTE22_RIVAL" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route24.json b/data/games/frlg/maps/source-candidate/Route24.json deleted file mode 100644 index 3bf436a..0000000 --- a/data/games/frlg/maps/source-candidate/Route24.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route24", - "source": { - "decomp_file": "data/maps/Route24/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/Route24/map.json", - "events_sha256": "f844a16ec16a9aa725bcabf8862ec7b08be16b511f10664ef6e15f2448dd90a8", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "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" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [ - {"side": "south", "to_map": "CeruleanCity", "offset": -12}, - {"side": "east", "to_map": "Route25", "offset": 0} - ], - "npcs": [ - { - "name": "man", - "coord": [12, 15], - "hide_flag": "FLAG_HIDE_NUGGET_BRIDGE_ROCKET", - "source_event": 0, - "source_script": "Route24_EventScript_Rocket", - "source_local_id": "LOCALID_ROUTE24_ROCKET" - }, - { - "name": "camper", - "coord": [12, 19], - "facing": "west", - "trainer": {"sight": 2}, - "source_event": 1, - "source_script": "Route24_EventScript_Ethan" - }, - { - "name": "lass", - "coord": [10, 22], - "facing": "east", - "trainer": {"sight": 2}, - "source_event": 2, - "source_script": "Route24_EventScript_Reli" - }, - { - "name": "youngster", - "coord": [12, 25], - "facing": "west", - "trainer": {"sight": 2}, - "source_event": 3, - "source_script": "Route24_EventScript_Timmy" - }, - { - "name": "lass", - "coord": [10, 28], - "facing": "east", - "trainer": {"sight": 2}, - "source_event": 4, - "source_script": "Route24_EventScript_Ali" - }, - { - "name": "bug_catcher", - "coord": [12, 31], - "facing": "west", - "trainer": {"sight": 2}, - "source_event": 5, - "source_script": "Route24_EventScript_Cale" - }, - { - "name": "camper", - "coord": [5, 21], - "facing": "north", - "trainer": {"sight": 5}, - "source_event": 6, - "source_script": "Route24_EventScript_Shane" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [11, 4], - "source_event": 7, - "hide_flag": "FLAG_HIDE_ROUTE24_TM45", - "source_script": "Route24_EventScript_ItemTM45", - "item": "tm45" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route25.json b/data/games/frlg/maps/source-candidate/Route25.json deleted file mode 100644 index cfcb51c..0000000 --- a/data/games/frlg/maps/source-candidate/Route25.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route25", - "source": { - "decomp_file": "data/maps/Route25/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/Route25/map.json", - "events_sha256": "a4b412784121ae753cb88e5a1be6db1b5575e77946ba3c6b87aca8087b1dfcb6", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "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" - ], - "points": {"warp_0": [51, 4]}, - "warps": [{"coord": [51, 4], "enter": "walk_into", "to_map": "Route25_SeaCottage", "to_point": "warp_1"}], - "flag_sets": {}, - "connections": [{"side": "west", "to_map": "Route24", "offset": 0}], - "npcs": [ - { - "name": "hiker", - "coord": [11, 4], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 0, - "source_script": "Route25_EventScript_Franklin" - }, - { - "name": "youngster", - "coord": [18, 2], - "facing": "south", - "trainer": {"sight": 2}, - "source_event": 1, - "source_script": "Route25_EventScript_Joey" - }, - { - "name": "hiker", - "coord": [17, 7], - "facing": "east", - "trainer": {"sight": 2}, - "source_event": 2, - "source_script": "Route25_EventScript_Wayne" - }, - { - "name": "youngster", - "coord": [22, 4], - "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, - "source_event": 3, - "source_script": "Route25_EventScript_Dan" - }, - { - "name": "picnicker", - "coord": [22, 8], - "facing": "east", - "trainer": {"sight": 2}, - "source_event": 4, - "source_script": "Route25_EventScript_Kelsey" - }, - { - "name": "hiker", - "coord": [27, 9], - "facing": "north", - "trainer": {"sight": 3}, - "source_event": 5, - "source_script": "Route25_EventScript_Nob" - }, - { - "name": "camper", - "coord": [28, 4], - "facing": "south", - "trainer": {"sight": 3}, - "source_event": 6, - "source_script": "Route25_EventScript_Flint" - }, - { - "name": "youngster", - "coord": [36, 4], - "trainer": {"sight": 2, "looks": ["north", "east", "south", "west"]}, - "source_event": 7, - "source_script": "Route25_EventScript_Chad" - }, - { - "name": "lass", - "coord": [42, 5], - "facing": "south", - "trainer": {"sight": 3}, - "source_event": 8, - "source_script": "Route25_EventScript_Haley" - }, - { - "name": "cut_tree", - "coord": [30, 3], - "hide_flag": "FLAG_TEMP_12", - "source_event": 10, - "source_script": "EventScript_CutTree" - }, - {"name": "beauty", "coord": [49, 10], "source_event": 11, "source_script": "Route25_EventScript_Beauty"}, - {"name": "man", "coord": [49, 11], "source_event": 12, "source_script": "Route25_EventScript_Man"} - ], - "items": [ - { - "name": "item_ball", - "coord": [26, 2], - "source_event": 9, - "hide_flag": "FLAG_HIDE_ROUTE25_TM43", - "source_script": "Route25_EventScript_ItemTM43", - "item": "tm43" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route25_SeaCottage.json b/data/games/frlg/maps/source-candidate/Route25_SeaCottage.json deleted file mode 100644 index 630d507..0000000 --- a/data/games/frlg/maps/source-candidate/Route25_SeaCottage.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route25_SeaCottage", - "source": { - "decomp_file": "data/maps/Route25_SeaCottage/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "allow_running": false, - "tiles": [ - "###############", - "###############", - "#.##########..#", - "###D######D#.##", - "..............#", - "....##........#", - "..............#", - "#.............#", - "#..............", - "###..........##", - "###############" - ], - "points": {"warp_1": [7, 9]}, - "warps": [ - {"coord": [6, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"}, - {"coord": [7, 9], "enter": "walk_south", "to_map": "Route25", "to_point": "warp_0"}, - {"coord": [8, 9], "enter": "walk_into", "to_map": "Route25", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "bill", - "coord": [7, 5], - "hide_flag": "FLAG_HIDE_BILL_HUMAN_SEA_COTTAGE", - "source_event": 0, - "source_script": "Route25_SeaCottage_EventScript_Bill", - "source_local_id": "LOCALID_BILL_HUMAN" - }, - { - "name": "clefairy", - "coord": [10, 6], - "hide_flag": "FLAG_HIDE_BILL_CLEFAIRY", - "source_event": 1, - "source_script": "Route25_SeaCottage_EventScript_Bill", - "source_local_id": "LOCALID_BILL_CLEFAIRY" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route2_ViridianForest_NorthEntrance.json b/data/games/frlg/maps/source-candidate/Route2_ViridianForest_NorthEntrance.json deleted file mode 100644 index 3892bd2..0000000 --- a/data/games/frlg/maps/source-candidate/Route2_ViridianForest_NorthEntrance.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route2_ViridianForest_NorthEntrance", - "source": { - "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "###############", - "#######.#######", - "##...#...#...##", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#.............#", - "###############" - ], - "points": {"warp_1": [7, 10], "warp_3": [7, 1]}, - "warps": [ - {"coord": [6, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, - {"coord": [7, 10], "enter": "walk_south", "to_map": "ViridianForest", "to_point": "warp_2"}, - {"coord": [8, 10], "enter": "walk_into", "to_map": "ViridianForest", "to_point": "warp_2"}, - {"coord": [7, 1], "enter": "cave_entrance", "to_map": "Route2", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "youngster", - "coord": [5, 4], - "source_event": 0, - "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_Youngster" - }, - { - "name": "old_man_1", - "coord": [4, 7], - "source_event": 1, - "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_OldMan" - }, - { - "name": "cooltrainer_f", - "coord": [10, 5], - "source_event": 2, - "source_script": "Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route2_ViridianForest_SouthEntrance.json b/data/games/frlg/maps/source-candidate/Route2_ViridianForest_SouthEntrance.json deleted file mode 100644 index 7a8b774..0000000 --- a/data/games/frlg/maps/source-candidate/Route2_ViridianForest_SouthEntrance.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route2_ViridianForest_SouthEntrance", - "source": { - "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "###############", - "#######.#######", - "##...#...#...##", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#..........##.#", - "###........##.#", - "#.............#", - "#.............#", - "###############" - ], - "points": {"warp_1": [7, 10], "warp_3": [7, 1]}, - "warps": [ - {"coord": [6, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, - {"coord": [7, 10], "enter": "walk_south", "to_map": "Route2", "to_point": "warp_2"}, - {"coord": [8, 10], "enter": "walk_into", "to_map": "Route2", "to_point": "warp_2"}, - {"coord": [7, 1], "enter": "cave_entrance", "to_map": "ViridianForest", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "woman_2", - "coord": [10, 6], - "source_event": 0, - "source_script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman1" - }, - { - "name": "woman_1", - "coord": [4, 7], - "wander": {"min": [3, 6], "max": [5, 8]}, - "source_event": 1, - "source_script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman2" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route3.json b/data/games/frlg/maps/source-candidate/Route3.json deleted file mode 100644 index 9a9b984..0000000 --- a/data/games/frlg/maps/source-candidate/Route3.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route3", - "source": { - "decomp_file": "data/maps/Route3/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "####################################################################........########", - "####################################################################........########", - "####################################################################........########", - "#############......................#################################.......#########", - "###########..........................###############################.....###########", - "###########..........................######................#########.....###########", - "###########.........###.......##.....#####...................#######.....###########", - "###########vvv..vvvv###vvvvvvv##vvv..#####...................#######.....###########", - "#######.............###.......##.....#####vvvv..#######vvvvv.#######vvv..###########", - "....................###.......##................#######......#######.....###########", - "....................###.......###...............#######......#####.......~~~~#######", - ".........###........###.......###~~~~~~~........#######...............##S~~~~~~#####", - "..##########vvvv..vv###vvvvvvv###~~~~~~~~~~~~~~########................~~~~~~~~#####", - "############........###.......###~~~~~~~~~~~~~~########................~~~~~~~~#####", - "############.................######~~~~~~~~~~~~########...............~~~~~~~~~#####", - "##############...............######~~~~~~~~~~~~##########.............~~~~~~~~~#####", - "#######################################~~~~~~~~##########.............~~~~~~########", - "####################################################################################", - "####################################################################################", - "####################################################################################" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "Route4", "offset": 60}, - {"side": "west", "to_map": "PewterCity", "offset": -10} - ], - "npcs": [ - {"name": "youngster", "coord": [70, 13], "source_event": 0, "source_script": "Route3_EventScript_Youngster"}, - { - "name": "lass", - "coord": [40, 11], - "wander": {"min": [40, 10], "max": [40, 12]}, - "trainer": {"sight": 3, "looks": ["north", "south"]}, - "source_event": 1, - "source_script": "Route3_EventScript_Robin" - }, - { - "name": "bug_catcher", - "coord": [32, 6], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 2, - "source_script": "Route3_EventScript_James" - }, - { - "name": "lass", - "coord": [30, 3], - "facing": "west", - "trainer": {"sight": 5}, - "source_event": 3, - "source_script": "Route3_EventScript_Sally" - }, - { - "name": "bug_catcher", - "coord": [25, 4], - "facing": "south", - "trainer": {"sight": 2}, - "source_event": 4, - "source_script": "Route3_EventScript_Greg" - }, - { - "name": "youngster", - "coord": [29, 10], - "facing": "west", - "trainer": {"sight": 5}, - "source_event": 5, - "source_script": "Route3_EventScript_Calvin" - }, - { - "name": "lass", - "coord": [19, 9], - "facing": "west", - "trainer": {"sight": 5}, - "source_event": 6, - "source_script": "Route3_EventScript_Janice" - }, - { - "name": "bug_catcher", - "coord": [12, 6], - "facing": "east", - "trainer": {"sight": 3}, - "source_event": 7, - "source_script": "Route3_EventScript_Colton" - }, - { - "name": "youngster", - "coord": [17, 4], - "facing": "south", - "trainer": {"sight": 2}, - "source_event": 8, - "source_script": "Route3_EventScript_Ben" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route4.json b/data/games/frlg/maps/source-candidate/Route4.json deleted file mode 100644 index bf8d109..0000000 --- a/data/games/frlg/maps/source-candidate/Route4.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route4", - "source": { - "decomp_file": "data/maps/Route4/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/Route4/map.json", - "events_sha256": "5b0b84cb73ecc6597470d01d5933ca36d5e4410cdda53dddb72922689e5653ac", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "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########################################.............#################.........#############", - "########........############################################################################################" - ], - "points": {"warp_0": [19, 5], "warp_1": [32, 5], "warp_2": [12, 5]}, - "warps": [ - {"coord": [19, 5], "enter": "cave_entrance", "to_map": "MtMoon_1F", "to_point": "warp_3"}, - {"coord": [32, 5], "enter": "cave_entrance", "to_map": "MtMoon_B1F", "to_point": "warp_7"}, - {"coord": [12, 5], "enter": "walk_into", "to_map": "Route4_PokemonCenter_1F", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [ - {"side": "south", "to_map": "Route3", "offset": -60}, - {"side": "east", "to_map": "CeruleanCity", "offset": -10} - ], - "npcs": [ - { - "name": "woman_1", - "coord": [9, 8], - "wander": {"min": [8, 7], "max": [10, 9]}, - "source_event": 0, - "source_script": "Route4_EventScript_Woman" - }, - { - "name": "lass", - "coord": [75, 3], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 1, - "source_script": "Route4_EventScript_Crissy" - }, - { - "name": "boy", - "coord": [15, 14], - "wander": {"min": [14, 14], "max": [16, 14]}, - "source_event": 3, - "source_script": "Route4_EventScript_Boy" - }, - {"name": "black_belt", "coord": [47, 3], "source_event": 4, "source_script": "Route4_EventScript_MegaPunchTutor"}, - {"name": "black_belt", "coord": [50, 3], "source_event": 5, "source_script": "Route4_EventScript_MegaKickTutor"} - ], - "items": [ - { - "name": "item_ball", - "coord": [67, 5], - "source_event": 2, - "hide_flag": "FLAG_HIDE_ROUTE4_TM05", - "source_script": "Route4_EventScript_ItemTM05", - "item": "tm05" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route5.json b/data/games/frlg/maps/source-candidate/Route5.json deleted file mode 100644 index 61437a7..0000000 --- a/data/games/frlg/maps/source-candidate/Route5.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route5", - "source": { - "decomp_file": "data/maps/Route5/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#~~~~~~~~#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#vvvvvvvv#....###############", - "###############....#........#....###############", - "###############....#........#....###############", - "###############....#.#####..#....###############", - "###############....#.#####..#....###############", - "###############....#.#####..#....###############", - "###############....#.##D##..#....###############", - "###############....#........#....###############", - "###############....vvvvvvvvvv....###############", - "###############..................###############", - "###############...............##################", - "###############...............##################", - "###############...............#D################", - "###############.......#....#....S###############", - "###############.......######.....###############", - "################################################", - "##############........######......##############", - "################################################", - "################################################", - "########################..######################", - "#######################....#####################" - ], - "points": {"warp_0": [31, 31], "warp_1": [23, 25], "warp_2": [24, 32], "warp_3": [25, 32]}, - "warps": [ - {"coord": [31, 31], "enter": "walk_into", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_1"}, - {"coord": [23, 25], "enter": "walk_into", "to_map": "Route5_PokemonDayCare", "to_point": "warp_1"}, - {"coord": [24, 32], "enter": "walk_south", "to_map": "Route5_SouthEntrance", "to_point": "warp_1"}, - {"coord": [25, 32], "enter": "walk_south", "to_map": "Route5_SouthEntrance", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "CeruleanCity", "offset": 0}, - {"side": "south", "to_map": "SaffronCity_Connection", "offset": 0} - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route6.json b/data/games/frlg/maps/source-candidate/Route6.json deleted file mode 100644 index eecec8f..0000000 --- a/data/games/frlg/maps/source-candidate/Route6.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route6", - "source": { - "decomp_file": "data/maps/Route6/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "tiles": [ - "########################", - "########################", - "########################", - "########################", - "########################", - "##.......###..###.....##", - "##.......#......#.....##", - "##vvv.vvvv......vvv.vv##", - "##....................##", - "##....................##", - "##....................##", - "##vvvvvvv.vvvvvvvv######", - "##................######", - "##................#D####", - "##....................##", - "##~~~~...~~~~~~......S##", - "##~~~~...~~~~~~~~~~~~~##", - "##~~~~...~~~~~~~~~~~~~##", - "##~~~~...~~~~~~~~~~~~~##", - "##~~~~..............~~##", - "##~~~~..............~~##", - "##~~~~..............~~##", - "##~~~~~~~~~~~~~~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##wwwwwwwwwwwww~~...~~##", - "##..................~~##", - "##..................~~##", - "##..................~~##", - "#######......~~~~#######", - "##....#......~~~~#....##", - "#######......~~~~#######", - "#######......~~~~#######", - "##########...###########", - "######...#...#....######", - "########.#...###########", - "########.#...###########", - "wwwwwwwww#...###########", - "wwwwwwwww#...###########" - ], - "points": {"warp_0": [19, 13], "warp_1": [12, 5]}, - "warps": [ - {"coord": [19, 13], "enter": "walk_into", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_1"}, - {"coord": [12, 5], "enter": "cave_entrance", "to_map": "Route6_NorthEntrance", "to_point": "warp_2"}, - {"coord": [13, 5], "enter": "cave_entrance", "to_map": "Route6_NorthEntrance", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "SaffronCity_Connection", "offset": 0}, - {"side": "south", "to_map": "VermilionCity", "offset": -12} - ], - "npcs": [ - { - "name": "bug_catcher", - "coord": [3, 16], - "facing": "east", - "trainer": {"sight": 5}, - "source_event": 0, - "source_script": "Route6_EventScript_Keigo" - }, - {"name": "camper", "coord": [12, 21], "source_event": 1, "source_script": "Route6_EventScript_Ricky"}, - {"name": "picnicker", "coord": [13, 21], "source_event": 2, "source_script": "Route6_EventScript_Nancy"}, - { - "name": "bug_catcher", - "coord": [20, 25], - "facing": "west", - "trainer": {"sight": 3}, - "source_event": 3, - "source_script": "Route6_EventScript_Elijah" - }, - { - "name": "picnicker", - "coord": [13, 32], - "facing": "west", - "trainer": {"sight": 3}, - "source_event": 4, - "source_script": "Route6_EventScript_Isabelle" - }, - { - "name": "camper", - "coord": [13, 33], - "facing": "west", - "trainer": {"sight": 3}, - "source_event": 5, - "source_script": "Route6_EventScript_Jeff" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/Route9.json b/data/games/frlg/maps/source-candidate/Route9.json deleted file mode 100644 index 93cee61..0000000 --- a/data/games/frlg/maps/source-candidate/Route9.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "Route9", - "source": { - "decomp_file": "data/maps/Route9/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/Route9/map.json", - "events_sha256": "0a8b7cfd3028e15d59903f3f5dfc503f98712e5592d8d6a99a26cddc430d5270", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "########################################################################", - "......#~~~~~~~~~~~............######~~~~~~######.................#######", - "#######~~~~~~~~~~~............######~~~~~~######.................#######", - "#######~~~~~~~~~~~#####.......######......######..........#####..#######", - "#######~~~~~~~~~~~#####vvvvv..######vv..vv######vv..vvvvvv#####vv#######", - "#######~~~~~~~~~~~#####.......######......######..........#####..#######", - "......#...........#####.......######......................#####..#######", - "#######vvvvvvvv#..#####......S###########.................#####..#######", - "...............########.............#####....#####...##########.........", - "..#............########.............#####....#####...#####..............", - "###########....########vvvvvvvvvvv..#####....#####...#####..............", - "....#######vvvv########.............#####vvvv#####vv.#####...#####...###", - "###########....########.............#####....#####...#####vvv#####vvv###", - "###########..........................................#####...#####...###", - "###########...............######.....................#####...#####...###", - "###########vvvvvvvvv..vvvv######vv..vvvvvvvvvvvvvvvvv#####vvv#####vvv###", - "###########...............######.....................................###", - "###########...............######.....................................###", - "########################################################################", - "########################################################################" - ], - "points": {}, - "warps": [], - "flag_sets": {}, - "connections": [ - {"side": "west", "to_map": "CeruleanCity", "offset": -10}, - {"side": "east", "to_map": "Route10", "offset": 0} - ], - "npcs": [ - { - "name": "picnicker", - "coord": [14, 10], - "facing": "west", - "trainer": {"sight": 3}, - "source_event": 0, - "source_script": "Route9_EventScript_Alicia" - }, - { - "name": "hiker", - "coord": [20, 17], - "trainer": {"sight": 4, "looks": ["north", "west"]}, - "source_event": 1, - "source_script": "Route9_EventScript_Jeremy" - }, - { - "name": "hiker", - "coord": [61, 16], - "facing": "south", - "trainer": {"sight": 1}, - "source_event": 2, - "source_script": "Route9_EventScript_Alan" - }, - { - "name": "camper", - "coord": [26, 7], - "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, - "source_event": 3, - "source_script": "Route9_EventScript_Chris" - }, - { - "name": "bug_catcher", - "coord": [26, 1], - "facing": "south", - "trainer": {"sight": 2}, - "source_event": 4, - "source_script": "Route9_EventScript_Brent" - }, - { - "name": "bug_catcher", - "coord": [49, 7], - "facing": "east", - "trainer": {"sight": 3}, - "source_event": 5, - "source_script": "Route9_EventScript_Conner" - }, - { - "name": "hiker", - "coord": [53, 2], - "wander": {"min": [50, 2], "max": [56, 2]}, - "trainer": {"sight": 1, "looks": ["west", "east"]}, - "source_event": 6, - "source_script": "Route9_EventScript_Brice" - }, - { - "name": "picnicker", - "coord": [60, 9], - "facing": "east", - "trainer": {"sight": 4}, - "source_event": 7, - "source_script": "Route9_EventScript_Caitlin" - }, - { - "name": "camper", - "coord": [36, 6], - "facing": "east", - "trainer": {"sight": 5}, - "source_event": 8, - "source_script": "Route9_EventScript_Drew" - }, - { - "name": "cut_tree", - "coord": [2, 8], - "hide_flag": "FLAG_TEMP_12", - "source_event": 9, - "source_script": "EventScript_CutTree", - "source_local_id": "LOCALID_ROUTE9_CUT_TREE" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [12, 17], - "source_event": 10, - "hide_flag": "FLAG_HIDE_ROUTE9_TM40", - "source_script": "Route9_EventScript_ItemTM40", - "item": "tm40" - }, - { - "name": "item_ball", - "coord": [65, 17], - "source_event": 11, - "hide_flag": "FLAG_HIDE_ROUTE9_BURN_HEAL", - "source_script": "Route9_EventScript_ItemBurnHeal", - "item": "burn_heal" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/SSAnne_1F_Corridor.json b/data/games/frlg/maps/source-candidate/SSAnne_1F_Corridor.json deleted file mode 100644 index 0408916..0000000 --- a/data/games/frlg/maps/source-candidate/SSAnne_1F_Corridor.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "SSAnne_1F_Corridor", - "source": { - "decomp_file": "data/maps/SSAnne_1F_Corridor/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" - }, - "tiles": [ - ".................#####.........", - ".................##D##.........", - ".................#...#.........", - ".................#...#.........", - ".................#...#.........", - ".................#...#.........", - "#.################...##########", - "##################...##########", - "###...........................#", - "###...........................#", - "#.............................#", - "#...######################....#", - "#...######################....#", - "#...######################....#", - "#...######################....#", - "#...######################....#", - "#...########################..#", - "#...########################..#", - "#...########################..#", - ".###.##########################", - "###############################" - ], - "points": { - "warp_0": [3, 8], - "warp_1": [2, 18], - "warp_2": [19, 1], - "warp_3": [20, 0], - "warp_5": [28, 17], - "warp_6": [5, 10], - "warp_7": [8, 10], - "warp_8": [11, 10], - "warp_9": [14, 10], - "warp_10": [17, 10], - "warp_11": [23, 10], - "warp_12": [20, 10] - }, - "warps": [ - {"coord": [3, 8], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_0"}, - {"coord": [2, 18], "enter": "walk_south", "to_map": "SSAnne_Kitchen", "to_point": "warp_0"}, - {"coord": [19, 1], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_2"}, - {"coord": [20, 0], "enter": "walk_into", "to_map": "SSAnne_Exterior", "to_point": "warp_3"}, - {"coord": [3, 20], "enter": "walk_into", "to_map": "SSAnne_Kitchen", "to_point": "warp_0"}, - {"coord": [28, 17], "enter": "walk_west", "to_map": "SSAnne_B1F_Corridor", "to_point": "warp_0"}, - {"coord": [5, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room1", "to_point": "warp_0"}, - {"coord": [8, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room2", "to_point": "warp_0"}, - {"coord": [11, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room3", "to_point": "warp_0"}, - {"coord": [14, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room4", "to_point": "warp_0"}, - {"coord": [17, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room5", "to_point": "warp_0"}, - {"coord": [23, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room7", "to_point": "warp_0"}, - {"coord": [20, 10], "enter": "walk_south", "to_map": "SSAnne_1F_Room6", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "sailor", "coord": [18, 8], "source_event": 0, "source_script": "SSAnne_1F_Corridor_EventScript_Sailor"}, - {"name": "worker_m", "coord": [12, 9], "source_event": 1, "source_script": "SSAnne_1F_Corridor_EventScript_WorkerM"} - ] -} diff --git a/data/games/frlg/maps/source-candidate/SSAnne_2F_Corridor.json b/data/games/frlg/maps/source-candidate/SSAnne_2F_Corridor.json deleted file mode 100644 index 59fb843..0000000 --- a/data/games/frlg/maps/source-candidate/SSAnne_2F_Corridor.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "SSAnne_2F_Corridor", - "source": { - "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "##################################", - "##################################", - "#..###########################.###", - "#..###########################.###", - "#....#########################...#", - "#....#########################...#", - "#....#########################...#", - "#....#########################...#", - "#....#######################.....#", - "#....#######################.....#", - "#....#D###D###D###D###D###D#.....#", - "###..............................#", - "###..............................#", - "###..............................#", - "#................................#", - "##################################" - ], - "points": { - "warp_0": [2, 2], - "warp_1": [3, 12], - "warp_2": [30, 2], - "warp_3": [6, 10], - "warp_4": [10, 10], - "warp_5": [14, 10], - "warp_6": [18, 10], - "warp_7": [22, 10], - "warp_8": [26, 10] - }, - "warps": [ - {"coord": [2, 2], "enter": "walk_east", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_0"}, - {"coord": [3, 12], "enter": "walk_west", "to_map": "SSAnne_3F_Corridor", "to_point": "warp_1"}, - {"coord": [30, 2], "enter": "walk_east", "to_map": "SSAnne_CaptainsOffice", "to_point": "warp_0"}, - {"coord": [6, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room1", "to_point": "warp_0"}, - {"coord": [10, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room2", "to_point": "warp_0"}, - {"coord": [14, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room3", "to_point": "warp_0"}, - {"coord": [18, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room4", "to_point": "warp_0"}, - {"coord": [22, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room5", "to_point": "warp_0"}, - {"coord": [26, 10], "enter": "walk_into", "to_map": "SSAnne_2F_Room6", "to_point": "warp_0"} - ], - "flag_sets": {"new_game": ["FLAG_HIDE_SS_ANNE_RIVAL"]}, - "connections": [], - "npcs": [ - { - "name": "blue", - "coord": [30, 2], - "hide_flag": "FLAG_HIDE_SS_ANNE_RIVAL", - "source_event": 0, - "source_script": "0x0", - "source_local_id": "LOCALID_SS_ANNE_RIVAL" - }, - { - "name": "sailor", - "coord": [2, 7], - "wander": {"min": [2, 5], "max": [2, 9]}, - "source_event": 1, - "source_script": "SSAnne_2F_Corridor_EventScript_Sailor" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/SSAnne_CaptainsOffice.json b/data/games/frlg/maps/source-candidate/SSAnne_CaptainsOffice.json deleted file mode 100644 index eed8423..0000000 --- a/data/games/frlg/maps/source-candidate/SSAnne_CaptainsOffice.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "SSAnne_CaptainsOffice", - "source": { - "decomp_file": "data/maps/SSAnne_CaptainsOffice/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "#########", - "#########", - "#......##", - "####.#..#", - "####....#", - "#.......#", - "###.....#", - "###.....#", - "###.....#", - "#########" - ], - "points": {"warp_0": [3, 7]}, - "warps": [{"coord": [3, 7], "enter": "walk_west", "to_map": "SSAnne_2F_Corridor", "to_point": "warp_2"}], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "captain", - "coord": [5, 4], - "source_event": 0, - "source_script": "SSAnne_CaptainsOffice_EventScript_Captain", - "source_local_id": "LOCALID_SS_ANNE_CAPTAIN" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/SSAnne_Exterior.json b/data/games/frlg/maps/source-candidate/SSAnne_Exterior.json deleted file mode 100644 index a95ce6a..0000000 --- a/data/games/frlg/maps/source-candidate/SSAnne_Exterior.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "SSAnne_Exterior", - "source": { - "decomp_file": "data/maps/SSAnne_Exterior/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "tiles": [ - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#........###.###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#........###.###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwww#............###########", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#.#wwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..#wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww###wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" - ], - "points": {"warp_1": [32, 5], "warp_2": [32, 14], "warp_3": [33, 15]}, - "warps": [ - {"coord": [31, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_0"}, - {"coord": [32, 5], "enter": "walk_north", "to_map": "VermilionCity", "to_point": "warp_1"}, - {"coord": [32, 14], "enter": "walk_south", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_2"}, - {"coord": [33, 15], "enter": "walk_into", "to_map": "SSAnne_1F_Corridor", "to_point": "warp_3"}, - {"coord": [33, 5], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_2"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "ss_anne", - "coord": [30, 16], - "hide_flag": "FLAG_HIDE_SS_ANNE", - "source_event": 0, - "source_script": "0x0", - "source_local_id": "LOCALID_SS_ANNE" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/UndergroundPath_NorthEntrance.json b/data/games/frlg/maps/source-candidate/UndergroundPath_NorthEntrance.json deleted file mode 100644 index a282286..0000000 --- a/data/games/frlg/maps/source-candidate/UndergroundPath_NorthEntrance.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "UndergroundPath_NorthEntrance", - "source": { - "decomp_file": "data/maps/UndergroundPath_NorthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "#############", - "#############", - "#...........#", - "..##.##..##..", - "..#..##...#..", - "..#..##...#..", - "..##.....##..", - ".............", - "#...........#", - "#############" - ], - "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, - "warps": [ - {"coord": [5, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, - {"coord": [6, 8], "enter": "walk_south", "to_map": "Route5", "to_point": "warp_0"}, - {"coord": [7, 8], "enter": "walk_into", "to_map": "Route5", "to_point": "warp_0"}, - {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_0"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "little_girl", - "coord": [5, 6], - "source_event": 0, - "source_script": "UndergroundPath_NorthEntrance_EventScript_Saige" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/UndergroundPath_NorthSouthTunnel.json b/data/games/frlg/maps/source-candidate/UndergroundPath_NorthSouthTunnel.json deleted file mode 100644 index eb65623..0000000 --- a/data/games/frlg/maps/source-candidate/UndergroundPath_NorthSouthTunnel.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "UndergroundPath_NorthSouthTunnel", - "source": { - "decomp_file": "data/maps/UndergroundPath_NorthSouthTunnel/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "########", - "########", - "#....###", - "#....###", - "#....###", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "#......#", - "###....#", - "###....#", - "###....#", - "########" - ], - "points": {"warp_0": [4, 3], "warp_1": [3, 60]}, - "warps": [ - {"coord": [4, 3], "enter": "walk_east", "to_map": "UndergroundPath_NorthEntrance", "to_point": "warp_3"}, - {"coord": [3, 60], "enter": "walk_west", "to_map": "UndergroundPath_SouthEntrance", "to_point": "warp_3"} - ], - "flag_sets": {}, - "connections": [] -} diff --git a/data/games/frlg/maps/source-candidate/UndergroundPath_SouthEntrance.json b/data/games/frlg/maps/source-candidate/UndergroundPath_SouthEntrance.json deleted file mode 100644 index 18769ab..0000000 --- a/data/games/frlg/maps/source-candidate/UndergroundPath_SouthEntrance.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "UndergroundPath_SouthEntrance", - "source": { - "decomp_file": "data/maps/UndergroundPath_SouthEntrance/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "#############", - "#############", - "#...........#", - "..##.##..##..", - "..#..##...#..", - "..#..##...#..", - "..##.....##..", - ".............", - "#...........#", - "#############" - ], - "points": {"warp_1": [6, 8], "warp_3": [7, 4]}, - "warps": [ - {"coord": [5, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, - {"coord": [6, 8], "enter": "walk_south", "to_map": "Route6", "to_point": "warp_0"}, - {"coord": [7, 8], "enter": "walk_into", "to_map": "Route6", "to_point": "warp_0"}, - {"coord": [7, 4], "enter": "walk_west", "to_map": "UndergroundPath_NorthSouthTunnel", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "woman_2", - "coord": [5, 6], - "source_event": 0, - "source_script": "UndergroundPath_SouthEntrance_EventScript_Woman" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/VermilionCity.json b/data/games/frlg/maps/source-candidate/VermilionCity.json deleted file mode 100644 index 53b1d46..0000000 --- a/data/games/frlg/maps/source-candidate/VermilionCity.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "VermilionCity", - "source": { - "decomp_file": "data/maps/VermilionCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" - }, - "tiles": [ - "wwwwwwwwwwwwwwwwwwwww#...#######################", - "wwwwwwwwwwwwwwwwwwwww#...#######################", - "wwwwwwwwwwwwwwwwwwwww#...#######################", - "wwwwwwwwwwwww#####www#...#######################", - "wwwwwwww##############...#######################", - "wwwwwwww##############...#######################", - "wwwwwwww#D###SSD######...########S##############", - "wwwwwwww.................................#######", - "wwwwwwww.................................#######", - "wwwwwwww.................................#######", - "wwwwwwwwwwwwww...........................#######", - "wwwwwwwwwwwwww...........................#######", - "wwwwwwwwwwwwwwwwwwww.....................#######", - "wwwwwwwwwwwwwwwwwwww.....................#######", - "wwwwwwwwwww.....wwww.....................#######", - "wwwwwwww...#####..####.....####..........#######", - "wwwwwwww...#####..####.....####..........##.....", - "wwwwwwww..S#D###..#D##.....SSD###############S##", - "wwwwwwww..........................S.............", - "wwwwwwww........................................", - "wwwwwwww........................................", - "wwwwwwww.......................www.....wwwwwwwww", - "wwwwwwww...#######.........####www.....wwwwwwwww", - "wwwwwwww...#######..wwww...####www64.64wwwwwwwww", - "wwwwwwww##S########.wwww...#D##www.....ww#######", - "wwwwwwww.....#D#....wwww.......wwww...www#######", - "wwwwwwww............wwwwwwwwwwwwwww...www#######", - "wwwwwwww............wwwwwwwwwwwwwww...www#######", - "wwwwwwww............ww................www#######", - "wwwwwwwwwwwwwwwwwwwwww................wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww................wwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww...wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww###wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww", - "wwwwwwwwwwwwwwwwwwwwww.#.wwwwwwwwwwwwwwwwwwwwwww" - ], - "elevation": [ - "000000000000000000001033300000000000000000000000", - "000000000000000000001033300000000000000000000000", - "000001000011111111111033300000000000000000000000", - "000100000011100000111033300000000000000000000000", - "000100110000000000000033300000000000000000000000", - "011001110000000000000033300000000000000000000000", - "011001110000000000000033300000000000000000000000", - "010011113333333333333333333333333333333330000000", - "010011113333333333333333333333333333333330000000", - "000111113333333333333333333333333333333330000000", - "000111111111113333333333333333333333333330000000", - "000111111111113333333333333333333333333330000000", - "000111111111111111113333333333333333333330000000", - "000111111111111111113333333333333333333330000000", - "000111111111111111113333333333333333333330000000", - "010011113330000033000033333000033333333330000000", - "010011113330000033000033333000033333333330033333", - "001001113300000033000033333000000000000000000000", - "001001113333333333333333333333333303333333333333", - "000011113333333333333333333333333333333333333333", - "000011113333333333333333333333333333333333333333", - "000011113333333333333333333333311133333111111111", - "000011113330000000333333333000011133333111111111", - "001001113330000000331111333000011133333111111111", - "001001110000000000031111333000011133333110000000", - "001001113333300033331111333333311113331110000000", - "011001113333333333331111111111111113331110000000", - "010011113333333333331111111111111113331110000000", - "010011113333333333331133333333333333331110000000", - "010011111111111111111133333333333333331110011111", - "010011111111111111111133333333333333331110011000", - "011001111111111111111133311111111111111110010000", - "001001111111111111111133311111111111111110010000", - "001110011111111111110033300001111111111100110000", - "000110011111111100000033300000000111100100110000", - "000011001111110000000000000110000111100100110000", - "000001000011110011111100011111111001111100100000", - "000001110000001110001100011000001000000001100000", - "000000001100001000000100010000000010000001000000", - "000000000000000000000100010000000000000000000000" - ], - "points": { - "warp_0": [22, 34], - "warp_1": [23, 34], - "warp_2": [24, 34], - "warp_3": [9, 6], - "warp_4": [15, 6], - "warp_5": [12, 17], - "warp_6": [19, 17], - "warp_7": [29, 17], - "warp_8": [28, 24], - "warp_9": [14, 25] - }, - "warps": [ - {"coord": [22, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, - {"coord": [23, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, - {"coord": [24, 34], "enter": "walk_south", "to_map": "SSAnne_Exterior", "to_point": "warp_1"}, - {"coord": [9, 6], "enter": "walk_into", "to_map": "VermilionCity_House1", "to_point": "warp_1"}, - {"coord": [15, 6], "enter": "walk_into", "to_map": "VermilionCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [12, 17], "enter": "walk_into", "to_map": "VermilionCity_PokemonFanClub", "to_point": "warp_1"}, - {"coord": [19, 17], "enter": "walk_into", "to_map": "VermilionCity_House2", "to_point": "warp_1"}, - {"coord": [29, 17], "enter": "walk_into", "to_map": "VermilionCity_Mart", "to_point": "warp_1"}, - {"coord": [28, 24], "enter": "walk_into", "to_map": "VermilionCity_House3", "to_point": "warp_1"}, - {"coord": [14, 25], "enter": "walk_into", "to_map": "VermilionCity_Gym", "to_point": "warp_1"} - ], - "flag_sets": {"new_game": ["FLAG_HIDE_VERMILION_CITY_OAKS_AIDE"]}, - "connections": [ - {"side": "north", "to_map": "Route6", "offset": 12}, - {"side": "east", "to_map": "Route11", "offset": 10} - ], - "npcs": [ - { - "name": "woman_1", - "coord": [22, 11], - "wander": {"min": [18, 11], "max": [26, 11]}, - "source_event": 0, - "source_script": "VermilionCity_EventScript_Woman" - }, - {"name": "old_man_1", "coord": [17, 9], "source_event": 1, "source_script": "VermilionCity_EventScript_OldMan1"}, - {"name": "old_man_2", "coord": [36, 10], "source_event": 2, "source_script": "VermilionCity_EventScript_OldMan2"}, - { - "name": "machop", - "coord": [35, 11], - "wander": {"min": [33, 9], "max": [37, 13]}, - "source_event": 3, - "source_script": "VermilionCity_EventScript_Machop" - }, - { - "name": "sailor", - "coord": [31, 30], - "wander": {"min": [27, 30], "max": [35, 30]}, - "source_event": 4, - "source_script": "VermilionCity_EventScript_Sailor" - }, - { - "name": "sailor", - "coord": [24, 33], - "source_event": 5, - "source_script": "VermilionCity_EventScript_FerrySailor", - "source_local_id": "LOCALID_VERMILION_FERRY_SAILOR" - }, - { - "name": "cut_tree", - "coord": [19, 24], - "hide_flag": "FLAG_TEMP_12", - "source_event": 6, - "source_script": "EventScript_CutTree" - }, - { - "name": "scientist", - "coord": [25, 7], - "hide_flag": "FLAG_HIDE_VERMILION_CITY_OAKS_AIDE", - "source_event": 7, - "source_script": "VermilionCity_EventScript_OaksAide" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/VermilionCity_Gym.json b/data/games/frlg/maps/source-candidate/VermilionCity_Gym.json deleted file mode 100644 index 944e361..0000000 --- a/data/games/frlg/maps/source-candidate/VermilionCity_Gym.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "VermilionCity_Gym", - "source": { - "decomp_file": "data/maps/VermilionCity_Gym/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "unapplied_story_patch": "OPENED_TILES: preserve decomp baseline until story state is bound", - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "#..#...#..#", - "#.........#", - "#.........#", - "#.........#", - "###########", - "###########", - "...........", - "...........", - ".#.#.#.#.#.", - "...........", - ".#.#.#.#.#.", - "...........", - ".#.#.#.#.#.", - "...........", - "...........", - "...S...S...", - "...........", - "...........", - "###########" - ], - "points": {"warp_1": [5, 19]}, - "warps": [ - {"coord": [4, 19], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9"}, - {"coord": [5, 19], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_9"}, - {"coord": [6, 19], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_9"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "lt_surge", "coord": [5, 2], "source_event": 0, "source_script": "VermilionCity_Gym_EventScript_LtSurge"}, - { - "name": "balding_man", - "coord": [2, 11], - "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, - "source_event": 1, - "source_script": "VermilionCity_Gym_EventScript_Baily" - }, - { - "name": "sailor", - "coord": [8, 13], - "trainer": {"sight": 3, "looks": ["north", "east", "south", "west"]}, - "source_event": 2, - "source_script": "VermilionCity_Gym_EventScript_Dwayne" - }, - {"name": "gym_guy", "coord": [4, 17], "source_event": 3, "source_script": "VermilionCity_Gym_EventScript_GymGuy"}, - { - "name": "gentleman", - "coord": [7, 8], - "facing": "west", - "trainer": {"sight": 3}, - "source_event": 4, - "source_script": "VermilionCity_Gym_EventScript_Tucker" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/VermilionCity_PokemonFanClub.json b/data/games/frlg/maps/source-candidate/VermilionCity_PokemonFanClub.json deleted file mode 100644 index 3d88cc4..0000000 --- a/data/games/frlg/maps/source-candidate/VermilionCity_PokemonFanClub.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "VermilionCity_PokemonFanClub", - "source": { - "decomp_file": "data/maps/VermilionCity_PokemonFanClub/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate" - }, - "allow_running": false, - "tiles": [ - "############", - "############", - "............", - ".....22.....", - "#....88....#", - "#..64##64..#", - "#..64##64..#", - "#..........#", - "#..........#", - "............", - "#..........#", - "############" - ], - "elevation": [ - "000000000000", - "000000000000", - "333333333333", - "333333333333", - "033304403330", - "033330033330", - "033330033330", - "033333333330", - "033333333330", - "333333333333", - "033333333330", - "000000000000" - ], - "points": {"warp_1": [5, 10]}, - "warps": [ - {"coord": [4, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"}, - {"coord": [5, 10], "enter": "walk_south", "to_map": "VermilionCity", "to_point": "warp_5"}, - {"coord": [6, 10], "enter": "walk_into", "to_map": "VermilionCity", "to_point": "warp_5"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "gentleman", - "coord": [5, 4], - "source_event": 0, - "source_script": "VermilionCity_PokemonFanClub_EventScript_Chairman" - }, - { - "name": "worker_f", - "coord": [6, 4], - "source_event": 1, - "source_script": "VermilionCity_PokemonFanClub_EventScript_WorkerF" - }, - { - "name": "pikachu", - "coord": [7, 6], - "source_event": 2, - "source_script": "VermilionCity_PokemonFanClub_EventScript_Pikachu" - }, - { - "name": "seel", - "coord": [4, 6], - "source_event": 3, - "source_script": "VermilionCity_PokemonFanClub_EventScript_Seel" - }, - { - "name": "woman_1", - "coord": [4, 5], - "source_event": 4, - "source_script": "VermilionCity_PokemonFanClub_EventScript_Woman", - "source_local_id": "LOCALID_POKEMON_FAN_CLUB_WOMAN" - }, - { - "name": "fat_man", - "coord": [7, 5], - "source_event": 5, - "source_script": "VermilionCity_PokemonFanClub_EventScript_FatMan", - "source_local_id": "LOCALID_POKEMON_FAN_CLUB_FAT_MAN" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/ViridianCity.json b/data/games/frlg/maps/source-candidate/ViridianCity.json deleted file mode 100644 index 7df364d..0000000 --- a/data/games/frlg/maps/source-candidate/ViridianCity.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "ViridianCity", - "source": { - "decomp_file": "data/maps/ViridianCity/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/ViridianCity/map.json", - "events_sha256": "5ce922b65f76335556ace9a047feeb1968854b604c8469c39cbbd60985f61bc1", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" - }, - "tiles": [ - "###################.....########################", - "###################....S########################", - "###################.....########################", - "###################.....########################", - "###################.....####..............######", - "########..................................######", - "########.##########.......................######", - "########.###########.............######...######", - "########.##########..............######...######", - "########.###########...######....######...######", - "########.##########.....#####...S..#D#....######", - "########.###########...##D###.............######", - "########.##########........##vvvvvvvvvvvvv######", - "########.###########......................######", - "########.##########.......................######", - "######...###########.........###################", - ".........##########.S..######.............######", - "........................#####.....####....######", - ".......................##D###.....####....######", - "..................................SSD#....######", - "#######...................................######", - "#######...................................######", - "#######...................................######", - "###########.............#####.............######", - "###########.##..........#####.............######", - "#######.....##..........#####.............######", - "#######....wwwwww.......SSD##.............######", - "#######....wwwwww.........................######", - "#######....wwwwww.........................######", - "#######....wwwwww.........................######", - "#######vvvvwwwwwwvvv...vvvvvvvvvvvvvvvvvvv######", - "#######.............S.....................######", - "#######...................................######", - "#######...................................######", - "##############............................######", - "##############............................######", - "######################....######################", - "######################....######################", - "######################....######################", - "######################....######################" - ], - "points": {"warp_0": [26, 26], "warp_1": [25, 11], "warp_2": [36, 10], "warp_3": [25, 18], "warp_4": [36, 19]}, - "warps": [ - {"coord": [26, 26], "enter": "walk_into", "to_map": "ViridianCity_PokemonCenter_1F", "to_point": "warp_1"}, - {"coord": [25, 11], "enter": "walk_into", "to_map": "ViridianCity_House", "to_point": "warp_1"}, - {"coord": [36, 10], "enter": "walk_into", "to_map": "ViridianCity_Gym", "to_point": "warp_1"}, - {"coord": [25, 18], "enter": "walk_into", "to_map": "ViridianCity_School", "to_point": "warp_1"}, - {"coord": [36, 19], "enter": "walk_into", "to_map": "ViridianCity_Mart", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [ - {"side": "north", "to_map": "Route2", "offset": 12}, - {"side": "south", "to_map": "Route1", "offset": 12}, - {"side": "west", "to_map": "Route22", "offset": 10} - ], - "npcs": [ - { - "name": "fat_man", - "coord": [8, 26], - "source_event": 0, - "source_script": "ViridianCity_EventScript_DreamEaterTutor" - }, - { - "name": "cut_tree", - "coord": [11, 24], - "hide_flag": "FLAG_TEMP_11", - "source_event": 1, - "source_script": "EventScript_CutTree" - }, - { - "name": "old_man_1", - "coord": [34, 11], - "source_event": 2, - "source_script": "ViridianCity_EventScript_OldMan", - "source_local_id": "LOCALID_VIRIDIAN_OLD_MAN" - }, - { - "name": "var_0", - "coord": [21, 6], - "source_event": 3, - "source_script": "ViridianCity_EventScript_TutorialOldMan", - "source_local_id": "LOCALID_TUTORIAL_MAN" - }, - { - "name": "woman_3", - "coord": [20, 12], - "source_event": 4, - "source_script": "ViridianCity_EventScript_Woman", - "source_local_id": "LOCALID_VIRIDIAN_WOMAN" - }, - { - "name": "youngster", - "coord": [33, 26], - "wander": {"min": [33, 24], "max": [33, 28]}, - "source_event": 5, - "source_script": "ViridianCity_EventScript_Youngster" - }, - { - "name": "boy", - "coord": [16, 22], - "wander": {"min": [15, 20], "max": [17, 24]}, - "source_event": 6, - "source_script": "ViridianCity_EventScript_Boy" - }, - { - "name": "cut_tree", - "coord": [18, 5], - "hide_flag": "FLAG_TEMP_12", - "source_event": 7, - "source_script": "EventScript_CutTree", - "source_local_id": "LOCALID_VIRIDIAN_BORDER_TREE" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [17, 5], - "source_event": 8, - "hide_flag": "FLAG_HIDE_VIRIDIAN_CITY_POTION", - "source_script": "ViridianCity_EventScript_ItemPotion", - "item": "potion" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/ViridianCity_Mart.json b/data/games/frlg/maps/source-candidate/ViridianCity_Mart.json deleted file mode 100644 index 501f3ae..0000000 --- a/data/games/frlg/maps/source-candidate/ViridianCity_Mart.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "ViridianCity_Mart", - "source": { - "decomp_file": "data/maps/ViridianCity_Mart/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" - }, - "allow_running": false, - "tiles": [ - "###########", - "###########", - "##.#......#", - "...#.......", - "####...##.#", - ".......##.#", - ".##....##.#", - "...........", - "###########" - ], - "points": {"clerk_front": [4, 3], "warp_1": [4, 7]}, - "warps": [ - {"coord": [3, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"}, - {"coord": [4, 7], "enter": "walk_south", "to_map": "ViridianCity", "to_point": "warp_4"}, - {"coord": [5, 7], "enter": "walk_into", "to_map": "ViridianCity", "to_point": "warp_4"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - { - "name": "clerk", - "coord": [2, 3], - "source_event": 0, - "source_script": "ViridianCity_Mart_EventScript_Clerk", - "source_local_id": "LOCALID_VIRIDIAN_MART_CLERK" - }, - { - "name": "youngster", - "coord": [6, 2], - "wander": {"min": [5, 1], "max": [7, 3]}, - "source_event": 1, - "source_script": "ViridianCity_Mart_EventScript_Youngster" - }, - { - "name": "woman_1", - "coord": [9, 5], - "wander": {"min": [9, 4], "max": [9, 6]}, - "source_event": 2, - "source_script": "ViridianCity_Mart_EventScript_Woman" - } - ] -} diff --git a/data/games/frlg/maps/source-candidate/ViridianForest.json b/data/games/frlg/maps/source-candidate/ViridianForest.json deleted file mode 100644 index b87da61..0000000 --- a/data/games/frlg/maps/source-candidate/ViridianForest.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "format": "pokesim-runtime-map/2", - "name": "ViridianForest", - "source": { - "decomp_file": "data/maps/ViridianForest/map.json", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31", - "generation_status": "unreviewed-full-catalog-candidate", - "item_identities": { - "repository": "pret/pokefirered", - "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "events": "data/maps/ViridianForest/map.json", - "events_sha256": "6d6f082604d3c220eeb2c72cb6a606403330df44c58d9ed2523cd81c53fdaba2", - "catalog": "data/maps/item-identities.json", - "catalog_sha256": "1d94d0ca7cc3ec2aa17274c9c279afbacf1d9cab3e2d25f5cad638cf3d4c09b8", - "source_game": "firered", - "target_game": "frlg", - "target_game_relation": "native_decomp", - "verification": "FRLG source-derived; collection not observed" - }, - "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" - }, - "tiles": [ - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "###########.............###........................###", - "###########.............###........................###", - "###########.............###........................###", - "#..#####..#.............###.....###############....###", - "####...####.............###.....###############....###", - "####...####.............###.....###############....###", - "####...####.....###.....###.....###############....###", - "####..S####~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~###############....###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.............###", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~~.......#########", - "###~~~~~###~~~~~###~~~~~###~~~~~~~~~~........#########", - "###~~~~~###~~~~~###~~~~~###~~~~~~######......#########", - "###~~~~~###~~~~~###~~~~~###...~~~######......#########", - "###~~~~~###~~~~~###.....###......######......#########", - "###~~~~~###~~~~~###..............######......#########", - "###~~~~~###~~~~~#####............######......#########", - "###~~~~~###~~~~~#####............######............###", - "###~~~~~###~~~~~~~#####################....S.......###", - "###~~~~~...~~~~~~~#####################............###", - "###...............#####################............###", - "###......S........#####################~~~~........###", - "###...............#####################~~~~~###....###", - "###.....................###############~~~~~###....###", - "###.....................###############~~~~~###....###", - "###.....................###############~~~~~###....###", - "##################......###############~~~~~###....###", - "##################......###############~~~~~###....###", - "#######################################~~~~~###....###", - "#######################################~~~~~###....###", - "#######################################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~#####################~~~~~###....###", - "###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######~~~~........###", - "############~~~~~~~~~~~~~~~~S..~~######~~~.........###", - "############~~~~~~~~~~~~~~~~...~~######~~~.........###", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "############..~~~#########~~...~~######~~~...#########", - "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", - "###~~~~~~~~~..~~~~~~~~~~~~~~###~~~~~~~~~~~...~~~~~~###", - "###~~~~~~~~~...~~~~~~~~~~~~.###.~~~~~~~~~...~~~~~~~###", - "###~~~~~~~~~....~~~~~~~~~~.......~~~~~~~....~~~~~~~###", - "###~~~~~~~~............................S....~~~~~~~###", - "###~~~~~~~~....................S...........~~~~~~~~###", - "###~~~~~~~~................................~~~~~~~~###", - "###########################......#####################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################", - "######################################################" - ], - "points": {"warp_0": [29, 62], "warp_2": [5, 9]}, - "warps": [ - {"coord": [29, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, - {"coord": [28, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, - {"coord": [5, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"}, - {"coord": [6, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"}, - {"coord": [30, 62], "enter": "walk_south", "to_map": "Route2_ViridianForest_SouthEntrance", "to_point": "warp_3"}, - {"coord": [4, 9], "enter": "cave_entrance", "to_map": "Route2_ViridianForest_NorthEntrance", "to_point": "warp_1"} - ], - "flag_sets": {}, - "connections": [], - "npcs": [ - {"name": "youngster", "coord": [29, 58], "source_event": 0, "source_script": "ViridianForest_EventScript_Youngster"}, - {"name": "boy", "coord": [45, 58], "source_event": 1, "source_script": "ViridianForest_EventScript_Boy"}, - { - "name": "bug_catcher", - "coord": [47, 45], - "facing": "west", - "trainer": {"sight": 5}, - "source_event": 2, - "source_script": "ViridianForest_EventScript_Rick" - }, - { - "name": "bug_catcher", - "coord": [47, 29], - "facing": "west", - "trainer": {"sight": 4}, - "source_event": 3, - "source_script": "ViridianForest_EventScript_Doug" - }, - { - "name": "bug_catcher", - "coord": [7, 22], - "facing": "west", - "trainer": {"sight": 4}, - "source_event": 4, - "source_script": "ViridianForest_EventScript_Sammy" - }, - { - "name": "bug_catcher", - "coord": [43, 6], - "trainer": {"sight": 1, "looks": ["south", "north"]}, - "source_event": 8, - "source_script": "ViridianForest_EventScript_Anthony" - }, - { - "name": "bug_catcher", - "coord": [16, 5], - "facing": "north", - "trainer": {"sight": 1}, - "source_event": 9, - "source_script": "ViridianForest_EventScript_Charlie" - } - ], - "items": [ - { - "name": "item_ball", - "coord": [5, 41], - "source_event": 5, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POKE_BALL", - "source_script": "ViridianForest_EventScript_ItemPokeBall", - "item": "poke_ball" - }, - { - "name": "item_ball", - "coord": [40, 21], - "source_event": 6, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_ANTIDOTE", - "source_script": "ViridianForest_EventScript_ItemAntidote", - "item": "antidote" - }, - { - "name": "item_ball", - "coord": [21, 34], - "source_event": 7, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION", - "source_script": "ViridianForest_EventScript_ItemPotion", - "item": "potion" - }, - { - "name": "item_ball", - "coord": [49, 60], - "source_event": 10, - "hide_flag": "FLAG_HIDE_VIRIDIAN_FOREST_POTION_2", - "source_script": "ViridianForest_EventScript_ItemPotion2", - "item": "potion" - } - ] -} diff --git a/data/maps/runtime-manifest.json b/data/maps/runtime-manifest.json index 7e1660b..c98412a 100644 --- a/data/maps/runtime-manifest.json +++ b/data/maps/runtime-manifest.json @@ -6,6 +6,192 @@ "frlg": { "upstream_revision": "51c0ce6128e5981da56b370a770874b96a1e129f", "maps": [ + { + "name": "CeladonCity", + "file": "data/games/frlg/maps/runtime/CeladonCity.json", + "sha256": "517c2949b6b24ad8d5d35ce0f471a4d1ceebc06bf45e73a0ca790ac2133bf5a9", + "source": { + "decomp_file": "data/maps/CeladonCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 60, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CeladonCity_Condominiums_1F", + "file": "data/games/frlg/maps/runtime/CeladonCity_Condominiums_1F.json", + "sha256": "27cf1036870fe6c1a4b3e64fd6c3ac8ed759251489d3292e394297721e0d3dac", + "source": { + "decomp_file": "data/maps/CeladonCity_Condominiums_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 15, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CeladonCity_DepartmentStore_1F", + "file": "data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_1F.json", + "sha256": "2960b6f2d187b8ecc088164b15b2613b148fc2fc14de8ee4bb9cf055382c9611", + "source": { + "decomp_file": "data/maps/CeladonCity_DepartmentStore_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 16, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CeladonCity_DepartmentStore_5F", + "file": "data/games/frlg/maps/runtime/CeladonCity_DepartmentStore_5F.json", + "sha256": "1b3377d76190c0893f36d04744e9dbeb74e93832ab5aebca11758b33479b0c91", + "source": { + "decomp_file": "data/maps/CeladonCity_DepartmentStore_5F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 15, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CeladonCity_GameCorner", + "file": "data/games/frlg/maps/runtime/CeladonCity_GameCorner.json", + "sha256": "8b59cd7d31f3d19e64d3f193ff98f5b8fef7cf5a7fb7149589169ed0e2aa1369", + "source": { + "decomp_file": "data/maps/CeladonCity_GameCorner/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 18, + "height": 15, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CeladonCity_Gym", + "file": "data/games/frlg/maps/runtime/CeladonCity_Gym.json", + "sha256": "b94dfdd80f91dd5e365cc2958c5d74a52910a9cc1bf4953ae8b3051ced299cff", + "source": { + "decomp_file": "data/maps/CeladonCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, { "name": "CeruleanCave_1F", "file": "data/games/frlg/maps/runtime/CeruleanCave_1F.json", @@ -34,7 +220,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { "name": "CeruleanCave_2F", @@ -42,7 +234,2727 @@ "sha256": "710710c3a74a2e350971cd09476848510b8f7701685dec9d3b8acf9773747e8d", "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_2F.json", "source": { - "decomp_file": "data/maps/CeruleanCave_2F/map.json", + "decomp_file": "data/maps/CeruleanCave_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 40, + "height": 23, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CeruleanCave_B1F", + "file": "data/games/frlg/maps/runtime/CeruleanCave_B1F.json", + "sha256": "cdba0107e66d521270325b44a7d23dd8b6c4f54811608b8ede5b76a4fd1fbd32", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_B1F.json", + "source": { + "decomp_file": "data/maps/CeruleanCave_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 40, + "height": 23, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CeruleanCity", + "file": "data/games/frlg/maps/runtime/CeruleanCity.json", + "sha256": "24c2e115763130b9b942dcdb3fa2702020fa854ec52af98ee737c589f6f45b22", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity.json", + "source": { + "decomp_file": "data/maps/CeruleanCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CeruleanCity_BikeShop", + "file": "data/games/frlg/maps/runtime/CeruleanCity_BikeShop.json", + "sha256": "9b124a826543472318cface5daf566c83a8a7d898cf34a7debfc9b056834c9f4", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_BikeShop.json", + "source": { + "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CeruleanCity_Gym", + "file": "data/games/frlg/maps/runtime/CeruleanCity_Gym.json", + "sha256": "c64e51cf18c65a7fe940659d467693d8387277f8e67e3a4c4d2403ba5e193740", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Gym.json", + "source": { + "decomp_file": "data/maps/CeruleanCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 17, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CeruleanCity_House1", + "file": "data/games/frlg/maps/runtime/CeruleanCity_House1.json", + "sha256": "1428173a46069914e2a47502c0cc034b0a8d0cff3e073f0a91b98b49fd66c8dd", + "source": { + "decomp_file": "data/maps/CeruleanCity_House1/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 10, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CeruleanCity_House2", + "file": "data/games/frlg/maps/runtime/CeruleanCity_House2.json", + "sha256": "bc49aa2645851d4553af06df9c1e66c4a4c078a8eb15721bbae84313745d257c", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_House2.json", + "source": { + "decomp_file": "data/maps/CeruleanCity_House2/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 10, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CeruleanCity_Mart", + "file": "data/games/frlg/maps/runtime/CeruleanCity_Mart.json", + "sha256": "6a59723815b97d5e28cbb20c4a04a0e7fe503102b21e5b0e4da574aa0711230f", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Mart.json", + "source": { + "decomp_file": "data/maps/CeruleanCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CeruleanCity_PokemonCenter_1F", + "file": "data/games/frlg/maps/runtime/CeruleanCity_PokemonCenter_1F.json", + "sha256": "ce7570fae7663ed28aa64159791f33c4d6486c62c44b75fa1e15f82a7d6faf24", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_PokemonCenter_1F.json", + "source": { + "decomp_file": "data/maps/CeruleanCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 15, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "CinnabarIsland", + "file": "data/games/frlg/maps/runtime/CinnabarIsland.json", + "sha256": "3271e24d15dd94a532170ecd4f11ff61ff26eeeb7811282d42d90cfda5622c30", + "source": { + "decomp_file": "data/maps/CinnabarIsland/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CinnabarIsland_Gym", + "file": "data/games/frlg/maps/runtime/CinnabarIsland_Gym.json", + "sha256": "42c2a70ae464043641ad3a7a79e0ab73c6b0d7dc09190137dd886f0e2630d4b7", + "source": { + "decomp_file": "data/maps/CinnabarIsland_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 30, + "height": 25, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "CinnabarIsland_Mart", + "file": "data/games/frlg/maps/runtime/CinnabarIsland_Mart.json", + "sha256": "31921270f1eab70946eb5703aeef771e4535d1635d233d352285773622a28c57", + "source": { + "decomp_file": "data/maps/CinnabarIsland_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "FuchsiaCity", + "file": "data/games/frlg/maps/runtime/FuchsiaCity.json", + "sha256": "36bec5b60a05e989149cc3c603eb1189b0cb4c7eab9e11b04042875ddf28b745", + "source": { + "decomp_file": "data/maps/FuchsiaCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "FuchsiaCity_Gym", + "file": "data/games/frlg/maps/runtime/FuchsiaCity_Gym.json", + "sha256": "063136ce3937c79c65cd4c1c5673209dad08a75da68d7b6972ebb9246a92a861", + "source": { + "decomp_file": "data/maps/FuchsiaCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 15, + "height": 23, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "FuchsiaCity_Mart", + "file": "data/games/frlg/maps/runtime/FuchsiaCity_Mart.json", + "sha256": "fc525197ac4b11110ad9a9819e2ad96436b19dbdd91a347d18517ad4b3cd4586", + "source": { + "decomp_file": "data/maps/FuchsiaCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "FuchsiaCity_SafariZone_Entrance", + "file": "data/games/frlg/maps/runtime/FuchsiaCity_SafariZone_Entrance.json", + "sha256": "c8ac9c445d950dc87907d479b3eb26ea6941d62e49b3c7ac5b73b15e6dfc40d3", + "source": { + "decomp_file": "data/maps/FuchsiaCity_SafariZone_Entrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 9, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "FuchsiaCity_WardensHouse", + "file": "data/games/frlg/maps/runtime/FuchsiaCity_WardensHouse.json", + "sha256": "70ad1e0c1b4165cc667c7e6e2ee9b98f685d8d0c656e4937ba8c2133540eb3dd", + "source": { + "decomp_file": "data/maps/FuchsiaCity_WardensHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 11, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "IndigoPlateau_Exterior", + "file": "data/games/frlg/maps/runtime/IndigoPlateau_Exterior.json", + "sha256": "00273f4bbf17bb6090358ab51243c40a390c1933208063d093c3959f9390988f", + "source": { + "decomp_file": "data/maps/IndigoPlateau_Exterior/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "IndigoPlateau_PokemonCenter_1F", + "file": "data/games/frlg/maps/runtime/IndigoPlateau_PokemonCenter_1F.json", + "sha256": "930c40e59297aae14ac19b61c17e8bdd02ecdf273b822630155acc8a50361e57", + "source": { + "decomp_file": "data/maps/IndigoPlateau_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 25, + "height": 18, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "LavenderTown", + "file": "data/games/frlg/maps/runtime/LavenderTown.json", + "sha256": "bdbce59fea59953b524c51a0a7791efb0e2a70339a911ef737e1753241e94d1a", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/LavenderTown.json", + "source": { + "decomp_file": "data/maps/LavenderTown/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "LavenderTown_Mart", + "file": "data/games/frlg/maps/runtime/LavenderTown_Mart.json", + "sha256": "6243727ca1e6fc823c0f1be2cbbc010a3f505f1ecfcbd4347fd7a4d1c40a606d", + "source": { + "decomp_file": "data/maps/LavenderTown_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "LavenderTown_PokemonCenter_1F", + "file": "data/games/frlg/maps/runtime/LavenderTown_PokemonCenter_1F.json", + "sha256": "e8309c90cf3eae37a2a9ae3a5ea1a8a056939bde9118ad7061bd616d52a0e814", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/LavenderTown_PokemonCenter_1F.json", + "source": { + "decomp_file": "data/maps/LavenderTown_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 15, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "LavenderTown_VolunteerPokemonHouse", + "file": "data/games/frlg/maps/runtime/LavenderTown_VolunteerPokemonHouse.json", + "sha256": "98a17ed3538e311728fa5a70ea12de8fa6f4b9c3f7c6f3531cc5c7972626236e", + "source": { + "decomp_file": "data/maps/LavenderTown_VolunteerPokemonHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 12, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "MtMoon_1F", + "file": "data/games/frlg/maps/runtime/MtMoon_1F.json", + "sha256": "f75b1bfc6368868b0520cb71c02de2614fe6fc65644e92530deb3f43f34be444", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_1F.json", + "source": { + "decomp_file": "data/maps/MtMoon_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "MtMoon_B1F", + "file": "data/games/frlg/maps/runtime/MtMoon_B1F.json", + "sha256": "b3a805c32e3dedf0498d06f6b8e45ef25e30b477413c00df3fe4087806e6f6f8", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B1F.json", + "source": { + "decomp_file": "data/maps/MtMoon_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 49, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "MtMoon_B2F", + "file": "data/games/frlg/maps/runtime/MtMoon_B2F.json", + "sha256": "aadc8f65fc0d570c329c897d2689063c3ea728f518c2e2d47b3bacbf7f85c81a", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B2F.json", + "source": { + "decomp_file": "data/maps/MtMoon_B2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PalletTown", + "file": "data/games/frlg/maps/runtime/PalletTown.json", + "sha256": "0dc7446f568097b36a9479954f01afe546cb64c82bb0efa91da0cb66ad950f9f", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown.json", + "source": { + "decomp_file": "data/maps/PalletTown/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PalletTown_PlayersHouse_1F", + "file": "data/games/frlg/maps/runtime/PalletTown_PlayersHouse_1F.json", + "sha256": "5997b5459b2e7668b8ee725a87eb4f23637ab16264afb017e5306a08127ca015", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_1F.json", + "source": { + "decomp_file": "data/maps/PalletTown_PlayersHouse_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PalletTown_PlayersHouse_2F", + "file": "data/games/frlg/maps/runtime/PalletTown_PlayersHouse_2F.json", + "sha256": "2c3458e692748ee2457856b7eeedc6c0d30b50ccd618319ac6219d967d84654c", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_2F.json", + "source": { + "decomp_file": "data/maps/PalletTown_PlayersHouse_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 12, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PalletTown_ProfessorOaksLab", + "file": "data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json", + "sha256": "1dedda88f1238eccd6610cbff79c1e5d3cd21b516637b792654746e02b2cdbc8", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_ProfessorOaksLab.json", + "source": { + "decomp_file": "data/maps/PalletTown_ProfessorOaksLab/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 14, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PalletTown_RivalsHouse", + "file": "data/games/frlg/maps/runtime/PalletTown_RivalsHouse.json", + "sha256": "123cc5013c7904a5b615f0a39c6797811dcacc2d24222c09807ab7750c1391e4", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_RivalsHouse.json", + "source": { + "decomp_file": "data/maps/PalletTown_RivalsHouse/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PewterCity", + "file": "data/games/frlg/maps/runtime/PewterCity.json", + "sha256": "ede0ddddd2bec95a3651300a6a34070a2f08dd45416a9b05c2568a7bc7258348", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity.json", + "source": { + "decomp_file": "data/maps/PewterCity/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PewterCity_Gym", + "file": "data/games/frlg/maps/runtime/PewterCity_Gym.json", + "sha256": "f8553e27dd2d6c04b576432a010e90a1dda163c6d1b967c5d10666d6b32ba37d", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Gym.json", + "source": { + "decomp_file": "data/maps/PewterCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 16, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PewterCity_Mart", + "file": "data/games/frlg/maps/runtime/PewterCity_Mart.json", + "sha256": "3d7e406d4c6fc5e15dd04f6a0c2a70a6c15fb8857af5e9ced99eef31eb1b96df", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Mart.json", + "source": { + "decomp_file": "data/maps/PewterCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PewterCity_Museum_1F", + "file": "data/games/frlg/maps/runtime/PewterCity_Museum_1F.json", + "sha256": "6e50491114a5bbddf793f34115fc7909fef98db0de07c1c4701db33d2098fb05", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Museum_1F.json", + "source": { + "decomp_file": "data/maps/PewterCity_Museum_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 28, + "height": 11, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PewterCity_PokemonCenter_1F", + "file": "data/games/frlg/maps/runtime/PewterCity_PokemonCenter_1F.json", + "sha256": "775bd4999b0f82fee3af684f06e749034517118be5e91dd3eb885825beeedafc", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_PokemonCenter_1F.json", + "source": { + "decomp_file": "data/maps/PewterCity_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 15, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "PokemonLeague_AgathasRoom", + "file": "data/games/frlg/maps/runtime/PokemonLeague_AgathasRoom.json", + "sha256": "dd3d675f8899b63aa7c7a9d938e55f71e953cd02e0286e233fecf86aa71f38d8", + "source": { + "decomp_file": "data/maps/PokemonLeague_AgathasRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 13, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonLeague_BrunosRoom", + "file": "data/games/frlg/maps/runtime/PokemonLeague_BrunosRoom.json", + "sha256": "d784093bbc7c3f8d3ffccc7d105d1875d0aed372278e8bf49c3941fe73abb0b6", + "source": { + "decomp_file": "data/maps/PokemonLeague_BrunosRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 13, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonLeague_ChampionsRoom", + "file": "data/games/frlg/maps/runtime/PokemonLeague_ChampionsRoom.json", + "sha256": "760494eabba1d0dae1c70da9d7c272040fbe8e40d9ad5a465ce94a45f150a407", + "source": { + "decomp_file": "data/maps/PokemonLeague_ChampionsRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonLeague_HallOfFame", + "file": "data/games/frlg/maps/runtime/PokemonLeague_HallOfFame.json", + "sha256": "14f0fcfbea0d84ebc008fa467621e4f30e09e26d477864b057c6d9ac79ba1e31", + "source": { + "decomp_file": "data/maps/PokemonLeague_HallOfFame/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 13, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonLeague_LancesRoom", + "file": "data/games/frlg/maps/runtime/PokemonLeague_LancesRoom.json", + "sha256": "80bb156d2e5337b2dcd94ec8293330b6096c2bfeae88226dba68d4fdea5d4e07", + "source": { + "decomp_file": "data/maps/PokemonLeague_LancesRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 28, + "height": 24, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonLeague_LoreleisRoom", + "file": "data/games/frlg/maps/runtime/PokemonLeague_LoreleisRoom.json", + "sha256": "4ff19c68a4886814af3b6dece6da0a576e3c41d987542cf56e74b69fa1ea78be", + "source": { + "decomp_file": "data/maps/PokemonLeague_LoreleisRoom/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 13, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonMansion_1F", + "file": "data/games/frlg/maps/runtime/PokemonMansion_1F.json", + "sha256": "0f902c1a0477e5ef17535572b48749026eac6d92250d97bacca3939f0143d5e3", + "source": { + "decomp_file": "data/maps/PokemonMansion_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 38, + "height": 35, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonMansion_2F", + "file": "data/games/frlg/maps/runtime/PokemonMansion_2F.json", + "sha256": "a5c43cb0b06c242564977fa1ffcf12540cdb544d1cced6e106cc0621d2e43bda", + "source": { + "decomp_file": "data/maps/PokemonMansion_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 38, + "height": 38, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonMansion_3F", + "file": "data/games/frlg/maps/runtime/PokemonMansion_3F.json", + "sha256": "eb8933459f18412887d4225252d2f2f75907feae443301b41bf4122aeb0ca7b6", + "source": { + "decomp_file": "data/maps/PokemonMansion_3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 38, + "height": 35, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonMansion_B1F", + "file": "data/games/frlg/maps/runtime/PokemonMansion_B1F.json", + "sha256": "91118982533aa4fd3a466f7307f40684eb68e91e7fbebeb0f69309fd22598242", + "source": { + "decomp_file": "data/maps/PokemonMansion_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 38, + "height": 35, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonTower_1F", + "file": "data/games/frlg/maps/runtime/PokemonTower_1F.json", + "sha256": "78f21d8c2c91c68cab8a86780be6defa2cab0f2ebf2c5d7144963b78bfc7068f", + "source": { + "decomp_file": "data/maps/PokemonTower_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonTower_2F", + "file": "data/games/frlg/maps/runtime/PokemonTower_2F.json", + "sha256": "6e3dd2d839290824e26980b6562e6187a498c4dee27ca4cfff8d6b4ce453083e", + "source": { + "decomp_file": "data/maps/PokemonTower_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonTower_3F", + "file": "data/games/frlg/maps/runtime/PokemonTower_3F.json", + "sha256": "3e6fa212fcd1008070e3717c60c19ae7dc08346ed0eb15a907a885b28f702424", + "source": { + "decomp_file": "data/maps/PokemonTower_3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonTower_4F", + "file": "data/games/frlg/maps/runtime/PokemonTower_4F.json", + "sha256": "5a42669d864f896c04ef0446c0f3e59409d9882a1eafb43abd9f8018e449a02f", + "source": { + "decomp_file": "data/maps/PokemonTower_4F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonTower_5F", + "file": "data/games/frlg/maps/runtime/PokemonTower_5F.json", + "sha256": "ce6771fbc71a673718e6152e3b137f297b06238d76f002160adc2ffd8ee1511a", + "source": { + "decomp_file": "data/maps/PokemonTower_5F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonTower_6F", + "file": "data/games/frlg/maps/runtime/PokemonTower_6F.json", + "sha256": "777067e79c1269c3f9e97b9cf88569654608fbd49ff4170bbc41b223306039b1", + "source": { + "decomp_file": "data/maps/PokemonTower_6F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "PokemonTower_7F", + "file": "data/games/frlg/maps/runtime/PokemonTower_7F.json", + "sha256": "0803896aa56b4a50adda36265946b3307d46d89dab45b3caa8eaae684578259e", + "source": { + "decomp_file": "data/maps/PokemonTower_7F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "RockTunnel_1F", + "file": "data/games/frlg/maps/runtime/RockTunnel_1F.json", + "sha256": "2e8f70c287a3486552cf28f1c328a47b2ce8b0ca7e2e000a58a46bef73358bd0", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/RockTunnel_1F.json", + "source": { + "decomp_file": "data/maps/RockTunnel_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "RockTunnel_B1F", + "file": "data/games/frlg/maps/runtime/RockTunnel_B1F.json", + "sha256": "8a5fee4e817d4b7e03667e44896547e8dcc70e536c18857af23adba071ed5b10", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/RockTunnel_B1F.json", + "source": { + "decomp_file": "data/maps/RockTunnel_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "RocketHideout_B1F", + "file": "data/games/frlg/maps/runtime/RocketHideout_B1F.json", + "sha256": "8d1897c7b8f026e4f4b0a417cff3253de276f06564c820e13f931ff900b3e13e", + "source": { + "decomp_file": "data/maps/RocketHideout_B1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 28, + "height": 34, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "RocketHideout_B2F", + "file": "data/games/frlg/maps/runtime/RocketHideout_B2F.json", + "sha256": "7ea39b70a18ceaf19a4b520ab451413e8d641ec691e67690147cfbb3b376ef2d", + "source": { + "decomp_file": "data/maps/RocketHideout_B2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 32, + "height": 22, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "RocketHideout_B3F", + "file": "data/games/frlg/maps/runtime/RocketHideout_B3F.json", + "sha256": "d0ee7d2bc9f5a495596d4ca8baa3def58124dfbb7db906153f20fb8ac1a1ba10", + "source": { + "decomp_file": "data/maps/RocketHideout_B3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 22, + "height": 27, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "RocketHideout_B4F", + "file": "data/games/frlg/maps/runtime/RocketHideout_B4F.json", + "sha256": "b85e958778de96c0ee99a024f0ae77ad988cbf251cb8b5a423dd016660cb4a50", + "source": { + "decomp_file": "data/maps/RocketHideout_B4F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 26, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route1", + "file": "data/games/frlg/maps/runtime/Route1.json", + "sha256": "78bf43c8bdf7a0c5dcb22880261626abc36d068c0dfbbc242056e12401c44033", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route1.json", + "source": { + "decomp_file": "data/maps/Route1/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 40, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "Route10", + "file": "data/games/frlg/maps/runtime/Route10.json", + "sha256": "8acf0083caf04fe1b0078e8bb400a5221b4fcbc76bf28422aca2f49cf54b3ba1", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10.json", + "source": { + "decomp_file": "data/maps/Route10/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 80, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "Route10_PokemonCenter_1F", + "file": "data/games/frlg/maps/runtime/Route10_PokemonCenter_1F.json", + "sha256": "5d10f2b726fafc90a401d638272b65ea16960cba93132586caf93d673cf18b78", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10_PokemonCenter_1F.json", + "source": { + "decomp_file": "data/maps/Route10_PokemonCenter_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 15, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "Route11", + "file": "data/games/frlg/maps/runtime/Route11.json", + "sha256": "608f10150cd73f3b46b8dfbf0d63e6ce5af3abfea5968709904a533bfd62e245", + "source": { + "decomp_file": "data/maps/Route11/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 72, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route11_EastEntrance_1F", + "file": "data/games/frlg/maps/runtime/Route11_EastEntrance_1F.json", + "sha256": "0f91f56e2344b005f43eb2cc1eb62ce5a73d20aaf046889b6bb32e87b3b27adb", + "source": { + "decomp_file": "data/maps/Route11_EastEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 12, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route12", + "file": "data/games/frlg/maps/runtime/Route12.json", + "sha256": "40f89d8728bd23d56f62df78ee4ccc750a2c01ce284cb04746d475846e43a664", + "source": { + "decomp_file": "data/maps/Route12/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 120, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route12_NorthEntrance_1F", + "file": "data/games/frlg/maps/runtime/Route12_NorthEntrance_1F.json", + "sha256": "d7952e73d60a33eefe9f2613b43eead09e10099b8a3c3f56eed31f2a4f8adf9c", + "source": { + "decomp_file": "data/maps/Route12_NorthEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 13, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route13", + "file": "data/games/frlg/maps/runtime/Route13.json", + "sha256": "39b964adcbdcd6fba3e242d7e83bc0c3401fb60ecda1345d683a799c5a9c0d9e", + "source": { + "decomp_file": "data/maps/Route13/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 72, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route14", + "file": "data/games/frlg/maps/runtime/Route14.json", + "sha256": "72da23f1dcec08bfcf6e115fcf920597383de549764c9696d027e53b7fcf69e3", + "source": { + "decomp_file": "data/maps/Route14/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 60, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route15", + "file": "data/games/frlg/maps/runtime/Route15.json", + "sha256": "c75c4abc6c0fb9585c3ebd302ffb7c7ea747fbdac1703943c84e5182470242ce", + "source": { + "decomp_file": "data/maps/Route15/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 72, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route15_WestEntrance_1F", + "file": "data/games/frlg/maps/runtime/Route15_WestEntrance_1F.json", + "sha256": "83fcaf6618300ac0cdc89a1ca0f24dda920e5586e55941048db40d66e564b540", + "source": { + "decomp_file": "data/maps/Route15_WestEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 12, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route16", + "file": "data/games/frlg/maps/runtime/Route16.json", + "sha256": "e79de8da8f8d4ceb73e9a8329dfa7e6d3739724d267648f17cfbdcba277dbdc8", + "source": { + "decomp_file": "data/maps/Route16/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route16_House", + "file": "data/games/frlg/maps/runtime/Route16_House.json", + "sha256": "b3dd44d35e994ffa35663851a651d7e859580edccd8fb5b40b3ad38bc9afa6f0", + "source": { + "decomp_file": "data/maps/Route16_House/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route16_NorthEntrance_1F", + "file": "data/games/frlg/maps/runtime/Route16_NorthEntrance_1F.json", + "sha256": "46627f2ed9059e94ca0830d5e36524fe6202452249261130fc413d1f9729ce93", + "source": { + "decomp_file": "data/maps/Route16_NorthEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 18, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route18", + "file": "data/games/frlg/maps/runtime/Route18.json", + "sha256": "6c9fc1b6c86a2adef3ee67c101c3ea9eda61845abe1353778b87d227cbb38d57", + "source": { + "decomp_file": "data/maps/Route18/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 60, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route18_EastEntrance_1F", + "file": "data/games/frlg/maps/runtime/Route18_EastEntrance_1F.json", + "sha256": "3279c34f5c27c8c4e49891757b96a163fd3ba71b2f2e4fb38b188fa5308aa0fd", + "source": { + "decomp_file": "data/maps/Route18_EastEntrance_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 12, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route19", + "file": "data/games/frlg/maps/runtime/Route19.json", + "sha256": "328524f0d96ed1714df25d2d7a3ac69df247c7c090fac252a93f6907e3cb414f", + "source": { + "decomp_file": "data/maps/Route19/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 60, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route2", + "file": "data/games/frlg/maps/runtime/Route2.json", + "sha256": "0e523513ee077bbdfc7f3add7d3045c907128c0f1a2556694a0945e08980c2b5", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2.json", + "source": { + "decomp_file": "data/maps/Route2/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 80, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "Route20", + "file": "data/games/frlg/maps/runtime/Route20.json", + "sha256": "2da48f6afb7408738ea6338904a098872e42e5fe251983effb490c029f8587cb", + "source": { + "decomp_file": "data/maps/Route20/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 120, + "height": 20, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route21_North", + "file": "data/games/frlg/maps/runtime/Route21_North.json", + "sha256": "8dc2193dd34636a79e68abd3dbd86e3940fda3fce11f4fa01344482ebf50ff56", + "source": { + "decomp_file": "data/maps/Route21_North/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 50, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route21_South", + "file": "data/games/frlg/maps/runtime/Route21_South.json", + "sha256": "7e6916023124b37d83ae59bc778dbf1bb57370e47d48157942065491f82cf30f", + "source": { + "decomp_file": "data/maps/Route21_South/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 50, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route22", + "file": "data/games/frlg/maps/runtime/Route22.json", + "sha256": "6e5145419b8cf3be28eed1e86ec65dd8f8398b34e582582e229dadb869ae7848", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route22.json", + "source": { + "decomp_file": "data/maps/Route22/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "mixed; see correction evidence, not blanket verification", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 24, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "Route22_NorthEntrance", + "file": "data/games/frlg/maps/runtime/Route22_NorthEntrance.json", + "sha256": "bbacfdf31ed8deb5e36d74f57091afabd165c7dbb776c50a955c0bf0302ddccd", + "source": { + "decomp_file": "data/maps/Route22_NorthEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 15, + "height": 12, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route23", + "file": "data/games/frlg/maps/runtime/Route23.json", + "sha256": "00a6e123cce2cd62e32baf174c15e7a84b750a534f8d83b4386169d45900c43f", + "source": { + "decomp_file": "data/maps/Route23/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable land is ground level (3); water is flat without bridges" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 24, + "height": 160, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "Route24", + "file": "data/games/frlg/maps/runtime/Route24.json", + "sha256": "8a473b01d6cb800fa35f2fa9527f58e217973f30c4701928ba0ef459261a7ff2", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route24.json", + "source": { + "decomp_file": "data/maps/Route24/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -56,23 +2968,29 @@ 0, 0 ], - "width": 40, - "height": 23, + "width": 24, + "height": 40, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "CeruleanCave_B1F", - "file": "data/games/frlg/maps/runtime/CeruleanCave_B1F.json", - "sha256": "cdba0107e66d521270325b44a7d23dd8b6c4f54811608b8ede5b76a4fd1fbd32", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCave_B1F.json", + "name": "Route25", + "file": "data/games/frlg/maps/runtime/Route25.json", + "sha256": "7d68ff522f7ac2ae0fd13f241f9b8e95c45db2cf728c7c6f4a76d443e3a5087c", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25.json", "source": { - "decomp_file": "data/maps/CeruleanCave_B1F/map.json", + "decomp_file": "data/maps/Route25/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -86,23 +3004,29 @@ 0, 0 ], - "width": 40, - "height": 23, + "width": 72, + "height": 20, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "CeruleanCity", - "file": "data/games/frlg/maps/runtime/CeruleanCity.json", - "sha256": "24c2e115763130b9b942dcdb3fa2702020fa854ec52af98ee737c589f6f45b22", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity.json", + "name": "Route25_SeaCottage", + "file": "data/games/frlg/maps/runtime/Route25_SeaCottage.json", + "sha256": "4b0748e7338b59ff17c1123c0ffcccb5768c80c480e347362991f5ed989e8b7a", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25_SeaCottage.json", "source": { - "decomp_file": "data/maps/CeruleanCity/map.json", + "decomp_file": "data/maps/Route25_SeaCottage/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -116,53 +3040,60 @@ 0, 0 ], - "width": 48, - "height": 40, + "width": 15, + "height": 11, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "CeruleanCity_BikeShop", - "file": "data/games/frlg/maps/runtime/CeruleanCity_BikeShop.json", - "sha256": "9b124a826543472318cface5daf566c83a8a7d898cf34a7debfc9b056834c9f4", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_BikeShop.json", + "name": "Route2_EastBuilding", + "file": "data/games/frlg/maps/runtime/Route2_EastBuilding.json", + "sha256": "1e03b3dfca61e82a9b0c537039eb7c3b62f261162e9340af9b90733a9dde4cad", "source": { - "decomp_file": "data/maps/CeruleanCity_BikeShop/map.json", + "decomp_file": "data/maps/Route2_EastBuilding/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 11, - "height": 10, + "width": 15, + "height": 12, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "CeruleanCity_Gym", - "file": "data/games/frlg/maps/runtime/CeruleanCity_Gym.json", - "sha256": "c64e51cf18c65a7fe940659d467693d8387277f8e67e3a4c4d2403ba5e193740", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Gym.json", + "name": "Route2_ViridianForest_NorthEntrance", + "file": "data/games/frlg/maps/runtime/Route2_ViridianForest_NorthEntrance.json", + "sha256": "333c3e91528f81cbc96013a80dfbc5fe31d046c31ff1ce5ac1df52afdd53324e", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_NorthEntrance.json", "source": { - "decomp_file": "data/maps/CeruleanCity_Gym/map.json", + "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -176,23 +3107,29 @@ 0, 0 ], - "width": 17, - "height": 20, + "width": 15, + "height": 12, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "CeruleanCity_House2", - "file": "data/games/frlg/maps/runtime/CeruleanCity_House2.json", - "sha256": "bc49aa2645851d4553af06df9c1e66c4a4c078a8eb15721bbae84313745d257c", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_House2.json", + "name": "Route2_ViridianForest_SouthEntrance", + "file": "data/games/frlg/maps/runtime/Route2_ViridianForest_SouthEntrance.json", + "sha256": "c4787c8d93216582f28ad6957adc1ef1c76b8afefe3a4174ada10d274140aae8", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_SouthEntrance.json", "source": { - "decomp_file": "data/maps/CeruleanCity_House2/map.json", + "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -206,23 +3143,29 @@ 0, 0 ], - "width": 10, - "height": 9, + "width": 15, + "height": 12, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "CeruleanCity_Mart", - "file": "data/games/frlg/maps/runtime/CeruleanCity_Mart.json", - "sha256": "6a59723815b97d5e28cbb20c4a04a0e7fe503102b21e5b0e4da574aa0711230f", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_Mart.json", + "name": "Route3", + "file": "data/games/frlg/maps/runtime/Route3.json", + "sha256": "adbf361b52c06820e488203c660342eb41610164ff1be1e88355b554a27afc06", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route3.json", "source": { - "decomp_file": "data/maps/CeruleanCity_Mart/map.json", + "decomp_file": "data/maps/Route3/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -236,23 +3179,29 @@ 0, 0 ], - "width": 11, - "height": 9, + "width": 84, + "height": 20, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "CeruleanCity_PokemonCenter_1F", - "file": "data/games/frlg/maps/runtime/CeruleanCity_PokemonCenter_1F.json", - "sha256": "ce7570fae7663ed28aa64159791f33c4d6486c62c44b75fa1e15f82a7d6faf24", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/CeruleanCity_PokemonCenter_1F.json", + "name": "Route4", + "file": "data/games/frlg/maps/runtime/Route4.json", + "sha256": "920ba2e85d766653a15cd64bc5914e21fd1c11e7e44aad132f7fa44c7a6be89d", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4.json", "source": { - "decomp_file": "data/maps/CeruleanCity_PokemonCenter_1F/map.json", + "decomp_file": "data/maps/Route4/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -266,113 +3215,132 @@ 0, 0 ], - "width": 15, - "height": 10, + "width": 108, + "height": 20, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "LavenderTown", - "file": "data/games/frlg/maps/runtime/LavenderTown.json", - "sha256": "bdbce59fea59953b524c51a0a7791efb0e2a70339a911ef737e1753241e94d1a", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/LavenderTown.json", + "name": "Route4_PokemonCenter_1F", + "file": "data/games/frlg/maps/runtime/Route4_PokemonCenter_1F.json", + "sha256": "827cc9b8beeabc81a93be19dfdd672c271e340dc8255bd1defe018f4a2c9446a", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4_PokemonCenter_1F.json", "source": { - "decomp_file": "data/maps/LavenderTown/map.json", + "decomp_file": "data/maps/Route4_PokemonCenter_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "decomp-only", + "verification": "mixed; see correction evidence, not blanket verification", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 24, - "height": 20, + "width": 15, + "height": 10, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "LavenderTown_PokemonCenter_1F", - "file": "data/games/frlg/maps/runtime/LavenderTown_PokemonCenter_1F.json", - "sha256": "e8309c90cf3eae37a2a9ae3a5ea1a8a056939bde9118ad7061bd616d52a0e814", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/LavenderTown_PokemonCenter_1F.json", + "name": "Route5", + "file": "data/games/frlg/maps/runtime/Route5.json", + "sha256": "25b1d78734a754b55418ec724fe9e539e886ddbf1df3ea646824bdfd42d652af", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route5.json", "source": { - "decomp_file": "data/maps/LavenderTown_PokemonCenter_1F/map.json", + "decomp_file": "data/maps/Route5/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "decomp-only", + "verification": "mixed; see correction evidence, not blanket verification", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 15, - "height": 10, + "width": 48, + "height": 40, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "MtMoon_1F", - "file": "data/games/frlg/maps/runtime/MtMoon_1F.json", - "sha256": "f75b1bfc6368868b0520cb71c02de2614fe6fc65644e92530deb3f43f34be444", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_1F.json", + "name": "Route5_SouthEntrance", + "file": "data/games/frlg/maps/runtime/Route5_SouthEntrance.json", + "sha256": "a3d6b9df455410df5e752ed038eaf84211c01b625e7489cf01d375f8c966f721", "source": { - "decomp_file": "data/maps/MtMoon_1F/map.json", + "decomp_file": "data/maps/Route5_SouthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 48, - "height": 40, + "width": 9, + "height": 11, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "MtMoon_B1F", - "file": "data/games/frlg/maps/runtime/MtMoon_B1F.json", - "sha256": "b3a805c32e3dedf0498d06f6b8e45ef25e30b477413c00df3fe4087806e6f6f8", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B1F.json", + "name": "Route6", + "file": "data/games/frlg/maps/runtime/Route6.json", + "sha256": "69fab518b0df57ccdb2c8c639fe70c0d9f0af802ede3ec08888351431d1b2ec9", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route6.json", "source": { - "decomp_file": "data/maps/MtMoon_B1F/map.json", + "decomp_file": "data/maps/Route6/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -386,7 +3354,7 @@ 0, 0 ], - "width": 49, + "width": 24, "height": 40, "origin_space": "map layout" }, @@ -394,52 +3362,59 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "MtMoon_B2F", - "file": "data/games/frlg/maps/runtime/MtMoon_B2F.json", - "sha256": "aadc8f65fc0d570c329c897d2689063c3ea728f518c2e2d47b3bacbf7f85c81a", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/MtMoon_B2F.json", + "name": "Route6_NorthEntrance", + "file": "data/games/frlg/maps/runtime/Route6_NorthEntrance.json", + "sha256": "1938c83c169392ff710cb3ffc2efedfde1d730f1536a01cf38f6f91aa7dbaf4a", "source": { - "decomp_file": "data/maps/MtMoon_B2F/map.json", + "decomp_file": "data/maps/Route6_NorthEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 48, - "height": 40, + "width": 9, + "height": 11, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "PalletTown", - "file": "data/games/frlg/maps/runtime/PalletTown.json", - "sha256": "0dc7446f568097b36a9479954f01afe546cb64c82bb0efa91da0cb66ad950f9f", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown.json", + "name": "Route7", + "file": "data/games/frlg/maps/runtime/Route7.json", + "sha256": "15367d31f80ff26dd8ae7e59e77f427968ec8d0ef6af981a7125d797715fc8e7", "source": { - "decomp_file": "data/maps/PalletTown/map.json", + "decomp_file": "data/maps/Route7/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ @@ -454,22 +3429,23 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "PalletTown_PlayersHouse_1F", - "file": "data/games/frlg/maps/runtime/PalletTown_PlayersHouse_1F.json", - "sha256": "5997b5459b2e7668b8ee725a87eb4f23637ab16264afb017e5306a08127ca015", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_1F.json", + "name": "Route7_EastEntrance", + "file": "data/games/frlg/maps/runtime/Route7_EastEntrance.json", + "sha256": "d1073d52636707c03882d34e05d0a11a5c3934e2396432144a76e3e8fba8bf8b", "source": { - "decomp_file": "data/maps/PalletTown_PlayersHouse_1F/map.json", + "decomp_file": "data/maps/Route7_EastEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ @@ -477,59 +3453,61 @@ 0 ], "width": 13, - "height": 10, + "height": 9, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "PalletTown_PlayersHouse_2F", - "file": "data/games/frlg/maps/runtime/PalletTown_PlayersHouse_2F.json", - "sha256": "2c3458e692748ee2457856b7eeedc6c0d30b50ccd618319ac6219d967d84654c", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_PlayersHouse_2F.json", + "name": "Route8", + "file": "data/games/frlg/maps/runtime/Route8.json", + "sha256": "38825b483e5aba71f37133af8b2acd79e3fe87e9bdaa9617669e48c1238f5ea8", "source": { - "decomp_file": "data/maps/PalletTown_PlayersHouse_2F/map.json", + "decomp_file": "data/maps/Route8/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 12, - "height": 9, + "width": 72, + "height": 20, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "PalletTown_ProfessorOaksLab", - "file": "data/games/frlg/maps/runtime/PalletTown_ProfessorOaksLab.json", - "sha256": "1dedda88f1238eccd6610cbff79c1e5d3cd21b516637b792654746e02b2cdbc8", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_ProfessorOaksLab.json", + "name": "Route8_WestEntrance", + "file": "data/games/frlg/maps/runtime/Route8_WestEntrance.json", + "sha256": "55d6cec8853e8c81007f324b0bcdb0c1170ad21f7a79e12a4ca783a78bdf2cf1", "source": { - "decomp_file": "data/maps/PalletTown_ProfessorOaksLab/map.json", + "decomp_file": "data/maps/Route8_WestEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ @@ -537,22 +3515,23 @@ 0 ], "width": 13, - "height": 14, + "height": 9, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "PalletTown_RivalsHouse", - "file": "data/games/frlg/maps/runtime/PalletTown_RivalsHouse.json", - "sha256": "123cc5013c7904a5b615f0a39c6797811dcacc2d24222c09807ab7750c1391e4", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PalletTown_RivalsHouse.json", + "name": "Route9", + "file": "data/games/frlg/maps/runtime/Route9.json", + "sha256": "b25574fb6dbcdfbfc493dd5a47c14b220416bba091dbe3abd11acc91ca9f1d0a", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route9.json", "source": { - "decomp_file": "data/maps/PalletTown_RivalsHouse/map.json", + "decomp_file": "data/maps/Route9/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -566,23 +3545,29 @@ 0, 0 ], - "width": 13, - "height": 10, + "width": 72, + "height": 20, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "PewterCity", - "file": "data/games/frlg/maps/runtime/PewterCity.json", - "sha256": "ede0ddddd2bec95a3651300a6a34070a2f08dd45416a9b05c2568a7bc7258348", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity.json", + "name": "SSAnne_1F_Corridor", + "file": "data/games/frlg/maps/runtime/SSAnne_1F_Corridor.json", + "sha256": "f797b810955a7124d6c964205394b059428df91c4d8dab42ea3815c9eee0fb6d", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_1F_Corridor.json", "source": { - "decomp_file": "data/maps/PewterCity/map.json", + "decomp_file": "data/maps/SSAnne_1F_Corridor/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -596,53 +3581,60 @@ 0, 0 ], - "width": 48, - "height": 40, + "width": 31, + "height": 21, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "PewterCity_Gym", - "file": "data/games/frlg/maps/runtime/PewterCity_Gym.json", - "sha256": "f8553e27dd2d6c04b576432a010e90a1dda163c6d1b967c5d10666d6b32ba37d", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Gym.json", + "name": "SSAnne_1F_Room6", + "file": "data/games/frlg/maps/runtime/SSAnne_1F_Room6.json", + "sha256": "b1cb332de36333a516c29456353b19f20db0b239665ae9db7e1b636a6e8a33c3", "source": { - "decomp_file": "data/maps/PewterCity_Gym/map.json", + "decomp_file": "data/maps/SSAnne_1F_Room6/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 13, - "height": 16, + "width": 6, + "height": 8, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "PewterCity_Mart", - "file": "data/games/frlg/maps/runtime/PewterCity_Mart.json", - "sha256": "3d7e406d4c6fc5e15dd04f6a0c2a70a6c15fb8857af5e9ced99eef31eb1b96df", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Mart.json", + "name": "SSAnne_2F_Corridor", + "file": "data/games/frlg/maps/runtime/SSAnne_2F_Corridor.json", + "sha256": "73318b42c74862313b3b1239c30d210422e768dcee1caa09d8284485ece6698b", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_2F_Corridor.json", "source": { - "decomp_file": "data/maps/PewterCity_Mart/map.json", + "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -656,23 +3648,29 @@ 0, 0 ], - "width": 11, - "height": 9, + "width": 34, + "height": 16, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "PewterCity_Museum_1F", - "file": "data/games/frlg/maps/runtime/PewterCity_Museum_1F.json", - "sha256": "6e50491114a5bbddf793f34115fc7909fef98db0de07c1c4701db33d2098fb05", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_Museum_1F.json", + "name": "SSAnne_CaptainsOffice", + "file": "data/games/frlg/maps/runtime/SSAnne_CaptainsOffice.json", + "sha256": "354572f940dfd47badd1938d9bb818378fe8f70aaa07e611a00fd3da171ff7d6", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_CaptainsOffice.json", "source": { - "decomp_file": "data/maps/PewterCity_Museum_1F/map.json", + "decomp_file": "data/maps/SSAnne_CaptainsOffice/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -686,23 +3684,29 @@ 0, 0 ], - "width": 28, - "height": 11, + "width": 9, + "height": 10, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "PewterCity_PokemonCenter_1F", - "file": "data/games/frlg/maps/runtime/PewterCity_PokemonCenter_1F.json", - "sha256": "775bd4999b0f82fee3af684f06e749034517118be5e91dd3eb885825beeedafc", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/PewterCity_PokemonCenter_1F.json", + "name": "SSAnne_Exterior", + "file": "data/games/frlg/maps/runtime/SSAnne_Exterior.json", + "sha256": "f662d5089e083c5056611b51f5f710f7d4ebac5eebcbf9264cbc76bec42269e2", + "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_Exterior.json", "source": { - "decomp_file": "data/maps/PewterCity_PokemonCenter_1F/map.json", + "decomp_file": "data/maps/SSAnne_Exterior/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -716,25 +3720,31 @@ 0, 0 ], - "width": 15, - "height": 10, + "width": 70, + "height": 32, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { - "name": "RockTunnel_1F", - "file": "data/games/frlg/maps/runtime/RockTunnel_1F.json", - "sha256": "2e8f70c287a3486552cf28f1c328a47b2ce8b0ca7e2e000a58a46bef73358bd0", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/RockTunnel_1F.json", + "name": "SafariZone_Center", + "file": "data/games/frlg/maps/runtime/SafariZone_Center.json", + "sha256": "c7ed845118b2ab707ba5003e289fba437b5241473b6721329226ebc23f41fa8d", "source": { - "decomp_file": "data/maps/RockTunnel_1F/map.json", + "decomp_file": "data/maps/SafariZone_Center/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "target_game": "frlg", "source_game": "firered", @@ -746,23 +3756,23 @@ 0, 0 ], - "width": 48, - "height": 40, + "width": 51, + "height": 36, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "RockTunnel_B1F", - "file": "data/games/frlg/maps/runtime/RockTunnel_B1F.json", - "sha256": "8a5fee4e817d4b7e03667e44896547e8dcc70e536c18857af23adba071ed5b10", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/RockTunnel_B1F.json", + "name": "SafariZone_East", + "file": "data/games/frlg/maps/runtime/SafariZone_East.json", + "sha256": "b0f95e65b2fc5452e13ccd5c76e444112c9eed30781616dc103a7577e9f1ddde", "source": { - "decomp_file": "data/maps/RockTunnel_B1F/map.json", + "decomp_file": "data/maps/SafariZone_East/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, @@ -776,37 +3786,37 @@ 0, 0 ], - "width": 48, - "height": 40, + "width": 54, + "height": 35, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route1", - "file": "data/games/frlg/maps/runtime/Route1.json", - "sha256": "78bf43c8bdf7a0c5dcb22880261626abc36d068c0dfbbc242056e12401c44033", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route1.json", + "name": "SafariZone_North", + "file": "data/games/frlg/maps/runtime/SafariZone_North.json", + "sha256": "afb1fb89688fe98bfd9b793f538f5d54b9eee514d9531d3c8d058cbb4ca2a5a6", "source": { - "decomp_file": "data/maps/Route1/map.json", + "decomp_file": "data/maps/SafariZone_North/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 24, + "width": 57, "height": 40, "origin_space": "map layout" }, @@ -814,112 +3824,115 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route10", - "file": "data/games/frlg/maps/runtime/Route10.json", - "sha256": "8acf0083caf04fe1b0078e8bb400a5221b4fcbc76bf28422aca2f49cf54b3ba1", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10.json", + "name": "SafariZone_SecretHouse", + "file": "data/games/frlg/maps/runtime/SafariZone_SecretHouse.json", + "sha256": "52928753db01353c63bcb47ee9185e30d50955df129a7b626d7b176eedcb493e", "source": { - "decomp_file": "data/maps/Route10/map.json", + "decomp_file": "data/maps/SafariZone_SecretHouse/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 24, - "height": 80, + "width": 13, + "height": 11, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route10_PokemonCenter_1F", - "file": "data/games/frlg/maps/runtime/Route10_PokemonCenter_1F.json", - "sha256": "5d10f2b726fafc90a401d638272b65ea16960cba93132586caf93d673cf18b78", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route10_PokemonCenter_1F.json", + "name": "SafariZone_West", + "file": "data/games/frlg/maps/runtime/SafariZone_West.json", + "sha256": "6e93013a6bb5d0240d1c95fb15129c67e34ecfe8b731bd78895053dde545ebb1", "source": { - "decomp_file": "data/maps/Route10_PokemonCenter_1F/map.json", + "decomp_file": "data/maps/SafariZone_West/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 15, - "height": 10, + "width": 48, + "height": 36, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route2", - "file": "data/games/frlg/maps/runtime/Route2.json", - "sha256": "0e523513ee077bbdfc7f3add7d3045c907128c0f1a2556694a0945e08980c2b5", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2.json", + "name": "SaffronCity", + "file": "data/games/frlg/maps/runtime/SaffronCity.json", + "sha256": "7e237be77238490ff14788abe8ba38e5f031e708d57fb1836cdb090b219f424b", "source": { - "decomp_file": "data/maps/Route2/map.json", + "decomp_file": "data/maps/SaffronCity/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 24, - "height": 80, + "width": 66, + "height": 55, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route22", - "file": "data/games/frlg/maps/runtime/Route22.json", - "sha256": "6e5145419b8cf3be28eed1e86ec65dd8f8398b34e582582e229dadb869ae7848", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route22.json", + "name": "SaffronCity_Connection", + "file": "data/games/frlg/maps/runtime/SaffronCity_Connection.json", + "sha256": "8b7f020b88fd81657c88005e15782dff4613eae9c630c58355d894825f733956", "source": { - "decomp_file": "data/maps/Route22/map.json", + "decomp_file": "data/maps/SaffronCity_Connection/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ @@ -927,359 +3940,370 @@ 0 ], "width": 48, - "height": 24, + "height": 40, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route24", - "file": "data/games/frlg/maps/runtime/Route24.json", - "sha256": "8a473b01d6cb800fa35f2fa9527f58e217973f30c4701928ba0ef459261a7ff2", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route24.json", + "name": "SaffronCity_Gym", + "file": "data/games/frlg/maps/runtime/SaffronCity_Gym.json", + "sha256": "0c6bfc660f94ef3eee01b35276b3a04d09aae4e99de9c756c11b1d8e1df12c18", "source": { - "decomp_file": "data/maps/Route24/map.json", + "decomp_file": "data/maps/SaffronCity_Gym/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 24, - "height": 40, + "width": 29, + "height": 25, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route25", - "file": "data/games/frlg/maps/runtime/Route25.json", - "sha256": "7d68ff522f7ac2ae0fd13f241f9b8e95c45db2cf728c7c6f4a76d443e3a5087c", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25.json", + "name": "SaffronCity_Mart", + "file": "data/games/frlg/maps/runtime/SaffronCity_Mart.json", + "sha256": "1cedc27430b3ca1987909af1d2eeefdc209ce7ee7df5026a23e875246cb94c86", "source": { - "decomp_file": "data/maps/Route25/map.json", + "decomp_file": "data/maps/SaffronCity_Mart/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 72, - "height": 20, + "width": 11, + "height": 9, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route25_SeaCottage", - "file": "data/games/frlg/maps/runtime/Route25_SeaCottage.json", - "sha256": "4b0748e7338b59ff17c1123c0ffcccb5768c80c480e347362991f5ed989e8b7a", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route25_SeaCottage.json", + "name": "SilphCo_10F", + "file": "data/games/frlg/maps/runtime/SilphCo_10F.json", + "sha256": "1e37a45e3eb6b23651132c7f1b5e1652db6c58c555cc8c14c85650bfd5c8d2d3", "source": { - "decomp_file": "data/maps/Route25_SeaCottage/map.json", + "decomp_file": "data/maps/SilphCo_10F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 15, - "height": 11, + "width": 17, + "height": 19, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route2_ViridianForest_NorthEntrance", - "file": "data/games/frlg/maps/runtime/Route2_ViridianForest_NorthEntrance.json", - "sha256": "333c3e91528f81cbc96013a80dfbc5fe31d046c31ff1ce5ac1df52afdd53324e", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_NorthEntrance.json", + "name": "SilphCo_11F", + "file": "data/games/frlg/maps/runtime/SilphCo_11F.json", + "sha256": "86d778cd24a1fb610f6f23fb5bc4ae24ff717efa05bce30b75cad0a1a96d2c19", "source": { - "decomp_file": "data/maps/Route2_ViridianForest_NorthEntrance/map.json", + "decomp_file": "data/maps/SilphCo_11F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 15, - "height": 12, + "width": 17, + "height": 20, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route2_ViridianForest_SouthEntrance", - "file": "data/games/frlg/maps/runtime/Route2_ViridianForest_SouthEntrance.json", - "sha256": "c4787c8d93216582f28ad6957adc1ef1c76b8afefe3a4174ada10d274140aae8", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route2_ViridianForest_SouthEntrance.json", + "name": "SilphCo_1F", + "file": "data/games/frlg/maps/runtime/SilphCo_1F.json", + "sha256": "85b07612e7a5cda4a87e535ef9f8e9c61dea8d1d61a8c5126b05820a8c37582b", "source": { - "decomp_file": "data/maps/Route2_ViridianForest_SouthEntrance/map.json", + "decomp_file": "data/maps/SilphCo_1F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 15, - "height": 12, + "width": 36, + "height": 22, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route3", - "file": "data/games/frlg/maps/runtime/Route3.json", - "sha256": "adbf361b52c06820e488203c660342eb41610164ff1be1e88355b554a27afc06", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route3.json", + "name": "SilphCo_2F", + "file": "data/games/frlg/maps/runtime/SilphCo_2F.json", + "sha256": "79361bd28d6954b951be4aa5c9c06a911fbc49e783e952912e9674218037da51", "source": { - "decomp_file": "data/maps/Route3/map.json", + "decomp_file": "data/maps/SilphCo_2F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 84, - "height": 20, + "width": 36, + "height": 22, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route4", - "file": "data/games/frlg/maps/runtime/Route4.json", - "sha256": "920ba2e85d766653a15cd64bc5914e21fd1c11e7e44aad132f7fa44c7a6be89d", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4.json", + "name": "SilphCo_3F", + "file": "data/games/frlg/maps/runtime/SilphCo_3F.json", + "sha256": "c8126c1141382299f587ca88a8651c5f354913ed33db1d753db18ddae256c44f", "source": { - "decomp_file": "data/maps/Route4/map.json", + "decomp_file": "data/maps/SilphCo_3F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 108, - "height": 20, + "width": 36, + "height": 22, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route4_PokemonCenter_1F", - "file": "data/games/frlg/maps/runtime/Route4_PokemonCenter_1F.json", - "sha256": "827cc9b8beeabc81a93be19dfdd672c271e340dc8255bd1defe018f4a2c9446a", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route4_PokemonCenter_1F.json", + "name": "SilphCo_4F", + "file": "data/games/frlg/maps/runtime/SilphCo_4F.json", + "sha256": "7a373dad263678f4291877655fe5bc000574713b5add6e428ab5183d623445f0", "source": { - "decomp_file": "data/maps/Route4_PokemonCenter_1F/map.json", + "decomp_file": "data/maps/SilphCo_4F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 15, - "height": 10, + "width": 36, + "height": 22, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route5", - "file": "data/games/frlg/maps/runtime/Route5.json", - "sha256": "25b1d78734a754b55418ec724fe9e539e886ddbf1df3ea646824bdfd42d652af", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route5.json", + "name": "SilphCo_5F", + "file": "data/games/frlg/maps/runtime/SilphCo_5F.json", + "sha256": "93ecb143de01a2c2a3d618f5681e2ae5a48d59c699444ea5bcef6da5ecf93058", "source": { - "decomp_file": "data/maps/Route5/map.json", + "decomp_file": "data/maps/SilphCo_5F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 48, - "height": 40, + "width": 36, + "height": 22, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route6", - "file": "data/games/frlg/maps/runtime/Route6.json", - "sha256": "69fab518b0df57ccdb2c8c639fe70c0d9f0af802ede3ec08888351431d1b2ec9", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route6.json", + "name": "SilphCo_6F", + "file": "data/games/frlg/maps/runtime/SilphCo_6F.json", + "sha256": "8adefa9bb1543f3f64a7cbe18c468710e4f1fde282010549f44ca80251798109", "source": { - "decomp_file": "data/maps/Route6/map.json", + "decomp_file": "data/maps/SilphCo_6F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 24, - "height": 40, + "width": 31, + "height": 19, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "Route9", - "file": "data/games/frlg/maps/runtime/Route9.json", - "sha256": "b25574fb6dbcdfbfc493dd5a47c14b220416bba091dbe3abd11acc91ca9f1d0a", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/Route9.json", + "name": "SilphCo_7F", + "file": "data/games/frlg/maps/runtime/SilphCo_7F.json", + "sha256": "d4a9f54f5e50ba64eb847e9f6c7758bed7aca6248cf6e65c7f30e4627b7a5953", "source": { - "decomp_file": "data/maps/Route9/map.json", + "decomp_file": "data/maps/SilphCo_7F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 72, - "height": 20, + "width": 31, + "height": 19, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "SSAnne_1F_Corridor", - "file": "data/games/frlg/maps/runtime/SSAnne_1F_Corridor.json", - "sha256": "f797b810955a7124d6c964205394b059428df91c4d8dab42ea3815c9eee0fb6d", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_1F_Corridor.json", + "name": "SilphCo_8F", + "file": "data/games/frlg/maps/runtime/SilphCo_8F.json", + "sha256": "c40ad044f00a70728cb977863382f417086bfc688ac8f9d670e6d752991aa228", "source": { - "decomp_file": "data/maps/SSAnne_1F_Corridor/map.json", + "decomp_file": "data/maps/SilphCo_8F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ @@ -1287,66 +4311,67 @@ 0 ], "width": 31, - "height": 21, + "height": 19, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "SSAnne_2F_Corridor", - "file": "data/games/frlg/maps/runtime/SSAnne_2F_Corridor.json", - "sha256": "73318b42c74862313b3b1239c30d210422e768dcee1caa09d8284485ece6698b", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_2F_Corridor.json", + "name": "SilphCo_9F", + "file": "data/games/frlg/maps/runtime/SilphCo_9F.json", + "sha256": "824eac5434aea0a465f31140fd715fff32b7c7f7eb62b0942905a122af4a6b5a", "source": { - "decomp_file": "data/maps/SSAnne_2F_Corridor/map.json", + "decomp_file": "data/maps/SilphCo_9F/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", "date": "2026-10-31" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 34, - "height": 16, + "width": 31, + "height": 19, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "SSAnne_CaptainsOffice", - "file": "data/games/frlg/maps/runtime/SSAnne_CaptainsOffice.json", - "sha256": "354572f940dfd47badd1938d9bb818378fe8f70aaa07e611a00fd3da171ff7d6", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_CaptainsOffice.json", + "name": "UndergroundPath_EastEntrance", + "file": "data/games/frlg/maps/runtime/UndergroundPath_EastEntrance.json", + "sha256": "bb3a41f1bd2a3fa38669e70b37117f5845f99ff1fbb4c61bfbf4f10cee75214b", "source": { - "decomp_file": "data/maps/SSAnne_CaptainsOffice/map.json", + "decomp_file": "data/maps/UndergroundPath_EastEntrance/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 9, + "width": 13, "height": 10, "origin_space": "map layout" }, @@ -1354,37 +4379,39 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { - "name": "SSAnne_Exterior", - "file": "data/games/frlg/maps/runtime/SSAnne_Exterior.json", - "sha256": "f662d5089e083c5056611b51f5f710f7d4ebac5eebcbf9264cbc76bec42269e2", - "upstream_path": "SerialPrograms/Source/VideoGames/PokemonFRLG/Overworld/Maps/SSAnne_Exterior.json", + "name": "UndergroundPath_EastWestTunnel", + "file": "data/games/frlg/maps/runtime/UndergroundPath_EastWestTunnel.json", + "sha256": "5c74f213da3d57de65e9b088ad4ba74efd7894de6c7198b85b6c99ebc58fca30", "source": { - "decomp_file": "data/maps/SSAnne_Exterior/map.json", + "decomp_file": "data/maps/UndergroundPath_EastWestTunnel/map.json", "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", - "date": "2026-10-31" + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" }, "target_game": "frlg", "source_game": "firered", "source_revision_resolved": true, - "verification": "mixed; see correction evidence, not blanket verification", + "verification": "decomp-only", "coordinate_frame": { "kind": "local tiles", "origin": [ 0, 0 ], - "width": 70, - "height": 32, + "width": 80, + "height": 7, "origin_space": "map layout" }, "terrain_corrections": [], "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "candidate" }, { "name": "UndergroundPath_NorthEntrance", @@ -1414,7 +4441,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { "name": "UndergroundPath_NorthSouthTunnel", @@ -1444,7 +4477,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { "name": "UndergroundPath_SouthEntrance", @@ -1474,7 +4513,44 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "UndergroundPath_WestEntrance", + "file": "data/games/frlg/maps/runtime/UndergroundPath_WestEntrance.json", + "sha256": "abdd24732ddeac193cc0e4535cfed24bba604a5a12803976bd6e3b668703b973", + "source": { + "decomp_file": "data/maps/UndergroundPath_WestEntrance/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 13, + "height": 10, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" }, { "name": "VermilionCity", @@ -1504,7 +4580,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { "name": "VermilionCity_Gym", @@ -1561,7 +4643,44 @@ }, "preconditions": [ "FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES set; electric barriers already open" - ] + ], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "VermilionCity_Mart", + "file": "data/games/frlg/maps/runtime/VermilionCity_Mart.json", + "sha256": "b8ea7082ed1adb1b10167c1ff50a4af68457cbbc12340a072f54505f5ce49c46", + "source": { + "decomp_file": "data/maps/VermilionCity_Mart/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all reachable land is ground level (3); non-ground tiles are unreachable boundary or counter tiles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 11, + "height": 9, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" }, { "name": "VermilionCity_PokemonCenter_1F", @@ -1591,7 +4710,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { "name": "VermilionCity_PokemonFanClub", @@ -1621,7 +4746,103 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "VictoryRoad_1F", + "file": "data/games/frlg/maps/runtime/VictoryRoad_1F.json", + "sha256": "057dcd01c2419bf96d00bc5db4f997a79e39deaed69c413c613d91c90afebe5b", + "source": { + "decomp_file": "data/maps/VictoryRoad_1F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 48, + "height": 22, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "VictoryRoad_2F", + "file": "data/games/frlg/maps/runtime/VictoryRoad_2F.json", + "sha256": "9825d03e495583c79cf20756de5bc9057035511e8bd53b172fd9aafe129cf8f6", + "source": { + "decomp_file": "data/maps/VictoryRoad_2F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 51, + "height": 22, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" + }, + { + "name": "VictoryRoad_3F", + "file": "data/games/frlg/maps/runtime/VictoryRoad_3F.json", + "sha256": "9962a4b7c5203da0b55ffdb78e6f73bd99ac38c249ca76a632332a5f2f1ba0b8", + "source": { + "decomp_file": "data/maps/VictoryRoad_3F/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 45, + "height": 22, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" }, { "name": "ViridianCity", @@ -1651,7 +4872,44 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } + }, + { + "name": "ViridianCity_Gym", + "file": "data/games/frlg/maps/runtime/ViridianCity_Gym.json", + "sha256": "d1b79588bc91cbb2562b088e9f3e3af10947d01f7abef025e22218e059e66d95", + "source": { + "decomp_file": "data/maps/ViridianCity_Gym/map.json", + "revision": "ce6406d8c2eaf46d543c8a2606de0c3cb1951982", + "date": "2026-10-31", + "elevation_omitted": "all walkable tiles are ground level (3); non-ground levels appear only on unwalkable walls/obstacles" + }, + "target_game": "frlg", + "source_game": "firered", + "source_revision_resolved": true, + "verification": "decomp-only", + "coordinate_frame": { + "kind": "local tiles", + "origin": [ + 0, + 0 + ], + "width": 20, + "height": 24, + "origin_space": "map layout" + }, + "terrain_corrections": [], + "generation_overrides": { + "opened_tiles": [] + }, + "preconditions": [], + "status": "candidate" }, { "name": "ViridianCity_Mart", @@ -1681,7 +4939,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { "name": "ViridianCity_PokemonCenter_1F", @@ -1711,7 +4975,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } }, { "name": "ViridianForest", @@ -1741,7 +5011,13 @@ "generation_overrides": { "opened_tiles": [] }, - "preconditions": [] + "preconditions": [], + "status": "verified", + "verified": { + "basis": "approved-runtime-pack", + "pack_revision": "6c2f5c85534186cd9d52af4f844b9847cfd0f33a", + "note": "In the approved runtime pack before the single map set; per-map console runs were not recorded. See verification and terrain_corrections for review evidence." + } } ] }, diff --git a/docs/maps/runtime-maps.md b/docs/maps/runtime-maps.md index fb0040b..bf2e632 100644 --- a/docs/maps/runtime-maps.md +++ b/docs/maps/runtime-maps.md @@ -13,9 +13,13 @@ are implemented; Arduino adoption and required status settings are pending. | Pack | Maps | Arduino snapshot | |---|---:|---| -| `data/games/frlg/maps/runtime/` | 53 | `frlg/stage7-celadon`, `51c0ce6128e5981da56b370a770874b96a1e129f` | +| `data/games/frlg/maps/runtime/` | 152 (57 verified, 95 candidate) | `frlg/stage7-celadon`, `51c0ce6128e5981da56b370a770874b96a1e129f` (first 53) | | `data/games/bdsp/maps/runtime/` | 22 | `bdsp/autostory-v4`, `040693c62486439b4b473732860b0d4c6632dc2a` | +FRLG is one map set with a per-map `status` (`verified` or `candidate`) in the +manifest; see [its README](../../data/games/frlg/maps/README.md) for the +statuses, scope and promotion workflow. + [The manifest](../../data/maps/runtime-manifest.json) lists every file, its SHA-256, original path and revision, target/source game, crop origin, source revision certainty, terrain patches, generator overrides and special @@ -130,7 +134,10 @@ planner or simulator, independent of AutoStory. Run from the repository root; Python stdlib only: ```sh -PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --out data/games/frlg/maps/runtime --check +PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --all \ + --scope data/games/frlg/maps/pokeguy-map-scope.json --item-identities \ + --out data/games/frlg/maps/runtime --manifest data/maps/runtime-manifest.json --check +PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set check PYTHONPATH=src python3 -m pokesim.maps.bdsp_decomp_map_builder --check PYTHONPATH=src python3 -m pokesim.maps.runtime_map_pack PYTHONPATH=src python3 -m unittest discover -s src/pokesim/maps -t src diff --git a/src/pokesim/maps/frlg_decomp_map_builder.py b/src/pokesim/maps/frlg_decomp_map_builder.py index 23dbf99..ee80140 100644 --- a/src/pokesim/maps/frlg_decomp_map_builder.py +++ b/src/pokesim/maps/frlg_decomp_map_builder.py @@ -4,9 +4,12 @@ Owned by PokemonSimulation; export the JSON pack to console consumers. -Usage: - PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --out data/games/frlg/maps/runtime \ - Route3 Route4 Route4_PokemonCenter_1F +Usage (the FRLG map set in data/games/frlg/maps/runtime; see its README.md): + PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --all \ + --scope data/games/frlg/maps/pokeguy-map-scope.json --item-identities \ + --out data/games/frlg/maps/runtime --manifest data/maps/runtime-manifest.json --check +Other folders: + PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --out Route3 Route4 PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --out PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --out --check PYTHONPATH=src python3 -m pokesim.maps.frlg_decomp_map_builder --all --out /tmp/frlg-world-candidate @@ -29,7 +32,9 @@ 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. Export the generated pack with pokesim.maps.runtime_map_pack for +differs. With --manifest, maps whose status is verified are reviewed content: +they are allowed outside the scope and not compared; every candidate must be +in scope and match the generator byte for byte. Export the generated pack with pokesim.maps.runtime_map_pack for Arduino consumers. """ import argparse @@ -48,6 +53,7 @@ from .runtime_map_coordinates import compact_map from .runtime_map_format import map_text as readable_map_text from .frlg_map_scope import read_scope +from .frlg_map_set import statuses COMMIT = 'ce6406d8c2eaf46d543c8a2606de0c3cb1951982' # When COMMIT was pinned, for each map's "source". @@ -500,7 +506,6 @@ def map_json(decomp, name, sources, layouts, names, loaded, unhandled, land_maps obj['source_script'] = original['script'] if 'local_id' in original: obj['source_local_id'] = original['local_id'] - data['source']['generation_status'] = 'unreviewed-full-catalog-candidate' if unresolved: data['unresolved_tiles'] = unresolved if name in OPENED_TILES: @@ -560,11 +565,18 @@ def main(): parser.add_argument('--check', action='store_true', help='check the files in --out instead of writing them') parser.add_argument('--all', dest='all_maps', action='store_true', help='generate the pinned full catalog into an empty candidate directory') parser.add_argument('--scope', help='with --all: explicit reviewed exclusion inventory; preserve boundary links') + parser.add_argument('--manifest', help='with --check: map statuses; verified maps are reviewed content, not compared') parser.add_argument('maps', nargs='*', help='default: the maps already in --out') args = parser.parse_args() decomp = Decomp(args.commit, args.cache) if args.scope and not args.all_maps: parser.error('--scope requires --all') + if args.manifest and not (args.check and args.scope): + parser.error('--manifest requires --check and --scope') + verified = set() + if args.manifest: + status = statuses(json.loads(open(args.manifest).read())) + verified = {name for name, value in status.items() if value == 'verified'} if args.all_maps: if args.maps: parser.error('--all cannot be combined with explicit map names') @@ -588,7 +600,7 @@ def main(): land_maps = land_encounter_maps(decomp) maps = [] for name in args.maps: - if name in excluded: + if name in excluded or name in verified: continue data = map_json(decomp, name, sources, layouts, names, loaded, unhandled, land_maps, args.item_identities, candidate=args.all_maps) text = contract_json_text(compact_map(data)) if args.all_maps else json_text(data) @@ -600,16 +612,22 @@ def main(): if args.check: differ = [] if args.scope: - unexpected = {f[:-5] for f in os.listdir(args.out) if f.endswith('.json')} - {n for n, _ in maps} + unexpected = {f[:-5] for f in os.listdir(args.out) if f.endswith('.json')} - {n for n, _ in maps} - verified if unexpected: sys.exit('Out-of-scope map files: ' + ' '.join(sorted(unexpected))) 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 args.manifest: + candidates = {name for name, value in status.items() if value == 'candidate'} + if candidates != {n for n, _ in maps}: + sys.exit('Candidate statuses differ from the generated scope: ' + + ' '.join(sorted(candidates ^ {n for n, _ in maps}))) if 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.') + skipped = f' ({len(verified)} verified maps not compared)' if verified else '' + print(f'{len(maps)} maps in {args.out} match the generator{skipped}.') return os.makedirs(args.out, exist_ok=True) for name, text in maps: diff --git a/src/pokesim/maps/frlg_import_audit.py b/src/pokesim/maps/frlg_import_audit.py index 23bc017..a5e8a8e 100644 --- a/src/pokesim/maps/frlg_import_audit.py +++ b/src/pokesim/maps/frlg_import_audit.py @@ -1,9 +1,13 @@ -"""Audit a full FRLG source candidate without publishing or approving it. +"""Audit the candidate maps of the FRLG map set without approving them. PYTHONPATH=src python3 -m pokesim.maps.frlg_import_audit \ - data/games/frlg/maps/source-candidate --schema \ + data/games/frlg/maps/runtime --schema --manifest data/maps/runtime-manifest.json \ --scope data/games/frlg/maps/pokeguy-map-scope.json --out /tmp/frlg-import-audit.json +With --manifest, only maps whose status is candidate are audited; verified maps +are reviewed content that may lie outside the scope. Without it, every map in +the directory is a candidate (a fresh generator output directory). + Generate with frlg_decomp_map_builder --all --scope --item-identities. Unknown mechanics, destinations and pickups stay gaps; valid geometry is not proof that the complete story can be routed or executed. @@ -17,20 +21,30 @@ from pokesim.formats.contract_format import json_text from .runtime_map_schema import validate from .frlg_map_scope import read_scope +from .frlg_map_set import statuses -def audit(candidate, schema=False, scope=None): +def audit(candidate, schema=False, scope=None, manifest=None): paths = sorted(Path(candidate).glob('*.json')) if not paths: raise ValueError('candidate directory has no maps') - maps = {p.stem: json.loads(p.read_text()) for p in paths} + every = {p.stem: json.loads(p.read_text()) for p in paths} + verified = set() + if manifest: + status = statuses(json.loads(Path(manifest).read_text())) + if set(status) != set(every): + raise ValueError('map files and manifest statuses differ') + verified = {name for name, value in status.items() if value == 'verified'} + maps = {name: data for name, data in every.items() if name not in verified} + if not maps: + raise ValueError('no candidate maps to audit') excluded = {} if scope: revision = next(iter(maps.values()))['source']['revision'] declaration = json.loads(Path(scope).read_text()) - catalog = set(maps) | {n for group in declaration['excluded'] for n in group['maps']} + catalog = set(every) | {n for group in declaration['excluded'] for n in group['maps']} excluded = read_scope(scope, catalog, revision) - if set(maps) != set(catalog) - set(excluded): + if set(maps) != set(catalog) - set(excluded) - verified: raise ValueError('candidate files do not match the declared map scope') if schema: from pokesim.formats.json_schema import validator @@ -41,8 +55,8 @@ def audit(candidate, schema=False, scope=None): validate(data) if schema: check.validate(data) - if data['name'] != name or data['source'].get('generation_status') != 'unreviewed-full-catalog-candidate': - raise ValueError('expected a marked source candidate: ' + name) + if data['name'] != name: + raise ValueError('map name differs from its file: ' + name) revisions.add(data['source']['revision']) unknown = data.get('unresolved_tiles', {}) if unknown: @@ -51,8 +65,10 @@ def audit(candidate, schema=False, scope=None): if ' ' in row: raise ValueError(f'{name}: candidate contains unmapped space cells at row {y}') counts = { - 'scope_boundary_warps': sum(w.get('to_map') in excluded for w in data.get('warps', [])), - 'scope_boundary_connections': sum(e['to_map'] in excluded for e in data.get('connections', [])), + 'scope_boundary_warps': sum(w.get('to_map') in excluded and w['to_map'] not in every + for w in data.get('warps', [])), + 'scope_boundary_connections': sum(e['to_map'] in excluded and e['to_map'] not in every + for e in data.get('connections', [])), 'unknown_tiles': sum(map(len, unknown.values())), 'unlinked_warps': sum('to_map' not in w for w in data.get('warps', [])), 'dynamic_warps': sum(w.get('unresolved') == 'dynamic_destination' for w in data.get('warps', [])), @@ -64,18 +80,22 @@ def audit(candidate, schema=False, scope=None): gaps.append(dict(map=name, **counts)) for warp in data.get('warps', []): if 'to_map' in warp: - if warp['to_map'] in excluded: + if warp['to_map'] in excluded and warp['to_map'] not in every: + continue + target = every.get(warp['to_map']) + if target is not None and warp['to_map'] in verified: + # A reviewed map built without this neighbor: pending relink. + totals['pending_relink_warps'] += warp['to_point'] not in target.get('points', {}) continue - target = maps.get(warp['to_map']) if target is None or warp['to_point'] not in target.get('points', {}): raise ValueError(name + ': missing fixed warp destination ' + repr(warp)) for edge in data.get('connections', []): - if edge['to_map'] not in maps and edge['to_map'] not in excluded: + if edge['to_map'] not in every and edge['to_map'] not in excluded: raise ValueError(name + ': missing connection destination') if len(revisions) != 1: raise ValueError('candidate mixes source revisions') return {'format': 'pokesim-frlg-map-import-audit/1', 'status': 'unreviewed-candidate', - 'source_revision': revisions.pop(), 'map_count': len(maps), + 'source_revision': revisions.pop(), 'map_count': len(maps), 'verified_map_count': len(verified), 'excluded_map_count': len(excluded), 'elevation_grids_retained': sum('elevation' in m for m in maps.values()), 'elevation_grids_omitted': sum('elevation' not in m for m in maps.values()), @@ -90,8 +110,9 @@ def main(): parser.add_argument('--schema', action='store_true', help='also use schemas/requirements.txt') parser.add_argument('--out', type=Path) parser.add_argument('--scope', type=Path, help='explicit excluded-destination inventory') + parser.add_argument('--manifest', type=Path, help='map statuses; audit only candidates') args = parser.parse_args() - result = json_text(audit(args.candidate, args.schema, args.scope)) + result = json_text(audit(args.candidate, args.schema, args.scope, args.manifest)) if args.out: args.out.write_text(result, encoding='utf-8') else: diff --git a/src/pokesim/maps/frlg_map_set.py b/src/pokesim/maps/frlg_map_set.py new file mode 100644 index 0000000..f39b8df --- /dev/null +++ b/src/pokesim/maps/frlg_map_set.py @@ -0,0 +1,203 @@ +r"""The single FRLG map set: one file per map, status recorded in the manifest. + +Every FRLG map lives in data/games/frlg/maps/runtime/ and has one manifest +entry in data/maps/runtime-manifest.json with a ``status``: + +- ``candidate``: generated from pret/pokefirered, unreviewed. The generator + owns its bytes (``frlg_decomp_map_builder --check`` reproduces them). +- ``verified``: reviewed content. ``verified`` records the basis: either an + ``approved-runtime-pack`` (approved before per-map console records), or a + ``console-run`` with the run, date and checkpoint that walked it. + +Promotion edits only the manifest, so map bytes and hashes stay unchanged. +From the repository root: + + PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set check + PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set sync-candidates + PYTHONPATH=src python3 -m pokesim.maps.frlg_map_set promote Route11 \ + --run --date 2026-11-10 --checkpoint 00.14 \ + --consumer-revision + +See data/games/frlg/maps/README.md for the workflow. +""" + +import argparse +import hashlib +import json +from pathlib import Path +import re + +from .runtime_map_coordinates import legacy_map +from .runtime_map_schema import validate + + +ROOT = Path(__file__).resolve().parents[3] +MANIFEST = ROOT / 'data/maps/runtime-manifest.json' +DIRECTORY = 'data/games/frlg/maps/runtime' +SCOPE = ROOT / 'data/games/frlg/maps/pokeguy-map-scope.json' +STATUSES = ('candidate', 'verified') +PACK_BASIS = 'approved-runtime-pack' +RUN_BASIS = 'console-run' +DATE = re.compile(r'\d{4}-\d\d-\d\d\Z') +SHA = re.compile(r'[0-9a-f]{40}\Z') + + +def read_manifest(path=MANIFEST): + return json.loads(Path(path).read_text()) + + +def write_manifest(manifest, path=MANIFEST): + Path(path).write_text(json.dumps(manifest, indent=2) + '\n') + + +def check_verified(name, record): + """Raise ValueError unless a verified record names its evidence.""" + if not isinstance(record, dict): + raise ValueError(name + ': verified map needs a verified record') + basis = record.get('basis') + if basis == PACK_BASIS: + if set(record) != {'basis', 'pack_revision', 'note'} or not SHA.fullmatch(record['pack_revision']): + raise ValueError(name + ': approved-runtime-pack needs pack_revision and note') + elif basis == RUN_BASIS: + if set(record) - {'consumer_revision'} != {'basis', 'run', 'date', 'checkpoint'}: + raise ValueError(name + ': console-run needs run, date and checkpoint') + if not record['run'] or not record['checkpoint'] or not DATE.fullmatch(record['date']): + raise ValueError(name + ': console-run needs a non-empty run/checkpoint and a YYYY-MM-DD date') + if 'consumer_revision' in record and not SHA.fullmatch(record['consumer_revision']): + raise ValueError(name + ': consumer_revision must be a full commit SHA') + else: + raise ValueError(name + ': unknown verified basis ' + repr(basis)) + + +def statuses(manifest): + """Map name -> status for FRLG; raise ValueError on missing/invalid records.""" + result = {} + for entry in manifest['games']['frlg']['maps']: + name, status = entry['name'], entry.get('status') + if status not in STATUSES: + raise ValueError(name + ': status must be one of ' + ', '.join(STATUSES)) + if status == 'verified': + check_verified(name, entry.get('verified')) + elif 'verified' in entry: + raise ValueError(name + ': a candidate has no verified record') + if entry['file'] != f'{DIRECTORY}/{name}.json': + raise ValueError(name + ': map file must be ' + f'{DIRECTORY}/{name}.json') + result[name] = status + return result + + +def read_excluded(names, scope=SCOPE): + """Scope-excluded map -> reason; the catalog is the set plus every exclusion.""" + from .frlg_map_scope import read_scope + declaration = json.loads(Path(scope).read_text()) + catalog = set(names) | {n for group in declaration['excluded'] for n in group['maps']} + return read_scope(scope, catalog, declaration['source_revision']) + + +def link_gaps(maps, status, excluded): + """Classify every named link that does not resolve inside the set. + + ``boundary``: the destination is scope-excluded and not in the set (a dead + end, never a successful transition). ``pending_relink``: a candidate links + into a verified map that does not (yet) define the return point or + connection, because reviewed maps were built without that neighbor. + Anything else is an error. Returns (boundary, pending_relink, errors). + """ + boundary, pending, errors = [], [], [] + for name, data in sorted(maps.items()): + links = [(w['to_map'], w['to_point']) for w in data.get('warps', []) if 'to_map' in w] + links += [(c['to_map'], None) for c in data.get('connections', [])] + for target, point in links: + if target not in maps: + (boundary if target in excluded else errors).append((name, target, point)) + elif point is not None and point not in maps[target].get('points', {}): + pending_case = status.get(name) == 'candidate' and status.get(target) == 'verified' + (pending if pending_case else errors).append((name, target, point)) + return boundary, pending, errors + + +def candidate_entry(name, raw): + data = legacy_map(json.loads(raw)) + validate(data) + return dict(name=name, file=f'{DIRECTORY}/{name}.json', sha256=hashlib.sha256(raw).hexdigest(), + source=data['source'], target_game='frlg', source_game='firered', source_revision_resolved=True, + verification='decomp-only', + coordinate_frame={'kind': 'local tiles', 'origin': [0, 0], 'width': len(data['tiles'][0]), + 'height': len(data['tiles']), 'origin_space': 'map layout'}, + terrain_corrections=[], generation_overrides={'opened_tiles': []}, preconditions=[], + status='candidate') + + +def sync_candidates(manifest, root=ROOT): + """Add/refresh candidate entries from the files; never touch verified entries. + + A file without an entry becomes a candidate. Returns the changed names. + """ + pack = manifest['games']['frlg']['maps'] + entries = {e['name']: e for e in pack} + files = {p.stem: p.read_bytes() for p in (Path(root) / DIRECTORY).glob('*.json')} + missing = sorted(set(entries) - set(files)) + if missing: + raise ValueError('manifest entries without a map file: ' + ' '.join(missing)) + changed = [] + for name, raw in sorted(files.items()): + entry = entries.get(name) + if entry is not None and entry.get('status') != 'candidate': + continue + fresh = candidate_entry(name, raw) + if entry != fresh: + changed.append(name) + if entry is None: + pack.append(fresh) + else: + pack[pack.index(entry)] = fresh + pack.sort(key=lambda e: e['name']) + return changed + + +def promote(manifest, name, run, date, checkpoint, consumer_revision=None): + """Record a console pass; the map bytes and hash stay unchanged.""" + entry = next((e for e in manifest['games']['frlg']['maps'] if e['name'] == name), None) + if entry is None: + raise ValueError('no FRLG map named ' + name) + if entry['status'] != 'candidate': + raise ValueError(name + ' is already ' + entry['status']) + record = dict(basis=RUN_BASIS, run=run, date=date, checkpoint=checkpoint) + if consumer_revision: + record['consumer_revision'] = consumer_revision + check_verified(name, record) + entry['status'] = 'verified' + entry['verified'] = record + + +def main(): + parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + sub = parser.add_subparsers(dest='command', required=True) + sub.add_parser('check', help='validate statuses (the pack audit covers bytes and links)') + sub.add_parser('sync-candidates', help='write candidate manifest entries from the map files') + up = sub.add_parser('promote', help='mark a candidate verified after a console pass') + up.add_argument('name') + up.add_argument('--run', required=True, help='run record (path or id) of the console pass') + up.add_argument('--date', required=True, help='YYYY-MM-DD') + up.add_argument('--checkpoint', required=True, help='AutoStory checkpoint that walked the map') + up.add_argument('--consumer-revision', help='Arduino-Source commit that ran') + args = parser.parse_args() + manifest = read_manifest() + try: + if args.command == 'sync-candidates': + changed = sync_candidates(manifest) + write_manifest(manifest) + print(f'{len(changed)} candidate entries written') + elif args.command == 'promote': + promote(manifest, args.name, args.run, args.date, args.checkpoint, args.consumer_revision) + write_manifest(manifest) + counts = {s: 0 for s in STATUSES} + for status in statuses(manifest).values(): + counts[status] += 1 + print('FRLG maps: ' + ', '.join(f'{n} {s}' for s, n in counts.items())) + except ValueError as error: + parser.exit(1, str(error) + '\n') + + +if __name__ == '__main__': + main() diff --git a/src/pokesim/maps/runtime_map_pack.py b/src/pokesim/maps/runtime_map_pack.py index a282580..faae2b0 100644 --- a/src/pokesim/maps/runtime_map_pack.py +++ b/src/pokesim/maps/runtime_map_pack.py @@ -16,6 +16,7 @@ from pathlib import Path import shutil +from . import frlg_map_set as map_set from .runtime_map_schema import validate from .runtime_map_coordinates import COMPACT, LEGACY, legacy_map @@ -65,6 +66,13 @@ def audit(manifest_path=MANIFEST): actual = {p.stem for p in (ROOT / 'data/games' / game / 'maps/runtime').glob('*.json')} if actual != set(maps): raise ValueError('pack inventory mismatch: ' + game) + if game == 'frlg': + # One set with per-map status; see frlg_map_set for the link rules. + status = map_set.statuses(manifest) + _, _, errors = map_set.link_gaps(maps, status, map_set.read_excluded(maps)) + if errors: + raise ValueError('unresolved FRLG links: ' + repr(errors[:5])) + continue for name, data in maps.items(): for warp in data.get('warps', []): if 'to_map' in warp: diff --git a/src/pokesim/maps/test_frlg_import_audit.py b/src/pokesim/maps/test_frlg_import_audit.py index 66e7ae3..3cd7276 100644 --- a/src/pokesim/maps/test_frlg_import_audit.py +++ b/src/pokesim/maps/test_frlg_import_audit.py @@ -1,4 +1,4 @@ -"""Full pinned source candidate integrity and conservative unresolved-state tests.""" +"""Candidate maps of the FRLG map set: integrity and conservative unresolved-state tests.""" import copy import json @@ -10,27 +10,35 @@ from .frlg_decomp_map_builder import COMMIT from pokesim.formats.json_schema import ROOT -CANDIDATE = ROOT / 'data/games/frlg/maps/source-candidate' +CANDIDATE = ROOT / 'data/games/frlg/maps/runtime' SCOPE = CANDIDATE.parent / 'pokeguy-map-scope.json' +MANIFEST = ROOT / 'data/maps/runtime-manifest.json' class FullImportAuditTest(unittest.TestCase): - def test_checked_full_catalog_has_fixed_links_and_visible_gaps(self): - report = audit(CANDIDATE, scope=SCOPE) - self.assertEqual(report['map_count'], 140) + def test_checked_candidates_have_fixed_links_and_visible_gaps(self): + report = audit(CANDIDATE, scope=SCOPE, manifest=MANIFEST) + self.assertEqual(report['map_count'], 95) + self.assertEqual(report['verified_map_count'], 57) self.assertEqual(report['excluded_map_count'], 285) self.assertEqual(report['source_revision'], COMMIT) self.assertEqual(report['totals']['dynamic_warps'], 0) self.assertEqual(report['totals']['unlinked_warps'], 0) - self.assertEqual(report['totals']['scope_boundary_warps'], 103) + self.assertEqual(report['totals']['scope_boundary_warps'], 59) self.assertEqual(report['totals']['scope_boundary_connections'], 2) + # Candidate warps into reviewed maps built without that neighbor. + self.assertEqual(report['totals']['pending_relink_warps'], 31) self.assertEqual(report['totals']['unknown_tiles'], 0) self.assertEqual(report['totals']['unresolved_pickups'], 79) - self.assertEqual(report['totals']['unapplied_story_patches'], 1) - self.assertEqual(report['elevation_grids_retained'], 14) - self.assertEqual(report['elevation_grids_omitted'], 126) + self.assertEqual(report['totals']['unapplied_story_patches'], 0) + self.assertEqual(report['elevation_grids_retained'], 11) + self.assertEqual(report['elevation_grids_omitted'], 84) self.assertFalse(report['schema_checked']) + def test_verified_maps_outside_scope_need_their_status(self): + with self.assertRaisesRegex(ValueError, 'do not match the declared map scope'): + audit(CANDIDATE, scope=SCOPE) + def test_missing_destinations_require_an_explicit_scope(self): with self.assertRaisesRegex(ValueError, 'missing fixed warp destination'): audit(CANDIDATE) @@ -44,7 +52,7 @@ def test_required_reward_and_recovery_rooms_survive_pruning(self): self.assertTrue((CANDIDATE / (name + '.json')).is_file()) def test_candidate_rejects_unresolved_tiles(self): - source = json.loads((CANDIDATE / 'PalletTown.json').read_text()) + source = json.loads((CANDIDATE / 'Route11.json').read_text()) changed = copy.deepcopy(source) changed['unresolved_tiles'] = {'MB_UNKNOWN_TEST': [[1, 1]]} with tempfile.TemporaryDirectory() as directory: @@ -53,7 +61,7 @@ def test_candidate_rejects_unresolved_tiles(self): audit(directory) def test_candidate_rejects_unmapped_spaces(self): - source = json.loads((CANDIDATE / 'PalletTown.json').read_text()) + source = json.loads((CANDIDATE / 'Route11.json').read_text()) changed = copy.deepcopy(source) changed['tiles'][1] = changed['tiles'][1][:1] + ' ' + changed['tiles'][1][2:] with tempfile.TemporaryDirectory() as directory: diff --git a/src/pokesim/maps/test_frlg_map_set.py b/src/pokesim/maps/test_frlg_map_set.py new file mode 100644 index 0000000..aecb544 --- /dev/null +++ b/src/pokesim/maps/test_frlg_map_set.py @@ -0,0 +1,99 @@ +"""FRLG map set: status records, candidate sync, promotion and link rules.""" + +import copy +import json +from pathlib import Path +import tempfile +import unittest + +from . import frlg_map_set as map_set +from . import runtime_map_pack as pack + + +class MapSetTest(unittest.TestCase): + def setUp(self): + self.manifest = map_set.read_manifest() + + def entry(self, manifest, name): + return next(e for e in manifest['games']['frlg']['maps'] if e['name'] == name) + + def test_every_frlg_map_has_one_file_and_a_status(self): + status = map_set.statuses(self.manifest) + files = {p.stem for p in (map_set.ROOT / map_set.DIRECTORY).glob('*.json')} + self.assertEqual(set(status), files) + self.assertFalse((map_set.ROOT / 'data/games/frlg/maps/source-candidate').exists()) + self.assertEqual(list(status.values()).count('verified'), 57) + self.assertEqual(list(status.values()).count('candidate'), 95) + + def test_centers_and_elevators_are_scripted_not_candidates(self): + status = map_set.statuses(self.manifest) + excluded = map_set.read_excluded(status) + for name in ('CeladonCity_PokemonCenter_1F', 'RocketHideout_Elevator', 'SilphCo_Elevator', + 'CeladonCity_DepartmentStore_Elevator', 'SaffronCity_PokemonCenter_1F'): + with self.subTest(map=name): + self.assertNotIn(name, status) + self.assertEqual(excluded[name], 'scripted-in-autostory') + # Verified before the decision; kept with their status. + self.assertEqual(status['PewterCity_PokemonCenter_1F'], 'verified') + self.assertEqual(status['IndigoPlateau_PokemonCenter_1F'], 'candidate') + + def test_candidate_entries_match_their_files(self): + manifest = copy.deepcopy(self.manifest) + self.assertEqual(map_set.sync_candidates(manifest), []) + self.assertEqual(manifest, self.manifest) + + def test_sync_never_rewrites_verified_entries(self): + manifest = copy.deepcopy(self.manifest) + self.entry(manifest, 'Route3')['sha256'] = 'stale' + self.assertEqual(map_set.sync_candidates(manifest), []) + self.assertEqual(self.entry(manifest, 'Route3')['sha256'], 'stale') + + def test_promote_records_the_console_run_and_keeps_bytes(self): + manifest = copy.deepcopy(self.manifest) + before = copy.deepcopy(self.entry(manifest, 'Route11')) + map_set.promote(manifest, 'Route11', 'runs/frlg/2026-11-10-00.14.md', '2026-11-10', '00.14', + 'a' * 40) + after = self.entry(manifest, 'Route11') + self.assertEqual(after['status'], 'verified') + self.assertEqual(after['verified'], dict(basis='console-run', run='runs/frlg/2026-11-10-00.14.md', + date='2026-11-10', checkpoint='00.14', consumer_revision='a' * 40)) + self.assertEqual({k: v for k, v in after.items() if k not in ('status', 'verified')}, + {k: v for k, v in before.items() if k != 'status'}) + self.assertEqual(map_set.statuses(manifest)['Route11'], 'verified') + with self.assertRaisesRegex(ValueError, 'already verified'): + map_set.promote(manifest, 'Route11', 'r', '2026-11-10', '00.14') + + def test_invalid_status_records_fail(self): + for change, message in ((lambda e: e.update(status='approved'), 'status must be'), + (lambda e: e.pop('verified'), 'needs a verified record'), + (lambda e: e['verified'].update(basis='hunch'), 'unknown verified basis'), + (lambda e: e.update(verified=dict(basis='console-run', run='r', date='11/10', + checkpoint='00.14')), 'YYYY-MM-DD')): + manifest = copy.deepcopy(self.manifest) + change(self.entry(manifest, 'Route3')) + with self.subTest(message=message), self.assertRaisesRegex(ValueError, message): + map_set.statuses(manifest) + manifest = copy.deepcopy(self.manifest) + self.entry(manifest, 'Route11')['verified'] = self.entry(manifest, 'Route3')['verified'] + with self.assertRaisesRegex(ValueError, 'candidate has no verified record'): + map_set.statuses(manifest) + + def test_link_rules_allow_only_boundaries_and_pending_relinks(self): + maps = {e['name']: pack.load(pack.ROOT / e['file']) for e in self.manifest['games']['frlg']['maps']} + status = map_set.statuses(self.manifest) + excluded = map_set.read_excluded(maps) + boundary, pending, errors = map_set.link_gaps(maps, status, excluded) + self.assertEqual((len(boundary), len(pending), errors), (61, 31, [])) + self.assertIn(('ViridianCity_Gym', 'ViridianCity', 'warp_2'), pending) + # A verified map may not depend on a missing point, even in a candidate. + broken = copy.deepcopy(maps) + broken['ViridianCity']['warps'][0].update(to_map='Route11', to_point='warp_99') + self.assertEqual(len(map_set.link_gaps(broken, status, excluded)[2]), 1) + # Excluded only counts as a boundary while the map is absent. + broken = copy.deepcopy(maps) + del broken['Route11'] + self.assertTrue(map_set.link_gaps(broken, status, excluded)[2]) + + +if __name__ == '__main__': + unittest.main() diff --git a/src/pokesim/maps/test_item_identity.py b/src/pokesim/maps/test_item_identity.py index 74db63b..f591116 100644 --- a/src/pokesim/maps/test_item_identity.py +++ b/src/pokesim/maps/test_item_identity.py @@ -22,6 +22,9 @@ def test_catalog_pin_digest_and_all_existing_item_ball_records(self): counts = {'frlg': [0, 0], 'bdsp': [0, 0]} for game, pack in audit()['games'].items(): for entry in pack['maps']: + if entry.get('status') == 'candidate': + # Candidate pickup gaps are counted by frlg_import_audit. + continue data = load(ROOT / entry['file']) original = copy.deepcopy(data) enriched = identity.enrich_map(data, game) diff --git a/src/pokesim/maps/test_runtime_map_pack.py b/src/pokesim/maps/test_runtime_map_pack.py index b6a0dfb..d94651d 100644 --- a/src/pokesim/maps/test_runtime_map_pack.py +++ b/src/pokesim/maps/test_runtime_map_pack.py @@ -15,7 +15,7 @@ class PackTest(unittest.TestCase): def test_inventory_checksums_geometry_and_graph(self): manifest = pack.audit() self.assertEqual({game: len(data['maps']) for game, data in manifest['games'].items()}, - {'frlg': 57, 'bdsp': 22}) + {'frlg': 152, 'bdsp': 22}) for game, data in manifest['games'].items(): for entry in data['maps']: raw = pack.load(pack.ROOT / entry['file']) diff --git a/src/pokesim/maps/test_runtime_map_publication.py b/src/pokesim/maps/test_runtime_map_publication.py index 93e5e13..e9af6e6 100644 --- a/src/pokesim/maps/test_runtime_map_publication.py +++ b/src/pokesim/maps/test_runtime_map_publication.py @@ -70,8 +70,12 @@ def test_all_published_values_match_reviewed_v1_baseline_and_stable_formatter(se self.assertEqual(set(baseline['games']), set(manifest['games'])) count = 0 for game, pack in manifest['games'].items(): - self.assertEqual(set(baseline['games'][game]), {e['name'] for e in pack['maps']}) - for entry in pack['maps']: + # The v1 baseline covers the approved legacy pack. FRLG maps added as candidates + # stay generator bytes (frlg_decomp_map_builder --check), also after promotion. + reviewed = [e for e in pack['maps'] + if 'status' not in e or e.get('verified', {}).get('basis') == 'approved-runtime-pack'] + self.assertEqual(set(baseline['games'][game]), {e['name'] for e in reviewed}) + for entry in reviewed: with self.subTest(game=game, map=entry['name']): raw = (ROOT / entry['file']).read_text() data = json.loads(raw)