• src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/vanilla/reda

    From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Fri Jul 10 23:41:57 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/334b2006e09f9201ac4c2afc
    Modified Files:
    src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/vanilla/redalert/function.h goptions.cpp menus.cpp version.cpp
    Log Message:
    syncalert: show the door version in the Red Alert menus

    Add SyncAlert_Version_Name() (version.cpp) -- "<ver> <date> synchro.net"
    from SYNCALERT_VERSION (a #define, bump per release) plus the build's git commit date (common/gitinfo.h). It is drawn next to the engine's
    Version_Name() in the main-menu and options footers, so the engine revision
    and edition/expansion markers (E/CS/AM/D) are preserved and the door version sits with them. The git short-hash is left to the engine line -- it is the identical value, so the door line omits it to avoid duplication.

    Placement adapts to the dialog width: the options box is wide enough for one combined line (scenario name, then engine + door version); the narrower main menu puts the door version on its own centered line below the engine version, both centered as two separate prints (a single "%s\r%s" TPF_CENTER print only centers one line).

    Vendored menu edits recorded in PROVENANCE.md (patch 12).

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Sun Jul 12 05:11:38 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/aba585c60b398ba1212259c7
    Modified Files:
    src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/vanilla/redalert/visudlg.cpp src/doors/syncconquer/vanilla/tiberiandawn/gamedlg.cpp goptions.cpp menus.cpp visudlg.cpp
    Log Message:
    syncconquer: menu-version placement + wider option sliders

    Live-test polish for both titles' terminal menus.

    syncdawn version line (PROVENANCE #26 refined): main-menu footer now
    centers the engine version and the door version as two stacked rows,
    raised one row off the dialog's bottom edge (like Red Alert); the
    options-menu footer is shifted left off the box edge so it clears the
    buttons. menus.cpp / goptions.cpp.

    Wider option sliders for SyncTERM's cell-granular (~16px) mouse -- the
    same fix as the Sound Controls sliders (patches 13/25):

    - syncdawn Scroll Rate slider (tiberiandawn/gamedlg.cpp): 6->8 factor =
    16px = one cell row (PROVENANCE #27). Game Speed left as-is (hittable
    in practice).
    - Visual Controls sliders (Brightness/Color/Contrast/Tint) in BOTH
    redalert/visudlg.cpp and tiberiandawn/visudlg.cpp: the shared slider
    height 5->8 factor = 16px; the 22px inter-slider spacing already leaves
    room (PROVENANCE #28). This also clears a pre-existing visual artifact
    on the RA sliders that the door's software-fill fix had already fixed.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Tue Jul 14 21:04:15 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/7830701b3722cbb378548619
    Modified Files:
    src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/vanilla/redalert/display.cpp src/doors/syncconquer/vanilla/tiberiandawn/display.cpp
    Log Message:
    syncconquer: full tactical redraw on scroll (fix staircase/black tearing)

    DisplayClass::Draw_It() scrolls the map by reusing already-drawn pixels -- shifting the replicable block via an overlapping self-blit (HidPage.Blit(HidPage, ...)) or, for a DirectDraw hid page, a SeenBuff.Blit(HidPage, ...) -- then redraws only the newly exposed edge. Neither moves content correctly in the door's plain software framebuffer,
    so any scroll (most visibly the Home/End jump) left staircase remnants of shifted sprites plus black gaps in the 640x400 buffer. It showed the same
    under sixel and JXL -- the framebuffer itself was torn, not the transport.

    Force forced = true as soon as a scroll is detected, so the blit-shift
    branch is skipped and the engine's own full-redraw path (its existing else fallback, already used for full-size scrolls) runs instead. Same class as
    the AllowHardwareBlitFills FillRect no-op. Costs the door nothing -- it re-encodes the whole frame every present regardless. Applied to both
    engines; PROVENANCE patch #35.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Fri Jul 17 02:57:08 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/80caf1a94951729bbdad1216
    Modified Files:
    src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/vanilla/redalert/scroll.cpp src/doors/syncconquer/vanilla/tiberiandawn/scroll.cpp
    Log Message:
    syncconquer: fix mouse edge-scroll for a pixel-granular terminal mouse

    With SGR-Pixels (1016) mouse reporting, the map was very hard to edge-scroll and, once triggered, scrolled far too fast.

    Trigger: a pixel mouse can't reliably hit the exact edge pixel over a scaled terminal window, so the tight edge band was near-unreachable. Widen it in
    pixel mode (gated on the door's live door_io_mouse_pixels): RA's 8*RESFACTOR band -> 24*RESFACTOR. TD's scroll.cpp had only the stock literal 1-pixel
    border and never got RA's earlier band fix at all -- give it a 48/16-px band too (measured from where the pointer actually lands, ~gx 591-635 at the right edge, so it catches the hover zone).

    Speed: ScrollClass::AI runs at the door's fast present rate, so a full _rate[] step per tick made the map fly. Cut the auto/mouse edge-scroll step to _rate[rate] / 4 -- RA already had this (PROVENANCE #29); mirror it to TD. Keyboard/inertia scroll is untouched.

    Vendored edits, PROVENANCE #38 (extends the #16 RA band to the pixel-mouse
    case and to TD). Cell-quantized (non-pixel) clients keep the tighter band.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Mon Jul 27 20:26:18 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/35881f16ef0daf4dce26b628
    Modified Files:
    src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/vanilla/redalert/audio.cpp xtrn/syncalert/README.md syncalert.example.ini
    Log Message:
    syncconquer: caption the EVA announcements in Red Alert too

    Tiberian Dawn has captioned its spoken EVA callouts since the vendored
    patch that added them; Red Alert did not, so the same door shipped an accessibility feature to one title and not the other -- a deaf player, or
    one on a terminal with no audio, simply lost "construction complete",
    "unit ready" and "our base is under attack" in SyncAlert.

    Same shape as the Tiberian Dawn patch: a caption table aligned to the
    engine's own Speech[] table, emitted from Speak() when the door's
    [game] captions gate is true. Red Alert's engine differs enough that
    the code could not be copied across. Its VoxType carries 116 entries
    rather than 40, including unused slots (captioned NULL, which the caption helper skips) and one that exists only in an English build, so the table reproduces that conditional to stay aligned elsewhere. Its message list
    hangs off Session and takes a different argument list, so captions follow
    Red Alert's own system-message call sites in house.cpp and taction.cpp
    for color and timeout rather than Tiberian Dawn's. And its Add_Message()
    does not dedup by id, so the "don't stack a repeat while it is still on
    screen" behavior the other title gets for free is done explicitly with a
    lookup first; caption ids are offset out of the TutorialText id space
    those same call sites use, so an unrelated message can never be mistaken
    for a caption already showing.

    The caption is emitted ahead of, and independently of, Red Alert's audio
    gate -- that gate gives up on volume, sample type or quiet mode, which is exactly the case captions exist to cover.

    syncalert.example.ini gains the [game] captions key so the setting is discoverable rather than merely implemented, documented as the same
    tri-state the sibling title uses: on, off, or auto (show them only when
    the client has no usable audio).

    Live-verified against a real session: the caption appears, and matches
    the line being spoken.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)