MODDING.md calls base-and-overrides "a design constraint on the exporter today, not a milestone to add later". Nothing read `data/mods/` at all -- the directory has existed since the monorepo merge with a .gitkeep and no code path anywhere. Eight milestones shipped past it. ExportTree.resolve() now shadows by path, and every read goes through it: screens, sprites, cues, the music bed, movies. MenuAudio was reading tree.root directly and would otherwise have made audio the one asset kind a mod could not touch, for no reason a modder could have guessed. No manifest, no registration step -- the path IS the registration, which is the whole of the rule. One tree, not a stack: layering needs a load order and nobody has asked for one, so data/mods/README.md says that rather than inventing it. Every shadowed file is printed as it is read. The first version summarised in _ready, before any asset had been read, so it always said "nothing shadowed yet" -- a report structurally incapable of reporting anything, which is worse than none because it looks like an answer. data/mods/ was NOT gitignored, and that is a hole in a hard rule: a mod is usually an edited game asset, and this was the one directory a user is invited to put modified sprites in and git would have taken them. Now excluded except the README. Gate: a synthetic 203x43 magenta PNG (nothing disc-derived) at data/mods/sprites/title/main_menu/ptbtn01.png changes 8501 pixels in a bounding box of exactly 203x43 at the button's position, and `check` still passes. RAISED, NOT RESOLVED: MODDING.md says the tree is data/base/, PORT-MISSION.md §3 and the exporter and .gitignore say export/. Both are mission files and only the human changes a mission. REFUTATION on Q3's paint-order key: 2 of 16 screens did not match a stable sort by layer key -- but that was my test. pgloading_eff00.prm carries NO layer key (layer_source "none"): a primitive with no sprite header and no implied-name fallback. I sorted keyless first; the decoders put it last, which is right, since it is the full-screen black quad and HANDOFF's own sentence is that the fade quad paints last. Completing the rule to "keyless last" gives 16 of 16. SURVIVES. Recorded because the published claim does not say where a keyless element goes and there is one in the archive. Separately the tie-break's reach looks understated: 105 elements share a layer key across 12 of 16 screens, where HANDOFF characterises the cost as "one element's blend on one screen". WITHDRAWN, and it was mine: I filed "the runtime mix has no headroom" in red twice, off a peak reading. Measured properly it is 43 samples at full scale in 5.9 s and 24 in 98.5 s, longest run 0.25 ms -- the disc's own confirm cue on a transient, possibly only in the 16-bit save. Nothing changed, deliberately: attenuating would be an unmeasured level decision of the kind I refused for the loop point. A peak reading is not a clipping measurement. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WM5XL4HfrHuxz8RiMWdCMC
50 lines
1.5 KiB
Plaintext
50 lines
1.5 KiB
Plaintext
# Rust build artifacts
|
|
/target/
|
|
**/target/
|
|
/dist/
|
|
|
|
# Extracted game assets — never commit these
|
|
assets/
|
|
*.iso
|
|
*.xiso
|
|
|
|
# IDE / OS
|
|
.idea/
|
|
.vscode/
|
|
*.swp
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Local dev overrides
|
|
.env
|
|
|
|
# Trunk build output
|
|
dist/
|
|
__pycache__/
|
|
|
|
# ── The port ────────────────────────────────────────────────────────────────
|
|
# Generated from the user's own disc. This repo stays clean-room: code, schemas,
|
|
# authored mappings and documentation only -- never game content.
|
|
#
|
|
# BOTH names are ignored on purpose. `export/` is what the exporter writes and
|
|
# what `ExportTree.locate()` reads today; `data/base/` is the name MODDING.md
|
|
# gives that same tree. Only one of them existed here, and it was the one
|
|
# nothing writes -- so the live output directory was tracked while MISSION §4
|
|
# said it was ignored. Ignoring both means renaming the tree to match the docs
|
|
# cannot silently start committing the disc.
|
|
/export/
|
|
/data/base/
|
|
# Transient inter-agent files. Deliberately outside history: they are working
|
|
# artefacts with provenance in their manifest, not results.
|
|
/exchange/
|
|
!/exchange/.gitkeep
|
|
.godot/
|
|
port/.godot/
|
|
|
|
# A mod is usually an EDITED GAME ASSET, and this repository never holds game
|
|
# assets. `data/mods/` is the user's own directory -- the exporter never touches
|
|
# it and neither does git, except for the README that explains the rule.
|
|
/data/mods/*
|
|
!/data/mods/README.md
|
|
!/data/mods/.gitkeep
|