[Scummvm-cvs-logs] SF.net SVN: scummvm: [29271] scummvm/trunk/engines/lure

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sun Oct 28 04:32:13 CET 2007


Revision: 29271
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29271&view=rev
Author:   dreammaster
Date:     2007-10-27 20:32:13 -0700 (Sat, 27 Oct 2007)

Log Message:
-----------
Added storing of playing sounds to savegame (note: only sounds flagged as restorable are restarted after loading a savegame)

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

Modified: scummvm/trunk/engines/lure/lure.cpp
===================================================================
--- scummvm/trunk/engines/lure/lure.cpp	2007-10-27 21:29:38 UTC (rev 29270)
+++ scummvm/trunk/engines/lure/lure.cpp	2007-10-28 03:32:13 UTC (rev 29271)
@@ -166,6 +166,7 @@
 
 	Resources::getReference().saveToStream(f);
 	Game::getReference().saveToStream(f);
+	Sound.saveToStream(f);
 	Room::getReference().saveToStream(f);
 	Fights.saveToStream(f);
 
@@ -207,6 +208,7 @@
 	// Load in the data
 	Resources::getReference().loadFromStream(f);
 	Game::getReference().loadFromStream(f);
+	Sound.loadFromStream(f);
 	Room::getReference().loadFromStream(f);
 	Fights.loadFromStream(f);
 

Modified: scummvm/trunk/engines/lure/sound.cpp
===================================================================
--- scummvm/trunk/engines/lure/sound.cpp	2007-10-27 21:29:38 UTC (rev 29270)
+++ scummvm/trunk/engines/lure/sound.cpp	2007-10-28 03:32:13 UTC (rev 29271)
@@ -42,6 +42,7 @@
 	_descs = Disk::getReference().getEntry(SOUND_DESC_RESOURCE_ID);
 	_numDescs = _descs->size() / sizeof(SoundDescResource);
 	_soundData = NULL;
+	_paused = false;
 
 	int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);
 	_nativeMT32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
@@ -87,6 +88,36 @@
 	g_system->deleteMutex(_soundMutex);
 }
 
+void SoundManager::saveToStream(WriteStream *stream) {
+	debugC(ERROR_BASIC, kLureDebugSounds, "SoundManager::saveToStream");
+	ManagedList<SoundDescResource *>::iterator i;
+
+	for (i = _activeSounds.begin(); i != _activeSounds.end(); ++i) {
+		SoundDescResource *rec = *i;
+		stream->writeByte(rec->soundNumber);
+	}
+	stream->writeByte(0xff);
+}
+
+void SoundManager::loadFromStream(ReadStream *stream) {
+	// Stop any existing sounds playing
+	killSounds();
+
+	// Load any playing sounds
+	uint8 soundNumber;
+	while ((soundNumber = stream->readByte()) != 0xff) {
+		uint8 soundIndex = descIndexOf(soundNumber);
+		if (soundIndex != 0xff) {
+			// Make sure that the sound is allowed to be restored
+			SoundDescResource &rec = soundDescs()[soundIndex];
+			if ((rec.flags & SF_RESTORE) != 0)
+				// Requeue the sound for playing
+				addSound(soundIndex, false);
+		}
+	}
+}
+
+
 void SoundManager::loadSection(uint16 sectionId) {
 	debugC(ERROR_BASIC, kLureDebugSounds, "SoundManager::loadSection = %xh", sectionId);
 	killSounds();
@@ -247,6 +278,17 @@
 	}
 }
 
+uint8 SoundManager::descIndexOf(uint8 soundNumber) {
+	SoundDescResource *rec = soundDescs();
+	
+	for (uint8 index = 0; index < _numDescs; ++index, ++rec) {
+		if (rec->soundNumber == soundNumber)
+			return index;
+	}
+
+	return 0xff;   // Couldn't find entry
+}
+
 SoundDescResource *SoundManager::findSound(uint8 soundNumber) {
 	debugC(ERROR_BASIC, kLureDebugSounds, "SoundManager::findSound soundNumber=%d", soundNumber);
 	ManagedList<SoundDescResource *>::iterator i;
@@ -499,6 +541,9 @@
 }
 
 void SoundManager::doTimer() {
+	if (_paused)
+		return;
+
 	g_system->lockMutex(_soundMutex);
 
 	ManagedList<MidiMusic *>::iterator i;

Modified: scummvm/trunk/engines/lure/sound.h
===================================================================
--- scummvm/trunk/engines/lure/sound.h	2007-10-27 21:29:38 UTC (rev 29270)
+++ scummvm/trunk/engines/lure/sound.h	2007-10-28 03:32:13 UTC (rev 29271)
@@ -118,6 +118,7 @@
 	bool _isPlaying;
 	bool _nativeMT32;
 	Common::MutexRef _soundMutex;
+	bool _paused;
 
 	// Internal support methods
 	void bellsBodge();
@@ -128,6 +129,9 @@
 	SoundManager();
 	~SoundManager();
 
+	void saveToStream(WriteStream *stream);
+	void loadFromStream(ReadStream *stream);
+
 	void loadSection(uint16 sectionId);
 	void killSounds();
 	void addSound(uint8 soundIndex, bool tidyFlag = true);
@@ -137,10 +141,14 @@
 	void setVolume(uint8 soundNumber, uint8 volume);
 	void setVolume(uint8 volume);
 	void tidySounds();
+	uint8 descIndexOf(uint8 soundNumber);
 	SoundDescResource *findSound(uint8 soundNumber);
 	void removeSounds();
 	void restoreSounds();
 	void fadeOut();
+	void pause() { _paused = true; }
+	void resume() { _paused = false; }
+	bool getPaused() { return _paused; }
 
 	// The following methods implement the external sound player module
 	void musicInterface_Initialise();


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