• src/doors/syncduke/tests/test_kitty.csrc/doors/syncduke/Game/src/menue

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Jun 28 22:01:38 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/d38762b8b3deecfc5e59e949
    Added Files:
    src/doors/syncduke/tests/test_kitty.c
    Modified Files:
    src/doors/syncduke/Game/src/menues.c src/doors/syncduke/syncduke.h syncduke_input.c syncduke_io.c src/doors/syncduke/tests/test_keymap.c
    Log Message:
    syncduke: kitty keyboard protocol -- true key-up, hold-to-move, native turn

    Terminals that speak the kitty keyboard protocol (e.g. Contour) report explicit key press/repeat/release, so the door no longer has to fake key-up with a timeout.
    The door queries support at startup (CSI?u); on a reply it pushes the progressive-
    enhancement flags (CSI>11u: disambiguate + event-types + report-all-keys) and pops
    them on exit (CSI<u). Negotiation is gated -- terminals that don't answer keep the
    existing byte-path behavior, unchanged.

    Under kitty:
    - Movement (WASD/strafe/space) and the turn arrows drive Duke's real key state
    (kitty_press/kitty_release), held until the actual key-up -- crisp hold-to-move,
    and turning uses the engine's native turn-accel ramp instead of the door's
    synthetic rate, so it feels like the original. expire() still times out momentary
    press() keys (F-keys, Center) while leaving kitty-held keys down (far release_at).
    - Full key map for Contour's encodings: printables/numbers/space + numpad (the
    Private-Use-Area keypad codepoints, incl. numpad Enter) via CSI-u; arrows as
    CSI A/B/C/D with release; F1=CSI P, F2=CSI Q, F3=13~, F4=CSI S, F5=15~, F6=17~;
    PgUp/PgDn look, Home/End center. F-key release events are gated press-only so
    nothing double-fires.
    - Ctrl-A..F aliases now mirror the door's F-keys (Ctrl-A=help, Ctrl-D=tier cycle,
    Ctrl-B/C/E/F=Duke save/load) instead of raw Duke scancodes.
    - Home/End in a MENU jump to the first/last item (probeXduke); in gameplay they
    still Center_View.
    - The Ctrl-S stats strip shows "kbd:kitty" when negotiated.
    - Setup Controls greys + disables the byte-path feel knobs (KEY TAP/HOLD, TURN
    SPEED, FAST TURN) and shows a contextual "native key timing" note on hover, since
    those only compensate for terminals without key-up.

    tests/test_kitty.c drives the real pump with Contour's byte sequences and asserts
    the decoded scancodes / actions; test_keymap.c gains a stub for the new output path.
    Live-validated on Contour (hold-to-move, turn, F-keys, numpad, menus) with SyncTERM
    unchanged.

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

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