diff options
author | Robert Göffringmann | 2003-12-20 20:20:53 +0000 |
---|---|---|
committer | Robert Göffringmann | 2003-12-20 20:20:53 +0000 |
commit | 2554ced5e970301e46f1b8035975762447b900f2 (patch) | |
tree | 811285079382de6c73ddc002ba4637b82717d6b2 /sword1/sound.cpp | |
parent | 1007e8256f0d17a2e797f9ae6028651e06f33ea3 (diff) | |
download | scummvm-rg350-2554ced5e970301e46f1b8035975762447b900f2.tar.gz scummvm-rg350-2554ced5e970301e46f1b8035975762447b900f2.tar.bz2 scummvm-rg350-2554ced5e970301e46f1b8035975762447b900f2.zip |
fixed crashes after restoring a savegame, added fnSetPaletteToFade and changed speech code to distinguish between CD1 and CD2. (now needs SPEECH1.CLU and SPEECH2.CLU)
svn-id: r11789
Diffstat (limited to 'sword1/sound.cpp')
-rw-r--r-- | sword1/sound.cpp | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/sword1/sound.cpp b/sword1/sound.cpp index ea83e27815..b7f6c4d1df 100644 --- a/sword1/sound.cpp +++ b/sword1/sound.cpp @@ -24,6 +24,7 @@ #include "common/util.h" #include "resman.h" #include "logic.h" +#include "sword1.h" #define SOUND_SPEECH_ID 1 #define SPEECH_FLAGS (SoundMixer::FLAG_16BITS | SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_LITTLE_ENDIAN) @@ -33,8 +34,8 @@ SwordSound::SwordSound(const char *searchPath, SoundMixer *mixer, ResMan *pResMa _mixer = mixer; _resMan = pResMan; _cowHeader = NULL; - initCowSystem(); _endOfQueue = 0; + _currentCowFile = 0; } int SwordSound::addToQueue(int32 fxNo) { @@ -107,25 +108,22 @@ bool SwordSound::amISpeaking(void) { return true; } -void SwordSound::clearAllFx(void) { - warning("Stub: SwordSound::clearAllFx()"); -} - -void SwordSound::closeCowSysten(void) { - warning("stub: SwordSound::closeCowSystem()"); -} - bool SwordSound::speechFinished(void) { - //warning("stub: SwordSound::speechFinished()"); - //return true; return (_speechHandle == 0); } +void SwordSound::newScreen(uint32 screen) { + if (_currentCowFile != SwordEngine::_systemVars.currentCD) { + if (_currentCowFile) + closeCowSystem(); + initCowSystem(); + } +} + void SwordSound::quitScreen(void) { // stop all running SFX while (_endOfQueue) fnStopFx(_fxQueue[0].id); - // I don't think that we even have to start SFX here. } void SwordSound::playSample(QueueElement *elem) { @@ -216,9 +214,13 @@ void SwordSound::stopSpeech(void) { } void SwordSound::initCowSystem(void) { - _cowFile.open("SPEECH.CLU"); - if (_cowFile.isOpen() == false) - _cowFile.open("speech/SPEECH.CLU"); + char cowName[25]; + sprintf(cowName, "SPEECH%d.CLU", SwordEngine::_systemVars.currentCD); + _cowFile.open(cowName); + if (!_cowFile.isOpen()) { + sprintf(cowName, "speech/SPEECH%d.CLU", SwordEngine::_systemVars.currentCD); + _cowFile.open(cowName); + } if (_cowFile.isOpen()) { _cowHeaderSize = _cowFile.readUint32LE(); _cowHeader = (uint32*)malloc(_cowHeaderSize); @@ -226,6 +228,17 @@ void SwordSound::initCowSystem(void) { error("Unexpected cow header size %d", _cowHeaderSize); for (uint32 cnt = 0; cnt < (_cowHeaderSize / 4) - 1; cnt++) _cowHeader[cnt] = _cowFile.readUint32LE(); + _currentCowFile = SwordEngine::_systemVars.currentCD; } else - warning("SwordSound::initCowSystem: Can't open SPEECH.CLU"); + warning("SwordSound::initCowSystem: Can't open SPEECH%d.CLU", SwordEngine::_systemVars.currentCD); +} + +void SwordSound::closeCowSystem(void) { + if (_cowFile.isOpen()) + _cowFile.close(); + if (_cowHeader) + free(_cowHeader); + _cowHeader = NULL; + _currentCowFile = NULL; } + |