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/sound_pc98_eob.cpp | |
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/sound_pc98_eob.cpp')
-rw-r--r-- | engines/kyra/sound/sound_pc98_eob.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
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 |