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