aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Kołodziejski2009-01-10 13:04:33 +0000
committerPaweł Kołodziejski2009-01-10 13:04:33 +0000
commit5fc53e262e01e905ddb093d7228f00d73b8b4ab3 (patch)
tree436d8d0e573ea9834dab64bcd05d9f9c8e34c039
parent6c27a9f00818ce98b7fe1d68fcf237c4b60396da (diff)
downloadscummvm-rg350-5fc53e262e01e905ddb093d7228f00d73b8b4ab3.tar.gz
scummvm-rg350-5fc53e262e01e905ddb093d7228f00d73b8b4ab3.tar.bz2
scummvm-rg350-5fc53e262e01e905ddb093d7228f00d73b8b4ab3.zip
- added initial radio chatter sfx, still not fully correct
- remove obsolete mixerStreamRunning track variable svn-id: r35801
-rw-r--r--engines/scumm/imuse_digi/dimuse.cpp23
-rw-r--r--engines/scumm/imuse_digi/dimuse.h4
-rw-r--r--engines/scumm/imuse_digi/dimuse_track.h1
-rw-r--r--engines/scumm/saveload.h2
-rw-r--r--engines/scumm/script_v6.cpp2
5 files changed, 28 insertions, 4 deletions
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp
index 2d9ce251a4..54c8c041c4 100644
--- a/engines/scumm/imuse_digi/dimuse.cpp
+++ b/engines/scumm/imuse_digi/dimuse.cpp
@@ -98,6 +98,7 @@ void IMuseDigital::resetState() {
memset(_attributes, 0, sizeof(_attributes));
_nextSeqToPlay = 0;
_stopingSequence = 0;
+ _radioChatterSFX = 0;
_triggerUsed = false;
}
@@ -112,6 +113,7 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
MKLINE(IMuseDigital, _curMusicSeq, sleInt32, VER(31)),
MKLINE(IMuseDigital, _curMusicCue, sleInt32, VER(31)),
MKLINE(IMuseDigital, _nextSeqToPlay, sleInt32, VER(31)),
+ MKLINE(IMuseDigital, _radioChatterSFX, sleByte, VER(76)),
MKARRAY(IMuseDigital, _attributes[0], sleInt32, 188, VER(31)),
MKEND()
};
@@ -128,7 +130,7 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
MKLINE(Track, used, sleByte, VER(31)),
MKLINE(Track, toBeRemoved, sleByte, VER(31)),
MKLINE(Track, souStreamUsed, sleByte, VER(31)),
- MKLINE(Track, mixerStreamRunning, sleByte, VER(31)), // FIXME: OBSOLETE, remove this!
+ MK_OBSOLETE(Track, mixerStreamRunning, sleByte, VER(31), VER(76)),
MKLINE(Track, soundPriority, sleInt32, VER(31)),
MKLINE(Track, regionOffset, sleInt32, VER(31)),
MK_OBSOLETE(Track, trackOffset, sleInt32, VER(31), VER(31)),
@@ -309,6 +311,25 @@ void IMuseDigital::callback() {
}
} else if (bits == 8) {
curFeedSize = _sound->getDataFromRegion(track->soundDesc, track->curRegion, &tmpSndBufferPtr, track->regionOffset, feedSize);
+ if (_radioChatterSFX && track->volGroupId == IMUSE_VOLGRP_VOICE) {
+ byte *buf = new byte[curFeedSize];
+ int index = 0;
+ int count = curFeedSize;
+ byte *ptr_1 = tmpSndBufferPtr;
+ byte *ptr_2 = tmpSndBufferPtr + 4;
+ int value = ptr_1[0] - 0x80;
+ value += ptr_1[1] - 0x80;
+ value += ptr_1[2] - 0x80;
+ value += ptr_1[3] - 0x80;
+ do {
+ int t = *ptr_1++;
+ int v = t - (value / 4);
+ value = (int)(*(ptr_2++) - 0x80) + (value - t + 128);
+ buf[index++] = (byte)v * 4;
+ } while (--count);
+ delete[] tmpSndBufferPtr;
+ tmpSndBufferPtr = buf;
+ }
if (channels == 2) {
curFeedSize &= ~1;
}
diff --git a/engines/scumm/imuse_digi/dimuse.h b/engines/scumm/imuse_digi/dimuse.h
index bcd6e45244..76fb8483ac 100644
--- a/engines/scumm/imuse_digi/dimuse.h
+++ b/engines/scumm/imuse_digi/dimuse.h
@@ -85,6 +85,7 @@ private:
int32 _curMusicSeq; // current or previous id of sequence music
int32 _curMusicCue; // current cue for current music. used in FT
int _stopingSequence;
+ bool _radioChatterSFX;
int32 makeMixerFlags(int32 flags);
static void timer_handler(void *refConf);
@@ -136,6 +137,9 @@ public:
void saveOrLoad(Serializer *ser);
void resetState();
+ void setRadioChatterSFX(bool state) {
+ _radioChatterSFX = state;
+ }
void setPriority(int soundId, int priority);
void setVolume(int soundId, int volume);
diff --git a/engines/scumm/imuse_digi/dimuse_track.h b/engines/scumm/imuse_digi/dimuse_track.h
index 2d4c673cf6..c2ed64a556 100644
--- a/engines/scumm/imuse_digi/dimuse_track.h
+++ b/engines/scumm/imuse_digi/dimuse_track.h
@@ -61,7 +61,6 @@ struct Track {
char soundName[15]; // sound name but also filename of sound in bundle data
bool used; // flag mean that track is used
bool toBeRemoved; // flag mean that track need to be free
- bool mixerStreamRunning; // flag mean sound mixer's stream is running OBSOLETE
bool souStreamUsed; // flag mean that track use stream from sou file
bool sndDataExtComp;// flag mean that sound data is compressed by scummvm tools
int32 soundPriority;// priority level of played sound (0-127)
diff --git a/engines/scumm/saveload.h b/engines/scumm/saveload.h
index 4f9899f961..8ed1ba1307 100644
--- a/engines/scumm/saveload.h
+++ b/engines/scumm/saveload.h
@@ -50,7 +50,7 @@ namespace Scumm {
* only saves/loads those which are valid for the version of the savegame
* which is being loaded/saved currently.
*/
-#define CURRENT_VER 75
+#define CURRENT_VER 76
/**
* An auxillary macro, used to specify savegame versions. We use this instead
diff --git a/engines/scumm/script_v6.cpp b/engines/scumm/script_v6.cpp
index c8534396db..f05db291e0 100644
--- a/engines/scumm/script_v6.cpp
+++ b/engines/scumm/script_v6.cpp
@@ -2613,7 +2613,7 @@ void ScummEngine_v7::o6_kernelSetFunctions() {
enqueueText(getStringAddressVar(VAR_STRING2DRAW), args[3], args[4], args[2], args[1], (args[0] == 16));
break;
case 20:
- // it's used for turn on/off 'RadioChatter' effect for voice in the dig, but i's not needed
+ _imuseDigital->setRadioChatterSFX(args[1]);
break;
case 107:
a = derefActor(args[1], "o6_kernelSetFunctions: 107");