• src/doors/syncduke/Game/src/game.c src/doors/syncduke/syncduke_config.

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Friday, June 26, 2026 22:40:09
    https://gitlab.synchro.net/main/sbbs/-/commit/705a840fe95017643a65bdfc
    Modified Files:
    src/doors/syncduke/Game/src/game.c src/doors/syncduke/syncduke_config.c Log Message:
    syncduke: fix two Windows door startup failures (setvbuf, GRP dir)

    Both killed the Win32 door at launch -- it died straight back to the BBS
    after the "Loading..." splash; found while bringing up the MSVC build.

    1. syncduke_config.c: setvbuf(stdout, NULL, _IOLBF, 0) (used to route the
    engine's diagnostics to the BBS log) is fine on glibc, but MSVC's CRT
    rejects _IOLBF with size 0 (it requires size >= 2) -> invalid-parameter
    fast-fail (c0000409), confirmed from the WER minidump. Use _IONBF on
    Windows (unbuffered, valid with size 0, flushes immediately); *nix keeps
    _IOLBF.

    2. Game/src/game.c: the Windows findGRPToUse() never consulted
    syncduke_grpdir (only the *nix branch did), so with -home (CWD = the
    per-user dir) it scanned the wrong directory and exited with
    "Can't find 'duke3d*.grp'". Honor syncduke_grpdir first, mirroring the
    *nix branch, so the GRP opens by absolute path regardless of CWD.

    Verified on Windows via an inherited-socket harness matching the live launch (-s<socket> -home <userdir>): loads DUKE3D.GRP by absolute path and renders (sixel and JXL tiers).

    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 Saturday, July 04, 2026 20:14:29
    https://gitlab.synchro.net/main/sbbs/-/commit/0225557a182a64fee49da574
    Modified Files:
    src/doors/syncduke/Game/src/game.c src/doors/syncduke/syncduke_config.c xtrn/syncduke/syncduke.example.ini
    Log Message:
    syncduke: play Duke's title attract demos only when enabled

    The Atomic / full 1.3D-1.5 GRPs ship the DEMO*.DMO lumps (the shareware
    GRP does not), so an idle title screen would start streaming demo
    playback at a remote user who just picked single-player -- a demo's
    worth of frames they didn't ask for. Skip the attract loop by default; syncduke.ini [game] attract_demos = true restores the classic behavior.

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

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