aboutsummaryrefslogtreecommitdiff
path: root/scumm/imuse_digi
diff options
context:
space:
mode:
authorPaweł Kołodziejski2004-01-07 05:58:12 +0000
committerPaweł Kołodziejski2004-01-07 05:58:12 +0000
commit1e2ff5a469a0ffef36a871a47439e382764c202d (patch)
tree7672f619b2a3e725fefb426c2406d98935b73576 /scumm/imuse_digi
parentae4cd2291fdd13bdaa83225f2f90856e8d2eb23b (diff)
downloadscummvm-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.cpp23
-rw-r--r--scumm/imuse_digi/dimuse.h1
-rw-r--r--scumm/imuse_digi/dimuse_sndmgr.cpp5
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;