Scene Viewer Gallery
Unlike War in Middle Earth (which procedurally generates a landscape per map
tile from a seeded PRNG), every one of Spirit of Excalibur’s 138 close-up
locations is an authored SCEN resource — a fixed, hand-placed list of
background and foreground objects, decoded byte-for-byte and addressed by
(location, sub-scene) (docs/spirit/amiga/engine.md § “Scene System” in
the main repo, not part of this site). That makes this page a straight
compositing-and-wiring job rather than new reverse engineering: no scene
here is synthesised, every one is exactly what the original game itself
would draw for that location.
These six PNGs were pre-composited by tools/spirit/render-scene-gallery.ts,
a small headless script that feeds the shared compositeScene() function
(src/data/scene-compositor.ts — the same function the offline asset
viewer’s “view any location” browser uses) a minimal Node-side canvas shim,
plus the real per-location object list from
scene-viewer-locations.json (138 locations in total; these six were picked
for a mix of Arthurian-legend name recognition and visual variety — capital,
port, holy site and villain’s lair).






How a SCEN object resolves to art
Section titled “How a SCEN object resolves to art”Each object entry in a decoded SCEN resource is just { id, x, y } — a
byte-reversed-on-disk longword _LoadScene un-reverses on load
(docs/spirit/amiga/engine.md; reading it little-endian took object-id
resolution from 24.2% to 99.9% across the whole corpus). The id itself
addresses either a plain IMAG still or the first frame of an FRML
animation sheet — _DrawScene range-checks it and calls _OpenFrml for two
disjoint 100-wide windows (700–799, 900–999) and _OpenImag for everything
else, with no third case. SCENES.RES itself carries no image data of its
own; every id an object references lives in one of the ordinary catalog
files (PLAYA32I.RES, OVERA32I.RES, BOOT32I.RES) already rendered for
the Characters & Creatures page.