diff options
author | Filippos Karapetis | 2009-12-31 08:30:30 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-12-31 08:30:30 +0000 |
commit | 54245f712d18860c1454d4d1b3878bad77d43728 (patch) | |
tree | 0062c85f0304761e3a2feefa2dc59858ab92883e | |
parent | 762bdc7caded769c6440bae0e17fca8c37f5d317 (diff) | |
download | scummvm-rg350-54245f712d18860c1454d4d1b3878bad77d43728.tar.gz scummvm-rg350-54245f712d18860c1454d4d1b3878bad77d43728.tar.bz2 scummvm-rg350-54245f712d18860c1454d4d1b3878bad77d43728.zip |
SCI/new music code: The loop selector for each music score is no longer cached, but read directly from the sound object
svn-id: r46792
-rw-r--r-- | engines/sci/engine/savegame.cpp | 4 | ||||
-rw-r--r-- | engines/sci/engine/savegame.h | 2 | ||||
-rw-r--r-- | engines/sci/sfx/midiparser.cpp | 9 | ||||
-rw-r--r-- | engines/sci/sfx/music.cpp | 1 | ||||
-rw-r--r-- | engines/sci/sfx/music.h | 1 | ||||
-rw-r--r-- | engines/sci/sfx/soundcmd.cpp | 8 |
6 files changed, 10 insertions, 15 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 7169e363e1..1c3ae06cec 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -116,7 +116,7 @@ void MusicEntry::saveLoadWithSerializer(Common::Serializer &s) { uint32 restoreTime = 0; s.syncAsSint32LE(restoreTime); ticker = restoreTime * 60 / 1000; - s.syncAsSint32LE(loop); + s.skip(4); // loop s.skip(4); // hold // volume and dataInc will be synced from the sound objects // when the sound list is reconstructed in gamestate_restore() @@ -134,7 +134,7 @@ void MusicEntry::saveLoadWithSerializer(Common::Serializer &s) { s.syncAsSint16LE(dataInc); s.syncAsSint16LE(ticker); s.syncAsByte(prio); - s.syncAsByte(loop); + s.skip(1, VER(15), VER(15)); s.syncAsByte(volume); s.syncAsByte(fadeTo); s.syncAsSint16LE(fadeStep); diff --git a/engines/sci/engine/savegame.h b/engines/sci/engine/savegame.h index 6f16546dfa..ae3badc6da 100644 --- a/engines/sci/engine/savegame.h +++ b/engines/sci/engine/savegame.h @@ -36,7 +36,7 @@ namespace Sci { struct EngineState; enum { - CURRENT_SAVEGAME_VERSION = 15, + CURRENT_SAVEGAME_VERSION = 16, MINIMUM_SAVEGAME_VERSION = 9 }; diff --git a/engines/sci/sfx/midiparser.cpp b/engines/sci/sfx/midiparser.cpp index 8d44cf0a5a..59d762bda8 100644 --- a/engines/sci/sfx/midiparser.cpp +++ b/engines/sci/sfx/midiparser.cpp @@ -200,10 +200,11 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) { info.ext.data = _position._play_pos; _position._play_pos += info.length; if (info.ext.type == 0x2F) {// end of track reached - if (_pSnd->loop) - _pSnd->loop--; - PUT_SEL32V(segMan, _pSnd->soundObj, loop, _pSnd->loop); - if (_pSnd->loop) { + int16 loop = GET_SEL32V(segMan, _pSnd->soundObj, loop); + if (loop) + loop--; + PUT_SEL32V(segMan, _pSnd->soundObj, loop, loop); + if (loop) { // We need to play it again... jumpToTick(_loopTick); } else { diff --git a/engines/sci/sfx/music.cpp b/engines/sci/sfx/music.cpp index a2f84f6ec6..5223b87a9f 100644 --- a/engines/sci/sfx/music.cpp +++ b/engines/sci/sfx/music.cpp @@ -557,7 +557,6 @@ MusicEntry::MusicEntry() { dataInc = 0; ticker = 0; prio = 0; - loop = 0; volume = 0; pauseCounter = 0; diff --git a/engines/sci/sfx/music.h b/engines/sci/sfx/music.h index 8145de8fb8..eab1c7aff9 100644 --- a/engines/sci/sfx/music.h +++ b/engines/sci/sfx/music.h @@ -73,7 +73,6 @@ public: uint16 dataInc; uint16 ticker; byte prio; - uint16 loop; int16 volume; int16 pauseCounter; diff --git a/engines/sci/sfx/soundcmd.cpp b/engines/sci/sfx/soundcmd.cpp index 97408e7f96..15067e7270 100644 --- a/engines/sci/sfx/soundcmd.cpp +++ b/engines/sci/sfx/soundcmd.cpp @@ -288,7 +288,6 @@ void SoundCommandParser::cmdInitHandle(reg_t obj, int16 value) { if (number && _resMan->testResource(ResourceId(kResourceTypeSound, number))) newSound->soundRes = new SoundResource(number, _resMan, _soundVersion); newSound->soundObj = obj; - newSound->loop = GET_SEL32V(_segMan, obj, loop); newSound->prio = GET_SEL32V(_segMan, obj, pri) & 0xFF; newSound->volume = CLIP<int>(GET_SEL32V(_segMan, obj, vol), 0, Audio::Mixer::kMaxChannelVolume); @@ -421,7 +420,6 @@ void SoundCommandParser::cmdPlayHandle(reg_t obj, int16 value) { PUT_SEL32V(_segMan, obj, state, kSoundPlaying); } - musicSlot->loop = GET_SEL32V(_segMan, obj, loop); musicSlot->prio = GET_SEL32V(_segMan, obj, priority); // vol selector doesnt get used before sci1late if (_soundVersion < SCI_VERSION_1_LATE) @@ -677,7 +675,6 @@ void SoundCommandParser::cmdUpdateHandle(reg_t obj, int16 value) { return; } - musicSlot->loop = GET_SEL32V(_segMan, obj, loop); int16 objVol = CLIP<int>(GET_SEL32V(_segMan, obj, vol), 0, 255); if (objVol != musicSlot->volume) _music->soundSetVolume(musicSlot, objVol); @@ -895,11 +892,10 @@ void SoundCommandParser::cmdSetHandleLoop(reg_t obj, int16 value) { return; } if (value == -1) { - musicSlot->loop = 0xFFFF; + PUT_SEL32V(_segMan, obj, loop, 0xFFFF); } else { - musicSlot->loop = 1; // actually plays the music once + PUT_SEL32V(_segMan, obj, loop, 1); // actually plays the music once } - PUT_SEL32V(_segMan, obj, loop, musicSlot->loop); #endif } |