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