[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,1.85,1.86

Jamieson Christian jamieson630 at users.sourceforge.net
Thu Nov 21 14:08:07 CET 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv19320/scummvm/scumm

Modified Files:
	imuse.cpp 
Log Message:
Fixed Adlib instruments not getting initialized in certain cases.

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- imuse.cpp	21 Nov 2002 19:05:35 -0000	1.85
+++ imuse.cpp	21 Nov 2002 22:07:40 -0000	1.86
@@ -666,6 +666,7 @@
 	MidiDriver *_md;
 	MidiChannelGM _midi_channels[16];
 
+	Instrument _part_instr[32]; // Adlib custom instruments
 	Instrument _glob_instr[32]; // Adlib custom instruments
 
 	byte _midi_program_last[16];
@@ -5045,11 +5046,9 @@
 
 void IMuseGM::part_set_instrument (Part *part, Instrument *instr)
 {
-	if (!part->_mc)
-		update_pris();
-	if (!part->_mc)
-		return;
-	_md->sysEx_customInstrument (part->_mc->gm()->_chan, 'ADL ', (byte *)instr);
+	Instrument *i = &_part_instr[part->_slot];
+	memcpy(i, instr, sizeof(Instrument));
+	part->changed (pcProgram);
 }
 
 void IMuseGM::set_instrument(uint slot, byte *data)
@@ -5101,18 +5100,26 @@
 	if (what & pcEffectLevel)
 		midiEffectLevel(mc->_chan, part->_effect_level);
 
-	if (what & pcProgram && part->_program < 128) {
+	if (what & pcProgram) {
 		if (part->_player->_isGM) {
-			_midi_program_last [part->_chan] = part->_program;
-			if (part->_bank) {
-				midiControl0(mc->_chan, part->_bank);
-				midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
-				midiControl0(mc->_chan, 0);
-			} else {
-				midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
+			if (part->_program < 128) {
+				_midi_program_last [part->_chan] = part->_program;
+				if (part->_bank) {
+					midiControl0(mc->_chan, part->_bank);
+					midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
+					midiControl0(mc->_chan, 0);
+				} else {
+					midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
+				}
+			}
+		} else {
+			debug (0, "Setting instrument (%d)", (int) _part_instr [part->_slot].oplvl_1);
+			if (_part_instr [part->_slot].oplvl_1 != 0) {
+				_md->sysEx_customInstrument (mc->_chan, 'ADL ', (byte *) (&_part_instr [part->_slot]));
+			} else if (part->_program < 32) {
+				memcpy (&_part_instr [part->_slot], &_glob_instr[part->_program], sizeof (Instrument));
+				_md->sysEx_customInstrument (mc->_chan, 'ADL ', (byte *) (&_part_instr [part->_slot]));
 			}
-		} else if (part->_program < 32) {
-			part_set_instrument(part, &_glob_instr[part->_program]);
 		}
 	}
 





More information about the Scummvm-git-logs mailing list