• src/doors/syncconquer/CMakeLists.txt DEFERRED.md DESIGN.md build.sh de

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wed Jul 8 01:33:29 2026
    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 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net