diff --git a/README.md b/README.md index f73cf56..fc94673 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,28 @@ is the ANSam beat from hop 47: `SPACE` on the phase reversal, 450 ms, four clean Terminal levels opt out with `noRetrain: true`, because stealing `SPACE` from someone mid-sentence isn't a mechanic, it's a bug with a story attached. +## The philes + +All 200 are written, in [`src/philes.js`](src/philes.js), and all 200 are findable. +Read them with `P`. + +The voice rule is the whole thing: **each one is written by somebody, in the year it +happened, who did not know they were in a game.** Nobody explains anything for the +player's benefit and nothing is written in hindsight. + +Where they live follows from that. The board is 1991, so the board cannot carry a +file about WannaCry — it carries the seven read-online areas (g-philes, the law, the +scene, virus, the iron, telephony, unix), and reading is free while *downloading* +costs MTU, which is how a real board worked. Everything after 1992 is on **the +climb**, because the climb is the only level that travels forwards in time: thirty-six +years bolted to the shaft wall, going past at speed. You get the file for having been +there whether or not you turned your head, and they arrive quietly — thirty-six +notifications in fifty seconds is a wall, not a level, so `ctx.phile(id, …, quiet)` +collects them and the count lands once at the top. + +`node tools/philecheck.mjs` — duplicate ids in an object literal overwrite silently, +which cost an hour once. It also reports anything written but not placed in a level. + ## Audio [`src/audio.js`](src/audio.js) — every tone is oscillators, nothing is sampled, and @@ -148,5 +170,4 @@ to zero in a hidden tab and that makes the game look broken when it's only aslee - **Multiplayer (`CHECKSUM`)** — the Journey-style anonymous pass-by. Needs a server; add when there's something to connect to. - **Playing both fragments** — fragmenting costs TTL, it doesn't split you into two packets you alternate between. Add when a level has a corridor narrow enough to need it. -- **The 200 philes** — 74 written in [`src/philes.js`](src/philes.js), all readable with `P`. Adding the next 126 is a writing job, not a code job: put the text in that file, call `ctx.phile('id')` wherever it should be found. -- Levels run 3–8 minutes against a design doc that asks for 5–20. The genres, mechanics and set pieces are all in — the *duration* is still short. See [STAGES.md](STAGES.md) for a per-hop breakdown of what's in and what's next. +- Levels run 5–12 minutes against a design doc that asks for 5–20. The genres, mechanics and set pieces are all in — the *duration* is still short. See [STAGES.md](STAGES.md) for a per-hop breakdown of what's in and what's next. diff --git a/STAGES.md b/STAGES.md index 70963e3..588d57b 100644 --- a/STAGES.md +++ b/STAGES.md @@ -358,7 +358,7 @@ TIME_WAIT with FIN saying *told you*, then it loops to hop 1. | | | |---|---| -| **The philes** | 75 of 200 written. All in `src/philes.js`, all readable with `P`. Pure writing. | +| ~~**The philes**~~ | **DONE** — 200 of 200 written and all 200 placed. The board carries everything up to 1991 in seven read-online areas; the climb carries everything after, as signs on the wall. `node tools/philecheck.mjs` verifies. | | ~~**Audio**~~ | **DONE** — `src/score.js`. Every bed derived from a real number: 1 kHz reference tone, 50 Hz mains, 0x90 as a pitch, 45.45 baud, the 1200 Hz carrier, 20 Hz ringing current, the six MF tones, 2600 folded six times. The handshake is scored silent on purpose. | | ~~**The retrain**~~ | **DONE** — `src/retrain.js`. Fires once per run after hop 51, drops you a notch, and the recovery is the 450 ms ANSam beat from hop 47. Terminal levels opt out. | | **Difficulty** | Nothing scales. TTL is the only pressure and it's linear. | diff --git a/card.html b/card.html index 599749c..d91a7ba 100644 --- a/card.html +++ b/card.html @@ -68,6 +68,7 @@ the older it gets the more it trusts you.

AudioRequired. Several mechanics are inaudible without it, and one boss is unbeatable if you cannot hear the beat. Runs onAny browser with WebGL2 and Web Audio. No install, no account, no server. Progress is in localStorage. DataNone leaves your machine. There is no analytics, no telemetry, no network call after the page loads. + Reading200 philes — text collectibles, all of them findable, none of them required. Roughly 30,000 words, written as if by someone in the year it happened who did not know they were in a game. Built with~9,000 lines of hand-written JavaScript and one vendored copy of three.js. No engine, no build step, no dependencies. @@ -123,8 +124,8 @@ on a wire.

What it does not do