PQ2: song-specific reverb changes are ignored
|Reported by:||SF/sven3000||Owned by:||bluegr|
|Cc:||Game:||Police Quest 2|
When running Police Quest 2 on ScummVM revision 54495, Windows 7 x64, using a real Roland MT-32 connected via USB MIDI cable, certain song-specific reverb changes are not sent to the MT-32.
With the recent reverb changes, ScummVM now correctly initializes the MT-32 with the default reverb. However, it appears that certain reverb changes in songs are still not processed right.
I took a MIDI capture from PQ2 in DOSBox, it seems the reverb is initialized to reverb config 0 (00 04 05), but is then immediately changed to reverb config 2 (01 01 07) by the intro song. ScummVM now initializes to reverb 0 (which is good), but does not send the change to reverb 2 (which is bad).
The intro song is sound resource sound.001. The byte sequence that triggers the reverb change is at offset 0x69, and it's B1 50 02 00. ScummVM only recognizes sequences starting with BF 50 as a reverb change, but it appears that is not correct. ScummVM simply passes the B1 50 02 00 sequence on to the driver, which sends it to the MT-32, which does nothing with it because 0x50 is not a valid control change.
I don't know if this means that all control changes with value 0x50 should be treated as a reverb change, regardless of channel, or if there is some kind of difference between BF and B1.
Some further observations about PQ2's behaviour: after the introduction, when I then do something to cause the points fanfare to play, the reverb is first changed back to config 0, and then back to 2 (the points fanfare (sound.006) also contains the same B1 50 02 00 sequence). When other music is played (I tried the airport music) the reverb was changed back to 0; the airport music (sound.016) doesn't contain any reverb change command (no B1 50 or BF 50 or any 50).
Based on that, I might surmise that B1 50 could mean "change the reverb for this song, but change it back afterwards". But that's just an educated guess, someone more familiar with the inner workings of SCI should look at this.
In any case, B1 50 does mean a reverb change and should not be forwarded to the device, which is what ScummVM does now.
Ticket imported from: #3119713. Ticket imported from: bugs/5530.