• src/doors/syncduke/syncduke_events.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Saturday, July 04, 2026 00:42:13
    https://gitlab.synchro.net/main/sbbs/-/commit/e3cfaa9eeed88c864982fa85
    Modified Files:
    src/doors/syncduke/syncduke_events.c
    Log Message:
    syncduke: log level completions reliably (detect the MODE_EOL edge)

    Clearing a level wasn't logged to events.jsonl, so it never showed in the
    lobby feed. The old detector watched for the level NUMBER changing while in_game, but finishing a level sets gm=MODE_EOL (the bonus screen), which
    makes ev_real_game() false -> in_game drops before the next level loads, and the whole clear->bonus->next transition read as a fresh "start". Detect the clear at the MODE_EOL edge instead -- the reliable "level finished" signal (same idea as SyncDOOM's GS_LEVEL->intermission edge) -- and log it with the real elapsed time (the few that used to slip through logged secs=0, timed at level entry).

    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 Linux)@VERT to Git commit to main/sbbs/master on Saturday, July 04, 2026 14:32:37
    https://gitlab.synchro.net/main/sbbs/-/commit/3c678a3299e53cb51aceecf2
    Modified Files:
    src/doors/syncduke/syncduke_events.c
    Log Message:
    syncduke: log the engine's real level time, not the door's wall clock

    The level-completion event timed levels with ev_secs() -- a door-side
    wall clock started at the door's level entry -- so loading a savegame
    mid-level over-reported the time (the door timer kept running from a
    level entry the reload didn't reset). Report the engine's own per-level
    play time instead: ps[myconnectindex].player_par / 26, the "Your Time"
    value from the bonus screen. It counts game tics and lives in the
    player struct, which saveplayer/loadplayer block-serialize, so it is
    written into savegames and resumes on load. Read it at the MODE_EOL
    edge, before the next level's resetplayerstats() zeroes it.

    SyncDOOM already reported leveltime/35 (its analogous engine counter),
    so this brings the two doors into agreement.

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

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