-- Voxel world mode: the shape PROFILE -- hand-authored pins over the -- automatic structure detector, the way a 3dSen game profile pins a -- graphic to a geometry type. -- -- Hand-authored by this mod, and read only from here: unlike the tables the -- ROM extractor writes into the player's own cache, nothing below is -- extracted, derived or copied from the ROM. -- Nothing here reaches gameplay, collision or scripts; an entry can only -- ever change how a tile LOOKS in voxel mode. -- -- Most of the world needs no entry. The runtime detects structures on its -- own (src/render/voxel/Structures.lua): it flood-fills each connected -- drawn thing, voxelizes small props per pixel at their real drawn height -- with transparency (a 2-row plant is a 16px-tall silhouette, not a box), -- and raises everything else as a volume whose height is measured from the -- drawing itself -- repeat-aware, so a 6-row house is 48px while a 40-row -- border forest is rows of 16px trees, not a monolith. -- -- Listing a tile here BYPASSES that detection: the tile takes the class's -- height and art mode, always. Use it where the detector reads art wrong, -- or from a mod to pin its own tiles. Resolution order per tile: -- -- 1. a group listed under tilesets[] below (this profile) -- 2. the tile sits in a water cell -> "water" -- 3. the tile sits in a WALKABLE cell -> "ground" -- 4. tile-level fallback: the map's water set -> "water", its walkable -- list -> "ground", anything left over -> "wall" -- -- Rules 2-3 work at CELL granularity (16x16, the walk grid) because that -- is the granularity collision actually has: the engine judges a cell by -- its bottom-left tile alone, so the other three tiles of a cell carry no -- collision meaning -- flowers and grass tufts sit in walkable cells and -- must stay flat ground even though no walkable list names them. -- -- Classes (heights in world pixels; a map cell is 16x16): -- ground / water / void flat; water recesses so shorelines show a lip -- ledge / roof / bed box with the art on its TOP face; partial side -- faces crop the art (a 6px ledge face is the -- bottom of the lip drawing; a bed is its -- mattress drawn from above, lying low) -- wall / tree / fence / sign / counter / table / desk -- box whose SOUTH face folds the 2D artwork -- upright, 8px band by band; authored boxes fold -- every face and wear their top row's art on top. -- A counter is half a cell -- one band, so its -- drawn front panel stands and its top stays on top -- stair_e / stair_w real steps rising toward the named side, the -- full cell deep, treads and slices textured -- from the drawn staircase -- stair_down_e / _down_w a sunken stairwell: the cell opens into a -- hole with steps descending toward the named -- side -- stairs that lead DOWN a floor -- relief a prop drawn from above (a console on the -- floor): the drawing stays flat and the -- pixels inside its black outline extrude a -- few voxels, art on top -- bookcase a free-standing shelf drawn tall: each rank -- collapses onto a one-cell-deep box at its -- full drawn height; back rows become hidden -- floor, and an unpinnable trim row above -- becomes the cap. Its FRONT carries the -- measured pane relief -- every non-black -- region the drawing seals behind its own -- black frame sinks one voxel, the same rule -- lib/Buildings.lua recesses a facade with, -- so the books stand in the shelf instead of -- being painted on it. A tileset that -- borrows the collapse for something that is -- not a shelf says `bookcase_relief = false` -- cylinder / canopy round scenery (tree canopies): a voxel hull -- / stump cut from the art's own darkest-pixel outline, -- round in depth -- one 16px cell, a 2x2-cell -- group, or with the drawn top read as a cut face -- can that hull cut at both ends, hollowed and -- tapered: an OPEN bin standing on a floor -- (Vermilion Gym's trash cans). The drawn mouth -- ellipse projects across the round top and down -- the well, the drawn base ellipse is ground -- contact rather than body, the top rows keep a -- wall at each end of their chord and lose the -- middle, and the plan narrows toward the floor -- (can_cap / can_base in art rows; can_height, -- can_well, can_taper in voxels) -- planter the same hull for a round drawing stacked TWO -- cells high on ONE cell of plot (the Centers' -- potted plants): it stands in the lower cell and -- the upper cell is the height it overhangs -- billboard / prop a prop drawn face-on: a standing per-pixel -- cutout, black-outline segmented; drawn above -- a pinned box it stands ON that box (a -- monitor on its desk). prop is a second pool -- so two touching cutouts stay separate -- bike the same cutout at TWO voxels: a vehicle drawn -- side-on is a LINE drawing, and the air inside -- its frame is what makes it read as one -- any -- thicker and neighbouring strokes close those -- gaps with their own side faces -- -- A tileset entry may also carry `prop_ground` (not a class): a map of -- prop tile id -> ground tile id naming the tile painted under that -- pinned prop, overriding the flat-neighbour vote -- the cuttable bush -- stands on the grass Cut leaves behind, whatever borders it. -- -- And `prop_bg` (not a class either): which GB shades count as BACKGROUND -- when a pinned per-pixel prop is cut out, for the drawings whose own body -- reaches the edge of their bounding box and so vote themselves away. -- Keyed by tile, because two props sharing an atlas can want opposite -- answers on the same shade. -- -- And it may carry `figures` (not a class either): hand-drawn pixel masks -- that lift a FIGURE PAINTED INTO furniture off it and stand it up as a -- standee, leaving the furniture its own geometry. A pin resolves a -- whole 8x8 tile, so it can never separate two things that share one -- -- and nothing automatic can either when the figure has no background -- margin to flood from and wears the same shades as what it sits on. -- The Pokemon Center's seated man is the case; see POKECENTER below for -- the format. A figure entry that states a `depth` is not a person and -- stands as a per-pixel SOLID instead of a flat card -- the Marts' cash -- register, a machine set down on a counter (`thin` gives its top rows a -- thickness of their own, for the part of a drawing that is paper). -- -- And `mounted` (not a class either): the same authored-mask escape for a -- thing painted INTO a WALL band, stood proud of the panel as a thin -- per-pixel slab instead of standing on its feet as a sprite card. Where -- a figure is a person and reads face-on from any angle, a mounted object -- is an object drawn side-on and holds the wall's own plane; and it keeps -- its DRAWN elevation, so a thing hung clear of the floor stays hung. -- The Bike Shop's two wall bicycles are the case -- and the mask there is -- measured rather than drawn, by flooding the panel tile's own stripe out -- from behind them; see CLUB below. -- -- Whole BUILDINGS are not tile pins -- one drawing packs a roof seen from -- above, a facade seen face-on and sloped ends as diagonal silhouettes, -- and no single class covers that. They live in the `buildings` list at -- the bottom of this file, as a band table over the drawing's rows. return { version = 1, -- class -> height in world pixels heights = { ground = 0, water = -2, void = 0, ledge = 6, fence = 10, sign = 12, wall = 16, -- masonry drawn two courses tall (the Indigo Plateau's rim, the -- badge-check gates): as tall as a statue on its plinth cliff = 32, tree = 16, roof = 28, bed = 7, stool = 8, counter = 8, -- the raised back band of low seating (the Center couch's back and -- arm strip): half again the 8px seat it rises over backrest = 12, table = 12, desk = 24, prop = 16, cutout = 16, -- a vehicle drawn side-on (the Bike Shop's bicycles): a standee like -- the pools above, two voxels thin so the air inside its frame stays -- air (see Structures' PINNED_DEPTH) bike = 16, -- a round drawing stacked two cells high on one cell of plot (the -- Centers' potted plants): 32px of hull standing in its lower cell planter = 32, relief = 3, bookcase = 32, stair_e = 16, stair_w = 16, stair_down_e = 16, stair_down_w = 16, }, -- Only tiles the detector must not touch need listing. Tile ids are -- indices into the tileset's own 8x8 atlas. tilesets = { OVERWORLD = { -- the hop-down edges named by data.field.ledges' ledgeTile: their -- art is a ground lip seen from above, which the detector would -- otherwise raise as a wall -- $34 is the cliff slope's FOOT, and it also punctuates the ledge -- rows: the hop-down runs are set into the cliff face and this -- tile is the pillar between segments. It was `wall` with the -- rest of the slope chain, which stood those pillars 16px beside -- a 6px lip -- the ledge line came out interrupted by blocks -- nearly three times its height. At ledge height the run reads -- as one continuous lip, and the mound loses nothing: its foot -- row simply reads as the talus it is drawn as. ledge = { 13, 29, 39, 52, 54, 55 }, -- trees are drawn ROUND -- the lone canopy (42/43/58/59) and the -- border tree wall (64/65/80/81, blockset $0F). Boxes and per-pixel -- cutouts both read wrong for them; the cylinder archetype carves -- one voxel ball per 16x16 cell from the canopy's darkest-pixel -- outline, round in depth, so tree rows become rows of real canopies cylinder = { 42, 43, 58, 59, 64, 65, 80, 81 }, -- the town sign (blockset 8's SE cell): a standing per-pixel slab -- 2 voxels thin, transparency respected -- never a solid box signpost = { 70, 71, 86, 87 }, -- the fence posts drawn in VERTICAL runs (14 the post tops, 85 -- the bottoms -- across all 222 maps the two tiles pair only in -- this one cell). The detector already turns the HORIZONTAL runs -- (tile 57) into per-post standees, but a vertical run of repeated -- cells trips its scenery guard and fell to the volume path as a -- fence-textured tower. `post` extracts each cell alone, so these -- render as the same thin posts, marching north post = { 14, 85 }, -- the cliff-mound's dark east slope and its NE corner ($24 the -- slope column, $02 the corner). Their drawn runs span the whole -- mound drawing, so the detector raised them to 32px towers -- -- the rock pillar beside Diglett's Cave -- and the doorway -- column, which adopts its REGION's height, inherited the same 32 -- and put the cave entrance a block above the mound around it. -- Pinned to one 16px course they match the plateau body, and the -- doorway drops with them. ($34, the slope's foot, is `ledge` -- instead -- see there.) wall = { 2, 36 }, -- the cuttable bush ($2D/$2E/$3D/$3E, the four tiles Cut deletes -- -- across the whole tileset they appear only in the five -- cut-tree blocks): a standing per-pixel cutout 5 voxels deep, -- black-outline segmented with the pixels the outline encloses -- kept, its drawn grass dither flooding away as background prop = { 45, 46, 61, 62 }, -- the ground painted under those pinned props, by the prop tile's -- own id: the bush stands on plain grass ($2C) -- the very tile -- Cut leaves behind (field.cutTreeSwaps' after-blocks) -- rather -- than whatever flat tile its neighbours vote prop_ground = { [45] = 44, [46] = 44, [61] = 44, [62] = 44 }, }, -- The badge gyms and Bruno's room (one tileset): the bird statues -- that flank every gym's aisles, and Lt. Surge's trash cans. A -- statue is one cell of figure ($02/$38/$12/$13) drawn over one -- cell of plinth ($22/$23/$32/$33); the trash can is one cell -- ($0B/$0C/$1B/$1C, blocks 38/39 only). Across the whole blockset -- none of these tiles appears anywhere else. The plinth stays a -- SOLID 16px block; the figure stands ON it as a per-pixel cutout -- 5 voxels deep (the thin `prop` pool), collapsing to the plinth's -- single cell of footprint (Structures' wall-support rule); the -- can is the same 5-voxel cutout at floor level. Both are -- black-outline segmented -- backgrounds flood away, the pixels -- the outline encloses stay. Everything stands on the gyms' main -- floor tile ($11), which is also Bruno's floor. -- (The boulders, $07/$08/$17/$18, are pinned round -- see the -- `cylinder` pool below.) -- -- The rest of the tileset is the ten rooms' own furniture: the six -- badge gyms it serves (Pewter, Cerulean, Vermilion, Celadon, -- Fuchsia, Viridian) plus Bruno's and Lorelei's rooms, the -- Champion's room and the Hall of Fame. (Saffron's and Cinnabar's -- gyms are FACILITY, Agatha's room is CEMETERY and Lance's is DOJO, -- so none of them takes a pin from here.) Same failure as every -- other interior: the detector reads the black interior walls as -- volumes measured off the whole drawn run, so Vermilion's side -- walls and Viridian's north-south maze arms came out as 48px fins -- with their black fill VOIDED flat between them, and the Hall of -- Fame's recording machine merged into the wall band as a 32px slab -- whose feet had been flattened away by the walkable-cell rule. GYM = { -- The wall band is ONE 16px face, whatever the artist drew into -- it. The plinths (34/35/50/51 -- 50 is the $32 water-fallback -- trap and would recess into a pond lip); the room's own band -- ($05 white course, $10 trim, $06 the doorway's dark head); the -- BLACK interior walls every gym is partitioned with -- $0F the -- fill (near-black, so the void rule flattens it unless it is -- AUTHORED, which is the whole reason it is listed), $24/$26/$27 -- the top edge and its corners, $25/$35 the sides, $42/$3E the -- west and east end caps of a horizontal arm and $10 again as its -- lit south face. Then the things drawn built INTO those walls, -- exactly like the Center's healing consoles: Vermilion's target -- band ($44-$47 with $05 between, over the $54/$56/$57 stripe), -- the barred gate ($20/$21/$30/$31 -- Lorelei's north door, and -- the barrier VermilionGymScript paints in until both switches -- are thrown), and Vermilion's corner switchboard ($29/$2A over -- $0D/$0E and $1D/$1E), which is drawn 32px tall and so reads as -- two stacked courses of the same band. wall = { 34, 35, 50, 51, 5, 16, 15, 36, 37, 38, 39, 53, 62, 66, 68, 69, 70, 71, 84, 86, 87, 32, 33, 48, 49, 13, 14, 29, 30, 41, 42 }, -- Fuchsia's invisible maze walls ($1F) are deliberately NOT here. -- The artist drew them as the floor with its stripes broken: on -- the GB they are invisible, and the puzzle IS walking into them. -- Raising them to a course would read better as a room and give -- the player something to bump into -- and would also hand them -- the solution, turning a maze into a corridor. A shape is -- purely presentational and this file's job is to reproduce what -- was drawn, so the drawn answer wins: left to the derived path, -- $1F stays the floor it is painted as and the gym plays exactly -- as the flat game does. -- Cerulean's pools are the ONE place the $14 water-fallback trap -- is right: $14 really is the gym's water, so it is left to fall -- through to the engine's water set and recess. Its north coping -- ($04, the grated lip) is drawn in the TOP half of a water cell, -- so the cell rule dragged it down to the water line with it; -- pinned flat it stays the poolside at floor level and the water -- shows a real lip. The pool's south lip ($01) needs nothing -- -- it is always the top half of a walkable FLOOR cell, so rule 3 -- already lays it flat. Lorelei's room uses the same pair for -- the paved plaza that stands out of her water. -- the entrance mat every gym lays inside its door ($06 over $16, -- 28 placements and nowhere else): drawn from straight above, so -- it lies FLAT. $06 was in the wall band above, which stood the -- mat's top half up as a 16px box in the doorway -- the cell rule -- could not save it, because a pin outranks the cell. ground = { 4, 6, 22 }, -- Celadon's hedge: a round shrub, one per cell ($2C/$2D over -- $2E/$2F), 35 of them planted wall to wall. Round drawings get -- the cylinder archetype -- one voxel ball per 16x16 cell carved -- from the darkest-pixel outline -- the same treatment the -- overworld's tree canopies take, and per-CELL, so a hedge row -- becomes a row of bushes instead of one boxed monolith. -- -- The rock gyms' boulder ($07/$08 over $17/$18) is the same -- reading: one cell is one rock, drawn as a lit dome -- white -- highlight up the north-west, mid-grey body, black-and-grey -- rubble dither filling the rest -- with the FLOOR showing -- through all four corners, which is what makes a run of them -- read as a pile of separate stones rather than a wall (tile -- them and the gaps between four rocks draw a grey diamond). -- Left derived it fell to the repeat-aware scenery path, which -- extruded the whole drawing as one 16px course: Pewter's and -- Bruno's rock rows came out as square bars wearing a boulder -- texture in relief -- the extruded picture. Round-pinned, -- each cell is a hull whose plan view is its own drawn width -- profile turned in depth: a dome 16 wide and 16 tall, full -- width from the drawn shoulder down and tapering over the top -- five rows exactly where the art tapers, and the corner -- diamonds open up between them the way the drawing has them. -- It stays 16px, so nothing that stands on or beside a rock -- moves. The perimeter rows take the same model as the maze -- clusters -- one drawing, one rock, everywhere. -- Scanned: across all 222 maps these four tiles occur 87 times -- on this atlas and every one of them anchors a whole boulder -- cell (87 tile-$07 hits, 87 grid matches), in exactly two maps -- -- PEWTER_GYM's walls and rock maze, and BRUNOS_ROOM's -- clusters. DOJO shares gym.png but places none of them, so -- the pin is not copied there. cylinder = { 44, 45, 46, 47, 7, 8, 23, 24 }, -- Vermilion Gym's trash cans ($0B/$0C over $1B/$1C), the switch -- puzzle's fifteen cans plus the sixteenth beside the leader's -- platform. An open galvanised bin in the 3/4 view, and its plan is -- measured: the silhouette runs straight down both flanks for art -- rows 4-10 and is 11px wide there, so the can is 11 across -- and -- being round in plan, 11 DEEP. Above row 4 is the MOUTH seen from -- above (the drawn ring is 9x5, a circle flattened to 55%, which is -- what fixes it as a top view rather than a face-on dome); below row -- 10 is the base circle's front arc, ground contact, with the -- drawing's own $555 halo one pixel outside it as the grounding -- shadow. -- -- Left in the thin standee pool the can was a flat disc on edge -- -- fifteen coins standing in a row. Pinned a plain `cylinder` it -- revolves every drawn row, bottom arc included, and comes out a -- barrel balanced on a three-voxel stem. `can` is the hull cut at -- both ends and hollowed: the mouth projects across the round top, -- the base rows are ground rather than body, and the top can_well -- voxel rows keep a wall at each end of every chord and lose their -- middle, so the bin is open and you look down into it. -- -- can_cap and can_base are the two ellipses in art rows and come off -- the pixels. The other three do NOT, and are the numbers taste -- moves: -- -- can_height 9 Un-projected strictly the drawing states a squat -- drum barely two rows of straight side tall, -- because the GB artist spent most of a 16px cell -- on the opening -- but a bin is taller than it is -- wide and the flat game reads as one, the drawing -- being 14px tall beside a 16px player. The lowest -- surviving body row (art row 10: black rim, shaded -- flank, lit face) is repeated up to this, the -- plainest continuation of the material drawn. -- `heights` must follow it so anything riding a can -- lands on the rim. -- can_well 5 How far down the mouth is hollowed. The drawing -- paints an opening and cannot say how deep. -- can_taper 4 Voxels of DIAMETER the base loses -- 11 at the -- rim to 7 on the floor, stepped twice over the -- height. The drawing's base arc pulls in to 9px -- on its own, so the direction is drawn; the amount -- is not. 2 is one barely-visible step, 4 reads as -- a cone. -- -- Scanned: the four ids occur as this grid 16 times on the GYM atlas -- and only in VERMILION_GYM -- cells (1/3/5/7/9, 7), the same five -- on rows 9 and 11, and (6,1). DOJO shares gym.png and places none, -- so the pin is not copied there. The same four ids form the same -- grid on eight OTHER atlases (the Bike Shop's crates, the overworld -- roofs, the Centers' counters, ...) for 142 more hits; those are id -- collisions between tilesets, and a pin is per tileset id, so they -- are none of this entry's business. can = { 11, 12, 27, 28 }, can_cap = 9, can_base = 4, can_height = 9, can_well = 5, can_taper = 4, heights = { can = 9 }, -- The statues and Celadon's three little trees ($40/$41 canopy over -- $50/$51 trunk). A trunk is not round, so the tree cannot be a -- ball like the shrubs beside it -- it takes the thin standee pool -- every interior plant takes, which is also a pool apart from the -- cylinders it touches. prop = { 2, 56, 18, 19, 64, 65, 80, 81 }, -- The Hall of Fame's recording machine, the one piece of real -- furniture in the tileset. It is drawn 32px wide and THREE tile -- rows tall against the north band, and the detector made a mess -- of it twice over: the top two rows merged into the wall band as -- one 32px slab, and the base row -- whose cell is walkable, -- because the Hall's floor tile ($19) is its own bottom-left -- -- was flattened into the floor, so the machine stood on nothing. -- Split at the drawn seam: the plinth row ($58/$59/$5A) is a -- half-cell counter, and the console above it ($5B-$5E over -- $36/$37/$55/$5F) is a standing per-pixel billboard that rides -- the plinth's top face through the authored-box support rule. -- 8 + 16 is exactly the 24px the machine is drawn. counter = { 88, 89, 90 }, billboard = { 91, 92, 93, 94, 54, 55, 85, 95 }, -- the ground painted under each pinned prop, by the prop tile's -- own id: statues and cans stand on the gyms' main floor ($11), -- Celadon's trees on the garden's light dither ($2B) rather than -- on whatever their neighbours vote. -- (Celadon's flowerbed tile $03 is deliberately absent: the -- tileset ANIMATES it by frame rewrite, so TileShape derives the -- `flower` pin for it already -- flat ground plus a standing -- 1px cutout -- and listing it here would take that away. The -- floors need nothing either. $11/$16/$2B and Viridian's arrow -- and dot markings $3C/$3D/$3F/$4C/$4D are in the walkable list -- outright; the paved slabs the Hall of Fame is floored with and -- Lorelei's plaza is built of ($09/$0A over $19/$1A) get there -- through the CELL: only $19 is listed, but it is the cell's -- bottom-left, so rule 3 lays all four of them flat together. -- Cerulean uses the very same slab as its poolside deck, which is -- why that gym's perimeter is a deck and not a wall -- the room's -- only wall band is the one drawn course along its north edge.) prop_ground = { [2] = 17, [56] = 17, [18] = 17, [19] = 17, [11] = 17, [12] = 17, [27] = 17, [28] = 17, [64] = 43, [65] = 43, [80] = 43, [81] = 43 }, }, -- The caves: one blockset serves nineteen maps -- Mt Moon's three -- floors, Rock Tunnel's two, Seafoam Islands' five, Victory Road's -- three, Cerulean Cave's three, and Diglett's Cave with its two -- route-side stubs. -- -- THE CAVE'S VERTICAL SCHEME. A Gen 1 cave is drawn on two floor -- levels, and the game's own collision data says which is which. -- data.field.tilePairs forbids stepping between $20/$21/$2A/$41 and -- $05 on land, and between $14 and $05 while SURFING -- but nothing -- forbids $14 <-> $20. Read that back and the elevation falls out: -- the dark floor and the water are one plane, the lit floor is a -- step above both, and the rock is the room around them. -- -- h what tiles -- 0 DARK LOWER FLOOR -- the datum $20 $21 $2A -- 0 CAVE WATER, the surfable pool $14 -- 0 fall-through drop hole $2F $22 -- 0 unlit black (the void rule, no pin) $3C -- 3 Victory Road's boulder switch plate $2B $2C $2D $2E -- 6 LIT SHELF, one step up (`ledge`) $05 $29 -- 6 the stair plate down off that shelf $15 $16 -- 16 ROCK -- one band for the masses, the everything else -- faces, the caps and the ceiling mass -- 0 up 16 ladder shaft UP a floor $0A $0B $1A $1B -- 0 dn 16 ladder shaft DOWN a floor $08 $09 $18 $19 -- -- NO CAVE SURFACE SITS BELOW 0. The datum is the dark floor; the -- water is level with it (you surf off a pool straight onto the dark -- floor, which is exactly what the missing $14/$20 tile pair says); -- every other surface is above it. A cave is underground, not -- underwater, and the only class in this file that goes negative is -- `water` (-2), which exists to cut the overworld's shoreline lip. -- It is deliberately NOT used anywhere in this entry. The one thing -- that does reach below the datum is the DOWN ladder's stairwell, -- which is a hole on purpose: it is the shaft to the floor below, -- and no walkable surface is drawn in it. -- -- What the detector made of it: the rock EDGES towered. A shelf's -- side is drawn as a cap over a run of face tiles over a corner -- pair -- $04 / $31 x5 / $28 / $10 down one column -- and the volume -- builder's repeat scan anchors on the column's FRONT tile, which -- here is a one-off corner that never recurs above it. Neither the -- repeat read nor the trim rule (two identical rows directly above -- the front) fires, so the column keeps its whole extent and caps at -- MAX_ROWS: a 48px fin out of the 16px band beside it, while the -- column one tile west -- ending on $28 with two $31 above -- reads -- 16. Probed before pinning: MT_MOON_B2F tiles (5,4)-(5,11) and -- (17,8)-(17,15) at 48 with 16 either side; VICTORY_ROAD_2F -- (25,26)-(25,31); SEAFOAM_ISLANDS_B4F (22,0)-(22,7), -- (13,12)-(13,19) and (12,13)-(12,19). The same reading turns a -- column of four DIFFERENT rock tiles into 32px -- VICTORY_ROAD_1F -- (28,20)-(29,23) and (30,20)-(31,23), $02/$12 over $0C/$1C, next -- to identical rock at 16. An authored tile never reaches the -- volume builder, so pinning the rock is the whole fix: there is no -- run left to misread. CAVERN = { -- ---- 16: the rock, one band ---- -- -- Reading across the blockset: $02/$03 over $12/$13 is the -- speckled rock mass and $0C/$0D over $1C/$1D the boulder-cluster -- mass, both solid wall-to-wall fills; $10/$11 is the cobble -- course facing the south side of every lit shelf, $31 its west -- face and $17 its east; $04/$07/$28 are the caps and $25/$26 the -- inner corners where two faces meet. $0E/$0F over $1E/$1F is the -- barred rock shelf that stands alone on the dark floor -- (MT_MOON_1F, ROCK_TUNNEL_1F and twice in SEAFOAM_ISLANDS_B4F): -- one cell of face-on drawing, so one 16px face -- never a -- standee, its black surround touches all four rims and would -- segment into a solid slab. -- -- $06/$27 over $24/$01 is the CEILING MASS: a pale dithered rock -- fill with a black rim dithered along its north and south edges, -- so a run of it tiles into the grid of light blocks that walls -- off most of MT_MOON_B2F (37 cells) and stands as one lump in -- each of VICTORY_ROAD_1F/2F/3F. It is blocked in every map that -- places it ($24 is not on the walkable list) and it is NOT in the -- engine's water set, so it is rock and belongs in the band with -- the rest of the rock. The first pass read the checker as a pond -- and pinned it `water`: that recessed 612 tiles to -2 and cut -- open trenches down the middle of Mt Moon B2F -- 06w-2 27w-2 / -- 24w-2 01w-2 for ten cells straight, hard against 31w16 rock and -- the 05l06 shelf. Its unpinned reading was 48px (eight rows of -- alternating $06/$24 read as one drawing); 16 is the answer. wall = { 2, 3, 18, 19, -- $02/$03 over $12/$13, speckled mass 12, 13, 28, 29, -- $0C/$0D over $1C/$1D, boulder mass 16, 17, -- $10/$11, the shelf's south cobbles 49, 23, -- $31 west face, $17 east face 4, 7, 40, -- $04 NW cap, $07 NE cap, $28 SW cap 37, 38, -- $25/$26, the inner corners 14, 15, 30, 31, -- $0E/$0F over $1E/$1F, barred shelf 6, 39, 36, 1 }, -- $06/$27 over $24/$01, ceiling mass -- ---- 6: the lit shelf, and the stairs off it ---- -- -- $05 is the lit floor -- the shipped pin, and the step -- data.field.tilePairs encodes ($20/$21/$2A/$41 <-> $05). $29 is -- the SAME surface: the artist's shadow row where the shelf runs -- up against the rock above it. It sits in walkable cells, so -- unpinned it resolved to flat ground and cut a 6px trench along -- the north edge of every lit room (`29g00` with `05l06` one tile -- south, all the way across MT_MOON_B2F). -- -- $15/$16 is the STAIR down off that shelf, and the elevation it -- spans is 6px, not 16. Its art is four treads seen from above, -- each a light tread over a black riser line, stacked NORTH-SOUTH: -- every one of the 54 stair cells in the tileset has the lit floor -- $05 to its NORTH and the low ground to its SOUTH (dark floor x35, -- water x14, lit floor x5 where two flights meet), so the flight -- climbs NORTHWARD, one cell deep, 0 -> 6. -- -- It is NOT pinned `stair_e`/`stair_w`, and that is deliberate. -- Those classes build a flight that marches along X -- 16px tall, -- rising toward the named side -- so either of them here would -- throw a 16px staircase sideways across a 6px north-south step, -- blocking the passage it is supposed to open and climbing at -- right angles to the drawn risers. A wrong-way flight is worse -- than a flat one. `ledge` is the honest reading available: the -- stair cell joins the shelf it belongs to, wears its four treads -- on the TOP face (which is how they are drawn -- from above), and -- puts its 6px riser face at the FOOT of the flight where the -- player actually steps down onto the dark floor. See the report: -- a real sloped cave stair wants `stair_n`/`stair_s` in -- Structures.stairCell, which is an engine change, not a pin. ledge = { 5, 41, -- $05 lit floor, $29 its north shading 21, 22 }, -- $15/$16, the stair plate off it -- ---- 0: the floor plane ---- -- -- The dark lower floor, pinned rather than left derived so the -- datum this whole entry measures from is stated in it. $20 is -- the rough floor, $21 the bright checker, $2A the fine checker; -- all three are on the tileset's walkable list and all three -- already resolved here -- the pins restate the level, they do not -- move it. -- -- $14 IS THE CAVE WATER: the tileset animates by TILEANIM_WATER, -- and TileRenderer's WATER_TILE is $14 -- it is the tile that -- h-shifts to ripple. Map's water set names it too, so its cells -- are the ones Surf works on: Cerulean Cave's lake (352 + 272 -- tiles on 1F/B1F) and the Seafoam channels (304 on B3F, 816 on -- B4F). The first pass read its blocky white dither as "bright -- rubble mass" and pinned it `wall`, which stood both lakes up as -- 16px rock -- two thirds of SEAFOAM_ISLANDS_B4F was a rock slab -- you were meant to surf across. It is water, and it lies at the -- floor plane: `ground` keeps the drawn (and animated) water art -- exactly as it is and puts its surface at 0, level with the dark -- floor you step off onto, one 6px step below the lit shelf you -- cannot surf onto. NOT the `water` class -- that is -2, a -- shoreline lip for the overworld sea, and a cave pool must never -- read as a trough sunk into the floor you are walking on. -- -- $2F over $22 is Seafoam's and Victory Road's fall-through drop -- hole (Map's warpPadTiles calls $22 a "hole"). Its art is a lit -- rim over solid black and its cell is walkable -- you step on it -- and drop a floor -- so it stays flat at the floor plane; the pin -- keeps the rim out of the wall fallback. ground = { 32, 33, 42, -- $20/$21/$2A, the dark lower floor 20, -- $14, the surfable cave water 47, 34 }, -- $2F over $22, the drop hole -- ---- 0 to 16: the ladders, the caves' real staircases ---- -- -- Both ladder graphics are drawn from above as a shaft with two -- rails and rungs between them, and which one is which is not a -- guess -- it is in the warp table. Across all nineteen maps, -- every one of the 37 $08 cells warps to a LOWER floor -- (MT_MOON_1F->B1F, B1F->B2F, ROCK_TUNNEL_1F->B1F, each -- SEAFOAM_ISLANDS floor to the next one down, CERULEAN_CAVE_2F->1F -- and 1F->B1F, the Diglett's route stubs down into the cave) and -- every one of the 40 $0A cells warps to a HIGHER one (the exact -- reverse, plus MT_MOON_B1F's and ROCK_TUNNEL_1F's exits back out -- to daylight). $08 is the ladder DOWN, $0A the ladder UP: 77 -- cells, no exceptions. -- -- So they take the two classes that MOVE between floors. $0A -- becomes a rising flight -- four real steps climbing 0 -> 16, the -- height of the rock band it disappears into -- and $08 becomes an -- excavated stairwell, four steps descending below the floor into -- a dark opening. East for both: the ladder art is symmetric -- about its own centre line so the drawing does not choose a side, -- the cell's east neighbour is the closed (rock) side more often -- than its west, and the rest of this profile's staircases -- (REDS_HOUSE_1, UNDERGROUND) climb east too. The flight's treads -- land one rung apiece, which is as close to a drawn ladder as -- stepped geometry gets. -- -- All four tiles of each cell are listed, the way REDS_HOUSE_1 -- lists its flight: buildStairs anchors on the cell's TOP-LEFT -- tile ($08 / $0A) and claims the other three, but pinning them -- too keeps them out of the region flood and the door fold. stair_e = { 10, 11, 26, 27 }, -- $0A/$0B over $1A/$1B, UP stair_down_e = { 8, 9, 24, 25 }, -- $08/$09 over $18/$19, DOWN -- ---- 3: the boulder switches ---- -- -- Victory Road's four plates ($2B/$2C over $2D/$2E, on 1F, 2F and -- 3F). Round art, but NOT a round object: the Strength boulders -- themselves are overworld SPRITES, and this is the plate they get -- pushed onto -- drawn from straight above as a black ring, a -- white highlight rim and a grey disc. `cylinder` was tried here -- first, because a circle is what the overworld's round canopies -- take, and it came out wrong: the plate's own dithered background -- carries stray black pixels the darkest-outline flood cannot -- reach, so they joined the mask, inflated the top and bottom row -- spans to the full 16, and the hull rendered as a clutch of white -- shards standing where the plate should be (VICTORY_ROAD_1F cell -- 17,13). `relief` is the reading anything drawn from above -- wants: the disc stays flat and the pixels inside its black ring -- lift a few voxels, so it reads as a plate -- and the cell is -- walkable, so you step on it. relief = { 43, 44, 45, 46 }, -- Left to the derived default on purpose: $3C is solid black -- -- the unlit rock that is most of MT_MOON_B1F -- and the void rule -- flattens it (`3Cv00`). Pinning it would BREAK that, since the -- void rule skips authored tiles; a 16px black band there would -- also wall the corridors in with something the 2D art draws as -- nothing at all. $30 and $41 are on the walkable list and in -- tilePairs but no block in this tileset places either, so there -- is nothing for a pin to catch. }, -- Viridian Forest. Nearly everything drawn here is ROUND, and the -- detector was boxing all of it: the big trees came out as ragged -- mixed-height volumes (their sparse canopy-edge tiles read 0px, -- their bodies 32px), the stump rows merged into 16px crate walls -- wearing folded stump art, and the trail sign was a broken pile -- -- its $32 tile is the water-fallback trap and recessed into a pond -- lip in the middle of the woods. FOREST = { -- the hop-down edge, from data.field.tilePairs (CAVERN's entry -- above carries the same note for its own pair) ledge = { 46 }, -- the big trees: the whole 2x2-CELL drawing carves as ONE 32px -- voxel hull, so a tree is a single tall canopy instead of four -- ground-level quarter-pancakes ("cut in half", as the first -- attempt read). `canopy` pins the drawing's top-left corner -- tile ($04) as the group anchor; every other tile of the -- drawing stays `cylinder` so the group build can verify and -- claim its cells -- and so a stray partial drawing degrades to -- per-cell hulls rather than boxes canopy = { 4 }, cylinder = { 5, 6, 7, 21, 22, 23, 35, 36, 37, 38, 39, 53, 54 }, -- the stumps ($02/$03/$12/$13): a hull whose drawn top is a CUT -- FACE. The body builds from the bark rows alone, and the drawn -- ellipse of growth rings projects onto the hull's round flat -- top -- its bottom arc to the south, the way the 2D art means -- it. stump_cap is the ellipse's height in art rows stump = { 2, 3, 18, 19 }, stump_cap = 7, -- the white sparkle filler inside the tree masses: flat, not an -- invisible zero-height box ground = { 0 }, -- the trail signs: the standing thin-slab treatment every town -- sign gets ($32 pinned is also what lifts it out of the water -- trap) signpost = { 33, 34, 49, 50 }, }, -- Oak's Lab (the tileset also serves the Fighting Dojo and Lance's -- room, which use none of these tiles). The free-standing shelf -- ranks: book rows and base pinned; the shared trim tiles above -- (41/42, also the lab tables' corners) are adopted as caps by the -- bookcase builder rather than pinned. DOJO = { bookcase = { 13, 14, 29, 30 }, -- the lab tables (the starter-ball display and the north tables): -- 41/42 are also the shelf trim the bookcase builder adopts as -- caps, which its cap rule allows for authored table rows. -- Pinning stops the display frame's black corner brackets from -- auto-extracting into standing prisms, and the ball/Pokedex -- sprites ride the table's authored height. table = { 41, 42, 57, 59, 78, 79 }, -- These tables are drawn 6px tall (3px slab edge over 3px base -- -- see the lab_table entry under `buildings`), not the default -- table's 12: the override keeps the volume-built north tables -- and the band-built starter table one height, and stands the -- ball/Pokedex sprites exactly on the top face of both. heights = { table = 6 }, }, -- Red's room and the Copycat's room (one tileset). The detector reads -- this furniture as wall-height volumes -- and merges the wall-touching -- table and desk INTO the wall, towering both -- so every object here -- is pinned to the shape it depicts. REDS_HOUSE_2 = { -- the wall band with its windows stays one 16px face wall = { 0, 36, 37, 52, 53 }, -- the bed: a mattress drawn from above, half a block high bed = { 45, 46, 47, 61, 62, 63 }, -- stools: a seat-high box, seat art on top, legs on the front stool = { 2, 3, 18, 19 }, -- the long table under the windows, and the PC desk's body with -- its hutch row -- the monitor standing on it is pinned below table = { 38, 39, 41, 42, 43, 44, 50, 51, 58, 59, 60, 66, 67 }, -- standing per-pixel props, black-outline segmented. The PC -- (64/65 monitor top, 32/33 monitor bottom + keyboard) is drawn -- above the desk's body, so it stands ON the desk; the TV stands -- on the floor billboard = { 6, 7, 22, 23, 32, 33, 64, 65 }, -- the potted plant: mostly silhouette, so it takes the THIN -- standee pool prop = { 8, 9, 24, 25, 68, 69, 70, 71 }, -- the small potted plant on the table: a paper-thin profile -- cutout standing on the tabletop, its leaf crown (in 40) included cutout = { 40, 54, 55, 56, 57 }, -- the game console in front of the TV is drawn from above: it -- lies flat and extrudes a few voxels inside its outline relief = { 14, 15, 30, 31 }, -- the staircase leads DOWN to 1F: a sunken stairwell. The player -- enters at the east lip and the flight descends westward, the way -- the drawn railing slopes (high at the east, low at the west) stair_down_w = { 10, 11, 26, 27 }, }, -- Red's and the Copycat's ground floor (one tileset, same atlas as -- the floor above). Bookcases, dining table with its flower pot, -- stools, the TV on the floor, and the staircase up. REDS_HOUSE_1 = { -- the `house_stool` template below stands 5 voxels and the -- `reds_house_table` model 6 (both the drawn elevation): whoever -- sits on a stool cell and whatever object sprite stands on the -- table rides these heights, not the 8/12px class defaults heights = { stool = 5, table = 6 }, wall = { 0, 36, 37, 52, 53 }, stool = { 2, 3, 18, 19 }, -- the dining table (38-44/58-60); its top row also caps the -- bookcases below table = { 38, 39, 41, 42, 43, 44, 58, 59, 60 }, -- the bookcase bodies: tall shelf boxes; their drawn top-edge row -- (38/41, pinned table above) becomes their top face desk = { 34, 35, 48, 49, 50, 51 }, -- the TV on the floor billboard = { 6, 7, 22, 23 }, -- the small potted plant on the table: a paper-thin profile -- cutout standing on the tabletop, its leaf crown (in 40) included cutout = { 40, 54, 55, 56, 57 }, -- the staircase leads UP to 2F: a rising flight climbing east stair_e = { 12, 13, 28, 29 }, -- the front-door mat: its collision tile is $14, which the engine's -- stale-cache fallback counts as water in every tileset, so the rug -- would recess into a pond lip. It is a flat rug on the floor ground = { 4, 20 }, }, -- The generic town house (Blue's, Daisy at her table, and eighteen -- more homes; the schoolhouse and the trashed house reuse it too). -- Same failure as Red's rooms: the detector reads the furniture as -- wall-height volumes and towers the table, so every object is -- pinned to the shape it depicts. HOUSE = { -- the `house_stool` template below stands 5 voxels and the -- `house_table` model 6 (both the drawn elevation): whoever sits -- on a stool cell -- Daisy at her table -- and whatever object -- sprite stands on a table cell rides these heights, not the -- 8/12px class defaults heights = { stool = 5, table = 6 }, -- the wall band stays one 16px face: blank courses, the window, -- the framed picture, and the schoolhouse blackboard (72-75/88-91) wall = { 0, 36, 45, 46, 52, 61, 62, 72, 73, 75, 88, 89, 90, 91 }, -- stools: a seat-high box that also seats Daisy stool = { 2, 3, 18, 19 }, -- the dining table (top edge 38/41 also caps the bookcases); -- 80-83 are its ransacked corner in CERULEAN_TRASHED_HOUSE, which -- stays at table height rather than de-merging into a wall stub table = { 38, 39, 41, 47, 54, 57, 58, 59, 60, 80, 81, 82, 83 }, -- the bookcase bodies: book ranks (14/15 left pair, 48/49 right) -- and the base course; the drawn top edge (38/41, pinned table -- above) becomes their top face desk = { 14, 15, 30, 31, 48, 49 }, -- the corner potted plants: mostly silhouette, the THIN standee -- pool (crown 10/11, leaves 8/9/26/27, pot 24/25) prop = { 8, 9, 10, 11, 24, 25, 26, 27 }, -- the open book on the schoolhouse table: a paper-thin cutout -- standing on the pinned tabletop cutout = { 70, 71, 86, 87 }, -- the front-door mat: same $14 water-fallback trap as Red's; flat ground = { 4, 20 }, }, -- The Pokemon Center lobby. One tileset serves all eleven Centers -- and the Celadon Hotel, and VIRIDIAN_POKECENTER places every tile -- the other maps use, so this list -- read off Viridian -- covers -- them all. (The Marts are a DIFFERENT tileset id, MART, that only -- shares the atlas image; pins do not carry over.) Same failure as -- the houses: the detector merges the wall-touching counters and -- machines into the wall and towers them, and the lounge seat -- -- which has a PERSON drawn into the tile art -- becomes a monolith -- wearing his face. POKECENTER = { -- the wall band stays one 16px face: striped panels (40), the high -- windows (92-95; 94 doubles as the map's warp tile, and pins are -- look-only), the pokeball poster (2/3/18/19), and the pillars -- (16/41) with their bases (4/5/20/21; 20 is the $14 water-fallback -- trap and would recess into a pond lip). The healing machines' -- console face (76/77) and button panel (6/22) are ALSO wall: -- drawn 16px tall against the band, so wall height is their drawn -- height and they read as equipment jutting from it. (The -- `center_heal_machine_w`/`_e` templates below claim the full -- 4x4 machine grids at every placement and model the console -- properly; these pins are the degradation path when the profile -- is absent.) The near-black screen tiles must be pinned or the -- void rule flattens them. What is NOT wall is the machines' -- two flanks -- see `prop` below. wall = { 2, 3, 4, 5, 6, 16, 18, 19, 20, 21, 22, 40, 41, 76, 77, 92, 93, 94, 95 }, -- the counters, half a cell high: top band (8) with the nurse's -- tray (10), front face (24/25, the game's counterTiles), left end -- cap (56) and the Cable Club's light sections (90/91). 8px is -- one clean band, so the drawn front panel stands up and the -- counter top stays on top; at 12 they read as wall stubs counter = { 8, 10, 24, 25, 56, 90, 91, -- and the lounge couch's SEAT column with the man -- sitting on it. Same half-cell box: its bottom row -- (43, the front base) stands up as the couch's -- front, and the rows above it -- cushion (39) and -- the man (37 head, 53 face) -- ride the top face in -- drawn order, each exactly once. See the note below -- on why he cannot be stood upright. 37, 39, 43, 53 }, -- The couch's WEST tile column: the drawing's left strip is the -- couch's back and arm running north-south (the seat's cushions -- and seams fill the east column), so it rises over the 8px seat -- the way a couch back does instead of lying flush in the same -- box. Per-tile granularity puts the drawn ~6px strip plus a -- 2px sliver of cushion on the raised band -- invisible at tile -- scale, and the alternative is no backrest at all. The figure -- anchor scans for the tallest authored UPRIGHT under the man -- (see Structures.buildFigure), so he keeps sitting at seat -- height beside it. backrest = { 36, 38, 42, 52 }, -- standing per-pixel props, black-outline segmented: the healing -- machines' screen tops (58/59/74/75, drawn above the pinned -- bodies so they stand ON them) and the PC (66/70/82/86), which -- stands on its pinned desk billboard = { 58, 59, 66, 70, 74, 75, 82, 86 }, -- The healing machines' two FLANKS, which are not the machine and -- not the wall: thin equipment standing on the floor beside the -- console, drawn against a plain light-grey ground with no floor -- checker in it. `wall` boxed each of them into a solid 16px -- half-cell wearing its drawing in relief -- the billboard failure, -- one tile wide. -- 72 the west flank of both machines, and 73 its mirror on the -- east machine: a pair of PIPES leaving the console and -- bending down into the floor in an L, the 8px motif drawn -- once per pipe. Round and thin, so the THIN pool's 5px -- slab, per-pixel, is the whole of them; a box is a wall -- stub with pipework printed on it. -- 7/13 the west machine's east flank: a KEYBOARD, one 16px panel -- over two tiles (keys, and the wide bar down its right). -- Same thin standee; the drawn panel IS its thickness. -- All four ids are used at these flanks and nowhere else in the -- game -- 12 maps, the same two cells in each -- so this pin cannot -- reach anything but the machines. 72 is still the $48 -- water-fallback trap and still has to carry SOME pin; it just -- wanted the thin one, not the wall. (The machine templates now -- claim the flank tiles too and model the hoses and keyboard as -- attached 3D equipment; these standee pins are the degradation -- path when the profile is absent.) prop = { 7, 13, 72, 73, -- ...and the potted plants -- see THE POTTED PLANTS below 32, 33, 34, 35, 48, 49, 50, 51 }, -- The man on the couch, cut out by hand and stood up (see `figures` -- below). Nothing automatic reaches him. A class pin resolves a -- whole 8x8 tile and he SHARES his tiles with the couch, so pinning -- them stands the furniture up with him; riding the couch's top -- face (what this did before) draws him lying flat on the cushion; -- and he cannot be segmented into a standee either, because the -- drawing has no background margin for a flood to enter by and his -- skin is the same light shade as the couch -- the mask drained 307 -- of his 420 interior pixels, 46% of him, even segmented alone. -- An authored mask is the only thing that can tell a man from the -- sofa he is painted into, so that is what `figures` carries. -- the PC's desk body, which the PC stands on table = { 9, 88 }, -- THE POTTED PLANTS: a leaf crown (32/33/48/49) over an urn -- (34/35/50/51; 50 is the $32 water-fallback trap), the most -- repeated interior prop in the game -- 78 placements over 13 maps -- across this id and MART (scan: six per Center, two in the -- Celadon hotel's lounge rows, four in the Plateau lobby). -- -- A plant is the THIN pool's textbook case: the drawing is ONE -- organic silhouette -- crown, 3px stem, urn, all 8-connected, -- 350 of the block's 512 pixels -- so it stands as a per-pixel -- cutout 5 voxels deep at its real drawn height, 32px over the -- two stacked cells. Its lowest drawn row is the block's bottom -- row, so it stands in the pot cell's south band -- drawn low, -- near the front of its blocked plot -- and the crown overhangs -- the stem the way the drawing says, which no box or hull cut to -- cell granularity can do. Both cells' tiles carry the pin (in -- `prop` above); the pool clusters them into one drawing, and the -- two side-by-side placements (every map pairs or quads them) -- share one cluster whose per-pixel geometry is identical to two -- separate ones. -- The plant drawing has no floor margin to vote from: the urn's -- #555 foot lies flush on the block's bottom edge, so the rim -- vote reads "dark" as background and drains the urn's own body. -- Name the background outright instead: the floor showing -- through the crown's gaps is white+light and nothing else, -- while the crown's own white/light highlights are sealed inside -- its black/#555 outline -- a light+white flood from the ring -- reproduces the extract mask exactly, leaves intact. prop_bg = { { tiles = { 32, 33, 34, 35, 48, 49, 50, 51 }, shades = { "light", "white" } } }, -- THE MAN ON THE COUCH. He is drawn INTO the lounge furniture and -- spills out of it in BOTH directions, which is why he needs three -- tile columns: -- -- 36 / 52 the couch's west arm. 36's two RIGHTMOST columns are -- the back of his head; 52 is the plain arm, and is also -- what 36 wears once his hair comes off it -- 37 / 53 him: head, then face and body -- 57 / 60 the floor east of the couch, which his hair and his -- foot overhang. 1 and 26 are those same two floor -- tiles as the artist drew them WITHOUT him -- 8 and 5 -- pixels apart respectively -- so lifting him off is -- lossless there -- -- `pixels` is the hand-drawn line between the man and the furniture; -- `under` is what each tile wears once he is lifted off it. The -- couch keeps its polygonal box and he stands on top of it. -- -- The mask keeps ALL of 37/53's column 7, the couch's east edge. -- Where that column is drawn dark it is the couch's own rule -- but -- it is also where his hair crosses the tile seam, so dropping it -- floats the overhang free of his head. And where it is drawn WHITE -- it is the right side of his face, so dropping it opens a slit down -- his cheek (rows 5-8, which is exactly what the first cut did). -- Keeping the rule twice costs nothing: tile 39 redraws it on the -- couch beneath him either way. Repainting 36 as 52 does cost one -- row -- 36's top trim band, which 52 does not carry -- and that is -- the accepted price for not leaving a second copy of his head lying -- on the arm. The background corners around his head and the -- cushion wedge under his legs are the only pixels given back. figures = { { w = 3, tiles = { 36, 37, 57, 52, 53, 60 }, under = { 52, 39, 1, 52, 39, 26 }, pixels = { "..........XXXXX.........", "........XXXXXXXX........", ".......XXXXXXXXXX.......", "......XXXXXXXXXXXX......", "......XXXXXXXXXXXX......", "......XXXXXXXXXXX.......", "......XXXXXXXXXXX.......", "......XXXXXXXXXXX.......", "........XXXXXXXXX.......", "........XXXXXXXX........", "........XXXXXXXX........", "........XXXXXXXX........", "........XXXXXXXXX.......", ".........XXXXXXXXX......", "...........XXXXXX.......", "..............XX........", }, }, }, }, -- The Poke Marts (one 4x4 layout serves every city; the tileset -- shares the Center's atlas image but is its own id, so the pins -- above do not carry over). Same failures as everywhere indoors: -- the detector towered the whole north display band to 32px, merged -- the clerk's booth into a 48px slab wearing the juice poster, and -- boxed the two free-standing shelf racks into one 4-tile-deep -- monolith. MART = { -- THE BACK WALL. It is drawn FOUR tile rows tall -- trim (40, or -- the fridge tops 90/91), the SALE signs (78/79) or glass upper -- (44/45), the black display niche (76/77) or glass lower (46/47), -- and the cases' base and goods (23/29, 62/63) -- which is 32px of -- artwork depicting ONE wall, not four things at four depths. -- -- Pinned `wall` that is exactly what it became: every row got its -- own 16px box marching north, so the only face you ever saw was -- the southmost row (the cases' base), the signs and the niche hid -- behind it, and the trim ended up lying flat as a gold shelf on -- the roofs of the boxes behind. Laid out in depth instead of -- stacked up. -- -- `bookcase` is the class that collapses a tall drawing onto a -- one-cell-deep box at its real drawn height, so the run of four -- rows becomes a single 32px wall: bands from the south are base, -- niche, sign, trim, its top face wears the trim, and the three -- rows behind become hidden floor. Same treatment the shelf racks -- below already get -- a Mart's back wall IS a wall of display -- cases, and the geometry does not care which we call it. bookcase = { 23, 29, 40, 44, 45, 46, 47, 62, 63, 76, 77, 78, 79, 90, 91, -- the free-standing shelf racks: TALL drawings, not -- deep ones -- each rank collapses onto a -- one-cell-deep shelf at its drawn height (the -- Dojo/Red's-house treatment). 64/65/67 and 80/81/83 -- are the bottle rows the clerk's booth also wears as -- its top display; 68/69/71 and 84/85/87 the goods -- rows below 64, 65, 67, 68, 69, 71, 80, 81, 83, 84, 85, 87 }, -- The wall's own tiles are reused elsewhere, and the back wall is -- the one place they are drawn on the map's TOP EDGE. So `bookcase` -- is their default and this hands every other use back to `wall`, -- which is what all of them were before: 40 is also the clerk's -- booth back panel (under the shelf rows 80/81 or under itself), and -- 40/76/77/90/91 all recur in INDIGO_PLATEAU_LOBBY, the ninth map on -- this id, where they draw the hall and the lift bank. -- -- NEVER put 0 in an `above` set. Map:tileAt does not answer nil off -- the top of a map -- it border-extends, so row 0 reads the map's -- borderBlock, which indoors is the black void block 0. Listing 0 -- to catch the Lobby's void-backed 90/91 fired the rule on every -- Mart's fridge row as well: row 0 dropped out of the bookcase run, -- the fridges came out 24px against the SALE cases' 32px, and their -- trim row stood as a separate box BEHIND the wall instead of on top -- of it. Nothing can separate those two cases from above -- both -- see void -- so the Lobby (already out of scope here) gets the -- bookcase reading too, and the Marts come out right. when_above = { [40] = { { above = { 40, 80, 81, 83, 90, 91 }, class = "wall" } }, [76] = { { above = { 74, 75 }, class = "wall" } }, [77] = { { above = { 74, 75 }, class = "wall" } }, [90] = { { above = { 17 }, class = "wall" } }, [91] = { { above = { 27 }, class = "wall" } }, }, -- the clerk's counter, half a cell high like every service -- counter. It is a C wrapping the alcove the clerk stands in: the -- south arm's drawn front (24/25) under its top band (8/56), the -- light work surface the east arm and the rest of the south arm -- share (16/41), and the north arm's end panel (89). 8 and 56 are -- the two halves of one top band -- the first pass read 8 as the -- cash register, pinned it `billboard`, and got a bare black -- outline standing on the counter with the tile's own art replaced -- by its neighbour's. -- ...and the register's own two tile rows (14/15 over 30/31) are -- part of that same work surface now that the machine has been cut -- off them as a sprite -- see `figures` below. counter = { 8, 14, 15, 16, 24, 25, 30, 31, 41, 56, 89 }, -- the same potted plants as POKECENTER above -- MART shares that -- atlas, so this is the identical drawing tile for tile, and -- INDIGO_PLATEAU_LOBBY (the only map on this id that places it) -- puts four of them along the hall. Across POKECENTER and MART -- all eight of these ids appear exactly 78 times each, which is -- exactly how often the 2x4 plant grid appears: they are never -- anything but this plant, so pinning them by tile cannot catch -- anything else. Same reading as the POKECENTER entry: one -- organic silhouette in the THIN standee pool, per-pixel, 5 -- voxels deep at its drawn 32px height, with the background -- shades named because the urn's foot lies flush on the block's -- bottom edge and votes the drawing's own darks away. prop = { 32, 33, 34, 35, 48, 49, 50, 51 }, prop_bg = { { tiles = { 32, 33, 34, 35, 48, 49, 50, 51 }, shades = { "light", "white" } } }, -- Left to the derived default on purpose: the floor checker and -- its shadowed variants (1/11/17/26/27/54) and the exit mat -- (12/28) all sit in cells the ROM marks walkable, so the cell -- rule lays them flat unaided. (76/77, the SALE case's black -- interior, used to be left to the volume path here; it is now the -- back wall's third band, because a run of four rows has to be -- contiguous for the wall to collapse into one box at all.) -- THE CASH REGISTER: a till drawn across two tile rows in the middle -- of the counter's east arm, and the same drawing in all nine maps -- on this id (eight Marts plus the Indigo Plateau lobby), always at -- cell (1,5). Like the Center's seated man it is drawn INTO the -- furniture, so it is cut out by the same authored mask, and for the -- same reason: no class pin can separate it from the counter, -- because the counter draws its own edging down columns 0 and 15 of -- the very same tiles. -- -- That edging is what defeated every automatic reading. Black -- always survives the shade flood, so the standee pools extruded -- the two rules along with the machine and it stood flanked by a -- pair of tall black slabs; `console`'s keep-the-largest-drawing -- rule dropped them, but only by throwing away the receipt curl -- too whenever the flood happened to cut it loose. The mask just -- says where the machine is: columns 2-13, plus the curl climbing -- to the top right, and the counter keeps its edging and its light -- work surface. -- -- But it is a MACHINE, not a person, so unlike the seated man it -- carries a `depth` and stands as a solid rather than a sprite -- card. A flat card of a till is exactly the billboard the standee -- pools exist to avoid -- it read as a decal on the counter, and -- turned edge-on with the camera. -- -- AND IT IS NOT A BOX. The 16x16 packs two facings, and the black -- linework says which is which: the keypad has its OWN complete -- border (cols 2-8, rows 4-11) sealed inside the outer silhouette, -- and what surrounds it is an L -- -- -- cols 2-----8 9--12 -- +-----------+-----+ row 4 -- | keypad | arm | the L's upright arm: the printer and -- +-----------+-----+ row 11 display the paper feeds out of -- | base / drawer | rows 12-15: the L's foot, drawn face-on -- +------------------+ -- -- So the keypad is NOT a face. It is the machine's DECK seen from -- ABOVE -- the keys lie on it -- and `flat` lays it horizontal in -- the notch of the L, at the height the base band leaves it and -- with drawn row = depth row 1:1. Extruding it instead stood that -- surface on end and painted the keys up the front of a plain box: -- the extruded-picture failure, and what the first pass shipped. -- -- Everything else falls out of the drawing: the base band is 4 rows, -- so the deck stands 4 above the counter; the arm is 8, so it rises -- 8 above the deck; the paper reaches 4 more. -- -- TWO AUTHORED NUMBERS. -- -- `depth` 12, three quarters of the cell. The keypad's own eight -- drawn rows measure 8, and at 8 the machine read thin on the -- counter, so the body runs half again deeper and the deck STRETCHES -- over it -- 8 rows into 12 voxels, centre-sampled, so every second -- row doubles and the keypad still covers the whole surface. This -- is the one place in the model where a texel is not 1:1 with a -- drawn pixel; laying the panel 1:1 instead leaves a strip of the -- base band's top showing behind the keys. The model is anchored at -- the counter cell's FRONT and grows north into the bare top behind -- it, so deepening it can never push the till toward the aisle: at -- 12 it still stops 4 voxels short of the cell's north edge. This -- is the number to move if it wants more or less presence. -- -- `thin`: 4 rows at 2. Row 4 is the machine's -- own drawn top edge -- a black rule from column 3 to column 9 -- so -- everything above it is the receipt strip, and paper is 2 voxels -- like every other `cutout` here. Centred in the body's band, so -- the strip leaves the arm's top face by a slot in the middle of it -- rather than flush with its front. At the body's 8 the curl came -- out as a chunky wedge on the corner and stopped reading as paper. -- -- `under` is 16/41 twice -- the plain work surface, which already -- carries the west edging (black over white) and the east (dark -- over black), so the counter closes up behind the machine with no -- synthesis at all. The `counter` pin on 14/15/30/31 stays: the -- box under the till is still the counter, and the machine stands -- on its 8px top plane. figures = { { w = 2, depth = 12, thin = { rows = 4, depth = 2 }, flat = { x = { 2, 8 }, rows = { 4, 11 } }, tiles = { 14, 15, 30, 31 }, under = { 16, 41, 16, 41 }, pixels = { ".........XX.....", "........XXXX....", "........XXXXX...", "........XXXXXX..", "...XXXXXXXXXXX..", "..XXXXXXXXXXXX..", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", "..XXXXXXXXXXX...", }, }, }, -- NOT covered: INDIGO_PLATEAU_LOBBY, the ninth map on this id and -- the only one that is not the 4x4 shop. It draws its own hall, -- lift bank and rope stanchions from tiles no Mart places, three -- of which fall in the engine's stale water set -- see -- reports/COUNTERS_pass2.md. Pinning them is a tileset pass of -- its own and is deliberately not attempted here. }, -- The route gates and their upstairs lounges, the four Underground -- Path entrance huts, the Safari Zone gate and its four rest houses -- -- twenty-five maps on one tileset. (Viridian Forest's two gates -- draw the very same art from a SEPARATE id, FOREST_GATE below, and -- pins do not carry between ids.) Before this entry every one of -- them was a swimming pool: 50/51 -- the dark panel the artist reuses -- as the wall's base course AND as every counter's front -- is one of -- the three ids (20/50/72, the $14/$32/$48 of the stale cache) that -- the engine's water set claims in every tileset, so the whole wall -- perimeter and every counter front recessed into a moat. The other -- two are placed here as well: 20 is the exit doormat, 72 the top -- course of Route 2's wall. What survived the water was towered -- instead -- the counters raised to a 16px slab, the cabinets boxed, -- the 2F window read as a 16-to-40px skyline, and the tables and -- binoculars flattened into the floor because their cells are -- walkable. GATE = { -- The wall band stays ONE 16px face. Three wall drawings share -- it: the route gates' panelled course (32/33 -- its base course -- 50/51 is `counter`, see below), the -- Underground Path huts' and Route 22's plain stripes (0), and -- Route 2's speckled plaster (72 over its dark skirting 74). 0 -- and 74 need no height correction but are pinned anyway, so the -- detector cannot swallow the corner plants into the band and -- tower them with it. The gate 2F's big window is the same band -- two cells deep (58 glass, 45 its dither, 61 the diagonal glare, -- 62 the black mullions). The door panes (41/43, the leaf drawn -- above the walkable threshold) are wall too, so a doorway reads -- as a recess in the band instead of a picture of a door lying on -- the floor -- the Center's warp-tile treatment, and pins are -- look-only so the cell stays walkable. -- -- 50/51 is NOT in that list, and that is the one deliberate cost in -- this entry. The artist draws one panel twice: as the wall cell's -- base course (32/33 over 50/51) and as the front of every counter -- (7/9/8 or 17/18 over 50/51). A pin is per tile id and a class -- carries one height, so the two uses cannot be separated here at -- all -- only in `lib`, by letting a pin be conditional on the tile -- drawn ABOVE (see reports/COUNTERS_pass2.md). Pinned `wall` (16) -- the band is one clean face and the counter the guard stands -- behind is a full 16px slab that hides him to the shoulders. -- Pinned `counter` (8) every counter is the half cell it is drawn -- as -- which is what the room is FOR -- and the price is that the -- wall cell's front 8px of depth drops with it: a shallow wall -- gains an 8px plinth (reads as a wainscot), and the deep margin -- masses that run two to eight cells north-south down the east and -- west sides of the fourteen maps that place both drawings (Routes -- 5/6/7/8, the five gate 1Fs, the Safari gate and its four rest -- houses) corrugate, their exposed flank stepping 16/8/16/8 every -- 8px of depth. The other six -- Route 2, Route 22 and the four -- Underground Path huts -- place 50/51 and never 32/33, so they -- take the half cell for nothing. The counters win where it costs: -- they are the object the player walks up to and talks over, they -- sit mid-room, and the margin masses are pure border filler seen -- edge-on. This also puts GATE and FOREST_GATE on the same footing -- at last -- ROUTE_2_GATE draws the forest gates' room tile for -- tile and used to be the only one of the three with a 16px front. wall = { 0, 32, 33, 41, 43, 45, 58, 61, 62, 72, 74 }, -- the counter, half a cell high everywhere it is drawn: its north -- rim and end caps (7/8), the long run between them (9), the top -- surface a counter drawn running north-south wears (23/24), and -- the drawn front panel (50/51) standing up as one clean 8px band -- with the surface riding the top face. The guard leans on it -- instead of standing behind a wall stub, and a counter that runs -- wall to wall (Route 12's pair) matches one that ends in the open. counter = { 7, 8, 9, 23, 24, 50, 51 }, -- 50/51 draws BOTH the counter's front and the wall's base course, -- and it is the bottom row of its cell either way -- so a flat pin -- has to pick one and be wrong about the other. Pinned `wall` the -- counters stood a full 16px; pinned `counter` the deep border -- banks corrugated 16/8 for sixteen rows and the room read as -- crates. What tells the two uses apart is what is drawn ABOVE: -- the wall stacks its panelled course (32/33) over the base, while -- a counter carries its own top (7/8/9). So the counter pin above -- is the default and this puts the wall back wherever the panel -- sits on top of it -- resolved per position, in TileShape.at. when_above = { [50] = { { above = { 32 }, class = "wall" } }, [51] = { { above = { 33 }, class = "wall" } }, }, -- the tall glass-fronted cabinets: three shelf ranks (34/35) -- folded up a 24px box whose top face adopts the drawn top rim -- (7/8, pinned `counter` directly above it) through the mesher's -- authored-fold rule -- the HOUSE / Red's-house bookcase -- treatment. Deliberately not `bookcase`: that collapses the -- drawing to one cell of depth, which would leave the wall cell -- behind each cabinet as bare floor, and its cap rule refuses a -- row pinned anything but `table`, so the cabinets would lose -- their tops as well. desk = { 34, 35 }, -- standing per-pixel props with body, black-outline segmented: the -- little tables of the 2F lounges and the Safari rest houses (2/3 -- the top, 18/19 the legs) and the 2F observation binoculars (36 -- eyepieces, 52 barrels, 57 pedestal). Both are drawn face-on -- with air between their legs and a clean white floor margin, so -- the standee segments whole -- and both were invisible before, -- flattened by the walkable-cell rule. They stand on the floor: -- the window band is drawn ABOVE them, and the support rule only -- lifts a prop drawn above a box. billboard = { 2, 3, 18, 19, 36, 52, 57 }, -- the plants, in the THIN pool like every other interior plant: -- the potted palm that stands in every hut and rest-house corner -- (5/6 crown, 21/22 fronds, 37/38 over 53/54 the pot), and Route -- 22's wall plant (14/15 crown, 30/31 pot), which stands on the -- half-cell planter its base course (50/51) makes -- a planter box -- now rather than the 16px pedestal it used to perch on. prop = { 5, 6, 14, 15, 21, 22, 30, 31, 37, 38, 53, 54 }, -- the exit doormat (4 over 20): drawn from straight above, so it -- has to lie flat -- and 20 is the $14 water-fallback trap, which -- sank every gate's own doorway into a pond lip. ground = { 4, 20 }, -- the flight up to a gate's 2F: real steps climbing east, the way -- the drawn treads rise to the right. Pixel for pixel the same -- staircase as Red's house 1F, on the same four tile ids. stair_e = { 12, 13, 28, 29 }, -- the flight down -- to 1F from a gate 2F, into the tunnel from an -- Underground Path hut: a sunken stairwell descending westward, -- high at the east lip where the player enters. Again the same -- drawing and the same ids as Red's room upstairs. stair_down_w = { 10, 11, 26, 27 }, -- Left to the derived default on purpose: the two floor checkers -- (1/17) and every threshold -- the door mats (55/56/94) and the -- tile under the door panels (42/59) -- sit in walkable cells, so -- the cell rule already lays them flat; and tile 16 is solid -- black, which the void rule flattens into exactly the darkness -- that should sit above Route 16's north wall. }, -- Viridian Forest's north and south gates. Tile for tile they are -- the same drawing as ROUTE_2_GATE, but they are their own tileset -- id, so they need their own copy of the pins. These two maps never -- place the panelled wall course (32/33), so 50/51 is a counter -- front here and nothing else -- the half cell it is drawn as costs -- this id nothing at all, where GATE pays for it in the wall (see -- the note there). Both ids run 50/51 `counter` now, so the three -- rooms that share this drawing -- the two forest gates and -- ROUTE_2_GATE -- finally match. Before this entry the room was a -- pond with an island: 72 ($48) sank the north wall's top course, 50 -- ($32) sank all four counter fronts, and 20 ($14) sank the exit -- doormat -- the three stale-cache water ids, all three placed in -- one small room. FOREST_GATE = { -- the wall band, one 16px face: the speckled plaster course (72) -- over its dark skirting (74), plus the door pane (41/43) drawn -- above the walkable threshold, so the doorway reads as a recess -- in the band rather than a door lying flat on the floor (pins are -- look-only; the cell stays walkable). 72 is the $48 -- water-fallback trap and took the whole north wall down with it. wall = { 41, 43, 72, 74 }, -- the four counters, half a cell high: end caps (7/8), the top -- surface running north-south (23/24), and the front panel (50/51) -- standing up as one clean 8px band with the surface riding the -- top face. 50 is the $32 water-fallback trap -- unpinned, every -- counter's front cell was a pond notch. counter = { 7, 8, 23, 24, 50, 51 }, -- the potted palms down both side walls, three to a side, in the -- THIN standee pool like every other interior plant: 5/6 crown, -- 21/22 fronds, 37/38 over 53/54 the pot. They stack with no gap -- between them, and each still segments as its own plant. prop = { 5, 6, 21, 22, 37, 38, 53, 54 }, -- the exit doormat (4 over 20), drawn from straight above so it -- lies flat; 20 is the $14 water-fallback trap. ground = { 4, 20 }, -- Left to the derived default on purpose: the two floor checkers -- (1/17) and the tile under the door panes (42/59) sit in walkable -- cells, so the cell rule already lays them flat. }, -- Celadon's department store and the rooms that share its blockset: -- CELADON_MART_1F..5F and the ROOF, the two 2x2 lift cabins -- (CELADON_MART_ELEVATOR, SILPH_CO_ELEVATOR), ROCKET_HIDEOUT_ELEVATOR, -- the GAME_CORNER with its PRIZE_ROOM, and CELADON_DINER -- twelve -- maps off one atlas. Everything the store owns was wrong: the -- U-shaped sales counters read their whole north-south arm as one -- drawing and towered to 48px (dragging the wall band they touch up -- with them), the merchandise racks fused sideways into 32px -- monoliths FOUR tiles deep -- the Poke Mart's failure exactly -- -- the diner and roof stools sit in walkable cells and so flattened -- into the floor entirely, and three separate tiles fell into the -- engine's stale water set and sank into ponds indoors. LOBBY = { -- The two exit cells of every map (the sliding-door threshold, 4 -- over 20). 20 is $14, which the stale-cache fallback counts as -- water in EVERY tileset, and rule 2 judges the whole CELL by it: -- both tiles of the doorway recessed into a pond lip just inside -- the shop door. It is a flat mat, and the lift cabins use the -- same pair for their car door. ground = { 4, 20 }, -- The wall band stays ONE 16px face. The blank course (1) and the -- skirting course below it (33) are the band itself; everything -- else here is drawn BUILT INTO it at 16px, so wall height is the -- drawn height and each reads as a fitting jutting from the band -- rather than a tower: -- 6/22 the framed notice beside the stairwell, every floor -- 2/3/18/19 the pair of pay phones on 1F -- 46/47 the floor-directory plaque (it also sits at the east -- end of 1F's counter top, where 16px reads as a sign -- board standing on the counter -- the one placement -- that is not wall, and the least bad of the two) -- 62/63 the lift call-button panel in both 2x2 cabins -- 72/73/88/89 the framed picture (72 is $48, a water-set id, so -- unpinned its top half sank) -- 68/84 the roof's perimeter safety railing, drawn 16px tall -- 75/76/77/78/79 the roof parapet and the Rocket lift's cabin -- walls (79 also rings the roof map as its border block); -- the Game Corner reuses 75/76/77/78 as the dark south -- end of its machine banks, where 16px reads as the -- bank's end cabinet -- 91 the dithered wall course above the Prize Room counter -- and the roof stairhead -- 92/93 the Rocket lift's horizontal cabin frame -- 70/71 NOT wall panelling: the round tables' lower-left and -- lower-right rim ($46/$47). They are here to lift the -- terrace and diner tabletops to the one height their -- middle can be built at -- see the long round-table -- note under `counter`. The tileset places them in the -- two table blocks (29, 49) and nowhere else, so 16px -- costs nothing anywhere in the group. wall = { 1, 2, 3, 6, 18, 19, 22, 33, 46, 47, 62, 63, 68, 70, 71, 72, 73, 75, 76, 77, 78, 79, 84, 88, 89, 91, 92, 93 }, -- 3F's television sets ($0E/$0F/$1E/$1F): the one drawing in this -- tileset that is a deliberate object with a body -- a black-framed -- cabinet, a bezel and a lit screen, drawn face-on -- and the same -- thing Red's living room stands up. Six placements: four on the -- two goods counters, two against the east wall band. As `wall` -- each was a 16px CUBE with the TV art folded onto one face, so the -- counters wore grey filing cabinets and the TV shop read as a -- stockroom. The standee pool cuts the drawing per pixel at 10 -- voxels of body instead, and the support rule does the rest: the -- four counter sets are drawn directly above an authored 8px -- `counter` row, so they STAND ON the counter and the tiles they -- claim keep rendering as counter top rather than holing it. (The -- art carries a full black frame with light margin inside it, so -- the segmentation flood has nothing to drain and the whole set -- survives.) Its own pool, away from `stool`, so a TV never stacks -- with a chair drawn beside it. billboard = { 14, 15, 30, 31 }, -- Every service counter in the group, half a cell high like the -- Center's and the Mart's. One 8px band means the drawn front row -- stands up and everything above it rides the TOP face in drawn -- order -- which is what a counter arm running north-south IS: the -- rows above the front are its top surface seen from above, not -- height. Unpinned the arms measured their full 7-row run and -- towered to 48px, taking the wall band they touch with them. -- 38/39/41 the top surface and its end caps -- 21/48/49 the south front panel and its end caps -- 54/57 the arms' left and right side edges -- 36/37/52/53 the games console and its controller laid out on -- 3F's counter. This is pixel for pixel the drawing -- Red's house pins `relief` -- a prop seen from -- ABOVE -- and `relief` is the class it wants. It -- cannot have it here: Structures.buildRelief anchors -- its extrusion at y=0 and has no support lookup, -- while every placement of this drawing in the -- tileset is on a counter TOP. Pinned `relief` the -- cell is claimed, dropped to floor level and punched -- a 16x16 hole clean through the counter (verified -- in-engine, pass-2 report). `counter` leaves the -- console exactly where relief would put it -- flat, -- flush with the surface, art on the top face, drawn -- once -- and gives up only relief's three voxels of -- lift. The report carries the one-place engine -- change that would free it. -- 9/25/85/86/87 the round tables of the diner and the roof -- terrace: their north rim (9/25 = $09/$19) and the -- pedestal course at the south (85/86/87). -- -- THE ROUND TABLES in full, because the shape is a compromise. The -- drawing (block 29, and the same four rows split across blocks 45 -- and 49 in the diner) is -- $09 $27 $27 $19 an octagonal top seen from above, with -- $36 $37 $37 $39 a pedestal drawn below its southern -- $46 $37 $37 $47 rim -- $55 $56 $57 $37 -- Its four INTERIOR tiles are $37, which is ALSO the light half of -- the checkerboard floor and the plain upper wall of the Prize Room -- and the roof stairhead, so $37 cannot be pinned at all (see the -- closing note). Left to the detector those four are a two-row -- column, which buildVolume reads as a repeat, floors at unit 2 and -- builds at 16px -- and with the whole rim pinned `counter` at 8px -- the terrace tables came out as grey CUBES sitting on trays. -- -- So stop fighting the 16px and let it BE the tabletop: 70/71 -- ($46/$47, the lower-left and lower-right rim) move to `wall`, and -- the table's whole front course then stands at the same 16px its -- middle already does -- one flat disc, the drawn octagon on its -- top face and the lower arc folded down its front. What stays at -- 8px is the FAR rim (9/25, and the shared 39/54/57) and the -- pedestal (85/86/87): the far rim is occluded by the 16px top in -- front of it, and the pedestal is meant to sit low. 16px is also -- the right height against the 8px `stool` chairs drawn around it -- -- a terrace table you sit at, not a footstool. counter = { 9, 21, 25, 36, 37, 38, 39, 41, 48, 49, 52, 53, 54, 57, 85, 86, 87 }, -- Free-standing merchandise racks and glass cases: TALL drawings, -- not deep ones. The four-row rack (42-45 / 58-61 / 64-67 / -- 80-83) stands two racks abreast on floors 2F-5F and along the -- Game Corner's north wall, and the detector boxed each pair into -- ONE 32px slab four tiles deep -- the Poke Mart's exact failure. -- A bookcase rank collapses onto a one-cell-deep box at the full -- drawn height instead, and the back rows become hidden floor, so -- racks standing side by side stay separate objects with an aisle -- behind them. -- 34/35/50/51 is the glass display case / vending machine, which -- the same rule fits at BOTH its drawn sizes: 16px where it wears -- the 1F phones or the 3F TV above it, 24px where a counter cap -- (38/41) tops it on the roof, the Prize Room and the Game -- Corner. 50 is $32, a water-set id, so every one of these cases -- stood in a pond before it was pinned. bookcase = { 34, 35, 42, 43, 44, 45, 50, 51, 58, 59, 60, 61, 64, 65, 66, 67, 80, 81, 82, 83 }, -- The stools: the diner's chairs, the roof terrace's, the six -- rows in front of the Game Corner's machine banks and the four -- on 1F. Their cell's bottom-left tile is 23 ($17), which IS on -- the tileset's walkable list, so rule 3 resolved every one of -- them to flat ground and they vanished into the floor -- completely. A pin is the only thing that overrides that. The -- drawing carries a full black outline with the floor dither -- showing at all four corners, so the standee segments cleanly -- -- and `stool` keeps its own pool, apart from anything it touches. stool = { 7, 8, 23, 24 }, -- Deliberately NOT pinned: -- $37 (55) is three different things -- the light half of the -- checkerboard floor, the interior of the round tables, and -- the plain upper wall of the Prize Room and the roof -- stairhead -- and every class that suits one ruins the -- others: `ground` holes the wall and the tabletop, `counter` -- turns every second floor tile into an 8px lump, `wall` turns -- it into a 16px pillar. The cell rules already answer the -- floor (its cells are walkable through their $45 bottom-left -- tile) and the wall (its cells are not), and the tabletop is -- answered above by raising 70/71 to meet the 16px the -- detector builds there. Left unpinned on purpose. -- $10 (16) is pure black and the void rule already flattens it -- to the interior darkness above the Game Corner's wall. -- The stair openings (10/11/26/27, 40/56) and the lift doors -- (12/13/28/29) all sit in WALKABLE cells and fold into the -- facade on their own, which is what the doorway fold is for. -- $20/$45 (32/69) are the two floors and are walkable. }, -- Pewter's museum, both floors (the tileset shares the gates' atlas -- image but is its own id). The exhibits were the worst case in the -- whole building: 50 is $32, a water-set id, and it is the base row -- of EVERY display case, so rule 2 judged each case's bottom cell -- water and sank the fossil vitrines, the space shuttle and the -- glass cabinets into ponds. 72 is $48 and is the wall band's upper -- course, so the north wall recessed too -- leaving its lower course -- alone as an 8px stub. On top of that the benches sat in walkable -- cells and flattened away, the corner plants towered to 32px, and -- both staircases (also walkable) were flat floor. MUSEUM = { -- the two street doors on 1F: the same $14 mat trap as the -- department store's, flat ground = { 4, 20 }, -- the wall band as one 16px face: the dithered upper course (72, -- the $48 water-set id) over the skirting course (74), and the -- two framed paintings hung in it (78/79) wall = { 72, 74, 78, 79 }, -- The low partitions that divide both floors -- the tileset's own -- counterTiles name 23 ($17) -- drawn exactly like the department -- store's counter arms: a light top surface seen from above with -- dark side edges. Half a cell, so they read as barriers you see -- over rather than interior walls. Their north caps and their -- south base rows belong to the case group below, at the same 8px. counter = { 23, 24 }, -- Every vitrine in the museum, as tall drawings one cell deep: -- 7/8/34/35 the run of eight glass cabinets along 1F's north -- wall (7/8 is the cabinet's top surface, so the -- rank wears it as its top face -- which is why it -- is here and not in `counter` with the partitions -- whose north cap it also draws) -- 9/50/51 the low case at 1F's centre (9 the top surface, -- 50/51 the base panels) and the base row under the -- partition ends -- 25/39/40/44/46/48/49/58/60/63/70/71/83 the fossil vitrine, -- four drawn rows inside one black frame: the dark -- top surface, the ammonite specimens on their -- light bed, the placard, and the base. Two on 1F, -- one on 2F. Collapsed to one cell of depth it -- stands as a 32px case instead of a 16px lid -- floating over a pond. -- 64-69/80-91 the space-shuttle vitrine on 2F, the same drawing -- shape three cells wide. -- 50/51 is $32/$33 -- the water-set id that sank all of them. bookcase = { 7, 8, 9, 25, 34, 35, 39, 40, 44, 46, 48, 49, 50, 51, 58, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 }, -- the visitors' benches on 1F: their cell's bottom-left tile is -- 18 ($12), which is on the walkable list, so they resolved to -- flat ground and disappeared. Seat-height standees in their own -- pool, like the department store's stools stool = { 2, 3, 18, 19 }, -- the corner potted plants (crown 5/6/21/22, pot 37/38/53/54): -- the THIN standee pool, like every other interior plant in this -- profile. Unpinned they were a 32px two-cell tower. prop = { 5, 6, 21, 22, 37, 38, 53, 54 }, -- the Old Amber in its rounded case, drawn face-on with a clean -- black outline and a light margin at every corner: the standee -- with body, segmented so the backing floods away and the amber -- inside the outline stays billboard = { 76, 77, 92, 93 }, -- 1F's staircase UP to 2F: a real rising flight climbing east, -- the way the treads are drawn (low at the west, high at the -- east). Its cell is walkable, so without the pin it was flat -- floor with the stair art painted on it. stair_e = { 12, 13, 28, 29 }, -- 2F's staircase DOWN to 1F: the same flight from above, so it -- descends westward -- the player steps on at the east lip. Same -- tile ids Red's bedroom uses for its stairwell, which is the -- convention across Gen 1's interior blocksets. stair_down_w = { 10, 11, 26, 27 }, -- Deliberately NOT pinned: 1 and 17 ($01/$11), the two halves of -- the checkerboard floor. Every floor cell's bottom-left tile is -- $01, which is walkable, so the cell rule already makes the whole -- cell flat ground. }, -- Cinnabar Lab and its three side rooms (trade, metronome, fossil), -- the Fuchsia Warden's house, the Fuchsia meeting room and the Safari -- Zone's secret house -- seven maps on one tileset. Every indoor -- failure mode shows up here at once: the detector raised the machine -- banks as 32px monoliths TWO cells deep, boxed the free-standing -- shelf racks the same way (and CAPPED the metronome room's racks at -- 16px because their book rows repeat, so a 32px shelf came out a -- 4-tile-deep 16px slab), cut every lab bench into a patchwork of -- 8/16/32px stubs, flattened the chairs into floor, merged the -- meeting room's long partition with the corner plants into a 48px -- tower -- and dropped six tile ids into the engine's stale-cache -- water set, so the bench tops ($04/$05/$14/$15), the table's monitor -- ($48) and the Warden's round specimens ($32) recessed into pond -- lips inside the building. Oak's Lab (the DOJO entry) is the -- reference: same rooms, same answers. LAB = { -- the wall band stays one 16px face. Blank courses ($22), the -- pillar/corner that turns Cinnabar Lab's L ($23), the framed -- Pokeball picture (16/17/32/33), the metronome room's row of -- wall brackets (48/49 -- drawn INTO a band that is two cells -- deep there, so both cell rows stay one 16px face), the vent -- panel over Cinnabar Lab's three doorways (24/25), and the low -- dark base course with its end caps (42/43) that the meeting -- room's partition and the Warden's machine both stand on. -- The Warden's big machine (87/88/89 top, 28/71/29 the dial row, -- 36/37 the grille row, over 24/25 and the 42-34-34-43 base) is -- ALSO wall: it is drawn 32px tall and free-standing, so a -- `bookcase` would be the honest shape -- but its grille tiles -- 24/25 are the very tiles Cinnabar Lab hangs in its wall band -- above the doors, and its base row is the shared $22 band, so no -- per-tile pin can make it 32px without either stubbing the Lab's -- wall panel or splitting the machine into columns of different -- heights. One clean 16px console beats both. wall = { 16, 17, 24, 25, 28, 29, 32, 33, 34, 35, 36, 37, 42, 43, 48, 49, 71, 87, 88, 89 }, -- the equipment banks and the shelf racks: TALL drawings, not deep -- ones. Each rank collapses onto a ONE-CELL-DEEP box at its full -- drawn height and its back rows become hidden floor -- the -- Dojo/Mart treatment, and the only thing that stops the fossil -- room's and the secret house's machine walls from being 32px -- blocks two cells thick. 69/70 + 85/86 are the cabinet tops, -- 10/11 the dial faces, 74/75 + 90/91 the narrow filler columns, -- 26/27 the plinth with its feet, 59 the black end pilaster; -- 40/41 are the metronome room's and the meeting room's shelf -- ranks. -- -- 64/65/66 -- the TOP-TRIM row (one black line, one white -- highlight, then grey) that every flat-topped unit in this -- tileset wears -- are here too, and this is the load-bearing -- decision in the entry. They used to be `table`. A `table` is -- an authored upright BOX, and the support rule stands a pinned -- standee drawn directly above an authored box ON it: every chair -- on the FAR side of a table in this tileset is drawn directly -- above that table's trim row, so the trade room's two north -- chairs and the meeting room's spare chair were lifted onto the -- tabletops -- and their cells were re-tiled as tabletop, marching -- each table two tile rows north to meet them. A `bookcase` is -- authored but is NOT a box (its art mode is the rank collapse), -- so the support rule does not fire and those three chairs stand -- on the floor where they are drawn. -- Nothing else about the trim changes for the worse. Where it -- caps a shelf rank (64/66 over 40/41 or 10/11, in the metronome -- room, the meeting room, the fossil room and the secret house) -- it simply becomes the rank's fourth row: the same 32px height -- and the same top-face art the cap-adoption rule used to hand it, -- minus the 12px stub the trim used to render as BEHIND the shelf. -- Where it tops a table or the Warden's bench it becomes that -- unit's own 8px back rim, tucked behind the 12px top. -- (The one thing it costs is named in the report: the meeting -- room's two partitions used to hand this trim to the 16px band's -- TOP face -- the mesher gives a full-height course the authored -- UPRIGHT row above it -- and now top with their own band art.) bookcase = { 10, 11, 26, 27, 40, 41, 59, 64, 65, 66, 69, 70, 74, 75, 85, 86, 90, 91 }, -- the lab furniture, at table height. The benches in the fossil -- and metronome rooms (2/3 the specimen tray, 4/5 + 20/21 the -- microscope, 18/19 the tray's rack row) and the big lab tables -- (80/81/82 the top, 83/58/84 the front rail and its legs). -- 72/73 -- the monitor and the ball lying on the table -- ride the -- table's authored height rather than standing as separate -- cutouts, exactly as Oak's starter balls do; pinning them also -- stops the display frame's black corner brackets from -- auto-extracting into standing prisms. Four of these ids -- ($04/$05/$14/$15) plus $48 are the tileset's water-fallback -- traps: unpinned they sink into a pond lip in the middle of the -- room. With the trim row moved to `bookcase` the top face of -- each table now wears its own drawn surface instead of the trim -- -- which is how the Warden's bench finally shows the monitor and -- the Pokeball the artist drew on it. table = { 2, 3, 4, 5, 18, 19, 20, 21, 58, 72, 73, 80, 81, 82, 83, 84 }, -- seats, the 8px standee pool, all of them in WALKABLE cells and -- therefore flat floor until pinned: the four chairs round the -- trade room's table and the meeting room's spare (14/15/30/31, -- a whole cell each) and the little stool tucked under every lab -- bench (6/7 its top edge, 22/23 its seat and legs). 6/7 also -- carry the bench's apron along their top edge -- the standee -- wears a thin dark cap for it, which is cheaper than dropping -- the stool to a half-cell drawing with no floor margin. -- The chairs on the far side of a table stay on the FLOOR only -- because the trim row above them is no longer a box; see the -- bookcase group. stool = { 6, 7, 14, 15, 22, 23, 30, 31 }, -- the tall corner plants: two cells of drawing (44/45 + 60/61 the -- frond crown, 46/47 + 62/63 the stem and pot), mostly silhouette, -- so the THIN standee pool -- as in every other interior. The -- detector had them at 0/8/16/24/32px depending on which corner -- they stood in, and in the meeting room it fused them into the -- partition and towered the pair to 48px. prop = { 44, 45, 46, 47, 60, 61, 62, 63 }, -- the five round specimens in the Warden's house: one 16x16 cell -- each, drawn ROUND with a dithered shell and a lit underside. -- Neither a box nor a flat cutout reads them; the round archetype -- carves a voxel ball per cell from the drawing's darkest-pixel -- outline, which is what they are. 50 is a water-fallback trap, -- so unpinned the row sat in five pond lips. cylinder = { 50, 51, 67, 68 }, -- Deliberately NOT pinned: the checker floor (1/38) and the fossil -- room's striped carpet (12/13) are walkable cells and already -- flat; the doormat (39/55) likewise; the three doorways -- (76/77 over 52/53) are walkable and the engine folds them into -- the facade; Cinnabar Lab's black surround (54) is authored void -- by the void rule; and the bench aprons 8/9 stay flat floor, -- which is where the artist drew them -- inside the walkable cell -- in front of the bench. }, -- Celadon Mansion's three floors and its roof, plus the Celadon -- chief's house -- five maps on one tileset. The mansion maps are -- half interior and half OUTSIDE: the east third of every floor is -- the open-air stair landing, so the entry has to keep an outdoor -- strip flat while it furnishes the rooms. The detector towered the -- display cabinets, boxed the potted palms into 32px 4-tile-deep -- monoliths, raised the 2F larder cabinet as a 48px tower taller than -- the walls, gave the same wall band three different heights -- (8/16/48) on one map -- and sank the whole cabinet bank AND both -- front-door mats into pond lips, because nine tile ids here -- ($04/$14/$22/$23/$32/$33/$38/$48/$57) sit in the engine's -- stale-cache water set. MANSION = { -- one 16px face for every wall course, indoors and out: the rooms' -- north band (80), the interior partition (30) with its white top -- rim (76/77), the doorway lintel over the front door (22/23), the -- east exterior wall the landing runs along (74/75) with its -- junction pieces (72/73 -- 72 is a water trap -- and 88/89), the -- band's feet and corners (90/91/92/93), and the roof's own rim -- and corner blocks (78/79). The roof parapet railing (15 over -- 31, with end caps 42/43 and 33/49) is drawn a full 16px tall, so -- it stays in the same band rather than dropping to `fence`: on an -- open roof a knee-high rail reads as a kerb. 48 and 6/7 are the -- rooftop shed's base course. wall = { 6, 7, 15, 22, 23, 30, 31, 33, 42, 43, 48, 49, 72, 73, 74, 75, 76, 77, 78, 79, 80, 88, 89, 90, 91, 92, 93 }, -- the display cabinets along the north wall of 1F and the chief's -- house: TALL drawings, not deep ones, so each rank collapses onto -- a one-cell-deep box at its drawn height. 34/35 are the shelf -- row of the short cabinets, 40/21 + 56/87 the two rows of the -- tall ones (the pair with the trophy in the glass), 50/51 the -- plinth. Their top row is 38/41, pinned `table` below because -- the mansion's big tables wear the same trim -- the bookcase -- builder adopts it as the rank's CAP, which lands the short -- cabinets at 24px and the tall ones at 32px, exactly their drawn -- heights. 45/46 + 61/62 + 63/47 is 2F's larder cabinet, four -- drawn rows standing free of any wall: 32px and one cell deep -- instead of the 48px tower the detector built. -- Six of these ids are water-fallback traps ($22/$23/$32/$33/$38 -- /$57) -- the whole cabinet bank was a pond. bookcase = { 21, 34, 35, 40, 45, 46, 47, 50, 51, 56, 61, 62, 63, 87 }, -- table height. The long tables in 1F and the chief's house -- (38/39/41 top edge, 54/55/57 body, 60/58/59 the front rail with -- its two legs) and the writing desks on 2F and 3F (36/37/52/53 -- the back edge with the papers and the ball on it, 64/65/66/67 -- the body). The desks' aprons (2/3/85/86 over 18/19) are drawn -- into the WALKABLE cell in front and stay flat floor, which is -- how the artist placed them. -- Known compromise: the rooftop shed on CELADON_MANSION_ROOF is -- drawn with the table's own top and body tiles (38/39/41 over -- five rows of 54/55/57) with a door punched in its base, so it -- comes out a 12px block rather than a shed. Nothing towers there -- any more -- the detector had its east columns at 48px -- and no -- per-tile pin can give one drawing two heights. table = { 36, 37, 38, 39, 41, 52, 53, 54, 55, 57, 58, 59, 60, 64, 65, 66, 67 }, -- the stool at the 2F/3F desk: a whole cell of drawing (2/3 over -- 18/19) sitting in a WALKABLE cell, so flat floor until pinned. -- The 8px standee pool, seat height, as in Red's rooms. stool = { 2, 3, 18, 19 }, -- the potted palms: two cells of drawing (68/69 crown, 8/9 fronds, -- 70/71 stem, 24/25 pot), mostly silhouette, so the THIN standee -- pool -- the same numbers the generic HOUSE entry uses, and the -- same answer every interior plant gets. The detector had them as -- 32px boxes four tiles deep. prop = { 8, 9, 24, 25, 68, 69, 70, 71 }, -- the front-door mats of 1F and the chief's house. Their bottom -- tile is $14, which the engine's stale-cache fallback counts as -- water in every tileset, so the mat -- and the whole cell with it -- -- recessed into a pond lip just inside the door. It is a flat -- rug on the floor. ground = { 4, 20 }, -- Deliberately NOT pinned: the interior checker floor (17), the -- landing's open-air ground (1), the black surround (16, authored -- void), the back and rooftop doors (81-84, walkable and folded -- into their facade), the desk aprons (85/86), and the landing -- edge (5). -- CANNOT be pinned, engine-side: the four staircases (12/13/28/29 -- the rising flight, 10/11/26/27 the sunken one) are in this -- tileset's doorTiles, and Structures' door fold OVERWRITES the -- resolved shape of any door cell whose north neighbour is upright -- -- without checking `authored` -- so a stair_e / stair_down_w pin -- is silently discarded. The indoor flights therefore read as -- doorways folded into the north wall band, which is at least what -- they are (you walk into them from the room). The roof's two -- flights, which stand clear of any wall, come out as a shallow -- 8px lip -- a stairwell mouth, near enough -- and pinning them -- `wall` would be worse: it would plug the openings with a 16px -- block in the middle of the roof. See the report. }, -- Silph Co's 11th floor (the president's office), Bill's house and -- the Pokemon Fan Club -- three rooms that share one tileset and -- almost no furniture. The detector raised Silph's side walls as -- 48px towers (the drawn band is three cell rows deep, so it -- measured the whole column), split the Fan Club's wall band across -- 0/8/16px AND a pond lip, boxed Bill's two transporter drums into -- 48px slabs five tiles deep, and left every chair flat because they -- sit in walkable cells. Six ids here ($14/$1F/$32/$34/$40/$48) sit -- in the engine's stale-cache water set -- including $1F, the main -- FLOOR tile, which sank wherever it shared a cell with $48. INTERIOR = { -- the wall band, one 16px face throughout: the rooms' face-on -- courses (52 upper, 68 lower; 16 in Bill's house and Silph's -- outer band), the courses seen from above along the south and the -- partitions (87 top, 88 bottom), the side walls (89/90), the end -- caps and junction blocks (45/46), the framed Pokemon portraits -- hung in the band (19/20 over 35/36), and the padded bench built -- into the Fan Club's north wall (49/50/51 -- its lower half, -- 65/66/67, is drawn into the walkable cell in front and stays -- flat, the way the artist drew it). -- 93/94 are Silph's CARD KEY door: the block only exists while the -- door is locked (data.field.cardKey swaps it out), so it never -- appears in maps.lua -- but the probe sees it, and unpinned it -- came out 0px/8px in the middle of a 16px wall. -- Bill's pipework belongs here too: the stubs either side of each -- drum (32/48, 37/53) and the run between them (38/54), all drawn -- 16px tall against the band. wall = { 16, 19, 20, 32, 35, 36, 37, 38, 45, 46, 48, 49, 50, 51, 52, 53, 54, 68, 87, 88, 89, 90, 93, 94 }, -- Bill's two transporter drums: a TALL drawing (four rows of -- cylinder plus a base course), not a deep one. The bookcase -- collapse gives each drum one cell of depth at its full 32px -- height instead of the 48px, five-tile-deep slab the detector -- built, and its top face wears the drum's own lid. 7/8/9/10 is -- the lid, 23/24/25/26 and 39/40/41/42 the barrel, 55/56/57/58 the -- footing. bookcase = { 7, 8, 9, 10, 23, 24, 25, 26, 39, 40, 41, 42, 55, 56, 57, 58 }, -- ...and the drums are the reason this tileset turns the shelf -- relief OFF: the collapse here is borrowed for a MACHINE, whose -- light regions are the barrel's own lit face and not panes -- behind a frame. Sinking them would dent the drum. bookcase_relief = false, -- The big OCTAGONAL boardroom table -- the Fan Club's and Silph -- 11F's, the same drawing in both -- half a cell high, and half a -- cell on purpose. A `counter` is ONE band: exactly the drawing's -- bottom row stands up as the front and every row above it rides -- the top face IN DRAWN ORDER. For a table drawn in PLAN that is -- the only class that reproduces the plan; a taller box wears its -- NORTH row's art across the whole top face and smears it. -- -- The octagon itself is cut at TILE granularity, which is the -- finest the mesher has: an authored tile is its own 8x8 column, -- so the bevel is drawn by choosing which tiles rise. Reading the -- Fan Club rows (Silph is the identical shape eight rows further -- down the map): -- row 4 72 74 74 74 74 73 6 tiles wide -- rows 5-8 72 <----- 8 tiles -----> 73 8 tiles wide -- row 9 63 64 64 64 64 81 6 tiles wide -- row 10 75 76 76 75 4 tiles wide -- 72/73 are the north chamfer, 63/81 the south one, 77/78 the -- straight flanks, 74 the north rim and 64 the top itself. 75/76 -- -- the front apron with its two drawn legs -- is pinned so the -- octagon's south edge closes and the legs stand on the front face -- instead of lying painted on the floor; it sits in the walkable -- cell in front of the table, which is the cell a player stands in -- to talk across it, and an 8px apron there reads as standing AT -- the table (the same arrangement as the Center's counter). -- 79 and 82, the OUTER corner of the south bevel, are `ground` -- -- see the ground group. -- -- 91/92, the statue's pedestal, ride the top face here rather than -- standing with the statue: those two ids are ALSO the wall band's -- base blocks where a side wall meets the south course in Silph, -- so six tiles at the foot of Silph's walls sit 8px instead of -- 16px. It is a notch at the foot of a wall the player never -- faces, and the alternatives are worse in both directions -- a -- 16px stub standing in the middle of the boardroom table, or a -- paper cutout standing at the foot of every south wall. -- 40 and 48 are water-fallback traps: unpinned, the table's whole -- north-west cell was a pond, and it dragged the floor tile $1F -- sharing that cell down with it. counter = { 63, 64, 72, 73, 74, 75, 76, 77, 78, 81, 91, 92 }, -- The Pokemon statue standing in the middle of both boardroom -- tables: a per-pixel cutout, ONE voxel deep, standing ON the -- table through the authored-box support rule -- a standee drawn -- directly above an authored box rises from that box's top, which -- is how the gym's bird statues stand on their plinths and the -- potted plant stands on Red's table. 17/18 is the crown and the -- head, 33/34 the face and the top rim of the pedestal it stands -- in; the pedestal proper (91/92) stays `counter` under its feet. -- The four claimed tiles keep rendering as the tabletop they were -- cut out of, so the table is whole underneath. -- `cutout` and not `prop`: the drawing has NO floor margin -- it -- is surrounded on all four sides by the tabletop's own mid grey -- -- and the cutout pool's stricter contract makes mid shades -- background unconditionally, so the tabletop drains away cleanly -- while the black outline, the paint whites and everything they -- enclose survive. Pinned `counter` with the rest of the table -- (what it was) the statue was painted FLAT on the tabletop. cutout = { 17, 18, 33, 34 }, -- Bill's desk and the Silph president's, at table height: 11-14 -- the surface with the terminal and the ball on it, 27-30 the -- front edge. Their aprons (43/44 + 91/92 on the row below) are -- drawn into the WALKABLE cell in front; 43/44 belong to the stool -- there, not to the desk. table = { 11, 12, 13, 14, 27, 28, 29, 30 }, -- and those eight ids are the ONLY `table` in this tileset, so the -- height override is this desk's alone: 8px, the height its apron -- is drawn and the plane the `bills_desk` template stands its top -- on (see `buildings` below). The pin is only the degradation -- path here -- the template claims both placements -- but the two -- must not disagree about where the desk's top is. -- -- `stool` is 5 for the same reason: that is the drawn elevation of -- BOTH seats in this tileset -- rows 11-15, the seat's front edge -- over its legs -- and the height the `club_stool` template stands -- them. Bill's chair and the Fan Club's are different drawings -- above the seat but share tiles 59/60 below it, so they are drawn -- at the same height pixel for pixel; the class default of 8 was -- three voxels over both. Every one of these cells is WALKABLE, -- so this is also where a character sitting on one ends up. heights = { table = 8, stool = 5 }, -- the seats: Bill's desk stool (43/44 over 59/60) and the Fan -- Club's four members' chairs (61/62 over 59/60), a whole cell -- each. All of them sit in WALKABLE cells, so they were flat -- floor until pinned; the standee pool puts them at seat height, -- which is also where a character standing on the cell ends up. -- The Fan Club's four are modelled in full by `club_stool` below -- and these pins are their degradation path; Bill's chair stays a -- standee, stood up as a part of `bills_desk`. stool = { 43, 44, 59, 60, 61, 62 }, -- flat, and pinned flat on purpose. 31 is the rooms' floor tile -- and needs no pin for its 980 walkable placements -- but the -- water test runs per CELL on the engine's own stale set, BEFORE -- any neighbouring pin can help, so the floor tiles sharing the -- Fan Club's and Silph's north-west table cell with $48 sank into -- the pond with it. A pin is the only rule that outranks it. -- 1/2 are the curve of Bill's drums where they meet the floor, -- drawn below the pinned barrel and flat where they lie. -- 79/82 are the OUTER corner of the octagon's south bevel, one -- tile beyond 63/81 on each side. Raised with the rest of the -- table they squared both bottom corners off and left an 8px stub -- standing in the floor a tile away from the table on each side; -- flat they are what they are drawn as -- the table's cast shadow -- where the bevel meets the floor -- and the octagon closes with a -- clean 45 degree step on all four corners. ground = { 1, 2, 31, 79, 82 }, -- Deliberately NOT pinned: the doormats (70/71) and Silph's warp -- pads, stairwells and elevator mouth (3/4, 5/6/21/22, 83-86) are -- walkable and already flat; 47 is the black surround outside the -- building's footprint and the void rule authors it; 69 is the -- shadow course under Bill's drums, drawn into a walkable cell and -- correct flat. }, -- The Cable Club rooms and the Bike Shop (one tileset, three maps). -- COLOSSEUM and TRADE_CENTER are the same 5x4 room with a different -- machine in the middle and a different board on the wall; BIKE_SHOP -- reuses the same wall, floor and counter for a showroom full of -- bicycles. Between them the three maps place every tile. -- -- What was wrong: the Bike Shop's bicycles came out at 0 and 8 -- -- each bike sliced in half at ankle height with its top row missing, -- and the leftmost rack fused into the wall and towered to 32. The -- shop's whole L-shaped counter stood at wall height, a 16px slab -- you could not see over. Both Cable Club rooms lost their stools -- (a walkable cell, so they flattened to floor) and their machine -- came out 0/8/16 in the same object. And the Game Boy link poster -- above the door has $32 in its bottom-left corner, so the poster -- had a pond in it -- the shore-set trap, and TRADE_CENTER's link -- table carries the other one, $48. CLUB = { -- The wall band stays ONE 16px face. 6 is the striped panel, -- 52 the fluted pillar that breaks it every three cells (its -- rounded foot, 53, stands one row lower on the floor and is -- walkable, so it stays flat ground in front of the band). -- Drawn INTO the band and therefore wall as well: the two -- bicycles against the Bike Shop's wall (1/2/3 over 17/18/19, -- exactly two tile rows = exactly the band's height), the Cable -- Club's link poster (48/49/50/51 -- 50 is $32, the shore trap -- that had it recessing to -2), and the Trade Center's pair of -- lit notice boards (63/68/68/69 over 66/67/67/70). -- The bicycles keep their `wall` pin as the degradation path, but -- `mounted` below lifts them off the panel -- see there. wall = { 1, 2, 3, 6, 17, 18, 19, 48, 49, 50, 51, 52, 63, 66, 67, 68, 69, 70 }, -- Counters, half a cell high -- the house rule for anything you -- lean on. The Bike Shop's L: the till run's top (7/8, the -- tileset's own counterTiles) with its inside corner (54), east -- arm (16) and end cap (5), all over the front panel 23/24. 8px -- is one clean band, so the drawn front stands up and the counter -- top stays a top; at 12 or 16 it reads as a wall stub. -- 71/72/73/74 is the TRADE_CENTER link table, which shares that -- same 23/24 front: its surface is drawn from ABOVE (two Game -- Boys lying on it, cables between), so it belongs riding the top -- face, not standing up. 72 is $48, the second shore trap. counter = { 5, 7, 8, 16, 23, 24, 54, 71, 72, 73, 74 }, -- The Colosseum's battle machine: a console drawn face-on, four -- tiles wide and three rows tall, grilled side towers (59/62 and -- 55/58), a dark screen bay (60/61, 56/57) and the two white -- horns that crown it (64/65). 24px is its drawn height, so -- `desk` folds the whole drawing upright as one machine instead -- of the 0/8/16 rubble the detector left. desk = { 55, 56, 57, 58, 59, 60, 61, 62, 64, 65 }, -- The two stools that flank each Cable Club machine: seat 42/43 -- over base 38/39, in every one of the four placements across -- both rooms and nowhere else in the tileset. Their cells are -- walkable, so without a pin they were floor; at seat height a -- character standing on one sits on it. stool = { 38, 39, 42, 43 }, -- The showroom bicycles -- six of them standing on the Bike Shop -- floor, in two columns, each drawn 3 tiles by 2 side-on. A THIN -- standee pool, not `bookcase`: a bike is nearly all air (two -- wheel rings and a frame), and collapsing a rack of them onto a -- one-cell-deep box at full height would trade six bicycles for -- one blank 32px panel wearing a bicycle print. As cutouts they -- segment cleanly -- the drawing has floor margin on three sides -- and its own black outline seals the wheels -- and the standee -- builder's connected-component split gives each bike its own -- feet in its own cell even where a lower bike's handlebar stem -- touches the wheel of the one drawn above it. -- 11/12/14 the saddle and bar row, 27/28/9 the frame and wheels. -- -- Their own pool at TWO voxels rather than `prop`'s five, which is -- the whole reason `bike` exists. The segmentation was never the -- problem -- the mask the detector cuts is a clean bicycle, wheels, -- forks, handlebars and all. Depth was: every stroke of a line -- drawing extruded five voxels closes the gap to its neighbour with -- its own side faces, so off-axis (which is every camera rung but -- flat) the air inside the frame filled in and the showroom's six -- bicycles came out as one dark lump against the wall. At two the -- negative space survives and they read as bicycles again. bike = { 9, 11, 12, 14, 27, 28 }, -- The toolbox and the standing pump beside the shop's south wall -- (29/13 over 21/22), twice. A separate pool from the bicycles -- on purpose, and the thicker one: a toolbox is a deliberate -- object with a body, where a bike is a silhouette. -- -- Kept as the DEGRADATION PATH only. The `bike_shop_toolbox` -- building template (see `buildings.CLUB`) claims these cells and -- models the drawing properly -- a per-pixel standee is the wrong -- primitive for a box, and 10 voxels of it turned every black -- outline pixel into a 10-deep bar. Buildings runs before the -- standee scan, so where the template stamps, this pin never -- fires; without a profile it is still better than the volume -- path. billboard = { 13, 21, 22, 29 }, -- The Bike Shop floor's second checker phase. It is NOT in the -- tileset's walkable list, so the cells it floors resolve by rule -- 4 and it rose as a wall stub -- or, worse, got swept into the -- bicycle beside it and dragged to 8px. It is floor; it is flat. ground = { 30 }, -- THE TWO BICYCLES AGAINST THE SHOWROOM'S NORTH WALL. Same object -- as the six on the floor -- 24x16 of bicycle seen side-on, wheels -- on the floor line -- but drawn INTO the wall band instead of onto -- the floor, which is a different problem entirely: -- -- a class pin resolves a whole 8x8 tile, so `wall` (what these -- carried) paints the bicycle flat on the panel: a green wall -- with a bicycle printed on it, which is what the shop looked -- like; -- and nothing automatic can cut it out either. The panel behind -- it is tile 6's stripe -- a #aaa field ruled with #555 every -- four rows -- and #555 is a flood BOUNDARY, so a silhouette -- flood comes back with three full-width wall stripes welded -- across the bike (rows 3, 7 and 15 of the drawing). Naming the -- background shades instead (prop_bg) cannot work either: the -- bicycle's own basket is drawn in the very #aaa and white the -- wall field uses. -- -- So the silhouette is authored -- but MEASURED, not drawn by hand. -- 6 is the plain panel these three tile columns are painted over, -- and it is perfectly regular, so compositing 6 across the same 3x2 -- grid and flooding the background in through the pixels that still -- MATCH it separates bicycle from wall exactly: 247 pixels, one -- connected component, no stripe left on it and no hole in it. -- That is also why `under` is six 6s -- the wall wears the panel -- the artist drew everywhere else along the same run. -- -- `depth` 2 for the same reason the `bike` pool above is 2, and -- because a family shares a silhouette: these are the showroom's -- bicycles, leaning on the wall rather than standing in the room. -- The slab juts 2 voxels SOUTH of the band, so they stand in front -- of the wall and overhang the walkable cell a little -- which is -- what a bicycle leaning on a wall does. Collision is untouched. -- -- Only BIKE_SHOP places this grid on the club atlas, at tile (1,0) -- and (6,0). The same six tile ids DO pair up in gate.png (both -- Route gate upper floors and all four Safari rest houses), but -- that is a different image and `mounted` is keyed per tileset, so -- the pattern cannot reach them. mounted = { { w = 3, depth = 2, tiles = { 1, 2, 3, 17, 18, 19 }, under = { 6, 6, 6, 6, 6, 6 }, pixels = { ".........XXX............", "..XXXXX.XXXX............", "..XXXXXXXXXX............", "..XXXXXXXXXX............", "..XXXXXXXXXXXXX.........", "..XXXXXXXXXXXXXX........", "..XXXXXXXXXXXXXX........", "..XXXXXXXXXXXXXX..XXX...", ".XXXXXXXXXXXXXXXXXXXXXX.", "XXXXXXXXX..XXXXXXXXXXXXX", "XXXXXXXXX.XXXXXXXXXXXXXX", "XXXXXXXXX.XXXXXXXXXXXXXX", "XXXXXXXXX.XXXXXXXXXXXXXX", "XXXXXXXXX..XXX..XXXXXXXX", ".XXXXXXX....X...XXXXXXX.", "...XXX.....XXX....XXX...", }, }, }, -- Left to the derived default on purpose: -- $0F $1F the main floor checker -> walkable, ground -- $0A $1A the dark slab under the Bike Shop's exit warp -> a -- threshold mat, walkable, flat -- $35 the pillar's rounded foot -> its cell is walkable -- (you walk in front of the pillar), so it lies flat -- against the 16px band, which is what a plinth does -- $26-$29 $2C-$2F the octagon painted on both Cable Club -- floors. Ground markings seen from above, and every -- cell they sit in is walkable, so rule 3 already -- keeps them perfectly flat. ($26/$27 are shared -- with the stool bases above and pinned there; they -- appear nowhere else in either room.) }, -- The S.S. Anne, inside: both cabin decks and their corridors, the -- bow, the kitchen, the captain's room -- and two Kanto houses -- (Cerulean's badge man, Fuchsia's Good Rod fisher) that borrow the -- liner's furniture set. Twelve maps, and SS_ANNE_CAPTAINS_ROOM plus -- SS_ANNE_KITCHEN between them place every tile the group uses. -- -- Everything was wrong here, in every one of the ways indoors goes -- wrong. The wall-touching cabin table and the BED were merged into -- the wall and towered to 32px, so a bunk read as a bank of lockers -- wearing a porthole on top. The corridor wall band measured 24px -- instead of 16. In the two houses the band came out at height 0 -- -- the drawing runs off the top of the map, so the detector had no run -- to measure and the room had no walls at all. Every stool, chair and -- staircase sat in a WALKABLE cell and flattened to floor, so the -- captain's room had no stairs, no chairs and no seat. And the -- barrels' top-left tile is $48, which the engine's stale-cache shore -- set counts as water in every tileset but SHIP_PORT: each barrel had -- a pond dug into its lid. SHIP = { -- The wall band stays ONE 16px face. Blank courses (16), the -- lower trim (18/19), the portholes (2/3), and the band's corner -- pieces where a corridor meets it (32/33 white, 48/49 trim, -- 34/50 the black outer corner). $32 (50) is the shore-set trap: -- unpinned it recesses into a pond lip in the middle of a -- bulkhead, and it drags the whole 16x16 cell down with it, -- because rule 2 judges a cell by its bottom-left tile. -- -- The black rim is wall too, not void: 17 is the band's cap seen -- from above (so the fold tops the bulkhead with it), 21/22 the -- vertical faces that run down both sides of every corridor, 51 -- the ship's south bulkhead, and 5/6/37/38 the four corners of the -- notch each cabin doorway is cut into. Left to the detector -- these came out 8, 16, 24 and 48 in the same room. Only $01 -- -- pure black, the space OUTSIDE the hull -- is left alone: the -- void rule flattens it, which is what darkness should do. -- -- 14/15/30/31 are the cabin door drawn INTO the band (its cell is -- walkable, since the player steps on it to warp, so unpinned the -- door punched a flat hole through the wall). 84/85 are the -- captain's chair BACK, drawn into the band above his seat -- so -- the chair reads as a high-backed swivel chair jutting from the -- wall instead of a separate tower. 45/61 are the bow deck's -- rope rail and 46/47/62/63 its stepped bulwark: the same 16px -- course, so the open deck is fenced at one height. wall = { 2, 3, 5, 6, 14, 15, 16, 17, 18, 19, 21, 22, 30, 31, 32, 33, 34, 37, 38, 45, 46, 47, 48, 49, 50, 51, 61, 62, 63, 84, 85 }, -- Every table in the group, at 12px: the kitchen's three banquet -- tables (twelve tile rows deep), the counter run along the -- kitchen's south wall, the captain's desk, and the writing table -- in the two houses. Corners 9/12, north edge 10, side edges -- 25/28, the surface 44, the plain apron 11 and the drawer front -- 59/60. One 8px band folds up, so the drawn apron stands as the -- front and every row above rides the top face in drawn order -- -- which is how the tableware stays tableware: the plate (26), the -- covered platter (64/65/80/81), the kitchen stove's burner grid -- (53) and the captain's open book (68/69) are all drawn FROM -- ABOVE, so they belong lying on the top face, not standing up as -- cutouts. 59/60 doubles as the chest of drawers at the foot of -- every cabin bunk; 12px puts it a hand above the mattress, which -- is where a bedside chest belongs. table = { 9, 10, 11, 12, 25, 26, 28, 44, 53, 59, 60, 64, 65, 68, 69, 80, 81 }, -- The cabin bunk: a mattress drawn from above, so its art stays on -- the TOP face and it lies low. 70/71 the pillow, 86/87 the -- mattress. (Its drawer end is in `table` above.) bed = { 70, 71, 86, 87 }, -- Seats, in the standee pool: the round stool that appears in -- every cabin, the badge house and the captain's room (7/8 seat -- over 23/24 legs), and the captain's own chair (66/67 seat over -- the same 23/24 base, its back pinned into the wall above). -- Seat height 8 keeps a character standing on the stool's -- (walkable) cell sitting at seat height rather than floating. -- The drawings have real floor margin on all four sides, so the -- black-outline flood eats the checker around them and leaves the -- seat whole. stool = { 7, 8, 23, 24, 66, 67 }, -- The captain's storage rack: three shelf ranks (54 left, 43 -- right) drawn four tile rows tall against the wall. TALL, not -- deep -- the bookcase builder collapses it onto one cell of depth -- at its drawn height, and adopts the row above (9/12, pinned -- `table` as the tabletop corners they also are) as its cap. -- Boxed by the detector it was a 16px stub with the wall beside it -- towered to 24. bookcase = { 43, 54 }, -- The galley barrels -- three down the kitchen's east wall, one in -- the captain's room, one in each house. 72/73 the mouth, 88/89 -- the banded body. 72 is $48, the shore-set trap that had each -- barrel resolving to water at -2. -- -- This is Lt. Surge's trash can REDRAWN PIXEL FOR PIXEL on the ship -- atlas: lay the two masks side by side and the only difference is -- that the gym's floor stripes cross the gym copy's background, -- which the flood keeps and this one has no need of. So it takes -- the same treatment and the same numbers as GYM's can -- see there -- for why the mouth and base ellipses are measured and the height, -- well and taper are authored. -- -- Scanned: six placements on the SHIP atlas and no others -- -- SS_ANNE_KITCHEN (13,5), (13,7) and (13,9) down the east wall, -- SS_ANNE_CAPTAINS_ROOM (4,1), and one each in CERULEAN_BADGE_HOUSE -- and FUCHSIA_GOOD_ROD_HOUSE at (7,7), both of which are ship -- interiors reusing the tileset. Twenty-one more hits are id -- collisions on other atlases and no business of this entry; the one -- worth naming is VERMILION_DOCK, because SHIP_PORT is a near-twin -- of this image -- but its $48/$49/$58/$59 are a hull panel, not a -- barrel (diffed pixel for pixel), so the pin is NOT copied there. can = { 72, 73, 88, 89 }, can_cap = 9, can_base = 4, can_height = 9, can_well = 5, can_taper = 4, heights = { can = 9 }, -- The stairs, both flights, in every map that has them (1F, 2F, -- 3F, B1F and the captain's room). Same two drawings the whole -- game uses, and the warp table says which is which: 41/42/57/58 -- is the light flight that always leads UP a deck, climbing east -- the way its treads step; 39/40/55/56 is the dark stairwell that -- always leads DOWN, sinking westward. Both cells are walkable, -- so unpinned both were flat floor and the decks did not connect. stair_e = { 41, 42, 57, 58 }, stair_down_w = { 39, 40, 55, 56 }, -- Left to the derived default on purpose: -- $01 pure black outside the hull -> void, flat darkness -- $04 $23 deck planking and grating -> walkable, ground -- $0D $1D cabin floor checker -> walkable, ground -- $4A cabin door threshold -> walkable, ground -- $24 $34 the dark slab under the exit warp in the cabins and -- the two houses: a threshold mat with no wall around -- it, walkable, and flat is the honest reading -- $14 the SEA around SS_ANNE_BOW. It is the one tile id -- the stale-cache water set names in every tileset, -- and here that guess is simply RIGHT -- the bow deck -- really does stand in open water, so it is the one -- trap tile in this group that must NOT be pinned. }, -- Vermilion Dock: the quay, the boarding gangway, and the S.S. Anne -- herself moored alongside. One map, and it is the only place in -- the game where a whole VESSEL is drawn as map art rather than as a -- building sprite. -- -- The detector read the liner as a volume and raised her 48px -- -- three cells, taller than she is long is wide -- with her columns -- stepping 48/40/24/0 across the hull, so the drawing was folded -- UPRIGHT and smeared up a lumpy monolith. Both ends of the hull -- fell to 0 instead, and the port bow ($40/$41/$51) sat in a cell -- whose bottom-left tile is open water, so rule 2 sank it to -2 and -- the ship had a hole in her nose. -- -- (This tileset is the one place the engine does NOT count $32 and -- $48 as shore -- Map.lua's NO_SHORE_TILESETS -- because $32 IS the -- gangway here. So the usual shore trap does not apply, and $14 is -- honest open water. Nothing in this entry is dodging a water -- fallback; the whole entry is about the ship.) SHIP_PORT = { -- The hull, every tile of her, as a `roof`: a box wearing its art -- on the TOP face. That is what the drawing IS -- the liner seen -- from above and slightly astern, funnels and boats and deck rail -- on the top rows, hull plating on the bottom two -- so folding it -- upright was always going to smear. 28px of freeboard reads as a -- liner beside a quay at 0 and water at -2 without towering, and -- the side bands crop from each edge tile's own art, so the flank -- the player faces wears the hull plating that is drawn there. -- Rows north to south: bow rail and boat deck (0/2-7/9/11-15), -- superstructure (16-31), midships (32-47), waterline strake -- (48-53 and 61-63 in the stern), hull plating (64-69, 77-79) and -- the boot topping (81-85, 90-93). roof = { 0, 2, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 56, 57, 61, 62, 64, 65, 66, 67, 68, 69, 77, 78, 79, 81, 82, 83, 85, 90, 91, 93 }, -- The quayside crates, a 2x2-tile box each (86/87 lid, 1/80 -- body), stacked two cells deep in all four corners of the dock, -- and the pallet stacks flanking the gangway head (49). A crate -- IS a 16px cube: one course, art folded up the face it shows. -- Unpinned the corner stacks fused into one taller volume. wall = { 1, 49, 80, 86, 87 }, -- The delivery van parked on the north quay: drawn face-on, four -- tiles by two, with clear pavement all round it -- so it takes -- the standing per-pixel cutout with a body (10 voxels), not a -- rectangular block that would swallow the air above its cab. -- 72/73/74/75 the cab and box, 88/89/60/76 the wheels and skirt. billboard = { 60, 72, 73, 74, 75, 76, 88, 89 }, -- Left to the derived default on purpose: -- $0A the quay's paving -> walkable, ground -- $32 $3B the gangway planks -> walkable, ground, so the walk -- from the quay to the warp stays flush at 0 and -- meets the hull's flank rather than climbing it -- $14 open water -> the tileset's own water, -2 -- $3A the shaded strip along the quay's foot. Its cell's -- bottom-left tile is water, so rule 2 puts it at -- water level -- which is correct: it is the dock's -- shadow lying ON the water, and the 2px lip between -- it and the paving is exactly the shoreline the -- water class exists to draw. }, -- The facilities: twenty-one maps off one 96-tile atlas -- Silph Co's -- ten office floors, the four Rocket Hideout basements, the four -- Pokemon Mansion floors, the Power Plant, and the Cinnabar and -- Saffron gyms. One pin therefore has to read right in a laboratory, -- an open-plan office, a burnt mansion and a gym at once; where a -- graphic genuinely means two things the note says which reading won. -- The failures are the usual indoor ones, louder: the detector raised -- whole wall COLUMNS to 48px, stood the lab consoles up as 32px -- cabinets towering over the very band they are drawn INTO, fused -- vertical runs of computer terminals into 48px monoliths, boxed the -- potted-plant rows into one slab wearing leaves on its top face, and -- left both staircases lying flat on the floor. Silph Co's lobby -- island is tile $14 -- the engine's stale-cache water id -- and sank -- into a pond in the middle of the foyer. FACILITY = { -- The wall band stays ONE 16px face: the dark courses (42/58 -- horizontal, 43/44 vertical, 45/46 the top corners, 59/60 the -- bottom caps) and Silph Co's own pale striped band (87/89). A -- north-south run of 43/44 is one continuous drawing, so unpinned -- the detector measured the whole column and raised it to 48. -- -- Everything DRAWN BUILT INTO that band is `wall` too, the -- Center's-healing-console rule, so it reads as equipment jutting -- from the band rather than a separate tower: -- 74/75 the machine's two dials over 76/77 its footed base -- one -- graphic serving the Cinnabar Gym's quiz consoles, Silph Co's -- and the Power Plant's equipment banks and the Mansion's lab -- rigs. Drawn three rows tall under a one-row wall cap, which -- is why the detector called it 32 -- 9/10 screen over 25/26 base: the computer terminal. It is -- ALSO the free-standing maze wall of Rocket Hideout B2F/B3F -- and the terminal rows of the Power Plant hall, and 16 -- its -- drawn height -- is right in every one of them -- 64/80 the Mansion 2F balustrade seen face-on, 65/81 its -- north-south run. 65 repeats down a whole column, so it -- towered exactly like the wall did -- 86/88 the lift doors of Silph Co: a walkable warp cell, but a -- pin is look-only, so the doors stand in the wall band -- instead of lying flat as a mat (the Center does the same -- with its window/warp tile) -- 8/24 and 36/37 the shutters the card-key doors and the -- Cinnabar Gym quiz gates stamp CLOSED at runtime -- (field.cardKeyDoors' blocks $54/$5F/$2D). They are in no -- map's block list, so nothing but this line covers them; the -- detector read them as an 8px stub lying in the doorway wall = { 8, 9, 10, 24, 25, 26, 36, 37, 42, 43, 44, 45, 46, 58, 59, 60, 64, 65, 74, 75, 76, 77, 80, 81, 86, 87, 88, 89 }, -- The tall display cabinet of the Mansion and Silph 3F/8F/9F: cap -- row 40/41 over two ranks of 56/57, one cell wide and drawn FOUR -- rows tall. A tall drawing, not a deep one, so it takes the -- Mart's shelf-rack treatment and collapses onto a one-cell-deep -- box at its full 32px -- as `wall` it flattened into a bench two -- cells deep, which is the shape of its footprint, not the shape -- of the thing. Its base course is the computer terminal's own -- 25/26, listed under `wall` above and therefore shared: that -- stays a 16px block, and reads as the cabinet's plinth. bookcase = { 40, 41, 56, 57 }, -- The grey slab family -- every desk, bench, worktop and service -- counter in the tileset is cut from these seven pieces: 13/14 the -- top corners, 2 the top edge between them, 29/30 the body's side -- edges, 53 its fill, 68/69 the legs, 18 the counter's front panel -- (the tileset's own counterTiles). -- -- `counter` -- 8px, half a cell -- not `table` or `desk`, because -- the drawing is a TOP surface seen from above with one row of -- front elevation at its south end: one clean band folds exactly -- that bottom row (68/69 legs, or 18) up as the front and rides -- every row above it on the top face in drawn order, which is what -- a seven-cell Silph Co bench actually looks like. At 12 or 16 -- the same drawing reads as a wall stub, the failure the Center's -- counters are pinned against. -- -- 13/14 and 29/30 double as the CAP and body of the wall consoles -- (blocks $60/$62/$64/$66/$7F). The benches win the tie on count -- -- 142 block placements across 18 maps against the consoles' 105 -- across 14 -- and the compromise costs the consoles nothing: the -- capped rows sit NORTH of the 16px dial face, so an 8px ledge -- behind a 16px machine is occluded from every southward camera. counter = { 2, 13, 14, 18, 29, 30, 53, 68, 69 }, -- Plants, the thin standee pool, as in every other interior. Two -- drawings: the tall potted palm of Silph Co, the Hideout and the -- Mansion (crown 5/6/21/22 over pot 7/15/23/31, a 1x2-cell -- object), and the gym planter of Cinnabar, Saffron and the -- Mansion (crown 39/47, bowl 55/63, box 61/62). Unpinned the -- detector fused a six-plant row into one box wearing the leaf -- dither as a lid. The crown's checker highlights share the -- floor's shades so the mask drains some of them -- the same -- accepted trade as the Center's bush. prop = { 5, 6, 7, 15, 21, 22, 23, 31, 39, 47, 55, 61, 62, 63 }, -- Both flights UP, both climbing EAST. 3/4/19/78 is the one-cell -- open staircase of the Mansion (1F->2F, 2F->3F) and the Hideout -- (B1F->Game Corner): white treads whose risers step up toward the -- upper right. 90/91 over 67/52 is Silph Co's own stairwell, set -- into the north wall band on every floor -- courses of tread whose -- east ends step back one notch at a time. BOTH cells are -- WALKABLE (19 and 67 are the tileset's warp tiles), so unpinned -- they resolved to flat ground and the steps were painted on the -- floor. Silph's drawing is the one genuinely ambiguous flight in -- the tileset -- read as a west rise it builds a ramp that leaves a -- gap against the east jamb, so east it is, which also makes one -- consistent story out of every up-stair in the group. stair_e = { 3, 4, 19, 78, 52, 67, 90, 91 }, -- The staircase DOWN (11/12/27/28): three treads in a black -- stairwell, shortening and darkening west to east, so the flight -- descends EAST into the dark. One graphic again, for every -- down-stair in the group. (Where the Mansion 3F variant hangs -- directly under the wall band, block $73, the engine's door fold -- claims the cell first -- 27 is one of the tileset's doorTiles -- -- and stands the art up in the band as a doorway. That reads -- fine, and the fold runs after this profile, so it is not -- something a pin can or should undo.) stair_down_e = { 11, 12, 27, 28 }, -- The rubble drifts of the Mansion and the Power Plant (83/84 over -- 54/38): two black-outlined boulders per cell on a plain grey -- ground, tiling wall-to-wall across whole rooms. Drawn ROUND, so -- they take the overworld canopy's archetype -- one voxel hull per -- 16x16 cell carved from the darkest-pixel outline -- which is the -- only class that keeps a repeating field as separate lumps: a -- standee pool would cluster a whole drift into one giant flat -- cutout, and the volume path gave 16px slabs with 48px towers -- wherever a drift touched a wall. cylinder = { 38, 54, 83, 84 }, -- Silph Co 1F's lobby island (tile $14), the cross-shaped dither -- the reception terminals ring. $14 is one of the three ids the -- engine's stale-cache water set claims in EVERY tileset, and it -- is not on this tileset's walkable list, so it fell straight to -- `water` and opened a pond in the middle of the foyer. It is a -- floor-level mat drawn from above: flat. ground = { 20 }, -- Left to the derived defaults on purpose, having been checked: -- 51, the Hideout's black fill, is all-black art, so the void -- rule already flattens it -- which is what a room's interior -- darkness should be -- 32/33/48/49 -- the four quarter-tiles the Hideout's spinner -- arrows and the Saffron/Silph warp diamonds are assembled -- from -- and 94, the Hideout's floor panel, are on the -- tileset's walkable list and come out flat ground unaided -- 1 (the checker floor), 17 (the Mansion's upper-floor boards) -- and 66/82 (the entrance carpet) likewise -- the other two stale-cache water ids, $32 and $48, are never -- placed by any of the twenty-one maps, so only $14 above -- needed the guard }, -- Pokemon Tower's seven floors and Agatha's room (one tileset). -- Every floor is the same octagonal chamber: a ring of wall panels -- ($09/$0A over $19/$1A) cut out of a mid-grey mass ($11), with a -- field of gravestones inside it, and Agatha's room is that chamber -- shrunk. The ring and the mass the detector already reads as one -- 16px course (probed) -- they are listed anyway so the answer is -- authored rather than inferred from a repeat count, and so the -- panels can never fuse into the gravestones that touch them. -- What the detector got WRONG was everything else: the headstones -- came out as 8px stubs with their arched tops dropped, both -- stairwells were flattened by the walkable-cell rule, and the -- potted palms lost their crowns to a 16px box. -- (Nothing here needs pinning against the void rule: the tileset's -- one all-black tile is $47, and no map in the group places it.) CEMETERY = { -- One 16px course: the chamber's wall ring ($09/$0A over -- $19/$1A), the grey mass beyond it ($11) so the room reads as a -- chamber cut into solid stock rather than a fence standing on a -- plain, and Agatha's north band ($20 over $30). wall = { 9, 10, 25, 26, 17, 32, 48 }, -- The reception counter of POKEMON_TOWER_1F -- the only counter in -- the group, and the ROM's own counterTiles for this tileset name -- $12 as exactly that. It is an L that fences the receptionist -- into the south-east corner: the east-west arm drawn face-on -- ($02 the surface over $12 the front panel, eight cells of it) -- meeting the north-south arm drawn from above ($1D/$1E, eight -- tile rows, which the volume path would have towered to 64px). -- The first pass put all four in `wall` and the barrier came out -- a full-height partition with the receptionist hidden behind it -- to the shoulders. Half a cell is what a counter is: she leans -- on it, the drawn surface ($02) rides the top face and the drawn -- panel ($12) folds up the front, and both arms come out the same -- height so the corner turns cleanly instead of stepping. The -- cells stay blocked either way -- pins are look-only. counter = { 2, 18, 29, 30 }, -- The gravestones ($05/$06 over $15/$16): a headstone drawn -- face-on, one per cell, 314 of them across the seven floors and -- Agatha's room. The volume path measured the drawing as its -- bottom row alone and left an 8px stub -- the plinth without the -- stone. `post` is the per-CELL standee pool: each cell is -- extracted on its own as a per-pixel cutout 6 voxels deep, so -- the arched top comes back and a 4x2 block of graves stands as -- eight separate stones instead of one 32px sheet with the back -- row floating above the front (which is what one shared -- billboard cluster would have made of them). The stone's white -- side margins let the background flood in; its own white checker -- band is sealed by the black arch and survives. post = { 5, 6, 21, 22 }, -- The flight UP to the next floor ($03/$04 over $13/$14): real -- rising steps, climbing east the way the risers are drawn (short -- at the west, tall at the east -- the same drawing idiom as Red's -- house). Its collision tile is $13, which IS in the tileset's -- walkable list, so rule 3 had laid the whole flight flat; and its -- south-east tile is $14, the water-fallback trap id -- harmless -- only because the cell's own bottom-left is $13, and pinned here -- so it can never matter. stair_e = { 3, 4, 19, 20 }, -- The flight DOWN ($0B/$0C over $1B/$1C): a sunken stairwell. -- The drawn step edges are high and lit at the WEST and fall away -- dark to the east, so the flight descends eastward -- the mirror -- of Red's bedroom stair. Walkable ($1B) and flattened for the -- same reason as the flight up. stair_down_e = { 11, 12, 27, 28 }, -- The potted palm that flanks Mr. Fuji's shrine on 7F and stands -- in Agatha's room ($27/$2F crown, $37/$3F fronds, $3D/$3E -- planter): a plant, so the THIN standee pool, like every other -- interior plant. It is drawn 24px tall across THREE tile rows, -- which is why the box path dropped its crown row entirely and -- kept a 16px planter; a standee takes the whole drawing at its -- real height. It backs onto the wall ring, and a separate pool -- keeps it from being absorbed into it. prop = { 39, 47, 55, 63, 61, 62 }, -- (Nothing else needs an entry. The tower's floor ($01) and 5F's -- healing pad ($22) are walkable, so rule 3 lays them flat where -- they are drawn; the mass, ring, graves, stairs and palm above -- are every other tile the eight maps place.) }, -- The two Underground Paths (Route 5<->6 north-south, Route 7<->8 -- west-east): one blockset, two maps, and the plainest geometry in -- the game -- a tiled corridor cut out of black. Most of it was -- already right, because the black it is cut from ($10) is solid -- black and the void rule flattens it (`10v00` over every border -- block), and the lattice floor ($0B/$0C) with the diagonal shadow -- strip along its west wall ($15/$18) are walkable and lie flat. -- Two things were not. -- -- The SOUTH rim. The corridor's near wall is drawn as a single 8px -- light line ($02) with black under it, so the volume builder -- measured a one-row drawing and raised half a course -- an 8px -- kerb (`02w08` along the whole bottom row of -- UNDERGROUND_PATH_WEST_EAST) facing a proper 16px far wall -- (`06w16`/`09w16`). Pinned, the corridor closes with one band all -- round. The east and west rim lines ($16/$17) already read 16 -- -- their columns repeat -- and join the same authored course so the -- whole enclosure is one decision. -- -- The STAIRS. $03/$04 over $13/$14 is a real flight drawn in -- profile, treads climbing to the upper right, and it is the warp -- back up to the surface at both ends of both corridors. Its cell -- is walkable, so it resolved to flat ground and the staircase was -- a painting (`03g00 04g00 / 13g00 14g00`). stair_e builds the -- flight the drawing shows, rising east. $14 is also the $14 -- WATER-FALLBACK id: the walkable cell was hiding the trap here -- rather than dodging it, and the pin settles it either way. UNDERGROUND = { wall = { 6, 9, -- $06 over $09, the far wall band 2, -- $02, the near wall's light line 22, 23 }, -- $16/$17, the east and west rims stair_e = { 3, 4, 19, 20 }, -- $03/$04 over $13/$14 -- The blockset also carries the wall's unplaced corner variants -- ($05/$08 north-west, $07/$0A north-east, $11 south-west, $12 -- south-east). Neither map places them; they belong with the -- wall band above if one ever does. }, -- The approach to the Pokemon League: two maps, INDIGO_PLATEAU (the -- forecourt the League itself stands on) and ROUTE_23 (the long -- climb up to it, with its badge-check gates). Everything this -- blockset draws is one piece of architecture -- striated rock -- walls, white pillars, and the bird STATUES that line both the -- avenue and the plaza. 29 of its 73 blocks are never placed, so -- every tile named below really is one of these two maps'. -- -- A statue is built exactly like the badge gyms' (see GYM above): -- one cell of FIGURE ($10/$12 over $28/$29) standing on one cell of -- PLINTH ($15/$16 the cap over $30/$31 the plaque). 47 of them -- -- 12 on INDIGO_PLATEAU, six a side down the avenue, and 35 more -- across ROUTE_23's plaza (blocks $42/$43; the $25/$26 twins that -- stand the same statue on grass are never placed). -- -- What the detector made of them is the bug this entry exists for. -- On the avenue the statues stack with NO gap: the plinth's plaque -- row is drawn directly above the next figure's head, so the -- flood-fill joined all six of a column into ONE region 24 tile rows -- tall, and the volume builder's repeat scan read 32px down one half -- of the drawing and 24px down the other. Each row came out as a -- continuous stepped RIDGE of boxes wearing the statue art folded -- onto its south face -- probed INDIGO_PLATEAU tiles (16,12)-(17,35) -- at 32/24 and (22,12)-(23,35) mirrored. ROUTE_23's plaza statues -- stand alone and fared no better: 24px boxes with the figure's top -- row skipped outright. -- -- Pinned the gyms' way the ridge becomes statues. The plinth is a -- SOLID 16px `wall` block; the figure is a per-pixel cutout 5 voxels -- deep (the thin `prop` pool) that rides the plinth's top face -- through the authored-box support rule and collapses to the -- plinth's SINGLE cell of footprint -- Structures' wall-support case, -- so the base never marches backwards. -- -- The one thing the gyms did not have to deal with: $28/$29 is -- SHARED. The same bird is drawn again at the foot of every white -- pillar, framed there by the pillar's black edge ($25/$26 over that -- same $28/$29, blocks $18/$1B) -- 80 of them, 76 down ROUTE_23 and -- four on INDIGO_PLATEAU (its two outer corners and the pair -- flanking the League's recess). So $25/$26 joins the same pool: -- pinning half a cell would have stood a half-height bird under a -- wall. That in turn is why the pillar itself is pinned -- see the -- last paragraph of `wall`. PLATEAU = { -- ONE 16px course for every piece of masonry here. -- -- $03 is the striated rock face, 2436 placements and the bulk of -- both maps. It already read 16 nearly everywhere, but in the -- columns of INDIGO_PLATEAU's rim that stand over a corner pillar -- the repeat scan came out 24 -- a stagger in the plateau's -- skyline (probed `03w24` at tiles (8,0)-(9,2), (12,0)-(13,2) and -- their two mirrors). Authored, the rim is one course. -- -- $0D/$0F/$0E are the League's outer wall -- top band, face and -- base. The same three tiles draw the Pokemon League's own -- facade, the long walls flanking the avenue, and every -- badge-check gate down ROUTE_23. -- -- $15/$16 + $05/$06 + $30/$31 are the pilaster: cap, shaft, and -- the plaque base. $15/$16 over $30/$31 IS the statue's plinth -- -- the artist drew the same stone twice -- which is why one pin -- serves the gate corners and the statues alike. -- -- $2E/$2F the white pillar shaft and $20/$21 its cap change no -- HEIGHT: they derive 16 already. What the pin buys is -- `authored`, which is exactly what the prop support rule tests. -- Without it a pillar-foot bird finds no support, drops to ground -- level, and leaves a hole punched clean through the pillar -- (probed, shot, then fixed). -- TWO courses (32px) for the masonry that ENCLOSES both maps -- the -- plateau's rim and every wall around the terraces. It is drawn two -- cells tall, which is exactly the height of a statue on its plinth -- (a 16px plinth under a 16px standee), and that is the read: you are -- walking in a walled compound whose wall matches the statues lining -- it, not a room with a 16px skirting. At one course the rim was a -- kerb you appeared to look over. -- -- $03 the striated rock face, $0D/$0F/$0E the League's outer wall -- (top band, face, base -- the same three tiles draw the League's -- facade, the walls flanking the avenue and every badge-check gate -- down ROUTE_23), and $2E/$2F the white pillar shaft with $20/$21 its -- cap. These four groups are the enclosure. cliff = { 3, 13, 32, 33, 46, 47 }, -- THE GATE WALLS, stacked rather than laid out in depth. $0D/$0F/$0E -- (13/15/14 -- top band, face, base) draw the League's facade, the -- walls flanking the avenue and every badge-check gate down ROUTE_23, -- as FOUR tile rows: 13 / 15 / 15 / 14. That is 32px of artwork -- depicting one wall, and at one class per row it built four boxes -- marching north, so the wall was 32px DEEP -- you saw the southmost -- row's face and the rest hid behind it. -- -- `bookcase` collapses the run onto a single one-cell-deep box at its -- full drawn height: bands from the south are base, face, face, top -- band, and the two rows behind are vacated. Same mechanism the -- Mart's back wall uses. -- ...and the PILASTER stacks with it. $05/$06 is its shaft, and it -- is drawn only ever inside a pilaster, so it needs no rule. Without -- this the pale columns stood 16px against a 32px brown wall and -- their top vertices sat a whole course below the wall's crown. bookcase = { 14, 15, 5, 6 }, -- Tile 13 is DUAL-USE and needs resolving per position. It is the -- gate wall's TOP BAND (block $28's first row) and it is also the -- BASE COURSE under a column of rock face (blocks $18/$1A/$1B, last -- row). Pinned `bookcase` outright the second use became a one-row -- rank -- an 8px stub under the rock, 352 of them over both maps. -- -- ABOVE cannot tell them apart, which is what `when_below` is for. -- Scanned over both maps through the engine's own tileAt, the tile -- above a 13 is the rock face $03 for 140 base courses AND for 64 -- gate bands -- so a rule on `above` misfires on those 64 (it did: -- their runs came out 2 and 3 bands instead of 4). BELOW splits it -- exactly: the wall's own face $0F sits under the top band and under -- nothing else, 336 against 352. So 13 defaults to `cliff` and is -- promoted where the face is drawn beneath it. -- -- 14 and 15 need no rule: 14 only ever sits under 15, 15 only ever -- under 13 or 15. when_below = { [13] = { { below = { 15 }, class = "bookcase" } }, -- The pilaster's CAP ($15/$16) is the same stone as the statue's -- plinth top -- the artist drew it twice -- so it too resolves per -- position. Scanned over both maps: a cap with the shaft $05/$06 -- beneath it is a pilaster (76 of them) and one with the plaque -- base $30/$31 beneath it is a statue's plinth (47). Default -- `wall`, promoted here, so the plinth keeps its single course and -- the statue standing on it still totals the 32px the wall is. [21] = { { below = { 5 }, class = "bookcase" } }, [22] = { { below = { 6 }, class = "bookcase" } }, }, -- The other two ends of the same pair of drawings, keyed the other -- way round. A pilaster is capped at BOTH ends, so its lower cap has -- the shaft ABOVE it (8 placements); and the plaque base $30/$31 is a -- pilaster's foot when the shaft is above it (68) but a statue's -- plinth bottom when the cap $15/$16 is (47). when_above = { [21] = { { above = { 5 }, class = "bookcase" } }, [22] = { { above = { 6 }, class = "bookcase" } }, [48] = { { above = { 5 }, class = "bookcase" } }, [49] = { { above = { 6 }, class = "bookcase" } }, }, -- The vacated rows behind a collapsed wall take the cell ABOVE the -- run rather than the default hidden floor: here that is more rock -- face on ROUTE_23 and the plateau's paving or grass on INDIGO_ -- PLATEAU, so the wall reads as set INTO the terrace instead of -- standing in front of a trench of synthesized ground. bookcase_backfill = "above", -- and no shelf relief: what the collapse carries here is MASONRY, -- whose courses are the wall itself rather than panes set behind -- a frame. Sinking them cut a stepped bevel into the League's -- walls and the pilasters (shot before it was turned off). bookcase_relief = false, -- ONE course, and it must stay one: $15/$16 + $05/$06 + $30/$31 is -- the pilaster -- cap, shaft, plaque base -- and $15/$16 over $30/$31 -- IS the statue's plinth, the artist having drawn the same stone -- twice. Raising it would carry every statue standee up to 48px and -- break the very match the cliff height was chosen for. -- $05/$06 is NOT here: it moved to `bookcase` above, and a tile -- listed in two groups resolves by whichever `pairs` order wins -- -- half the pilasters kept the shaft as `wall`, which broke the run -- and left their caps as isolated 8px stubs. One group per tile. wall = { 21, 22, 48, 49 }, -- The statues, and the same bird at the pillar feet. Black-outline -- segmented: the outline and everything it encloses stay, the sky -- and the paving around them flood away. prop = { 16, 18, 40, 41, 37, 38 }, -- Round drawings, one voxel ball per 16x16 cell -- the treatment -- the overworld's canopies and Celadon's hedge take. -- -- $07/$08 over $17/$18: the seven canopies planted on pillar tops -- along ROUTE_23 (blocks $44/$45; the $0F block that tiles four of -- them together is never placed). Boxed, the canopy art smeared -- down the whole pillar column beneath it. -- -- $2A/$2B over $22/$1D: the boulders strewn across ROUTE_23's -- middle terrace (blocks $02/$13/$16), one per cell and NOT -- walkable. As boxes they sat flat enough to look painted onto -- the path; as balls they read as the obstacles they are. cylinder = { 7, 8, 23, 24, 29, 34, 42, 43 }, -- The Route 23 sign, one cell, block $48's only placement. -- Unpinned it probed `09w00 0Aw00 / 19w08 1Aw08` -- an 8px stub -- with its board skipped. Same thin plate on a stick every other -- outdoor sign gets. signpost = { 9, 10, 25, 26 }, -- The Route 22 gate's roof, drawn from ABOVE and filling -- ROUTE_23's last two block rows ($3D the tiling, $3E/$44 its -- edges, $40/$41 the corners). Art on the TOP face -- the way -- SHIP_PORT's hull is pinned -- rather than folded up a 16px kerb. -- It stands past the map's last walkable row (you warp to -- ROUTE_22_GATE before you reach it), so this is a tidy-up rather -- than a fix. roof = { 61, 62, 64, 65, 68 }, -- The ground painted where a pinned figure's cell used to be: -- $23, the pale paving both maps are floored with. It is also the -- white the pillars are drawn in, so the cell a pillar-foot bird -- vacates reads as more pillar -- where the neighbour vote left a -- BLACK hole, having nothing to elect (all four neighbours of that -- cell are wall). On the avenue and the plaza the statues' own -- cells simply keep the paving they stand on. prop_ground = { [16] = 35, [18] = 35, [40] = 35, [41] = 35, [37] = 35, [38] = 35 }, -- Deliberately NOT pinned: -- -- $14, the water -- 1446 placements, the pond on ROUTE_23's middle -- terrace -- and its bank shading $32/$33/$1F. $14 and $32 are -- two of the three stale-cache water ids the trap is named for, -- but here they are honestly water: TILEANIM_WATER animates $14, -- the pond is real, and $32/$33/$1F are drawn in the TOP half of -- water cells as the waterline itself, so the cell rule dropping -- them to -2 is what the art means. Left to fall through to the -- engine's water set. ($48, the third trap id, is not in this -- atlas at all -- it stops at $45.) -- -- $0B/$0C over $1B/$1C, the barred doors: the Pokemon League's two -- and Victory Road's two. They are the tileset's own doorTiles, -- so the door fold already stands them upright in the facade; -- probed 16px identically before and after this entry. -- -- $23/$2C/$2D are in the walkable list outright, and $45 is the -- tileset's grassTile, which derives its own standing-tuft pin. -- -- The Victory Road entrance is a `buildings` template -- (victory_road_gate, at the bottom of this file): 36x6 tiles at -- ROUTE_23 (0,58), and its ends are built out of $25/$26/$28/$29 -- and $15/$16/$05/$06. Buildings claim their tiles before any of -- the above can reach them -- probed `b` class over all 216 of -- them, unchanged by this entry. }, }, -- Buildings whose whole sprite is voxelized band by band (lib/Buildings.lua, -- the pipeline in assets/docs/buidling_to_voxel/). A building is matched by its -- exact tile grid -- the drawings are catalogued in assets/docs/buildings/ -- so -- every map that places the same art gets the same model: one entry -- voxelizes Red's house, Blue's house, Bill's, the Copycat's and the two -- Fuchsia houses alike. -- -- Only the BAND TABLE is authored here, because only it needs a human to -- read the drawing. Everything measurable is measured off the pixels: -- the silhouette, the taper rate (which IS the roof's slope), the eave -- height, and every window and doorway (a non-black region its own black -- frame seals off). Fields: -- -- tiles the tile-id grid that identifies the building, rows of the -- 8px tile atlas, north row first -- roofRows how many rows off the top are drawn as TOP-FACING roof; -- the rest of the drawing is the facade, seen face-on -- roofBack rows laid along the north rim, one row per voxel of depth -- roofFront rows laid along the south rim (the fascia and eave course) -- roofCycle the row run the middle depth cycles; its length must be -- the roof texture's period or the courses will not line up -- slab roof thickness in voxels -- frontEave how far the roof overhangs the facade -- ledge a band that juts two voxels past the walls (an awning), -- or nil -- seal sides the drawing runs off rather than closing with its -- own outline, as a string of n/s/e/w; the silhouette -- flood does not seed there. Only needed by a drawing -- trimmed flush to its art -- one whose base course is a -- row of brick rather than the black threshold every other -- building stands on. Omit it unless the fill says -- otherwise: sealing a side the drawing does NOT run off -- swallows the terrain beside it. -- -- Nothing here describes the roof's SHAPE, because nothing needs to: the -- topmost drawn row of each column is the elevation profile, so a drawn -- taper becomes a slope and a roof drawn from straight above comes out -- level. That is why the flat-roofed civic block and its sixteen -- relatives -- every Center and Mart, the gyms and gates, the department -- store and Silph Co -- share one band table below, differing only in -- their tile grids. The sloped ones fall into three groups just as -- cleanly, by the depth of the roof band: 16 rows (Red's house), 32 -- (Oak's lab) or 64 (the museum). Before authoring a new one, check -- whether its roof band is already pixel for pixel one of those. -- -- assets/docs/buildings/B26 is deliberately absent. Its drawing has no -- black base course -- it ends on a row of light brick -- so the -- silhouette flood, which comes in from the border through light pixels, -- climbs up through the wall and hollows it out. Every other building -- is sealed by a black threshold row. Reading it would mean changing -- the flood itself, which every model here depends on, for one scenery -- placement. buildings = { OVERWORLD = { -- assets/docs/buildings/B30: the POKEMON TOWER -- the one drawing -- in the catalogue that STRADDLES A MAP BOUNDARY. Twelve of its -- twenty rows stand in ROUTE_10's last rows (the 64px purple roof -- band plus two window courses); the other eight -- five more -- courses and the base with the door -- are on LAVENDER_TOWN, -- where the tower begins at tile row 0. Modelled per map it came -- out as two buildings, one per half. -- -- `topRows` composites ROUTE_10's twelve rows ABOVE the matched -- grid, so the model is built from the COMPLETE twenty-row drawing -- -- 96px of facade under the real 64px roof -- while placement -- still matches only the eight Lavender rows. Its `claimOnly` -- twin below claims the ROUTE_10 rows and stamps nothing, so the -- roof half does not also stand as its own building. -- -- BOTH COME FIRST IN THIS LIST ON PURPOSE. The tower's upper -- twelve rows are `gabled_block_6x6` tile for tile -- the artist -- drew the top of the tower as an ordinary six-cell block -- so -- that template matches at ROUTE_10 (24,132) too. Placement is -- first-claim-wins (see Buildings.build), so claiming here before -- the generic block reaches it is what keeps the second tower from -- being stamped behind this one. -- -- The 13-id last row is kept from the first attempt: the bare -- 12-wide body grid is B14's lower two-thirds tile for tile, and -- the extra id stops this template stamping inside -- `flat_block_6x6`'s three placements (`matches` walks a row to -- its own length, while `read` composites only #tiles[1] columns, -- so a 13th id constrains placement without entering the drawing). { id = "pokemon_tower", topRows = { { 5, 6, 83, 83, 83, 83, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 34, 34, 34, 34, 34, 34, 34, 34, 40, 41 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, }, tiles = { { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 79, 17 }, }, roofRows = 64, roofBack = 8, roofFront = 8, roofCycle = { 8, 31 }, slab = 4, frontEave = 4, ledge = nil, }, -- the tower's roof half, where it actually stands on ROUTE_10: -- claimed flat so the drawing does not ALSO fold up as a building -- behind the modelled tower (see topRows above) { id = "pokemon_tower_top", claimOnly = true, tiles = { { 5, 6, 83, 83, 83, 83, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 34, 34, 34, 34, 34, 34, 34, 34, 40, 41 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, }, }, -- assets/docs/buildings/B07: the two-storey gabled house. Coursed cap over -- a gable wall, an awning with its double black underline, then the -- ground floor with the door. 7 placements, Red's and Blue's among -- them. Course rhythm: a dark line every 4 rows. { id = "gabled_house", tiles = { { 5, 6, 7, 7, 7, 7, 8, 9 }, { 21, 22, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 34, 10, 10, 40, 41 }, { 92, 23, 23, 23, 23, 23, 23, 93 }, { 15, 34, 11, 12, 10, 10, 34, 31 }, { 78, 26, 27, 28, 26, 26, 26, 79 }, }, roofRows = 16, roofBack = 7, roofFront = 9, roofCycle = { 5, 8 }, slab = 4, frontEave = 4, ledge = { 24, 31 }, }, -- assets/docs/buildings/B31: Oak's lab. The same architecture with a roof -- band twice as deep -- the extra rows are DEPTH, not height, so the -- lab is a bigger footprint under the same storey. Its cross-hatch -- roof texture repeats every 8 rows, and it has no awning: the band -- that would be one is the roof's own eave course. { id = "oaks_lab", tiles = { { 5, 6, 83, 83, 83, 83, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 10, 10, 75, 75, 10, 10, 10, 40, 41 }, { 15, 34, 34, 34, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 11, 12, 10, 10, 10, 10, 10, 31 }, { 78, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B03: the flat-roofed commercial block -- -- Celadon's diner, hotel, chief's house and prize room, the Bike -- Shop, the Fan Club, Mr. Psychic's, the Underground Path entrances. -- 15 placements, the most of any voxelized drawing. The lattice -- field is drawn from straight above, so the measured taper is flat -- and the whole band is depth under one level roof; the eave course -- is the roof's own south rim, lab-style, no awning. Lattice period -- 8, the lab's rhythm again. { id = "flat_commercial", tiles = { { 76, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 11, 12, 75, 75, 75, 31 }, { 78, 26, 27, 28, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B05: every Pokemon Center in the game -- (Celadon, Cerulean, Cinnabar, Fuchsia, Lavender, Pewter, -- Saffron, Vermilion, Viridian, Mt Moon, Rock Tunnel). B03's -- block with the POKe sign hung beside the door; the sign is -- too wide to be a pane, so it stays flush. { id = "pokecenter", tiles = { { 76, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 11, 12, 66, 67, 75, 31 }, { 78, 26, 27, 28, 74, 74, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B06: every Poke Mart (Cerulean, -- Cinnabar, Fuchsia, Lavender, Pewter, Saffron, Vermilion, -- Viridian). The Center's twin, MART on the sign. { id = "pokemart", tiles = { { 76, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 11, 12, 68, 69, 75, 31 }, { 78, 26, 27, 28, 74, 74, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B02: the plain 4x4 block: one window -- course over blank brick and no door. 15 placements, scenery -- in every city bar the Celadon Mart roof stair. { id = "flat_block_4x4", tiles = { { 76, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B08: the same block two cells deeper, -- 6 placements, all scenery. { id = "flat_block_4x6", tiles = { { 76, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B13: the 6x4 scenery block, 4 -- placements. { id = "flat_block_6x4", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B14: the 6x6 scenery block, 3 -- placements. { id = "flat_block_6x6", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B27: the 8x4 scenery block, one -- placement on Route 11. { id = "flat_block_8x4", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B09: the wide storefront: Celadon's -- Game Corner, the Pokemon Mansion, Cinnabar Lab, the Safari -- Zone gate and Fuchsia's meeting room. { id = "game_corner", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 75, 75, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 11, 12, 10, 10, 75, 75, 75, 31 }, { 78, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B15: Celadon Mansion and the Route 6 -- and Route 12 gates. { id = "celadon_mansion", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 75, 75, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 11, 12, 10, 10, 75, 75, 75, 31 }, { 78, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B18: the Route 2 gate, and the museum's -- east entrance beside it in Pewter. The museum HALL itself is -- B24 below, a different drawing with a sloped roof. { id = "route_2_gate", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 11, 12, 75, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 27, 28, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B29: Fuchsia Gym, the block with GYM -- on the sign. { id = "fuchsia_gym", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 34, 47, 63, 34, 10, 10, 10, 31 }, { 15, 75, 75, 75, 34, 34, 34, 34, 75, 75, 75, 31 }, { 15, 75, 11, 12, 10, 10, 10, 10, 75, 75, 75, 31 }, { 78, 26, 27, 28, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B28: the Route 5 underground-path -- gate. { id = "route_5_gate", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 75, 75, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 11, 12, 10, 10, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B21: the Route 22 league gate, the -- widest of the family at 12 cells. { id = "route_22_gate", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 75, 75, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 11, 12, 10, 10, 75, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B25: the Power Plant. { id = "power_plant", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 75, 75, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 11, 12, 10, 10, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B22: Celadon's department store: six -- window courses over the MART sign. { id = "celadon_mart", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 75, 75, 10, 10, 75, 75, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 11, 12, 10, 10, 11, 12, 10, 10, 68, 69, 75, 31 }, { 78, 26, 26, 26, 27, 28, 26, 26, 27, 28, 26, 26, 74, 74, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B20: Silph Co. Twelve cells of plot -- and ten courses of windows under the same roof band, so it -- stands as the tallest thing in Kanto. { id = "silph_co", tiles = { { 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 77 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 90, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 90 }, { 92, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 93 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 75, 75, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 11, 12, 10, 10, 75, 75, 75, 75, 75, 75, 75, 31 }, { 78, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B24: the Pewter museum's hall, and the only -- building in the family with a SLOPED roof: the same 2:1 taper the -- lab and Red's house are drawn with, over a roof band twice the -- lab's depth. The drawing repeats its whole lattice-and-course -- motif -- rows 8..31 again at 32..55 -- which is what fixes the -- cycle at 24 rather than the bare lattice's 8: the drawing proves -- the period. The last band (rows 56..63) is the roof's fascia, -- wider than the wall it covers, so it stays in the roof band and -- lands on the south rim. { id = "museum", tiles = { { 5, 6, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 40, 41 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 75, 75, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 11, 12, 10, 10, 75, 75, 75, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 27, 28, 26, 26, 26, 26, 26, 79 }, }, roofRows = 64, roofBack = 8, roofFront = 8, roofCycle = { 8, 31 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B10: the gym. Cinnabar, Pewter, -- Vermilion and Viridian wear this drawing, and so does the -- Fighting Dojo next door to Saffron's. Oak's lab's roof band -- exactly, tile for tile, over a facade with GYM on the sign. { id = "gym", tiles = { { 5, 6, 83, 83, 83, 83, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 10, 34, 47, 63, 34, 10, 10, 40, 41 }, { 15, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 11, 12, 10, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 27, 28, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B16: the big-city gym: Celadon, -- Cerulean and Saffron. Two cells wider than the standard -- gym, and it carries the GYM sign twice. { id = "gym_large", tiles = { { 5, 6, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 10, 34, 47, 63, 34, 34, 47, 63, 34, 10, 10, 40, 41 }, { 15, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12, 10, 31 }, { 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 28, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B01: the commonest drawing in the -- game at 19 placements, and every one of them scenery: a -- gabled block with two window courses and no door. Red's -- house's roof band, tile for tile, but no awning under it. { id = "gabled_block_4x3", tiles = { { 5, 6, 7, 7, 7, 7, 8, 9 }, { 21, 22, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 10, 10, 10, 40, 41 }, { 15, 34, 34, 34, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 31 }, { 78, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 16, roofBack = 7, roofFront = 9, roofCycle = { 5, 8 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B04: the little 4x2 cottage, 12 -- placements and nearly all of them somebody's home: Mr -- Fuji's, the Cubone house, Bill's grandpa's, the Name -- Rater's, the Viridian school house, the Route 8 underground -- path. { id = "gabled_cottage", tiles = { { 5, 6, 7, 7, 7, 7, 8, 9 }, { 21, 22, 23, 23, 23, 23, 24, 25 }, { 37, 38, 11, 12, 10, 10, 40, 41 }, { 78, 26, 27, 28, 26, 26, 26, 79 }, }, roofRows = 16, roofBack = 7, roofFront = 9, roofCycle = { 5, 8 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B17: the wide 6x2 house: Cerulean's -- badge, trade and trashed houses. { id = "gabled_house_wide", tiles = { { 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 9 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 11, 12, 35, 10, 10, 35, 10, 10, 40, 41 }, { 78, 26, 27, 28, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 16, roofBack = 7, roofFront = 9, roofCycle = { 5, 8 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B11: the 6x2 scenery block, 5 -- placements, no door. { id = "gabled_block_6x2", tiles = { { 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 9 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 34, 35, 10, 10, 35, 10, 10, 40, 41 }, { 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 16, roofBack = 7, roofFront = 9, roofCycle = { 5, 8 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B34: the 4x2 scenery block, one -- placement in Fuchsia. { id = "gabled_block_4x2", tiles = { { 5, 6, 7, 7, 7, 7, 8, 9 }, { 21, 22, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 34, 10, 10, 40, 41 }, { 78, 26, 26, 26, 26, 26, 26, 79 }, }, roofRows = 16, roofBack = 7, roofFront = 9, roofCycle = { 5, 8 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B33: the Route 5 day care. { id = "daycare", tiles = { { 5, 6, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 24, 25 }, { 37, 38, 10, 10, 10, 10, 40, 41 }, { 15, 34, 34, 34, 34, 34, 34, 31 }, { 15, 10, 10, 10, 11, 12, 10, 31 }, { 78, 26, 26, 26, 27, 28, 26, 79 }, }, roofRows = 32, roofBack = 7, roofFront = 8, roofCycle = { 5, 12 }, slab = 4, frontEave = 4, ledge = nil, }, -- assets/docs/buildings/B26: the Route 10 scenery block, -- structurally the museum's twin -- Oak's lab's roof band, -- and its rows 8..31 repeat at 32..55 exactly as the museum's -- do. It needs `seal` because its drawing has no black base -- course: it ends on a row of light brick, and unsealed the -- flood climbs in from the south border through the mortar -- and hollows the wall out (72% of the sprite survives -- instead of 95%, in 65 pieces instead of 1). { id = "gabled_block_6x6", tiles = { { 5, 6, 83, 83, 83, 83, 83, 83, 83, 83, 8, 9 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 56, 18, 18, 18, 18, 18, 18, 18, 18, 56, 25 }, { 21, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25 }, { 37, 38, 34, 34, 34, 34, 34, 34, 34, 34, 40, 41 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, { 15, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 31 }, }, roofRows = 64, roofBack = 8, roofFront = 8, roofCycle = { 8, 31 }, slab = 4, frontEave = 4, ledge = nil, seal = "s", }, }, FOREST = { -- assets/docs/buildings/B12: the Safari Zone rest houses -- -- Center, East, North, West and the Secret House. A -- corrugated roof over a plank facade; its stripe repeats -- every 5 rows, not the OVERWORLD lattice's 8. { id = "safari_rest_house", tiles = { { 8, 9, 9, 9, 9, 9, 9, 12 }, { 24, 25, 25, 25, 25, 25, 25, 28 }, { 40, 41, 42, 43, 1, 1, 41, 44 }, { 56, 41, 58, 59, 41, 41, 41, 60 }, }, roofRows = 17, roofBack = 5, roofFront = 3, roofCycle = { 5, 9 }, slab = 4, frontEave = 4, ledge = nil, }, }, DOJO = { -- F01: the starter-ball table in Oak's lab (one placement in the -- game: OAKS_LAB cell 6,3) -- the first FURNITURE through the -- band pipeline, and the first drawing whose plot is smaller than -- its grid. Its 24 rows read: 0-15 the tabletop seen from above -- (black rim, white highlight course, grey field); 16-18 the top -- slab's own front edge, black/#555/black -- which is exactly -- what the rim treatment paints, so slab = 3 and those rows fold -- into the roof band instead of extruding under it; 19-21 the -- base band, corner feet and the inset dark panel between them. -- -- The legs stand on open FLOOR: the measured ground line lands -- two rows short of the grid (see Buildings measure), and `depth` -- keeps the plot to the blocked cell row -- the grid's third row -- is the walkable cell the player faces the table from, matched -- so the flat leg art is claimed off the floor, not so the model -- stands on it. 16 top rows onto a 16px plot map 1:1: roofBack -- covers the whole depth, nothing cycles, and roofCycle is -- unreachable behind it. The Poke Ball sprites ride the `table` -- pin's height (VoxelScene.groundAt reads the collision tile, not -- this model), so the tileset entry above overrides that height -- to the 6px this drawing actually stands. { id = "lab_table", tiles = { { 41, 59, 59, 59, 59, 42 }, { 78, 57, 57, 57, 57, 79 }, { 88, 89, 89, 89, 89, 90 }, }, roofRows = 19, roofBack = 16, roofFront = 0, roofCycle = { 2, 13 }, slab = 3, frontEave = 0, ledge = nil, depth = 2, }, -- F02: the computer desk on the lab's west side (OAKS_LAB cell -- 0,1) -- the one DESK-SET template: the pipeline's region -- classification at PART granularity (see Buildings -- deskSetModel). The desk is the sibling lab table (fascia rows -- 16-18, base 19-21); on it stand a monitor over its keyboard -- (left), a computer tower over a keyboard and mouse (middle), -- and a sheet of paper LYING FLAT (right). Upright parts anchor -- their drawn bottom row to the desk's top plane and wear their -- own drawn tops as lids; flat parts lie one voxel proud at -- drawn row = depth row -- the same 1:1 the tabletop itself is -- drawn with. The roof fields are inert (roofRows = 0 keeps the -- recess scan over the whole drawing, which is what sinks the -- monitor's screen and the tower's slots). Same drawing, same -- grid, stands in the Hall of Fame on the GYM atlas -- -- registered there below. { id = "lab_computers", tiles = { { 91, 92, 93, 94 }, { 54, 55, 85, 95 }, { 88, 89, 89, 90 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 2, desk = { fascia = { 16, 18 }, base = { 19, 21 } }, parts = { { kind = "upright", x = { 2, 13 }, top = { 0, 2 }, facade = { 3, 10 }, depth = 4 }, -- the monitor { kind = "flat", x = { 1, 13 }, rows = { 11, 14 } }, -- keyboard { kind = "upright", x = { 14, 21 }, top = { 0, 3 }, facade = { 4, 10 }, depth = 6 }, -- the tower { kind = "flat", x = { 14, 21 }, rows = { 11, 14 } }, -- keys+mouse { kind = "flat", x = { 22, 30 }, rows = { 1, 14 } }, -- the paper }, }, -- F03: the empty north table beside it (OAKS_LAB cell 2,1): the -- starter table's band table verbatim on a grid two tiles -- narrower. { id = "lab_table_small", tiles = { { 41, 59, 59, 42 }, { 78, 57, 57, 79 }, { 88, 89, 89, 90 }, }, roofRows = 19, roofBack = 16, roofFront = 0, roofCycle = { 2, 13 }, slab = 3, frontEave = 0, ledge = nil, depth = 2, }, }, POKECENTER = { -- F04: the PC in every Center's northeast corner (11 -- placements; the Indigo Plateau lobby's twin is registered -- under MART below). The lab desk-set read again: a Mac-style -- unit drawn face-on -- white top band (rows 0-3), bezel, screen -- and drive slot (4-14) -- standing at the back of a low desk -- whose front face is rows 20-23; the drawn top around the unit -- is WHITE, which is what `lid` carries. The keyboard rows 17-19 -- are drawn below the desk's 16px top span, so the flat part's -- `z` puts it at the desk's front edge. The old billboard pins -- for these tiles (66/70/82/86, desk 9/88) stay as the -- degradation path -- the claim neutralizes them wherever this -- template stamps. { id = "center_pc", tiles = { { 66, 70 }, { 82, 86 }, { 9, 88 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 2, desk = { fascia = { 20, 21 }, base = { 22, 23 }, lid = "white" }, parts = { { kind = "upright", x = { 2, 13 }, top = { 0, 3 }, facade = { 4, 14 }, depth = 6 }, -- the unit { kind = "flat", x = { 2, 13 }, rows = { 17, 19 }, z = 13 }, -- keyboard }, }, -- F05: the healing machine behind the counter -- two 4x4-tile -- variants, 24 placements between them (a pair in every Center, -- cells (1,0):(2,1) and (6,0):(7,1), plus the Indigo Plateau -- lobby's pair under MART below). The variants differ only in -- the east flank: the west machine has the control keyboard -- there (7/13, scan "40,58,59,40;40,74,75,40;72,76,77,7; -- 72,6,22,13" -- 12 placements), the east machine mirrored -- hoses (73, scan "...;72,76,77,73;72,6,22,73" -- 12). -- -- The FULL drawing is claimed now: the corners are the striped -- wall band (40), the flanks the machine's own equipment -- -- hoses and a keyboard ATTACHED to the cabinet, not furniture -- standing free (their standee pins above stay as the -- degradation path). What no class can split is a wall-height -- cabinet with a monitor perched on its front top edge, drawn -- across two map rows because it towers over the 16px band -- behind it, which the volume path can only read as more wall. -- -- Read off the pixels (absolute grid x0..x31): -- rows 15-31, x8..x23 the CABINET's front face, 16 wide, 17 -- tall: black front-top edge with vent notches -- (15), white top rail (16), black panel in a -- white frame (17-28), white rail / light plinth / -- black ground line (29-31). `desk.x` bounds the -- desk to the middle columns. -- rows 6-14, x8..x23 the cabinet's TOP FACE seen from above -- -- not a second-story facade: a white expanse -- with a lit west strip (x9) and a shaded east -- strip (x22) wrapping the monitor. Its 9 rows -- plus the front edge row 15 ARE the cabinet's -- depth: 10, z 16..25 against the wall. -- `desk.top` lays the band flat as the lid; where -- the monitor's drawing occludes it, the lid -- continues the nearest strip (the drawing's own -- pixels). -- rows 1-13, x10..x21 the MONITOR: black back rim (1) and -- white cap (2-3) seen from above -- depth 4 -- -- then bezel, screen and control strip (4-13) -- face-on, 10 tall, at the cabinet top's front -- (the drawn base edge 13 is one band row up from -- the front strip 14): z 20..23. The screen -- interior (x13..x18, rows 6-8) sinks one voxel -- via `inset` -- the pane rule applied by hand, -- because `panes = false` blocks the global pass. -- rows 16-31, x0..x7 the HOSES (tile 72 stacked): one 8-row -- motif per map row, and the two stacked motifs -- are two hoses in DEPTH -- the drawn row band is -- the depth band, and each motif's own rows are -- its elevation WITHIN that band, exactly the -- potted plants' stacked-cell rule. So both -- hoses hug the floor: a horizontal run off the -- cabinet's side (rows 24-26, x3..x7 -> heights -- 5..7) over a shaded drop landing ON the floor -- (rows 27-31, x2..x7 -> heights 0..4) -- all -- measured, the drawn extent maps 1:1 with no -- continuation. `box` parts at z 18 and z 24, 3 -- deep; both wear the LOWER motif's rows (the one -- drawn at its true elevation; the upper motif is -- the same atlas tile, pixel-identical). -- rows 16-31, x24..x31 west variant: the KEYBOARD (7/13), a -- key grid with its cable at the north end and a -- bar down the east edge -- TOP-VIEW art, 16 rows -- = 16 depth rows. A `flat` part mounted on the -- cabinet's side at COUNTER level (`at` 8, the -- counters' own 8px band -- the one number -- top-view art cannot state, pinned to the room's -- work surface), 3 thick, top face wearing the -- drawn art. The dark dashes east of it (x30-31) -- are its cast shadow on the floor: background. -- East variant: mirrored hoses (runs x24..x28, -- drops x24..x29), same rows and z slots. -- rows 0-15 elsewhere wall stripes and the machine's cast -- shadow -- BACKGROUND, the same standing as the -- potted plants' floor. The `wall` element keeps -- the band solid over the back map row, full grid -- width: a 16-tall, 16-deep block cycling the -- drawing's own stripe unit (x0, rows 0-3), what -- the neighbouring cells' wall pins render. -- -- `depth = 4` is BOTH map rows: the back row is the wall's plot, -- the front row the machine's own. `panes = false`: the front -- panel seals DARK behind LIGHT (a black panel in a white -- frame), the opposite polarity to the pane rule, so the global -- recess pass would sink the frame and leave the panel proud. { id = "center_heal_machine_w", tiles = { { 40, 58, 59, 40 }, { 40, 74, 75, 40 }, { 72, 76, 77, 7 }, { 72, 6, 22, 13 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 4, panes = false, wall = { h = 16, depthPx = 16, x = 0, cycle = { 0, 3 } }, desk = { x = { 8, 23 }, fascia = { 15, 16 }, base = { 17, 31 }, z = 16, depthPx = 10, top = { 6, 14 } }, parts = { { kind = "upright", x = { 10, 21 }, top = { 1, 3 }, facade = { 4, 13 }, z = 20, depth = 4, inset = { x = { 13, 18 }, rows = { 6, 8 } } }, -- the monitor { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 18, depth = 3 }, -- N hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 18, depth = 3 }, -- N hose drop { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 24, depth = 3 }, -- S hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 24, depth = 3 }, -- S hose drop { kind = "flat", x = { 24, 29 }, rows = { 16, 31 }, z = 16, at = 8, thick = 3 }, -- keyboard shelf }, }, { id = "center_heal_machine_e", tiles = { { 40, 58, 59, 40 }, { 40, 74, 75, 40 }, { 72, 76, 77, 73 }, { 72, 6, 22, 73 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 4, panes = false, wall = { h = 16, depthPx = 16, x = 0, cycle = { 0, 3 } }, desk = { x = { 8, 23 }, fascia = { 15, 16 }, base = { 17, 31 }, z = 16, depthPx = 10, top = { 6, 14 } }, parts = { { kind = "upright", x = { 10, 21 }, top = { 1, 3 }, facade = { 4, 13 }, z = 20, depth = 4, inset = { x = { 13, 18 }, rows = { 6, 8 } } }, -- the monitor { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 18, depth = 3 }, -- NW hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 18, depth = 3 }, -- NW hose drop { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 24, depth = 3 }, -- SW hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 24, depth = 3 }, -- SW hose drop { kind = "box", x = { 24, 28 }, rows = { 24, 26 }, z = 18, depth = 3 }, -- NE hose run { kind = "box", x = { 24, 29 }, rows = { 27, 31 }, z = 18, depth = 3 }, -- NE hose drop { kind = "box", x = { 24, 28 }, rows = { 24, 26 }, z = 24, depth = 3 }, -- SE hose run { kind = "box", x = { 24, 29 }, rows = { 27, 31 }, z = 24, depth = 3 }, -- SE hose drop }, }, }, MART = { -- F04 again: the Indigo Plateau lobby's PC (cell 15,7) -- the -- MART tileset shares the POKECENTER atlas, so this is the same -- drawing tile for tile. Same part table as the POKECENTER entry -- above. { id = "center_pc", tiles = { { 66, 70 }, { 82, 86 }, { 9, 88 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 2, desk = { fascia = { 20, 21 }, base = { 22, 23 }, lid = "white" }, parts = { { kind = "upright", x = { 2, 13 }, top = { 0, 3 }, facade = { 4, 14 }, depth = 6 }, -- the unit { kind = "flat", x = { 2, 13 }, rows = { 17, 19 }, z = 13 }, -- keyboard }, }, -- F05 again: the Indigo Plateau lobby has the Centers' healing -- machine pair too -- the west-variant grid at (5,4):(6,5) and -- the east at (10,4):(11,5), verified by region dump -- and its -- MART tileset shares the POKECENTER atlas, so these are the -- same drawings tile for tile. Same part tables as the -- POKECENTER entries above. { id = "center_heal_machine_w", tiles = { { 40, 58, 59, 40 }, { 40, 74, 75, 40 }, { 72, 76, 77, 7 }, { 72, 6, 22, 13 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 4, panes = false, wall = { h = 16, depthPx = 16, x = 0, cycle = { 0, 3 } }, desk = { x = { 8, 23 }, fascia = { 15, 16 }, base = { 17, 31 }, z = 16, depthPx = 10, top = { 6, 14 } }, parts = { { kind = "upright", x = { 10, 21 }, top = { 1, 3 }, facade = { 4, 13 }, z = 20, depth = 4, inset = { x = { 13, 18 }, rows = { 6, 8 } } }, -- the monitor { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 18, depth = 3 }, -- N hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 18, depth = 3 }, -- N hose drop { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 24, depth = 3 }, -- S hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 24, depth = 3 }, -- S hose drop { kind = "flat", x = { 24, 29 }, rows = { 16, 31 }, z = 16, at = 8, thick = 3 }, -- keyboard shelf }, }, { id = "center_heal_machine_e", tiles = { { 40, 58, 59, 40 }, { 40, 74, 75, 40 }, { 72, 76, 77, 73 }, { 72, 6, 22, 73 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 4, panes = false, wall = { h = 16, depthPx = 16, x = 0, cycle = { 0, 3 } }, desk = { x = { 8, 23 }, fascia = { 15, 16 }, base = { 17, 31 }, z = 16, depthPx = 10, top = { 6, 14 } }, parts = { { kind = "upright", x = { 10, 21 }, top = { 1, 3 }, facade = { 4, 13 }, z = 20, depth = 4, inset = { x = { 13, 18 }, rows = { 6, 8 } } }, -- the monitor { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 18, depth = 3 }, -- NW hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 18, depth = 3 }, -- NW hose drop { kind = "box", x = { 3, 7 }, rows = { 24, 26 }, z = 24, depth = 3 }, -- SW hose run { kind = "box", x = { 2, 7 }, rows = { 27, 31 }, z = 24, depth = 3 }, -- SW hose drop { kind = "box", x = { 24, 28 }, rows = { 24, 26 }, z = 18, depth = 3 }, -- NE hose run { kind = "box", x = { 24, 29 }, rows = { 27, 31 }, z = 18, depth = 3 }, -- NE hose drop { kind = "box", x = { 24, 28 }, rows = { 24, 26 }, z = 24, depth = 3 }, -- SE hose run { kind = "box", x = { 24, 29 }, rows = { 27, 31 }, z = 24, depth = 3 }, -- SE hose drop }, }, }, GYM = { -- F02 again: the Hall of Fame's recording machine is the lab's -- computer desk drawing, tile for tile, on the GYM atlas (one -- placement: HALL_OF_FAME cell 4,1). Same part table as the DOJO -- entry above. { id = "lab_computers", tiles = { { 91, 92, 93, 94 }, { 54, 55, 85, 95 }, { 88, 89, 89, 90 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 2, desk = { fascia = { 16, 18 }, base = { 19, 21 } }, parts = { { kind = "upright", x = { 2, 13 }, top = { 0, 2 }, facade = { 3, 10 }, depth = 4 }, -- the monitor { kind = "flat", x = { 1, 13 }, rows = { 11, 14 } }, -- keyboard { kind = "upright", x = { 14, 21 }, top = { 0, 3 }, facade = { 4, 10 }, depth = 6 }, -- the tower { kind = "flat", x = { 14, 21 }, rows = { 11, 14 } }, -- keys+mouse { kind = "flat", x = { 22, 30 }, rows = { 1, 14 } }, -- the paper }, }, }, CLUB = { -- F06: the Bike Shop's OPEN TOOLBOX -- BIKE_SHOP cells (6,6) and -- (7,7), and nowhere else in the game (2 placements). -- -- The drawing looks down INTO the box: what fills its middle is not -- a face but the inside of the tray, with a wrench lying in it, and -- the lid standing open on the right. That is why every solid -- treatment fails it. As a `billboard` (what these tiles carried) -- the whole 16x16 went up as one 10-voxel per-pixel slab -- the -- extruded picture in its pure form, a black monolith wearing the -- drawing as a decal. Reading the middle as a cabinet FRONT and -- extruding that is the same mistake one level down: it puts a wall -- where the opening is. An open box has to be hollow, so `tray` -- builds four walls, a floor slab and AIR between them. -- -- The bands, and they measure out exactly (8 depth rows for a -- one-tile-row plot): -- row 4 the FAR rim, black across the back wall -> z 0 -- rows 5-10 the tray's inside, seen from above, with the -- wrench lying across it -- drawn row = depth row, -- six rows for six rows -> z 1-6 -- row 11 the near wall's INNER face, in shadow -- row 12 the near rim, black right across the box -> z 7 -- rows 13-15 the near wall's outer face, seen face-on: a light -- panel between its black rim and its black foot, -- so the wall stands 4 voxels and the rim is its top -- -- `x` is the box's outer span and `inner` the opening's, so the -- one-column difference on each side IS the wall. x12 is left out -- of both on purpose: the #555 at x11-x12 on rows 13-15 is the 3/4 -- shear of the right wall, which un-projecting simply removes -- -- the wall is where the plan says it is, not where the projection -- slides it to. `floor = 0` puts the tray's bottom one voxel thick, -- leaving three voxels of open box above it. -- -- The LID is an upright part riding the rim, hinged on the right -- and standing up: 12 tall as drawn, spanning the box's whole depth -- (8) and 4 thick, which is the black outline plus the two columns -- of white body the drawing gives it. It overhangs east of the -- hinge, which is what a hinged lid standing open does. { id = "bike_shop_toolbox", tiles = { { 29, 13 }, { 21, 22 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depthPx = 14, tray = { top = { 4, 11 }, front = { 12, 15 }, x = { 2, 11 }, inner = { 3, 9 }, floor = 0 }, parts = { { kind = "upright", x = { 11, 14 }, top = { 0, 0 }, facade = { 0, 11 }, z = 0, depth = 14 }, -- the open lid }, }, }, MANSION = { -- F05: the TALL display cabinet, the one with the trophy behind -- its glass -- CELADON_CHIEF_HOUSE cells 3,0 and 4,0 and -- CELADON_MANSION_1F cell 2,2 (3 placements). Its 32 rows read -- like every band table's: 0-8 the cabinet top seen from above -- (black rim, white highlight courses along the north and west, -- grey field, the front corner shaded at row 8); row 9 the top's -- own black front edge -- which is what the rim treatment paints, -- so slab = 1 and that row folds into the roof band instead of -- extruding under it; 10-31 the front face: the trophy in its -- dark display opening, the nameplate under it, then the two -- panelled doors of the base. The contents come off the pixels, -- not the band table: the trophy, the plate and both door panels -- are non-black regions the drawing seals behind its own black -- frame, so the measured recess pass sinks each of them a voxel -- and the frames stay proud. Nine drawn top rows over a 32px -- plot, so the rims map 1:1 -- the drawn front-corner shading -- lands one voxel behind the front edge -- and the uniform field -- cycles between. Both cell rows of the plot are BLOCKED and -- both are cabinet drawing, so D is the whole grid: the rank is -- built into the room's north wall, and its front stands flush -- with the short case's beside it. 23 voxels tall. { id = "mansion_trophy_case", tiles = { { 38, 41 }, { 40, 21 }, { 56, 87 }, { 50, 51 }, }, roofRows = 10, roofBack = 8, roofFront = 2, roofCycle = { 2, 7 }, slab = 1, frontEave = 0, ledge = nil, }, -- F06: the SHORT book case standing beside it -- the same -- cabinet on a grid one tile row shorter (CELADON_CHIEF_HOUSE -- cells 2,0 and 5,0, CELADON_MANSION_1F tiles 2,5 and 6,5; 4 -- placements). Identical top band, identical panelled base; -- only the display opening is shorter, a shelf of books where -- the tall one has the trophy. Same band numbers as F05 -- -- which is what makes the pair read as one line of furniture -- -- and 15 voxels tall against the tall one's 23, exactly the 8 -- rows of drawing between them. The grid must carry the 38/41 -- cap row: {34,35} over {50,51} alone also stands on -- CELADON_MANSION_2F, where it is the bottom of a taller -- two-shelf bank and not this drawing at all. The 8px of wall -- behind the cap is not part of the cabinet and keeps its own -- `wall` pin. { id = "mansion_bookcase", tiles = { { 38, 41 }, { 34, 35 }, { 50, 51 }, }, roofRows = 10, roofBack = 8, roofFront = 2, roofCycle = { 2, 7 }, slab = 1, frontEave = 0, ledge = nil, }, -- F07: the long table in the middle of the chief's house -- (CELADON_CHIEF_HOUSE cell 2,3), the lab table's read at four -- cells wide and two deep. Rows 0-23 are the tabletop seen from -- above; 24-26 are the top slab's own front edge, -- black/#555/black, and row 27 the #555 shadow that closes it -- -- exactly what the rim treatment paints, so slab = 3 and rows -- 24-27 fold into the roof band. That leaves 28-30 as the base, -- the same three rows the lab table's is, and the two tables -- stand the same 6 voxels: row 28 the apron running the whole -- width, 29-30 the end legs under it. The legs stop one row -- short of the grid, so the measured ground line lands there and -- the model does not float. Both cell rows of the plot are -- blocked, so D is the whole grid: the 24 drawn top rows map 1:1 -- from the north rim and the field's own rows cycle for the last -- 8. The `table` pin these tiles keep stays 12px -- it is -- shared with the 2F/3F writing desks and the rooftop shed, and -- nothing rides this table -- so it is only the degradation -- path, neutralized wherever this template stamps. { id = "mansion_long_table", tiles = { { 38, 39, 39, 39, 39, 39, 39, 41 }, { 54, 55, 55, 55, 55, 55, 55, 57 }, { 54, 55, 55, 55, 55, 55, 55, 57 }, { 60, 58, 58, 58, 58, 58, 58, 59 }, }, roofRows = 28, roofBack = 24, roofFront = 0, roofCycle = { 2, 23 }, slab = 3, frontEave = 0, ledge = nil, }, }, HOUSE = { -- F08: the dining table of the generic town house -- 18 -- placements, every home's cells (3,3):(4,4), Blue's and the -- Daycare among them -- the chief's long table (F07 above) at two -- cells wide, the same read to the row. Rows 0-23 are the rounded -- tabletop seen from above (black rim, white highlight course, -- grey field, #555 east rim); 24-26 the slab's own front edge, -- black/#555/black, and 27 the #555 apron shadow that closes it, -- folded into the band; 28-30 the base -- the apron's black -- underrun and the corner legs -- stopping one row short of the -- grid, so the measured ground line keeps the model on its plot. -- The same 6 voxels the whole table family stands. The `table` -- pins stay as the degradation path, neutralized where this -- stamps; the schoolhouse's half-width table with its book and the -- trashed house's ransacked corner are different grids and keep -- theirs. { id = "house_table", tiles = { { 38, 39, 39, 41 }, { 54, 47, 47, 57 }, { 54, 47, 47, 57 }, { 60, 58, 58, 59 }, }, roofRows = 28, roofBack = 24, roofFront = 0, roofCycle = { 2, 23 }, slab = 3, frontEave = 0, ledge = nil, }, -- F10: the town house's BOOKCASE -- the commonest piece of -- furniture in the game at 58 placements across three drawings, -- and the piece this family was really for: pinned `desk` it was a -- 24px box with a flat front and the books PAINTED on it. Band for -- band it is the Celadon display cabinet (F05/F06 under MANSION) -- on a different atlas, and it takes those numbers unchanged: rows -- 0-8 the top seen from above (black rim, white highlight courses -- along the north and west, grey field, the front corner shaded at -- row 8); row 9 the top's own black front edge -- which is what the -- rim treatment paints, so slab = 1 and that row folds into the -- roof band instead of extruding under it; 10-31 the front: two -- shelves in their dark openings over the cupboard's two panelled -- doors. Every book, bowl and door panel is a non-black region the -- drawing seals behind its own black frame, so the measured pane -- pass sinks each one a voxel and the frames stand proud of them -- -- the relief the `bookcase` class now carries too, arrived at the -- same way. -- -- Nine drawn top rows over a 32px plot: the rims map 1:1 (the drawn -- front-corner shading lands one voxel behind the front edge) and -- the uniform field cycles between. BOTH cell rows of the plot are -- blocked and both are cabinet drawing, so D is the whole grid -- -- the case is built into the room's north wall. 23 voxels tall, -- one under the `desk` pin it replaces and exactly the Celadon -- trophy case's stand; the `desk` pins stay as the degradation -- path, neutralized wherever this stamps. -- -- This drawing carries books and a bowl on each shelf: 36 -- placements, the west end of eighteen homes. { id = "house_bookcase_bowls", tiles = { { 38, 41 }, { 14, 15 }, { 14, 15 }, { 30, 31 }, }, roofRows = 10, roofBack = 8, roofFront = 2, roofCycle = { 2, 7 }, slab = 1, frontEave = 0, ledge = nil, }, -- F10 again: its twin at the east end, books on both shelves -- 22 -- placements, and the only one of the two that Cerulean's trashed -- house also puts at the west end. { id = "house_bookcase_books", tiles = { { 38, 41 }, { 48, 49 }, { 48, 49 }, { 30, 31 }, }, roofRows = 10, roofBack = 8, roofFront = 2, roofCycle = { 2, 7 }, slab = 1, frontEave = 0, ledge = nil, }, -- F09: the stool at every one of those tables (94 placements on -- this tileset) -- the first template with NO base piece. The -- drawing is one object, a round seat on legs, drawn MID-CELL over -- its own floor (rows 0-4 are the room behind it), and no band -- split fits that: a roof band starts at the drawing's top row. -- So it is a desk-set of exactly one upright part anchored to the -- floor: rows 5-10 the seat seen from above (its lid), row 11 the -- seat's own front edge, 12-15 the legs with the floor showing -- between them, which the per-pixel facade cut keeps open. The -- drawing measures 7 deep (six seat rows plus the front edge at -- drawn row = depth row); the shipped stool is grown two voxels -- past that north AND south (z 3..13, developer-tuned against the -- in-game read), with `stretch` mapping the seat band over the -- deeper lid instead of smearing its last row. `panes = false`: -- a stool has no windows, and the pane rule would sink the legs' -- lit faces behind their own outlines. The 5-voxel stand is the -- drawn elevation, and the tileset's `heights` above pins the -- `stool` ride height to it, so whoever sits here sits ON the -- seat; the old stool standee pins stay as the degradation path. { id = "house_stool", tiles = { { 2, 3 }, { 18, 19 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, panes = false, parts = { { kind = "upright", x = { 2, 13 }, top = { 5, 10 }, facade = { 11, 15 }, z = 3, depth = 11, stretch = true }, -- the stool }, }, }, REDS_HOUSE_1 = { -- F08 again: Red's and the Copycat's ground-floor dining table -- (cells (3,4):(4,5) of both maps) -- the house table on the -- reds_house atlas, with two differences the fields absorb. -- -- Its tabletop field stops at row 22 and row 23 is the top's own -- #555 south rim, which roofBack = 24 would lay MID-TABLE as a -- dark stripe: back stops at 23 and the field cycles from there -- (the drawn rim's place at the south edge is under the rim -- treatment's own black, like every sibling's). -- -- And the POTTED PLANT is drawn standing on the tabletop (rows -- 5-15, x10..x21, tiles 40/55/56 with the cutout pool's 54/57 -- beside them). It stays the cutout standee it has always been: -- `keep` leaves its tiles unclaimed so the pin and its standee -- survive, `scrub` replaces its pixels with the field shade so the -- model tops out as the plain surface it sits on, and `support` -- states the model's 6-voxel top plane so the standee stands ON -- the modelled tabletop (Structures reads it off the claim; a -- plain claim's h = 0 supports nothing). { id = "reds_house_table", tiles = { { 38, 39, 40, 41 }, { 54, 55, 56, 57 }, { 44, 42, 42, 43 }, { 60, 58, 58, 59 }, }, roofRows = 28, roofBack = 23, roofFront = 1, roofCycle = { 2, 22 }, slab = 3, frontEave = 0, ledge = nil, scrub = { { 10, 5, 21, 15 } }, keep = { 40, 54, 55, 56, 57 }, support = 6, }, -- F10 again: Red's and the Copycat's bookcase pair, cells (0,0) -- and (1,0) of both maps (4 placements). The same object as the -- town house's, one shelf of each of its two drawings -- 48/49 -- books above, 34/35 below -- and the same band numbers; see HOUSE -- above for the read. { id = "reds_bookcase", tiles = { { 38, 41 }, { 48, 49 }, { 34, 35 }, { 50, 51 }, }, roofRows = 10, roofBack = 8, roofFront = 2, roofCycle = { 2, 7 }, slab = 1, frontEave = 0, ledge = nil, }, -- F09 again: the stools around it (10 placements across Red's and -- the Copycat's ground floors), pixel for pixel the house -- tileset's drawing. Same part table; see HOUSE above. { id = "house_stool", tiles = { { 2, 3 }, { 18, 19 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, panes = false, parts = { { kind = "upright", x = { 2, 13 }, top = { 5, 10 }, facade = { 11, 15 }, z = 3, depth = 11, stretch = true }, -- the stool }, }, }, INTERIOR = { -- F0x: Bill's desk, and the Silph president's -- one drawing, two -- placements (BILLS_HOUSE cell 1,4 and SILPH_CO_11F cell 10,12, -- both found by the scan and nothing else). The whole 4x4-tile -- block is one designed unit, but this template deliberately takes -- only the desk's own two cells. -- -- What the 16 drawn rows are: the TABLETOP seen from above, the -- lab table's pattern tile for tile -- black rim, a white -- highlight course inside it, grey field -- over a 16px plot, so -- they map 1:1 and nothing cycles. Standing on it, and drawn INTO -- that top view the way lab_computers' objects are: a terminal -- (screen head over a keypad panel, rows 3-13) and the ball -- (rows 1-13). Drawn row = depth row on a top view, so each part's -- `z` is where the drawing puts it: the head's front row is 8, the -- keypad picks up at 9, and the ball's front row is its drawn -- bottom. Only the two DEPTHS and how much of each blob is lid -- rather than face are authored -- the projection cannot state -- either. -- -- Why the grid stops at two rows. This drawing's front face is its -- APRON, and the artist drew the apron into the WALKABLE cell in -- front (43/44 + 91/92) -- exactly where the lab table's fascia and -- base are. But 43/44 is also the upper half of the CHAIR pushed -- up to the desk (43/44 over 59/60, pinned `stool` in the tileset -- section above), and a template claims whole TILES: reading the -- apron would take the chair's back with it and leave a backless -- stub in both rooms. So the apron stays with the chair, `plane` -- authors the desk's height instead, and the body under the lid is -- synthesized in the drawing's own shades (the band table's rim -- treatment -- a shaded box closed by the outline at the floor). -- 8px is not a taste number: it is the apron's own drawn row count -- and the `table` height these tiles are already pinned to, so the -- desk stands where the degradation path stood it. { id = "bills_desk", tiles = { { 11, 12, 13, 14 }, { 27, 28, 29, 30 }, { 43, 44, 91, 92 }, { 59, 60, 31, 31 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, depth = 4, -- the desk's own plot is its two cells; the grid runs on because -- its apron and the CHAIR share tiles 43/44 desk = { fascia = { 16, 18 }, base = { 19, 23 }, depth = 2 }, parts = { -- the notes: two sheets lying on the desk, so PAPER -- one -- voxel proud at drawn row = depth row, and nothing raised { kind = "flat", x = { 2, 15 }, rows = { 3, 7 } }, -- the keyboard: a real slab, not a print on the desk. Its -- keys are drawn from ABOVE so they ride the top face across -- its depth, and its drawn bottom frame row stands as the -- front edge { kind = "upright", x = { 4, 15 }, top = { 8, 12 }, facade = { 12, 13 }, z = 8, depth = 6 }, -- the cord: the kinked dark run the drawing puts between the -- keyboard's top-right corner and the computer's left corner. -- Raised to the keyboard's own height so it reads as a cable -- spanning them rather than a scuff on the desk { kind = "upright", x = { 16, 19 }, top = { 8, 8 }, facade = { 8, 9 }, z = 8, depth = 2 }, -- the computer: drawn in 2:1 ISOMETRIC, turned 45 degrees to -- the map -- see the `iso` branch in buildParts. `plan` = rx -- makes its footprint a SQUARE turned 45, so from directly -- above it is the cube the drawing depicts and not the slab -- the 2:1 would otherwise build { kind = "iso", x = { 19, 30 }, rows = { 1, 13 }, plan = 6, z = 9 }, -- the chair pushed up to the desk, drawn into the walkable -- cell in front. It stands on the FLOOR, not on the desk, so -- its rise is the whole plane back down; two voxels deep -- because it is a chair, and `inside` cuts it per pixel, so -- this is the thin slab the `stool` standee was -- the desk -- claiming tiles 43/44 for its apron is what makes the -- template owe it { kind = "upright", x = { 2, 13 }, top = { 20, 21 }, facade = { 22, 31 }, rise = -8, z = 22, depth = 10 }, }, }, -- F09 once more: the Pokemon Fan Club's four members' chairs, -- drawn round the boardroom table -- POKEMON_FAN_CLUB cells (1,3), -- (1,4), (6,3) and (6,4), and nowhere else in the game. -- -- A DIFFERENT drawing from the house stool -- its seat field -- carries a one-pixel white margin where the house's carries two -- -- but the same object band for band: rows 5-10 the seat seen -- from above (its lid), row 11 the seat's own front edge, 12-15 -- the legs with the floor showing between them. Its elevation -- rows are PIXEL-IDENTICAL to the house drawing's, so it takes -- that part table unchanged, growth and all: z 3..13, `stretch` -- mapping the seat band over the deeper lid, `panes = false` so -- the pane rule does not sink the legs' lit faces. -- -- Rows 11-15 come from tiles 59/60, which this drawing SHARES -- with Bill's chair (43/44 over 59/60, modelled as a part of -- `bills_desk` above). That is why the tileset's `stool = 5` -- height override is right for both seats rather than a special -- case for this one: they are drawn at the same height because -- they are drawn with the same pixels. -- -- Listed after `bills_desk` although neither grid is a subgrid of -- the other (that grid has 43/44 over 59/60, this one 61/62), so -- the order is free and the bigger, more specific grid keeps -- first claim. { id = "club_stool", tiles = { { 61, 62 }, { 59, 60 }, }, roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 }, slab = 0, frontEave = 0, ledge = nil, panes = false, parts = { { kind = "upright", x = { 2, 13 }, top = { 5, 10 }, facade = { 11, 15 }, z = 3, depth = 11, stretch = true }, -- the stool }, }, }, }, }