[Scummvm-cvs-logs] CVS: scummvm/scumm player_v3a.cpp,1.6,1.7 player_v3a.h,1.5,1.6 resource.cpp,1.149,1.150

Max Horn fingolfin at users.sourceforge.net
Mon Sep 8 20:20:55 CEST 2003


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

Modified Files:
	player_v3a.cpp player_v3a.h resource.cpp 
Log Message:
some cleanup

Index: player_v3a.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/player_v3a.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- player_v3a.cpp	8 Sep 2003 01:42:23 -0000	1.6
+++ player_v3a.cpp	8 Sep 2003 11:29:57 -0000	1.7
@@ -38,12 +38,6 @@
 //
 ////////////////////////////////////////
 
-static void playerv3a_handler (void *engine) {
-	Scumm *scumm = (Scumm *)engine;
-	if (scumm && scumm->_playerV3A)
-		scumm->_playerV3A->playMusic();
-}
-
 Player_V3A::Player_V3A(Scumm *scumm) {
 	int i;
 	_scumm = scumm;
@@ -62,13 +56,13 @@
 
 	_maxvol = 255;
 
-	scumm->_timer->installProcedure(playerv3a_handler,16666);
+	scumm->_timer->installProcedure(timerHandler, 16666);
 
 	_isinit = false;
 }
 
 Player_V3A::~Player_V3A() {
-	_scumm->_timer->releaseProcedure(playerv3a_handler);
+	_scumm->_timer->releaseProcedure(timerHandler);
 	if (!_isinit)
 		return;
 	for (int i = 0; _wavetable[i] != NULL; i++) {
@@ -152,66 +146,51 @@
 	byte *data = _scumm->getResourceAddress(rtSound, nr);
 	assert(data);
 
+	if (_scumm->_gameId != GID_INDY3 && _scumm->_gameId != GID_LOOM)
+		error("player_v3a - unknown game!");
+
 	if (!_isinit) {
 		int i;
+		unsigned char *ptr;
+		int offset = 4;
+		int numInstruments;
+
 		if (_scumm->_gameId == GID_INDY3) {
-			unsigned char *ptr = _scumm->getResourceAddress(rtSound,83);
-			int offset = 4;
-			_wavetable = (instData **)malloc(13 * sizeof(void *));
-			for (i = 0; i < 12; i++) {
-				_wavetable[i] = (instData *)malloc(sizeof(instData));
-				for (int j = 0; j < 6; j++) {
-					int off, len;
-					off = READ_BE_UINT16(ptr + offset + 0);
-					_wavetable[i]->_ilen[j] = len = READ_BE_UINT16(ptr + offset + 2);
-					if (len) {
-						_wavetable[i]->_idat[j] = (char *)malloc(len);
-						memcpy(_wavetable[i]->_idat[j],ptr + off,len);
-					} else	_wavetable[i]->_idat[j] = NULL;
-					off = READ_BE_UINT16(ptr + offset + 4);
-					_wavetable[i]->_llen[j] = len = READ_BE_UINT16(ptr + offset + 6);
-					if (len) {
-						_wavetable[i]->_ldat[j] = (char *)malloc(len);
-						memcpy(_wavetable[i]->_ldat[j],ptr + off,len);
-					} else	_wavetable[i]->_ldat[j] = NULL;
-					_wavetable[i]->_oct[j] = READ_BE_UINT16(ptr + offset + 8);
-					offset += 10;
-				}
+			ptr = _scumm->getResourceAddress(rtSound, 83);
+			numInstruments = 12;
+		} else {
+			ptr = _scumm->getResourceAddress(rtSound, 79);
+			numInstruments = 9;
+		}
+		_wavetable = (instData **)malloc((numInstruments + 1) * sizeof(void *));
+		for (i = 0; i < numInstruments; i++) {
+			_wavetable[i] = (instData *)malloc(sizeof(instData));
+			for (int j = 0; j < 6; j++) {
+				int off, len;
+				off = READ_BE_UINT16(ptr + offset + 0);
+				_wavetable[i]->_ilen[j] = len = READ_BE_UINT16(ptr + offset + 2);
+				if (len) {
+					_wavetable[i]->_idat[j] = (char *)malloc(len);
+					memcpy(_wavetable[i]->_idat[j],ptr + off,len);
+				} else	_wavetable[i]->_idat[j] = NULL;
+				off = READ_BE_UINT16(ptr + offset + 4);
+				_wavetable[i]->_llen[j] = len = READ_BE_UINT16(ptr + offset + 6);
+				if (len) {
+					_wavetable[i]->_ldat[j] = (char *)malloc(len);
+					memcpy(_wavetable[i]->_ldat[j],ptr + off,len);
+				} else	_wavetable[i]->_ldat[j] = NULL;
+				_wavetable[i]->_oct[j] = READ_BE_UINT16(ptr + offset + 8);
+				offset += 10;
+			}
+			if (_scumm->_gameId == GID_INDY3) {
 				_wavetable[i]->_pitadjust = 0;
 				offset += 2;
-			}
-			_wavetable[i] = NULL;
-		}
-		else if (_scumm->_gameId == GID_LOOM) {
-			unsigned char *ptr = _scumm->getResourceAddress(rtSound,79);
-			int offset = 4;
-			_wavetable = (instData **)malloc(10 * sizeof(void *));
-			for (i = 0; i < 9; i++) {
-				_wavetable[i] = (instData *)malloc(sizeof(instData));
-				for (int j = 0; j < 6; j++) {
-					int off, len;
-					off = READ_BE_UINT16(ptr + offset + 0);
-					_wavetable[i]->_ilen[j] = len = READ_BE_UINT16(ptr + offset + 2);
-					if (len) {
-						_wavetable[i]->_idat[j] = (char *)malloc(len);
-						memcpy(_wavetable[i]->_idat[j],ptr + off,len);
-					} else	_wavetable[i]->_idat[j] = NULL;
-					off = READ_BE_UINT16(ptr + offset + 4);
-					_wavetable[i]->_llen[j] = len = READ_BE_UINT16(ptr + offset + 6);
-					if (len) {
-						_wavetable[i]->_ldat[j] = (char *)malloc(len);
-						memcpy(_wavetable[i]->_ldat[j],ptr + off,len);
-					} else	_wavetable[i]->_ldat[j] = NULL;
-					_wavetable[i]->_oct[j] = READ_BE_UINT16(ptr + offset + 8);
-					offset += 10;
-				}
+			} else {
 				_wavetable[i]->_pitadjust = READ_BE_UINT16(ptr + offset + 2);
 				offset += 4;
 			}
-			_wavetable[i] = NULL;
 		}
-		else
-			error("player_v3a - unknown game!");
+		_wavetable[i] = NULL;
 		_isinit = true;
 	}
 	
@@ -247,6 +226,12 @@
 			playSound(nr, sound, size, rate, vol, tl, false);
 		}
 	}
+}
+
+void Player_V3A::timerHandler(void *engine) {
+	Scumm *scumm = (Scumm *)engine;
+	if (scumm && scumm->_playerV3A)
+		scumm->_playerV3A->playMusic();
 }
 
 void Player_V3A::playMusic() {

Index: player_v3a.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/player_v3a.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- player_v3a.h	8 Sep 2003 01:42:23 -0000	1.5
+++ player_v3a.h	8 Sep 2003 11:29:57 -0000	1.6
@@ -44,7 +44,6 @@
 	virtual void stopAllSounds();
 	virtual int  getMusicTimer() const;
 
-	virtual void playMusic();
 	virtual int  getSoundStatus(int nr) const;
 
 protected:
@@ -75,6 +74,8 @@
 	} **_wavetable;
 
 	void playSound (int nr, char *data, int size, int rate, int vol, int tl, bool looped, int loopStart = 0, int loopEnd = 0);
+	void playMusic();
+	static void timerHandler(void *engine);
 };
 
 #endif

Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -d -r1.149 -r1.150
--- resource.cpp	7 Sep 2003 17:14:56 -0000	1.149
+++ resource.cpp	8 Sep 2003 11:29:57 -0000	1.150
@@ -1026,22 +1026,21 @@
 	byte num_instr;
 	byte *channel, *instr, *track;
 	byte *tracks[3];
-	int ppqn;
+	// We will ignore the PPQN in the original resource, because
+	// it's invalid anyway. We use a constant PPQN of 480.
+    const int ppqn = 480;
 	int delay, delay2, olddelay;
 	int i, ch;
 	int total_size = 8 + 16 + 14 + 8 + 7 + 8*sizeof(ADLIB_INSTR_MIDI_HACK) + size;
 	total_size += 24;	// Up to 24 additional bytes are needed for the jump sysex
 
 	ptr = createResource(type, idx, total_size);
-	// We will ignore the PPQN in the original resource, because
-	// it's invalid anyway. We use a constant PPQN of 480.
-    ppqn = 480;
 
 	src_ptr += 2;
 	size -= 2;
 
 	if (*src_ptr == 0x80) {
-		// 0x80: is music; otherwise not.
+		// 0x80 marks a music resource. Otherwise it's a SFX
 		memcpy(ptr, "ADL ", 4); ptr += 4;
 		uint32 dw = READ_BE_UINT32(&total_size);
 		memcpy(ptr, &dw, 4); ptr += 4;
@@ -1087,11 +1086,12 @@
 		// Unfortunate LOOM and INDY3 have different interpretation
 		// of the ticks value.
 		if (_gameId == GID_INDY3) {
-			dw = 1000000 * 256 / 473 * ppqn / 2 / ticks;
+			// Note: since we fix ppqn at 480, ppqn/473 is almost 1
+			dw = 500000 * 256 * ppqn / 473 / ticks;
 		} else if (_gameId == GID_LOOM) {
-			dw = 1000000 * ppqn / 4 / 2 / ticks;
+			dw = 500000 * ppqn / 4 / ticks;
 		} else {
-			dw = (500000 * 256) / ticks;
+			dw = 500000 * 256 / ticks;
 		}
 		debug(4, "  ticks = %d, speed = %ld", ticks, dw);
 			
@@ -1295,7 +1295,7 @@
 			break;
 
 		src_ptr = tracks[ch];
-		chunk_type = *(src_ptr);
+		chunk_type = *src_ptr;
 
 
 		if (current_note[ch] >= 0) {
@@ -1379,7 +1379,6 @@
 
 			delay = mintime - curtime;
 			curtime = mintime;
-
 
 			
 			{





More information about the Scummvm-git-logs mailing list