• src/doors/syncdoom/README.md m_menu.c render_text.c render_text.h sync

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sat Jun 20 14:04:42 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/96a148297f256e0fb9f02f66
    Modified Files:
    src/doors/syncdoom/README.md m_menu.c render_text.c render_text.h syncdoom.c xtrn/syncdoom/controls.msg lobby.js syncdoom.example.ini
    Log Message:
    syncdoom: Ctrl-N dither toggle + per-user syncdoom.ini; fix dither washout on F4 cycle

    - Dither washout fix: init_noise() rescaled noise_textures in place, and rt_config
    calls it on every F4 tier cycle, so the repeated rescaling flattened the dither
    until it vanished and never came back. Guard it to scale once (color depth is
    fixed for the life of the process). User-confirmed on Windows Terminal (8-bit).
    - Per-user prefs: the per-user file is now a sectioned syncdoom.ini in -home
    ([input] kp* graces + [video] dither), mirroring the house syncdoom.ini beside
    the exe (was a flat input.ini). Saved read-modify-write so unmanaged keys
    survive. Precedence: built-in -> house ini -> per-user -> CLI.
    - [video] dither = auto|on|off (auto = by color depth: on at 256-color, off at
    16-color and truecolor) plus a live Ctrl-N toggle -- no function key was free,
    so 0x0E is intercepted at the door level (never reaches Doom). rt_set_dither()
    re-derives the dither state without rescaling. Dither is text-tier only; off
    also trims text bandwidth (fewer SGR color escapes from broken-up flat runs). - Docs: Ctrl-N row in controls.msg (byte-correct codes + the per-user note) and
    the README controls table; example.ini [video] dither + per-user overlay note.
    - Lobby: drop the redundant console.pause() in sd_controls -- printfile's
    auto-pause is the single dismissal; trimmed controls.msg to one screen.

    Co-Authored-By: Claude Opus 4.8 <[email protected]>

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