[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