mirror of
https://github.com/DramaticShape/DramaticShapeVoxelMod.git
synced 2026-08-12 15:50:52 +02:00
4905 lines
273 KiB
Lua
4905 lines
273 KiB
Lua
-- 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[<id>] 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,
|
|
-- the little trees (Celadon Gym's garden, the overworld's cuttable
|
|
-- tree): the round hull squashed front to back, 16px of drawn
|
|
-- elevation like every other one-cell tree drawing
|
|
sapling = 16,
|
|
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
|
|
--
|
|
-- The cuttable tree ($2D/$2E/$3D/$3E, the four tiles Cut deletes)
|
|
-- takes the same hull SQUASHED: it is Celadon Gym's little tree
|
|
-- redrawn pixel-for-pixel on this atlas (same 146/256 silhouette,
|
|
-- only canopy highlight texels differ), so the two must stay one
|
|
-- model -- the scraggly canopy revolves into a gapped ball, the
|
|
-- 2-4px trunk into a thin round column, the root flare into a
|
|
-- round mound. It used to sit in the `prop` pool as a 5-voxel
|
|
-- standee; see GYM's sapling entry for the reading and for what
|
|
-- sapling_squash does. Scanned: the 2x2 grid
|
|
-- occurs 32 times on this atlas across the towns and routes, and
|
|
-- per-tile counts equal the grid count (32 hits for $2D alone),
|
|
-- so no stray occurrence renders as a lone hull. The same four
|
|
-- ids form grids on FOREST (8, Safari Zone ground art), HOUSE,
|
|
-- MANSION, SHIP_PORT and REDS_HOUSE_2 -- different drawings, id
|
|
-- collisions, none of this entry's business. Cut itself only
|
|
-- swaps the map block to plain grass, so the pin never sees a
|
|
-- cut stump.
|
|
cylinder = { 42, 43, 58, 59, 64, 65, 80, 81 },
|
|
sapling = { 45, 46, 61, 62 },
|
|
sapling_squash = 50,
|
|
-- 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 tree $2D/$2E/$3D/$3E moved to the cylinder hull
|
|
-- above)
|
|
-- the ground painted under the claimed tree cells, by tile id:
|
|
-- the tree 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 },
|
|
-- Celadon's three little trees ($40/$41 canopy over $50/$51
|
|
-- trunk): a scraggly canopy over a 2-4px trunk flaring into a
|
|
-- round root mound. Every drawn row states its own width, which
|
|
-- is exactly what the hull revolves -- the canopy turns into a
|
|
-- ball with its drawn gaps kept, the trunk into a thin round
|
|
-- column, the mound into a round foot. They used to sit in the
|
|
-- `prop` pool ("a trunk is not round"), but the standee rendered
|
|
-- as the whole 16x16 cell extruded, background and all -- the
|
|
-- extruded picture -- and the trunk IS round; the hull reads it
|
|
-- right. The same drawing is the overworld's cuttable tree (see
|
|
-- OVERWORLD's sapling entry); one drawing, one model.
|
|
--
|
|
-- sapling_squash 50 is the one AUTHORED number and the only knob
|
|
-- taste moves: the percent of its revolved depth every chord
|
|
-- keeps. A full revolve (100) assumes the drawing's width is
|
|
-- also its depth, which is honest for the hedge balls and
|
|
-- boulders in the `cylinder` pool above but not for a tree --
|
|
-- the trunk is a stick, the crown is more air than wood, and at
|
|
-- full width the tree filled a whole cell of depth and read as a
|
|
-- boulder wearing bark. 50 halves it to an ellipse in plan;
|
|
-- the model stays round in section and centred on the cell.
|
|
-- The height is NOT authored: the class's 16 (see the `heights`
|
|
-- table at the top of this file) is the drawn elevation, which
|
|
-- is also the model's top plane, so anything riding a tree cell
|
|
-- lands right.
|
|
-- Scanned: the 2x2 grid occurs 3 times on this atlas and only
|
|
-- in CELADON_GYM -- cells (2,4), (7,5), (5,7) -- and per-tile
|
|
-- counts equal the grid count (3 hits for $40 alone), so no
|
|
-- stray occurrence renders as a lone hull. DOJO shares gym.png
|
|
-- and places none, so the pin is not copied there.
|
|
sapling = { 64, 65, 80, 81 },
|
|
sapling_squash = 50,
|
|
-- 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. (Celadon's trees $40/$41/$50/$51 lived here
|
|
-- too until they moved to the sapling hull above.)
|
|
prop = { 2, 56, 18, 19 },
|
|
-- 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 Safari Zone's small round trees ($54/$55/$56/$57,
|
|
-- one cell, 376 placements across the four safari maps
|
|
-- and nowhere else on this tileset): drawn as a canopy
|
|
-- ball like the overworld's lone tree, and the detector
|
|
-- was boxing them into 16px dither-textured crates.
|
|
-- One voxel ball per cell, the same hull the big trees'
|
|
-- quarter tiles degrade to
|
|
84, 85, 86, 87 },
|
|
-- 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
|
|
-- 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 },
|
|
-- THE CABLE CLUB STEPS, cut into the back wall at cells (10,0) and
|
|
-- (12,0) of every Center -- a flight going DOWN, away from the room,
|
|
-- and the reason `stair_down_n` exists at all: the profile's other
|
|
-- stairs run east or west and are drawn from the SIDE, where a drawn
|
|
-- column is a step; these are drawn HEAD-ON, where a drawn row is,
|
|
-- and no rotation of the east/west reading produces that.
|
|
--
|
|
-- The drawing is its own band table, and it lands exactly on an even
|
|
-- four-step division of the cell: 4 white rows (the near tread), a
|
|
-- black nosing, 3 grey, a nosing, 3 checker, then 4 black rows -- the
|
|
-- dark the flight leaves into, which is also what the far end wall
|
|
-- wears. Its first and last COLUMNS are the well's black side walls.
|
|
-- Drawn row = depth row throughout; the rise is the only number the
|
|
-- head-on view cannot state, and it takes the class height over the
|
|
-- four steps like every other flight here.
|
|
--
|
|
-- Pinned as one cell (the class resolves off the top-left tile) but
|
|
-- all four ids carry it, and the scan says they cannot reach anything
|
|
-- else: 22 placements, exactly the two cells in each of the eleven
|
|
-- Centers, and the Celadon Hotel on the same id places none of them.
|
|
-- 94 is also the map's warp tile; pins are look-only, so the warp is
|
|
-- untouched and the steps stay walk-through.
|
|
stair_down_n = { 92, 93, 94, 95 },
|
|
-- the counters, half a cell high: top band (8) and the one cell of
|
|
-- it that carries the push bell (10, lifted off as a figure below --
|
|
-- the pin stays as the degradation path), 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 = {
|
|
-- THE PUSH BELL on the reception counter. One tile, $0A, drawn in
|
|
-- the counter's TOP tile row at cell (3,2) -- the same cell in all
|
|
-- eleven Centers and nowhere else on this id (scan: 11 hits, all
|
|
-- tile (7,4)). Every other counter cell in the game runs 8 over
|
|
-- 24/25; this one runs 8/10 over 24/25, and 10 is 8 with the bell
|
|
-- painted into its east half.
|
|
--
|
|
-- It could not be a class pin: a pin resolves a whole 8x8 tile, and
|
|
-- the tile is three quarters counter top. Pinned with the counter
|
|
-- (which is what it was) the bell was just ink lying on the
|
|
-- surface -- and lying on it TWICE, because the counter's one top
|
|
-- row had to cover a 16px-deep plot and the mesher repeated it (see
|
|
-- the half-cell rule in ChunkMesher: fixed, and the two stacked
|
|
-- bells were what showed it).
|
|
--
|
|
-- So it is lifted off by mask, exactly like the Marts' till, and
|
|
-- `under` puts plain 8 back -- the counter top the artist drew for
|
|
-- every other cell of the same run, so nothing is synthesized and
|
|
-- the surface closes up seamlessly.
|
|
--
|
|
-- Unlike the till it is NOT an extrusion of its drawing. Seven
|
|
-- pixels by six of ¾-view dome state a round object and nothing
|
|
-- else usable: every reading that turns six rows into geometry
|
|
-- invents more than it measures. So the solid is AUTHORED (see
|
|
-- TileShape's `model`) -- a 5x3 puck with its corners taken off,
|
|
-- one voxel proud of the counter, with a single button voxel at
|
|
-- its centre. `pixels` stays as the segmentation: it is what says
|
|
-- where on the tile the bell is, and the model centres on it.
|
|
--
|
|
-- COLOUR is still not authored. Each layer names the texel its
|
|
-- faces wear, and all four come off tile 8 -- the counter's own
|
|
-- plain top, whose first rows are one flat shade each: row 0 its
|
|
-- black back edge, row 1 its white highlight, row 5 its light
|
|
-- band. So the puck's sides are the desk's own light shade, its
|
|
-- top the desk's own white, and the button's sides the desk's own
|
|
-- black, and all four follow every palette bake with it.
|
|
--
|
|
-- It stands at the FRONT of the counter cell: a service bell is on
|
|
-- the customer's side of the desk, and this is the only object in
|
|
-- the profile whose depth its drawing does not state. `inset` 2
|
|
-- backs it off the counter's own front lip -- flush read as balanced
|
|
-- on the edge; this is the number to move to slide it either way.
|
|
{
|
|
w = 1,
|
|
inset = 2,
|
|
tiles = { 10 },
|
|
under = { 8 },
|
|
model = {
|
|
{ plan = { "0xxx0",
|
|
"xxxxx",
|
|
"0xxx0" },
|
|
top = { 8, 1 }, side = { 8, 5 } },
|
|
{ plan = { "00000",
|
|
"00x00",
|
|
"00000" },
|
|
top = { 8, 1 }, side = { 8, 0 } },
|
|
},
|
|
pixels = {
|
|
"........",
|
|
"........",
|
|
"...XXX..",
|
|
"..XXXXX.",
|
|
".XXXXXXX",
|
|
".XXXXXXX",
|
|
"..XXXXX.",
|
|
"...XXX..",
|
|
},
|
|
},
|
|
{
|
|
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 `diner_round_table` template under `buildings` below now
|
|
-- models all four placements in full -- octagonal top on its
|
|
-- pedestal -- by matching the whole 4x4 grid, which is what a
|
|
-- per-tile pin can never do. Everything here stays as its
|
|
-- degradation path and as the record of why the pins look the
|
|
-- way they do.) 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 seat-high `stool` chairs 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.
|
|
-- The `diner_stool` template (see `buildings` below) now models
|
|
-- every placement in full, like the house stool it copies; these
|
|
-- pins are its degradation path.
|
|
stool = { 7, 8, 23, 24 },
|
|
-- the `diner_stool` template stands 5 voxels (the drawn
|
|
-- elevation: the seat's front edge at row 10 over legs 11-14),
|
|
-- as the house stool does: whoever sits on a stool cell rides
|
|
-- this height, not the 8px class default
|
|
heights = { stool = 5 },
|
|
-- 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 },
|
|
-- ...and the height a figure riding that cell stands at, which is
|
|
-- the SEAT and not the backrest: the chair's seat is drawn rows
|
|
-- 26-31, six of them, so 6. All three Game Freak developers are
|
|
-- placed ON their chair cell (CELADON_MANSION_3F objects at (0,4),
|
|
-- (3,4) and (0,7)), and VoxelScene.groundAt reads this pin, not
|
|
-- the `mansion_computer_desk` model that now draws the chair -- at
|
|
-- the class default 8 they floated two voxels over the seat. The
|
|
-- same reading INTERIOR's `stool = 5` carries for Bill's chair,
|
|
-- which is this drawing with one white margin column instead of
|
|
-- two; these four ids are the mansion desks' chairs and nothing
|
|
-- else on this atlas, so the override reaches only them.
|
|
heights = { stool = 6 },
|
|
-- 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.
|
|
},
|
|
},
|
|
|
|
-- Tiles that are FRONT art: they belong on the drawn facade and nowhere
|
|
-- else. A building's back is the same drawing extruded straight through
|
|
-- the footprint (lib/Buildings.lua `model`, and the volume path's north
|
|
-- face in lib/ChunkMesher.lua), so without this every house wears a
|
|
-- second door on its far wall and every Center a POKe sign readable
|
|
-- backwards. A cell wearing one of these ids takes the art of the
|
|
-- nearest ordinary cell beside it in the same tile row instead -- left or
|
|
-- right, whichever tile that row uses more, which is what reaches PAST a
|
|
-- gable's sloped corner for the wall behind it.
|
|
--
|
|
-- Windows are deliberately absent: a back wall with windows is right.
|
|
-- These are the doorways, the hanging shop signs and the painted GYM
|
|
-- lettering -- the three things a facade has that its back does not.
|
|
-- Ids are per tileset, indexing that tileset's own atlas.
|
|
frontOnly = {
|
|
-- doorway 11/12 over 27/28 (27 is the tileset's own doorTile); the
|
|
-- POKe (66/67) and MART (68/69) signs over their bracket row 74; the
|
|
-- GYM lettering 47/63 painted across the gyms' upper course.
|
|
OVERWORLD = { 11, 12, 27, 28, 47, 63, 66, 67, 68, 69, 74 },
|
|
-- the Indigo Plateau and Victory Road entrances: the same doorway
|
|
-- block, drawn into the cliff face.
|
|
PLATEAU = { 11, 12, 27, 28 },
|
|
-- the Safari Zone gate's double door, 42/43 over 58/59.
|
|
FOREST = { 42, 43, 58, 59 },
|
|
},
|
|
|
|
-- THE DOOR A GATE HOUSE IS ENTERED BY FROM ANY SIDE BUT THE SOUTH.
|
|
--
|
|
-- A route gate is walked THROUGH, so it has an opening on two opposite
|
|
-- sides -- and the drawing can only show one of them. The overworld
|
|
-- sprite is a facade seen face-on with a roof laid over it, so a south
|
|
-- entrance is drawn (a doorway block in the facade's last rows, folded up
|
|
-- by lib/Structures.lua) and a north, east or west one is drawn as
|
|
-- NOTHING: the warp sits on the ground cell outside, the art beside it is
|
|
-- plain wall, and top-down that reads fine because you never see the
|
|
-- wall. In 3D you walk straight into a blank slab.
|
|
--
|
|
-- So the door is put back, on the face the player walks into. This names
|
|
-- only the ART -- one 16x16 cell of the tileset's own doorway block, rows
|
|
-- north-first, the same ids `frontOnly` above lists as facade-only.
|
|
-- WHERE it goes is not authored at all: lib/Buildings.lua reads it off
|
|
-- the map, from the warps that land in a gate and the building standing
|
|
-- against them (see `sideDoors` there), because the map already states it
|
|
-- and a hand list of thirty-odd coordinates would only be a chance to get
|
|
-- one wrong.
|
|
--
|
|
-- OVERWORLD is the whole table because every such entrance in the game
|
|
-- stands against an OVERWORLD building: the Safari Zone's north gate is a
|
|
-- gap between two fence stubs with no drawing to carve, and the Route 22
|
|
-- league gate on ROUTE_23 puts its warps on the road THROUGH the arch
|
|
-- rather than against a wall. Both come out with no door, which is what
|
|
-- they always had.
|
|
sideDoors = {
|
|
OVERWORLD = { { 11, 12 }, { 27, 28 } },
|
|
},
|
|
|
|
-- 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,
|
|
},
|
|
-- F07b: the SQUARE table of CELADON_MANSION_1F cells (0,6):(1,7)
|
|
-- (1 placement, scan.lua) -- the long table (F07) at two cells
|
|
-- wide, the same drawing to the tile everywhere but the interior
|
|
-- column count, and the same read to the row: 0-23 the tabletop
|
|
-- seen from above, 24-26 the slab's black/#555/black front edge,
|
|
-- 27 the #555 shadow that closes it (slab = 3, folded into the
|
|
-- band), 28-30 the base with the legs stopping one row short of
|
|
-- the grid. Family numbers unchanged; the `table` pin stays as
|
|
-- the degradation path, neutralized where this stamps.
|
|
{
|
|
id = "mansion_square_table",
|
|
tiles = {
|
|
{ 38, 39, 39, 41 },
|
|
{ 54, 55, 55, 57 },
|
|
{ 54, 55, 55, 57 },
|
|
{ 60, 58, 58, 59 },
|
|
},
|
|
roofRows = 28, roofBack = 24, roofFront = 0, roofCycle = { 2, 23 },
|
|
slab = 3, frontEave = 0, ledge = nil,
|
|
},
|
|
-- F07c: the Game Freak office's COMPUTER DESK -- the writing desks
|
|
-- of CELADON_MANSION_2F cell (0,5) and CELADON_MANSION_3F cells
|
|
-- (0,3), (3,3) and (0,6). scan.lua on the 4x4 grid returns those
|
|
-- four and nothing else, and each of the four ids that carry the
|
|
-- apron and chair rows (2/3/85/86, 18/19) occurs on this atlas ONLY
|
|
-- inside them -- so no stray cell can pick this model up. (The
|
|
-- same ids are furniture on the HOUSE and FACILITY atlases; those
|
|
-- are different images and none of this entry's business.)
|
|
--
|
|
-- Rows 0-15 are BILL'S DESK, byte for byte. A whole-crop diff of
|
|
-- these tiles against the interior atlas's 11/12/13/14 over
|
|
-- 27/28/29/30 comes back empty for all 512 pixels: the same
|
|
-- tabletop seen from above -- black rim, white highlight course,
|
|
-- grey field -- with the same terminal, cord and 2:1 isometric
|
|
-- computer drawn into it. One drawing is one model, so the four
|
|
-- parts below are `bills_desk`'s verbatim; that entry carries the
|
|
-- readings (paper is flat, the keyboard's keys ride its top face,
|
|
-- `plan` = rx makes the computer a cube turned 45 and not a slab).
|
|
--
|
|
-- Only the FRONT is redrawn, and it is 6 rows where Bill's is 7:
|
|
-- 15 the top's own black front edge. This is the row the
|
|
-- lid replaces, so it opens the fascia exactly the way
|
|
-- Bill's row 16 does, and the desk stands 7 voxels to
|
|
-- his 8 -- measured, not chosen.
|
|
-- 16-17 the #555 edge lip and the black seam under it: the
|
|
-- desktop's own rim, which is why they are `fascia` --
|
|
-- that band wraps every side, and a desktop's edge is
|
|
-- visible from all four.
|
|
-- 18-21 the base: the left leg (the black/#555/black at
|
|
-- x0-x2), the open apron between, and the DRAWER
|
|
-- PEDESTAL at x20-x31 -- two #555 drawer fronts (rows
|
|
-- 16-17 and 19-20) inside a black frame. Each is a
|
|
-- non-black region sealed behind its own black outline
|
|
-- and under 24px, so the measured recess pass sinks it
|
|
-- one voxel and the frame stays proud: the drawer gaps
|
|
-- come off the pixels, nothing is authored.
|
|
-- Row 21 is the ground line and 22 is the measured one. Rows
|
|
-- 22-23 are the desk's cast SHADOW, dithered into the checker
|
|
-- floor of the walkable cell in front, so the model builds none of
|
|
-- them -- they are floor, not furniture.
|
|
--
|
|
-- The chair is Bill's chair REDRAWN rather than the same pixels
|
|
-- (two white margin columns round the backrest panel where his
|
|
-- has one, and it sits at x4-x15 rather than x2-x13), but the same
|
|
-- object band for band -- rows 20-21 the backrest top seen from
|
|
-- above, 22-31 its elevation -- so it takes his part table with x
|
|
-- and `rise` moved: `rise` is the whole plane back down, because
|
|
-- the chair stands on the FLOOR and not on the desk.
|
|
--
|
|
-- Why the grid runs two tile rows past the desk: the artist drew
|
|
-- the apron into the WALKABLE cell in front (2/3 + 85/86), and
|
|
-- 2/3 also carry the chair's back. A template claims whole TILES,
|
|
-- so reading the apron takes the chair with it -- which is what
|
|
-- makes the template owe it, exactly as at Bill's. `desk.depth`
|
|
-- stops the desk box at its own two cells; the chair keeps the
|
|
-- front one. The `table` pin on the top tiles and the `stool` pin
|
|
-- on 2/3/18/19 both stay as the degradation path, neutralized
|
|
-- wherever this stamps.
|
|
{
|
|
id = "mansion_computer_desk",
|
|
tiles = {
|
|
{ 36, 37, 52, 53 },
|
|
{ 64, 65, 66, 67 },
|
|
{ 2, 3, 85, 86 },
|
|
{ 18, 19, 17, 17 },
|
|
},
|
|
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 2/3
|
|
desk = { fascia = { 15, 17 }, base = { 18, 21 }, depth = 2 },
|
|
parts = {
|
|
{ kind = "flat", x = { 2, 15 }, rows = { 3, 7 } }, -- the notes
|
|
{ kind = "upright", x = { 4, 15 }, top = { 8, 12 },
|
|
facade = { 12, 13 }, z = 8, depth = 6 }, -- keyboard
|
|
{ kind = "upright", x = { 16, 19 }, top = { 8, 8 },
|
|
facade = { 8, 9 }, z = 8, depth = 2 }, -- the cord
|
|
{ kind = "iso", x = { 19, 30 }, rows = { 1, 13 },
|
|
plan = 6, z = 9 }, -- the computer
|
|
{ kind = "upright", x = { 4, 15 }, top = { 20, 21 },
|
|
facade = { 22, 31 }, rise = -7, z = 22, depth = 10 }, -- chair
|
|
},
|
|
},
|
|
},
|
|
|
|
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
|
|
},
|
|
},
|
|
},
|
|
|
|
LOBBY = {
|
|
-- F09 on the lobby atlas: the Celadon department store's stools
|
|
-- -- the diner's chairs, the roof terrace's, the Game Corner's
|
|
-- six rows and the four on 1F (58 placements, the scan's only
|
|
-- matches on this atlas). A DIFFERENT drawing from the house
|
|
-- stool -- it sits one row HIGHER in the tile (seat top rows 4-9
|
|
-- over its front edge at 10 and the legs at 11-14, with a clear
|
|
-- floor row below) and its leg detail differs -- but the same
|
|
-- object band for band, so it takes the house part table with
|
|
-- the bands shifted up one row. The measured ground line (15
|
|
-- here, 16 in the house) shifts with them, so the stand is the
|
|
-- same 5 voxels, and the tileset's `stool = 5` height override
|
|
-- keeps whoever sits here ON the seat. The old stool standee
|
|
-- pins stay as the degradation path.
|
|
{
|
|
id = "diner_stool",
|
|
tiles = {
|
|
{ 7, 8 },
|
|
{ 23, 24 },
|
|
},
|
|
roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 },
|
|
slab = 0, frontEave = 0, ledge = nil,
|
|
panes = false,
|
|
parts = {
|
|
{ kind = "upright", x = { 2, 13 }, top = { 4, 9 },
|
|
facade = { 10, 14 }, z = 3, depth = 11,
|
|
stretch = true }, -- the stool
|
|
},
|
|
},
|
|
-- F11: the ROUND TABLE of the diner and the roof terrace -- 4
|
|
-- placements, all on this atlas (CELADON_DINER cells (0,2) and
|
|
-- (0,5), CELADON_MART_ROOF (4,2) and (8,4); scan
|
|
-- "9,39,39,25;54,55,55,57;70,55,55,71;85,86,87,55" matches
|
|
-- nowhere else). This is the drawing the long `counter` note
|
|
-- above calls a compromise -- its four interior tiles are $37,
|
|
-- unpinnable, so the flat treatment let the whole top BE a 16px
|
|
-- disc. The template matches the exact 4x4 grid instead, which
|
|
-- is what a per-tile pin can never do, and un-projects the three
|
|
-- facings: rows 0-23 the OCTAGONAL top seen from above (24
|
|
-- top-view rows = 24 depth rows, so the plan is the silhouette
|
|
-- itself, a `plan` slab 32x24), rows 24-25 the slab's #555/black
|
|
-- fascia folded down its rim, rows 26-31 the PEDESTAL seen under
|
|
-- the front edge -- two flattened circles, i.e. horizontal discs:
|
|
-- the base (diameter 16, drawn cols 8-23, side rows 30-31, its
|
|
-- top wearing the drawn shadow-and-white rows 26-29) and the dark
|
|
-- column (diameter 6, cols 13-18, rows 26-27 repeating up the
|
|
-- shaft), both on the drawn centre x 16 / plan centre z 12.
|
|
-- MEASURED: plan, diameters, centres, slab 3. AUTHORED: tabletop
|
|
-- plane 8 -- counter height, developer-tuned (the first cut
|
|
-- stood it at the flat compromise's 16px and it read too tall)
|
|
-- -- plus base height 2 and the 3-voxel column between. `depth`
|
|
-- 3 keeps the plot to the drawn plan; the grid's 4th tile row is
|
|
-- the pedestal's own drawing plus one floor tile ($37 again, at
|
|
-- the southeast corner), which the claim paints as ground.
|
|
-- `scrub` repoints the top's interior field -- the four $37
|
|
-- tiles, ALSO the checkerboard floor's light half, which carry
|
|
-- the floor's palette in a colorized atlas -- at the same grey
|
|
-- sourced from the rim's own field, so the whole top wears the
|
|
-- table's palette (the drawn field there is uniform grey;
|
|
-- nothing drawn is lost). The old wall/counter pins on the rim
|
|
-- tiles stay as the degradation path, and `support` carries the
|
|
-- top plane so anything the standee scan finds on these cells
|
|
-- rides the tabletop.
|
|
{
|
|
id = "diner_round_table",
|
|
tiles = {
|
|
{ 9, 39, 39, 25 },
|
|
{ 54, 55, 55, 57 },
|
|
{ 70, 55, 55, 71 },
|
|
{ 85, 86, 87, 55 },
|
|
},
|
|
roofRows = 0, roofBack = 0, roofFront = 0, roofCycle = { 0, 0 },
|
|
slab = 0, frontEave = 0, ledge = nil, depth = 3,
|
|
panes = false, support = 8,
|
|
scrub = { { 8, 8, 23, 23 } },
|
|
parts = {
|
|
{ kind = "disc", cx2 = 32, cz2 = 24, r = 8, rise = 0, h = 2,
|
|
side = { rows = { 30, 31 }, x = { 13, 18 } },
|
|
cap = { rows = { 26, 29 }, x = { 9, 22 } } }, -- the base
|
|
{ kind = "disc", cx2 = 32, cz2 = 24, r = 3, rise = 2, h = 3,
|
|
side = { rows = { 26, 27 }, x = { 14, 17 } } }, -- the column
|
|
{ kind = "plan", x = { 0, 31 }, rows = { 0, 23 },
|
|
fascia = { 24, 25 }, fasciaX = { 8, 23 },
|
|
rise = 5 }, -- the top
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|