diff options
author | Joost Peters | 2003-07-23 19:33:34 +0000 |
---|---|---|
committer | Joost Peters | 2003-07-23 19:33:34 +0000 |
commit | fa2d02ce6d0e70e6b8200d218da1cd031234582a (patch) | |
tree | e6a6962aab86371ce379dd2621d8184736bd7eef /sky | |
parent | 9a3fca462ebb8b6f37ff7622c6145c192f639140 (diff) | |
download | scummvm-rg350-fa2d02ce6d0e70e6b8200d218da1cd031234582a.tar.gz scummvm-rg350-fa2d02ce6d0e70e6b8200d218da1cd031234582a.tar.bz2 scummvm-rg350-fa2d02ce6d0e70e6b8200d218da1cd031234582a.zip |
applied eriktorbjorn's patch (#776225 - 'BASS CD intro fixes')
svn-id: r9150
Diffstat (limited to 'sky')
-rw-r--r-- | sky/intro.cpp | 58 | ||||
-rw-r--r-- | sky/sound.cpp | 8 | ||||
-rw-r--r-- | sky/sound.h | 8 |
3 files changed, 33 insertions, 41 deletions
diff --git a/sky/intro.cpp b/sky/intro.cpp index e9e3bd3c32..84293e9582 100644 --- a/sky/intro.cpp +++ b/sky/intro.cpp @@ -40,6 +40,8 @@ #define WAITVOICE 13 #define LOADBG 14 // load new background sound #define PLAYBG 15 // play background sound +#define LOOPBG 16 // loop background sound +#define STOPBG 17 // stop background sound #define SEQEND 65535 // end of intro sequence #define IC_PREPARE_TEXT 20 // commands used in COMMANDFLIRT block @@ -235,80 +237,67 @@ uint16 SkyIntro::_mainIntroSeq[] = { uint16 SkyIntro::_cdIntroSeq[] = { PLAYVOICE, 59500, LOADBG, 59499, - PLAYBG, + LOOPBG, WAITVOICE, PLAYVOICE, 59504, - PLAYBG, SHOWSCREEN, CD_1_LOG, FADEUP, CD_PAL, BGFLIRT, CD_1, WAITVOICE, PLAYVOICE, CDV_02, - PLAYBG, WAITVOICE, STOPFLIRT, BGFLIRT, CD_2, PLAYVOICE, CDV_03, - PLAYBG, WAITVOICE, PLAYVOICE, CDV_04, - PLAYBG, WAITFLIRT, WAITVOICE, PLAYVOICE, CDV_05, - PLAYBG, DELAY, 2000, BGFLIRT, CD_3, WAITVOICE, PLAYVOICE, CDV_06, - PLAYBG, WAITFLIRT, WAITVOICE, PLAYVOICE, CDV_07, BGFLIRT, CD_5, - PLAYBG, WAITVOICE, PLAYVOICE, CDV_08, - PLAYBG, WAITVOICE, PLAYVOICE, CDV_09, - PLAYBG, WAITFLIRT, WAITVOICE, PLAYVOICE, CDV_10, BGFLIRT, CD_7, - PLAYBG, WAITVOICE, PLAYVOICE, CDV_11, - PLAYBG, WAITFLIRT, FADEDOWN, SHOWSCREEN, CD_11_LOG, FADEUP, CD_11_PAL, WAITVOICE, PLAYVOICE, CDV_12, - PLAYBG, DELAY, 1600, BGFLIRT, CD_11, WAITVOICE, PLAYVOICE, CDV_13, WAITVOICE, - PLAYBG, WAITFLIRT, WAITVOICE, - LOADBG, 59498, // quite heli PLAYVOICE, CDV_14, + LOADBG, 59498, // fade-in heli PLAYBG, DOFLIRT, CD_13, WAITVOICE, PLAYVOICE, CDV_15, - PLAYBG, FADEDOWN, SHOWSCREEN, CD_15_LOG, FADEUP, CD_15_PAL, WAITVOICE, + LOADBG, 59496, // quiet heli + LOOPBG, PLAYVOICE, CDV_16, - PLAYBG, WAITVOICE, PLAYVOICE, CDV_17, DELAY, 2000, @@ -316,32 +305,27 @@ uint16 SkyIntro::_cdIntroSeq[] = { WAITVOICE, BGFLIRT, CD_17, PLAYVOICE, CDV_18, - PLAYBG, + LOADBG, 59497, // loud heli + LOOPBG, WAITFLIRT, WAITVOICE, - LOADBG, 59496, // quiet heli FADEDOWN, SHOWSCREEN, CD_19_LOG, FADEUP, CD_19_PAL, PLAYVOICE, CDV_19, - PLAYBG, WAITVOICE, - LOADBG, 59496, PLAYVOICE, CDV_20, - PLAYBG, FADEDOWN, SHOWSCREEN, CD_20_LOG, FADEUP, CD_19_PAL, - PLAYBG, WAITVOICE, PLAYVOICE, CDV_21, - PLAYBG, FADEDOWN, SHOWSCREEN, CD_21_LOG, FADEUP, CD_19_PAL, WAITVOICE, - LOADBG, 59494, // heli whine PLAYVOICE, CDV_22, + LOADBG, 59494, // heli whine PLAYBG, WAITVOICE, PLAYVOICE, CDV_23, @@ -729,7 +713,11 @@ bool SkyIntro::nextPart(uint16 *&data) { if (!escDelay(200)) return false; vData = _skyDisk->loadFile(*data++, NULL); - _mixer->playRaw(&_voice, vData, _skyDisk->_lastLoadedFileSize, 11025, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_UNSIGNED); + // HACK: Fill the header with silence. We should + // probably use _skySound instead of calling playRaw() + // directly, but this will have to do for now. + memset(vData, 127, sizeof(struct dataFileHeader)); + _mixer->playRaw(&_voice, vData, _skyDisk->_lastLoadedFileSize, 11025, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_UNSIGNED, SOUND_VOICE); return true; case WAITVOICE: while (_voice) @@ -737,18 +725,22 @@ bool SkyIntro::nextPart(uint16 *&data) { return false; return true; case LOADBG: - if (_bgBuf) { - if (_bgSfx) { - data++; - return true; - } + _mixer->stopID(SOUND_BG); + if (_bgBuf) free(_bgBuf); - } _bgBuf = _skyDisk->loadFile(*data++, NULL); _bgSize = _skyDisk->_lastLoadedFileSize; return true; + case LOOPBG: + _mixer->stopID(SOUND_BG); + _mixer->playRaw(&_bgSfx, _bgBuf + 256, _bgSize - 768, 11025, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_LOOP, SOUND_BG); + return true; case PLAYBG: - _mixer->playRaw(&_bgSfx, _bgBuf + 256, _bgSize - 768, 11025, SoundMixer::FLAG_UNSIGNED); + _mixer->stopID(SOUND_BG); + _mixer->playRaw(&_bgSfx, _bgBuf + 256, _bgSize - 768, 11025, SoundMixer::FLAG_UNSIGNED, SOUND_BG); + return true; + case STOPBG: + _mixer->stopID(SOUND_BG); return true; default: error("Unknown intro command %X", command); diff --git a/sky/sound.cpp b/sky/sound.cpp index 3563dbaa05..ce0f709e1c 100644 --- a/sky/sound.cpp +++ b/sky/sound.cpp @@ -33,14 +33,6 @@ #pragma START_PACK_STRUCTS #endif -enum { - SOUND_CH0 = 0, - SOUND_CH1 = 1, - SOUND_BG = 2, - SOUND_VOICE = 3, - SOUND_SPEECH = 4 -}; - struct RoomList { uint8 room; uint8 adlibVolume; diff --git a/sky/sound.h b/sky/sound.h index 1613bf5e0a..266cc4a465 100644 --- a/sky/sound.h +++ b/sky/sound.h @@ -26,6 +26,14 @@ #include "sky/disk.h" #include "common/engine.h" +enum { + SOUND_CH0 = 0, + SOUND_CH1 = 1, + SOUND_BG = 2, + SOUND_VOICE = 3, + SOUND_SPEECH = 4 +}; + struct SfxQueue { uint8 count, fxNo, chan, vol; }; |