aboutsummaryrefslogtreecommitdiff
path: root/engines/tucker
diff options
context:
space:
mode:
authorGregory Montoir2008-12-16 21:06:20 +0000
committerGregory Montoir2008-12-16 21:06:20 +0000
commitee62b9c4c38c6b1f7b3f02b18555261cf6469d45 (patch)
treedcd876819a9191bac667bdc6e89c7d9bc9ece168 /engines/tucker
parentebd2f53713f79f8e60317a869f77d3de129cdeaf (diff)
downloadscummvm-rg350-ee62b9c4c38c6b1f7b3f02b18555261cf6469d45.tar.gz
scummvm-rg350-ee62b9c4c38c6b1f7b3f02b18555261cf6469d45.tar.bz2
scummvm-rg350-ee62b9c4c38c6b1f7b3f02b18555261cf6469d45.zip
changed game version flags handling, should fix #2434208
svn-id: r35398
Diffstat (limited to 'engines/tucker')
-rw-r--r--engines/tucker/resource.cpp6
-rw-r--r--engines/tucker/sequences.cpp2
-rw-r--r--engines/tucker/tucker.cpp25
-rw-r--r--engines/tucker/tucker.h14
4 files changed, 29 insertions, 18 deletions
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;