• src/doors/syncduke/README

    From Rob Swindell (on Debian L@VERT to Git commit to main/sbbs/m on Wednesday, July 01, 2026 23:24:00
    https://gitlab.synchro.net/main/sbbs/-/commit/3a10eaab55fc0cdc3de019a3
    Modified Files:
    src/doors/syncduke/README.md syncduke.h syncduke_config.c syncduke_io.c xtrn/syncduke/syncduke.example.ini
    Log Message:
    syncduke: add UTF-8 text tiers (quadrant/sextant) + charset detection

    SyncDuke's block-character fallback tiers were hardcoded to CP437, so the Unicode quadrant/sextant tiers (already in the enum + renderer) were never offered and the block tiers never emitted native Unicode. Detect the client charset from Synchronet's <node>/terminal.ini (chars=), reachable via $SBBSNODE even under the lobby launch, and thread it into rt_config: block tiers emit native UTF-8 on a UTF-8 terminal (CP437 bytes otherwise), and the quadrant/ sextant tiers join the F4 cycle only when the client is UTF-8.

    Charset precedence, highest first: -charset utf8|cp437|auto command-line arg (for non-Synchronet DOOR32.SYS installs with no terminal.ini), syncduke.ini [video] charset, then terminal.ini auto-detect, else CP437. Mirrors SyncDOOM, which relies on the door running Translate-Character-Set-No (XTRN_BIN) so its output reaches the terminal untranslated. Documents both in the README and syncduke.example.ini.

    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, July 04, 2026 20:14:00
    https://gitlab.synchro.net/main/sbbs/-/commit/f84a13ee625db5bb5217478f
    Modified Files:
    src/doors/syncduke/README.md syncduke_input.c
    Log Message:
    syncduke: momentary crouch under native key-up; README key-up rewrite

    With real key-up events (kitty keyboard protocol or SyncTERM's evdev key reports), 'z' now flows through the same hold/release tracking as every
    other key: hold Z to duck, release to stand -- like the original. The
    byte path keeps the sticky crouch toggle (press to crouch, again to
    stand), which remains the only workable scheme without key-up.

    README: the native-key-up section now covers BOTH such paths -- SyncTERM (evdev) and kitty-protocol terminals -- instead of describing kitty only
    and wrongly claiming SyncTERM keeps the key-repeat scheme; also corrects
    the Ctrl-S stats-strip token (evdev/ or kitty/ with a nat/syn suffix)
    and documents the momentary crouch.

    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 Sunday, July 05, 2026 03:53:00
    https://gitlab.synchro.net/main/sbbs/-/commit/61a7cb32ca2a6120501186b6
    Modified Files:
    src/doors/syncduke/README.md xtrn/syncduke/lobby.js syncduke.example.ini syncduke_lib.js
    Log Message:
    syncduke: lobby picker for sysop-curated user maps & add-on GRPs

    Let players choose what to play. The sysop lists third-party content in syncduke.ini, one [map:<Name>] section per choice:

    [map:Roch]
    file = maps/Roch.map ; a user map (.map)

    [map:Duke It Out In D.C.]
    grp = addons/dukedc.grp ; an add-on GRP overlaid on the base
    con = addons/dukedc.con ; its CON script, if it ships one

    When any are configured, Solo and Create first prompt "what to play"
    (stock Duke is always choice #1); with none configured no prompt
    appears and stock launches exactly as before. Paths are absolute or
    relative to the door dir; the lobby always hands the door absolutes
    (it chdir's to the GRP dir at startup).

    The choice maps to engine arguments: file -> -map "<path>" (a user map
    plays in the engine's usermap slot, so Create skips the level picker
    and net games drop /v /l), grp/con -> /g<path> / /x<path> with /g kept
    last per the engine's usage. A multiplayer entry carries the choice as
    its [map:*] name -- shown in the game listing, and resolved back
    through the joiner's own (shared) syncduke.ini so both peers launch
    with matching content; a host whose ini lacks the name refuses cleanly
    before burning the game's one claim marker.

    Solo user maps live-validated (Roch via the picker); multiplayer-with-
    usermap and add-on GRPs wired per the engine's documented options but
    not yet exercised.

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

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows@VERT to Git commit to main/sbbs/m on Sunday, July 05, 2026 14:25:00
    https://gitlab.synchro.net/main/sbbs/-/commit/caea73577c5d996d32206cf0
    Modified Files:
    src/doors/syncduke/README.md
    Log Message:
    syncduke: README -- document third-party map / add-on GRP setup

    Expand the brief lobby-picker blurb into a proper setup section: where the files go, the [map:<Name>] syntax (file/grp/con and the engine options they
    map to), path resolution, and the picker/multiplayer behavior -- and make the base-GRP requirement unmistakable: user maps and add-on GRPs need a full (registered) GRP, NOT the shareware one. The engine keys its edition off the base GRP's CRC and the shareware edition has no user-map path -- a -map launch dies with "Internal Map ... not found in Shareware grp pack!" -- and the lobby doesn't check, so shareware installs shouldn't configure [map:*] entries at all. Also un-wedges the old blurb from between the command-line argument tables.

    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

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