#8086 closed patch
SysEx parsing for Sam & Max
Reported by: | SF/jamieson630 | Owned by: | SF/ender |
---|---|---|---|
Priority: | normal | Component: | Engine: SCUMM |
Version: | Keywords: | ||
Cc: | Game: | Sam and Max |
Description
The included patch adds support for MIDI SysEx code 1, which is used extensively (99% of SysEx usage) in Sam & Max.
As far as I can tell, SysEx code 1 is the Sam & Max equivalent to maybe_jump. This implementation properly handles unconditional jumps (cmd = 0), as well as track jumps (SysEx code 0, also used for vastly different purposes by Monkey2). I haven't observed any case where a cmd-based jump takes place, but that may be because some scripting hooks are not in place yet.
(That said, it's also entirely possible that SysEx code 0 is doubling as a marker, because it DOES show up at the beginning of every measure, in music that is supposed to seamlessly transition to something else based on the user's actions. Much like the markers in Monkey2. This is something to look into.)
Although I'm not sure the parser implementation is complete (or entirely correct for situations I haven't observed yet), I'm putting this out here because it DOES fix (1) the problem of no music looping in Sam & Max, and (2) the large period of silence that occurs before each new song starts playing.
Ticket imported from: #620944. Ticket imported from: patches/191.
Attachments (2)
Change History (8)
by , 22 years ago
Attachment: | imuse.samnmax.diff added |
---|
comment:1 by , 22 years ago
Owner: | set to |
---|
comment:2 by , 22 years ago
While it does seem like a massive improvement on what we already have.. it
has a fatal bug (at least during adlib emulation)...
Play through Sam and Max, just let the whole intro sequence run. If you
don't escape out of it, the previous tracks will continue playing! This results
in a very very nasty mess of sound.
Once this is fixed, I'll apply it :)
BTW, could Sam and Max imuse command 15 (IMuseInternal::do_command, param == 0) have something to do with these sysex markers? It seems to be used to control transitions, but I never worked out exactly WHAT it's supposed to jump to..
comment:3 by , 22 years ago
Ender, the bug you mentioned is consistent in any sound system, not just Adlib.
I've posted a revised patch. The SysEx code 0 is not right at all, so I removed it, but the code 1 implementation for maybe_jump seems fine. I'll do SysEx code 0 as a separate patch, once I can figure out how in the world it's being used. Right now there's just a note in the patch about SysEx code 0, that's all.
I'm looking into do_command calls to see how script functions might relate to S&M's use of SysEx command 0. Separate patch for any discoveries there.
comment:5 by , 22 years ago
Status: | new → closed |
---|
comment:6 by , 6 years ago
Component: | → Engine: SCUMM |
---|---|
Game: | → Sam and Max |
Patch against 1.45 (October 9)