• src/doors/syncdoom/README.md doomgeneric.h i_input.c syncdoom.c xtrn/s

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Mon Jun 22 00:57:11 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/675892c7332670412e9c2622
    Modified Files:
    src/doors/syncdoom/README.md doomgeneric.h i_input.c syncdoom.c xtrn/syncdoom/README.md syncdoom.example.ini
    Log Message:
    syncdoom: terminal mouse steering (xterm SGR mouse)

    On SyncTERM and other xterm-mouse-capable clients the door now turns with
    the mouse, which bypasses Doom's turn-acceleration ramp and the door's key-up-synthesis grace machinery entirely -- so turning is markedly
    smoother and more precise than the arrow keys (no key-repeat lag).

    Terminals report the pointer's ABSOLUTE, screen-clamped cell position
    (no relative deltas, and the host can't recenter the pointer), so the
    model is a virtual joystick: the pointer's horizontal offset from
    screen-center sets a turn RATE -- hold it left of center to keep turning
    left, return to center to stop. A relative-delta "native feel" model was prototyped and dropped (it stalls uselessly at the window edge). An idle timeout relaxes steering to neutral when the pointer stops reporting, so abandoning it off-center (e.g. alt-tabbing away) no longer spins forever
    -- terminals send no focus-out event to signal it.

    Buttons map to Doom's defaults: left = fire, right = strafe-modifier,
    middle = forward. Vertical mouse and the wheel are unused. Button state
    comes only from real press/release events, never from motion reports
    (a motion report can carry stale/phantom button bits, which otherwise
    stuck the fire bit on while steering).

    Enable/disable with [input] mouse = on|off (default on) or -mouse on|off;
    saved per-user, suppressed in menus and while typing chat, and simply
    inert on terminals without mouse reporting.

    Implementation: parse SGR mouse reports (ESC[<b;col;row M/m) in the CSI
    parser (enlarged the param buffer); DG_GetMouse() projects state to a
    per-tic ev_mouse posted from I_GetEvent(); enable/disable the tracking
    modes (?1003h/?1006h) in DG_Init/terminal_restore.

    Also fixes the in-game Ctrl-P key, which a stale "return 't'" alias had
    been shadowing so it opened talk instead of reaching the page handler.

    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

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