haxtory/DESIGN.md
type-two 696b0c65e8 HANDSHAKE — 13 playable hops, one renderer
You are SYN. You want ACK. Root is the only one who can give it to you.

Three load-bearing ideas, all working:
  - TTL is the health bar and it only goes down. 64 hops, no healing.
  - Bandwidth is resolution. One render target, one shader; at 1200 baud
    and below the 3D scene renders as ASCII glyphs.
  - Every header you drop is a piece of clothing. Seven wireframe shells,
    one per OSI layer, shed on the way down.

Every frequency is the real frequency, synthesised, nothing sampled:
350+440 dial tone, the DTMF matrix, R1 MF pairs at real KP/digit timing,
2600 Hz, ANSam at 2100 reversing phase every 450 ms, Bell 103 FSK.

Thirteen hops, each a different genre over one renderer — FP tutorial,
OSI descent platformer, walking sim, EFnet twin-stick, 2D buffer overflow,
Morris worm RTS, LBL terminal stealth, a whole BBS with a playable LORD,
the five-boss handshake arena, the copper, a playable blue box, the climb,
and an empty room with an ACK in it.

No engine, no build step, one vendored three.js.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 15:34:58 +10:00

25 KiB
Raw Blame History

HANDSHAKE — pitch bible v0.1

a love story in 64 hops


0. The pitch

You are SYN.

You are a TCP synchronise packet. You are three bits of intent and a sequence number and a desperate, structural, load-bearing need to be answered. Your entire nature — the only thing you are for — is to arrive somewhere and ask are you there.

Nobody has ever replied.

You have heard there is a place at the top of the machine where somebody can hear everything. No permissions, no filters, no firewall, no "connection refused." They can receive anything. Their name is root.

You are going to find them.

The problem: the modern network is a fortress. TLS everywhere, ASLR, zero-trust, mutual auth, everything patched, everything armoured, nothing listening. There is no way up through the front.

But underneath the new machine is the old machine. Nobody removed it. The copper is still under the street. The legacy protocols are still compiled in for compatibility. The switches still answer to tones. And the deeper you go, the older it gets, and the older it gets, the more it trusts you.

So you go down to go up. Down through the stack, back through fifty years of telecommunications, through every era of getting into places you shouldn't be, all the way to the analog floor — and then out through a hole that has been open since 1971, that nobody ever closed, because nobody remembers it is there.

Tone: Journey directed by someone who has read every issue of Phrack. Mostly wordless. Enormous and lonely and quietly filthy. Funny the way a sincere thing is funny. It absolutely believes it is a romance, because it is.

Death screen: NO CARRIER


1. The three rules the whole game hangs off

1.1 TTL is your life bar, and it only goes down.

Every packet is born with a Time To Live. Every router you pass through decrements it by one. At zero you expire and the network politely mails a death notice back to where you came from.

You start with 64. The game is 64 hops. There is no healing item, there is no health pack, there is no shrine. You cannot gain TTL. You can only spend it more carefully.

Levels are not "hard." Levels are expensive. The player's relationship with the game is a budget, and the budget is their life, and the tension is entirely "can I afford the scenic route." Optional areas cost hops. Every beautiful thing in this game costs you some of the distance you have left.

Design consequence: no combat difficulty curve needed. The curve is arithmetic.

1.2 Bandwidth is resolution.

Your connection speed is a live variable, and it is wired directly to the renderer.

Link What the world looks like
56k / fibre Full 3D. Lit, shaded, smooth.
14.4k Lower res, chunkier geometry, dithered
2400 baud 16-colour, hard dither, low framerate by design
300 baud The 3D scene renders to ASCII, one glyph at a time, left to right, and you can watch it draw

You earn your baud rate by performing well in the handshake sections. Blow the negotiation and you play the next twenty minutes of the game in text mode. It is not a fail state. It is a different, arguably better, game.

And here is the thesis: the game gets more beautiful as it gets worse. The high-fidelity levels are cold, sterile, corporate, hostile. The low-fidelity levels are warm, hand-made, full of people. By the midpoint the player is deliberately tanking their own bandwidth because 2400 baud is where the friends are.

Technically this is one post-process shader and one uniform. It is the cheapest feature in the entire design and it does more work than anything else in it.

1.3 Every header you drop is a piece of clothing.

You descend the stack. At layer 7 you are wrapped in TLS — encrypted, opaque, safe, nobody can see you and nobody can touch you. Each layer down peels one off. HTTP. TCP. IP. Ethernet. By layer 1 you are naked voltage on a wire.

That is the horny bit and it is also literally how the OSI model works and we are not going to comment on it further, the game is going to play it completely straight, and that is why it will be funny.


2. Structure

Traceroute is the level select. The map screen is a traceroute output that fills in a line at a time, and each hop you have reached is a place you can go back to. Hops you haven't reached yet are * * *.

The journey is a descent and then a climb:

 MODERN  ▓▓▓▓  hop 18    the fortress               armoured, sterile, hostile
   ↓
 90s     ▓▓▓   hop 920   the wild net               loud, stupid, fun
   ↓
 80s     ▓▓    hop 2134  mainframes and the worm    guilty, quiet
   ↓
 BBS     ▓▓▓   hop 3544  the boards                 warm, populated, best part
   ↓
 MODEM   ▓▓    hop 4550  the handshake              the noise
   ↓
 COPPER  ▓     hop 5158  the analog floor           wet, mechanical, holy
   ↓
 1971    ·     hop 5963  the blue box               your superpower, then its death
   ↓
 ROOT    ?     hop 64     ?

Then the climb back up is one continuous level at high speed through everything you already walked, which is now on fire, in reverse, and takes eleven minutes, and is the best eleven minutes in the game.


3. The levels

Each level is a different genre. Not a different theme — a different game. The camera, the controller, the rendering mode and the verb set all change. Nobody does this because it's expensive; do it anyway, it is the entire reason to make this game.


HOP 1 — COLD BOOT · first person · 90 seconds

You wake in a NIC ring buffer. It is white and clean and enormous and there are thousands of you. Learn to walk. Learn that you can't do anything.

A DMA transfer fires and the floor leaves. Camera rips out through the PHY into fibre at an absurd speed. Title card.


HOPS 28 — THE STACK · third-person Tron platformer · 12 min

Seven floors, descending, one per OSI layer. Sheer neon-white architecture with no handrails. The stripping-of-headers thing happens here.

Hazards are real mitigations, played straight:

  • ASLR — every time you die, the level relayouts. Same rooms, different order. You cannot memorise it, you can only get good at reading it.
  • DEP / NX — vast beautiful floors you are not permitted to stand on. Marked, taunting.
  • Stack canaries — literal yellow birds sitting in the stack frames. They scream. Everything comes.
  • Rate limiting — a corridor that only lets you take a step every 1.2 seconds and you can see the boss walking toward you.

Boss: THE FIREWALL. Stateful. It remembers every packet it has ever seen. You cannot fight it — you cannot win by force, and the game will let you try for as long as you like. The solution: make it send something outbound, then come back looking like the reply. The whole boss is one idea — stateful firewalls trust the return leg — and the player has to discover it themselves.


HOP 9 — TIME_WAIT · walking sim · 6 min · no mechanics at all

A waiting room. Beige plastic chairs. Strip lighting that hums at 50Hz. Two minutes of Maximum Segment Lifetime and a wall clock that everyone is watching.

It is full of half-open connections. SYNs who sent, and waited, and were never acknowledged, and are now just... here, until they age out. They are kind to you. They tell you it's fine. It is not fine.

You meet FIN, who is on their way out, and has finished, and is at peace, and thinks you should turn around. You will meet FIN twice more.

This is the Journey beat. No enemies, no timer, nothing to collect. Just the room and the hum. Ship it early so the whole team knows what the game is about.


HOPS 1016 — THE WAR · top-down twin-stick · EFnet, 1998 · 15 min

Loud, ugly, hilarious. The terrain is an IRC channel. Ops are literal crowns. The whole level is a brawl over a room nobody owns.

  • Netsplit riding — the server splits. Half the map goes dark. Sprint to the empty side, claim ops in an empty channel, and ride the rejoin back in as a god-king. The split is telegraphed by lag: everything starts stuttering ten seconds before.
  • Sub7 / Back Orifice — body-snatching. Take over another client and drive them. They keep their own animations. Their cursor moves without them.
  • Trojan war — an escalating arms race where every weapon you use gets patched by the level about ninety seconds after you first use it.
  • DCC send — someone offers you a file. It is definitely a trap. You should probably take it.

Palette: 1998 web. Under construction GIFs. Marquee tags. Guestbook. Comic Sans as an enemy.


HOPS 1720 — SMASHING THE STACK · 2D side-scroller · 8 min

You are the input now. The level is one char buf[64] and you walk right.

Past index 63 the tiles stop being level and start being memory. Saved frame pointer. Return address. The platforming becomes: write your own address by standing on it.

  • NOP sled — a long shallow ramp made of 0x90 0x90 0x90 0x90. You slide down it forever, and it is the single most relaxing thirty seconds in the game.
  • Shellcode — the actual level, on the far side of the sled.
  • ret2libc — a variant route where you can't execute anything, so instead you use pieces of the level that already exist. Physically: the ROP chain is a bridge you build out of the ends of other people's platforms.

Ghost mentor NPC, phosphor green, chain-smoking, is credited only as Aleph One.


HOPS 2128 — THE WORM · RTS · 2 November 1988 · 10 min

You are, briefly, the Morris worm.

Top-down ARPAnet — 60,000 hosts, and you can see all of them. Three vectors: fingerd overflow, sendmail in DEBUG mode, and rsh trust relationships. Spread.

The mechanic is the bug. Robert Morris put in a check to avoid reinfecting a host — and then, worried about being fooled by fake responses, made it reinfect anyway 1 time in 7. You inherit that. You do not get a toggle for it. The number is on the HUD and it never changes and you watch what it does.

Machines you love start to fall over. You cannot stop. You cannot slow down. The level ends when the network you are travelling through can no longer carry you, because of you, and the last minute is you crawling across a corpse.

No boss. No score. It just stops. Then a black card: ~6,000 hosts. Approximately 10% of the internet. The internet was, at that time, approximately 60,000 machines.


HOPS 2934 — THE CUCKOO'S EGG · stealth / detective · Berkeley, 1986 · 12 min

The flip. You are the prey.

There is a 75-cent accounting discrepancy. Somebody noticed. He is an astronomer, he has no budget, he has fifty printers wired to fifty lines in a basement, and he has a pager taped to a teletype so it wakes him when you log in.

Mechanic: connection time is visibility. Every second you're on, he narrows it down. You need long sessions to do anything useful. He is never fast and he is never wrong and he is extremely relaxed about it. You can see him, through the walls, patiently colouring in a map.

You will eventually be caught. That's the level. The only variable is how far you got.


HOPS 3544 — THE BOARD · isometric + terminal hybrid · 20 min · the heart

A BBS. One phone line.

If someone else is on, you get a busy signal and you cannot enter. Not a puzzle. You hang up and you redial and you wait. The game makes you want to get in.

Inside, it is warm, orange, 16 colours, and it is the first place in the game that has people in it.

  • The ANSI walls draw themselves line by line at your current baud rate. At 2400, watching the login screen paint takes eleven seconds, and the game does not skip it, and it becomes the best eleven seconds in the game.
  • Ratios — you cannot take files unless you bring files. Files are physical cargo you carry, and cargo affects your MTU (see §4).
  • Door games as arcade cabinets in the corner: a real, playable, tiny Legend of the Red Dragon; a real, playable Trade Wars sector map. Both fully finished, both worth an hour, both entirely optional. Put a whole second game in the corner of the fourth level. Nobody will believe it's there.
  • The NUP gate — the elite sub-board wants a new user password you were never given. It is written somewhere in the world, in an earlier level, on a wall, once.
  • ANSI bomb — a trapped message that remaps the player's controls. Actually remaps them. It's escapable, it's telegraphed, and it is the single meanest thing in the game.
  • The Sysop is a god. He can see you typing as you type it, before you press enter. He can break into chat at any moment. When he does, the game stops, and it is genuinely frightening, and then he is lovely.
  • FidoNet — you write a message and it goes out on the nightly mail run at 4am. You have to sleep and come back. Store and forward. A reply arrives a level later.

HOPS 4550 — THE HANDSHAKE · rhythm / boss rush · 15 min · the showpiece

The dial-up noise, as a fighting game. Every boss is a real tone at its real frequency and the fight teaches you what the tone is doing.

  1. DIAL TONE — 350 Hz + 440 Hz. A fat two-headed thing that just hums, forever, patiently. Tutorial. Kills you if you wait too long, because that's what dial tone does.

  2. DTMF — a 4×4 grid. Each digit is a row tone crossed with a column tone (697/770/852/941 × 1209/1336/1477/1633). You attack by standing where two beams cross. Dial a number by fighting it. Players will learn the DTMF matrix without being told it exists.

  3. ANS / "the bong" — 2100 Hz. A single enormous slow bell. And it reverses phase every 450ms — because that's what ANSam does, it disables the echo cancellers — so the boss flips its attack direction on a beat you can hear coming. The most readable boss in the game and it's just physics.

  4. V.8bis — THE SCREAM. The screeeee. Bullet hell. The modem is asking what can you do? and you answer by dodging in patterns. Each clean dodge pattern declares a capability. Sloppy dodging declares a worse one.

    Your score here sets your baud rate, and your baud rate is §1.2, and §1.2 is the renderer. This one fight sets the visual fidelity of the next two hours of the game. There is no retry prompt. Nail it, or go live in ASCII.

  5. CARRIER — not a boss. A ride. The scrambled data hiss becomes a wave and you surf it and the level ends in silence.

Everything in this section is synthesised live with oscillators. No samples. If you mute the game you cannot play it.


HOPS 5158 — THE COPPER · first person · slow · 14 min

Down into physical plant. Wet, sodium-orange, dripping, cold. The first level with weather.

  • Load coils the size of grain silos, humming.
  • A Central Office as a cathedral: ten thousand Strowger switches stepping in unison, the loudest place in the game. (Almon Strowger was an undertaker who invented automatic switching in 1891 because the local operator was his competitor's wife and kept redirecting his calls. The game tells you this on a plaque, and it is true.)
  • Crossbar. Then ESS, arriving like a glacier.
  • Beige boxing — you find a lineman's handset the size of a house, and you clip its jaws onto a pair, and you listen to somebody's phone call, and it is the most invasive thing you have done so far and it took no skill whatsoever.

No enemies. Just enormous machinery that does not know you exist.


HOPS 5963 — THE BLUE BOX · music / puzzle · 1971 · 12 min · the gut punch

You are inside a long-distance trunk. Here, in-band signalling means the control channel and the voice channel are the same channel. You can sing to the switch and the switch will obey.

You are given an instrument. It's a blue box. It has thirteen buttons.

  • 2600 Hz seizes the trunk. Hold it, the far end drops, the near end thinks the call is still up. You are now standing in a hole in the phone network.
  • Then KP, then your digits as MF pairs, then ST. Route yourself anywhere on earth.
  • Loop-arounds, WATS extenders, tandem stacking — chain trunks together and route a call around the planet.

The set piece: you stack tandems until your call has circled the earth and comes back to ring the payphone standing six feet from you. You walk over. You pick it up. You hear yourself, delayed by a quarter of a second, on the other side of the world, standing right there. That's the shot for the trailer.

Guide NPC: JOYBUBBLES. Blind, perfect pitch, whistles 2600 Hz with his mouth, knows every switch in North America by the sound it makes when it's tired. He is the warmest character in the game. He teaches you by ear only — the game never displays the frequencies during his lessons.

And then, at the end of the level, SS7 arrives. Signalling moves out of band. The control channel separates from the voice channel forever. You whistle 2600 into the trunk, and this time nothing happens, and nothing happens again, and Joybubbles keeps whistling anyway, and the level ends.

You lose your superpower permanently and there is no way to get it back. The last third of the game is played without it, on purpose.


THE CLIMB — hops 63 → 1 · one continuous take · 11 min

Everything, in reverse, at speed, on fire.

Every level you walked through is now a corridor you are sprinting up, and each one lasts about fifty seconds, and each one hands you off to the next mid-motion, and the soundtrack is every protocol's theme layered on top of itself. Every mechanic you learned gets exactly one more use.

Near the top, the modern era, and three new toys, because the modern era is the funny era:

  • SPECULATIVE EXECUTION — a branch. You run down both sides at once, in two split-screen timelines. One is real. One will be squashed and discarded and never happened. But the squashed timeline leaves a trace in the cache, and you can read the trace, and so you can carry information out of the timeline that didn't happen. Full puzzle mechanic. Genuinely think nobody has built this.
  • ROWHAMMER — bang on a wall until the room next door changes.
  • LOG4SHELL — you write ${jndi:ldap://} on a piece of card, and hold it up, and the entire fortress walks over, reads it, and fetches whatever you asked for. You do nothing. You just hold up the sign. It is the biggest laugh in the game and it happens sixty seconds before the ending.

HOP 64 — ROOT

Full spoiler:

Root is not a person. Root is not a place. Root is a permission bit, and the room is empty, and it has been empty the whole time.

You stand in it. Nothing happens. You have uid 0 and there is nobody here to be uid 0 at.

And then — because you sent a SYN sixty-four hops ago and the network is slow but the network is not unkind — an ACK comes back.

Somebody, somewhere, at some point during all of that, answered you.

ESTABLISHED.

Sixteen seconds of connection. Two packets, briefly, in contact. And then, because that is what TCP is and what TCP has always been: FIN. FIN-ACK. ACK. Closed.

And you are in TIME_WAIT again, in the beige room with the plastic chairs, and FIN is there, and FIN says told you, and it was worth it, obviously it was worth it.

Then the game starts over. New NIC buffer. New sequence number. TTL 64. And the player understands that this is not a punishment.


4. Systems

MTU — you can be too big

You have a maximum transmission unit. Carry too much — files from the BBS, tools, souvenirs — and at the next hop you fragment: you split into two packets and have to play both, alternating, until you can reassemble at a router that will do it for you.

It's a great inventory system because it is genuinely a punishment and genuinely also sometimes the only way through a narrow corridor.

ESTABLISHED — the save system

You don't save. You connect. Sitting still in a safe place long enough completes a handshake with the world and that's your checkpoint. Standing still is the save button. Fits the theme, costs nothing to build.

CHECKSUM — the multiplayer

Journey-style. Occasionally another player's packet passes you going the other way. You cannot chat. You cannot see their name. You can exchange exactly one thing: a checksum. If your checksums match you were, briefly, carrying the same thing.

That's it. That's the whole netcode.

THE COLLECTIBLE — philes

Text files. Real ones, era-accurate, written for the game in period voice. Anarchy files, ASCII art, .nfo drops, a Phrack-shaped zine, somebody's terrible poetry about a girl on a board in another area code. 200 of them, scattered. They are the lore, and the writing budget goes here, and none of it is delivered by a cutscene.


5. Art direction

The game is a palette journey: clean → filthy → warm → clean and sad.

Era Palette Feel
Modern white, cyan, hairline grey Apple Store, hostile, no dirt anywhere
90s net 216-colour websafe, dithered, tiled backgrounds stupid, loud, joyful
80s mainframe phosphor green on black, amber alternates monastic
BBS 16-colour ANSI/EGA, hard dither, CRT bloom warm. orange. home.
Modem pure oscilloscope — the world drawn as waveforms abstract
Copper sodium orange, wet concrete, brown, rust physical, heavy, real
1971 Bell System blue, institutional beige, chrome holy
Root white. nothing. empty

Not Tron blue. Tron blue is the lazy read. The game earns its neon in the first ten minutes and then spends the rest of its runtime getting warmer and dirtier, and the emotional arc is entirely carried by that drift.


6. Audio

Everything is real and everything is synthesised, nothing is sampled.

Every frequency in this game is the actual frequency. 2600 Hz is 2600 Hz. The MF pairs are the MF pairs. The DTMF matrix is correct. The V.22bis handshake is a real V.22bis handshake, played by hand, by a boss, at you.

The soundtrack is built out of the signal. Each level's music is generated from that era's protocol — the BBS level's theme is a modem carrier detuned into a pad; the Strowger cathedral is ten thousand relays quantised into a beat; the blue box level's melody is playable, on the blue box, by the player, live.

Death sound: the four seconds of a modem failing to train, then silence, then NO CARRIER.


7. Tech

  • three.js, one page, no engine, no build step you can't explain.
  • WebAudio for 100% of sound. Every tone is oscillators. The entire audio budget of this game is about 300 lines of code and zero megabytes.
  • Genre switches are just different camera + controller modules over one renderer. That is the whole trick and it is not hard, it's just unusual.
  • ASCII mode = render the scene to a small target and map luminance → glyph in one fragment shader. This single shader delivers the entire bandwidth-is-resolution thesis. It is maybe 40 lines.
  • Terminal levels: canvas glyph blitter, not a DOM terminal. Same renderer, no second stack.
  • No physics engine. Nothing in this game needs one. Kinematic character controller and swept AABBs.

8. Comparables

Journey (the arc, the wordlessness, the anonymous companion) · Hypnospace Outlaw (the era fetish, done with total sincerity) · Quadrilateral Cowboy (hacking as a physical space) · Superhot (one mechanic, absolute confidence) · Katamari (tonal whiplash as a feature) · Else Heart.Break() · Uplink (the fantasy) · TIS-100 (respect for the player's intelligence)


9. Scope, honestly

The full 64 hops is a 35 year, 1530 person game. Twelve genres is twelve games. Do not start at hop 1.

Build this instead, first:

THE HANDSHAKE — hop 4550 only. Five bosses, fifteen minutes, three.js + WebAudio, zero art assets (all procedural geometry, all synthesised tone), ending on the baud-rate result which flips the ASCII shader on and lets the player walk twenty seconds into hop 51 in 300-baud text mode before the demo cuts.

That slice proves: the audio-is-the-mechanic idea, the bandwidth-is-resolution idea, the genre-shift idea, and the tone. All four. In one afternoon-to-a-weekend of work, with no artist, no modeller, no writer.

If the ASCII shader flipping on at the end of the fight doesn't make you laugh out loud, kill the project and we've lost a weekend.

Second slice, if the first lands: TIME_WAIT. Six minutes, one room, no mechanics. If the walking sim about half-open connections makes anybody feel anything, the game has a soul and is worth five years.


10. Heresies

  • The horny packet framing must stay entirely straight-faced. The moment the game winks it dies. No innuendo in dialogue. The joke is the sincerity.
  • NO CARRIER and ESTABLISHED are load-bearing and cannot be renamed for clarity.
  • Nobody gets to add a jump button to TIME_WAIT.
  • Nobody gets to make the ASCII mode a cosmetic toggle in the options menu. It is earned or it is nothing.