• src/doors/syncdoom/syncdoom.c src/doors/syncduke/syncduke.h syncduke_i

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sat Jul 11 18:22:41 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/842d355b5535e0369bcf846a
    Modified Files:
    src/doors/syncdoom/syncdoom.c src/doors/syncduke/syncduke.h syncduke_input.c syncduke_io.c
    Log Message:
    syncduke,syncdoom: reclaim the status-line row; fix DOOM keypad-plus

    Adopt SyncConquer's DECSSDT status-line hide in SyncDuke and SyncDOOM.
    On entry each door emits termgfx_term_status_off (DECSSDT Ps=0) before
    the canvas probe, so SyncTERM frees its 25th row and the game fills the
    full 80x25 / 640x400 canvas instead of the 640x384 it draws into while
    the status line is visible. The prefixed DECRQSS query's reply is
    captured (a rolling-window scan in the input pump) and restored on exit
    via termgfx_term_status_set, mirroring SyncConquer's door_term_restore.

    Also fix SyncDOOM's numeric-keypad '+': it emitted the character '+',
    but DOOM binds screen-size-up and automap zoom-in to KEY_EQUALS ('='),
    not '+'. keypad-'-' worked only because screen-size-down is KEY_MINUS
    ('-'), which the keypad character happens to match. Map keypad-'+' to
    '=' in both the evdev and kitty numpad tables so it resizes and zooms
    with the same parity keypad-'-' already had; the main '+'/'=' keys are untouched.

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

    ---
    þ 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 Sun Jul 12 05:11:38 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/b740154ce8b57a09f7c86f9a
    Modified Files:
    src/doors/syncdoom/syncdoom.c src/doors/syncduke/syncduke.h syncduke_input.c syncduke_io.c
    Log Message:
    syncdoom/syncduke: bottom-row status bar, tier detail, text-grid fix

    Move the live stats strip (Ctrl-S) from the top row to the terminal's
    bottom row in both doors. In the sixel tier that row is already reserved
    empty (recompute_geom fits the image into vh-cellh so a sixel never
    reaches the last text row -- the Windows-Terminal scroll guard), so a
    bottom strip is genuinely non-invasive there, and it clears Doom's
    top-row message line and Duke's top-row pickup/quote messages. In the
    text tier the strip's row is excluded from the cell-diff so the game
    never repaints under it. Toggling the overlay off now erases the bottom
    row explicitly, since the graphics tiers never repaint that reserved
    row.

    Restyle the strip as a full-width status bar, following SyncConquer's
    idiom: set the background attribute first, then erase-to-end-of-line, so
    the erase paints the whole row in the bar color (black-on-cyan) instead
    of leaving a black tail. This also drops the old right-justify plus
    narrowing bookkeeping -- the background-color erase handles a shorter
    readout's stale tail.

    SyncDOOM: name the active text sub-tier in the readout (half-block, blocks+shades, quadrant, sextant) instead of flattening every one to
    "text", matching SyncDuke; and add the per-frame image size and encode
    time (KB / enc ms) fields SyncDuke already shows, timed with xpdev's xp_timer().

    SyncDuke: fix the text tier drawing past the screen canvas. It sized the character grid as px_w/8 by px_h/16, hardcoding an 8x16 cell, which
    overcounts on any terminal whose real cell differs (e.g. Windows
    Terminal) and spills the render past the canvas. Use the measured grid
    (the cursor-probe's g_grid_cols/rows, via new syncduke_term_cols/rows accessors, with px-over-cell and 80/24 fallbacks) -- identical to
    SyncTERM's true 8px cells, correct elsewhere. This mirrors how SyncDOOM
    already sizes its text grid.

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