[ scummvm-Patches-621821 ] SAM: ImSetTrigger implementation

noreply at sourceforge.net noreply at sourceforge.net
Fri Oct 11 13:34:25 CEST 2002


Patches item #621821, was opened at 2002-10-11 06:34
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=418822&aid=621821&group_id=37116

Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Jamieson Christian (jamieson630)
Assigned to: Nobody/Anonymous (nobody)
Summary: SAM: ImSetTrigger implementation

Initial Comment:
The included patch implements the ImSetTrigger 
function (do_command param == 0, cmd == 17) for Sam 
& Max. This is the first observed correlation between 
Sam & Max script commands and SysEx blocks in the 
S&M MIDI resources.

ImSetTrigger provides a set of parameters with which to 
invoke do_command, at the time that a marker matching 
the specified marker ID is encountered in a MIDI music 
resource that is playing. The marker is identified using 
the following SysEx event: 00 xx (F7), where "xx" is the 
marker ID.

The use of do_command (0/17) has been observed in 
two locations in Sam & Max. The first is in the opening 
credits -- the following do_command call is made after 
all the credits have finished coming up on the screen:

IMuseInternal::do_command (17, 89, 0, 1, 8, 6, 0, 0);

At the end of the credits music (sound resource #89), 
the following SysEx event is encountered:

SysEx: 00 01 F7

The last four parameters of the do_command call 
actually map to the first four parameters of the 
do_command call that should occur once the marker is 
encountered.

The other location where do_command (0/17) is 
observed is at the Gator Golf entrance. A short intro 
music is played, which is then supposed to flow into a 
much longer main song. Upon entrance to the room, the 
following do_command call is made:

IMuseInternal::do_command (17, 31, 0, 1, 8, 30, 0, 0);

At the end of the short intro music (sound resource 
#31), the following SysEx event is encountered:

SysEx: 00 01 F7

This implementation properly transitions into the main 
Gator Golf music. However, its correctness of behavior 
has not been validated with the opening credit music 
(which should flow into the "walking into the office" 
music after the credits), possibly because the office 
scene is brought up (and at least one other music 
resource activated) long before the credits music 
finishes playing. This is an issue related to the use of 
do_command (param == 1, cmd == 0), which I am still 
investigating.

Note that other music resources include SysEx 00 xx 
(F7) events (including a whole glut of them during the 
credits music that seem to use marker IDs 
corresponding to measure numbers). However, there is 
no expected exceptional behavior at these points in the 
music, and since no calls to do_command (0/17) are 
ever made that relate to these markers, no action is 
taken by this implementation. I believe this is correct: for 
most music, the SysEx 00 01 (F7) seems to appear as 
a general-purpose end-of-song marker for most songs.

Regarding the implementation of ImSetTrigger, I have 
deviated slightly from the implementation notes that 
Mike provided to Ender in his disassembly efforts for the 
Sam & Max IMuse. In those notes, the 16 possible 
triggers are scoped at the IMuseInternal level, and 
include the player ID they are related to. In my 
implementation, I have put the trigger information into 
each of the players (16 max players, BTW) directly. This 
may not be the right thing to do; if certain calls to 
do_command (0/17) involve sound resources that have 
not started playing yet, this implementation would fail to 
set up the trigger. Maybe somebody more familiar with 
the scope of Mike's work could tell me if I'm taking his 
interpretation of the IMuse opcodes too literally.

Finally, the implementation of ImCheckTrigger and 
ImClearTrigger should follow easily from this 
implementation. I will submit a separate patch with 
those implementations, once this patch has been 
validated.

NOTE: Part of patch #620994 (do_command param == 
1, cmd == 1) is included in this patch, just because the 
outstanding mods I have on imuse.cpp are starting to 
get extensive and intermingled. Sorry....

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=418822&aid=621821&group_id=37116




More information about the Scummvm-tracker mailing list