[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