ui-blend-mode-measured.md names both rotated sweep strips additive in the same row as the frames. Those are ptloop01/ptloop02 here, now in additive_elements for both measured screens. It changes nothing visible: on the menus the port runs the leaf group once and parks it off-screen, and suppressing both sprites at leaf-time 100, 200 and 300 changes 0 pixels each time. It is in the file because it is measured. Refutation attempt on their identification, and it survives with a number of mine. The automatic matcher reports "no match" for those two draws; they rest on one control reproducing heights 1134 and 1303. Rendering the menu at a phase where the sweeps are on screen and suppressing them gives a footprint 884 px wide against their 889.6 -- 0.6 % apart, derived without using their number. The heights differ as they should: my bbox is clipped by the screen, theirs is the full quad extent. The blend was a confound in my own earlier evidence. loop_leaf_why scoped looping to the title partly on a phase sweep of mine that drew the sweeps ALPHA-OVER, so an on-screen sweep was composited wrongly and then scored against the capture. Re- run with additive and looping enabled for the menu, through a scratch export root so the repo was untouched: parked 0.0208 %, phase 150 on-screen 0.0851 % with the sweeps painting 58 027 px, other on-screen phases 0.086-0.122 %. The conclusion held and got stronger -- 3x with the wrong blend, 4-6x with the right one -- so the scoping stays and the correction is what is recorded. Still one capture, and best-match is still weak evidence for an absence. And a reading of the new log that I did not make: it shows both sweeps SUBMITTED on the main menu in every frame group, which is not evidence they animate there. A quad parked off-screen at x=1521 is still a draw call. The log settles the blend and not the visibility, and both questions arrived in the same artefact.
Sylpheed
A clean-room reverse engineering and port project for Project Sylpheed: Arc of Deception (Xbox 360, 2007).
Three things live here, in one repository so that a change spanning them lands as one commit:
| The decoders | crates/sylpheed-formats — the disc's formats, read and verified disc-wide |
| The port | port/ — a Godot 4 project, plus crates/sylpheed-export which converts a disc into the open asset tree it reads |
| The corpus | docs/re/ — what has been reverse engineered, with its evidence, its retractions and its dead ends |
You need your own copy of the game. No game content is in this repository and none ever will be. The exporter reads the disc you supply.
The oracle is the real game
sylpheed-cliand the Explorer are tools for verifying our decoding. They are hypotheses under test and they have been wrong. When something must be checked against the truth, the truth is the game running in Xenia Canary, captured — not any renderer of ours.
This is stated first because getting it backwards is the most expensive mistake this project has made.
Layout
crates/
sylpheed-formats/ the decoders. Disc-wide verified; the corpus is its spec
sylpheed-cli/ headless tools -- render a screen, dump a table, probe audio
sylpheed-viewer/ the Explorer: a human's window onto the disc. STATIC data only
sylpheed-export/ disc -> the open, moddable asset tree
port/ the Godot 4 project. Reads open formats ONLY
authored/ decisions that are NOT on the disc, each with its reason
data/
base/ generated by the exporter. Gitignored, never hand-edited
mods/ drop-in overrides. Yours
docs/
re/ the corpus: findings, refutations, method traps
game/ how the game is navigated -- menus, modals, flight
port/ the port's mission, its handoff contract, modding rules
-- and RUNNING.md, which is how you actually start it
agents/ how the agent team works together
tools/ capture harnesses, probes, the share tool
exchange/ transient inter-agent files. NOT in git
docker/ the agent containers
Where to start
docs/re/INDEX.md— what is decodeddocs/re/REFUTED.md— what has been tested and dieddocs/re/METHOD.md— traps this project has already paid fordocs/game/navigation.md— how the game is navigateddocs/port/MODDING.md— why the asset tree looks the way it does
Xenia Canary is a separate repository: it is a fork tracking upstream, and it carries our instrumentation.
Conventions
Confidence is per claim, never per document: ✅ CONFIRMED · 🟡 PROBABLE ·
❔ HYPOTHESIS · ❌ REFUTED. A withdrawn result is kept with its reasoning
rather than deleted — that is why the numbers here can be trusted.