• docs/door_graphics_audio_matrix.md xtrn/zmachine/SYSOP.md jszm.js xtrn

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Jul 12 05:11:38 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/57b6c5f420bddc825ea38a82
    Modified Files:
    docs/door_graphics_audio_matrix.md xtrn/zmachine/SYSOP.md jszm.js xtrn/zmachine/test/zsound.js xtrn/zmachine/zsound.js
    Log Message:
    zmachine: run @sound_effect completion routines (Sherlock sound chains)

    The v5+ completion-routine operand, previously dropped, now runs
    IMMEDIATELY after a non-looping sample start -- the classic interpreter shortcut -- and any sound the routine starts is flagged "chained" so
    zsound.js queues it onto the same channel BEHIND the current sound
    instead of voice-stealing it. The channel FIFO then plays the chain in
    order client-side; as Deuce points out, no playback-end notification is
    needed for this (and the audio APCs have always had A;Update/A;Wait/
    CSI =7;<ch> n anyway, contrary to what the matrix doc implied).

    This is shaped by what Sherlock (the only routine-using game) actually
    does, per disassembly: every sound start installs a default completion
    routine that resumes the interrupted ambient loop (the hansom-cab
    clip-clop), and the Big Ben chimes recurse through a routine that plays
    one bong per remaining hour. Both reduce to same-channel queueing.
    Looping starts (repeats 255) never finish, so they fire no callback --
    which is also what stops the default resume-routine recursing forever.

    The routine's game-state side effects land at queue time rather than at
    true playback end; for the flag-clears and chime countdowns these games
    do, that's harmless (noted in SYSOP.md and the matrix doc).

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

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