diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/kyra/kyra.h | 1 | ||||
-rw-r--r-- | engines/kyra/sound.cpp | 1 | ||||
-rw-r--r-- | engines/kyra/sound.h | 3 | ||||
-rw-r--r-- | engines/kyra/sound_adlib.cpp | 30 |
4 files changed, 26 insertions, 9 deletions
diff --git a/engines/kyra/kyra.h b/engines/kyra/kyra.h index 833877c95d..b90c58dda9 100644 --- a/engines/kyra/kyra.h +++ b/engines/kyra/kyra.h @@ -303,7 +303,6 @@ public: void enableTimer(uint8 timer); void disableTimer(uint8 timer); - void waitTicks(int ticks); void delayWithTicks(int ticks); void saveGame(const char *fileName, const char *saveName); diff --git a/engines/kyra/sound.cpp b/engines/kyra/sound.cpp index d8cb070aed..b1f685231d 100644 --- a/engines/kyra/sound.cpp +++ b/engines/kyra/sound.cpp @@ -445,6 +445,7 @@ void KyraEngine::snd_playWanderScoreViaMap(int command, int restart) { if (command != 1) { if (_lastMusicCommand != command) { _lastMusicCommand = command; + _sound->haltTrack(); _sound->playTrack(soundTable[command*2+1], true); } } else { diff --git a/engines/kyra/sound.h b/engines/kyra/sound.h index 21b99d8056..2baccc0d9a 100644 --- a/engines/kyra/sound.h +++ b/engines/kyra/sound.h @@ -114,6 +114,9 @@ public: private: void loadSoundFile(const char *file); + void unk1(); + void unk2(); + AdlibDriver *_driver; uint8 _trackEntries[120]; diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp index d10a5abfeb..a601d457a4 100644 --- a/engines/kyra/sound_adlib.cpp +++ b/engines/kyra/sound_adlib.cpp @@ -115,7 +115,7 @@ private: uint8 unk38; uint8 unk26; uint8 unk7; - int8 baseFreq; + uint8 baseFreq; int8 unk1; int8 unk4; uint8 regAx; @@ -723,7 +723,7 @@ void AdlibDriver::updateAndOutput1(uint8 rawNote, OutputState &state, bool flag) state.rawNote = rawNote; int8 note = (rawNote & 0x0F) + state.baseNote; - int8 octave = ((rawNote >> 4) & 0x0F) + state.baseOctave; + int8 octave = ((rawNote + state.baseOctave) >> 4) & 0x0F; // There are only twelve notes. If we go outside that, we have to // adjust the note and octave. @@ -1946,17 +1946,17 @@ void SoundAdlibPC::playMusic(const char *file) { } void SoundAdlibPC::stopMusic() { - playSoundEffect(0); + //playSoundEffect(0); } void SoundAdlibPC::playTrack(uint8 track, bool looping) { - // snd_stopSound(); - // snd_unk1(); playSoundEffect(track); } void SoundAdlibPC::haltTrack() { - playSoundEffect(0); + unk1(); + unk2(); + _engine->_system->delayMillis(3 * 60); } void SoundAdlibPC::startTrack() { @@ -2002,6 +2002,7 @@ void SoundAdlibPC::playSoundEffect(uint8 track) { } void SoundAdlibPC::beginFadeOut() { + playSoundEffect(1); } bool SoundAdlibPC::fadeOut() { @@ -2012,6 +2013,10 @@ void SoundAdlibPC::loadSoundFile(const char *file) { if (_soundFileLoaded == file) return; + if (_soundDataPtr) { + haltTrack(); + } + uint8 *file_data = 0; uint32 file_size = 0; char filename[25]; @@ -2023,8 +2028,8 @@ void SoundAdlibPC::loadSoundFile(const char *file) { return; } - // snd_stopSound(); - // snd_unk1(); + unk2(); + unk1(); _driver->callback(8, int(-1)); _soundDataPtr = 0; @@ -2049,5 +2054,14 @@ void SoundAdlibPC::loadSoundFile(const char *file) { _soundFileLoaded = file; } +void SoundAdlibPC::unk1() { + playSoundEffect(0); + //_engine->_system->delayMillis(5 * 60); +} + +void SoundAdlibPC::unk2() { + playSoundEffect(0); +} + } // end of namespace Kyra |