Pixel-Art Town Layout: Pallet to Pelican Town, Measured

This post has not been translated yet, so you are reading the English original. Read it at the English URL

A Pokémon starting village is about two handheld screens by two, and a town of any size puts its first door about a dozen walking cells from the way in. Across sixteen towns from Red and Blue, Crystal and Emerald, measured by a walk over each game’s own collision data from the cells a walker can actually cross into from the previous route, the first door falls 5 to 17 cells from the entry, median 12; in all thirteen towns with a Pokémon Center, the Fly point is the cell directly under its door; the Gym and the professor’s lab tend to be the far end.1234 Streets are 3 to 7 cells wide at the median, all 35 Center and Mart wall signs stand on their door’s row, every town but the three starting villages and one port has two or more exits on foot, and two of the three starting villages have no dead-end tips at all.5678 I measured the canon because my own town, Kiradex World, needed a plan rather than a picture. At build 35 it passes six of eleven checks, six set from the canon’s values and five my own, and fails five: its card shop is still in the town, the farthest door at 23 cells, rather than in Binder Row east of it, where this series’ routes post puts it; two walks squeeze to one cell; it has 17 dead-end tips, one sign for seven doors, and no way out.98 This is the measured shape of a town, three modern references, the rules with numbers, what an iPhone shows of a town, and the brief.

TL;DR

  • A town is measured in screens. Pallet, Lavender and New Bark are exactly 2 by 2 Game Boy screens, 20 by 18 cells; Viridian, Pewter, Cerulean, Violet and Goldenrod are 4 by 4, 40 by 36; Emerald’s Littleroot and Oldale are 2.67 Game Boy Advance screens, Petalburg 6, Rustboro and Slateport 16, Lilycove 21.3.1011124
  • You meet a door within about a dozen cells, and the service within about fifteen. The first door from the story entry is 5 to 17 walked cells in, median 12. In Red, Blue and Crystal the Pokémon Center is the first door in six of the seven towns that have one (in Goldenrod tied with the Department Store); Emerald moves it back in its cities (fourth in Rustboro, Slateport and Mauville) and keeps it five cells from the route in Oldale.1
  • Fast travel lands you one step from the service. In all 13 towns with a Center the Fly, heal or spawn point is the cell directly south of the Center’s door; in the three home villages it is the cell south of the player’s own front door.1314151
  • Towns are walked in nearly straight lines; the long way round is kept for a few doors. Measuring each straight line from the cell its walk starts from, the median ratio of walked to straight-line distance is 1.00 in eight of sixteen towns and 1.07 to 1.31 in the other eight, highest in three of the five village-sized towns, Lavender, Pallet and Littleroot, where no door is walked in a straight line but no walk runs more than 6 cells over it; 58 of 112 entry-to-door walks are exactly as long as the straight line. The 9 walks at twice the straight line or more are individual doors, eight in four cities, Lilycove, Goldenrod, Mauville and Pewter, and one in New Bark: Goldenrod’s Bike Shop is 46 walked cells from the south entry against 14 in a straight line, because about 45 houses with no door make a grid of back streets.3116
  • Wall signs stand on their door’s row; the town’s name stands further in. Of 113 sign events, all 35 Center and Mart wall signs are one or two cells right of the door on its row; of the 54 building-name signs, 27 stand on their door’s row, most often two cells left; the town sign is a median 15 walked cells from the entry and nearer than the first door in only 4 of 16 towns, which I read as the sign standing where paths meet.6
  • Past the start, a town has two ways out. Pallet, New Bark and Littleroot, the three starting villages, have one exit on foot each, and so does Lilycove, a port whose second exit is by sea; the other twelve towns have two to four; Pallet and Littleroot have no dead-end tips at all, while Emerald’s big cities have up to 2.75 per 100 walkable cells.785
  • What this gives Kiradex. A brief in cells, fitted to the world plan this series’ routes post published: four named districts, the hall as the first door within 10 walked cells of the arrival, the card shop moved to Binder Row as the first door inside the east seam, every arrival-to-door walk at least 2 cells wide, at most 6 dead-end tips, four signs, the shop’s wall sign where the canon puts it and, by my choice against the canon’s pattern, the town sign within 6 cells of the arrival where the phone shows it, open seams on the north and east edges, and the town’s tram stop and jump landing on the cell under the hall’s door, each a check that the acceptance script (C1 to C11 today, with C12 to C14 proposed), a UI test or a simulator capture can pass or fail.917

1. What a town is, and how sixteen of them were measured

An earlier post in this series measured what a building is: a footprint, a kit, a roof drawn over the walker, a door that warps.18 A town is the next question up, and the tutorials are even quieter about it than they were about houses. What they leave out is the arithmetic: how big a town is against the screen it was drawn for, how far the first door is from where you arrive, where the everyday service stands relative to the way in, how wide the streets are, where the signs go, how many ways out there are. Those are numbers, and the decompiled games carry them, so I measured them.

The screens these towns were drawn for

A Game Boy screen is 160 by 144 pixels (def SCREEN_WIDTH_PX equ 160, def SCREEN_HEIGHT_PX equ 144), twenty by eighteen tiles of 8 pixels, which is ten by nine walk cells of 16 pixels.19 Red and Blue keep the player at one fixed place in it: the engine reads the tile the player stands on at screen tile (8, 9) (lda_coord 8, 9 ; tile the player is on), the lower-left of the player’s two-by-two tiles, so the player stands in cell (4, 4) of the ten-by-nine view, with four cells of town visible to the left, five to the right, four above and four below.202 A Game Boy Advance screen is 240 by 160 (#define DISPLAY_WIDTH 240, #define DISPLAY_HEIGHT 160), fifteen by ten cells.21 Emerald’s map buffer states the view in a comment: “the player has 7 metatiles of view horizontally in either direction.”22

Time on foot is the other unit. Emerald’s normal walk moves sixteen one-pixel steps per cell (sStep1Funcs holds sixteen Step1 entries for MOVE_SPEED_NORMAL), so one cell takes sixteen frames, about 0.27 seconds at the handheld’s roughly 59.7 hertz, or 3.7 cells a second.2324 Ten cells, the brief’s first-door limit, is about 2.7 seconds of walking there.23

The sixteen towns and the method

Sixteen towns were read from the pret decompilations: Pallet, Viridian, Pewter, Cerulean and Lavender from pokered at commit d2704a6; New Bark, Cherrygrove, Violet and Goldenrod from pokecrystal at 5beda23; Littleroot, Oldale, Petalburg, Rustboro, Slateport, Mauville and Lilycove from pokeemerald at 731ad5b.234 For each town a loader builds a grid of 16-pixel walk cells with a class per cell (walk, water or blocked), the warp events that are its doors, its sign events, its map connections and its Fly point, and one shared module computes everything else.5

Collision is decoded the way each engine decodes it. Gen 1 tests the lower-left 8-by-8 tile of a cell against the tileset’s passable list; Gen 2 reads four typed collision bytes per 32-pixel block and maps each to land, water or wall through its permission table; Gen 3 reads the two collision bits and the four-bit elevation of each map.bin cell and the behavior byte of its metatile, with water as the behaviors flagged surfable.2526275 Walking distance is a breadth-first search on foot, four directions, with one-way ledges (a jump covers two cells) in all three generations and Emerald’s elevation rule (IsElevationMismatchAt, ObjectEventUpdateElevation), so a walker cannot step between cells of different height except through the transition value that stairs use.518 The distance to a door is the best walkable neighbor plus the step onto it. Every walk to a door is recorded with its Manhattan distance, the straight line along the grid, beside it in the measurement files, and the entry-to-door walks are listed door by door with both;16 where the text compares the two, it gives both. The straight line is measured from the same cell the shortest walk starts from; where several entry cells tie for the shortest walk, the shortest of their straight lines is used. An entry cell whose own walk cannot reach the door never supplies a straight line, so a ratio of walked to straight-line distance is never below 1 and never inflated by a cell that leads nowhere.5 Every median in this post is the ordinary one: over an even count it is the mean of the two middle values, so a town’s median door can end in a half.28

The “entry” of each town is the connection toward the previous stop on the story’s main path, which is my choice of side; the connection and its offset are the map header’s. A cell of that edge counts as a start only if a walker can cross into it: the cell facing it on the route, placed by the connection’s offset, has to be walkable on foot too, and a walk on the route from where the player comes onto it has to reach that facing cell.51 The route walk starts at the warp the player comes out of (Mt. Moon’s exit on Route 4, Rock Tunnel’s south mouth on Route 10, Viridian Forest’s north gate on Route 2, the Ilex Forest gate on Route 34, Petalburg Woods’ north mouth on Route 104), at the route’s own crossings with the previous town, or, for Slateport, at the cell Mr. Briney’s boat puts the player on, three steps up from the boat on Route 109.234 A first-door figure is the minimum over the cells that pass. Pallet, Littleroot and Lavender are entered from the north, Viridian, Pewter, Goldenrod, Oldale, Rustboro, Slateport and Mauville from the south, Cerulean and New Bark from the west, Cherrygrove and Petalburg from the east, Violet through the two warps of its east gate, Lilycove from the west.293031 The rule matters: Oldale’s south edge has 12 walkable cells but Route 101’s path meets only four of them, New Bark’s west edge has 4 but Route 29 meets 2, and of Cerulean’s 19 west-edge cells the walk from Mt. Moon crosses into 2.1234

Building footprints are needed for the town shares, so they were measured again, two ways. In Emerald, a flood fill from each door spreads over blocked cells whose metatile never appears on route maps away from warps, is opened by two-by-two, and is then checked on a render of every town; 9 of the 53 outlines (52 buildings and the Aqua Hideout’s cave mouth) were set by eye where the fill had taken in hedges, shrubs or a sculpture (Wally’s house, Petalburg’s second house, Slateport’s Battle Tent, Museum, Shipyard and coastal house, Mauville’s Bike Shop and two houses). In Red, Blue and Crystal every footprint was read by eye from grayscale renders with a 16-pixel grid, each checked against its warp, because their roof tiles are shared with scenery and the fill could not separate them.423 Where these footprints overlap the structures post’s table they agree with it but for one: Cerulean’s Gym is 8 by 4 cells here, read from the render, against the 6 by 4 that table gives for a Red and Blue Gym and the six-cell width it states for a Gym in all three games; Pewter’s and Viridian’s Gyms are 6 by 4 here too. For the rest this post cites that table rather than repeating it.182

A few definitions carry through. The building share is every cell inside a footprint rectangle, a Gym’s walkable chamfered corners and Emerald’s walkable roof ridge included; other blocked means trees, fences, ledges, signs and rocks; shares are of the whole layout as the game stores it, borders of trees and sea included. Corridor width is, for each walkable cell, the shorter of its horizontal and vertical walkable runs, a per-cell measure rather than the width of a drawn path. A dead-end tip is a walkable cell with exactly one walkable neighbor, not counting door approaches or cells on the map’s edge. An exit on foot is a distinct opening on a map edge that the walk from the entry reaches: a connection with a crossing (a town cell and the facing cell of the connected map, both walkable) whose town cell the walk reaches, or a gate warp the walk reaches, counted once per edge.578 Doors are destinations, not passages: the walk does not go in at one door of a building and out at another. Shares of the town reachable on foot are over the same walkable count as the table’s shares, which leaves out walkable cells inside building footprints.8

What the method cannot see, and the five least certain numbers

The collision models are close to the engines but not identical. Gen 1 tests only the lower-left tile of a cell, as the engine does, and treats water as tiles $14, $32 and $48; its ledges are modeled from ledge_tiles.asm with the standing-tile condition, and tile-pair collisions are not modeled. Gen 2’s diagonal hops are blocked. Gen 3’s directionally impassable metatiles and Acro Bike rails are not modeled. People, boulders and scripted blocks are not in the collision data and do not block the search; Cut trees are tiles in Gen 1 and 2 and do block it, while in Gen 3 they are objects and do not. Nobody surfs.5234

Five numbers in this post are less certain than the rest; the qualifiers below hold wherever they appear, including where a table or a summary gives the number bare:

  1. Goldenrod’s doorless houses, about 45. Counted by eye on the render, plus or minus five.3
  2. Pelican Town’s distances. Door tiles read from the wiki’s image to within one tile, and distances that are Manhattan with no collision, so lower bounds on the walk; the town’s size is the image’s, not the game map’s.32
  3. Narshe and South Figaro, about 61 by 62 and 55 by 55 tiles. Measured on fan reconstructions, not on the game’s data, which the disassembly does not carry.333435
  4. Lilycove’s 56 percent reachable on foot. The model says the plateau house cannot be reached without water; whether a route the model misses reaches it was not checked.8 Cerulean’s 47 percent is a different case, a part of the city reached through a house (section 2).
  5. The building shares of the Gen 1 and Gen 2 towns, and 9 of Emerald’s 53 outlines. Footprints read or corrected by eye; a misread cell moves a share by a fraction of a point, and the comparison with the structures post’s table found one disagreement, Cerulean’s Gym (above).23418

The entry side and the start of the route walk are my choices per town (above), and three signs classed as building signs stand far from their doors (section 2). Pokémon FireRed and LeafGreen were not measured. They redraw Red and Blue’s towns in a Game Boy Advance tileset at other sizes, Pallet 24 by 20 cells against Red’s 20 by 18 and Viridian 48 by 40 against 40 by 36, so none of the Red and Blue numbers here should be read as theirs.3610

2. Pokémon’s towns, measured

The sixteen in one table

Every figure in the table is measured. “First,” “median” and “max” are walked cells from the entry to the town’s doors; the last column is the town’s median ratio of walked to Manhattan distance over its doors, each Manhattan distance taken from the entry cell its walk starts from (section 1).116

Town Game Cells GB / GBA screens Walk % Building % Water % Buildings with a door First door Median Max Walk ÷ Manhattan
Pallet R/B 20×18 4.0 / 2.4 60.6 13.3 4.4 3 10 12 17 1.25
Viridian R/B 40×36 16 / 9.6 53.6 5.0 1.7 5 15 27 48 1.10
Pewter R/B 40×36 16 / 9.6 60.6 10.0 0 6 15 27 44 1.00
Cerulean R/B 40×36 16 / 9.6 55.1 11.4 10.6 7 (+4 doorless) 16 21 34 1.00
Lavender R/B 20×18 4.0 / 2.4 48.1 22.2 0 6 10 18 22 1.31
New Bark Crystal 20×18 4.0 / 2.4 45.0 15.6 2.2 4 11 14.5 17 1.07
Cherrygrove Crystal 40×18 8.0 / 4.8 28.8 7.8 19.7 5 13 18 24 1.09
Violet Crystal 40×36 16 / 9.6 29.6 8.2 9.7 7 (+1) 10 31 48 1.07
Goldenrod Crystal 40×36 16 / 9.6 41.7 18.9 5.8 12, a gate, 2 entrances (+about 45) 11 31 46 1.00
Littleroot Emerald 20×20 4.4 / 2.67 62.8 21.2 0 3 13 15 21 1.15
Oldale Emerald 20×20 4.4 / 2.67 56.0 16.0 0 4 5 11.5 16 1.00
Petalburg Emerald 30×30 10 / 6.0 35.2 12.7 15.7 6 8 21.5 33 1.00
Rustboro Emerald 40×60 26.7 / 16 45.6 17.0 5.9 11 (+1) 14 31 54 1.00
Slateport Emerald 40×60 26.7 / 16 45.5 10.1 15.5 9 (+1) 17 44.5 58 1.00
Mauville Emerald 40×20 8.9 / 5.3 54.9 18.2 1.0 7 (+1) 6 26 40 1.00
Lilycove Emerald 80×40 35.6 / 21.3 44.2 11.1 21.2 12 and a cave 14 46 73 1.13
Kiradex (build 35) Kiradex 40×30 13.3 / 8.0 57.9 18.8 1.9 7 10 14 23 1.00

Sources for the table: the three decompilations and the shipped Kiradex town, measured by the scripts named in the notes.23437 Numbers in parentheses are buildings drawn with no door you can use, counted by eye; Goldenrod’s “about 45” is plus or minus five.3 Building shares rest on footprints read by eye in Red, Blue and Crystal and in 9 of Emerald’s outlines (section 1).

Horizontal bar chart of the walked cells from each town's story-order entry to its nearest door: Pallet 10, Viridian 15, Pewter 15, Cerulean 16, Lavender 10, New Bark 11, Cherrygrove 13, Violet 10, Goldenrod 11, Littleroot 13, Oldale 5, Petalburg 8, Rustboro 14, Slateport 17, Mauville 6, Lilycove 14, and Kiradex's town 10 to the hall, with a dashed line at the sixteen towns' median of 12.

The first door from the way in, on foot: sixteen towns between 5 and 17 cells, and Kiradex’s town at 10, two cells inside the median.38

Red and Blue

Kanto’s five measured towns come in two sizes and nothing between. Pallet and Lavender are 20 by 18 cells and Viridian, Pewter and Cerulean 40 by 36, read from the map constants in blocks of 32 pixels and doubled: a village is exactly two by two Game Boy screens, a city four by four.102 The world post in this series reached the same figure for Pallet, ten by nine blocks, from the same file.39 Pallet has 3 buildings with a door, Viridian 5, Pewter 6 (plus the Museum’s annex, whose back door stands behind a tree you need Cut for and is unreachable on foot), Cerulean 7 plus 4 houses drawn with no warp, Lavender 6.402 Shares of walkable, building, water and other blocked cells run Pallet 60.6, 13.3, 4.4 and 21.7 percent; Viridian 53.6, 5.0, 1.7 and 39.7; Pewter 60.6, 10.0, 0 and 29.4; Cerulean 55.1, 11.4, 10.6 and 22.8; Lavender 48.1, 22.2, 0 and 29.7.2

The Pokémon Center is the first door from the way in at Viridian (15 cells from Route 1), Pewter (15 from Route 2) and Lavender (10 from Route 10). Cerulean is the exception: walking in from Mt. Moon’s exit on Route 4, which meets the city’s west edge at two cells, (0,18) and (0,19), two houses come first at 16 each, and the Center at 20. The cave mouth at (4,11), 5 cells from the west edge’s northern cells, is not reached from that crossing.1229 The Gym is the farthest door of all from the entry in Viridian, 48 walked cells against 40 in a straight line, and in Pewter, 44 against 20; in Cerulean it is the third-farthest of seven, at 32.140 Fly lands one cell south of the Center door in all four Kanto towns here that have a Center: Viridian at (23,26) under the door at (23,25), Pewter at (13,26), Cerulean at (19,18), Lavender at (3,6). Pallet’s point, (5,6), is one cell under the player’s own front door.132

Pallet from the north edge reaches the player’s house in 12 cells, the rival’s in 10 and Oak’s Lab in 17, the farthest door; from the cell you step out onto under your own door the Lab is 14 cells away and the rival’s house 9.240 The tree line along the north edge lets you in through one gap two cells wide, at x 10 and 11, and the shortest walk to each of the three doors starts in it; from there the walks are 1.20 to 1.31 times their straight lines, a median of 1.25, second in the set to Lavender’s 1.31.41116 It has no dead-end tips at all.5

Gold, Silver and Crystal

Johto adds a third size. New Bark is 20 by 18 cells, two by two Game Boy screens; Cherrygrove 40 by 18, four by two; Violet and Goldenrod 40 by 36.113 New Bark has 4 buildings with a door, Cherrygrove 5, Violet 7 (plus one house drawn with a door but no warp, at x 2 to 5 and y 28 to 29, and the east gate, whose building lives in Route 31’s map), Goldenrod 12 plus the Route 35 gatehouse and two Underground entrances, the fifteen warps of its map.423 Goldenrod also draws about 45 houses with no door, by my count on the render: a city made to look dense by roofs you cannot enter.423

Johto’s towns are mostly trees. Walkable, building, water and other blocked shares are New Bark 45.0, 15.6, 2.2 and 37.2 percent; Cherrygrove 28.8, 7.8, 19.7 and 43.8; Violet 29.6, 8.2, 9.7 and 52.5; Goldenrod 41.7, 18.9, 5.8 and 33.5, with its doorless houses counted as other blocked. More than half of Violet is blocked scenery.326

The rules of arrival are Kanto’s. The spawn point Fly uses is one cell south of the Center door in Cherrygrove (29,4), Violet (31,26) and Goldenrod (15,28), and one cell south of the player’s house door in New Bark (13,6).143 From the entry the Center is the first door in Cherrygrove (13 cells), Violet (10) and Goldenrod (11).1 New Bark’s Lab sits at the top edge, rows 0 to 3, the player’s 4-by-4 house at the right, two 4-by-2 houses below. Its west edge has 4 walkable cells, but Route 29’s path meets only two of them, (0,8) and (0,9); from there the Lab is 11 cells, the neighbor’s house 13 (against 5 in a straight line) and the player’s house 16.42316 Its east connection, toward Route 27, is water at the edge: 0 walkable cells and 4 of water, so the starting town has one exit on foot.307

Ruby, Sapphire and Emerald

Hoenn’s towns are sized freely. From layouts.json: Littleroot 20 by 20, Oldale 20 by 20, Petalburg 30 by 30, Rustboro 40 by 60, Slateport 40 by 60, Mauville 40 by 20, Lilycove 80 by 40; in screens of the Game Boy Advance that is 2.67, 2.67, 6.0, 16.0, 16.0, 5.33 and 21.3.124 The world post reached the same sizes for Littleroot, Petalburg, Rustboro and Lilycove.39 Buildings with a door: Littleroot 3, Oldale 4, Petalburg 6, Rustboro 11 (plus one doorless block east of the fountain), Slateport 9 (plus a doorless gabled house joined to the coastal house), Mauville 7 (plus one doorless yellow building), Lilycove 12 (plus the cave mouth of the Aqua Hideout).314

Footprints beyond those in the structures post: Slateport’s Battle Tent 5 by 5, Oceanic Museum 6 by 5 with two doors, Stern’s Shipyard 8 by 7, the Harbor 7 by 6; Mauville’s Game Corner 7 by 4 and Bike Shop 5 by 4; Lilycove’s Department Store 9 by 7, Museum 10 by 5 with two doors, Contest Hall 7 by 7, Harbor 7 by 6, Motel 6 by 5; Rustboro’s two Flats 9 by 6 and 7 by 9, Trainers’ School 7 by 5, Devon Corporation 10 by 9 with two doors. Every Center and Mart is 4 by 4, every Gym 6 by 5.434 Walkable, building, water and other blocked shares: Littleroot 62.8, 21.2, 0 and 16.0 percent; Oldale 56.0, 16.0, 0 and 28.0; Petalburg 35.2, 12.7, 15.7 and 36.4; Rustboro 45.6, 17.0, 5.9 and 31.4; Slateport 45.5, 10.1, 15.5 and 28.9; Mauville 54.9, 18.2, 1.0 and 25.9; Lilycove 44.2, 11.1, 21.2 and 23.4.427

The heal point, which Fly uses (SetWarpDestinationToHealLocation in the Fly map code), is one cell south of the Center door in all six Emerald towns here that have a Center: Oldale’s at (6,17) under the door at (6,16), Petalburg’s at (20,17) under (20,16), Lilycove’s at (24,15) under (24,14). Littleroot has two, one cell under each family house’s door, (5,9) and (14,9).154 Where Emerald changes the pattern is the order of doors. From the entry the Center is first of three distinct distances in Oldale (5 cells), second in Petalburg (10, after the Mart at 8), fourth in Rustboro (24), Mauville (26) and Slateport (40), and second in Lilycove (26). Outside Oldale, Gen 3 no longer puts the Center first.131 The Gym is the farthest door from the entry in Mauville, 40 walked cells against 24 in a straight line (see Mauville below); it is third-farthest of 11 in Rustboro (48) and second of 6 in Petalburg (22, tied with a house).116

Littleroot from the north edge reaches May’s house in 13 cells, Brendan’s in 15 and Birch’s Lab in 21, the farthest door; from Brendan’s step-out cell the Lab is 17 walked cells against 9 in a straight line, because the walk goes round the house.431

Landmarks against the way in

The second table puts the landmarks side by side. Ranks count distinct distances, so two doors at the same distance share a rank; the last column is the walk from the Fly point to the Center door.1

Town To Center To Mart To Gym To Lab Center’s rank among doors Fly point to Center door
Pallet 17 (farthest) house door, 1
Viridian 15 27 48 (farthest) 1st of 5 1
Pewter 15 22 44 (farthest) 1st of 6 1
Cerulean 20 33 32 2nd of 6 1
Lavender 10 22 1st of 5 1
New Bark 11 house door, 1
Cherrygrove 13 19 1st of 4 1
Violet 10 40 31 1st of 7 1
Goldenrod 11 Department Store 11 31 1st of 9 1
Littleroot 21 (farthest) house door, 1
Oldale 5 16 1st of 3 1
Petalburg 10 8 22 2nd of 5 1
Rustboro 24 14 48 4th of 10 1
Slateport 40 37 4th of 10 1
Mauville 26 10 40 (farthest) 4th of 7 1
Lilycove 26 Department Store 45 2nd of 10 1

Four things fall out of the two tables.1

  • A village is about two handheld screens square; the first city is six to sixteen screens, and cities run to twenty-one. Every home village and Lavender is two by two Game Boy screens or 1.3 by 2 Game Boy Advance screens; the first map each game names a city is four by four Game Boy screens (Viridian), four by two (Cherrygrove) or two by three Game Boy Advance screens (Petalburg), 6 to 16 screens in all, while Emerald’s Oldale, the town between Littleroot and Petalburg, stays village-sized at 1.33 by 2; the ports and the large Hoenn cities are 16 to 21 Game Boy Advance screens.1
  • You meet a door within about a dozen cells, and the Center within about fifteen. First doors fall 5 to 17 cells in, median 12. In Red, Blue and Crystal the Center is the first door from the way in at six of the seven towns that have one, in Goldenrod tied with the Department Store. Emerald loosens this in its cities and keeps it in Oldale, at 5 cells the shortest walk in the set, and nearly in Petalburg, at 10.128
  • Arrival by Fly is a promise kept to the cell. In all 13 towns with a Center, the Fly point is the cell under its door.1
  • The Gym and the Lab tend to the far end. The Gym is the farthest door in Viridian, Pewter and Mauville, in the farther half in Cerulean, Petalburg and Rustboro, and mid-table in Violet and Goldenrod. The professor’s lab is the farthest door of its village from the route out in Pallet (17) and Littleroot (21); New Bark’s is the nearest, 11 cells from the crossing.1

Horizontal bar chart of each town's area in screens of the handheld it was made for: Pallet, Lavender and New Bark 4 Game Boy screens, Cherrygrove 8, Viridian, Pewter, Cerulean, Violet and Goldenrod 16; Littleroot and Oldale 2.67 Game Boy Advance screens, Mauville 5.33, Petalburg 6, Rustboro and Slateport 16, Lilycove 21.3; and Kiradex's town at 8 Game Boy Advance screens, 3.89 views of the iPhone Duo's outer display in portrait, and 1.93 views of the open Duo held wide.

A town’s size in screens of its own device: villages at two to four, cities at five to twenty-one, and Kiradex’s town under two views of the open Duo.38

Three home villages

Pallet (20 by 18, 3 buildings) lets you in from the north through one two-cell gap in its tree line; from your own front door the rival’s house is 9 cells and the Lab 14. It is 60.6 percent walkable and 4.4 percent water, the shore you will later surf from, and has no dead-end tips; its one exit on foot is north, because the two walkable cells of its south edge face no walkable cell of Route 21.2417 New Bark (20 by 18, 4 buildings) puts the Lab at the top edge and the player’s house at the right; its east edge is sea, so its one exit on foot is west.427 Littleroot (20 by 20, 3 buildings) faces two 5-by-5 houses across the top and puts the 7-by-5 Lab bottom left; it has one exit, north, two cells wide; it is 62.8 percent walkable with no dead-end tips, and its corridor median is 6 cells, an open lawn rather than streets.434

On my reading, the starting village is among the smallest maps in each game (Pallet ties Lavender, Littleroot ties Oldale), with three or four buildings, no dead-end tips in Pallet and Littleroot, one exit on foot, and the Lab as the farthest door in two of the three. It is a room to learn walking in, not a town to navigate.

Oldale: the Center five steps from the route

Oldale (20 by 20) is the first town after the start in Emerald. Its south edge has 12 walkable cells, but Route 101’s path, four cells wide where it meets the town, crosses into only four of them, x 8 to 11. From there the Center door is 5 cells away and the Fly point is the cell beneath it; the Mart is 16 cells, top right; the two houses are 7 and 16. It has three exits on foot, north, south and west.3147 I read Oldale as the template of a waypoint town: what you need is at the door, everything else is a short detour, and the town is a crossroads rather than a destination.

Mauville and Goldenrod: walls that lengthen the walk

Mauville is short and wide, 40 by 20 cells and 5.3 Game Boy Advance screens, with four exits. Its south edge has three walkable stretches, (9,19), x 12 to 18 and x 27 to 33, but Route 110’s path meets only the middle one: the route’s top row is walkable at x 12 to 18 and at one other cell, (28,0), which no walk on the route reaches. The two longer stretches lead into the same lower street, whose only way north is a five-cell gap at x 26 to 30, east of the Mart: with that gap closed, the walk from the south edge reaches 98 cells and neither the Gym nor the Game Corner. So the walk from Route 110 to the Gym, in the northwest corner, starts at (18,19), goes north, east to the gap at x 26, north through it and back west along the upper street: 40 walked cells against 24 in a straight line. The Game Corner’s door is 38 walked cells against 16, with a narrowest point of one cell on that walk, and the Center 26 against 18. From the x 27 to 33 stretch the gap would cost nothing, the Gym 39 walked cells against 39 in a straight line, but the route does not lead there; (9,19) is walled on its three inland sides and leads nowhere.4344416 Goldenrod (40 by 36) packs its doorless houses into blocks: the walk to the Bike Shop is 46 cells against 14 in a straight line, to the Underground entrance at (11,29) 31 against 13, and 38.4 percent of its walkable cells sit in runs of two or fewer, the most of any town here. Its other thirteen doors are walked at 1.00 to 1.42 times their straight lines, eleven of them at exactly 1.00.423516

My reading: the big cities do not make you walk the long way to most doors; they make you walk it to a few. The long detours in the set are individual doors in Lilycove, Goldenrod, Mauville and Pewter, and one house in New Bark (see Detour, below), and the cost of the blocks shows elsewhere in the numbers: narrow passages and more dead-end tips.

Lilycove: the town you only half walk

Lilycove is the largest town here, 80 by 40 cells and 21.3 Game Boy Advance screens, and 21.2 percent of it is water. On foot from Route 121 a walker reaches 793 of its 1,416 walkable cells, 56 percent; a house on the beach plateau at (55,15) and the Aqua Hideout need water travel by this collision model. The Museum on the hill is 61 walked cells from the entry to its nearer door, at (12,5), against 23 in a straight line, up a stair and round.4348 It is also the one town past the start with a single exit on foot: its map has two connections, west to Route 121 (6 walkable edge cells beside 17 of water) and east to Route 124 (0 walkable, 36 water), so the second way out is by sea.317 It is not the only town the walk leaves half unseen: by the same script, Cerulean from Route 4 reaches 371 of its 794 walkable cells, 47 percent, and none of the crossings on its south edge, toward Route 5, or its east edge, toward Route 9. That half of the city is reached through a house: the back door of the burgled house comes out at (27,9), and a walk from there reaches 632 cells, both of those edges among them and all of the part the entry reaches, though the walk from the entry does not reach it back. The walk here does not pass through buildings, so it counts neither edge.840

Streets, signs, dead ends and exits, across all sixteen

Corridors. Town medians of corridor width run from 3 to 7 cells. The share of walkable cells in a run of two or fewer goes from 6.6 percent in Petalburg to 38.4 percent in Goldenrod. On the shortest walk from the entry to a door, the narrowest point is usually 1 to 3 cells: of the 112 such walks in the sixteen towns, 48 narrow to two cells at their tightest, 28 to one and 28 to three, and the 28 one-cell walks fall in 9 of the 16 towns, Pallet among them.5843

Detour. The median ratio of walked to Manhattan distance per town, each straight line taken from the cell its walk starts from (section 1), is 1.00 in eight towns (Pewter, Cerulean, Goldenrod, Oldale, Petalburg, Rustboro, Slateport and Mauville), 1.07 to 1.15 in six (New Bark, Violet, Cherrygrove, Viridian, Lilycove and Littleroot) and 1.25 and 1.31 in two (Pallet and Lavender).116 The three highest medians are village-sized towns, Lavender, Pallet and Littleroot: none of their 12 doors is walked in a straight line, though each walk is only 2 to 6 cells longer than it, and a short walk turns a small detour into a large ratio; of the other two village-sized towns, New Bark is at 1.07 and Oldale at 1.00.1628 Of the 112 entry-to-door walks, 58 are exactly as long as their straight lines and 9 are twice as long or more, all of them individual doors: four in Lilycove, a house at (11,22) at 60 walked cells against 16, the Museum’s two doors and the Harbor (73 against 27); two in Goldenrod, the Bike Shop (46 against 14) and an Underground entrance (31 against 13); Mauville’s Game Corner (38 against 16); Pewter’s Gym (44 against 20); and in New Bark, the neighbor’s house (13 against 5), the one village door among them.16 Towns are walked in nearly straight lines; the long way round is kept for a few doors, nearly all of them in cities.

Dead ends. Pallet and Littleroot have no dead-end tips. Red and Blue’s other towns have 0.1 to 0.6 per 100 walkable cells; Crystal’s 0.5 to 2.2; Oldale and Mauville 0.9 to 1.4; and Petalburg, Rustboro (30 tips), Slateport (30) and Lilycove (38) 2.2 to 2.75.543

Exits. Counting the distinct openings the walk from the entry reaches, one per map edge, each a crossing walkable on both maps or a gate (section 1), four towns have one exit on foot: all three start towns, Pallet, New Bark and Littleroot, and Lilycove, whose other connection is water. The other twelve have two to four exits on foot, and Mauville alone has four.87 Several edges count for less than the map header suggests. Pallet’s south edge has 2 walkable cells, (2,17) and (3,17), but the Route 21 cells facing them have lower-left tile $3a, which is not on the Overworld passable list, and Route 21’s north row has no walkable cell at all, so the way south is by water.725 Violet’s east edge has 2 walkable cells, the cells of the gate’s own two warps, which face no walkable cell of Route 31, so the east exit is the gate and Violet has three.4278 Goldenrod’s north edge has 8 crossings the walk never reaches, so its way north is the Route 35 gate and it has two; Cerulean’s south and east edges have 16 and 12 crossings, none reached except through the burgled house (above), so it has two.8 Several towns add an exit by water only: Slateport’s east edge (54 water cells, 0 walkable), Lilycove’s east (36 and 0), New Bark’s east, Pallet’s south.731

Signs. The sixteen towns hold 113 sign events. 35 are a Center’s or a Mart’s own sign on its wall, always one or two cells right of the door on the door’s row (24 at one cell, 11 at two). 54 name a building; only 27 of those stand on the door’s row, and 33 to the left of the door, the most common offsets being two cells left (10 signs) and three left (6). 16 are the town’s name sign, and 8 are tips, notices or hidden items.631 Three Slateport and Lilycove signs (the Berry Crush ranking, the market and the museum on the hill) are classed as building signs but stand far from their nearest door.6 The town’s own sign is 6 to 38 walked cells from the entry, median 15, and nearer than the first door only in Cherrygrove, New Bark, Rustboro and Lilycove.640 Distances cannot show where paths meet; that the town sign stands where they meet, not at the gate, is my reading.

Buildings you cannot enter. Goldenrod draws about 45 doorless houses to its 12 doored buildings; Cerulean 4 doorless to 7 doored; Rustboro, Slateport and Mauville one doorless building each; and Violet one house whose drawn door has no warp.234

3. The modern references: Pelican Town, the acre grid, Narshe and South Figaro

The handhelds give the numbers because their source is public. The three references below do not have that, so each figure carries its derivation: Pelican Town is read from a wiki’s image of the town, the acre grid from a wiki’s description, and Final Fantasy VI’s towns from fan reconstructions of its maps.

Stardew Valley: Pelican Town, from the wiki’s image

The Stardew Valley Wiki’s full-town image of Pelican Town is 1,920 by 1,760 pixels (MediaWiki image information, uploaded October 17, 2024). At the game’s 16-pixel tiles that is 120 by 110 tiles, 13,200 in all, by my arithmetic; it is the image, not the game’s own Town map file, which I did not have.4532 The wiki’s clickable town map places each building’s box in percent of that image, and converted to tiles the boxes are: Pierre’s 10.2 by 11.3 at (38, 47), the Clinic 5.5 by 10.9 at (32, 46), the Saloon 9.3 by 10.1 at (39, 62), the Community Center 14.1 by 15.1 at (46, 10), JojaMart 28.7 by 12.3 at (83, 42) and the Mayor’s Manor 14.0 by 13.9 at (55, 74).4632

Door tiles were read from the image with a one-tile grid, plus or minus one tile: the Bus Stop entrance on the west edge at (0, 54), Pierre’s door at (43, 56), the Clinic’s at (36, 56), the Saloon’s at (45, 70), the Community Center’s at (52, 19). Manhattan distances from the entrance are 45 tiles to Pierre’s, 38 to the Clinic, 61 to the Saloon and 87 to the Community Center; from Pierre’s they are 7 to the Clinic, 16 to the Saloon and 46 to the Community Center; from the Clinic to the Saloon, 23.4532 There is no collision data behind those figures, so they are lower bounds on the walk. The wiki’s own description of the edges: “The northwest entrance to town connects to the Bus Stop and the Farm”; north of town is the Mountain, southwest the Cindersap Forest, south the Beach (paraphrased from the same page, one secondary source).47

My reading of those numbers: the shop, the clinic and the saloon form one cluster around the square, the Clinic 7 tiles and the Saloon 16 from Pierre’s and 23 from each other, 38 to 61 tiles in from the Bus Stop entrance, and the Community Center is a separate destination up the hill, 46 tiles beyond the shop. By area the town is 13,200 tiles, about 4.1 times Lilycove’s 3,200 cells.3212 Stardew solves Oldale’s problem at a larger scale: the services you visit every day are one cluster, and the landmark you restore is the walk you choose to take.

Animal Crossing: the acre as the unit

Nookipedia describes acres as “grid elements measuring 16x16 spaces” in the player’s town, and the town of the first game, on the Nintendo 64 and GameCube, as “five acres across by six down,” which by my arithmetic is 80 by 96 spaces.48 The arrival is fixed: “the train station is always located in Acre A-3,” at the top of the grid, every time.48 The acre is also the unit of content. In that first game and its Japanese versions, one fish and one bug spawn each time the player moves into an acre, except when the player steps out of their house on loading the game, and they disappear “upon moving six squares away from that acre.”48 For scale, by the same page: Wild World is 16 acres, four by four; City Folk 25, five by five; New Leaf 20, five across and four down; New Horizons “a 42-acre map measuring seven across and six down,” where “The airport and pier always generate on the F row.”48 All of that is one secondary source.

On my reading, the acre grid is the same idea as the handhelds’ screen, made explicit: a town is a whole number of views, the arrival sits at a fixed place in the grid, and each view holds something to find.

Final Fantasy VI: Narshe and South Figaro, from fan rips

The everything8215 disassembly of Final Fantasy VI (commit 813013276c95) lists “Map Properties (415 items, 33 bytes each)” in its ROM map, at ED8F00 to EDC47F, but carries no map data, so it does not give Narshe’s or South Figaro’s size.35 The figures here come from VGMaps’ rips instead, which are fan reconstructions; I measured each town’s exterior panel by its one-pixel border. Narshe’s panel is 976 by 992 pixels, about 61 by 62 tiles of 16 pixels; South Figaro’s is 880 by 880, 55 by 55 tiles.3334 With the Super Nintendo screen at 16 by 14 such tiles, Narshe spans about 17 screens and South Figaro about 13.5.493334 Final Fantasy VI’s map layers come in powers of two, so the rip’s panel is the visible town, not the size of the layer.49 Door positions in these towns were not measured.

Those are city sizes, in the same band as Rustboro and Slateport at 16 Game Boy Advance screens. The structures post covered what the two towns do with height, Narshe’s houses on cliffs joined by staircases and South Figaro’s terraces; the town-scale point here is only that the console RPGs of the same years built their towns at the size the handhelds reserved for cities.18

4. The craft, as rules with numbers

These are the rules the measurements support, each with the range it rests on. Where I chose one number from a range, the table says so. The cells are the handhelds’ 16-pixel walk cells, which is also Kiradex’s tile.139

Element Rule Source
Size Measure a town in screens of the device, not in tiles. A starting village spans about two by two screens; the first city (the first map each game names a city) six to sixteen; a big city sixteen or more. Game Boy villages 4.0 screens, cities 8 to 16; Game Boy Advance villages and Oldale 2.67, Mauville 5.3, Rustboro and Slateport 16, Lilycove 21.3; first cities Viridian 16, Cherrygrove 8, Petalburg 6
First door About a dozen walked cells from the way in; at most ten, my choice, for a landmark you want met first. median 12, range 5 to 17, sixteen towns; at Emerald’s sixteen frames a cell, ten cells is about 2.7 seconds
Service The everyday service is the first or second door from the way in; the challenge and the origin are at the far end. Center first in 6 of 7 Gen 1 and 2 towns with one, 5 cells in Oldale; Gym farthest in 3 of 8 Gym towns and in the farther half in 3 more; Lab farthest in Pallet and Littleroot
Fast travel Land the traveler one step from the service door. Fly point is the cell south of the Center door in 13 of 13 Center towns, and south of the home door in all 3 villages
Detour Walk a town in nearly straight lines; keep the long way round blocks for a few doors in a city. median walked to Manhattan, from the cell each walk starts from, 1.00 in 8 towns and 1.07 to 1.31 in 8, highest in three village-sized towns (Lavender, Pallet, Littleroot), at 2 to 6 extra cells a door; 58 of 112 walks equal their straight line; the 9 walks of twice or more are individual doors, eight in Lilycove, Goldenrod, Mauville and Pewter and one in New Bark, up to 3.75 times (a Lilycove house, 60 against 16; Goldenrod’s Bike Shop 46 against 14)
Ground About half the town is ground you can walk on; buildings take about an eighth. walkable 45 to 63 percent in 11 of 16 towns, 44 in Lilycove, less where water or trees fill the map (Petalburg 35, Cherrygrove, Violet and Goldenrod 29 to 42); buildings 5 to 22 percent, median 13
Streets Streets are 3 to 7 cells wide; a squeeze of 1 or 2 is a choice. town corridor medians 3 to 7; share of walkable cells in runs of 2 or fewer 6.6 to 38.4 percent
Building signs A shop’s own sign stands on its door’s row, one or two cells right of the door, as every wall sign does; a name sign stands near its door, and the commonest place, my choice for the brief, is two cells left on the door’s row. 35 of 35 Center and Mart wall signs at one or two cells right on the door row; only 27 of 54 building signs on the door row, 33 of 54 to the left, mode two cells left (10 signs)
Town sign The town’s name stands further in than the first door, where paths meet on my reading, not at the gate. 6 to 38 walked cells from the entry, median 15; nearer than the first door in only 4 of 16; the junction is the author’s reading, not a measurement
Exits and dead ends Past the start, give a town two ways out on foot. 1 exit on foot in all three starting villages, Pallet, New Bark and Littleroot (Pallet’s and New Bark’s second ways are by water), and in one port, Lilycove, whose second is by sea; the other 12 towns 2 to 4; dead-end tips 0 in Pallet and Littleroot, up to 2.75 per 100 walkable cells in big cities
Density A dense city fakes density with buildings you cannot enter. Goldenrod about 45 doorless houses to 12 doored; Cerulean 4 doorless to 7 doored; one each in Rustboro, Slateport, Mauville, and in Violet a house whose drawn door has no warp
View The view decides the plan: a town wider than about two screens needs a landmark visible from the arrival. Emerald shows 7 cells either side of the player, Red and Blue 4 left and 5 right; screens of 15 by 10 and 10 by 9 cells

Sources for the table: the sixteen towns’ measurements in section 2;15678 the screens and the walk in section 1.202223

Three of those rules need a sentence about what they mean on a phone at Kiradex’s scale, and these sentences are my analysis from the view sizes in section 5.

Size, on the Duo. The open iPhone Duo held wide shows 29.7 by 20.9 cells in Kiradex, two Game Boy Advance screens by two. A 40-by-30 town is 1.93 of those views, which is how a starting village felt on a Game Boy Advance; on the outer display, 14.6 by 21.2 cells, the same town is 3.9 views, more than Oldale’s 2.67 Game Boy Advance screens and less than Petalburg’s 6.371

First door and view, on the Duo. At the arrival the open Duo shows every one of Kiradex’s seven doors, the outer display four, an iPhone 18 Pro Max in portrait two.37 So the first-door rule matters most on the outer display and on single-screen phones, where a door ten cells away may be the only door in view.

Streets, on touch. In Kiradex you tap a destination and the collector walks a planned path to it (section 5).50 Collectors do not block one another in the app’s code: the planner tests each step only for walkable ground, and another collector’s walk is planned by the same call, so two collectors who meet in a one-cell lane are drawn overlapping and pass through each other.5051 Two cells is the commonest narrowest point on the handhelds’ entry-to-door walks, 48 of 112, though one cell occurs in 28 of them, in 9 of the 16 towns.8 Setting two cells as the floor is my choice, tighter than the canon, and on my reading a matter of legibility: a lane two cells wide has room for two figures side by side, while in a one-cell lane two collectors who meet can only be drawn one on top of the other. If walkers are ever made to block each other, the same floor is what keeps a squeeze from becoming a wait. The brief’s dead-end limit of 1 per 100 walkable cells is the villages’ level rather than a tighter one: four of the five village-sized towns are under it, New Bark is over, and 8 of the 16 towns exceed it.8

The density rule is the one I would not copy. It belongs to cities of sixteen screens, and Kiradex’s town is under two views of the open Duo;37 on my reading, a village-sized town with doorless filler would only add doors that do not open.

5. The Apple way: what a phone shows of a town, and how a collector walks it

The handhelds had one screen and one view. An iPhone has as many views as it has postures, and the iPhone Duo has two displays,52 so the first job on the Apple side is to say, in cells, what each one shows.

The view, in cells

Apple’s specifications give the iPhone Duo’s inner display as 1,878 by 2,670 pixels at 430 pixels per inch and the outer as 1,398 by 2,034 at 460.52 The Xcode 27 simulator profile gives the outer screen as 1,398 by 2,034 pixels at scale 3, 466 by 678 points, and the inner as 2,007 by 2,853 at scale 3, 669 by 951 points.53 The view sizes below use the simulator’s points, full screen, with no HUD or safe area subtracted and without modeling the inner panel’s downsampling from the simulator’s pixel count to Apple’s.37

Kiradex draws its town in RealityKit through an OrthographicCameraComponent (iOS 18.0 and later), the camera that renders a scene “without the perspective of depth, meaning faraway objects don’t look smaller.”5451 PlazaRig.fit sets the pixel scale to the largest whole number of device pixels per texel that still shows 20 tiles of 16 pixels top to bottom, pixelScale = floor(pixelsTall / (20 × 16)), and the view then shows the screen’s pixel width and height divided by that scale, in world pixels. When the phone is flat, the camera follows the player and is clamped to the map’s edges.51 By that rule:37

Device and posture Points Device pixels per texel View in cells Doors in view at the arrival
iPhone Duo outer, portrait 466 × 678 6 14.56 × 21.19 4
iPhone Duo outer, landscape 678 × 466 4 31.78 × 21.84 7
iPhone Duo inner, landscape 951 × 669 6 29.72 × 20.91 7
iPhone Duo inner, portrait 669 × 951 8 15.68 × 22.29 4
iPhone 18 Pro Max, portrait 440 × 956 8 10.31 × 22.41 2

The world post in this series published 10.3 by 22.4 for the Pro Max and 29.7 by 20.9 for the open Duo, and the measurement here reproduces both.3937 In handheld screens, the inner display held wide is 2.0 Game Boy Advance screens across and 2.1 tall, about 4.1 screens of area; the outer display in portrait is about 2.1 screens; a Pro Max in portrait about 1.5.37 The inner display shows the 40-by-30 town about the way a Game Boy Advance showed Littleroot (1.93 views against 2.67 screens), and the outer display between the way it showed Littleroot and Petalburg (3.89 views, against 2.67 and 6.0 screens).374

The view rule is why the town’s plan depends on posture. On the open Duo held wide, the view at the arrival runs from x 4.6 to 34.4 and y 3.1 to 24.0: the whole town but its outer ring, all seven doors at once. On the outer display it runs from x 12.2 to 26.8 and y 2.9 to 24.1, a column down the middle of the town that holds four doors.37 A door outside that column is a door the collector has to walk toward before seeing it, which is what the brief’s landmark and sign rules are for.

The walk, in cells, and what the app does with it

The handhelds’ walk is a fixed pace: Emerald’s sixteen frames a cell is 3.7 cells a second.23 Kiradex’s nominal walking pace is close to it, four tiles a second (tilesPerSecond: Float = 4), and that closeness is what lets the handhelds’ distances carry over to the phone as distances rather than as ratios.51 It does not turn the cell counts in this post into journey times, because the app does not walk the way the measurement does. Its walker plans eight-way paths (below), and it runs: walk(to:) sets running = steps.count >= 6, and a run moves at runPace, 1.6 times the walk, a diagonal step taking the square root of two as long as a straight one.51 On the app’s own path rule, the hall from the arrival is a path of 7 steps costing 8.24 tiles, against 10 cells walked four ways, and Comet’s shop 18 steps costing 20.07 tiles, against 23; every one of the seven doors is six steps or more away, so the app runs to all of them.55 So this post gives no Kiradex journey times: a four-way cell count over four tiles a second would be neither the app’s path nor its gait, and I have not timed a walk on a phone or in the simulator.

The path, and the platform’s pathfinder

The measurement walks four ways, as the handhelds do. Kiradex’s own walker does not: TileMap.path(from:to:) searches eight ways, a diagonal step costing the square root of two and allowed only when both tiles it passes between are walkable, “so nobody slips through the corner of a wall,” with the straight steps tried first so that at equal cost the walk keeps to the cardinal directions.50 Any four-way walk is also an eight-way walk of the same cost, so the walked distances in this post are an upper bound on the cost of the path the app plans, and the brief’s four-way distance limits are conservative for the app (its which-door-is-nearer clauses are not: four-way and eight-way orders can differ); the one check that crosses into another area, the card shop’s (C2), uses the app’s own eight-way rule, as the routes post’s distances do.917

The platform has a ready-made alternative. GameplayKit’s GKGridGraph, available since iOS 9.0, is “A navigation graph for 2D game worlds where movement is constrained to an integer grid,” built with init(fromGridStartingAt:width:height:diagonalsAllowed:), where the last argument chooses between four and eight neighbors, and searched with findPath(from:to:), which returns “the shortest traversal of the graph between the specified nodes.”565758 Its documentation also covers the town-to-area case the exits in the brief create: “Pathfinding need not be limited to nodes that are contained in the same graph.”58 Kiradex keeps its own search over its 40-by-30 map; I have not measured either on a device, and nothing in this post times a path search.

What a check costs

The brief in section 7 is checked two ways. measure_kiradex.py reads the shipped town.json with the same code that measured the sixteen towns and writes kiradex.json; measure_check_kiradex.py reads that, the shipped export and the exports of the areas it connects to, and prints PASS or FAIL for each of eleven checks, with the number. Both run on a Mac and only read the app’s repository.379 What a script cannot see, a capture can: the Xcode 27 simulator’s iPhone Duo profile gives the inner and outer displays, and a UI test’s screenshot at the arrival shows which doors and which sign are in the frame.53 Neither the walk nor the camera has been timed on a phone for this post.

6. The case study: Kiradex’s town at build 35, measured like the others

Kiradex World’s town was drawn before any of this was measured. The structures post gave it buildings and, in its update, two levels: a terrace with the houses, the hall and the fountain above a wall with five flights of stairs, and a court below with the shop, two houses and the park, the arrival under the grand stair.18 So the question for this post was not whether the town looks right but whether it is laid out right by the numbers the canon keeps, and the only fair way to ask was to run the same code over it.

The measurements

The build 35 export of town.json, read on October 4, 2026, is 40 by 30 cells, between Petalburg (30 by 30) and Rustboro (40 by 60) in area and 8.0 Game Boy Advance screens. It has seven buildings with doors: five houses (one of them the spare that also leads to your room), the hall, and the two-story shop. Its shares are 57.9 percent walkable, 18.8 percent building, 1.9 percent water and 21.4 percent other blocked; 212 cells carry the building letter X. There is one signpost, S at (7,10), and no map connection: the town is fenced.5937

From the arrival at (19,13), on foot: the hall is 10 cells away, Moss’s house 13, Dawn’s 13, the spare house 14, Prism’s 20, your house 21 and Comet’s shop 23. Walked equals Manhattan for every door but three: Comet’s (23 against 21), Dawn’s (13 against 11) and the spare house (14 against 12). The narrowest point on the walk to Comet’s door and on the walk to Dawn’s is one cell.37 The corridor median is 5 cells; 17.1 percent of walkable cells sit in runs of two or fewer; there are 17 dead-end tips, 2.45 per 100 walkable cells, which is the density of Emerald’s big cities, not of its villages.375 On the app’s own eight-way path the farthest door, Comet’s shop, costs 20.07 tiles, and the app runs it (section 5).55

Next to the canon, the size, the shares, the first door and the view are right. Its walkable share and building share sit with Littleroot’s and Mauville’s. What is missing is the town’s grammar: one signpost for seven doors where the canon has 54 building-name signs for 107 doored buildings, plus a wall sign beside every Center and Mart door in all three games (8 of the 35 in Red and Blue, 5 in Crystal, 22 in Emerald); no exits; a service door, the shop, that is the farthest door rather than the nearest, and that the world plan moves out of the town altogether; two walks that squeeze to one cell; and 17 dead-end tips.3761

The eleven checks

measure_check_kiradex.py turns the rules of section 4 into eleven acceptance checks and prints PASS or FAIL with the number. On the build 35 export it passes six and fails five.9

Check Condition Build 35 Result
C1 the hall is the first door, within 10 walked cells of the arrival the hall 10, the next door 13 PASS
C2 the card shop, in Binder Row, is the first door inside the east seam, within 15 walked cells of it, and within 60 tiles of path from the arrival no east connection; the shop is in the town, 23 cells FAIL
C3 every door within 25 23 PASS
C4 narrowest point on the shortest walk the measurement takes to each door at least 2 cells 1 on the walks to Comet’s and Dawn’s FAIL
C5 dead-end tips at most 1 per 100 walkable cells 17 tips over 695 walkable cells FAIL
C6 walkable share 45 to 63 percent 57.9 PASS
C7 building share 10 to 22 percent 18.8 PASS
C8 at least 4 signs in the town and the shop’s area (for the town’s, the hall’s, the shop’s name sign and its wall sign) 1 FAIL
C9 at least 2 connections on different edges, each with at least 2 crossings reached on foot 0 connections FAIL
C10 the town covers at most 2 open-Duo views, held wide 1.93 PASS
C11 at least 3 doors in the Duo’s outer-display portrait view at the arrival 4 PASS

The thresholds trace to the rules of section 4, and not all of them to the canon’s middle. To see which, I ran all eleven over the sixteen towns, each with the town’s story entry in place of Kiradex’s arrival and the Pokémon Center as the service door, held to C2’s in-area part: the first door from the entry and within 15; C9 is run twice, with gates and single crossings counted as the canon’s towns use them, and by its own rule.8 Only the sign count passes in every town, and five of the checks fail in eight towns or more.

Check Where the threshold comes from Canon towns that fail it
C1, the first door within 10 (for Kiradex, the hall) my choice, tighter than the canon’s middle: first doors 5 to 17, median 12 10 of 16
C2, service door first and within 15 the canon’s central value: the Center’s median walk from the entry is 15 in the 13 towns with one, and the Center is the first door in 7 of them 6 of 13
C3, every door within 25 my choice, just above the villages’ farthest doors, 16 to 22 in the five village-sized towns 10 of 16, every town larger than 20 by 20 but Cherrygrove
C4, every door walk at least 2 wide my choice, tighter than the canon (section 4) 9 of 16, Pallet among them
C5, at most 1 dead-end tip per 100 walkable cells the villages’ level: four of the five village-sized towns are under it, New Bark over 8 of 16
C6, walkable 45 to 63 percent the canon’s central band, which holds 11 of the 16 5 of 16
C7, buildings 10 to 22 percent the canon’s central band around its median of 13 4 of 16: Viridian, Cherrygrove, Violet, and Lavender at 22.2
C8, at least 4 signs the fewest any town has, 4 0 of 16
C9, at least 2 exits on foot the canon’s value past the start 4 of 16 with gates and single crossings counted: Pallet, New Bark, Littleroot, Lilycove; 5 of 16 by C9’s own rule (two seams, each with 2 crossings), Goldenrod too
C10, at most 2 open-Duo views my choice for the device, applied in the same cells 8 of 16, every town of 40 by 36 cells or more
C11, at least 3 doors in the outer display’s view at arrival my choice for the device, with the camera on the best cell of the entry 4 of 16: Viridian, Cherrygrove, Rustboro, Slateport

So five checks, C1, C3, C4, C10 and C11, are my choices, tighter than the canon’s middle, just above the villages’ farthest doors, or set for a device the canon never had; one, C5, holds Kiradex’s town to a village’s level, the scale it has on the open Duo (section 4); and five, C2 and C6 to C9, are the canon’s central values or below them.81 Section 4 says why the street floor is where it is.

On my reading, the failures are of one kind. The town was composed as a picture, a terrace, a wall, a court and a park, and its paths were drawn to reach every door;18 nothing in that process asked which door a collector needs most, where the town’s name should stand, or how anyone leaves. The fixes in the brief are mostly moves rather than additions.

Two differences from the structures post

Two numbers here differ from the structures post’s description of the town, and both are differences between builds, not errors in either. That post says building cells “become X in the letters, 188 of them”; that described the build 22 town, and the build 35 export carries 212 X cells.1859 And that post gives your house as “five wide,” while its object in the build 35 town.json spans eight columns, x 3 to 10. I did not investigate either difference further for this post.185937

7. The brief: what Kiradex builds and the checks it must pass

The build 35 town already meets the canon on size, shares and view, and its first door is the hall at 10 cells: C1, C3, C6, C7, C10 and C11 pass.9 What it lacks is the town’s grammar, so the brief keeps the 40-by-30 plan and the two levels and adds districts, distances, signs, a ring without dead ends, and ways out. It is fitted to the world plan of this series’ routes post, which is the authority where the two meet: the card shop in Binder Row, a shopping street joined to the town’s east edge, the Meadow Walk joined to its north edge, and the Gallery Quarter reached through an arch on the west; the routes post calls the town the Square.17 Coordinates are the forge’s (scripts/forge/town.py), x to the right and y down.59 Nothing in it borrows a place, a creature or a mark from any game measured above; it takes the measured mechanics and nothing else.

A schematic of Kiradex's 40-by-30 town in cells, with no art: building cells, walkable, blocked and water cells from the build 35 town.json; the seven doors; the arrival at (19,13) under the grand stair; the cell under the hall's door marked as the town's tram stop and the landing after a jump; the dashed outline of the Duo outer display's view at the arrival; the 17 dead-end tips as dots; the one-cell squeeze on the walks to Dawn's and Comet's doors; the one signpost at (7,10); the shop on the lower street labeled as moving east; and the world plan's three ways out drawn along the edges: an open seam to the Meadow Walk on the north edge at x 4 to 27, an open seam to Binder Row and the card shop on the east edge, drawn as a dashed 14-row span because Binder Row is 14 tiles tall and the forge places it along the edge, and the arch to the Gallery Quarter on the west, also dashed because its rows are the forge's to place.

The town as shipped in build 35 with the brief’s targets drawn over it: the shop moves east to Binder Row, the 17 dots come down to at most 6, and the north and east edges open as seams.38

Districts

The town as it is, named, with targets. Each district is a band across the town, x 1 to 38, so 38 cells wide. The open Duo held wide shows 29.7 by 20.9 cells: each district’s depth fits in one view (10, 5, 8 and 7 rows against 20.9), most of its width is in view (29.7 of 38), and the camera follows the player along the band for the rest. The town as a whole stays under two such views (C10).3751

District Cells (x, y) What is in it Walk from the arrival (19,13) today Target
Upper street x 1 to 38, y 1 to 10 your house, Moss’s, the hall, Prism’s; the terrace with the fountain hall 10, Moss 13, Prism 20, yours 21 the hall stays the first door (at most 10, no door nearer); upper houses at most 22; the north seam to the Meadow Walk
Court x 1 to 38, y 11 to 15 the arrival under the grand stair, the wall with five flights, stalls, beds 0 the town sign within 6 cells of the arrival, inside the outer display’s view, Kiradex’s choice against the canon’s pattern (change 4)
Lower street x 1 to 38, y 14 to 21 Comet’s shop, Dawn’s house, the spare house spare 14, Dawn 13, shop 23 the shop moves to Binder Row; Dawn’s walk at least 2 cells wide
Park x 1 to 38, y 22 to 28 the pond, trees, benches lawn edge about 9 a loop path with no dead-end tips

The court’s and the lower street’s bounds overlap in rows 14 and 15, where the shop’s lot begins at the west end.5937

The changes, each with its check

  1. Move the card shop to Binder Row. Today the two-story shop is the town’s farthest door, 23 cells, the opposite of the canon’s service rule. The routes post puts the card shop in Binder Row, east of the town across an open seam, and this brief follows it: the shop leaves the lower street, and the service rule goes with it. In Binder Row the shop is the first door from the seam, at most 15 walked cells inside it and inside the outer display’s frame from Binder Row’s first tile past the seam, a view 14.6 cells across, so in practice within about 7 cells of that tile’s column, the way seven of the thirteen Center towns put the Center first and within 15 of the way in; and the walk from the arrival to its nearest door costs at most 60 tiles on the app’s eight-way path, the routes post’s own limit.178 That leaves the town’s first door to the hall (change 7), which on my reading is the door the town is for. What stands on the shop’s lot afterwards is the forge’s choice. Check: C2, which reads Binder Row’s export as well as the town’s and takes the shop’s nearest entrance, so a second shop door can only help.9
  2. Land teleports one step from the hall. When a collector jumps to a friend’s town or rides the tram to the town, place them on the cell south of the hall’s door, (22,7), not on a generic spawn; the court arrival stays the first-launch spawn. Make that cell the town’s tram stop, the one entry of its export’s stops, so the routes post’s tram, which ends a ride at the destination’s stop, and the jump land on the same cell. This is the Fly rule, which all thirteen Center towns keep; Binder Row’s own stop, by the same rule and my choice, is the cell under the shop’s door. Check: the proposed C12 below reads the export’s stops as [[22, 7]], and a UI test confirms that after a jump or a ride the collector’s cell is (22,7).15917
  3. Widen the squeeze. The shortest walks from the arrival to Dawn’s door and to Comet’s door pass a one-cell gap; on the path the measurement takes, both pass the same cell, (16,21). Comet’s walk leaves with the shop; Dawn’s stays. Make every arrival-to-door shortest walk at least 2 cells wide at its narrowest. Check: C4 passes.3738
  4. Four signs: the shop’s wall sign where the canon puts it, the town sign where the phone needs it. In the town, a town sign on the court within 6 walked cells of the arrival. That is Kiradex’s choice against the canon’s pattern: the canon’s town sign is further in than the first door in 12 of 16 towns, a median 15 walked cells from the entry, and only Lilycove’s stands as near as 6. A handheld player walks in from a route and passes a sign that far in. A collector appears at the arrival instead, so the sign has to be in the first frame there, which on the outer display is the column x 12.2 to 26.8; within 6 cells is my choice for a sign read on arrival rather than passed on the way in. The hall’s name sign stands on its door’s row one or two cells beyond the hall’s west wall, at (18,6) or (17,6), both walkable. The canon’s commonest offset for a name sign is two cells left of the door (10 of the 54 building-name signs, though only 27 of the 54 stand on the door’s row at all), and every one of those ten stands exactly one cell beyond its building’s west wall, because each door is one cell in from that wall (eight of the buildings are 4 wide, May’s house 5 and Lilycove’s Motel 6). The hall’s door is four cells in from its west wall at x 19, so two cells left of it, (20,6), is a cell of its front wall. The rule that carries over is the distance from the wall: (18,6) is the canon’s one cell beyond it, and (17,6), two cells beyond, is the brief’s allowance. The place is my choice from that mode. In Binder Row, the shop’s name sign the same way, beside its building’s west wall on the door’s row, and the shop’s own sign on its wall one or two cells right of its door, on the door’s row, as all 35 Center and Mart wall signs stand. Optional: a name plate beside each collector’s house, placed the same way. Check: C8 counts four signs in the town and Binder Row; the proposed C12 below checks where they stand.6959
  5. Close the dead ends. 17 dead-end tips today, 2.45 per 100 walkable cells: a big-city density in a village-sized town. Fill them or loop them, to at most 6 at today’s 695 walkable cells: C5 passes when the tips are at most the walkable cells over 100, and 695 over 100 is 6.95, so 7 tips would still fail. Closing tips by filling cells lowers the walkable count too, so recount both. Check: C5 passes; the figure script lists the tips’ cells.375
  6. Open the north and east edges as seams. The routes post joins three areas to the town: Binder Row at an open seam on the east edge; the Meadow Walk at an open seam on the north edge, which its model places 4 tiles in from the town’s west end, its hedged lane meeting the lawn between the hall and Prism’s house; and the Gallery Quarter through the arch, an 8-by-6 house with a door on each side, on the west.17 The two seams are the town’s exits on foot. Each is a gap in the fence at least 2 tiles wide whose cells are walkable on both sides of the seam, and each is a connection in the export in the routes post’s format, {"dir": …, "area": …, "offset": …}, with the neighbor’s coordinate along the shared edge the town’s minus the offset. In the repository at commit fc9d487, later than build 35, the app already decodes that format (WorldMap.Connection), the server loads it (Plaza.load_all), and the forge’s export carries the key, empty.6017 The arch is a door, as a canon gatehouse is, and is a third way out once the Gallery Quarter is built. Check: C9 for the two seams, and the proposed C13 below for how far they are.9
  7. Keep the challenge’s place for the hall. The hall is Kiradex’s show and its civic landmark. The handhelds put the challenge at the far end, but Kiradex’s arrival already faces the hall across the court at 10 cells, the landmark as the first door. That is Kiradex’s own choice: neither the Pokémon placement at the far end nor Stardew’s, where the landmark is a separate destination 46 tiles beyond the shop. On my reading that is right for this town: the hall is the one door every collector should see first. Check: C1, which asserts the hall itself: at most 10 walked cells and no door nearer.3732

Distances the plan holds to

Cells from the arrival, walked four ways, except the card shop’s path, which is the app’s eight-way path cost in tiles, as in the routes post.37117

Destination Today Target Rule
First door 10 (the hall) the hall, at most 10, no door nearer first door
Card shop 23, in the town in Binder Row: the first door inside the east seam, at most 15 cells in; at most 60 tiles of path from the arrival service; the routes post’s distance
Median door 14 at most 15 village medians 11.5 to 18 (Oldale, Pallet, New Bark, Littleroot, Lavender), Petalburg and Mauville, cities, 21.5 and 26
Farthest door 23 at most 25 farthest door, just above the villages’ 16 to 22 (C3)
Town sign 19 (the signpost at (7,10)) at most 6 Kiradex’s choice against the canon’s pattern, at the near end of the canon’s 6 to 38 (change 4)
Each seam none its nearest crossing at most 30 from the arrival exits

Acceptance

The script checks are the eleven in section 6, run as python3 measure_kiradex.py && python3 measure_check_kiradex.py from the towns evidence folder against the shipped town.json; they need no server, device or simulator. C2, C8 and C9 also read the export of each area the town’s connections name, the app’s when it exists, else the server’s copy, and fail until one does; in-memory fixtures in the same folder show each of C1, C2, C8 and C9 passing a correct layout and failing a broken one, a second shop door in either order and a shop’s area at the north seam included.379 They do not cover the whole brief: C8 counts signs without placing them, C9 checks the seams without measuring their distance, and nothing checks the median door. Three more checks are proposed for the same script; none of them exists yet.

  • C12, signs and the stop. The town sign within 6 walked cells of the arrival; the hall’s name sign on its door’s row one or two cells beyond its west wall, (18,6) or (17,6), and the shop’s beside its own building’s west wall the same way; the shop’s own sign one or two cells right of its door, on the door’s row; and the town export’s stops equal to [[22, 7]], the cell under the hall’s door (change 2).
  • C13, seams. Each seam’s nearest crossing at most 30 walked cells from the arrival; once the Gallery Quarter exists, the arch’s door on the town’s west side reachable on foot.
  • C14, distances. The median arrival-to-door walk at most 15 (14 today) and every upper-street house at most 22 (21 today).37

The teleport landing in change 2 is a UI test, and the view targets are captures. The brief is done when C1 to C11 and the proposed C12 to C14 print PASS (C12 including the stop at (22,7)), the landing UI test passes, and the captures show the following. Captures on the Xcode 27 simulator’s iPhone Duo: at first launch, on the open Duo held wide and on the outer display, the frame shows the hall’s door and the town sign; on the outer display, with the collector on Binder Row’s first tile past the seam, the frame shows the card shop’s door; after a jump to a friend’s town or a tram ride to the town, the capture shows the collector on (22,7).53

Not in this brief

  • Height in the walk. The two levels stay drawn, not simulated; no per-cell elevation, ledge or bridge here. The series’ elevation post, Pixel-Art Ledges, Stairs and Bridges in a Tile World, takes them up, with one-way drops in the Meadow Walk’s terrace walls and a footbridge over the park’s pond.
  • The areas themselves. Binder Row, the Meadow Walk, the Lakeside and the Gallery Quarter are the routes post’s; this brief holds the town to their seams, and the shop to its first-door rule inside Binder Row.17
  • Doorless buildings. No filler houses to make the town look denser; that is a city’s device, and this is a village-sized town (section 4).
  • New buildings and interiors. The town’s other six buildings stay; the shop moves to Binder Row with its interior unchanged.
  • The sign’s art. Where signs stand is specified; how they are drawn belongs to the forge’s kit, where the structures post’s hanging sign already lives.18
  • Anything from the games measured. No place name, creature, mark or tile from Pokémon, Stardew Valley, Animal Crossing or Final Fantasy VI; the brief proposes original expression of measured mechanics.
  • Timings on a device. The checks are cells, path costs, views and captures; nothing here promises a frame time or a journey time.

Key Takeaways

If you draw the art

  • Plan the town in screens of the device it will be played on before you draw a tile: two by two for a starting village, six to sixteen screens for the first city, sixteen or more only for a big one.1
  • Put a shop’s own sign on its door’s row, one or two cells right of the door, where every Center and Mart wall sign stands; a name sign near its door, most often two cells left. Put the town’s name further in than the first door, unless players appear at the arrival rather than walk in, as Kiradex’s collectors do (change 4); I read the canon’s as standing where paths meet.6
  • Draw streets 3 to 7 cells wide and treat a one- or two-cell squeeze as a decision, not an accident.5
  • Leave doorless filler to cities; in a village every door you draw should open.3

If you build the engine

  • Measure your own map with the same code you use on the references, a four-way walk with Manhattan beside it measured from the same start, and turn the rules into a script that prints PASS or FAIL against the shipped file.59
  • Say what each posture shows in cells. In Kiradex the open Duo held wide shows 29.7 by 20.9, the outer display 14.6 by 21.2, a Pro Max in portrait 10.3 by 22.4, and the plan has to work in the narrowest of them.37
  • Land fast travel on a door’s step-out cell, the cell the handhelds use in every town with a Center.1
  • Seed a town’s entry from the cells a walker can cross into: the connection’s offset places the neighbor’s edge, and only edge cells walkable on both maps, and reached from where the player comes onto the route, are a way in. Seeding the whole edge put Cerulean’s first door at 5 cells instead of 16; counting any edge with a walkable cell as an exit, without the facing cell, gave Pallet a south exit it does not have.58
  • If your walker plans eight-way paths, as Kiradex’s does, four-way distances are an upper bound on its path cost, so a four-way distance limit is conservative; GameplayKit’s GKGridGraph gives either kind.5057

If you design the loop

  • Put the everyday service first or second from the way in, about ten to fifteen cells; put the challenge or the origin at the far end, unless, as Kiradex’s hall is, the landmark is the reason to come.132
  • Give every town past the start two or more ways out on foot, and let the paths inside loop. In the sixteen towns the exceptions are the three starting villages and one port, Lilycove, whose second way out is by sea.75
  • A town’s daily services can be one cluster with the landmark set apart, Stardew’s choice; or the acre can be the unit of both layout and content, the first Animal Crossing’s.3248

FAQ

How big should a pixel-art RPG town be?

Measure it in screens. Pokémon’s starting villages are two by two Game Boy screens (20 by 18 cells of 16 pixels) or about 2.67 Game Boy Advance screens (20 by 20); the first map each game names a city is 6 to 16 screens (Petalburg 6, Cherrygrove 8, Viridian 16), though Emerald’s Oldale, the town between, is village-sized at 2.67; the largest port, Lilycove, is 80 by 40 cells, 21.3 screens. Final Fantasy VI’s Narshe is about 17 Super Nintendo screens by fan rips. On a phone, count what your camera shows: Kiradex’s 40-by-30 town is 1.93 views of the open iPhone Duo held wide.13337

How far should the first building be from the town entrance?

About a dozen walking cells. Across sixteen Pokémon towns, measured by a walk over each game’s collision data from the cells a walker can cross into from the previous route, the first door is 5 to 17 cells from the entry, median 12; at Emerald’s walking speed ten cells is about 2.7 seconds.123

Where do Pokémon games put the Pokémon Center in a town?

Near the way in. In Red, Blue and Crystal it is the first door from the story entry in six of the seven measured towns that have one, in Goldenrod tied with the Department Store; Emerald moves it back in its cities but keeps it 5 cells from the route in Oldale. In all thirteen measured towns with a Center, Fly lands you on the cell directly under its door.115

Where should signs go in a top-down town?

A shop’s own sign goes on its door’s row: all 35 Center and Mart wall signs in the sixteen towns stand one or two cells right of the door. Building-name signs are looser: 27 of 54 stand on their door’s row, and the commonest place is two cells left. The town’s own sign stands a median 15 walked cells from the entry and is nearer than the first door in only four towns; on my reading it marks where paths meet.6

How wide should paths be in a tile-based town?

Three to seven cells at the median, by the sixteen towns. Squeezes of one or two cells happen on the way to a door and are a choice; Goldenrod has 38.4 percent of its walkable cells in runs of two or fewer (on my reading, to feel like a city), Petalburg 6.6 percent.5

How big is Pelican Town in Stardew Valley?

By the Stardew Valley Wiki’s full-town image, 1,920 by 1,760 pixels, which at 16-pixel tiles is 120 by 110 tiles. That is the image, not the game’s map file. By straight-line distance along the grid, with door tiles read from the image to within a tile and no collision, so lower bounds on the walk, the clinic and the saloon stand 7 and 16 tiles from the shop and 23 from each other, and the three are 38 to 61 tiles in from the Bus Stop entrance: Pierre’s 45, the clinic 38, the saloon 61.4532

How many exits should a town have?

Two or more, except the starting town. Pallet, New Bark and Littleroot, the three starting towns, have one exit on foot each, and so does the port of Lilycove, whose second exit is by sea; the other twelve measured towns have two to four. Pallet and Littleroot have no dead-end tips at all.75

Related on this site: Pixel-Art Routes: Map Connections and Districts on iPhone plans the areas past the town, Binder Row, the Meadow Walk, the Lakeside and the Gallery Quarter, that the brief here is fitted to; Pixel-Art Structures: Houses, Halls and Interiors on iPhone is the series’ guide to buildings, with the footprints, the kit and the two-level town this post measures; Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew is the first, with the tile systems, the map sizes and the phone views reproduced here; Pixel-Art People: Characters and a Creator on iPhone is the collector who walks these streets; iPhone Duo for Developers: The 1.42 Problem and the SDK Gap derives the inner display’s point size the view table rests on; Prepare Your App for iPhone Duo: A Worked Example covers the fold the camera keeps clear; and Xcode 27.1 Beta: Your App in the iPhone Duo Simulator covers the simulator the brief’s captures come from.

Sources


  1. Author’s measurement, October 4, 2026: measure_tables.py in the author’s evidence folder for this post, which reads gen1.json, gen2.json, gen3.json and kiradex.json (written by the per-generation scripts below) and prints the size, shares, door counts, first, median and farthest door from the entry, the median walked-to-Manhattan ratio (re-run October 5, 2026 with the straight-line rule of section 1; the earlier figures, which took the straight line from the nearest edge cell of any kind, are kept beside the new ones as manhattan_any_start; re-run again October 5, 2026 with statistics.median, the mean of the two middle values over an even count, where the first run took the upper middle value), and the landmark table (Center, Mart, Gym, Lab against the entry, the Center’s rank among distinct door distances, the Fly point’s walk to the Center door). Entry per town is the author’s choice of the connection toward the previous stop on the main path; the connection and its offset are the map header’s. Revised October 15, 2026: entries now seeded from route crossings, the edge cells a walk on the route can cross into, rather than every walkable cell of the entry edge (notes 2, 3, 4, 5); the earlier version is kept beside it. Cerulean’s first door moved from 5 to 16 and the sixteen towns’ first-door median from 10.5 to 12. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  2. Author’s measurement, October 4, 2026: measure_gen1.py (with measure_common.py) over a clone of pret’s pokered at commit d2704a6 (September 22, 2026): map sizes from constants/map_constants.asm, warps, signs and Fly points from data/maps/objects/*.asm and data/maps/special_warps.asm, collision from each tileset’s passable list tested on the lower-left 8-by-8 tile of a cell, ledges from data/tilesets/ledge_tiles.asm; footprints read by eye from grayscale renders of the .blk maps with a 16-pixel grid (renders/gen1_*.png, zoom.py), each checked against its warp. Entries (revised October 15, 2026): the crossings between the town’s entry edge and the route facing it, placed by the header’s offset in blocks of two cells (macros/scripts/maps.asm, connection), both cells walkable, whose route cell a walk on the route reaches from the route’s start: Route 1’s seam with Viridian for Pallet and with Pallet for Viridian, Viridian Forest’s north gate warp at (3,11) on Route 2 for Pewter, Mt. Moon’s exit warp at (24,5) on Route 4 for Cerulean (data/maps/objects/Route4.asm), Rock Tunnel’s south warp at (8,53) on Route 10 for Lavender; Cerulean’s entry is (0,18) and (0,19). The walk does not pass through buildings; Cerulean’s burgled house has a back door whose warp, (3,0) in CeruleanTrashedHouse.asm, comes out at the city’s (27,9). Output gen1.json; the earlier version is kept beside it. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. Author’s measurement, October 4, 2026: measure_gen2.py (with measure_common.py) over a clone of pret’s pokecrystal at commit 5beda23 (September 29, 2026): map sizes from constants/map_constants.asm, connections from data/maps/attributes.asm, spawn points from data/maps/spawn_points.asm, collision from the four typed collision bytes per 32-pixel block mapped through data/collision/collision_permissions.asm; footprints and doorless houses read by eye from grayscale renders with a 16-pixel grid (renders/gen2_*.png); Goldenrod’s doorless count is about 45, plus or minus 5. Entries (revised October 15, 2026) as in note 2, with connections and offsets (blocks of two cells) from data/maps/attributes.asm: Route 29’s seam with Cherrygrove for New Bark and with New Bark for Cherrygrove, the Ilex Forest gate warps at (13,37) and (14,37) on Route 34 for Goldenrod; Violet’s entry is the cells of its two warps to ROUTE_31_VIOLET_GATE, (39,24) and (39,25). New Bark’s west edge has 4 walkable cells, of which (0,8) and (0,9) face walkable cells of Route 29. Output gen2.json; the earlier version is kept beside it. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  4. Author’s measurement, October 4, 2026: measure_gen3.py (with measure_common.py) over a clone of pret’s pokeemerald at commit 731ad5b (October 1, 2026): sizes from data/layouts/layouts.json, cells from each layout’s map.bin (collision bits, elevation), behaviors from the metatile attributes, warps, signs and connections from data/maps/*/map.json, heal points from src/data/heal_locations.json; footprints by a flood fill from each door, opened by two-by-two and checked on renders (render_gen3.py), 9 of 53 set by eye (Wally’s house, Petalburg House 2, Slateport’s Battle Tent, Museum, Shipyard and coastal house, Mauville’s Bike Shop and two houses). Entries (revised October 15, 2026) as in note 2, with offsets in metatiles from each map.json (src/fieldmap.c subtracts connection->offset on crossing) and the elevation rule applied to the step across: Route 101’s seam with Oldale for Littleroot and with Littleroot for Oldale, Route 102’s seam with Oldale for Petalburg, Petalburg Woods’ north warps at (10,30) and (11,30) on Route 104 for Rustboro, Route 110’s seam with Slateport for Mauville, Route 121’s seam with Route 120 for Lilycove, and for Slateport the cell (21,23) on Route 109, three steps up from Mr. Briney’s boat at (21,26) (data/maps/Route109/map.json; DewfordTown_Movement_ExitBoatSlateport in data/maps/DewfordTown/scripts.inc). Oldale’s south edge has 12 walkable cells, of which x 8 to 11 face Route 101’s path. Output gen3.json; the earlier version is kept beside it. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  5. Author’s measurement code, October 4, 2026: measure_common.py in the towns evidence folder: breadth-first walk in four directions with ledges and Emerald’s elevation rule (after IsElevationMismatchAt and ObjectEventUpdateElevation in src/event_object_movement.c), door distance as the best walkable neighbor plus one, Manhattan distance beside every walk to a door, taken since October 5, 2026 from the start cell the shortest walk uses (straight_line; on a tie, the shortest of the tied cells’ straight lines), the narrowest perpendicular run along one shortest path, corridor width per cell (shorter of the horizontal and vertical runs), dead-end tips (one walkable neighbor, door approaches and edge cells excluded), and building shares over footprint rectangles; since October 15, 2026 also the seams: facing places the connected map’s edge by the connection’s offset (the neighbor’s coordinate along the edge is the town’s minus the offset), crossings keeps the pairs walkable on both maps with the elevation rule for the step, seam_entry takes the crossings a walk on the route reaches, and exits_on_foot the crossings the walk from the entry reaches. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  6. Author’s measurement, October 4, 2026: measure_signs.py in the towns evidence folder, classifying the 113 sign events of the sixteen towns by their scripts and text labels (Center or Mart wall sign, building-name sign, town sign, tip or notice or hidden item) and measuring each against its nearest door and the town sign against the entry; three Slateport and Lilycove signs classed as building signs stand far from their nearest door. Split by game, the script’s 35 wall signs are 8 in Red and Blue, 5 in Crystal and 22 in Emerald, where each Center and Mart carries two, one and two cells right of its door. ↩↩↩↩↩↩↩↩↩↩

  7. Author’s measurement, October 4, 2026, re-run October 15, 2026: measure_exits.py in the towns evidence folder: for each map connection, the walkable and water cells on that edge, the crossings (an edge cell and the facing cell of the connected map, placed by the offset, both walkable on foot) and how many the walk from the entry reaches; a connection is an exit on foot when one is reached, and a gate warp the walk reaches counts once on its nearest edge. Its reachable counts include walkable cells inside building footprints (Lilycove 818 of 1,452, Cerulean 378 of 801); the post’s reachable shares come from note 8. Pallet’s line reads south->ROUTE_21: walk 2, water 4, crossings 0; Route 21’s north row has 4 water cells and no walkable cell, and the cells facing Pallet’s (2,17) and (3,17) have lower-left tile $3a, not on the Overworld passable list. Lilycove’s line reads connections 2, on foot 1, west to Route 121 with 6 walkable and 17 water edge cells and 3 crossings, east to Route 124 with 0 and 36. Revised October 15, 2026: before, the script counted any connection edge with a walkable cell as an exit, which gave Pallet 2 exits where it has 1; the earlier version is kept beside it. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  8. Author’s measurement, October 5, 2026, re-run October 15, 2026: measure_canon_vs_checks.py in the towns evidence folder (output saved beside it as measure_canon_vs_checks.out), which reads gen1.json, gen2.json, gen3.json and kiradex.json, builds the towns again with the three loaders, and applies Kiradex’s eleven checks to the sixteen towns, each town’s story entry standing in for the arrival: C1 any first door within 10; C2 the Pokémon Center the first door from the entry and within 15, in the 13 towns with one; C3 counts only doors the walk reaches; C8 counts every sign event, at least 4; C9 counts distinct openings the walk from the entry reaches, one per map edge, a connection with a crossing walkable on both maps whose town cell the walk reaches, or a reachable gate warp on that edge; C10 divides the town’s cells by the open Duo’s 29.72 by 20.91 cells; C11 counts doors inside the outer display’s 14.56 by 21.19 cells with the camera on the best cell of the entry, clamped to the map. Output: 112 entry-to-door walks, narrowest point 1 cell in 28, 2 in 48, 3 in 28, 4 in 6, 5 in 2. Fails: C1 10 of 16 (Viridian, Pewter, Cerulean, New Bark, Cherrygrove, Goldenrod, Littleroot, Rustboro, Slateport, Lilycove); C2 6 of 13 (Cerulean, Petalburg, Rustboro, Slateport, Mauville, Lilycove); C3 10 of 16 (Viridian, Pewter, Cerulean, Violet, Goldenrod, Petalburg, Rustboro, Slateport, Mauville, Lilycove); C4 9 of 16 (Pallet, Viridian, Pewter, Cerulean, Lavender, Cherrygrove, Violet, Goldenrod, Mauville); C5 8 of 16 (New Bark, Violet, Goldenrod, Petalburg, Rustboro, Slateport, Mauville, Lilycove); C6 5 of 16 (Cherrygrove, Violet, Goldenrod, Petalburg, Lilycove); C7 4 of 16 (Viridian, Lavender, Cherrygrove, Violet); C8 0 of 16 (fewest sign events 4); C9 4 of 16 (Pallet, New Bark, Littleroot, Lilycove), and 5 of 16 by Kiradex’s own C9 rule, seams only, each with at least 2 crossings reached (Goldenrod too: its south seam and the Route 35 gate; added October 16, 2026); C10 8 of 16 (Viridian, Pewter, Cerulean, Violet, Goldenrod, Rustboro, Slateport, Lilycove); C11 4 of 16 (Viridian, Cherrygrove, Rustboro, Slateport). Exits on foot: Mauville 4; Viridian, Lavender, Violet, Oldale and Rustboro 3; Pewter, Cerulean, Cherrygrove, Goldenrod, Petalburg and Slateport 2; Pallet, New Bark, Littleroot and Lilycove 1. Violet’s east edge cells are (39,24) and (39,25), its gate’s two warps, with no crossing to Route 31, so its east exit is the gate; Goldenrod’s north edge has 8 crossings, 0 reached, its north exit the Route 35 gate; Cerulean’s south and east edges have 16 and 12 crossings, 0 reached; a walk from the burgled house’s back door at (27,9) reaches 632 cells, 16 crossings south and 2 east among them (measure_cerulean_backdoor.py, output measure_cerulean_backdoor.out). Reachable on foot from the entry over the table’s walkable count, footprint cells excluded: Lilycove 793 of 1,416 (56 percent), Cerulean 371 of 794 (47 percent). The thresholds’ sources in section 6 are read from measure_tables.py’s output (note 1): the village-sized towns’ farthest doors, Pallet 17, Lavender 22, New Bark 17, Littleroot 21 and Oldale 16; and the 13 Centers’ walks from the entry, 5, 10, 10, 10, 11, 13, 15, 15, 20, 24, 26, 26 and 40, median 15, by the author’s arithmetic, 7 of them the first door. Revised October 15, 2026 with the entries of note 1 and the checks of note 9; the earlier version is kept beside it. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  9. Author’s acceptance script, October 4, 2026, rewritten October 15, 2026 (the earlier version is kept beside it): measure_check_kiradex.py in the towns evidence folder, run after measure_kiradex.py; it reads kiradex.json, the shipped town.json and, for C2, C8 and C9, the export of each area the town’s connections name (the app’s file under Kiradex/Resources/World with that id, else the server’s server/app/areas/<id>.json), and prints PASS or FAIL for checks C1 to C11. Doors keep their identities, each owned by the object whose box holds it or the row under it, and a building’s walk is its nearest door. C1 asserts the hall at most 10 and no door nearer; C2 reads the shop’s area at the east seam (any other seam fails, since October 16, 2026), its nearest shop door at most 15 walked cells from the seam’s reached crossings with no door of that area nearer, and the arrival-to-shop path on TileMap.path’s eight-way rule over the two exports joined at the offset at most 60 tiles; C8 counts S in the town and the shop’s area, at least 4; C9 needs two connections on different edges, each with at least 2 crossings reached on foot. Output on the build 35 export (and on the export at commit fc9d487, the same): PASS C1 [hall 10, nearest other door 13], FAIL C2 [no connection; the shop’s door in the town at 23], PASS C3 [23], FAIL C4 [[3, 5, 5, 3, 1, 1, 2]], FAIL C5 [(17, 695)], PASS C6 [57.9], PASS C7 [18.8], FAIL C8 [1 in the town, 0 elsewhere], FAIL C9 [0 connections], PASS C10 [1.93], PASS C11 [4]. measure_check_kiradex_fixtures.py (output measure_check_kiradex_fixtures.out) runs C1, C2, C8 and C9 on in-memory exports: a shop with two doors gives the same C2 in either warp order; a hall at 10 with a house at 3 fails C1; a house nearer the seam than the shop fails C2; one connection, a fenced seam, or the same edge twice fails C9; a single sign across the two areas fails C8; a shop’s area joined at the north seam fails C2. ↩↩↩↩↩↩↩↩↩↩↩↩

  10. pret, pokered/constants/map_constants.asm (map sizes in 32-pixel blocks), commit d2704a6, read from the local clone October 4, 2026, https://github.com/pret/pokered/blob/master/constants/map_constants.asm. ↩↩↩

  11. pret, pokecrystal/constants/map_constants.asm, commit 5beda23, read October 4, 2026, https://github.com/pret/pokecrystal/blob/master/constants/map_constants.asm. ↩↩

  12. pret, pokeemerald/data/layouts/layouts.json (layout widths and heights in metatiles), commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/blob/master/data/layouts/layouts.json. ↩↩↩

  13. pret, pokered/data/maps/special_warps.asm (fly_warp destinations), compared with each town’s warp_event lines, commit d2704a6, read October 4, 2026, https://github.com/pret/pokered/blob/master/data/maps/special_warps.asm. ↩↩

  14. pret, pokecrystal/data/maps/spawn_points.asm, commit 5beda23, read October 4, 2026, https://github.com/pret/pokecrystal/blob/master/data/maps/spawn_points.asm. ↩↩

  15. pret, pokeemerald/src/data/heal_locations.json (heal points per town) and src/region_map.c (Fly sets its destination with SetWarpDestinationToHealLocation), commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/blob/master/src/data/heal_locations.json and https://github.com/pret/pokeemerald/blob/master/src/region_map.c. ↩↩↩

  16. Author’s measurement, October 5, 2026: measure_ratios.py in the towns evidence folder (output saved beside it as measure_ratios.out), which reads gen1.json, gen2.json, gen3.json and kiradex.json and lists, town by town and door by door, the walk from the entry, the straight line from the start cell that walk uses, that cell, and the ratio, with the same entries, doors and median (statistics.median) as measure_tables.py. Revised October 15, 2026 with the entries of note 1. Over the sixteen towns’ 112 entry-to-door walks, 58 have a ratio of exactly 1.00 and 9 a ratio of 2 or more: Lilycove’s house at (11,22), 60 against 16 (3.75); Goldenrod’s Bike Shop, 46 against 14 (3.29); Lilycove’s Museum, 62 against 22 and 61 against 23; Lilycove’s Harbor, 73 against 27; New Bark’s neighbors’ house, 13 against 5 (2.60); Goldenrod’s Underground entrance at (11,29), 31 against 13; Mauville’s Game Corner, 38 against 16; Pewter’s Gym, 44 against 20. ↩↩↩↩↩↩↩↩↩↩↩

  17. Blake Crosley, “Pixel-Art Routes: Map Connections and Districts on iPhone,” blakecrosley.com, October 5, 2026, https://blakecrosley.com/blog/pixel-art-world-beyond-the-plaza, section 7: the five areas (the Square; Binder Row, “A shopping street: the card shop from the structures kit,” joined to the Square’s east edge by an open seam; the Meadow Walk joined to its north edge; the Lakeside beyond it; the Gallery Quarter on the west “through the arch (two doors),” an 8-by-6 room with a door on each side); arrival to the card shop’s door at most 60 tiles on the app’s eight-way path; the connection format with the offset as “the neighbor’s origin along the shared edge, Gen 3’s convention”; a fence gap at every seam at least 2 tiles wide, walkable on both sides; a tram ride ending at the destination’s stop; and its note 66 on the Meadow Walk joined 4 tiles in from the Square’s west end, its lane meeting the lawn between the hall and the house east of it. ↩↩↩↩↩↩↩↩↩

  18. Blake Crosley, “Pixel-Art Structures: Houses, Halls and Interiors on iPhone,” blakecrosley.com, October 3, 2026, https://blakecrosley.com/blog/pixel-art-structures-on-iphone: the footprint table this post’s footprints agree with; Emerald’s elevation values (transition and multi-level); the kit’s hanging sign; the town’s buildings (“Building cells become X in the letters, 188 of them,” of the build 22 town; “your house at [3, 1], five wide”); its October 3 update on the two-level town in build 35 and the list of what remains, per-cell height and the ledge among it. ↩↩↩↩↩↩↩↩↩↩

  19. pret, pokered/constants/hardware.inc (def SCREEN_WIDTH_PX equ 160, def SCREEN_HEIGHT_PX equ 144), commit d2704a6, read October 4, 2026, https://github.com/pret/pokered/blob/master/constants/hardware.inc. ↩

  20. pret, pokered/home/overworld.asm (lda_coord 8, 9 ; tile the player is on), commit d2704a6, read October 4, 2026, https://github.com/pret/pokered/blob/master/home/overworld.asm. The player’s cell in the view, (4, 4), and the four-left, five-right, four-above, four-below split are the author’s derivation from that coordinate. ↩↩

  21. pret, pokeemerald/include/gba/defines.h (#define DISPLAY_WIDTH 240, #define DISPLAY_HEIGHT 160), commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/blob/master/include/gba/defines.h. ↩

  22. pret, pokeemerald/include/fieldmap.h, the comment above #define MAP_OFFSET 7, commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/blob/master/include/fieldmap.h. ↩↩

  23. pret, pokeemerald/src/event_object_movement.c (sStep1Funcs, sixteen Step1 entries for MOVE_SPEED_NORMAL), commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/blob/master/src/event_object_movement.c. Seconds and cells per second are the author’s arithmetic at the refresh rate in note 24. ↩↩↩↩↩

  24. The Game Boy Advance’s refresh of about 59.7 hertz, as used in Blake Crosley, “Pixel-Art Structures: Houses, Halls and Interiors on iPhone,” blakecrosley.com, October 3, 2026, section 2, “Doors, mats and warps,” https://blakecrosley.com/blog/pixel-art-structures-on-iphone. ↩↩

  25. pret, pokered/data/tilesets/collision_tile_ids.asm (passable tiles per tileset), commit d2704a6, read October 4, 2026, https://github.com/pret/pokered/blob/master/data/tilesets/collision_tile_ids.asm. ↩↩

  26. pret, pokecrystal/data/collision/collision_permissions.asm, commit 5beda23, read October 4, 2026, https://github.com/pret/pokecrystal/blob/master/data/collision/collision_permissions.asm. ↩↩

  27. pret, pokeemerald/src/metatile_behavior.c (behaviors and the surfable flag), commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/blob/master/src/metatile_behavior.c. ↩↩

  28. Author’s measurement, October 5, 2026: measure_medians.py in the towns evidence folder (output saved beside it as measure_medians.out), which re-derives every median the post states from gen1.json, gen2.json, gen3.json, kiradex.json and measure_signs.out with statistics.median: per town, the median door and the median walked-to-Manhattan ratio; across the sixteen towns, the first door (12.0, over 5, 6, 8, 10, 10, 10, 11, 11, 13, 13, 14, 14, 15, 15, 16, 17), the building share (13.0), the town sign’s walk (15) and the Center’s walk (15, over 13 towns). Median ratios: 1.00 in eight towns; New Bark 1.07, Violet 1.07, Cherrygrove 1.09, Viridian 1.10, Lilycove 1.13, Littleroot 1.15, Pallet 1.25, Lavender 1.31. The five village-sized towns (20 by 18 or 20 by 20) have median doors of 11.5 (Oldale), 12 (Pallet), 14.5 (New Bark), 15 (Littleroot) and 18 (Lavender); in Lavender, Pallet and Littleroot none of the 12 doors is walked at exactly its straight line, and the walks run 2 to 6 cells over it. Revised October 15, 2026 with the entries of note 1; the first-door median was 10.5 before. ↩↩↩

  29. pret, pokered/data/maps/headers/ (each town’s connections), commit d2704a6, read October 4, 2026, https://github.com/pret/pokered/tree/master/data/maps/headers. ↩↩

  30. pret, pokecrystal/data/maps/attributes.asm (connections, including New Bark’s east connection to Route 27), commit 5beda23, read October 4, 2026, https://github.com/pret/pokecrystal/blob/master/data/maps/attributes.asm. ↩↩

  31. pret, pokeemerald/data/maps/ (each town’s map.json: warps, sign events, connections), among them OldaleTown/map.json, LittlerootTown/map.json, PetalburgCity/map.json, MauvilleCity/map.json and SlateportCity/map.json, commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/tree/master/data/maps. ↩↩↩↩↩↩↩↩

  32. Author’s measurement, October 4, 2026: measure_stardew.py in the towns evidence folder, over the wiki image’s size (note 45) and the image map’s stylesheet (note 46); door tiles read by eye with a one-tile grid on crops made by zoom_sdv.py (z_sdv_center.png, z_sdv_west.png, z_sdv_cc.png), plus or minus one tile; distances Manhattan with no collision, so lower bounds. The 4.1 ratio to Lilycove is the author’s arithmetic (13,200 over 3,200). ↩↩↩↩↩↩↩↩↩

  33. VGMaps, Final Fantasy VI (World of Balance), Narshe, a fan-made map rip, https://www.vgmaps.com/Atlas/SuperNES/FinalFantasyVI-WorldOfBalance-Narshe.png, saved October 4, 2026; the exterior panel measured by its one-pixel border at 976 by 992 pixels by the author. ↩↩↩↩

  34. VGMaps, Final Fantasy VI (World of Balance), South Figaro, a fan-made map rip, https://www.vgmaps.com/Atlas/SuperNES/FinalFantasyVI-WorldOfBalance-SouthFigaro.png, saved October 4, 2026; panel 880 by 880 pixels, measured by the author. ↩↩↩

  35. everything8215, ff6/notes/rom-map.txt at commit 813013276c95, saved October 4, 2026, https://github.com/everything8215/ff6/blob/main/notes/rom-map.txt (“Map Properties (415 items, 33 bytes each)” at ED8F00 to EDC47F); the repository carries no map data. ↩↩

  36. pret, pokefirered/data/layouts/layouts.json (LAYOUT_PALLET_TOWN 24 by 20, LAYOUT_VIRIDIAN_CITY 48 by 40, in metatiles of 16 pixels), commit 037335f (September 26, 2026), read from the local clone October 15, 2026, https://github.com/pret/pokefirered/blob/master/data/layouts/layouts.json. ↩

  37. Author’s measurement, October 4, 2026: measure_kiradex.py in the towns evidence folder, reading the shipped town.json (note 59) with the walkable letter set the app and server share (gtpTBFsEH), measuring it with measure_common.py, and computing each device’s view by PlazaRig.fit’s rule from the simulator’s point sizes at scale 3, with the camera on the arrival clamped to the map. Output kiradex.json: shares, door walks and narrowest points, corridor widths, 17 dead-end tips over 695 walkable cells, the one sign, view sizes, doors in view and screens to cover the town. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  38. Author’s figures, October 4, 2026, redrawn October 15, 2026 (the first doors from the revised entries, and the plan’s targets fitted to the routes post): figures/make_figures.py in this post’s draft folder draws first-door.svg, screens-spanned.svg and kiradex-plan.svg from gen1.json, gen2.json, gen3.json, kiradex.json and town.json, asserting each plotted value against the dossier’s tables; for the plan it lists the 17 dead-end tips and the one-cell point, (16,21), on the shortest paths measure_common.path_to takes to Dawn’s and Comet’s doors. Colors from a palette validated for color-vision deficiency; no game art. ↩↩↩↩

  39. Blake Crosley, “Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew,” blakecrosley.com, October 3, 2026, https://blakecrosley.com/blog/pixel-art-world-on-iphone: Pallet as 10 by 9 blocks, two screens wide and two high; Littleroot 20 by 20, Petalburg 30 by 30, Rustboro 40 by 60, Lilycove 80 by 40; the iPhone 18 Pro Max at 10.3 by 22.4 tiles and the open iPhone Duo at 29.7 by 20.9; the 16-pixel tile. ↩↩↩↩

  40. pret, pokered/data/maps/objects/ (each town’s warp_event, bg_event and object lists), among them ViridianCity.asm, PalletTown.asm and CeruleanCity.asm, commit d2704a6, read October 4, 2026, https://github.com/pret/pokered/tree/master/data/maps/objects. ↩↩↩↩↩

  41. pret, pokered/maps/ (the towns’ .blk block maps, among them PalletTown.blk), commit d2704a6, read October 4, 2026, https://github.com/pret/pokered/tree/master/maps. ↩↩

  42. pret, pokecrystal/maps/ (event scripts and .blk maps, among them GoldenrodCity.asm, GoldenrodCity.blk and NewBarkTown.blk), commit 5beda23, read October 4, 2026, https://github.com/pret/pokecrystal/tree/master/maps. ↩↩↩↩↩↩

  43. pret, pokeemerald/data/layouts/*/map.bin, among them LittlerootTown, PetalburgCity, RustboroCity, MauvilleCity and LilycoveCity, commit 731ad5b, read October 4, 2026, https://github.com/pret/pokeemerald/tree/master/data/layouts. ↩↩↩↩↩↩

  44. Author’s measurement, October 5, 2026, extended October 15, 2026: measure_mauville_south.py in the towns evidence folder (output saved beside it as measure_mauville_south.out), which builds Mauville with the Emerald loader and walks from each stretch of its south edge alone. The edge’s walkable cells are (9,19), x 12 to 18 and x 27 to 33. From x 12 to 18 alone the walk reaches 430 cells, all seven cells of the other stretch (the nearest at 19), the Gym’s door at 40 and the Game Corner’s at 38; from x 27 to 33 alone, 430 cells and the Gym at 39; from (9,19) alone, 1 cell, its three inland neighbors blocked. Row 12 is walkable only at x 26 to 30 between x 20 and 35; with those five cells blocked, the walk from the whole edge reaches 98 cells and neither the Gym’s nor the Game Corner’s door. One shortest path from x 12 to 18 to the Gym starts at (18,19) and goes north to y 15, east to x 26, north to y 8 and west. The seam with Route 110 (offset 0): Route 110’s top row is walkable at x 12 to 18 and at (28,0); the crossings are x 12 to 18 and (28,19), and the walk on Route 110 from its seam with Slateport reaches x 12 to 18 only, which is the entry. Straight lines from the start the shortest walk uses (section 1): Gym 24 and Game Corner 16, both from (18,19). ↩

  45. Stardew Valley Wiki, “File:Pelican Town.png,” image information from the MediaWiki API (1,920 by 1,760 pixels, uploaded 2024-10-17T16:54:10Z), saved October 4, 2026, https://stardewvalleywiki.com/File:Pelican_Town.png. ↩↩↩↩

  46. Stardew Valley Wiki, “Template:Pelican Town Map/styles.css” (each building’s box in percent of the image), saved October 4, 2026, https://stardewvalleywiki.com/Template:Pelican_Town_Map/styles.css. ↩↩

  47. Stardew Valley Wiki, “Pelican Town,” saved October 4, 2026, https://stardewvalleywiki.com/Pelican_Town (the quoted sentence on the northwest entrance; the neighboring areas paraphrased). The wiki’s raw-text endpoints returned HTTP 403; the MediaWiki API was used instead. ↩

  48. Nookipedia, “Acre,” saved October 4, 2026, https://nookipedia.com/wiki/Acre: the acre’s size, the GameCube town’s five by six, the train station in A-3, the fish and bug rule, and the acre counts of Wild World, City Folk, New Leaf and New Horizons. One secondary source. ↩↩↩↩↩

  49. Author’s research dossiers for this series (private): the structures dossier’s figures for the Super Nintendo screen as 16 by 14 tiles of 16 pixels and for Final Fantasy VI’s map layers as powers of two. ↩↩

  50. Author’s code, Kiradex repository at commit b1b78b1, Kiradex/World/TileMap.swift, path(from:to:) (from line 325): an eight-way search, diagonals at the square root of two and only between two walkable tiles; each step is admitted by isWalkable alone (lines 346 to 348), which reads the tile’s own walkability (line 229), so other collectors do not block a path. Private repository. ↩↩↩↩

  51. Author’s code, Kiradex repository at commit b1b78b1, Kiradex/World/PlazaRig.swift: tilesPerSecond: Float = 4 (line 101), runPace: Float = 1.6 (line 122), player.running = steps.count >= 6 in walk(to:) (line 614), each frame’s progress dt * Self.tilesPerSecond * (walker.running ? Self.runPace : 1) / length with length the square root of two on a diagonal (lines 659 and 660), progress set to 0 when a step completes (line 666), fit(viewSize:displayScale:tilesTall:fitsWhole:) (lines 402 to 416) and follow (lines 733 to 759), the orthographic camera at lines 133 and 417; another collector’s walk is planned in move(other:to:facing:) (from line 526) with map.path(from:to:) alone (line 528), and the player’s in walk(to:) (line 608) with the same call; no occupancy or avoidance check appears in either. Read October 15, 2026 from the repository’s stored objects with zlib (no git command), saved as kiradex_b1b78b1/PlazaRig.swift in the towns evidence folder. Private repository. ↩↩↩↩↩↩↩

  52. Apple, “iPhone Duo - Technical Specifications,” saved October 4, 2026, https://www.apple.com/iphone-duo/specs/ (inner display 1878-by-2670-pixel resolution at 430 ppi; outer 1398-by-2034 at 460 ppi). ↩↩

  53. Xcode 27 simulator device profile, /Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone Duo.simdevicetype/Contents/Resources/capabilities.plist, read October 4, 2026 (saved as duo_capabilities_plist.txt in the towns evidence folder): outer 1,398 by 2,034 pixels at scale 3, inner 2,007 by 2,853 at scale 3. ↩↩↩

  54. Apple Developer Documentation, “OrthographicCameraComponent” (iOS 18.0 and later), fetched October 4, 2026, https://developer.apple.com/documentation/realitykit/orthographiccameracomponent. ↩

  55. Author’s measurement, October 15, 2026: measure_kiradex_paths.py in the towns evidence folder (output measure_kiradex_paths.out), which reproduces TileMap.path(from:to:) at commit b1b78b1 (Kiradex/World/TileMap.swift lines 325 to 365: eight moves, the straight ones first, a diagonal costing the square root of two and allowed only between two walkable tiles) over the town.json of that commit, and reads PlazaRig.swift’s gait at the lines in note 51: from the arrival (19,13), the hall 7 steps and 8.24 tiles, Moss’s house 8 steps and 10.07, Prism’s 14 and 16.49, your house 16 and 18.07, Dawn’s 12 and 12.41, the spare house 13 and 13.41, Comet’s shop 18 and 20.07; all seven at six steps or more, so run. It prints no seconds. ↩↩

  56. Apple Developer Documentation, “GKGridGraph” (iOS 9.0 and later), fetched October 4, 2026, https://developer.apple.com/documentation/gameplaykit/gkgridgraph. ↩

  57. Apple Developer Documentation, init(fromGridStartingAt:width:height:diagonalsAllowed:) (iOS 9.0 and later), fetched October 4, 2026, https://developer.apple.com/documentation/gameplaykit/gkgridgraph/init(fromgridstartingat:width:height:diagonalsallowed:). ↩↩

  58. Apple Developer Documentation, findPath(from:to:) on GKGraph (iOS 9.0 and later), fetched October 4, 2026, https://developer.apple.com/documentation/gameplaykit/gkgraph/findpath(from:to:). ↩↩

  59. Author’s data, Kiradex repository, Kiradex/Resources/World/town.json, last changed in commit 305118e (TestFlight build 35) and unchanged through b1b78b1, read October 4, 2026: 40 by 30 letters, the arrival at (19,13), seven warps, 212 X cells, one S; the objects’ cells (your house’s spans x 3 to 10); coordinates as the forge writes them (scripts/forge/town.py). The file as it stood at b1b78b1 is saved as kiradex_b1b78b1/town.json in the towns evidence folder, read October 15, 2026 from the stored objects with zlib; the export at commit fc9d487 (October 15, 2026) has the same rows, arrival, warps and objects and three more keys, "id": "plaza", "connections": [] and "stops": []. Private repository. ↩↩↩↩↩↩↩↩

  60. Author’s code, Kiradex repository at commit fc9d487 (October 15, 2026), read from the stored objects with zlib: Kiradex/World/WorldMap.swift (let connections: [Connection]? at line 53, struct Connection with dir, area and offset from line 60), server/app/rooms.py (connections at line 40, load_all from line 59, which refuses a connection to an area it does not have, line 73) and scripts/forge/town.py ("id": "plaza", "connections": [], "stops": [] at lines 658 to 660). Private repository. ↩

Verwandte Beiträge

Pixel-Art Structures: Houses, Halls and Interiors on iPhone

How Pokémon, the SNES RPGs and Stardew build houses, interiors and floors, measured from source, and how Kiradex's town …

80 Min. Lesezeit

Pixel-Art Routes: Map Connections and Districts on iPhone

How Pokémon, Stardew and Animal Crossing build the land between towns, measured from source: routes, seams, gates, map s…

114 Min. Lesezeit

What App Review Looks For, as Far as We Know: October 2026

Apple's App Review as of October 2026, from the public record: who reviews, how long it takes, what gets apps rejected a…

54 Min. Lesezeit