[Scummvm-cvs-logs] CVS: scummvm/saga music.cpp,1.63,1.64 music.h,1.25,1.26 rscfile.cpp,1.38,1.39 sfuncs.cpp,1.154,1.155

Eugene Sandulenko sev at users.sourceforge.net
Tue Aug 30 04:17:04 CEST 2005


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

Modified Files:
	music.cpp music.h rscfile.cpp sfuncs.cpp 
Log Message:
Implement sfPlayMusic for IHNM


Index: music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/music.cpp,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- music.cpp	4 Aug 2005 10:23:49 -0000	1.63
+++ music.cpp	30 Aug 2005 11:16:11 -0000	1.64
@@ -274,6 +274,9 @@
 	smfParser = MidiParser::createParser_SMF();	
 
 	_musicContext = _vm->_resource->getContext(GAME_MUSICFILE);
+
+	_songTableLen = 0;
+	_songTable = 0;
 }
 
 Music::~Music() {
@@ -283,6 +286,8 @@
 	smfParser->setMidiDriver(NULL);
 	delete xmidiParser;
 	delete smfParser;
+
+	free(_songTable);
 }
 
 void Music::musicVolumeGaugeCallback(void *refCon) {

Index: music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/music.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- music.h	11 Aug 2005 22:00:32 -0000	1.25
+++ music.h	30 Aug 2005 11:16:11 -0000	1.26
@@ -114,6 +114,9 @@
 	void setVolume(int volume, int time = 1);
 	int getVolume() { return _currentVolume; }
 
+	int32 *_songTable;
+	int _songTableLen;
+
 private:
 	SagaEngine *_vm;
 	Audio::Mixer *_mixer;

Index: rscfile.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/rscfile.cpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- rscfile.cpp	10 Aug 2005 14:53:17 -0000	1.38
+++ rscfile.cpp	30 Aug 2005 11:16:11 -0000	1.39
@@ -26,6 +26,7 @@
 
 #include "saga/actor.h"
 #include "saga/interface.h"
+#include "saga/music.h"
 #include "saga/rscfile.h"
 #include "saga/sndres.h"
 #include "saga/stream.h"
@@ -505,6 +506,7 @@
 		_vm->_sndRes->_fxTable[i].res = fxS.readSint16LE();
 		_vm->_sndRes->_fxTable[i].vol = fxS.readSint16LE();
 	}
+	free(resourcePointer);
 
 	_vm->_interface->_defPortraits.freeMem();
 	_vm->_sprite->loadList(_metaResource.protagFaceSpritesID, _vm->_interface->_defPortraits);
@@ -520,7 +522,24 @@
 
 	// TODO: cutawayList
 
-	// TODO: songTable
+	// TODO: songTable Long
+	_vm->_resource->loadResource(resourceContext, _metaResource.songTableID,
+								 resourcePointer, resourceLength);
+
+	if (resourceLength == 0) {
+		error("Resource::loadGlobalResources Can't load songs list for current track");
+	}
+
+	free(_vm->_music->_songTable);
+	
+	_vm->_music->_songTableLen = resourceLength / 4;
+	_vm->_music->_songTable = (int32 *)malloc(sizeof(int32) * _vm->_music->_songTableLen);
+
+	MemoryReadStream songS(resourcePointer, resourceLength);
+
+	for (int i = 0; i < _vm->_music->_songTableLen; i++)
+		_vm->_music->_songTable[i] = songS.readSint32LE();
+	free(resourcePointer);
 
 	int voiceLUTResourceID = 0;
 

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -d -r1.154 -r1.155
--- sfuncs.cpp	26 Aug 2005 12:07:31 -0000	1.154
+++ sfuncs.cpp	30 Aug 2005 11:16:11 -0000	1.155
@@ -1640,11 +1640,20 @@
 			_vm->_music->stop();
 		}
 	} else {
-		// TODO: Verify this
-		int16 param1 = thread->pop() + 32;
+		int16 param1 = thread->pop();
 		int16 param2 = thread->pop();
 
-		_vm->_music->play(param1, param2 ? MUSIC_LOOP: MUSIC_NORMAL);
+		if (param1 < 1) {
+			_vm->_music->stop();
+			return;
+		}
+
+		if (param1 > _vm->_music->_songTableLen) {
+			warning("sfPlayMusic: Wrong song number (%d > %d)", param1, _vm->_music->_songTableLen);
+		} else {
+			_vm->_music->setVolume(-1, 1);
+			_vm->_music->play(_vm->_music->_songTable[param1], param2 ? MUSIC_LOOP: MUSIC_NORMAL);
+		}
 	}
 }
 





More information about the Scummvm-git-logs mailing list