[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.45.2.5,1.45.2.6

Pawel Kolodziejski aquadran at users.sourceforge.net
Wed Jun 30 22:43:07 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9328/scummvm/scumm/imuse_digi

Modified Files:
      Tag: branch-0-6-0
	dimuse.cpp 
Log Message:
backported save/load imuse digi code

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.45.2.5
retrieving revision 1.45.2.6
diff -u -d -r1.45.2.5 -r1.45.2.6
--- dimuse.cpp	26 Jun 2004 09:18:29 -0000	1.45.2.5
+++ dimuse.cpp	1 Jul 2004 05:42:06 -0000	1.45.2.6
@@ -77,7 +77,80 @@
 }
 
 void IMuseDigital::saveOrLoad(Serializer *ser) {
-	// save-load code not backported
+	Common::StackLock lock(_mutex);
+
+	const SaveLoadEntry mainEntries[] = {
+		MKLINE(IMuseDigital, _volVoice, sleInt32, VER(31)),
+		MKLINE(IMuseDigital, _volSfx, sleInt32, VER(31)),
+		MKLINE(IMuseDigital, _volMusic, sleInt32, VER(31)),
+		MKLINE(IMuseDigital, _curMusicState, sleInt32, VER(31)),
+		MKLINE(IMuseDigital, _curMusicSeq, sleInt32, VER(31)),
+		MKLINE(IMuseDigital, _curMusicCue, sleInt32, VER(31)),
+		MKLINE(IMuseDigital, _nextSeqToPlay, sleInt32, VER(31)),
+		MKARRAY(IMuseDigital, _attributes[0], sleInt32, 188, VER(31)),
+		MKEND()
+	};
+
+	const SaveLoadEntry trackEntries[] = {
+		MKLINE(Track, pan, sleInt8, VER(31)),
+		MKLINE(Track, vol, sleInt32, VER(31)),
+		MKLINE(Track, volFadeDest, sleInt32, VER(31)),
+		MKLINE(Track, volFadeStep, sleInt32, VER(31)),
+		MKLINE(Track, volFadeDelay, sleInt32, VER(31)),
+		MKLINE(Track, volFadeUsed, sleByte, VER(31)),
+		MKLINE(Track, soundId, sleInt32, VER(31)),
+		MKARRAY(Track, soundName[0], sleByte, 15, VER(31)),
+		MKLINE(Track, used, sleByte, VER(31)),
+		MKLINE(Track, toBeRemoved, sleByte, VER(31)),
+		MKLINE(Track, souStream, sleByte, VER(31)),
+		MKLINE(Track, started, sleByte, VER(31)),
+		MKLINE(Track, priority, sleInt32, VER(31)),
+		MKLINE(Track, regionOffset, sleInt32, VER(31)),
+		MK_OBSOLETE(Track, trackOffset, sleInt32, VER(31), VER(31)),
+		MKLINE(Track, dataOffset, sleInt32, VER(31)),
+		MKLINE(Track, curRegion, sleInt32, VER(31)),
+		MKLINE(Track, curHookId, sleInt32, VER(31)),
+		MKLINE(Track, volGroupId, sleInt32, VER(31)),
+		MKLINE(Track, soundType, sleInt32, VER(31)),
+		MKLINE(Track, iteration, sleInt32, VER(31)),
+		MKLINE(Track, mod, sleInt32, VER(31)),
+		MKLINE(Track, mixerFlags, sleInt32, VER(31)),
+		MKLINE(Track, mixerVol, sleInt32, VER(31)),
+		MKLINE(Track, mixerPan, sleInt32, VER(31)),
+		MKEND()
+	};
+
+	ser->_ref_me = this;
+	ser->_save_ref = NULL;
+	ser->_load_ref = NULL;
+
+	ser->saveLoadEntries(this, mainEntries);
+
+	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
+		Track *track = _track[l];
+		ser->saveLoadEntries(track, trackEntries);
+		if (!ser->isSaving()) {
+			if (!track->used)
+				continue;
+			track->readyToRemove = false;
+			if ((track->toBeRemoved) || (track->souStream)) {
+				track->stream2 = NULL;
+				track->stream = NULL;
+				track->used = false;
+				continue;
+			}
+
+			track->soundHandle = _sound->openSound(track->soundId,
+									track->soundName, track->soundType,
+									track->volGroupId, -1);
+			assert(track->soundHandle);
+			int32 streamBufferSize = track->iteration;
+			int freq = _sound->getFreq(track->soundHandle);
+			track->stream2 = NULL;
+			track->stream = makeAppendableAudioStream(freq, track->mixerFlags, streamBufferSize);
+			_vm->_mixer->playInputStream(&track->handle, track->stream, false, track->mixerVol, track->mixerPan, -1, false);
+		}
+	}
 }
 
 void IMuseDigital::callback() {





More information about the Scummvm-git-logs mailing list