Track reserved, started and legacy-unknown requests separately; retain active request accounting until explicit completion and expose recovery controls. Reject duplicate or unknown starts, preserve ownership checks, and validate the lifecycle with isolated synthetic state.
Record independently verified palette fixes and add a supplied-HD timed currency scene fixture covering interpolation and unchanged simulation state.
Refine the classic menus, shop, save compatibility prompts, original intro,
indexed effects and audio. Restore forward-gun damage and rewards for JSON
ground targets while preserving native replay behavior.
Add six separate Iron Coast missions, distinct bosses and the authored FM
soundtrack, with source art, SD/HD sprites, sounds, dependencies and validation
in the mod packages. Validate the complete 19-package campaign route and
save/load progression.
Inventory every original picture and implement source-bound HD review,
bounded lazy artwork caches, indexed terrain composition and palette-safe
conversion. Track generation jobs and independent acceptance separately;
the complete original-art remaster is still in progress.
Validation: default and headless portable suites; final library 106 passed;
original 1889-step reference replay; complete six-stage campaign and replay;
42 menu/intro captures; full registered HD pack at four presentation scales;
terrain context/scrolling checks and fullscreen 1080p rendering.
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.
Vendor skynettx/raptor (nukeykt's reconstructed source, GPLv2+): original
game logic, GLB loading, OPL2 music emulation. Runs with user-supplied
registered v1.2 GLB data (5 original mission packs) at 1920x1080 with
working AdLib soundtrack and SFX.
- play.sh: asset linking, first-run build, launch
- SDL2 2.28.2 built user-local (~/.local); CMake 3.30.3 binary
- prototype engine preserved on branch prototype-engine
- PLAN.md rewritten for the source-base architecture