[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.529.2.7,2.529.2.8 resource_v7he.cpp,1.46.2.3,1.46.2.4 script_v100he.cpp,2.173.2.4,2.173.2.5 script_v7he.cpp,2.166.2.5,2.166.2.6 script_v80he.cpp,2.125.2.2,2.125.2.3 script_v90he.cpp,2.281.2.4,2.281.2.5 scumm.cpp,1.603.2.31,1.603.2.32 scumm.h,1.647.2.11,1.647.2.12 sound.cpp,1.479.2.7,1.479.2.8 sound.h,1.92.2.2,1.92.2.3 sound_he.cpp,2.10.2.2,2.10.2.3 vars.cpp,1.150.2.6,1.150.2.7
kirben
kirben at users.sourceforge.net
Mon Jan 16 01:55:04 CET 2006
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17006/scumm
Modified Files:
Tag: branch-0-8-0
intern.h resource_v7he.cpp script_v100he.cpp script_v7he.cpp
script_v80he.cpp script_v90he.cpp scumm.cpp scumm.h sound.cpp
sound.h sound_he.cpp vars.cpp
Log Message:
Backport changes for sound system in HE games.
Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.529.2.7
retrieving revision 2.529.2.8
diff -u -d -r2.529.2.7 -r2.529.2.8
--- intern.h 15 Jan 2006 09:56:24 -0000 2.529.2.7
+++ intern.h 16 Jan 2006 09:54:07 -0000 2.529.2.8
@@ -1075,7 +1075,7 @@
const OpcodeEntryV80he *_opcodesV80he;
- int32 _heSBNGId;
+ int32 _heSndResId, _curSndId, _sndPtrOffs, _sndTmrOffs;
public:
ScummEngine_v80he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16], int substResFileNameIndex);
@@ -1091,11 +1091,13 @@
virtual void clearDrawQueues();
+ void createSound(int snd1id, int snd2id);
+
void drawLine(int x1, int y1, int x, int unk1, int unk2, int type, int id);
void drawPixel(int x, int y, int flags);
/* HE version 80 script opcodes */
- void o80_loadSBNG();
+ void o80_createSound();
void o80_getFileSize();
void o80_stringToInt();
void o80_getSoundVar();
@@ -1288,7 +1290,7 @@
void o100_resourceRoutines();
void o100_wizImageOps();
void o100_jumpToScript();
- void o100_loadSBNG();
+ void o100_createSound();
void o100_dim2dim2Array();
void o100_paletteOps();
void o100_jumpToScriptUnk();
Index: resource_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource_v7he.cpp,v
retrieving revision 1.46.2.3
retrieving revision 1.46.2.4
diff -u -d -r1.46.2.3 -r1.46.2.4
--- resource_v7he.cpp 29 Oct 2005 01:15:06 -0000 1.46.2.3
+++ resource_v7he.cpp 16 Jan 2006 09:54:07 -0000 1.46.2.4
@@ -1803,4 +1803,120 @@
return size;
}
+void ScummEngine_v80he::createSound(int snd1id, int snd2id) {
+ debug(0, "createSound: snd1id %d snd2id %d", snd1id, snd2id);
+
+ byte *snd1Ptr, *snd2Ptr;
+ byte *sbng1Ptr, *sbng2Ptr;
+ byte *sdat1Ptr, *sdat2Ptr;
+ byte *src, *dst, *tmp;
+ int len, offs, size;
+ int sdat1size, sdat2size;
+
+ if (snd2id == -1) {
+ _sndPtrOffs = 0;
+ _sndTmrOffs = 0;
+ return;
+ }
+
+ if (snd1id != _curSndId) {
+ _curSndId = snd1id;
+ _sndPtrOffs = 0;
+ _sndTmrOffs = 0;
+ }
+
+ snd1Ptr = getResourceAddress(rtSound, snd1id);
+ assert(snd1Ptr);
+ snd2Ptr = getResourceAddress(rtSound, snd2id);
+ assert(snd2Ptr);
+
+ int i;
+ int chan = -1;
+ for (i = 0; i < ARRAYSIZE(_sound->_heChannel); i++) {
+ if (_sound->_heChannel[i].sound == snd1id)
+ chan = i;
+ }
+
+ sbng1Ptr = heFindResource(MKID('SBNG'), snd1Ptr);
+ sbng2Ptr = heFindResource(MKID('SBNG'), snd2Ptr);
+
+ if (sbng1Ptr != NULL && sbng2Ptr != NULL) {
+ if (chan != -1 && _sound->_heChannel[chan].codeOffs > 0) {
+ int curOffs = _sound->_heChannel[chan].codeOffs;
+
+ src = snd1Ptr + curOffs;
+ dst = sbng1Ptr + 8;
+ size = READ_BE_UINT32(sbng1Ptr + 4);
+ len = sbng1Ptr - snd1Ptr + size - curOffs;
+
+ byte *data = (byte *)malloc(len);
+ memcpy(data, src, len);
+ memcpy(dst, data, len);
+ free(data);
+
+ dst = sbng1Ptr + 8;
+ while ((size = READ_LE_UINT16(dst)) != 0)
+ dst += size;
+ } else {
+ dst = sbng1Ptr + 8;
+ }
+
+ _sound->_heChannel[chan].codeOffs = sbng1Ptr - snd1Ptr + 8;
+
+ tmp = sbng2Ptr + 8;
+ while ((offs = READ_LE_UINT16(tmp)) != 0) {
+ tmp += offs;
+ }
+
+ src = sbng2Ptr + 8;
+ len = tmp - sbng2Ptr - 6;
+ memcpy(dst, src, len);
+
+ int32 time;
+ while ((size = READ_LE_UINT16(dst)) != 0) {
+ time = READ_LE_UINT32(dst + 2);
+ time += _sndTmrOffs;
+ WRITE_LE_UINT32(dst + 2, time);
+ dst += size;
+ }
+ }
+
+ sdat1Ptr = heFindResource(MKID('SDAT'), snd1Ptr);
+ assert(sdat1Ptr);
+ sdat2Ptr = heFindResource(MKID('SDAT'), snd2Ptr);
+ assert(sdat2Ptr);
+
+ sdat1size = READ_BE_UINT32(sdat1Ptr + 4) - 8 - _sndPtrOffs;
+ sdat2size = READ_BE_UINT32(sdat2Ptr + 4) - 8;
+
+ debug(0, "SDAT size1 %d size2 %d", sdat1size, sdat2size);
+ if (sdat2size < sdat1size) {
+ src = sdat2Ptr + 8;
+ dst = sdat1Ptr + 8 + _sndPtrOffs;
+ len = sdat2size;
+
+ memcpy(dst, src, len);
+
+ _sndPtrOffs += sdat2size;
+ _sndTmrOffs += sdat2size;
+ } else {
+ src = sdat2Ptr + 8;
+ dst = sdat1Ptr + 8 + _sndPtrOffs;
+ len = sdat1size;
+
+ memcpy(dst, src, len);
+
+ if (sdat2size != sdat1size) {
+ src = sdat2Ptr + 8 + sdat1size;
+ dst = sdat1Ptr + 8;
+ len = sdat2size - sdat1size;
+
+ memcpy(dst, src, len);
+ }
+
+ _sndPtrOffs = sdat2size - sdat1size;
+ _sndTmrOffs += sdat2size;
+ }
+}
+
} // End of namespace Scumm
Index: script_v100he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v100he.cpp,v
retrieving revision 2.173.2.4
retrieving revision 2.173.2.5
diff -u -d -r2.173.2.4 -r2.173.2.5
--- script_v100he.cpp 15 Jan 2006 06:45:15 -0000 2.173.2.4
+++ script_v100he.cpp 16 Jan 2006 09:54:07 -0000 2.173.2.5
@@ -67,7 +67,7 @@
OPCODE(o6_loadRoomWithEgo),
OPCODE(o6_invalid),
OPCODE(o72_setFilePath),
- OPCODE(o100_loadSBNG),
+ OPCODE(o100_createSound),
/* 18 */
OPCODE(o6_cutscene),
OPCODE(o6_pop),
@@ -707,28 +707,25 @@
runScript(script, (flags == 128 || flags == 129), (flags == 130 || flags == 129), args);
}
-void ScummEngine_v100he::o100_loadSBNG() {
- // Loads SBNG sound resource
+void ScummEngine_v100he::o100_createSound() {
byte subOp = fetchScriptByte();
switch (subOp) {
case 0:
- _heSBNGId = pop();
+ _heSndResId = pop();
break;
case 53:
- //loadSBNG(_heSBNGId, -1);
+ createSound(_heSndResId, -1);
break;
case 92:
// dummy case
break;
case 128:
- //loadSBNG(_heSBNGId, pop();
- pop();
+ createSound(_heSndResId, pop());
break;
default:
- error("o100_loadSBNG: default case %d", subOp);
+ error("o100_createSound: default case %d", subOp);
}
- debug(1,"o100_loadSBNG stub (%d)",subOp);
}
void ScummEngine_v100he::o100_dim2dimArray() {
@@ -1669,7 +1666,7 @@
_heSndSoundId = pop();
_heSndOffset = 0;
_heSndSoundFreq = 11025;
- _heSndChannel = VAR(VAR_MUSIC_CHANNEL);
+ _heSndChannel = VAR(VAR_SOUND_CHANNEL);
_heSndFlags = 0;
break;
case 133:
Index: script_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v7he.cpp,v
retrieving revision 2.166.2.5
retrieving revision 2.166.2.6
diff -u -d -r2.166.2.5 -r2.166.2.6
--- script_v7he.cpp 15 Jan 2006 06:45:15 -0000 2.166.2.5
+++ script_v7he.cpp 16 Jan 2006 09:54:07 -0000 2.166.2.6
@@ -463,7 +463,7 @@
_heSndSoundId = pop();
_heSndOffset = 0;
_heSndSoundFreq = 11025;
- _heSndChannel = VAR(VAR_MUSIC_CHANNEL);
+ _heSndChannel = VAR(VAR_SOUND_CHANNEL);
break;
case 245:
_heSndFlags |= 1;
Index: script_v80he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v80he.cpp,v
retrieving revision 2.125.2.2
retrieving revision 2.125.2.3
diff -u -d -r2.125.2.2 -r2.125.2.3
--- script_v80he.cpp 15 Jan 2006 06:45:15 -0000 2.125.2.2
+++ script_v80he.cpp 16 Jan 2006 09:54:07 -0000 2.125.2.3
@@ -129,7 +129,7 @@
OPCODE(o6_writeWordVar),
/* 44 */
OPCODE(o6_invalid),
- OPCODE(o80_loadSBNG),
+ OPCODE(o80_createSound),
OPCODE(o80_getFileSize),
OPCODE(o6_wordArrayWrite),
/* 48 */
@@ -376,28 +376,25 @@
return _opcodesV80he[i].desc;
}
-void ScummEngine_v80he::o80_loadSBNG() {
- // Loads SBNG sound resource
+void ScummEngine_v80he::o80_createSound() {
byte subOp = fetchScriptByte();
switch (subOp) {
case 27:
- //loadSBNG(_heSBNGId, pop();
- pop();
+ createSound(_heSndResId, pop());
break;
case 217:
- //loadSBNG(_heSBNGId, -1);
+ createSound(_heSndResId, -1);
break;
case 232:
- _heSBNGId = pop();
+ _heSndResId = pop();
break;
case 255:
// dummy case
break;
default:
- error("o80_loadSBNG: default case %d", subOp);
+ error("o80_createSound: default case %d", subOp);
}
- debug(1,"o80_loadSBNG stub (%d)",subOp);
}
void ScummEngine_v80he::o80_getFileSize() {
Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.281.2.4
retrieving revision 2.281.2.5
diff -u -d -r2.281.2.4 -r2.281.2.5
--- script_v90he.cpp 15 Jan 2006 06:45:15 -0000 2.281.2.4
+++ script_v90he.cpp 16 Jan 2006 09:54:07 -0000 2.281.2.5
@@ -126,7 +126,7 @@
OPCODE(o6_writeWordVar),
/* 44 */
OPCODE(o90_getObjectData),
- OPCODE(o80_loadSBNG),
+ OPCODE(o80_createSound),
OPCODE(o80_getFileSize),
OPCODE(o6_wordArrayWrite),
/* 48 */
Index: scumm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.cpp,v
retrieving revision 1.603.2.31
retrieving revision 1.603.2.32
diff -u -d -r1.603.2.31 -r1.603.2.32
--- scumm.cpp 15 Jan 2006 09:56:25 -0000 1.603.2.31
+++ scumm.cpp 16 Jan 2006 09:54:07 -0000 1.603.2.32
@@ -1346,10 +1346,10 @@
VAR_REDRAW_ALL_ACTORS = 0xFF;
VAR_SKIP_RESET_TALK_ACTOR = 0xFF;
- VAR_MUSIC_CHANNEL = 0xFF;
VAR_SOUND_CHANNEL = 0xFF;
+ VAR_TALK_CHANNEL = 0xFF;
VAR_SOUNDCODE_TMR = 0xFF;
- VAR_DEFAULT_SOUND_CHANNEL = 0xFF;
+ VAR_RESERVED_SOUND_CHANNELS = 0xFF;
VAR_MAIN_SCRIPT = 0xFF;
@@ -1619,7 +1619,10 @@
ScummEngine_v80he::ScummEngine_v80he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16], int substResFileNameIndex)
: ScummEngine_v72he(detector, syst, gs, md5sum, substResFileNameIndex) {
- _heSBNGId = 0;
+ _heSndResId = 0;
+ _curSndId = 0;
+ _sndPtrOffs = 0;
+ _sndTmrOffs = 0;
}
ScummEngine_v90he::ScummEngine_v90he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16], int substResFileNameIndex)
Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.647.2.11
retrieving revision 1.647.2.12
diff -u -d -r1.647.2.11 -r1.647.2.12
--- scumm.h 15 Jan 2006 06:45:15 -0000 1.647.2.11
+++ scumm.h 16 Jan 2006 09:54:07 -0000 1.647.2.12
@@ -1329,10 +1329,10 @@
byte VAR_REDRAW_ALL_ACTORS;
byte VAR_SKIP_RESET_TALK_ACTOR;
- byte VAR_MUSIC_CHANNEL;
byte VAR_SOUND_CHANNEL;
+ byte VAR_TALK_CHANNEL;
byte VAR_SOUNDCODE_TMR;
- byte VAR_DEFAULT_SOUND_CHANNEL;
+ byte VAR_RESERVED_SOUND_CHANNELS;
byte VAR_MAIN_SCRIPT;
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.479.2.7
retrieving revision 1.479.2.8
diff -u -d -r1.479.2.7 -r1.479.2.8
--- sound.cpp 15 Jan 2006 06:45:15 -0000 1.479.2.7
+++ sound.cpp 16 Jan 2006 09:54:07 -0000 1.479.2.8
@@ -111,7 +111,7 @@
if (_vm->_heversion >= 60 && _soundQue2Pos) {
int i = _soundQue2Pos;
while (i--) {
- if (_soundQue2[i].sound == sound)
+ if (_soundQue2[i].sound == sound && !(heFlags & 2))
return;
}
}
@@ -697,7 +697,6 @@
return val;
}
-
int Sound::isSoundRunning(int sound) const {
#ifndef DISABLE_SCUMM_7_8
if (_vm->_imuseDigital)
Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.h,v
retrieving revision 1.92.2.2
retrieving revision 1.92.2.3
diff -u -d -r1.92.2.2 -r1.92.2.3
--- sound.h 15 Jan 2006 06:45:15 -0000 1.92.2.2
+++ sound.h 16 Jan 2006 09:54:07 -0000 1.92.2.3
@@ -94,13 +94,14 @@
HEMusic *_heMusic;
int16 _heMusicTracks;
+public: // Used by createSound()
struct {
int sound;
int codeOffs;
int priority;
int sbngBlock;
int soundVars[27];
- } _heChannel[9];
+ } _heChannel[8];
public:
Audio::SoundHandle _talkChannelHandle; // Handle of mixer channel actor is talking on
@@ -141,6 +142,7 @@
// HE specific
bool getHEMusicDetails(int id, int &musicOffs, int &musicSize);
+ int findFreeSoundChannel();
int isSoundCodeUsed(int sound);
int getSoundPos(int sound);
int getSoundVar(int sound, int var);
Index: sound_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound_he.cpp,v
retrieving revision 2.10.2.2
retrieving revision 2.10.2.3
diff -u -d -r2.10.2.2 -r2.10.2.3
--- sound_he.cpp 15 Jan 2006 06:49:47 -0000 2.10.2.2
+++ sound_he.cpp 16 Jan 2006 09:54:07 -0000 2.10.2.3
@@ -43,6 +43,27 @@
namespace Scumm {
+int Sound::findFreeSoundChannel() {
+ int chan, min;
+
+ min = _vm->VAR(_vm->VAR_RESERVED_SOUND_CHANNELS);
+ if (min == 0) {
+ _vm->VAR(_vm->VAR_RESERVED_SOUND_CHANNELS) = 8;
+ return 1;
+ }
+
+ if (min < 8) {
+ for (chan = min; min < ARRAYSIZE(_heChannel); chan++) {
+ if (_vm->_mixer->isSoundHandleActive(_heSoundChannels[chan]) == 0)
+ return chan;
+ }
+ } else {
+ return 1;
+ }
+
+ return min;
+}
+
int Sound::isSoundCodeUsed(int sound) {
int chan = -1;
for (int i = 0; i < ARRAYSIZE(_heChannel); i ++) {
@@ -86,7 +107,7 @@
}
if (chan != -1) {
- debug(0, "getSoundVar: sound %d var %d result %d", sound, var, _heChannel[chan].soundVars[var]);
+ debug(1, "getSoundVar: sound %d var %d result %d", sound, var, _heChannel[chan].soundVars[var]);
return _heChannel[chan].soundVars[var];
} else {
return 0;
@@ -103,7 +124,7 @@
}
if (chan != -1) {
- debug(0, "setSoundVar: sound %d var %d val %d", sound, var, val);
+ debug(1, "setSoundVar: sound %d var %d val %d", sound, var, val);
_heChannel[chan].soundVars[var] = val;
}
}
@@ -242,14 +263,18 @@
case 48: // Add
var = READ_LE_UINT16(codePtr); codePtr += 2;;
val = READ_LE_UINT16(codePtr); codePtr += 2;;
-
+ if (edi == 2) {
+ val = getSoundVar(sound, val);
+ }
val = getSoundVar(sound, var) + val;
setSoundVar(sound, var, val);
break;
case 56: // Subtract
var = READ_LE_UINT16(codePtr); codePtr += 2;;
val = READ_LE_UINT16(codePtr); codePtr += 2;;
-
+ if (edi == 2) {
+ val = getSoundVar(sound, val);
+ }
val = getSoundVar(sound, var) - val;
setSoundVar(sound, var, val);
break;
@@ -259,7 +284,6 @@
if (edi == 2) {
val = getSoundVar(sound, val);
}
-
val = getSoundVar(sound, var) * val;
setSoundVar(sound, var, val);
break;
@@ -269,7 +293,6 @@
if (edi == 2) {
val = getSoundVar(sound, val);
}
-
val = getSoundVar(sound, var) / val;
setSoundVar(sound, var, val);
break;
@@ -290,27 +313,23 @@
}
void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {
- debug(0,"playHESound: soundID %d heOffset %d heChannel %d heFlags %d", soundID, heOffset, heChannel, heFlags);
byte *ptr, *spoolPtr;
char *sound;
int size = -1;
- int rate;
+ int priority, rate;
byte flags = Audio::Mixer::FLAG_UNSIGNED | Audio::Mixer::FLAG_AUTOFREE;
- if (heChannel == -1) {
- if (_vm->_heversion >= 95 && _vm->VAR(_vm->VAR_DEFAULT_SOUND_CHANNEL) != 0) {
- heChannel = _vm->VAR(_vm->VAR_DEFAULT_SOUND_CHANNEL);
- } else {
- heChannel = 1;
- }
+ if (heChannel == -1)
+ heChannel = (_vm->VAR_RESERVED_SOUND_CHANNELS != 0xFF) ? findFreeSoundChannel() : 1;
+
+ debug(0,"playHESound: soundID %d heOffset %d heChannel %d heFlags %d", soundID, heOffset, heChannel, heFlags);
+
+ if (soundID >= 10000) {
+ // Special codes, used in pjgames
+ return;
}
if (soundID > _vm->_numSounds) {
- if (soundID >= 10000) {
- // Special codes, used in pjgames
- return;
- }
-
int music_offs;
char buf[32], buf1[128];
Common::File musicFile;
@@ -342,9 +361,8 @@
}
musicFile.close();
- _vm->_mixer->stopID(_currentMusic);
- _currentMusic = soundID;
if (_vm->_heversion == 70) {
+ _vm->_mixer->stopHandle(_heSoundChannels[heChannel]);
_vm->_mixer->playRaw(&_heSoundChannels[heChannel], spoolPtr, size, 11025, flags, soundID);
return;
}
@@ -360,10 +378,19 @@
return;
}
+ // TODO: Extra sound flags
+ if (heFlags & 1) {
+ flags |= Audio::Mixer::FLAG_LOOP;
+ }
+
// Support for sound in later Backyard sports games
- if (READ_UINT32(ptr) == MKID('RIFF')) {
+ if (READ_UINT32(ptr) == MKID('RIFF') || READ_UINT32(ptr) == MKID('WSOU')) {
uint16 type;
int blockAlign;
+
+ if (READ_UINT32(ptr) == MKID('WSOU'))
+ ptr += 8;
+
size = READ_LE_UINT32(ptr + 4);
Common::MemoryReadStream stream(ptr, size);
@@ -382,17 +409,25 @@
sound = (char *)malloc(size);
memcpy(sound, ptr + stream.pos(), size);
}
+ _vm->_mixer->stopHandle(_heSoundChannels[heChannel]);
_vm->_mixer->playRaw(&_heSoundChannels[heChannel], sound, size, rate, flags, soundID);
}
// Support for sound in Humongous Entertainment games
else if (READ_UINT32(ptr) == MKID('DIGI') || READ_UINT32(ptr) == MKID('TALK')) {
byte *sndPtr = ptr;
- int priority;
priority = *(ptr + 18);
rate = READ_LE_UINT16(ptr + 22);
ptr += 8 + READ_BE_UINT32(ptr + 12);
+ if (_vm->_mixer->isSoundHandleActive(_heSoundChannels[heChannel])) {
+ int curSnd = _heChannel[heChannel].sound;
+ if (curSnd == 1 && soundID != 1)
+ return;
+ if (curSnd != 0 && curSnd != 1 && soundID != 1 && _heChannel[heChannel].priority > priority)
+ return;
+ }
+
int codeOffs = -1;
if (READ_UINT32(ptr) == MKID('SBNG')) {
codeOffs = ptr - sndPtr + 8;
@@ -414,14 +449,10 @@
_overrideFreq = 0;
}
- // TODO
- if (heFlags & 1) {
- //flags |= Audio::Mixer::FLAG_LOOP;
- }
-
// Allocate a sound buffer, copy the data into it, and play
sound = (char *)malloc(size);
memcpy(sound, ptr + heOffset + 8, size);
+ _vm->_mixer->stopHandle(_heSoundChannels[heChannel]);
_vm->_mixer->playRaw(&_heSoundChannels[heChannel], sound, size, rate, flags, soundID);
_vm->setHETimer(heChannel + 4);
@@ -433,12 +464,13 @@
}
// Support for PCM music in 3DO versions of Humongous Entertainment games
else if (READ_UINT32(ptr) == MKID('MRAW')) {
+ priority = *(ptr + 18);
+ rate = READ_LE_UINT16(ptr + 22);
ptr += 8 + READ_BE_UINT32(ptr+12);
- if (READ_UINT32(ptr) != MKID('SDAT'))
- return;
+ assert(READ_UINT32(ptr) == MKID('SDAT'));
size = READ_BE_UINT32(ptr+4) - 8;
- rate = 22050;
+
flags = Audio::Mixer::FLAG_AUTOFREE;
// Allocate a sound buffer, copy the data into it, and play
@@ -478,7 +510,7 @@
ptr = _vm->getResourceAddress(rtSound, 1);
_sfxFile->read(ptr, size);
- int channel = (_vm->VAR_SOUND_CHANNEL != 0xFF) ? _vm->VAR(_vm->VAR_SOUND_CHANNEL) : 0;
+ int channel = (_vm->VAR_TALK_CHANNEL != 0xFF) ? _vm->VAR(_vm->VAR_TALK_CHANNEL) : 0;
addSoundToQueue2(1, 0, channel, 0);
}
Index: vars.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/vars.cpp,v
retrieving revision 1.150.2.6
retrieving revision 1.150.2.7
diff -u -d -r1.150.2.6 -r1.150.2.7
--- vars.cpp 15 Jan 2006 09:56:25 -0000 1.150.2.6
+++ vars.cpp 16 Jan 2006 09:54:08 -0000 1.150.2.7
@@ -215,8 +215,8 @@
VAR_MUSIC_TIMER = 0xFF;
VAR_NUM_SOUND_CHANNELS = 9;
- VAR_SOUND_CHANNEL = 10;
- VAR_MUSIC_CHANNEL = 14;
+ VAR_TALK_CHANNEL = 10;
+ VAR_SOUND_CHANNEL = 14;
}
void ScummEngine_v72he::setupScummVars() {
@@ -267,8 +267,8 @@
VAR_CHARINC = 48;
VAR_TALK_ACTOR = 49;
VAR_LAST_SOUND = 50;
- VAR_SOUND_CHANNEL = 51;
- VAR_MUSIC_CHANNEL = 52;
+ VAR_TALK_CHANNEL = 51;
+ VAR_SOUND_CHANNEL = 52;
VAR_MEMORY_PERFORMANCE = 57;
VAR_VIDEO_PERFORMANCE = 58;
@@ -313,7 +313,7 @@
VAR_U32_VERSION = 107;
VAR_U32_ARRAY_UNK = 116;
VAR_WIZ_TCOLOR = 117;
- VAR_DEFAULT_SOUND_CHANNEL = 120;
+ VAR_RESERVED_SOUND_CHANNELS = 120;
}
if (_heversion >= 98) {
VAR_SKIP_RESET_TALK_ACTOR = 125;
@@ -580,8 +580,8 @@
VAR(VAR_MACHINE_SPEED) = 13;
VAR(VAR_NUM_SOUND_CHANNELS) = 8;
- VAR(VAR_MUSIC_CHANNEL) = 1;
- VAR(VAR_SOUND_CHANNEL) = 2;
+ VAR(VAR_SOUND_CHANNEL) = 1;
+ VAR(VAR_TALK_CHANNEL) = 2;
}
void ScummEngine_v72he::initScummVars() {
More information about the Scummvm-git-logs
mailing list