[Scummvm-cvs-logs] SF.net SVN: scummvm:[41702] scummvm/trunk/engines/cruise

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sat Jun 20 10:15:01 CEST 2009


Revision: 41702
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41702&view=rev
Author:   dreammaster
Date:     2009-06-20 08:15:01 +0000 (Sat, 20 Jun 2009)

Log Message:
-----------
Added proper saving of music state to savegames so music resumes when a savegame is loaded.

Modified Paths:
--------------
    scummvm/trunk/engines/cruise/saveload.cpp
    scummvm/trunk/engines/cruise/sound.cpp
    scummvm/trunk/engines/cruise/sound.h

Modified: scummvm/trunk/engines/cruise/saveload.cpp
===================================================================
--- scummvm/trunk/engines/cruise/saveload.cpp	2009-06-20 07:36:12 UTC (rev 41701)
+++ scummvm/trunk/engines/cruise/saveload.cpp	2009-06-20 08:15:01 UTC (rev 41702)
@@ -820,6 +820,7 @@
 	printInfoBlackBox("Loading in progress...");
 
 	initVars();
+	_vm->sound().stopMusic();
 
 	// Skip over the savegame header
 	CruiseSavegameHeader header;
@@ -928,8 +929,6 @@
 		currentcellHead = currentcellHead->next;
 	}
 
-	//TODO: here, restart music
-
 	if (strlen(currentCtpName)) {
 		loadCtFromSave = 1;
 		initCt(currentCtpName);

Modified: scummvm/trunk/engines/cruise/sound.cpp
===================================================================
--- scummvm/trunk/engines/cruise/sound.cpp	2009-06-20 07:36:12 UTC (rev 41701)
+++ scummvm/trunk/engines/cruise/sound.cpp	2009-06-20 08:15:01 UTC (rev 41702)
@@ -211,6 +211,9 @@
 	uint8 numOrders() const { assert(_sfxData); return _sfxData[470]; }
 	void setNumOrders(uint8 v) { assert(_sfxData); _sfxData[470] = v; }
 	void setPattern(int offset, uint8 value) { assert(_sfxData); _sfxData[472 + offset] = value; }
+	const char *musicName() { return _musicName; }
+
+	// Note: Original game never actually uses looping variable. Songs are hardcoded to loop
 	bool looping() const { return _looping; }
 	void setLooping(bool v) { _looping = v; }
 };
@@ -701,8 +704,20 @@
 	s.syncBytes((byte *)_musicName, 33);
 	uint16 v = (uint16)songLoaded();
 	s.syncAsSint16LE(v);
+
+	if (s.isLoading() && v) {
+		load(_musicName);
+
+		for (int i = 0; i < NUM_CHANNELS; ++i) {
+			_instrumentsChannelTable[i] = -1;
+		}
+	}
+
 	s.syncAsSint16LE(_songPlayed);
 	s.syncAsSint16LE(_looping);
+	s.syncAsSint16LE(_currentPos);
+	s.syncAsSint16LE(_currentOrder);
+	s.syncAsSint16LE(_playing);
 }
 
 PCSound::PCSound(Audio::Mixer *mixer, CruiseEngine *vm) {
@@ -791,7 +806,6 @@
 
 void PCSound::musicLoop(bool v) {
 	_player->setLooping(v);
-	warning("TODO: set music looping");
 }
 
 void PCSound::startNote(int channel, int volume, int speed) {
@@ -815,9 +829,11 @@
 }
 
 void PCSound::doSync(Common::Serializer &s) {
-	warning("TODO: doSync fx properties");
 	_player->doSync(s);
-//	_soundDriver->doSync(s);
 }
 
+const char *PCSound::musicName() {
+	return _player->musicName();
+}
+
 } // End of namespace Cruise

Modified: scummvm/trunk/engines/cruise/sound.h
===================================================================
--- scummvm/trunk/engines/cruise/sound.h	2009-06-20 07:36:12 UTC (rev 41701)
+++ scummvm/trunk/engines/cruise/sound.h	2009-06-20 08:15:01 UTC (rev 41702)
@@ -59,6 +59,7 @@
 	virtual void stopSound(int channel);
 	
 	void doSync(Common::Serializer &s);
+	const char *musicName();
 	void stopChannel(int channel);
 	bool isPlaying() const;
 	bool songLoaded() const;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list