diff options
author | athrxx | 2019-11-16 22:00:30 +0100 |
---|---|---|
committer | athrxx | 2019-12-18 20:50:41 +0100 |
commit | 7cae73aae3775e82ca8e78abe7809d125b67ccc3 (patch) | |
tree | 0581903d17feab307e052af6e264e449ce9e45cf /engines/kyra/sound | |
parent | f74f4929a043e278ea5bd989eeac17c18c756e22 (diff) | |
download | scummvm-rg350-7cae73aae3775e82ca8e78abe7809d125b67ccc3.tar.gz scummvm-rg350-7cae73aae3775e82ca8e78abe7809d125b67ccc3.tar.bz2 scummvm-rg350-7cae73aae3775e82ca8e78abe7809d125b67ccc3.zip |
KYRA: (EOB/PC98) - initial startup fix
- hook up static resources, sound code, etc
- nothing really working yet, though (except the music)
Diffstat (limited to 'engines/kyra/sound')
-rw-r--r-- | engines/kyra/sound/sound_intern.h | 31 | ||||
-rw-r--r-- | engines/kyra/sound/sound_pc98_eob.cpp | 126 |
2 files changed, 157 insertions, 0 deletions
diff --git a/engines/kyra/sound/sound_intern.h b/engines/kyra/sound/sound_intern.h index 29572f6fe2..44f7adbfe2 100644 --- a/engines/kyra/sound/sound_intern.h +++ b/engines/kyra/sound/sound_intern.h @@ -443,6 +443,37 @@ private: bool _ready; }; +class MLALF98; +class SoundPC98_EoB : public Sound { +public: + SoundPC98_EoB(KyraEngine_v1 *vm, Audio::Mixer *mixer); + virtual ~SoundPC98_EoB(); + + kType getMusicType() const; + + bool init(); + void initAudioResourceInfo(int set, void *info); + void selectAudioResourceSet(int set); + bool hasSoundFile(uint file) const { return false; } + void loadSoundFile(uint file); + void loadSoundFile(Common::String file) {} + void loadSfxFile(Common::String file); + void playTrack(uint8 track); + void haltTrack(); + void playSoundEffect(uint8 track, uint8); + void beginFadeOut() {} + void updateVolumeSettings(); + +private: + KyraEngine_v1 *_vm; + MLALF98 *_driver; + + SoundResourceInfo_PC *_resInfo[3]; + int _currentResourceSet; + + bool _ready; +}; + #endif } // End of namespace Kyra diff --git a/engines/kyra/sound/sound_pc98_eob.cpp b/engines/kyra/sound/sound_pc98_eob.cpp new file mode 100644 index 0000000000..13b7214d74 --- /dev/null +++ b/engines/kyra/sound/sound_pc98_eob.cpp @@ -0,0 +1,126 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifdef ENABLE_EOB + +#include "kyra/sound/sound_intern.h" +#include "kyra/resource/resource.h" +#include "kyra/sound/drivers/mlalf98.h" + +#include "common/config-manager.h" + +namespace Kyra { + +SoundPC98_EoB::SoundPC98_EoB(KyraEngine_v1 *vm, Audio::Mixer *mixer) : Sound(vm, mixer), + _vm(vm), _driver(0), _currentResourceSet(-1), _ready(false) { + memset(_resInfo, 0, sizeof(_resInfo)); +} + +SoundPC98_EoB::~SoundPC98_EoB() { + delete _driver; + + for (int i = 0; i < 3; i++) + initAudioResourceInfo(i, 0); +} + +Sound::kType SoundPC98_EoB::getMusicType() const { + return kPC98; +} + +bool SoundPC98_EoB::init() { + _driver = new MLALF98(_mixer, MLALF98::kType9801_86); + _ready = true; + return true; +} + +void SoundPC98_EoB::initAudioResourceInfo(int set, void *info) { + delete _resInfo[set]; + _resInfo[set] = info ? new SoundResourceInfo_PC(*(SoundResourceInfo_PC*)info) : 0; +} + +void SoundPC98_EoB::selectAudioResourceSet(int set) { + if (set == _currentResourceSet || !_ready) + return; + + if (!_resInfo[set]) + return; + + _currentResourceSet = set; +} + +void SoundPC98_EoB::loadSoundFile(uint file) { + if (!_ready) + return; + + if (file >= _resInfo[_currentResourceSet]->fileListSize) + return; + + Common::SeekableReadStream *s = _vm->resource()->createReadStream(_resInfo[_currentResourceSet]->fileList[file]); + _driver->loadMusicData(s); + delete s; +} + +void SoundPC98_EoB::loadSfxFile(Common::String file) { + if (!_ready) + return; + + Common::SeekableReadStream *s = _vm->resource()->createReadStream(file); + _driver->loadSoundEffectData(s); + delete s; +} + +void SoundPC98_EoB::playTrack(uint8 track) { + if (!_musicEnabled || !_ready) + return; + + _driver->allChannelsOff(); + loadSoundFile(track); + _driver->startMusic(0); +} + +void SoundPC98_EoB::haltTrack() { + if (!_musicEnabled || !_ready) + return; + playTrack(0); +} + +void SoundPC98_EoB::playSoundEffect(uint8 track, uint8) { + if (_currentResourceSet != kMusicIngame || !_sfxEnabled || !_ready || track >= 120) + return; + _driver->startSoundEffect(track); +} + +void SoundPC98_EoB::updateVolumeSettings() { + if (!_driver || !_ready) + return; + + bool mute = false; + if (ConfMan.hasKey("mute")) + mute = ConfMan.getBool("mute"); + + _driver->setMusicVolume((mute ? 0 : ConfMan.getInt("music_volume"))); + _driver->setSoundEffectVolume((mute ? 0 : ConfMan.getInt("sfx_volume"))); +} + +} // End of namespace Kyra + +#endif |