Import the scene graph, and find the worst gap between two branch points is zero
ROADMAP G1, scheduled early because it is a measurement input, and it paid for that immediately. 51.3 established that a ring's lookahead is accumulated out of pipe - wire and that a seek spends all of it, so what a branch point costs is set by the time since the last one. 55.5 rehearsed a seek on the machine and said out loud that it could not ask the question, because nothing here knew where the branch points are. They are everywhere, and 5.4% of them are free of charge to the player and not to us. Over 612 distinct transitions into a seek, taking the earliest instant each input window opens: worst 0.000 s, p10 0.950, median 3.473, best 82.497. 33 open on the first frame of a clip the disc SEEKED to -- press right as flaming_ropes.enter_room appears and you are in fall_to_death, two seeks with no play between them. 51.2's slack rule can therefore be answered NO by the content rather than by the buffer, and no amount of ring is a defence. It does not break the design. A branch on an empty ring costs the 2-record prefill, 149.7 ms at 488 KB/s, not the climb. What it removes is margin: at that rate in a 256 KB ring, 76% of this game's branch points arrive before the ring has refilled, and a 512 KB ring makes that 90%, because doubling the ceiling does not touch the surplus. The ring is not the lever; the surplus is. CORRECTION to FINDINGS 16: there is only one transcription. The SNES chapter set says in its own README that it is derived from DirkSimple, so the planned diff of two independent sources catches conversion errors only. Run anyway: durations agree 388/505 within a frame, branch structure 470/505, and of the 35 differences 16 are renames and 18 of the other 19 are that port dropping the arcade's diagonals. Zero transcription discrepancies, and none were findable. Two constraints on the input layer come free: the arcade needs eight directions, and the shortest input window is 98 ms against 54.4's 72.13/90.16 ms frame slot, so input cannot be polled on the frame tick. The coupling to outside source is contained to one file (USER DECISION). tools/import/scenegraph.py is the only code here that knows those projects exist -- their paths, table names, timing formulas, constants -- and it writes DLXSCENE1, this project's own schema, into gitignored tmp/ with the sources' licences inside it. tools/analysis/25_scene_graph.py reads only that. Nothing is vendored and nothing outside-derived is committed. The split was made after the measurement and the whole output was re-run byte for byte to show it moved no number. Both import gates are negative-tested: deleting one sequence upstream fails the 516/906 count, and closing the table early fails the constructor-end check, which replaced one that was vacuous. No 68000 code ran or changed; decode.bin is still 1,296 B at the same MD5. check.sh gains an import stage that skips when there is no checkout. ALL GREEN before and after. Claude-Session: https://claude.ai/code/session_01194oWYW8DQXK1SZ2DnChW6
This commit is contained in:
+25
-12
@@ -3,6 +3,8 @@
|
||||
Written end of session 19 (2026-08-24), against a tree that is ALL GREEN.
|
||||
Amended end of session 21: P1 done, P2 half done (FINDINGS 53).
|
||||
Amended end of session 22: P3 done (FINDINGS 54).
|
||||
Amended end of session 23: P5 done (FINDINGS 55).
|
||||
Amended end of session 24: G1 done (FINDINGS 56).
|
||||
|
||||
**THE COMPLETION TARGET IS M3, THE VERTICAL SLICE** (USER DECISION): one scene
|
||||
tree — a decision point, two outcomes, a death clip — with audio, streaming from
|
||||
@@ -256,18 +258,29 @@ interaction to price next, and it is E2's question with a second consumer in it.
|
||||
**E6. Container v2** — audio interleave, per-record index, scene table. Depends
|
||||
on P6's answer and on P5's index.
|
||||
|
||||
**G1. Import the scene graph — early, because it is a measurement input.**
|
||||
SNES project `data/events/` (MIT, cleared) diffed against DirkSimple (zlib),
|
||||
which transcribed the same data independently, to catch transcription errors
|
||||
before anything reaches 68000 tables. **Neither is on this box** — both need
|
||||
fetching.
|
||||
~~**G1. Import the scene graph — early, because it is a measurement input.**~~
|
||||
**DONE, session 24 — FINDINGS 56.** It was pulled ahead for exactly the reason
|
||||
given, and it paid: **the worst gap between two consecutive decision points is
|
||||
zero**, and 5.4% of the game's 612 branch transitions are. Two seeks can fall
|
||||
back to back with no play between them, so 51.2's slack rule can be answered NO
|
||||
by the content rather than by the buffer.
|
||||
|
||||
The reason to pull this ahead of the game logic that consumes it: 51.3 says
|
||||
4.83 s of play to refill a 256 KB ring at 488 KB/s, and Dragon's Lair's decision
|
||||
points are seconds apart. **Nothing in this tree can currently say what the worst
|
||||
gap between consecutive decision points is** — only the scene table knows, and
|
||||
until it is imported, whether this design survives a back-to-back branch is an
|
||||
open question nobody is able to ask.
|
||||
It does not break the design — a branch on an empty ring costs the prefill
|
||||
(149.7 ms, 1.80 frame slots at 488 KB/s), not the climb — but it removes the
|
||||
margin: at 488 KB/s in a 256 KB ring, **76% of this game's branch points arrive
|
||||
before the ring has refilled**, and a 512 KB ring makes that 90%. **The ring is
|
||||
not the lever; the surplus is.**
|
||||
|
||||
Two constraints on the input layer came with it: the arcade needs **eight
|
||||
directions**, and the shortest input window is **98 ms** against a 72.13/90.16 ms
|
||||
frame slot, so input cannot be polled on the frame tick (56.7).
|
||||
|
||||
**The cross-check plan was wrong and is struck.** The SNES chapters are
|
||||
*derived* from DirkSimple, by their own README, so there is one transcription and
|
||||
not two; the diff catches conversion errors only (56.2). **Nothing is vendored:**
|
||||
`tools/import/scenegraph.py` is the one file coupled to those projects and it
|
||||
writes this project's own `DLXSCENE1` schema into gitignored `tmp/`
|
||||
(USER DECISION, session 24).
|
||||
|
||||
---
|
||||
|
||||
@@ -304,7 +317,7 @@ B3 DTYP ──────┴─> P4 transport ─┐
|
||||
P1 P2(half) P3 P5 P7 ───────────┘ ^
|
||||
│
|
||||
P6 (bus cost DONE, 52) ──────────────────┤
|
||||
G1 scene graph (fetch, do early) ─────────┘
|
||||
G1 scene graph (DONE, 56) ───────────────┘
|
||||
B2 blanking ─> (page 1; do not pre-build on it)
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user