• src/doors/syncdoom/MULTIP

    From Rob Swindell (on Debian L@VERT to Git commit to main/sbbs/m on Saturday, June 20, 2026 14:04:00
    https://gitlab.synchro.net/main/sbbs/-/commit/ff228f292c175e9874aca1f3
    Modified Files:
    src/doors/syncdoom/MULTIPLAYER.md
    Log Message:
    syncdoom: reconcile MULTIPLAYER.md with as-built; add inter-BBS federation design

    Bring the multiplayer design doc in line with what shipped: the real [net]
    keys (advertise, port_low/high, max_games, max_players=4, idle_timeout, stale, allow_external), colon section separators ([wadset:*], [net:<hostname>]), the per-host override, the actual mp_write_registry fields, and the [wads]/ [wadset:*] keys -- marking autoscan/default_iwad/sort/bind/discovery deferred.

    Replace the open "scope=public" sketch with a concrete Inter-BBS federation design: finger-based registry discovery, a trusted-peer IP allowlist, and an optional out-of-band shared secret (passed on the command line) for dynamic-IP peers. Co-op first, given lockstep latency across the internet.

    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian L@VERT to Git commit to main/sbbs/m on Saturday, June 20, 2026 14:04:00
    https://gitlab.synchro.net/main/sbbs/-/commit/464e781cad8a71b774bc9c2c
    Modified Files:
    src/doors/syncdoom/MULTIPLAYER.md README.md dstrings.c i_system.c m_config.c m_menu.c net_udp.c syncdoom.c xtrn/syncdoom/README.md lobby.js syncdoom.example.ini syncdoom_lib.js
    Log Message:
    syncdoom: persist options, in-game input-feel sliders, skill select, loopback bind, key/quit fixes

    Door (src/doors/syncdoom):
    - Config persistence: doomgeneric had Save/LoadDefaultCollection #if-ORIGCODE'd
    out, so screen size / messages / detail never saved or loaded. Re-enabled both
    (deps were all live). Skip DEFAULT_KEY entries -- the door's fixed terminal->
    Doom keycodes (>=128) don't survive the config scancode round-trip and were
    corrupting strafe/fire/use to 0. Also call M_SaveDefaults on hangup/time-limit
    exits, not just menu quit.
    - I_Quit now actually exits (its exit() was #if-ORIGCODE'd, so menu quit, hangup,
    and the waiting-room cancel fell through into the game).
    - Waiting-room Q cancel: drain stale lobby type-ahead + scan the whole read so a
    buffered Enter can't auto-launch before Q is seen.
    - In-game Options > Input "feel" sliders (KEY TAP/HOLD/TURN) for the key-up-
    synthesis graces, inline on the Options menu, snap-to-grid stepping, bars
    aligned with SCREEN SIZE. Saved per-user (input.ini in -home, root section);
    [input] ini is the house default; -kp* CLI still wins.
    - -skill plumbed through to doomgeneric (was being eaten by the -s prefix
    matcher, which clobbered the client socket and bounced the player to the lobby).
    - net_udp.c: server binds 127.0.0.1 by default (-bindaddr); off-box play is opt-
    in. Client keeps INADDR_ANY. (File reformatted to house style.)
    - Help screen: git hash lower-left, build date lower-right.
    - Quit prompts: "dos" -> "the BBS".

    Lobby (xtrn/syncdoom):
    - [net] bind (defaults to advertise); skill picker with [net]/[wadset] skill
    default; WAD-set picker fits the real terminal width (name-only fallback);
    dropped em-dash "--" separators from user-facing strings.

    Docs: MULTIPLAYER.md, READMEs, and syncdoom.example.ini updated for the bind default, skill, input-feel, and persistence behavior.

    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian L@VERT to Git commit to main/sbbs/m on Saturday, June 20, 2026 14:04:00
    https://gitlab.synchro.net/main/sbbs/-/commit/ad356b0ea4f9750c4f88a6ed
    Modified Files:
    src/doors/syncdoom/MULTIPLAYER.md mp_server.c render_text.c render_text.h syncdoom.c xtrn/syncdoom/syncdoom.example.ini
    Log Message:
    syncdoom: don't let a multiplayer match start with one player; drop in-progress games from Browse

    First real-player test: creators sat alone in the waiting room, pressed Start not realizing they should wait, and landed in a one-player "co-op". Mid-game join
    isn't possible (vanilla lockstep fixes player slots at GAMESTART, no state transfer), so make starting alone hard instead:

    - Waiting room refuses a manual Start while the controller is alone in a
    multi-player match (num_players < 2 && max_players > 1) -- beep, ignore -- and
    shows "Waiting for another player to join... auto-starts when full... (to play
    by yourself pick Play single-player)". Auto-start-when-full is unchanged; an
    explicit 1-player match (test/solo) still starts immediately.
    - Dedicated server drops its registry .ini the moment the match goes in-progress
    (and stops heartbeating it), so Browse only ever lists joinable games. Safe:
    max_games isn't registry-counted and ports use a live bind-test.
    - MULTIPLAYER.md documents the no-mid-game-join rationale + these mitigations.

    Also in this batch:
    - Default input graces moved to their slider midpoints: TAP 500->300,
    TURN 180->150 (HOLD stays 150); example.ini updated. A per-user syncdoom.ini
    [input] still overrides.
    - Ctrl-N dither toggle is now a no-op (no label, no save) where it does nothing:
    the graphics tiers, and the text color depths that never dither (16-color,
    truecolor).

    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

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