• src/doors/syncconquer/door/door_help.c door_help.hsrc/doors/syncconque

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Jul 12 05:11:38 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/5ff3d0595588fdef25824877
    Added Files:
    src/doors/syncconquer/door/door_help.c door_help.h
    Modified Files:
    src/doors/syncconquer/CMakeLists.txt PROVENANCE.md src/doors/syncconquer/door/door_input.c door_io.c door_io.h src/doors/syncconquer/vanilla/redalert/scroll.cpp src/doors/syncconquer/vanilla/tiberiandawn/intro.cpp scroll.cpp
    Log Message:
    syncconquer: keyboard scroll, key-help card, F4 fix, TD side-select

    Keyboard/terminal-usability batch across both doors (SyncAlert / Red
    Alert and SyncDawn / Tiberian Dawn).

    Keyboard map scrolling (both titles): the arrow keys scroll the tactical
    map, Home/End jump to the top/bottom edge, and a held key scrolls
    continuously by polling Down() -- kitty/evdev report key releases, so the
    hold state is real; a legacy tap terminal with no key-up scrolls one cell
    per received tap. The mouse edge-scroll auto path is also slowed to a quarter-cell per tick so it glides instead of flying (the door runs
    several game ticks per presented frame). Handled in ScrollClass::AI,
    ahead of Keyboard_Process, so it behaves the same in both engines.

    Numpad decoding: the kitty numpad now respects NumLock (off =
    Home/End/arrows, on = digits) instead of always folding to digits, and
    the SyncTERM evdev path gains the missing numpad Home/End/PgUp/PgDn/Ins/
    Del keycodes (it already had the numpad arrows). Numpad navigation now
    works in both terminals.

    F4 double-fire (Windows Terminal / kitty): kitty reports F4 as "CSI S"
    twice per press -- a bare press and a "CSI 1;1:3S" release. The 'S'
    handler cycled the graphics tier on both edges; it now parses the kitty
    event type and cycles on the press only. The rxvt ESC[14~ path is
    hardened the same way.

    Key-bindings help card (Ctrl-K or F1): a door-side centered panel listing
    the game commands and the door/terminal keys, since the engine has no
    key-list screen. Esc closes it, and the present loop freezes the frame
    under it so it doesn't flicker in Sixel. F1/Esc are handled in emit_key,
    the one point every keyboard mode funnels through.

    TD side selection: Choose_Side was mouse-only. Left/Right now pick
    GDI/Nod, Tab toggles a highlighted (outlined) side, and Enter/Space
    confirms it.

    Vendored edits are recorded in PROVENANCE.md (#29-31); the door-side
    files (door_help.*, door_io.*, door_input.c) are ours.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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