[Scummvm-cvs-logs] SF.net SVN: scummvm:[46690] scummvm/trunk/engines/sci/sfx

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Mon Dec 28 23:35:53 CET 2009


Revision: 46690
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46690&view=rev
Author:   m_kiewitz
Date:     2009-12-28 22:35:53 +0000 (Mon, 28 Dec 2009)

Log Message:
-----------
SCI/newmusic: Accept object 0:0 in cmdPauseHandle, pause the whole playlist then (fixes castle of dr. brain during intro)

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sfx/music.cpp
    scummvm/trunk/engines/sci/sfx/music.h
    scummvm/trunk/engines/sci/sfx/soundcmd.cpp

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-28 21:06:44 UTC (rev 46689)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-28 22:35:53 UTC (rev 46690)
@@ -501,6 +501,17 @@
 	}
 }
 
+MusicList::iterator SciMusic::enumPlayList(MusicList::iterator slotLoop) {
+	if (!slotLoop) {
+		if (_playList.begin() == _playList.end())
+			return NULL;
+		return _playList.begin();
+	}
+	slotLoop++;
+	if (slotLoop == _playList.end())
+		return NULL;
+	return slotLoop;
+}
 
 MusicEntry::MusicEntry() {
 	soundObj = NULL_REG;

Modified: scummvm/trunk/engines/sci/sfx/music.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.h	2009-12-28 21:06:44 UTC (rev 46689)
+++ scummvm/trunk/engines/sci/sfx/music.h	2009-12-28 22:35:53 UTC (rev 46690)
@@ -157,6 +157,7 @@
 	void printPlayList(Console *con);
 
 	void reconstructPlayList(int savegame_version);
+	MusicList::iterator enumPlayList(MusicList::iterator slotLoop);
 
 	void enterCriticalSection() { _inCriticalSection = true; }
 	void leaveCriticalSection() { _inCriticalSection = false; }

Modified: scummvm/trunk/engines/sci/sfx/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2009-12-28 21:06:44 UTC (rev 46689)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2009-12-28 22:35:53 UTC (rev 46690)
@@ -499,38 +499,45 @@
 }
 
 void SoundCommandParser::cmdPauseHandle(reg_t obj, int16 value) {
+#ifdef USE_OLD_MUSIC_FUNCTIONS
 	if (!obj.segment)
 		return;
 
-#ifdef USE_OLD_MUSIC_FUNCTIONS
 	if (_soundVersion <= SCI_VERSION_0_LATE)
 		changeHandleStatus(obj, SOUND_STATUS_SUSPENDED);
 	else
 		changeHandleStatus(obj, value ? SOUND_STATUS_SUSPENDED : SOUND_STATUS_PLAYING);
 #else
-	MusicEntry *musicSlot = _music->getSlot(obj);
+	MusicEntry *musicSlot = NULL;
+	MusicList::iterator slotLoop = NULL;
 
-	if (musicSlot->status == kSoundStopped) {
-		// WORKAROUND for the Sierra logo screen in Castle of Dr. Brain, where the
-		// game tries to pause/unpause the wrong sound in the playlist
-		if (!strcmp(_segMan->getObjectName(obj), "cMusic2"))
-			musicSlot = _music->getSlot(_segMan->findObjectByName("cMusic"));
+	if (!obj.segment) {
+		slotLoop = _music->enumPlayList(NULL);
+		musicSlot = *slotLoop;
+	} else {
+		musicSlot = _music->getSlot(obj);
+		if (!musicSlot) {
+			warning("cmdPauseHandle: Slot not found");
+			return;
+		}
 	}
 
-	if (!musicSlot) {
-		warning("cmdPauseHandle: Slot not found");
-		return;
-	}
-
-	if (_soundVersion <= SCI_VERSION_0_LATE) {
-		PUT_SEL32V(_segMan, obj, state, kSoundPaused);
-		_music->soundPause(musicSlot);
-	} else {
-		if (value)
+	do {
+		if (_soundVersion <= SCI_VERSION_0_LATE) {
+			PUT_SEL32V(_segMan, obj, state, kSoundPaused);
 			_music->soundPause(musicSlot);
-		else
-			_music->soundPlay(musicSlot);
-	}
+		} else {
+			if (value)
+				_music->soundPause(musicSlot);
+			else
+				_music->soundPlay(musicSlot);
+		}
+		if (slotLoop) {
+			slotLoop = _music->enumPlayList(slotLoop);
+			if (slotLoop)
+				musicSlot = *slotLoop;
+		}
+	} while (slotLoop);
 #endif
 }
 


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