[Scummvm-cvs-logs] CVS: scummvm/scumm script_v6.cpp,1.358,1.359 script_v7he.cpp,2.30,2.31 sound.cpp,1.348,1.349 sound.h,1.67,1.68

Travis Howell kirben at users.sourceforge.net
Wed Jul 14 00:30:00 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2329/scumm

Modified Files:
	script_v6.cpp script_v7he.cpp sound.cpp sound.h 
Log Message:

Add support for sound offsets in HE games.


Index: script_v6.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v6.cpp,v
retrieving revision 1.358
retrieving revision 1.359
diff -u -d -r1.358 -r1.359
--- script_v6.cpp	12 Jul 2004 13:27:59 -0000	1.358
+++ script_v6.cpp	14 Jul 2004 07:29:09 -0000	1.359
@@ -1024,19 +1024,19 @@
 }
 
 void ScummEngine_v6::o6_startSound() {
+	int offset = 0;
+	int snd = pop();
+
+	// In Fatty Bear's Birthday Surprise the piano uses offsets 1 - 23 to
+	// indicate which note to play, but only when using the standard piano
+	// sound. See also o6_soundOps()
+	if ((_features & GF_HUMONGOUS) && (_gameId != GID_PUTTDEMO))
+		offset = pop();
+		
 	if (_features & GF_DIGI_IMUSE)
-		_imuseDigital->startSfx(pop(), 64);
-	else {
-		if ((_features & GF_HUMONGOUS) && (_gameId != GID_PUTTDEMO)) {
-			// Seems to range between 952 - 9000
-			// In Fatty Bear's Birthday Surprise the piano uses offsets 1 - 23 to
-			// indicate which note to play, but only when using the standard piano
-			// sound. See also o6_soundOps().
-			int offset = pop();
-			debug(2, "o6_startSound: offset %d", offset);
-		}
-		_sound->addSoundToQueue(pop());
-	}
+		_imuseDigital->startSfx(snd, 64);
+	else 
+		_sound->addSoundToQueue(snd, offset);
 }
 
 void ScummEngine_v6::o6_stopSound() {
@@ -1046,8 +1046,8 @@
 void ScummEngine_v6::o6_startMusic() {
 	if (_features & GF_DIGI_IMUSE)
 		error("o6_startMusic() It shouldn't be called here for imuse digital");
-	else
-		_sound->addSoundToQueue(pop());
+
+	_sound->addSoundToQueue(pop());
 }
 
 void ScummEngine_v6::o6_stopObjectScript() {

Index: script_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v7he.cpp,v
retrieving revision 2.30
retrieving revision 2.31
diff -u -d -r2.30 -r2.31
--- script_v7he.cpp	14 Jul 2004 05:53:37 -0000	2.30
+++ script_v7he.cpp	14 Jul 2004 07:29:09 -0000	2.31
@@ -686,7 +686,7 @@
 
 	case 255:
 		// _sound->addSoundToQueue(_heSndSoundId, _heSndOffset, _heSndTimer, _heSndLoop);
-		_sound->addSoundToQueue(_heSndSoundId);
+		_sound->addSoundToQueue(_heSndSoundId, _heSndOffset);
 		debug(2, "o7_startSound stub (%d, %d, %d, %d)", _heSndSoundId, _heSndOffset, _heSndTimer, _heSndLoop);
 		_heSndLoop = 0;
 		break;

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.348
retrieving revision 1.349
diff -u -d -r1.348 -r1.349
--- sound.cpp	14 Jul 2004 04:54:06 -0000	1.348
+++ sound.cpp	14 Jul 2004 07:29:09 -0000	1.349
@@ -75,7 +75,8 @@
 	_sfxMode(0) {
 	
 	memset(_soundQue, 0, sizeof(_soundQue));
-	memset(_soundQue2, 0, sizeof(_soundQue2));
+	memset(_soundQue2Sound, 0, sizeof(_soundQue2Sound));
+	memset(_soundQue2Offset, 0, sizeof(_soundQue2Offset));
 	memset(_mouthSyncTimes, 0, sizeof(_mouthSyncTimes));
 }
 
@@ -84,29 +85,31 @@
 	delete _sfxFile;
 }
 
-void Sound::addSoundToQueue(int sound) {
+void Sound::addSoundToQueue(int sound, int offset) {
 	_vm->VAR(_vm->VAR_LAST_SOUND) = sound;
 	// Music resources are in separate file
 	if (!((_vm->_heversion >= 70) && sound >= 4000))
 		_vm->ensureResourceLoaded(rtSound, sound);
-	addSoundToQueue2(sound);
+	addSoundToQueue2(sound, offset);
 }
 
-void Sound::addSoundToQueue2(int sound) {
+void Sound::addSoundToQueue2(int sound, int offset) {
 	if ((_vm->_features & GF_HUMONGOUS) && _soundQue2Pos) {
 		int i = _soundQue2Pos;
 		while (i--) {
-			if (_soundQue2[i] == sound)
+			if (_soundQue2Sound[i] == sound)
 				return;
 		}
 	}
 
-	assert(_soundQue2Pos < ARRAYSIZE(_soundQue2));
-	_soundQue2[_soundQue2Pos++] = sound;
+	assert(_soundQue2Pos < ARRAYSIZE(_soundQue2Sound));
+	_soundQue2Sound[_soundQue2Pos] = sound;
+	_soundQue2Offset[_soundQue2Pos] = offset;
+	_soundQue2Pos++;
 }
 
 void Sound::processSoundQues() {
-	int i = 0, d, num;
+	int i = 0, num, offset, snd;
 	int data[16];
 
 	processSfxQueues();
@@ -115,9 +118,11 @@
 		return;
 
 	while (_soundQue2Pos) {
-		d = _soundQue2[--_soundQue2Pos];
-		if (d)
-			playSound(d);
+		_soundQue2Pos--;
+		snd = _soundQue2Sound[_soundQue2Pos];
+		offset = _soundQue2Offset[_soundQue2Pos];
+		if (snd)
+			playSound(snd, offset);
 	}
 
 	while (i < _soundQuePos) {
@@ -148,7 +153,7 @@
 	_overrideFreq = freq;
 }
 
-void Sound::playSound(int soundID) {
+void Sound::playSound(int soundID, int offset) {
 	byte *ptr;
 	char *sound;
 	int size = -1;
@@ -235,7 +240,7 @@
 		if (READ_UINT32(ptr) != MKID('SDAT'))
 			return;	// abort
 
-		size = READ_BE_UINT32(ptr+4) - 8;
+		size = READ_BE_UINT32(ptr+4) - offset - 8;
 		if (_overrideFreq) {
 			// Used by the piano in Fatty Bear's Birthday Surprise
 			rate = _overrideFreq;
@@ -244,7 +249,7 @@
 
 		// Allocate a sound buffer, copy the data into it, and play
 		sound = (char *)malloc(size);
-		memcpy(sound, ptr + 8, size);
+		memcpy(sound, ptr + offset + 8, size);
 		_vm->_mixer->playRaw(NULL, sound, size, rate, flags, soundID);
 	}
 	else if (READ_UINT32(ptr) == MKID('MRAW')) {
@@ -769,7 +774,7 @@
 
 	i = _soundQue2Pos;
 	while (i--) {
-		if (_soundQue2[i] == sound)
+		if (_soundQue2Sound[i] == sound)
 			return true;
 	}
 
@@ -813,9 +818,12 @@
 	if (_vm->_musicEngine)
 		_vm->_musicEngine->stopSound(a);
 
-	for (i = 0; i < ARRAYSIZE(_soundQue2); i++)
-		if (_soundQue2[i] == a)
-			_soundQue2[i] = 0;
+	for (i = 0; i < ARRAYSIZE(_soundQue2Sound); i++) {
+		if (_soundQue2Sound[i] == a) {
+			_soundQue2Sound[i] = 0;
+			_soundQue2Offset[i] = 0;
+		}
+	}
 }
 
 void Sound::stopAllSounds() {
@@ -827,7 +835,8 @@
 
 	// Clear the (secondary) sound queue
 	_soundQue2Pos = 0;
-	memset(_soundQue2, 0, sizeof(_soundQue2));
+	memset(_soundQue2Sound, 0, sizeof(_soundQue2Sound));
+	memset(_soundQue2Offset, 0, sizeof(_soundQue2Offset));
 
 	if (_vm->_musicEngine) {
 		_vm->_musicEngine->stopAllSounds();

Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.h,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- sound.h	12 Jul 2004 09:02:18 -0000	1.67
+++ sound.h	14 Jul 2004 07:29:09 -0000	1.68
@@ -55,7 +55,7 @@
 	ScummEngine *_vm;
 
 	int16 _soundQuePos, _soundQue[0x100];
-	int16 _soundQue2Pos, _soundQue2[10];
+	int16 _soundQue2Pos, _soundQue2Sound[10], _soundQue2Offset[10];
 
 	File *_sfxFile;
 	SoundMode _soundMode;	
@@ -84,11 +84,11 @@
 public:
 	Sound(ScummEngine *parent);
 	~Sound();
-	void addSoundToQueue(int sound);
-	void addSoundToQueue2(int sound);
+	void addSoundToQueue(int sound, int offset = 0);
+	void addSoundToQueue2(int sound, int offset = 0);
 	void processSoundQues();
 	void setOverrideFreq(int freq);
-	void playSound(int sound);
+	void playSound(int sound, int offset = 0);
 	void startTalkSound(uint32 offset, uint32 b, int mode, PlayingSoundHandle *handle = NULL);
 	void stopTalkSound();
 	bool isMouthSyncOff(uint pos);





More information about the Scummvm-git-logs mailing list