Subj : src/doors/syncconquer/CMakeLists.txt DEFERRED.md DESIGN.md build.sh de To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Wed Jul 08 2026 01:33:29 https://gitlab.synchro.net/main/sbbs/-/commit/f5578ea57f856e06816444ad Added Files: src/doors/syncconquer/CMakeLists.txt DEFERRED.md DESIGN.md build.sh deploy.sh src/doors/syncconquer/door/door.h door_core.c door_input.c door_input.h door_io.c door_io.h door_node.c door_node.h soundio_termgfx.cpp video_termgfx.cpp wwkeyboard_termgfx.cpp src/doors/syncconquer/plans/2026-07-06-m1-vendor-headless.md 2026-07-07-m2-phase1-door.md src/doors/syncconquer/plans/m2-proto/FACTS.md keystone.patch menu-headless.png video_capture_extra.cpp src/doors/syncconquer/resources src/doors/termgfx/CLAUDE.md xtrn/syncalert/.gitignore fetch-assets.sh install-xtrn.ini Modified Files: src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/vanilla/common/soundio_common.cpp video_null.cpp src/doors/syncconquer/vanilla/redalert/conquer.cpp globals.cpp init.cpp src/doors/termgfx/README.md audio.c geometry.c geometry.h Log Message: syncalert: Red Alert (Command & Conquer) door for Synchronet A terminal-playable Red Alert for Synchronet BBS -- the "SyncConquer" door family's first title (syncalert = Red Alert; syncdawn = Tiberian Dawn, deferred). Renders the running Vanilla Conquer engine to a sixel/JPEG-XL/PPM/text-block frame over the wire, maps terminal keyboard and mouse to the engine, and streams the game audio as SyncTERM audio APCs. Design and deferred-scope notes in DESIGN.md/DEFERRED.md; every vendored-engine edit is tracked in PROVENANCE.md. Build & assets: build.sh drives the headless CMake build (the top-level CMakeLists folds the termgfx-backed video/keyboard/audio shims into the VanillaRA target and defines NEW_VIDEO_BUILD); fetch-assets.sh pulls the RA95 freeware CD from archive.org (checksum-pinned) and extracts the MIX archives -- nothing EA-copyrighted is redistributed. Rendering: a shared termgfx pipeline (sixel/JXL/text encoders, the APC image transport, cap-probe, geometry). Tier auto-selection from the DA1/CTDA/Q;JXL probes with an F4 manual cycle (JXL > sixel > PPM > half/quadrant/sextant); DSR-ACK pacing with AIMD depth; whole-frame de-dupe; OS-pointer-as-RTS-cursor. Input: CSI/SS3/kitty/evdev keys and SGR mouse into the engine's WWKeyboard; real held modifiers on evdev/kitty, plus SGR-report modifier bits and SGR-Pixels (DEC 1016, auto-detected) so modifier-clicks and a pixel-granular cursor work where the terminal allows. Audio: engine-decoded AUD/ADPCM PCM shipped through termgfx's audio_mgr as upload-once SFX and a looping music track (Ogg/Opus, door-side disk cache, C;L client-cache skip). Synchronet integration: install-xtrn.ini, per-user UserPath via a per-home REDALERT.INI + argv[0] override (multi-node safe), DOOR32.SYS, pre-engine asset validation, SIGTERM drain/teardown, argv sanitization, node status / Ctrl-U / Ctrl-P, per-node logging, deploy.sh, and client-charset-aware block tiers (terminal.ini). Vendored-engine local patches (PROVENANCE.md): fail-loud Bootstrap mixfile caching, streamed-score whole-file decode (the ring path desynced the IMA-ADPCM decoder), bNoMovies, and the video/keyboard/audio seams. termgfx gained the audio_mgr music path, an Ogg/Opus resample, geom_fit_ex, and audio gain-staging / decode documentation (README/CLAUDE). Includes the live-test hardening pass: asset permissions, audio routing and the score-decode fix, F4 under evdev, mouse/cell-size and sixel- scroll geometry, screen-clear on tier change, per-tier bandwidth stats, and the charset/tier gating above. Co-Authored-By: Claude Fable 5 --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .