[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,2.78,2.79 imuse_player.cpp,2.21,2.22 resource.cpp,1.125,1.126 scummvm.cpp,2.331,2.332

Jamieson Christian jamieson630 at users.sourceforge.net
Thu Aug 14 07:06:41 CEST 2003


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

Modified Files:
	imuse.cpp imuse_player.cpp resource.cpp scummvm.cpp 
Log Message:
Added support for Roland MT-32 music tracks
in monkeyvga/ega. Tested in monkeyvga, but
not in monkeyega yet. There are still wrinkles
to work out, but the parser for the new format
is in and hooked up.

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.78
retrieving revision 2.79
diff -u -d -r2.78 -r2.79
--- imuse.cpp	12 Aug 2003 07:32:42 -0000	2.78
+++ imuse.cpp	14 Aug 2003 08:26:59 -0000	2.79
@@ -85,6 +85,10 @@
 		return NULL;
 	}
 
+	// Check for old-style headers first, like 'RO'
+	if (ptr[4] == 'R' && ptr[5] == 'O')
+		return ptr + 4;
+
 	ptr += 8;
 	size = READ_BE_UINT32(ptr);
 	ptr += 4;
@@ -129,6 +133,10 @@
 		return false;
 	}
 
+	// Check old style headers, like 'RO'
+	if (ptr[4] == 'R' && ptr[5] == 'O')
+		return true;
+
 	return false;
 }
 
@@ -160,6 +168,10 @@
 		return false;
 	}
 
+	// Check old style headers, like 'RO'
+	if (ptr[4] == 'R' && ptr[5] == 'O')
+		return true;
+
 	return false;
 }
 
@@ -189,7 +201,7 @@
 
 bool IMuseInternal::startSound(int sound) {
 	Player *player;
-	void *mdhd;
+	void *ptr;
 
 	// Do not start a sound if it is already set to
 	// start on an ImTrigger event. This fixes carnival
@@ -204,24 +216,12 @@
 			return false;
 	}
 
-	// Not sure exactly what the old code was doing,
-	// but we'll go ahead and do a similar check.
-	mdhd = findStartOfSound(sound);
-	if (!mdhd) {
+	ptr = findStartOfSound(sound);
+	if (!ptr) {
 		debug(2, "IMuseInternal::startSound(): Couldn't find sound %d!", sound);
 		return false;
 	}
-/*
-	mdhd = findTag(sound, MDHD_TAG, 0);
-	if (!mdhd) {
-		mdhd = findTag(sound, MDPG_TAG, 0);
-		if (!mdhd) {
-			debug(2, "SE::startSound failed: Couldn't find sound %d", sound);
-			return false;
-		}
-	}
-*/
-
+	
 	// Check which MIDI driver this track should use.
 	// If it's NULL, it ain't something we can play.
 	MidiDriver *driver = getBestMidiDriver(sound);

Index: imuse_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_player.cpp,v
retrieving revision 2.21
retrieving revision 2.22
diff -u -d -r2.21 -r2.22
--- imuse_player.cpp	13 Aug 2003 22:45:22 -0000	2.21
+++ imuse_player.cpp	14 Aug 2003 08:26:59 -0000	2.22
@@ -38,6 +38,8 @@
 //
 ////////////////////////////////////////
 
+extern MidiParser *MidiParser_createRO();
+
 static uint read_word(byte *a) {
 	return (a[0] << 8) + a[1];
 }
@@ -84,13 +86,13 @@
 }
 
 bool Player::startSound(int sound, MidiDriver *midi) {
-	void *mdhd;
+	void *ptr;
 	int i;
 
 	// Not sure what the old code was doing,
 	// but we'll go ahead and do a similar check.
-	mdhd = _se->findStartOfSound(sound);
-	if (!mdhd) {
+	ptr = _se->findStartOfSound(sound);
+	if (!ptr) {
 			warning("Player::startSound(): Couldn't find start of sound %d!", sound);
 			return false;
 	}
@@ -177,10 +179,17 @@
 	if (_parser)
 		delete _parser;
 
-	if (!memcmp(ptr, "FORM", 4))
+	if (!memcmp (ptr, "RO", 2)) {
+		// Old style 'RO' resource
+		_parser = MidiParser_createRO();
+	} else if (!memcmp(ptr, "FORM", 4)) {
+		// Humongous Games XMIDI resource
 		_parser = MidiParser::createParser_XMIDI();
-	else
+	} else {
+		// SCUMM SMF resource
 		_parser = MidiParser::createParser_SMF();
+	}
+
 	_parser->setMidiDriver(this);
 	_parser->property(MidiParser::mpSmartJump, 1);
 	_parser->loadMusic(ptr, 0);

Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.125
retrieving revision 1.126
diff -u -d -r1.125 -r1.126
--- resource.cpp	14 Aug 2003 06:28:54 -0000	1.125
+++ resource.cpp	14 Aug 2003 08:26:59 -0000	1.126
@@ -1451,7 +1451,7 @@
 		      (char) (tag & 0xff),
 		      (char) ((tag >> 8) & 0xff), size);
 		
-		if (tag == 0x5247) { // RO
+		if (tag == 0x4F52) { // RO
 			ro_size = size;
 			ro_offs = _fileHandle.pos();
 		} else {
@@ -1484,18 +1484,9 @@
 		}
 	}
 
-	// AD resources have a header, instrument definitions and one MIDI track.
-	// We build an 'ADL ' resource from that:
-	//   8 bytes resource header
-	//  16 bytes MDhd header
-	//  14 bytes MThd header
-	//   8 bytes MTrk header
-	//   7 bytes MIDI tempo sysex
-	//     + some default instruments
-
 	if (ro_offs != 0) {
-		_fileHandle.seek(ro_offs - 6, SEEK_SET);
-		_fileHandle.read(createResource(type, idx, ro_size + 6), ro_size + 6);
+		_fileHandle.seek(ro_offs - 2, SEEK_SET);
+		_fileHandle.read(createResource(type, idx, ro_size + 2), ro_size + 2);
 		return 1;
 	} else if (((_midiDriver == MD_PCJR) || (_midiDriver == MD_PCSPK)) && wa_offs != 0) {
 		if (_features & GF_OLD_BUNDLE) {
@@ -1507,6 +1498,14 @@
 		}
 		return 1;
 	} else if (ad_offs != 0) {
+		// AD resources have a header, instrument definitions and one MIDI track.
+		// We build an 'ADL ' resource from that:
+		//   8 bytes resource header
+		//  16 bytes MDhd header
+		//  14 bytes MThd header
+		//   8 bytes MTrk header
+		//   7 bytes MIDI tempo sysex
+		//     + some default instruments
 		byte *ptr;
 		if (_features & GF_OLD_BUNDLE) {
 			ptr = (byte *) calloc(ad_size - 4, 1);

Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scummvm.cpp,v
retrieving revision 2.331
retrieving revision 2.332
diff -u -d -r2.331 -r2.332
--- scummvm.cpp	14 Aug 2003 02:28:19 -0000	2.331
+++ scummvm.cpp	14 Aug 2003 08:26:59 -0000	2.332
@@ -92,7 +92,7 @@
 	 GF_SMALL_HEADER | GF_USE_KEY | GF_16COLOR, "000.LFL"},
 
 	/* Scumm version 5 */
-	{"monkeyVGA", "Monkey Island 1 (256 color Floppy version)", GID_MONKEY_VGA,  4, VersionSettings::ADLIB_ALWAYS,
+	{"monkeyVGA", "Monkey Island 1 (256 color Floppy version)", GID_MONKEY_VGA,  4, VersionSettings::ADLIB_PREFERRED,
 	 GF_SMALL_HEADER | GF_USE_KEY, "000.LFL"},
 	{"loomcd", "Loom (256 color CD version)", GID_LOOM256, 4, VersionSettings::ADLIB_ALWAYS,
 	 GF_SMALL_HEADER | GF_USE_KEY | GF_AUDIOTRACKS, "000.LFL"},
@@ -1049,7 +1049,12 @@
 	} else {
 		VAR(VAR_CURRENTDRIVE) = 0;
 		VAR(VAR_FIXEDDISK) = true;
-		VAR(VAR_SOUNDCARD) = (_midiDriver == MD_PCSPK || _midiDriver == MD_PCJR) ? 0 : 3;
+		switch (_midiDriver) {
+		case MD_ADLIB: VAR(VAR_SOUNDCARD) = 3; break;
+		case MD_PCSPK:
+		case MD_PCJR:  VAR(VAR_SOUNDCARD) = 0; break;
+		default:       VAR(VAR_SOUNDCARD) = 4;
+		}
 		VAR(VAR_VIDEOMODE) = 0x13;
 		VAR(VAR_HEAPSPACE) = 1400;
 		VAR(VAR_MOUSEPRESENT) = true; // FIXME - used to be 0, but that seems odd?!?





More information about the Scummvm-git-logs mailing list