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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Fri Dec 25 00:53:17 CET 2009


Revision: 46539
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46539&view=rev
Author:   m_kiewitz
Date:     2009-12-24 23:53:16 +0000 (Thu, 24 Dec 2009)

Log Message:
-----------
SCI/newmusic: Set signal after waiting for delta and not immediately (fixes iceman intro)

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

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-24 22:30:49 UTC (rev 46538)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-24 23:53:16 UTC (rev 46539)
@@ -529,6 +529,14 @@
 }
 
 void MidiParser_SCI::parseNextEvent(EventInfo &info) {
+	SegManager *segMan = ((SciEngine *)g_engine)->getEngineState()->_segMan;	// HACK
+
+	// Set signal AFTER waiting for delta, otherwise we would set signal too soon resulting in all sorts of bugs
+	if (_signalSet) {
+		_signalSet = false;
+		PUT_SEL32V(segMan, _pSnd->soundObj, signal, _signalToSet);
+	}
+
 	info.start = _position._play_pos;
 	info.delta = 0;
 	while (*_position._play_pos == 0xF8) {
@@ -545,8 +553,6 @@
 	if (info.event < 0x80)
 		return;
 
-	SegManager *segMan = ((SciEngine *)g_engine)->getEngineState()->_segMan;	// HACK
-
 	_position._running_status = info.event;
 	switch (info.command()) {
 	case 0xC:
@@ -554,7 +560,8 @@
 		info.basic.param2 = 0;
 		if (info.channel() == 0xF) {// SCI special case
 			if (info.basic.param1 != 0x7F) {
-				PUT_SEL32V(segMan, _pSnd->soundObj, signal, info.basic.param1);
+				_signalSet = true;
+				_signalToSet = info.basic.param1;
 			} else {
 				_loopTick = _position._play_tick;
 			}
@@ -573,8 +580,8 @@
 				switch (_soundVersion) {
 				case SCI_VERSION_0_EARLY:
 					_pSnd->dataInc += info.basic.param2;
-					PUT_SEL32V(segMan, _pSnd->soundObj, signal, 0x7f + _pSnd->dataInc);
-					warning("dataInc");
+					_signalSet = true;
+					_signalToSet = 0x7f + _pSnd->dataInc;
 					break;
 				case SCI_VERSION_1_EARLY:
 				case SCI_VERSION_1_LATE:
@@ -766,6 +773,8 @@
 	int midiParamCount;
 
 	_mixedData = filterData;
+	command = 0;
+	midiParamCount = 0;
 	lastCommand = 0;
 	curChannel = 15;
 

Modified: scummvm/trunk/engines/sci/sfx/music.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.h	2009-12-24 22:30:49 UTC (rev 46538)
+++ scummvm/trunk/engines/sci/sfx/music.h	2009-12-24 23:53:16 UTC (rev 46539)
@@ -190,6 +190,9 @@
 	MusicEntry *_pSnd;
 	uint32 _loopTick;
 	byte _volume;
+
+	bool _signalSet;
+	int16 _signalToSet;
 };
 
 } // end of namespace


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