TETRAEDGE: Add ability to pick different languages

This commit is contained in:
Matthew Duggan 2023-03-13 18:14:37 +09:00
parent 31aeb928fc
commit 7bbe0f530d
8 changed files with 61 additions and 4 deletions

View File

@ -37,4 +37,25 @@ TetraedgeMetaEngineDetection::TetraedgeMetaEngineDetection() : AdvancedMetaEngin
_flags = kADFlagMatchFullPaths;
}
DetectedGame TetraedgeMetaEngineDetection::toDetectedGame(const ADDetectedGame &adGame, ADDetectedGameExtraInfo *extraInfo) const {
DetectedGame game = AdvancedMetaEngineDetection::toDetectedGame(adGame);
// The AdvancedDetector model only allows specifying a single supported
// game language. Both games support multiple languages
if (game.gameId == "syberia" || game.gameId == "syberia2") {
const Common::Language *language = TetraedgeMetaEngine::getGameLanguages();
while (*language != Common::UNK_LANG) {
// "ru" only present on syberia 1
if (game.gameId == "syberia2" && *language == Common::RU_RUS)
continue;
game.appendGUIOptions(Common::getGameGUIOptionsDescriptionLanguage(*language));
language++;
}
}
return game;
}
REGISTER_PLUGIN_STATIC(TETRAEDGE_DETECTION, PLUGIN_TYPE_ENGINE_DETECTION, TetraedgeMetaEngineDetection);

View File

@ -47,6 +47,8 @@ public:
TetraedgeMetaEngineDetection();
~TetraedgeMetaEngineDetection() override {}
DetectedGame toDetectedGame(const ADDetectedGame &adGame, ADDetectedGameExtraInfo *extraInfo) const override;
const char *getEngineName() const override {
return "Tetraedge Engine";
}

View File

@ -36,7 +36,7 @@ const ADGameDescription GAME_DESCRIPTIONS[] = {
"syberia",
nullptr,
AD_ENTRY1s("MacOS/Syberia", "d:6951fb8f71fe06f34684564625f73cd8", 10640592),
Common::EN_ANY,
Common::UNK_LANG,
Common::kPlatformMacintosh,
ADGF_TESTING,
GUIO1(GAMEOPTION_CORRECT_MOVIE_ASPECT)
@ -47,7 +47,7 @@ const ADGameDescription GAME_DESCRIPTIONS[] = {
"syberia2",
nullptr,
AD_ENTRY1s("MacOS/Syberia 2", "d:c447586a3cb3d46d6127b467e7fb9a86", 12021136),
Common::EN_ANY,
Common::UNK_LANG,
Common::kPlatformMacintosh,
ADGF_TESTING,
GUIO1(GAMEOPTION_CORRECT_MOVIE_ASPECT)

View File

@ -65,6 +65,20 @@ bool TetraedgeMetaEngine::hasFeature(MetaEngineFeature f) const {
(f == kSupportsLoadingDuringStartup);
}
/*static*/
const Common::Language *TetraedgeMetaEngine::getGameLanguages() {
static Common::Language languages[] = {
Common::EN_ANY,
Common::FR_FRA,
Common::DE_DEU,
Common::IT_ITA,
Common::ES_ESP,
Common::RU_RUS,
Common::UNK_LANG
};
return languages;
}
void TetraedgeMetaEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
Tetraedge::TetraedgeEngine::getSavegameThumbnail(thumb);
}

View File

@ -43,6 +43,9 @@ public:
* Used by e.g. the launcher to determine whether to enable the Load button.
*/
bool hasFeature(MetaEngineFeature f) const override;
static const Common::Language *getGameLanguages();
};
#endif

View File

@ -23,9 +23,12 @@
#include "common/fs.h"
#include "common/debug.h"
#include "common/config-manager.h"
#include "common/language.h"
#include "tetraedge/te/te_core.h"
#include "tetraedge/tetraedge.h"
#include "tetraedge/te/te_png.h"
#include "tetraedge/te/te_images_sequence.h"
#include "tetraedge/te/te_jpeg.h"
@ -46,8 +49,14 @@ void TeCore::addLoc(TeILoc *loc) {
}
void TeCore::create() {
// TODO: Get language from the game definition. For now just default to en.
language("en");
const char *langCode = getLanguageCode(g_engine->getGameLanguage());
const Common::String confLang = ConfMan.get("language");
Common::String useLang = "en";
if (langCode)
useLang = langCode;
if (!confLang.empty())
useLang = confLang;
language(useLang);
_coreNotReady = false;
_activityTrackingTimer.alarmSignal().add(this, &TeCore::onActivityTrackingAlarm);
warning("TODO: TeCore::create: Finish implementing me.");

View File

@ -134,6 +134,10 @@ Common::String TetraedgeEngine::getGameId() const {
return _gameDescription->gameId;
}
Common::Language TetraedgeEngine::getGameLanguage() const {
return _gameDescription->language;
}
bool TetraedgeEngine::canLoadGameStateCurrently() {
return _game && _application && !_application->mainMenu().isEntered();
}
@ -208,6 +212,7 @@ void TetraedgeEngine::registerConfigDefaults() {
ConfMan.registerDefault("correct_movie_aspect", true);
}
Common::Error TetraedgeEngine::run() {
if (getGameId() == "syberia")
_gameType = kSyberia;
@ -316,4 +321,5 @@ void TetraedgeEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
g_engine->getApplication()->getSavegameThumbnail(thumb);
}
} // namespace Tetraedge

View File

@ -86,6 +86,8 @@ public:
*/
Common::String getGameId() const;
Common::Language getGameLanguage() const;
/**
* Gets a random number
*/