diff options
author | Paweł Kołodziejski | 2004-01-07 05:58:12 +0000 |
---|---|---|
committer | Paweł Kołodziejski | 2004-01-07 05:58:12 +0000 |
commit | 1e2ff5a469a0ffef36a871a47439e382764c202d (patch) | |
tree | 7672f619b2a3e725fefb426c2406d98935b73576 /scumm/imuse_digi | |
parent | ae4cd2291fdd13bdaa83225f2f90856e8d2eb23b (diff) | |
download | scummvm-rg350-1e2ff5a469a0ffef36a871a47439e382764c202d.tar.gz scummvm-rg350-1e2ff5a469a0ffef36a871a47439e382764c202d.tar.bz2 scummvm-rg350-1e2ff5a469a0ffef36a871a47439e382764c202d.zip |
handle jumps
svn-id: r12207
Diffstat (limited to 'scumm/imuse_digi')
-rw-r--r-- | scumm/imuse_digi/dimuse.cpp | 23 | ||||
-rw-r--r-- | scumm/imuse_digi/dimuse.h | 1 | ||||
-rw-r--r-- | scumm/imuse_digi/dimuse_sndmgr.cpp | 5 |
3 files changed, 24 insertions, 5 deletions
diff --git a/scumm/imuse_digi/dimuse.cpp b/scumm/imuse_digi/dimuse.cpp index eab388c72a..9db28eb2e7 100644 --- a/scumm/imuse_digi/dimuse.cpp +++ b/scumm/imuse_digi/dimuse.cpp @@ -188,13 +188,30 @@ void IMuseDigital::callback() { } } +int IMuseDigital::checkJumpByRegion(int track, int region) { + int num_jumps = _sound->getNumJumps(_track[track].soundHandle); + for (int l = 0; l < num_jumps; l++) { + return _sound->getJumpDestRegionId(_track[track].soundHandle, l); + } + return -1; +} + void IMuseDigital::switchToNextRegion(int track) { - // TODO - finish int num_regions = _sound->getNumRegions(_track[track].soundHandle); + int num_jumps = _sound->getNumJumps(_track[track].soundHandle); + if ((_scumm->_gameId == GID_FT) && (num_jumps != 0)) { + _track[track].regionOffset = 0; + return; + } + if (++_track[track].curRegion == num_regions) { _track[track].toBeRemoved = true; return; } + + int region = checkJumpByRegion(track, _track[track].curRegion); + if (region != -1) + _track[track].curRegion = region; _track[track].regionOffset = 0; } @@ -503,8 +520,8 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int if (_ftSeqMusicTable[l].audioname[0] != 0) { for (r = 0; r < _scumm->_numAudioNames; r++) { if (strcmp(_ftSeqMusicTable[l].audioname, &_scumm->_audioNames[r * 9]) == 0) { - startMusic(r); - parseScriptCmds(12, r, 0x600, _ftSeqMusicTable[l].volume, 0, 0, 0, 0); +// startMusic(r); +// parseScriptCmds(12, r, 0x600, _ftSeqMusicTable[l].volume, 0, 0, 0, 0); } } } diff --git a/scumm/imuse_digi/dimuse.h b/scumm/imuse_digi/dimuse.h index 5b511b1f6b..660545b352 100644 --- a/scumm/imuse_digi/dimuse.h +++ b/scumm/imuse_digi/dimuse.h @@ -76,6 +76,7 @@ private: static void timer_handler(void *refConf); void callback(); void switchToNextRegion(int track); + int checkJumpByRegion(int track, int region); void startSound(int soundId, const char *soundName, int soundType, int soundGroup, AudioStream *input); public: diff --git a/scumm/imuse_digi/dimuse_sndmgr.cpp b/scumm/imuse_digi/dimuse_sndmgr.cpp index 9cd94fe8d1..d909e086e5 100644 --- a/scumm/imuse_digi/dimuse_sndmgr.cpp +++ b/scumm/imuse_digi/dimuse_sndmgr.cpp @@ -46,7 +46,7 @@ ImuseDigiSndMgr::~ImuseDigiSndMgr() { void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) { if (READ_UINT32(ptr) == MKID('Crea')) { - int size, rate, loops; + int size = 0, rate = 0, loops = 0; _sounds[slot].resPtr = readVOCFromMemory(ptr, size, rate, loops); _sounds[slot].freeResPtr = true; _sounds[slot].bits = 8; @@ -54,7 +54,8 @@ void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) { _sounds[slot].channels = 1; _sounds[slot].region[0].length = size; _sounds[slot].numRegions++; - _sounds[slot].numJumps++; + if (loops != 0) + _sounds[slot].numJumps++; } else if (READ_UINT32(ptr) == MKID('iMUS')) { uint32 tag; int32 size = 0; |