Add the complete organic forest family and two Source-guided terrain tiles with portable reproduction tools and review evidence. Preserve existing game assets and restore fifteen referenced archival metadata files.
Validation: 157 maintained HD-tool tests; installed HD validation 5539/5539 with zero rejects; 45 mods; three 1080p SDL controls unchanged. SourceF binaries and gameplay are unchanged. Native Windows validation for the preceding 5521-picture commit passed.
Add the final boss picture, three coherent terrain remasters and complete DSHP20G3/WORMRITE catalogue families. Preserve generated parents, portable recipes, derivation receipts and separate artistic/context reviews.
Validate 5500 HD pictures with zero rejects and all 45 mods. Review three unchanged 1080p SDL controls, preserve existing runtime/data bindings, and update Linux/Windows shared-data metadata and progress records. Cleanup tools pass 101 tests plus 12 TARGT input-safety tests; TARGT artwork remains pending.
Add reviewed native terrain artwork, preserve original detail where required, and validate versioned carried Terrain identities. Bundle the 5407-frame pack for Linux and Windows and record current validation results.
Add rational atlas cells and bounded authenticated Original-detail retention with standalone synthetic regression checks. Rebuild Linux and Windows runtimes; validate all 5384 supplied frames and preserve three exact 1080p regression controls.
Accept strict common-scale integer rounding for complete transparent PNG canvases while retaining source-aware alpha checks and existing opaque/exact cache identities. Add separate cache identity for newly eligible rounded transparent frames and matching Rust/Python regression coverage. Bundle rebuilt Linux and GNU Windows executables against the unchanged reviewed4978 asset pack.
Validation: 31 Rust HD tests, 7 Python audit tests, and 341 portable tests passed; zero failures. Original-data integration validated all4978 remasters at scales1–4 with bounded caches. Three fresh software SDL1920x1080 menu/mission captures are pixel-identical to published controls. Windows PE/dependency and complete shared data hashes verified; fresh Wine asset and45-mod validation passed. Artwork geometry remains independently reviewed; no held candidate is admitted by the format change.
Engine changes vs the vendored upstream (full ledger in
docs/upstream-patches.md):
- Assets: replace the encrypted FILE000N.GLB archives with a catalog of
pre-decrypted loose files (data/INDEX); GLB_SlotItems() drives
mission-pack / registered-version detection; payloads never run the
GLB cipher at runtime.
- Platform: Linux/SDL2/ALSA only; Android, MSVC/MinGW, macOS packaging,
bundled Windows SDL2 SDKs and the ENDOOM exit screen are gone;
EXIT_Error now prints before exiting.
- Rendering: decouple presentation from simulation -- sim stays at the
original 70/3 Hz, frames render interpolated at display rate (player,
map scroll, enemies, shots, bonuses, anims, shadows); menus keep 70 Hz
pacing; vsync with a delay-guard fallback.
- QoL: borderless window mode (Video/borderless), no menu cursor
snapping onto default buttons.
Fix four regressions from the render split:
- Shield bars never redrew: RAP_ThinkStats latches g_oldshield each sim
step before RAP_DisplayStats' dirty check could fire. Bars now draw
unconditionally per rendered frame; g_oldsuper deleted, g_oldshield
kept as sim-side damage-detection state only.
- Dying ships despawned without exploding: the render loop never called
ANIMS_DisplayHigh(); most air-death explosions register HIGH_AIR.
Restored between the player and enemy shots, as upstream orders it.
- Laser turret broke: reusing doneflag as a draw marker (it is
hit/retire game state, and the turret retire path never frees its
shot) hid the beam on hitting ticks and leaked one SHOTS pool slot
per fire until no weapon could shoot. S_LINE tracers now carry an age
counter: one Think pass, every render of their birth step, purged at
the top of the next Think.
- Muzzle flash was cleared per rendered frame, making it invisible at
display refresh rates; now cleared once per simulation step.