mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-24 18:56:33 +00:00
175 lines
5.3 KiB
C++
175 lines
5.3 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.
|
|
*
|
|
* 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 "audio/mixer.h"
|
|
|
|
namespace Tinsel {
|
|
|
|
Config::Config(TinselEngine *vm) : _vm(vm) {
|
|
_dclickSpeed = DOUBLE_CLICK_TIME;
|
|
_musicVolume = Audio::Mixer::kMaxChannelVolume;
|
|
_soundVolume = Audio::Mixer::kMaxChannelVolume;
|
|
_voiceVolume = Audio::Mixer::kMaxChannelVolume;
|
|
_textSpeed = DEFTEXTSPEED;
|
|
_useSubtitles = false;
|
|
_swapButtons = false;
|
|
_language = TXT_ENGLISH;
|
|
_isAmericanEnglishVersion = false;
|
|
}
|
|
|
|
|
|
/**
|
|
* Write settings to config manager and flush the config file to disk.
|
|
*/
|
|
void Config::writeToDisk() {
|
|
ConfMan.setInt("dclick_speed", _dclickSpeed);
|
|
ConfMan.setInt("music_volume", _musicVolume);
|
|
ConfMan.setInt("sfx_volume", _soundVolume);
|
|
ConfMan.setInt("speech_volume", _voiceVolume);
|
|
ConfMan.setInt("talkspeed", (_textSpeed * 255) / 100);
|
|
ConfMan.setBool("subtitles", _useSubtitles);
|
|
//ConfMan.setBool("swap_buttons", _swapButtons ? 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 (_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 Config::readFromDisk() {
|
|
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]
|
|
_musicVolume = CLIP(ConfMan.getInt("music_volume"), 0, 255);
|
|
_soundVolume = CLIP(ConfMan.getInt("sfx_volume"), 0, 255);
|
|
_voiceVolume = CLIP(ConfMan.getInt("speech_volume"), 0, 255);
|
|
|
|
if (ConfMan.hasKey("talkspeed"))
|
|
_textSpeed = (ConfMan.getInt("talkspeed") * 100) / 255;
|
|
if (ConfMan.hasKey("subtitles"))
|
|
_useSubtitles = ConfMan.getBool("subtitles");
|
|
|
|
// FIXME: If JAPAN is set, subtitles are forced OFF in the original engine
|
|
|
|
//_swapButtons = ConfMan.getBool("swap_buttons") == 1 ? true : false;
|
|
//ConfigData.language = language; // not necessary, as language has been set in the launcher
|
|
//ConfigData._isAmericanEnglishVersion = _isAmericanEnglishVersion; // EN_USA / EN_GRB
|
|
|
|
// Set language - we'll be clever here and use the ScummVM language setting
|
|
_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:
|
|
_language = TXT_FRENCH;
|
|
break;
|
|
case Common::DE_DEU:
|
|
_language = TXT_GERMAN;
|
|
break;
|
|
case Common::ES_ESP:
|
|
_language = TXT_SPANISH;
|
|
break;
|
|
case Common::IT_ITA:
|
|
_language = TXT_ITALIAN;
|
|
break;
|
|
default:
|
|
_language = TXT_ENGLISH;
|
|
}
|
|
|
|
if (lang == Common::JA_JPN) {
|
|
// TODO: Add support for JAPAN version
|
|
} else if (lang == Common::HE_ISR) {
|
|
// TODO: Add support for HEBREW version
|
|
|
|
// The Hebrew version appears to the software as being English
|
|
// but it needs to have subtitles on...
|
|
_language = TXT_ENGLISH;
|
|
_useSubtitles = true;
|
|
} else if (_vm->getFeatures() & GF_USE_3FLAGS) {
|
|
// 3 FLAGS version supports French, German, Spanish
|
|
// Fall back to German if necessary
|
|
if (_language != TXT_FRENCH && _language != TXT_GERMAN && _language != TXT_SPANISH) {
|
|
_language = TXT_GERMAN;
|
|
_useSubtitles = true;
|
|
}
|
|
} else if (_vm->getFeatures() & GF_USE_4FLAGS) {
|
|
// 4 FLAGS version supports French, German, Spanish, Italian
|
|
// Fall back to German if necessary
|
|
if (_language != TXT_FRENCH && _language != TXT_GERMAN &&
|
|
_language != TXT_SPANISH && _language != TXT_ITALIAN) {
|
|
_language = TXT_GERMAN;
|
|
_useSubtitles = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool isJapanMode() {
|
|
#ifdef JAPAN
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
} // End of namespace Tinsel
|