P1. The project reads only `export/` -- the manifest, a screen's JSON and its PNGs -- and draws every element at `rest`, in the export's own `paint_order`. Three choices worth the words: * `ExportTree` addresses screens by manifest NAME, never by path, and checks `format` on the manifest and on each screen before drawing. Textures are decoded from bytes at runtime rather than Godot-imported: `export/` is gitignored and regenerated wholesale, and a `.import` per sprite would be derived state next to derived state, invalidated on every re-export. * One CanvasItem draws the whole screen. `paint_order` is already back-to-front, so honouring it is a loop; spreading it across sixteen nodes' z-indices would hide the one unresolved thing about that order -- the ties -- behind Godot's sibling rules. * The screen renders into a SubViewport sized to the export's `design` rect. Capturing the window instead gave 1280x720 of screen minus a window manager's title bar: 1235x695. A gate that rescales that to compare against a 1280x720 composite is measuring the compositor. Nearest-neighbour filtering, because the export is a 1:1 copy of the disc's texels, elements draw at up to 500 %, and it is what `ui_layout::blit` does -- so a filter difference cannot masquerade as a placement difference in the diff. No keyframe interpolation and no focus state: both depend on constants that are MEASURED rather than decoded (HANDOFF Q1, Q5), and a pixel-diff gate must not have one of those inside it. P2 and P5.
28 lines
927 B
Plaintext
28 lines
927 B
Plaintext
; Godot 4 project for the Sylpheed menu shell.
|
|
;
|
|
; It reads ONLY the open asset tree produced by crates/sylpheed-export -- no
|
|
; disc formats, no GDExtension, no Rust. See ../docs/MISSION.md.
|
|
|
|
config_version=5
|
|
|
|
[application]
|
|
config/name="Sylpheed"
|
|
config/features=PackedStringArray("4.3")
|
|
run/main_scene="res://scenes/boot.tscn"
|
|
|
|
[display]
|
|
; The screens are authored at 1280x720 and every coordinate in the export is in
|
|
; that space, so the viewport matches it exactly and scaling happens once, at
|
|
; the window edge.
|
|
window/size/viewport_width=1280
|
|
window/size/viewport_height=720
|
|
window/stretch/mode="canvas_items"
|
|
window/stretch/aspect="keep"
|
|
|
|
[rendering]
|
|
|
|
; The screens carry their own background; anything the export does not paint is
|
|
; black, which is what `sylpheed-cli screen render --black` composites over and
|
|
; therefore what a capture is comparable against.
|
|
environment/defaults/default_clear_color=Color(0, 0, 0, 1)
|