From 5fc53e262e01e905ddb093d7228f00d73b8b4ab3 Mon Sep 17 00:00:00 2001 From: Paweł Kołodziejski Date: Sat, 10 Jan 2009 13:04:33 +0000 Subject: - added initial radio chatter sfx, still not fully correct - remove obsolete mixerStreamRunning track variable svn-id: r35801 --- engines/scumm/imuse_digi/dimuse.cpp | 23 ++++++++++++++++++++++- engines/scumm/imuse_digi/dimuse.h | 4 ++++ engines/scumm/imuse_digi/dimuse_track.h | 1 - engines/scumm/saveload.h | 2 +- engines/scumm/script_v6.cpp | 2 +- 5 files changed, 28 insertions(+), 4 deletions(-) (limited to 'engines/scumm') 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"); -- cgit v1.2.3