aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/akos.cpp9
-rw-r--r--scumm/script_v7he.cpp2
-rw-r--r--scumm/sound.cpp10
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;