scummvm/engines/tinsel/config.cpp

179 lines
5.2 KiB
C++

/* 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.
*
* $URL$
* $Id$
*
* This file contains configuration functionality
*/
//#define USE_3FLAGS 1
#include "tinsel/config.h"
#include "tinsel/dw.h"
#include "tinsel/sound.h"
#include "tinsel/music.h"
#include "common/file.h"
#include "common/config-manager.h"
#include "sound/mixer.h"
namespace Tinsel {
//----------------- GLOBAL GLOBAL DATA --------------------
int dclickSpeed = DOUBLE_CLICK_TIME;
int volMusic = Audio::Mixer::kMaxChannelVolume;
int volSound = Audio::Mixer::kMaxChannelVolume;
int volVoice = Audio::Mixer::kMaxChannelVolume;
int speedText = DEFTEXTSPEED;
int bSubtitles = false;
int bSwapButtons = 0;
LANGUAGE g_language = TXT_ENGLISH;
int bAmerica = 0;
/**
* Write settings to config manager and flush the config file to disk.
*/
void WriteConfig(void) {
ConfMan.setInt("dclick_speed", dclickSpeed);
ConfMan.setInt("music_volume", volMusic);
ConfMan.setInt("sfx_volume", volSound);
ConfMan.setInt("speech_volume", volVoice);
ConfMan.setInt("talkspeed", (speedText * 255) / 100);
ConfMan.setBool("subtitles", bSubtitles);
//ConfMan.setBool("swap_buttons", bSwapButtons ? 1 : 0);
// Store language for multilingual versions
if ((_vm->getFeatures() & GF_USE_3FLAGS) || (_vm->getFeatures() & GF_USE_4FLAGS) || (_vm->getFeatures() & GF_USE_5FLAGS)) {
Common::Language lang;
switch (g_language) {
case TXT_FRENCH:
lang = Common::FR_FRA;
break;
case TXT_GERMAN:
lang = Common::DE_DEU;
break;
case TXT_SPANISH:
lang = Common::ES_ESP;
break;
case TXT_ITALIAN:
lang = Common::IT_ITA;
break;
default:
lang = Common::EN_ANY;
}
ConfMan.set("language", Common::getLanguageCode(lang));
}
// Write to disk
ConfMan.flushToDisk();
}
/**
* Read configuration settings from the config file into memory
*/
void ReadConfig(void) {
if (ConfMan.hasKey("dclick_speed"))
dclickSpeed = ConfMan.getInt("dclick_speed");
// HACK/FIXME:
// We need to clip the volumes from [0, 256] to [0, 255]
// here, since for example Tinsel's internal options dialog
// and also the midi playback code rely on the volumes to be
// in [0, 255]
volMusic = CLIP(ConfMan.getInt("music_volume"), 0, 255);
volSound = CLIP(ConfMan.getInt("sfx_volume"), 0, 255);
volVoice = CLIP(ConfMan.getInt("speech_volume"), 0, 255);
if (ConfMan.hasKey("talkspeed"))
speedText = (ConfMan.getInt("talkspeed") * 100) / 255;
if (ConfMan.hasKey("subtitles"))
bSubtitles = ConfMan.getBool("subtitles");
// FIXME: If JAPAN is set, subtitles are forced OFF in the original engine
//bSwapButtons = ConfMan.getBool("swap_buttons") == 1 ? true : false;
//ConfigData.language = language; // not necessary, as language has been set in the launcher
//ConfigData.bAmerica = bAmerica; // EN_USA / EN_GRB
// Set language - we'll be clever here and use the ScummVM language setting
g_language = TXT_ENGLISH;
Common::Language lang = _vm->getLanguage();
if (lang == Common::UNK_LANG && ConfMan.hasKey("language"))
lang = Common::parseLanguage(ConfMan.get("language")); // For multi-lingual versions, fall back to user settings
switch (lang) {
case Common::FR_FRA:
g_language = TXT_FRENCH;
break;
case Common::DE_DEU:
g_language = TXT_GERMAN;
break;
case Common::ES_ESP:
g_language = TXT_SPANISH;
break;
case Common::IT_ITA:
g_language = TXT_ITALIAN;
break;
default:
g_language = TXT_ENGLISH;
}
if (lang == Common::JA_JPN) {
// TODO: Add support for JAPAN version
} else if (lang == Common::HB_ISR) {
// TODO: Add support for HEBREW version
// The Hebrew version appears to the software as being English
// but it needs to have subtitles on...
g_language = TXT_ENGLISH;
bSubtitles = true;
} else if (_vm->getFeatures() & GF_USE_3FLAGS) {
// 3 FLAGS version supports French, German, Spanish
// Fall back to German if necessary
if (g_language != TXT_FRENCH && g_language != TXT_GERMAN && g_language != TXT_SPANISH) {
g_language = TXT_GERMAN;
bSubtitles = true;
}
} else if (_vm->getFeatures() & GF_USE_4FLAGS) {
// 4 FLAGS version supports French, German, Spanish, Italian
// Fall back to German if necessary
if (g_language != TXT_FRENCH && g_language != TXT_GERMAN &&
g_language != TXT_SPANISH && g_language != TXT_ITALIAN) {
g_language = TXT_GERMAN;
bSubtitles = true;
}
}
}
bool isJapanMode() {
#ifdef JAPAN
return true;
#else
return false;
#endif
}
} // end of namespace Tinsel