aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2008-05-11 17:50:13 +0000
committerJohannes Schickel2008-05-11 17:50:13 +0000
commit4b21c2958ddf3cf1e69f427c715406d76712bed1 (patch)
treef030fb371180bba2ae80955e7e21ee8c130118f6 /engines/kyra
parent825e3b5136c55e8e9e07dcf3300e9b1f46ced0b0 (diff)
downloadscummvm-rg350-4b21c2958ddf3cf1e69f427c715406d76712bed1.tar.gz
scummvm-rg350-4b21c2958ddf3cf1e69f427c715406d76712bed1.tar.bz2
scummvm-rg350-4b21c2958ddf3cf1e69f427c715406d76712bed1.zip
Implemented helium mode support for Kyra3.
svn-id: r32028
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/gui_mr.cpp17
-rw-r--r--engines/kyra/gui_mr.h1
-rw-r--r--engines/kyra/kyra_mr.cpp4
-rw-r--r--engines/kyra/kyra_mr.h2
-rw-r--r--engines/kyra/sound.h5
-rw-r--r--engines/kyra/sound_digital.cpp7
-rw-r--r--engines/kyra/staticres.cpp1
7 files changed, 31 insertions, 6 deletions
diff --git a/engines/kyra/gui_mr.cpp b/engines/kyra/gui_mr.cpp
index fda9b089ea..74f6451e28 100644
--- a/engines/kyra/gui_mr.cpp
+++ b/engines/kyra/gui_mr.cpp
@@ -1539,15 +1539,26 @@ int GUI_MR::toggleSkipSupport(Button *caller) {
return 0;
}
+int GUI_MR::toggleHeliumMode(Button *caller) {
+ updateMenuButton(caller);
+ _vm->_configHelium ^= 1;
+ if (_vm->_configHelium)
+ _audioOptions.item[3].itemId = 18;
+ else
+ _audioOptions.item[3].itemId = 17;
+ renewHighlight(_audioOptions);
+ return 0;
+}
+
int GUI_MR::audioOptions(Button *caller) {
updateMenuButton(caller);
restorePage1(_vm->_screenBuffer);
backUpPage1(_vm->_screenBuffer);
- //if (_configHelium)
- // _audioOptions.item[3].itemId = 18;
- //else
+ if (_vm->_configHelium)
+ _audioOptions.item[3].itemId = 18;
+ else
_audioOptions.item[3].itemId = 17;
initMenu(_audioOptions);
diff --git a/engines/kyra/gui_mr.h b/engines/kyra/gui_mr.h
index d60c2f62d9..5bd3569031 100644
--- a/engines/kyra/gui_mr.h
+++ b/engines/kyra/gui_mr.h
@@ -79,6 +79,7 @@ private:
int changeLanguage(Button *caller);
int toggleStudioSFX(Button *caller);
int toggleSkipSupport(Button *caller);
+ int toggleHeliumMode(Button *caller);
KyraEngine_MR *_vm;
Screen_MR *_screen;
diff --git a/engines/kyra/kyra_mr.cpp b/engines/kyra/kyra_mr.cpp
index c89e4eae89..2168000dc9 100644
--- a/engines/kyra/kyra_mr.cpp
+++ b/engines/kyra/kyra_mr.cpp
@@ -146,6 +146,7 @@ KyraEngine_MR::KyraEngine_MR(OSystem *system, const GameFlags &flags) : KyraEngi
_chatAltFlag = false;
_albumChatActive = false;
memset(&_album, 0, sizeof(_album));
+ _configHelium = false;
}
KyraEngine_MR::~KyraEngine_MR() {
@@ -1515,6 +1516,7 @@ void KyraEngine_MR::registerDefaultSettings() {
ConfMan.registerDefault("walkspeed", 5);
ConfMan.registerDefault("studio_audience", true);
ConfMan.registerDefault("skip_support", true);
+ ConfMan.registerDefault("helium_mode", false);
}
void KyraEngine_MR::writeSettings() {
@@ -1538,6 +1540,7 @@ void KyraEngine_MR::writeSettings() {
ConfMan.setBool("studio_audience", _configStudio);
ConfMan.setBool("skip_support", _configSkip);
+ ConfMan.setBool("helium_mode", _configHelium);
KyraEngine::writeSettings();
}
@@ -1548,6 +1551,7 @@ void KyraEngine_MR::readSettings() {
_configStudio = ConfMan.getBool("studio_audience");
_configSkip = ConfMan.getBool("skip_support");
+ _configHelium = ConfMan.getBool("helium_mode");
}
} // end of namespace Kyra
diff --git a/engines/kyra/kyra_mr.h b/engines/kyra/kyra_mr.h
index 29a1f6b044..a50fbfd440 100644
--- a/engines/kyra/kyra_mr.h
+++ b/engines/kyra/kyra_mr.h
@@ -55,6 +55,7 @@ public:
GUI_v2 *gui_v2() const { return _gui; }
SoundDigital *soundDigital() { return _soundDigital; }
int language() const { return _lang; }
+ bool heliumMode() const { return _configHelium; }
int go();
@@ -66,6 +67,7 @@ private:
// config
bool _configStudio;
bool _configSkip;
+ bool _configHelium;
void registerDefaultSettings();
void writeSettings();
diff --git a/engines/kyra/sound.h b/engines/kyra/sound.h
index 58681d45ef..e1ae29cba3 100644
--- a/engines/kyra/sound.h
+++ b/engines/kyra/sound.h
@@ -491,6 +491,7 @@ private:
// Digital Audio
class AUDStream;
+class KyraEngine_MR;
/**
* Digital audio output device.
@@ -499,7 +500,7 @@ class AUDStream;
*/
class SoundDigital {
public:
- SoundDigital(KyraEngine *vm, Audio::Mixer *mixer);
+ SoundDigital(KyraEngine_MR *vm, Audio::Mixer *mixer);
~SoundDigital();
bool init() { return true; }
@@ -548,7 +549,7 @@ public:
*/
void beginFadeOut(int channel, int ticks);
private:
- KyraEngine *_vm;
+ KyraEngine_MR *_vm;
Audio::Mixer *_mixer;
struct Sound {
diff --git a/engines/kyra/sound_digital.cpp b/engines/kyra/sound_digital.cpp
index ab60c3e1f5..bac7d67129 100644
--- a/engines/kyra/sound_digital.cpp
+++ b/engines/kyra/sound_digital.cpp
@@ -25,6 +25,7 @@
#include "kyra/sound.h"
#include "kyra/resource.h"
+#include "kyra/kyra_mr.h"
#include "sound/audiostream.h"
@@ -45,6 +46,7 @@ public:
bool isStereo() const { return false; }
bool endOfData() const { return _endOfData; }
+ void setRate(int newRate) { _rate = newRate; }
int getRate() const { return _rate; }
void beginFadeIn(uint32 millis);
@@ -319,7 +321,7 @@ int AUDStream::readChunk(int16 *buffer, const int maxSamples) {
#pragma mark -
-SoundDigital::SoundDigital(KyraEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer), _sounds() {
+SoundDigital::SoundDigital(KyraEngine_MR *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer), _sounds() {
for (uint i = 0; i < ARRAYSIZE(_sounds); ++i)
_sounds[i].stream = 0;
}
@@ -384,6 +386,9 @@ int SoundDigital::playSound(const char *filename, uint8 priority, Audio::Mixer::
if (volume > 255)
volume = 255;
volume = (volume * Audio::Mixer::kMaxChannelVolume) / 255;
+
+ if (type == Audio::Mixer::kSpeechSoundType && _vm->heliumMode())
+ use->stream->setRate(32765);
_mixer->playInputStream(type, &use->handle, use->stream, -1, volume);
diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp
index 85a822cccf..b81a5838ce 100644
--- a/engines/kyra/staticres.cpp
+++ b/engines/kyra/staticres.cpp
@@ -2596,6 +2596,7 @@ void GUI_MR::initStaticData() {
GUI_V2_MENU_ITEM(_audioOptions.item[1], 0, 0, 160, 47, 116, 15, 0xFA, 0xFF, 5, 0xD0, 0xD1, 0xCF, -1, 24, 8, 49, 0x0000);
GUI_V2_MENU_ITEM(_audioOptions.item[2], 0, 0, 160, 64, 116, 15, 0xFA, 0xFF, 5, 0xD0, 0xD1, 0xCF, -1, 39, 8, 66, 0x0000);
GUI_V2_MENU_ITEM(_audioOptions.item[3], 1, 0, 152, 81, 116, 15, 0xFA, 0xFF, 5, 0xD0, 0xD1, 0xCF, -1, 47, 8, 83, 0x0000);
+ _audioOptions.item[3].callback = BUTTON_FUNCTOR(GUI_MR, this, &GUI_MR::toggleHeliumMode);
GUI_V2_MENU_ITEM(_audioOptions.item[4], 1, 16, -1, 110, 92, 15, 0xFA, 0xFF, -1, 0xD0, 0xD1, 0xCF, -1, 0, 0, 0, 0x0000);
_audioOptions.item[4].callback = clickQuitOptionsFunctor;
for (int i = 5; i < 7; ++i)