Rung 10 spent five and a half hours in Pewter City with the objective two doors away, and the fly kept ending up inside the museum, where GO OBJECTIVE, GO SHOP and GO HEAL were all off the pad: a map with no row in the graph has no neighbours, so next_hop answers nothing and area_of answers nothing. Named as a residual by the previous review and worked here. Both ids come from the cartridge's own warp table, surveyed from the rung-10 checkpoint rather than counted: Pewter City names 0x34 at (14, 7) and at (19, 5), which are the museum's two doors, and 0x34 names 0x35 at (7, 7), which is the staircase. The upper floor has no area, for the same reason a bedroom has none -- no front door of its own -- and the road out of it is the staircase, which is what the fly needs there.
90 lines
4 KiB
Rust
90 lines
4 KiB
Rust
//! Kanto's map ids (`constants/map_constants.asm` at [`super::symbols::POKERED_COMMIT`]).
|
|
//!
|
|
//! One module for the ids, because three places need them and a second copy of a number is how a
|
|
//! wrong one survives: the ladder's rung conditions and rung places ([`super::RUNGS`],
|
|
//! [`super::rung_place`]), the macro layer's geography ([`super::macros::geography`]) and the
|
|
//! tests.
|
|
//!
|
|
//! The decomp numbers the nine towns and cities, Indigo Plateau, Saffron, one unused id and then
|
|
//! `ROUTE_1` through `ROUTE_25` as `$00`..`$24`; `REDS_HOUSE_1F` at `$25` begins the interiors and
|
|
//! they run in the order the decomp lists them. Every id below is that ordering counted out from
|
|
//! an anchor `docs/design/ladder.md` verified against the decomp -- `VIRIDIAN_FOREST` `$33`,
|
|
//! `MT_MOON_1F` `$3b`, `ROCK_TUNNEL_1F` `$52`, `INDIGO_PLATEAU_LOBBY` `$ae` -- and
|
|
//! [`super::tests`] pins those four so that a mis-counted interior cannot land silently.
|
|
//!
|
|
//! **2026-09-17, section 13's errands.** Five more interiors, each one counted out *between* two
|
|
//! ids this module already pins, which is the only way a mart or a centre id can be wrong without
|
|
//! a test noticing: `VIRIDIAN_POKECENTER` is the id immediately before `VIRIDIAN_MART` `$2a`;
|
|
//! `PEWTER_MART` `$38` and `PEWTER_POKECENTER` `$3a` sit in the five ids between `PEWTER_GYM`
|
|
//! `$36` and `MT_MOON_1F` `$3b`; `CERULEAN_POKECENTER` `$40` and `CERULEAN_MART` `$43` sit around
|
|
//! `CERULEAN_GYM` `$41`. [`super::tests`] pins each against its neighbour rather than on its own.
|
|
//!
|
|
//! **2026-09-22, the rung-10 museum.** `PEWTER_MUSEUM_1F` `$34` and `PEWTER_MUSEUM_2F` `$35` are
|
|
//! the two ids between `VIRIDIAN_FOREST` `$33` and `PEWTER_GYM` `$36`, and both are confirmed by
|
|
//! the cartridge rather than by counting: Pewter City's warp table names `$34` at (14, 7) and at
|
|
//! (19, 5) -- the museum's two doors -- and `$34`'s own warp at (7, 7) names `$35`, which is the
|
|
//! staircase. Surveyed from the release container's rung-10 checkpoint
|
|
//! (`infra/docs/macros-traps.md`, 2026-09-22).
|
|
|
|
// Outdoors: `$00`..`$24`.
|
|
pub const PALLET_TOWN: u8 = 0x00;
|
|
pub const VIRIDIAN_CITY: u8 = 0x01;
|
|
pub const PEWTER_CITY: u8 = 0x02;
|
|
pub const CERULEAN_CITY: u8 = 0x03;
|
|
pub const LAVENDER_TOWN: u8 = 0x04;
|
|
pub const VERMILION_CITY: u8 = 0x05;
|
|
pub const CELADON_CITY: u8 = 0x06;
|
|
pub const FUCHSIA_CITY: u8 = 0x07;
|
|
pub const CINNABAR_ISLAND: u8 = 0x08;
|
|
pub const INDIGO_PLATEAU: u8 = 0x09;
|
|
pub const SAFFRON_CITY: u8 = 0x0a;
|
|
pub const ROUTE_1: u8 = 0x0c;
|
|
pub const ROUTE_2: u8 = 0x0d;
|
|
pub const ROUTE_3: u8 = 0x0e;
|
|
pub const ROUTE_4: u8 = 0x0f;
|
|
pub const ROUTE_5: u8 = 0x10;
|
|
pub const ROUTE_6: u8 = 0x11;
|
|
pub const ROUTE_7: u8 = 0x12;
|
|
pub const ROUTE_8: u8 = 0x13;
|
|
pub const ROUTE_9: u8 = 0x14;
|
|
pub const ROUTE_10: u8 = 0x15;
|
|
pub const ROUTE_11: u8 = 0x16;
|
|
pub const ROUTE_12: u8 = 0x17;
|
|
pub const ROUTE_13: u8 = 0x18;
|
|
pub const ROUTE_14: u8 = 0x19;
|
|
pub const ROUTE_15: u8 = 0x1a;
|
|
pub const ROUTE_16: u8 = 0x1b;
|
|
pub const ROUTE_17: u8 = 0x1c;
|
|
pub const ROUTE_18: u8 = 0x1d;
|
|
pub const ROUTE_19: u8 = 0x1e;
|
|
pub const ROUTE_20: u8 = 0x1f;
|
|
pub const ROUTE_21: u8 = 0x20;
|
|
pub const ROUTE_22: u8 = 0x21;
|
|
pub const ROUTE_23: u8 = 0x22;
|
|
pub const ROUTE_24: u8 = 0x23;
|
|
pub const ROUTE_25: u8 = 0x24;
|
|
|
|
// Interiors: `$25` onward.
|
|
pub const REDS_HOUSE_1F: u8 = 0x25;
|
|
pub const REDS_HOUSE_2F: u8 = 0x26;
|
|
pub const BLUES_HOUSE: u8 = 0x27;
|
|
pub const OAKS_LAB: u8 = 0x28;
|
|
pub const VIRIDIAN_POKECENTER: u8 = 0x29;
|
|
pub const VIRIDIAN_MART: u8 = 0x2a;
|
|
pub const VIRIDIAN_GYM: u8 = 0x2d;
|
|
pub const VIRIDIAN_FOREST_NORTH_GATE: u8 = 0x2f;
|
|
pub const VIRIDIAN_FOREST_SOUTH_GATE: u8 = 0x32;
|
|
pub const VIRIDIAN_FOREST: u8 = 0x33;
|
|
pub const PEWTER_MUSEUM_1F: u8 = 0x34;
|
|
pub const PEWTER_MUSEUM_2F: u8 = 0x35;
|
|
pub const PEWTER_GYM: u8 = 0x36;
|
|
pub const PEWTER_MART: u8 = 0x38;
|
|
pub const PEWTER_POKECENTER: u8 = 0x3a;
|
|
pub const MT_MOON_1F: u8 = 0x3b;
|
|
pub const MT_MOON_B1F: u8 = 0x3c;
|
|
pub const MT_MOON_B2F: u8 = 0x3d;
|
|
pub const CERULEAN_POKECENTER: u8 = 0x40;
|
|
pub const CERULEAN_GYM: u8 = 0x41;
|
|
pub const CERULEAN_MART: u8 = 0x43;
|
|
pub const ROCK_TUNNEL_1F: u8 = 0x52;
|
|
pub const INDIGO_PLATEAU_LOBBY: u8 = 0xae;
|