diff options
-rw-r--r-- | scumm/akos.cpp | 9 | ||||
-rw-r--r-- | scumm/script_v7he.cpp | 2 | ||||
-rw-r--r-- | scumm/sound.cpp | 10 |
3 files changed, 15 insertions, 6 deletions
diff --git a/scumm/akos.cpp b/scumm/akos.cpp index 25d8907b40..c36fff7391 100644 --- a/scumm/akos.cpp +++ b/scumm/akos.cpp @@ -1538,7 +1538,6 @@ bool ScummEngine::akos_increaseAnim(Actor *a, int chan, const byte *aksq, const a->_flip = GW(2) != 0; continue; case AKC_CmdQue3: - case AKC_C042: if (_heversion >= 61) tmp = GB(2); else @@ -1662,8 +1661,11 @@ bool ScummEngine::akos_increaseAnim(Actor *a, int chan, const byte *aksq, const break; } continue; + case AKC_C042: + akos_queCommand(9, a, a->_sound[GB(2)], 0); + continue; case AKC_C044: - akos_queCommand(3, a, a->_sound[a->getAnimVar(GB(2))], 0); + akos_queCommand(9, a, a->_sound[a->getAnimVar(GB(2))], 0); continue; case AKC_C045: a->setUserCondition(GB(3), a->getAnimVar(GB(4))); @@ -1786,6 +1788,9 @@ void ScummEngine::akos_processQueue() { actorTalk(a->_heTalkQueue[param_1].sentence); break; + case 9: + _sound->addSoundToQueue(param_1, 0, -1, 4); + break; default: error("akos_queCommand(%d,%d,%d,%d)", cmd, a->_number, param_1, param_2); } diff --git a/scumm/script_v7he.cpp b/scumm/script_v7he.cpp index 892a1a990c..b5e7ee5e66 100644 --- a/scumm/script_v7he.cpp +++ b/scumm/script_v7he.cpp @@ -436,7 +436,7 @@ void ScummEngine_v70he::o70_startSound() { value = pop(); var = pop(); _heSndSoundId = pop(); - debug(0,"o70_startSound: case 29 (snd %d, var %d, value %d)", _heSndSoundId, var, value); + debug(0,"o70_startSound: case 23 (snd %d, var %d, value %d)", _heSndSoundId, var, value); break; case 25: value = pop(); diff --git a/scumm/sound.cpp b/scumm/sound.cpp index 8d97c6f362..9102ab7bd0 100644 --- a/scumm/sound.cpp +++ b/scumm/sound.cpp @@ -328,7 +328,7 @@ void Sound::playSound(int soundID, int heOffset, int heChannel, int heFlags) { _vm->_mixer->playRaw(NULL, sound, size, rate, flags, soundID); } - // Support for later Backyard sports games sounds + // Support for sound in later Backyard sports games else if (READ_UINT32(ptr) == MKID('RIFF')) { uint16 type; int blockAlign; @@ -352,12 +352,16 @@ void Sound::playSound(int soundID, int heOffset, int heChannel, int heFlags) { } _vm->_mixer->playRaw(&_heSoundChannels[heChannel], sound, size, rate, flags, soundID); } - // Support for Putt-Putt sounds - very hackish, too 8-) + // Support for sound in Humongous Entertainment games else if (READ_UINT32(ptr) == MKID('DIGI') || READ_UINT32(ptr) == MKID('TALK') || READ_UINT32(ptr) == MKID('HSHD')) { + int priority; + if (READ_UINT32(ptr) == MKID('HSHD')) { + priority = READ_LE_UINT16(ptr + 10); rate = READ_LE_UINT16(ptr + 14); ptr += READ_BE_UINT32(ptr + 4); } else { + priority = READ_LE_UINT16(ptr + 18); rate = READ_LE_UINT16(ptr + 22); ptr += 8 + READ_BE_UINT32(ptr + 12); } @@ -391,8 +395,8 @@ void Sound::playSound(int soundID, int heOffset, int heChannel, int heFlags) { memcpy(sound, ptr + heOffset + 8, size); _vm->_mixer->playRaw(&_heSoundChannels[heChannel], sound, size, rate, flags, soundID); } + // Support for PCM music in 3DO versions of Humongous Entertainment games else if (READ_UINT32(ptr) == MKID('MRAW')) { - // pcm music in 3DO humongous games ptr += 8 + READ_BE_UINT32(ptr+12); if (READ_UINT32(ptr) != MKID('SDAT')) return; |