| Cross streets | Every ~200 m; 60 ft building-to-building (20% are 100-ft majors): ~13-ft sidewalks flanking a ~34-ft roadway with four lanes. |
| Lane paint | The outer two lanes are parking — their dividers are solid; only the centre travel-lane divider is dashed. No markings inside the intersection box or across any crosswalk. |
| The one-way grid | Odd streets run toward the avenue from your side, even streets the other way. Parked cars (nearly full kerbs, both sides) face accordingly: odd = nose at the avenue, even = backs to it. Crossing traffic and ambulances drive the same way. |
| Street furniture | Newsstands, hot-dog carts, fire hydrants and DSNY trash cans sit out at the curb edge (not against the buildings) and are solid — run around them, on the building side, or you go down. A pair of USPS boxes (a blue collection box + its green relay box) also stand at the curb mid-block every other block (off bus-shelter blocks) and are solid too. Nothing spawns in a crossing or on its crosswalks. The sidewalk crowd steps around this solid furniture too — nobody walks through a cart, newsstand, hydrant, trash basket or bus shelter. Signs mount by their left edge on the pole, with no ordinals (W 13 ST), and the blade rides in the crowd layer so pedestrians at or behind it pass behind the sign, not over it. |
| Sign colours by neighbourhood | Standard NYC green citywide — but designated historic districts get brown signs, like the real DOT: Greenwich Village (W 9–14) and Ladies' Mile (W 15–24) here. The map lives in CONFIG.signs. |
| Pole stack, top to bottom | Mast arm + signal head · street-name blade · CITY SPEED LIMIT 25 · pedestrian signal. |
| Steam vents | A decorative steam-vent field (~3.2 × 3.4 m, like the real ConEd ones) sits in the sidewalk mid-block every other block — decor.ventEveryBlocks (0 = off), sized by ventWidthM / ventLengthM. |
| Citibike docks | A row of blue Citibikes sits on the far sidewalk, between it and the bike lane, every decor.bikeRackEveryStreets cross streets (0 = off). |
| Cellar doors [experiment] | Flush metal cellar hatches (Bilco doors) — dark diamond-plate, a cross seam and corner bolts — tucked against the buildings, their long axis running along the walk. Pure decoration (closed, you run right over them); decor.cellarsPerBlock are scattered along each block every decor.cellarEveryStreets cross streets (0 = off). |
| Storefronts [experiment] | Every building block — on both sides of the avenue — gets at most one deterministic storefront dressing, so they never overlap each other, and they z-sort properly: a nearer pedestrian or a crossing vehicle correctly passes in front, a farther one is occluded. Near ones grow and ride off the bottom (never squish at the near plane). Many blocks are plain; the rest are awnings — seven NYC types: a bodega text-box, a striped sloped shop awning, a dome/bullnose, a long residential canopy (on posts, with an address plate), a flat cafe awning, a scalloped-valance one, and an open pipe-frame vinyl. Cafe/restaurant blocks also spill outdoor dining — bistro tables + umbrellas behind a planter rail, set near the wall so they stay out of your line. Now and then a stretch of consecutive blocks is given over to a full NYC sidewalk shed (a long, occasional multi-block run) spanning the whole width of the walk — a galvanized pipe frame (standards, ledgers, diagonal cross-bracing), a plywood plank deck lit by sodium tubes, the signature blue parapet board along the curb, and a green plywood hoarding on the building. You run under it, and it is layered bay by bay: the bays you have passed under draw over you (their posts and deck in front of the runner), the bays ahead draw behind you — never the whole block at once. The plank deck turns glassy as it comes over you, so the lane you are steering in reads through it; a shed farther up the block is solid. |
| Trash bags | Piles of tied black garbage bags set out curbside only for DSNY pickup — in rows (a multiple of three) of random pile sizes. The crowd steps past them, but unlike the solid curb furniture they're soft: run into one and you plow straight through — the bag bursts, loose trash sprays out, a few flies puff up, and you wade a beat slower with a little jolt, but you're never knocked down. Each bag bursts once. |
| Traffic cones | Orange traffic cones dot the sidewalk. Like the bags they're non-lethal — but hard and light, so instead of plowing through you punt one: it rockets up off your foot, tumbles end-over-end, grows as it arcs toward the camera and clatters off the bottom of the screen. A small stumble, but never knocked down. Each cone is booted once. |
| Bus-stop shelters | A glass shelter (flat roof, the blue NYC bus-stop sign, and a bench on the building side facing the road — so riders sit without stepping toward the bus lane) sits on the curb half of your sidewalk mid-block, every decor.busStopEveryStreets cross streets (0 = off). It's solid — run around it on the building side. Steam vents never share its block; it keeps its exact shape and just scrolls + fades away (no skew, no jump). |
| Subway entrances | A pair of entrances appears at the curb on CONFIG.subway.streets. To ride you need a fare card — a fare you collect from a pickup and HOLD (max one), shown in the HUD. Run into an entrance with a card and you swipe in (the card is spent) and duck into the subway. Either way you descend onto the fare-control area: a turnstile bank scrolls up to you (CONFIG.subway.gateZ). With a card it's OPEN — green cap, arms swung clear — and you just run straight through (no jump). No card? The bank is closed (amber, arms across) with a knot of riders exiting toward you: JUMP it (SPACE / tap / swipe-up) — time the hop so you're mid-air as the bank reaches your feet — while steering to dodge the riders (you can't hop a person). A big ▲ JUMP! prompt flashes as the closed bank comes into range. Clear it and you run on down the platform; meet it flat-footed and you spill over backwards — the same fall-down as a hydrant or hot-dog cart — for −1 heart. Touch a rider anywhere in the weave and it's an ordinary bump instead, like bumping any tourist — a heart lost, no spill or setback. But fare-beating has a cost: clear the turnstile and CONFIG.subway.police.chance of the time the cops come for you — officers rush in from up ahead and home on your lane, one after another. Weave to keep them off your plane; touch one and two of them cuff you on the spot — arrested, game over. You shake them only by boarding the train or surfacing. (Set CONFIG.subway.gateOpensWithCard false to skip the gate entirely once you've paid.) Either way you're now on the underground station stage — a tiled tunnel platform (cream tile + the green station band, yellow platform edge, rails, an enclosed ceiling of fluorescent fixtures) that you run for ~2 city blocks, dodging steel support columns (solid — they knock you flat) and the platform crowd, past painted steel I-beam poles down the track bed, before you surface back onto the street. Where you come up depends on whether you caught the train: ride it and you come out of the ground at the NEXT station up the line (a real station skip); walk the whole platform without boarding and you just come up the far exit of the SAME station (the other side of that crossing). From the last station in CONFIG.subway.streets the ride loops back to the previous one (e.g. 168→157), so a marathon runner never runs out of stops. The bed is a four-track express station — your local track, a far local, and two express tracks down the middle that express trains roar through on (no stop) every so often, screeching as they pass. A full 8-car train (its line marker — a white triangle, ring or pair of bars on a blue square — on the sides + ends) stands ahead at your platform. When you reach it the announcer sounds the iconic two-tone door chime (Web Audio, so it plays everywhere — including installed iOS PWAs) and, where the browser supports speech, calls “doors closing, please stand clear”; a countdown bar shows how long the doors stay open — dash to the platform edge AT an open door (you board only through a door, not the solid car side) for an EXPRESS ride (a big distance skip + score bonus); miss it and you just keep running (no freeze; the train screeches out forward). At the very end of the platform a wide EXIT staircase takes you back up to the street. You're invulnerable through the descend/ascend/ride transitions but vulnerable on the platform. A few riders climb up out of the street entrances (rate: CONFIG.subway.emitEverySec). And rats scurry across the platform now and then — rarer than the crowd (CONFIG.subway.rat) — scampering toward you; touch one and it costs a heart, just like bumping a rider, with a squeak. |
| Bike-lane flexposts | White delineator bollards (orange reflective band) line the buffer's centre the length of the avenue — NYC's protected-lane barrier. They break for each crossing, never standing in the intersection or its crosswalks. |
| Lane arrows | On the approach to every crossing, each drivable travel lane gets a straight-ahead arrow (never the bus lane or the bike lane). Exactly one lane is a turn lane instead: left-turn on odd streets (the leftmost lane), right-turn on even streets (the rightmost drivable lane). The bus lane itself carries a flat ONLY / BUS legend (the two words stacked, painted dead-flat on the asphalt) repeating up the lane and scrolling with the world — it rides all the way off the bottom edge (unclamped near the camera, like the bus & subway), skipped through crossings. |