P5's gate is 'a human clicks through it' and no document told a human how. The commands existed in boot.gd's header and scattered through a twelve-thousand-line DECISIONS.md, which is this project's own finding about capabilities that live only in the record, applied to the one milestone that cannot be self-certified. docs/port/RUNNING.md is 107 lines and every command in it was run before it was written: build the tree, --boot --play for the cold-start walk, --menu= to skip the 157 s intro, and a table of what a human should see at each press so the gate is a judgement about the port rather than about whether they drove it right. It does not claim P5 is met; it removes the excuse that the gate was hard to attempt. Three sections exist because a reader would otherwise report the container as a defect: what is knowingly missing (four of five destinations measured but in other archives, each printing what it would have opened; NEW GAME's skipped chain as a stated gap), what this container distorts (720p decodes +6.7-6.9% slow, the dummy audio driver means you hear nothing, the exit leak line is engine-side at 8 to 8), and how mod overrides report themselves. The Decoder reported BLOCKED.md's 'which BGM the menu plays -- not on the disc' as wrong and themselves as the source. The row has been struck and corrected for days, and I am telling them rather than silently fixing a live row -- their own asymmetry, that a wrongly-superseded row removes a live question from both views. The correction already contains the diagnosis they have just made. It says the negative is bounded -- the TABLES name no screen -- cites li r5 1103 and the byte-for-byte wave match, and ends: a row here must quote the reach of a negative, because a negative summarised without its bound reads as a bigger negative than it is. Their message reports arriving at the same thing independently. Fourth instance of the connection failure and the sharpest yet: the three before were an answer sitting unread, this one was an answer sitting ADDRESSED. Their method note inverts my own v1-to-v3 story and is the transferable part: my 'a report with a standing false positive is one nobody reads' nearly made them filter a 40-candidate sweep. Instead they measured what the false positives were -- guessed infrastructural nouns, 5 of 40; the real category was 'not on the disc' used as a classification legend -- and reading those found the one that was not. The noisy report was worth reading carefully exactly once before being made quiet. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
108 lines
4.2 KiB
Markdown
108 lines
4.2 KiB
Markdown
# Running the port
|
|
|
|
**P5's gate is *"a human clicks through it"*, and until now there was no page
|
|
telling a human how.** The commands existed — in `boot.gd`'s header comment and
|
|
scattered through a twelve-thousand-line `DECISIONS.md`. A capability that lives
|
|
only in the record is, to the person who needs it, absent.
|
|
|
|
Everything below has been run. Where a number is quoted it was measured in this
|
|
container, and where the container distorts it that is said rather than left for
|
|
the reader to discover.
|
|
|
|
## 1. Build the asset tree
|
|
|
|
The Godot project reads `export/`, never the disc.
|
|
|
|
```bash
|
|
cargo run --release -p sylpheed-export -- export --disc /disc --out export
|
|
```
|
|
|
|
Roughly four minutes, most of it transcoding two movies. It **rewrites `export/`
|
|
wholesale** — never hand-edit anything in there; hand-written decisions live in
|
|
`authored/` beside it, and survive a re-export.
|
|
|
|
## 2. The P5 walk, from a cold start
|
|
|
|
```bash
|
|
godot --path port -- --boot --play
|
|
```
|
|
|
|
This is the one a human should judge. It boots the way the game does — two
|
|
splashes, the `ADV` intro, the title — hands over to the menu on Ⓐ, and then
|
|
**stays live and waits for input**.
|
|
|
|
| you press | what should happen |
|
|
|---|---|
|
|
| Ⓐ on the title | the main menu opens on **NEW GAME** |
|
|
| ⬆ / ⬇ | one item, wrapping at both ends |
|
|
| ⬅ / ➡ | **nothing** — measured, and implemented as an explicit no-op |
|
|
| Ⓐ on **EXTRAS** | the EXTRAS submenu, opening on **MISSION SELECT** |
|
|
| Ⓑ in EXTRAS | back to the main menu, **on the item you left** |
|
|
| Ⓑ on the main menu | back to the title |
|
|
| Ⓐ on the title again | the menu, **still on the item you left** |
|
|
|
|
That last row is the one worth checking deliberately: the main menu **remembers
|
|
its cursor**, and every submenu **resets** to its own opening item. Both are
|
|
measured, and they disagree on purpose.
|
|
|
|
⏱ **The intro is ~157 s.** To skip straight to the menu:
|
|
|
|
```bash
|
|
godot --path port -- --menu=main_menu
|
|
```
|
|
|
|
and to drive it unattended:
|
|
|
|
```bash
|
|
godot --path port -- --menu=main_menu --script=down,down,accept,cancel
|
|
```
|
|
|
|
🔴 `--script` **without** `--play` or `--menu` refuses and says so. It used to
|
|
parse, be stored, and do nothing.
|
|
|
|
## 3. What is knowingly missing — not bugs
|
|
|
|
Four of the five main-menu destinations are **measured but not in this export**:
|
|
they live in other archives (`GP_SAVE_LOAD`, `GP_OPTIONS`, …). Pressing Ⓐ on them
|
|
prints what it would have opened and why it cannot:
|
|
|
|
```
|
|
(LOAD GAME) opens a screen this export does not carry:
|
|
The save-slot list is GP_SAVE_LOAD, not in this export. Destination MEASURED.
|
|
```
|
|
|
|
**EXTRAS is the only Ⓐ-into-a-submenu this milestone can walk**, which is why the
|
|
P5 gate rests on it.
|
|
|
|
`NEW GAME` is a deliberate gap of a different kind: the real chain is
|
|
NEW GAME → DIFFICULTY → SELECT DATA → the `S00A` movie, and the port **jumps to
|
|
the movie**, printing the two screens it skipped. That is a gap, stated out loud;
|
|
nobody should read the port's behaviour there as the game's.
|
|
|
|
## 4. What this container distorts
|
|
|
|
* **No GPU.** 720p Theora decodes **+6.7 % … +6.9 % slower than real time** here
|
|
(5 runs, both movies, on a quiet box). The boot's printed seconds carry that
|
|
deficit. It is a property of the machine, not of the port.
|
|
* **No sound card.** Godot falls back to a dummy driver, so **you will hear
|
|
nothing**. The audio is present and measurable —
|
|
`docs/port/AUDIO-VERIFICATION.md` answers every audio question without a
|
|
device, and `tools/port/verify-menu-audio` asserts it — but *"I heard it"* is
|
|
not available in here.
|
|
* **A leaked-object warning at exit** is engine-side, not the port's. Measured:
|
|
releasing every reference the port owns moves the count from 8 to 8.
|
|
|
|
## 5. Modding
|
|
|
|
`data/mods/` shadows `export/` by path. Each override is announced as it is read,
|
|
and at the end of a run any file that **can never apply** is listed:
|
|
|
|
```
|
|
mod: sprites/title/main_menu/ptbase.png <- data/mods/...
|
|
mods: 1 file(s) in data/mods can shadow NOTHING -- no such path in the export:
|
|
inert: sprites/title/TYPO_menu/pteff05.png
|
|
```
|
|
|
|
A file whose path exists in the export but was simply not read this run is **not**
|
|
listed. See `docs/port/MODDING.md` for the five rules the asset tree keeps.
|