• src/doors/syncduke/syncduke_input.c

    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/91d049a9cff95b2dd4a1acbe
    Modified Files:
    src/doors/syncduke/syncduke_input.c
    Log Message:
    syncduke: numpad Home/End/PgUp/PgDn are Aim/Look under kitty, not weapons

    With NumLock off, Windows Terminal sends the numpad's kitty FUNCTION
    codepoints -- KP_HOME 57423, KP_END 57424, KP_PAGE_UP 57421, KP_PAGE_DOWN 57422. The CSI-u handler ran them through kitty_kp_normalize(), which folds them to the DIGIT-key codepoints KP_7/1/9/3; those fall through to the ASCII fold and become '7'/'1'/'9'/'3' -- which in Duke are weapon-select keys. So in gameplay the numpad End key selected weapon 1 and holstered whatever you were holding, and Home/PgUp/PgDn silently switched weapons too.

    Every other input path already maps these four correctly: the legacy CSI ~/H/F path and the SyncTERM evdev path both drive look_hold(sc_kpad_7/1/9/3) -- Aim up/down, Look up/down. Only the kitty path folded them to digits. It went unseen because the terminals it was tested on (foot, Contour) were captured with NumLock ON, whose DIGIT codepoints SHOULD fold to weapons.

    Intercept the four function codepoints in gameplay before the normalize, with the same look_hold mapping the other two paths use. NumLock-ON digit
    codepoints
    (57406/57400/57408/57402) are untouched and still select weapons, which is
    what
    NumLock ON is for. Menus were already correct (the non-gameplay block maps KP_HOME/KP_END to first/last item). Found by tracing the raw CSI-u that
    Windows
    Terminal actually sends.

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