[Scummvm-cvs-logs] CVS: scummvm/queen cutaway.cpp,1.51,1.52 defs.h,1.26,1.27 logic.cpp,1.78,1.79 sound.cpp,1.7,1.8 sound.h,1.3,1.4

Joost Peters joostp at users.sourceforge.net
Thu Nov 6 18:34:13 CET 2003


Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1:/tmp/cvs-serv32218/queen

Modified Files:
	cutaway.cpp defs.h logic.cpp sound.cpp sound.h 
Log Message:
Added partial playSong() implementation


Index: cutaway.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/cutaway.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -d -r1.51 -r1.52
--- cutaway.cpp	6 Nov 2003 21:15:35 -0000	1.51
+++ cutaway.cpp	7 Nov 2003 02:33:20 -0000	1.52
@@ -1115,10 +1115,8 @@
 
 		ObjectType objectType = getObjectType(object);
 
-		if (object.song) {
-			debug(0, "Should play song %i here", object.song);
-			// XXX playsong(object.song);
-		}
+		if (object.song)
+			_sound->playSong(object.song);
 
 		switch (objectType) {
 			case OBJECT_TYPE_ANIMATION:

Index: defs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/defs.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- defs.h	6 Nov 2003 15:47:37 -0000	1.26
+++ defs.h	7 Nov 2003 02:33:20 -0000	1.27
@@ -75,6 +75,7 @@
 };
 
 enum {
+	ITEM_NONE                     =  0,
 	ITEM_BAT                      =  1,
 	ITEM_JOURNAL,
 	ITEM_JOURNAL_DEMO             =  7,

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/logic.cpp,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -d -r1.78 -r1.79
--- logic.cpp	6 Nov 2003 21:06:00 -0000	1.78
+++ logic.cpp	7 Nov 2003 02:33:20 -0000	1.79
@@ -1911,8 +1911,8 @@
 	_graphics->bankLoad("objects.BBK", 14);
 	_inventoryItem[0] = ITEM_BAT;
 	_inventoryItem[1] = _resource->isDemo() ? ITEM_JOURNAL_DEMO : ITEM_JOURNAL;
-	_inventoryItem[2] = 0;
-	_inventoryItem[3] = 0;
+	_inventoryItem[2] = ITEM_NONE;
+	_inventoryItem[3] = ITEM_NONE;
 }
 
 void Logic::inventoryRefresh() {
@@ -1967,7 +1967,7 @@
 	for (int i = 0; i < 4; i++)
 		for (int j = i + 1; j < 4; j++)
 			if (_inventoryItem[i] == _inventoryItem[j])
-				_inventoryItem[j] = 0;
+				_inventoryItem[j] = ITEM_NONE;
 }
 
 uint16 Logic::numItemsInventory() const {

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/sound.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- sound.cpp	28 Oct 2003 15:33:45 -0000	1.7
+++ sound.cpp	7 Nov 2003 02:33:20 -0000	1.8
@@ -27,6 +27,7 @@
 #include "queen/sound.h"
 
 #define	SB_HEADER_SIZE	110
+#define	STOP_MUSIC	-1
 
 namespace Queen {
 
@@ -94,7 +95,7 @@
 #endif
 
 Sound::Sound(SoundMixer *mixer, Input *input, Resource  *resource) : 
-  _mixer(mixer), _input(input), _resource(resource), _sfxHandle(0) {
+  _mixer(mixer), _input(input), _resource(resource), _sfxHandle(0), _lastOverride(0), _currentSong(0) {
 }
 
 Sound::~Sound() {
@@ -128,10 +129,478 @@
 	}
 }
 
-bool Sound::isPlaying() {
-	return _sfxHandle != 0;
+void Sound::waitSfxFinished() {
+	while((volatile PlayingSoundHandle)_sfxHandle != 0)
+		_input->delay(10);
+}
+
+void Sound::playSong(int16 songNum) {
+	if (songNum == STOP_MUSIC) {
+		//stop the music
+		//_fanfareCount = _fluteCount = 0;
+		//_oldName[0] = 0;
+		return;
+	}
+
+	// Remap some songs because there is less amiga music
+	// and we want lastoverride to work properly
+	switch(songNum) {
+		case 1:
+		case 2:
+			songNum = 39;
+			break;
+
+		case 37:
+		case 52:
+		case 196:
+			songNum = 90;
+			break;
+
+		case 38:
+		case 89:
+			songNum = 3;
+			break;
+
+		case 24:
+		case 158:
+			songNum = 117;
+			break;
+
+		case 71:
+		case 72:
+		case 73:
+		case 75:
+			songNum = 133;
+			break;
+
+		case 203:
+			songNum = 67;
+			break;
+
+		case 145:
+			songNum = 140;
+			break;
+
+		case 53:
+		case 204:
+			songNum = 44;
+			break;
+
+		case 136:
+		case 142:
+		case 179:
+			songNum = 86;
+			break;
+
+		case 101:
+		case 102:
+		case 143:
+			songNum = 188;
+			break;
+
+		case 65:
+		case 62:
+			songNum = 69;
+			break;
+
+		case 118:
+		case 119:
+			songNum = 137;
+			break;
+
+		case 130:
+		case 131:
+			songNum = 59;
+			break;
+
+		case 174:
+		case 175:
+			songNum = 57;
+			break;
+
+		case 171:
+		case 121:
+			songNum = 137;
+			break;
+
+		case 138:
+		case 170:
+		case 149:
+			songNum = 28;
+			break;
+
+		case 122:
+		case 180:
+		case 83:
+		case 98:
+			songNum = 83;
+			break;
+
+		case 20:
+		case 33:
+			songNum = 34;
+			break;
+
+		case 29:
+		case 35:
+			songNum = 36;
+			break;
+
+		case 7:
+		case 9:
+		case 10:
+			songNum = 11;
+			break;
+
+		case 110:
+			songNum = 94;
+			break;
+
+		case 111:
+			songNum = 95;
+			break;
+
+		case 30:
+			songNum = 43;
+			break;
+
+		case 76:
+			songNum = 27;
+			break;
+
+		case 194:
+		case 195:
+			songNum = 32;
+			break;
+	}
+
+	// Sound effects and volume changes exit before setting lastoverride
+	// 04-19-95 01:31pm Fix sfx bug
+	if(_lastOverride != 32 && _lastOverride != 44) {
+		switch(songNum) {
+			// Volume normal
+			case 5:
+				warning("Sound::playSong() -> alter_current_volume() not implemented yet");
+    				//alter_current_volume();
+    				return;
+	
+			// Volume soft
+			case 15:
+    				//volumecontrol(-1,(20*VOLUME)/100);
+    				return;
+		
+			// Volume medium
+			case 14:
+    				//volumecontrol(-1,(32*VOLUME)/100);
+    				return;
+
+			// Open door
+			case 25:
+				sfxPlay("116BSSSS");
+				return;
+
+			// Close door
+			case 26:
+    				sfxPlay("105ASSSS");
+				return;
+
+			// Light switch
+			case 56:
+				sfxPlay("27SSSSSS");
+				return;
+
+			// Hydraulic doors open
+			case 57:
+				sfxPlay("96SSSSSS");
+				return;
+
+			// Hydraulic doors close
+			case 58:
+				sfxPlay("97SSSSSS");
+				return;
+
+			// Metallic door slams
+			case 59:
+				sfxPlay("105SSSSS");
+				return;
+
+			// Oracle rezzes in
+			case 63:
+				sfxPlay("132SSSSS");
+				return;
+
+			// Cloth slide 1
+			case 27:
+				sfxPlay("135SSSSS");
+				return;
+	
+			// Splash
+			case 83:
+				sfxPlay("18SSSSSS");
+				return;
+
+			// Agression enhancer
+			case 85:
+				sfxPlay("138BSSSS");
+				return;
+		
+			// Dino Ray
+			case 68:
+				sfxPlay("138SSSSS");
+				return;
+
+			// Dino transformation
+			case 140:
+				sfxPlay("55BSSSSS");
+				return;
+
+			// Experimental laser
+			case 141:
+				sfxPlay("55SSSSSS");
+				return;
+
+			// Plane hatch open
+			case 94:
+				sfxPlay("3SSSSSSS");
+				return;
+
+			// Plane hatch close
+			case 95:
+				sfxPlay("4SSSSSSS");
+				return;
+
+			// Oracle rezzes out
+			case 117:
+				sfxPlay("70SSSSSS");
+				return;
+
+			// Dino horn
+			case 124:
+				sfxPlay("103SSSSS");
+				return;
+
+			// Punch
+			case 127:
+				sfxPlay("128SSSSS");
+				return;
+
+			// Body hits ground
+			case 128:
+				sfxPlay("129SSSSS");
+				return;
+
+			// Explosion
+			case 137:
+				sfxPlay("88SSSSSS");
+				return;
+	
+			// Stone door grind 1
+			case 86:
+				sfxPlay("1001SSSS");
+				return;
+
+			// Stone door grind 2
+			case 188:
+				sfxPlay("1002SSSS");
+				return;
+
+			// Cloth slide 2
+			case 28:
+				sfxPlay("1005SSSS");
+				return;
+
+			// Rattle bars
+			case 151:
+				sfxPlay("115SSSSS");
+				return;
+
+			// Door dissolves
+			case 152:
+				sfxPlay("56SSSSSS");
+				return;
+
+			// Altar slides
+			case 153:
+				sfxPlay("85SSSSSS");
+				return;
+
+			// Pull lever
+			case 166:
+				sfxPlay("1008SSSS");
+				return;
+
+			// Zap Frank
+			case 182:
+				sfxPlay("1023SSSS");
+				return;
+
+			// Splorch
+			case 69:
+				sfxPlay("137ASSSS");
+				return;
+
+			// Robot laser
+			case 70:
+				sfxPlay("61SSSSSS");
+				return;
+
+			// Pick hits stone
+			case 133:
+				sfxPlay("71SSSSSS");
+				return;
+
+			// Press button
+			case 165:
+				sfxPlay("1007SSSS");
+				return;
+		}
+	}
+
+
+	// Exit if trying to play a song that's already playing
+	// and instruments are already loaded i.e. last song wasn't -1
+	if (songNum == _lastOverride /* && oldName[0] != 0 */ )
+
+	// Play songs
+	switch(songNum) {
+		// Hotel
+		case 39:
+			//goSong("hotel",1);
+			break;
+
+		case 19:
+			//goSong("hotel",3);
+			break;
+
+		case 34:
+			//goSong("hotel",2);
+			break;
+
+		case 36:
+			//goSong("hotel",4);
+			//fanfarerestore=lastoverride;
+			//fanfarecount=60;
+			break;
+
+		// Jungle
+		case 40:
+			//goSong("jung",1);
+			//fanfarerestore=lastoverride;
+			//fanfarecount=80;
+			//flutecount=100;
+			break;
+
+		case 3:
+			//goSong("jung",2);
+			//flutecount=100;
+			break;
+
+		// Temple
+		case 54:
+			//goSong("temple",1);
+			break;
+
+		case 12:
+			//goSong("temple",2);
+			break;
+
+		case 11:
+			//goSong("temple",3);
+			break;
+
+		case 31:
+			//goSong("temple",4);
+			//fanfarerestore=lastoverride;
+			//fanfarecount=80;
+			break;
+
+		// Floda
+		case 41:
+			//goSong("floda",4);
+			//fanfarerestore=lastoverride;
+			//fanfarecount=60;
+			break;
+
+		case 13:
+			//goSong("floda",3);
+			break;
+
+		case 16:
+			//goSong("floda",1);
+			break;
+			
+		case 17:
+			//goSong("floda",2);
+			break;
+
+		case 43:
+			//goSong("floda",5);
+			break;
+
+		// Prequel (End credits)
+		case 67:
+			//goSong("title",1);
+			// 05-19-95 03:24pm Removed to fix A500 Bug
+			//fanfarerestore=90;
+			//fanfarecount=550;
+			break;
+
+			// Title (Intro credits)
+		case 88:
+			//goSong("title",1);
+			break;
+
+		// Valley
+		case 90:
+			//goSong("awestruk",1);
+			break;
+
+		// Confrontation
+		case 91:
+			//goSong("'jungle'",1);
+			break;
+
+		// Frank
+		case 46:
+			//goSong("frank",1);
+			break;
+
+		// Trader Bob
+		case 6:
+			//goSong("bob",1);
+			break;
+
+		// Azura
+		case 44:
+			//goSong("azura",1);
+			break;
+
+		// Amazon Fortress
+		case 21:
+			//goSong("fort",1);
+			break;
+
+		// Rocket
+		case 32:
+			//goSong("rocket",1);
+			break;
+
+		// Robot
+		case 92:
+			//goSong("robot",1);
+			break;
+
+		// Song not handled by amiga
+		default:
+			return;
+	}
+
+
+	_lastOverride = _currentSong = songNum;
+
 }
 
+
 int SBSound::playSound(byte *sound, uint32 size) {
 	byte flags = 0 | SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE;
 	return _mixer->playRaw(&_sfxHandle, sound, size, 11025, flags);
@@ -147,8 +616,7 @@
 	}
 	strcat(name, ".SB");
 
-	while(isPlaying())
-	  _input->delay(10);
+	waitSfxFinished();
 	
 	if (_resource->exists(name)) 
 		playSound(_resource->loadFileMalloc(name, SB_HEADER_SIZE), _resource->fileSize(name) - SB_HEADER_SIZE);
@@ -165,8 +633,7 @@
 	}
 	strcat(name, ".SB");
 	
-	while(isPlaying())
-		_input->delay(10);
+	waitSfxFinished();
 
 	if (_resource->exists(name)) 
 		_mixer->playMP3(&_sfxHandle, _resource->giveCompressedSound(name), _resource->fileSize(name));
@@ -184,9 +651,8 @@
 	}
 	strcat(name, ".SB");
 
-	while(isPlaying()) 
-		_input->delay(10);
-
+	waitSfxFinished();
+	
 	if (_resource->exists(name)) {
 		OggVorbis_File *oggFile = new OggVorbis_File;
 		file_info *f = new file_info;

Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/sound.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- sound.h	28 Oct 2003 15:26:05 -0000	1.3
+++ sound.h	7 Nov 2003 02:33:20 -0000	1.4
@@ -37,13 +37,16 @@
 	virtual ~Sound(); 
 	virtual void sfxPlay(const char *base) = 0;
 	static Sound *giveSound(SoundMixer *mixer, Input *input, Resource *resource, uint8 compression);
-	bool isPlaying();
+	void waitSfxFinished();
+	void playSong(int16 songNum);
 
 protected:
 	SoundMixer *_mixer;
 	Input *_input;
 	Resource *_resource;
 
+	int16 _lastOverride;
+	int16 _currentSong;
 	PlayingSoundHandle _sfxHandle;
 };
 





More information about the Scummvm-git-logs mailing list