From ee62b9c4c38c6b1f7b3f02b18555261cf6469d45 Mon Sep 17 00:00:00 2001 From: Gregory Montoir Date: Tue, 16 Dec 2008 21:06:20 +0000 Subject: changed game version flags handling, should fix #2434208 svn-id: r35398 --- engines/tucker/resource.cpp | 6 +++--- engines/tucker/sequences.cpp | 2 +- engines/tucker/tucker.cpp | 25 +++++++++++++++++-------- engines/tucker/tucker.h | 14 ++++++++------ 4 files changed, 29 insertions(+), 18 deletions(-) (limited to 'engines/tucker') diff --git a/engines/tucker/resource.cpp b/engines/tucker/resource.cpp index 38141d452a..e642555ce3 100644 --- a/engines/tucker/resource.cpp +++ b/engines/tucker/resource.cpp @@ -162,7 +162,7 @@ public: }; uint8 *TuckerEngine::loadFile(uint8 *p) { - if (_gameVer.lang == Common::DE_DEU) { + if (_gameLang == Common::DE_DEU) { if (strcmp(_fileToLoad, "bgtext.c") == 0) { strcpy(_fileToLoad, "bgtextgr.c"); } else if (strcmp(_fileToLoad, "charname.c") == 0) { @@ -183,7 +183,7 @@ uint8 *TuckerEngine::loadFile(uint8 *p) { } _fileLoadSize = 0; bool decode = false; - if (_useEnc) { + if (_gameFlags & kGameFlagEncodedData) { char *ext = strrchr(_fileToLoad, '.'); if (ext && strcmp(ext + 1, "c") == 0) { strcpy(ext + 1, "enc"); @@ -287,7 +287,7 @@ void TuckerEngine::loadCursor() { void TuckerEngine::loadCharset() { strcpy(_fileToLoad, "charset.pcx"); loadImage(_loadTempBuf, 0); - switch (_gameVer.lang) { + switch (_gameLang) { case Common::FR_FRA: case Common::DE_DEU: Graphics::setCharset(kCharsetTypeFrGr); diff --git a/engines/tucker/sequences.cpp b/engines/tucker/sequences.cpp index 67a0d82775..3ce5a25198 100644 --- a/engines/tucker/sequences.cpp +++ b/engines/tucker/sequences.cpp @@ -34,7 +34,7 @@ namespace Tucker { void TuckerEngine::handleIntroSequence() { - const int firstSequence = _gameVer.isDemo ? kFirstAnimationSequenceDemo : kFirstAnimationSequenceGame; + const int firstSequence = (_gameFlags & kGameFlagDemo) != 0 ? kFirstAnimationSequenceDemo : kFirstAnimationSequenceGame; _player = new AnimationSequencePlayer(_system, _mixer, _eventMan, firstSequence); _player->mainLoop(); delete _player; diff --git a/engines/tucker/tucker.cpp b/engines/tucker/tucker.cpp index b12af103ba..f68300249e 100644 --- a/engines/tucker/tucker.cpp +++ b/engines/tucker/tucker.cpp @@ -36,9 +36,19 @@ namespace Tucker { TuckerEngine::TuckerEngine(OSystem *system, Common::Language language, bool isDemo) : Engine(system) { - _gameVer.lang = language; - _gameVer.isDemo = isDemo; - _gameVer.hasSubtitles = (language != Common::FR_FRA); // only a few subtitles are translated to french + _gameLang = language; + _gameFlags = 0; + if (isDemo) { + _gameFlags |= kGameFlagDemo; + } + switch (language) { + case Common::FR_FRA: + _gameFlags |= kGameFlagNoSubtitles; + break; + default: + _gameFlags |= kGameFlagEncodedData; + break; + } } TuckerEngine::~TuckerEngine() { @@ -63,7 +73,7 @@ bool TuckerEngine::hasFeature(EngineFeature f) const { Common::Error TuckerEngine::go() { handleIntroSequence(); - if (!_gameVer.isDemo && !shouldQuit()) { + if ((_gameFlags & kGameFlagDemo) == 0 && !shouldQuit()) { mainLoop(); } return Common::kNoError; @@ -138,7 +148,7 @@ void TuckerEngine::restart() { _gamePaused = _gamePaused2 = false; _gameDebug = false; _displayGameHints = false; - _displaySpeechText = _gameVer.hasSubtitles ? ConfMan.getBool("subtitles") : false; + _displaySpeechText = (_gameFlags & kGameFlagNoSubtitles) == 0 ? ConfMan.getBool("subtitles") : false; memset(_flagsTable, 0, sizeof(_flagsTable)); _gameHintsIndex = 0; @@ -331,7 +341,6 @@ void TuckerEngine::mainLoop() { restart(); openCompressedSoundFile(); - _useEnc = Common::File::exists("data5.enc"); loadCharSizeDta(); loadCharset(); loadPanel(); @@ -554,7 +563,7 @@ void TuckerEngine::mainLoop() { } if (_inputKeys[kInputKeyToggleTextSpeech]) { _inputKeys[kInputKeyToggleTextSpeech] = false; - if (_gameVer.hasSubtitles) { + if ((_gameFlags & kGameFlagNoSubtitles) == 0) { if (_displaySpeechText) { _displaySpeechText = false; // kDefaultCharSpeechSoundCounter = 1; @@ -1912,7 +1921,7 @@ void TuckerEngine::drawInfoString() { if (_actionRequiresTwoObjects) { verbPreposition = (_actionVerb == 5) ? 12 : 11; verbPrepositionWidth = getStringWidth(verbPreposition, infoStrBuf) + 4; - if (_gameVer.lang == Common::FR_FRA) { + if (_gameLang == Common::FR_FRA) { if ((_actionObj2Num > 0 || _actionObj2Type > 0) && verbPreposition > 0) { infoStringWidth = 0; verbWidth = 0; diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h index 8d759de237..26586a1bfb 100644 --- a/engines/tucker/tucker.h +++ b/engines/tucker/tucker.h @@ -202,6 +202,12 @@ enum InputKey { kInputKeyCount }; +enum GameFlag { + kGameFlagDemo = 1 << 0, + kGameFlagEncodedData = 1 << 1, + kGameFlagNoSubtitles = 1 << 2 +}; + inline int scaleMixerVolume(int volume, int max = 100) { return volume * Audio::Mixer::kMaxChannelVolume / max; } @@ -565,11 +571,8 @@ protected: Common::RandomSource _rnd; AnimationSequencePlayer *_player; - struct { - Common::Language lang; - bool isDemo; - bool hasSubtitles; - } _gameVer; + Common::Language _gameLang; + int _gameFlags; bool _quitGame; bool _fastMode; @@ -599,7 +602,6 @@ protected: char _fileToLoad[40]; int _fileLoadSize; - bool _useEnc; int _compressedSoundType; Common::File _fCompressedSound; uint8 *_loadTempBuf; -- cgit v1.2.3