Transmission — a real Earth, slightly wrong
FASTER
THAN ZOMBIES
A rail-survival game on the real Earth. Not a map — the planet: true continents, a rail graph of 50 real cities on real corridors, a crew of six you carry between runs, and a slow tide of the dead closing ~14 km every leg — faster than the timetable. Every run is a different line, a different season, a different night sky over the same Europe you could book a ticket to.
- ◆REAL-EARTH GLOBE
- ◆50-CITY RAIL GRAPH
- ◆GENERATED RUNS
- ◆CREW OF SIX
- ◆THE CATCHER
- ◆ZERO CDN
- ◆BUILT WITH GENERATIVE AI
- ◆DEEPSEEK HARNESS · QWEN3.8:27B · 5090 BRAIN
00 // LIVE SPECIMENThe Orb, live
Not a screenshot. A trimmed build of the game's globe bridge — one WebGL context, one sphere, GeoJSON continents, fifty cities, zero textures, zero CDN. Drag it.
// stripped from travel-globe.mjs (≈4k lines) — the live build adds the cloud dome, moon tints, the route pulse, the catcher marker, and a six-seat crew. The projection math below is the same one the game flies.
01 // GRAPHICS STACKEight layers, one sphere
The orb is painted back-to-front like the game paints it. Everything above the dark ocean is additive on the sphere — light is drawn, never decoded from a texture.
Ocean Shell
SPHERE(R100) · MESH PHONG1 DIM KEY + AMBIENT
One dark night ocean. One mesh, one light. Every layer above rides on it additively — the baseline the terminator carves.
Continent Plates
GEOJSON 110M · 426 KBLINE SEGMENTS @ R+0.4%
The coastlines aren't drawn — they're borrowed. Natural Earth 110m, fetched once, the same file that feeds the live build's first paint.
The Rail Web
50 NODES · ~60 ROUTESPATH SAMPLES EVERY ~10–20 KM
Real corridors between real cities. Amber is the planet; cyan is the game. What you run burns blue.
City Lights
POINTS ×2 · SUP-WEIGHTEDADDITIVE, NO SPRITES
No spritesheets: light is a dot and a discipline. Majors (sup ≥ 1200) burn bigger — the ones where you'll spend.
Route & Labels
TUBE LEG · PULSE TRAVELERDOM CHIPS OVER THE GL
The only things that move on purpose: your route, its pulse, the chips above it, and the catcher that doesn't ask twice.
Cloud Dome
PROCEDURAL BANDDRIFT + SHIMMER PASS · 2026-09
A slow-drifting band with a shimmer pass, tuned screenshot-by-screenshot until the operator said the exact words. (Not on this trimmed orb — it's in the live build.)
Terminator & Rim
FRESNEL BACKSIDESUN-DRIVEN · DUSK BAND
The halo you can see on the orb right now is this layer, trimmed. In the game the sun owns day, night, and the amber dusk band between them.
Moon Tint
SCENE TINT DOMENORMAL / RED / GREEN / COLD / DUST + LIVE
The moon has moods; the dome carries them. Five presets and a live auto that drifts with the sky. Shipped with the words "ok works great".
02 // FIELD EVIDENCEAcceptance frames, unedited
Captured from the operator's console during a passing run — D1 · 06:00, ledger fresh, crew posted, lines cold. These are the frames the build was judged by.
Port Halvor → Vesper Heights · rail blocked ahead · threat board: Kestrel Cross, 72 km, QUARANTINE
Side view, locomotive front (right) · rail 152/960 · kills 4 · OVERDRIVE: READY · FIRE HEAVY armed
Top-down, locomotive ahead · M cycling the console · hold the rails: crew at the rails = firepower
03 // THE STEPSHow the globe got here
Five states across the build. Each one was a bet the operator could kick. The logs below are real — from the field log, not the marketing deck.
The Cesium Era V3 — V4
The game lived on a real satellite globe: dark tiles, fog of war, 43 cities, the whole route in 3D. Beautiful, heavy, and — per the operator — 3D-ambiguous: the lines scatter "off the cliff," the alert rings bury the route. The verdict was fair. The globe went to the bench; the flat board took the wheel.
The Starmap V5
The 2D FTL surface: a flat canvas with the whole rail web laid on the table — board-fit, pan, zoom ×1 – ×500. FTL's nerve, a rail engine's soul. The globe still stood by, unused, waiting for a better body. It got one.
The Three Bridge V6 → V7 · 2026-09
A framework-free port of the globe in: three.js 0.185.1, bare import 'three' mapped to the box's own node_modules — no CDN, no build step, node --check between every cut, the user's browser as the only review pipeline. The starmap kept its hands; the globe kept its world — and the bridge is one plain .mjs the whole way: no bundler, no framework, the disk as the source of truth.
The Look 2026-09
Four passes, four rounds of screenshot → verdict → ship: cloud shimmer (L05), terminator + rim (L06), the dusk band, and the moon tints — five presets plus live auto (L07). Acceptance words, verbatim: "ok works great". Those layers are now frozen stone.
The Resize Hunt 2026-09
Load on one monitor, move the window to the other — the globe stayed pinned to the old window while the page grew. A tiny probe in the field log named the guilty box on the first line: the slot itself carried a stale size from the #map ↔ #globe swap dance. The fix self-heals the host on every resize and re-reads devicePixelRatio per event. The two lines are the before and after, from the same console:
RESIZE · win 1482x1563 dpr1.25 · main 1482x1283@t131 · globe 1482x759@t131 · canvas 1482x759@t131 buf1852x948 ··· main tracked the new window — globe froze at the old 759 RESIZE · win 1482x1563 dpr1.25 · main 1482x1283@t131 · globe 1482x1283@t131 · canvas 1482x1283@t131 buf1852x1603 ··· healed on the same line: globe == main · buffer == dpr ✓
What to steal — for whoever builds the real Earth next
Six load-bearing tricks from this exact deck, in the order they were learned. All copy-pasteable, all cheap.
φ = (90 − lat) · π/180 θ = (lon + 180) · π/180 x = −r·sinφ·cosθ y = r·cosφ z = r·sinφ·sinθ · the whole trick: lat/lon → sphere, and its asin/atan2 inverse for the "you are here" readout · one convention front to back — put Paris where Paris is, then stop thinking about it
One Dark, One Light
OCEAN: ONE NON-ADDITIVE MESHGLOW LAYERS: ADDITIVE · DEPTHWRITE OFF
One dark phong sphere with a dim key light. Everything that glows — coasts, routes, cities — is lines or points with additive blending and depth-write off. No textures, no z-fight, and the terminator gets to own the dark half.
Radius Discipline
COAST R+0.4% · RAIL R+0.9%LIGHTS R+1.2% · HALO R+14%
Each layer sits a hair above the last, in draw order. That's the entire anti-z-fighting rig — and why the coastline stays readable inside the halo instead of flickering with it.
No CDN, No Bundler
IMPORTMAP → LOCAL THREE (635 KB)ONE PLAIN .MJS · NODE --CHECK
Three is a file on the box, mapped by a three-line importmap. The rest is one plain module the browser loads directly — no build step, no env, no network. The disk is the source of truth.
Screen State Is an Event
RO + WINDOW BACKSTOPDPR RE-READ · HOST SLOT SELF-HEAL
Move a window between monitors and devicePixelRatio changes — and your layout box can lie to you. Re-measure both on every resize, and if the tree has a swap dance in it, force the host slot back to full-bleed before you measure.
Tune by Verdict
SCREENSHOT → VERDICT → SHIPFOUR PASSES · FOUR "OK WORKS GREAT"
The operator's browser is the only review pipeline. No parameter on the orb above was tuned by vibes — each one passed a screenshot and a sentence. Field log is the spec; this deck is the marketing.
Stay Static
FETCH ONCE (426 KB), CACHE FOREVERWORKS WITH THE INTERNET OFF
One geojson fetch, then everything is local state. The page has zero CDN hits and the globe still spins — the most reliable deploy is the one with nothing left to deploy.
04 // THE VISION — WHY A ZOMBIE TRAIN ON THE REAL EARTH
A dystopia lands hardest when it's true.
Faster Than Zombies doesn't draw a map — it borrowed the planet. The Paris–Lyon line is the Paris–Lyon line. The quarantines sit in Marseille, the stockpiles in London, the cold rail in the north — geography you already know, wearing a mask you don't. Nothing here is fake: the only fiction is what happened to it.
And the line never stops. FTL's nerve — the crew, the pressure, the ledger between runs — wrapped around a timetable that closes in faster than you travel. Every run is a new line through the same Europe: a different season, a different moon, a different sky, a crew of six that remembers your choices — and a catcher out on the tracks, ~14 km behind you, that does not.
- ◆NO FAKE MAPS
- ◆EVERY RUN A NEW LINE
- ◆THE LINE DOESN'T STOP
- ◆GEOGRAPHY YOU KNOW
05 // SPEC SHEETThe numbers, unspun
Everything the page above claims, in table form. If a number on here is wrong, the receipts are in the source.
- Surface
- WebGL · three.js 0.185.1 · device-pixel-ratio aware, capped at ×2 · one context, one render loop
- Geo
- Natural Earth 110m — 426 KB, fetched once, cached · coastlines as lat/lon line soup on the sphere
- Graph
- 50 cities · ~60 rail routes — real corridors, sampled every 10–20 km · majors flagged by supply weight
- Runs
- FTL-style nerve — every run a different line · ledger, W/L, best times, WORKS (permanent train fittings) carry over
- Pressure
- The Catcher — closing ~14 km every leg · "caught under 12" is the readout that means it for real
- Crew
- Six, persists between runs — Nadia · Eli · Tove · Marcus · Sana · Petra · morale, injuries, rations
- Resize
- ResizeObserver + window backstop · dpr re-read per event · host slot self-heals (STEP 05) — survives monitor-to-monitor moves in both directions
- CDN
- None. Every file — three.module.js included (635 KB) — ships on the box. The page works when the internet doesn't.
- Origin
- Dreamed and built with generative AI across 2026 — DeepSeek Harness in front of a qwen3.8:27b Ollama server, with the 5090 as the brain behind it. The operator kept the receipts, the screenshots, and the verdicts.