• src/doors/syncscumm/door/sst_io.c sst_io.h syncscumm.cpp

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Saturday, July 18, 2026 23:14:40
    https://gitlab.synchro.net/main/sbbs/-/commit/1bcb26e37dfaf1c30db70452
    Modified Files:
    src/doors/syncscumm/door/sst_io.c sst_io.h syncscumm.cpp
    Log Message:
    syncscumm: stop the AGI ego with numpad-5 (map KP5 to KEYCODE_KP5)

    The numpad center key was unmapped, so in an AGI game (Space Quest 0)
    pressing it to halt the walking ego leaked the ASCII '5' into the text
    parser instead. AGI's keyboard handler maps Common::KEYCODE_KP5 to AGI_KEY_STATIONARY (engines/agi/keyboard.cpp) -- the canonical "stop" --
    but the door never produced that keycode: the evdev decoder had no case
    for keycode 76 (KP5), so it fell through to termgfx_evdev_ascii() and
    emitted '5'.

    Add SST_KEY_KP5 and wire it at all three decode/emit sites: the evdev
    switch (keycode 76), the kitty keypad path (KP_BEGIN, 57427 -- the
    NumLock-off center key), and the SST_KEY -> Common::KEYCODE event
    builder. The numpad now respects the game's directional/stop mapping the
    way the other keypad keys already did (KP8=up, KP2=down, ...), so AGI
    walk/stop works from a real numpad. Toggle-walk itself (one arrow press
    walks until stopped) is AGI's native behavior, unchanged.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sunday, July 19, 2026 05:16:09
    https://gitlab.synchro.net/main/sbbs/-/commit/db6bd14f9746e4a6dcb86e88
    Modified Files:
    src/doors/syncscumm/door/sst_io.c sst_io.h syncscumm.cpp
    Log Message:
    syncscumm: add mixer-volume knobs and a Ctrl-G Global Main Menu key

    Two door-wide conveniences for reaching audio balance and menus from any terminal.

    Mixer volumes: new syncscumm.ini "[audio]" knobs music_volume,
    speech_volume and sfx_volume (0-100 percent) set ScummVM's own per-
    channel mixer levels, so a title whose soundtrack overbears its dialogue
    can ship a rebalanced default. These are ScummVM's linear 0-255 channels
    (what its GMM Volume sliders show), distinct from the "[audio] volume"
    knob, which scales the whole pre-mixed stream. Applied to kSessionDomain
    by resolveVolumes(), mirroring resolveSubtitles().

    Global Main Menu key: ScummVM's "MENU" action defaults to the keyboard
    "Menu" key, which no terminal sends, so the GMM (Volume/Save/Load/Quit)
    was unreachable outside SCUMM. F5 stays the game's own menu; a reserved
    Ctrl-G is intercepted in all three input paths (kitty, legacy byte, and SyncTERM evdev) and delivered to the engine as EVENT_MAINMENU, which
    opens the GMM in every engine, on every terminal -- a control byte, not
    a modified function key. Ctrl-G is free in the non-SCUMM engines; in
    SCUMM it takes over the "very fast mode" toggle while Ctrl-F "fast mode"
    still works. Configurable via "[input] menu_key = ctrl-<letter>" (or
    "off"); default ctrl-g.

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

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