aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/sound/sound_pc98_eob.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/sound/sound_pc98_eob.cpp')
-rw-r--r--engines/kyra/sound/sound_pc98_eob.cpp126
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