From d0e2107b7e07587f732ae1f882b8ddae8c5ef5bd Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Wed, 17 Dec 2008 13:07:56 +0000 Subject: Only do the no-cd-workaround if all resource files can be found svn-id: r35409 --- engines/gob/game.cpp | 2 ++ engines/gob/game.h | 4 ++++ engines/gob/game_v6.cpp | 12 ++++++++++++ engines/gob/inter_v6.cpp | 2 +- engines/gob/saveload.h | 3 ++- engines/gob/saveload_v6.cpp | 19 +++++++++++++++---- 6 files changed, 36 insertions(+), 6 deletions(-) diff --git a/engines/gob/game.cpp b/engines/gob/game.cpp index 47da5cf8f4..1a7c31eec0 100644 --- a/engines/gob/game.cpp +++ b/engines/gob/game.cpp @@ -81,6 +81,8 @@ Game::Game(GobEngine *vm) : _vm(vm) { _preventScroll = false; _scrollHandleMouse = false; + _noCd = false; + _tempStr[0] = 0; _curImaFile[0] = 0; _collStr[0] = 0; diff --git a/engines/gob/game.h b/engines/gob/game.h index 8a7c483bc0..655180f4b4 100644 --- a/engines/gob/game.h +++ b/engines/gob/game.h @@ -95,6 +95,8 @@ public: bool _preventScroll; bool _scrollHandleMouse; + bool _noCd; + Game(GobEngine *vm); virtual ~Game(); @@ -307,6 +309,8 @@ public: uint16 right, uint16 bottom, int16 flags, int16 key, uint16 funcEnter, uint16 funcLeave, uint16 funcSub = 0); + virtual void prepareStart(void); + virtual void pushCollisions(char all); virtual int16 checkCollisions(byte handleMouse, int16 deltaTime, diff --git a/engines/gob/game_v6.cpp b/engines/gob/game_v6.cpp index 0ba232677a..0b764c399e 100644 --- a/engines/gob/game_v6.cpp +++ b/engines/gob/game_v6.cpp @@ -25,6 +25,7 @@ #include "common/endian.h" #include "common/stream.h" +#include "common/file.h" #include "gob/gob.h" #include "gob/game.h" @@ -154,6 +155,17 @@ int16 Game_v6::addNewCollision(int16 id, uint16 left, uint16 top, return 0; } +void Game_v6::prepareStart(void) { + _noCd = false; + + if (Common::File::exists("cd1.itk") && Common::File::exists("cd2.itk") && + Common::File::exists("cd3.itk") && Common::File::exists("cd4.itk")) { + _noCd = true; + } + + Game_v2::prepareStart(); +} + void Game_v6::pushCollisions(char all) { Collision *srcPtr; Collision *destPtr; diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp index 1571546faa..e61e78cbbb 100644 --- a/engines/gob/inter_v6.cpp +++ b/engines/gob/inter_v6.cpp @@ -769,7 +769,7 @@ void Inter_v6::o6_openItk() { // (it checks CD1.ITK - CD4.ITK and the first that's found determines // the CD number), while its NO_CD modus wants everything in CD1.ITK. // So we just open the other ITKs, too. - if (!scumm_stricmp(fileName, "cd1.itk")) { + if (_vm->_game->_noCd && !scumm_stricmp(fileName, "CD1.ITK")) { _vm->_dataIO->openDataFile("CD2.ITK", true); _vm->_dataIO->openDataFile("CD3.ITK", true); _vm->_dataIO->openDataFile("CD4.ITK", true); diff --git a/engines/gob/saveload.h b/engines/gob/saveload.h index 593c13f374..467403bdb8 100644 --- a/engines/gob/saveload.h +++ b/engines/gob/saveload.h @@ -413,7 +413,8 @@ protected: class SaveLoad_v6 : public SaveLoad { public: enum SaveType { - kSaveNone + kSaveNone, + kSaveNoCD }; SaveLoad_v6(GobEngine *vm, const char *targetName); diff --git a/engines/gob/saveload_v6.cpp b/engines/gob/saveload_v6.cpp index 9e49a3ea63..cc233a36ba 100644 --- a/engines/gob/saveload_v6.cpp +++ b/engines/gob/saveload_v6.cpp @@ -27,12 +27,13 @@ #include "gob/gob.h" #include "gob/saveload.h" +#include "gob/game.h" namespace Gob { SaveLoad_v6::SaveFile SaveLoad_v6::_saveFiles[] = { {"mdo.def", 0, kSaveModeExists, kSaveNone}, - {"NO_CD.TXT", 0, kSaveModeExists, kSaveNone} + {"NO_CD.TXT", 0, kSaveModeExists, kSaveNoCD} }; SaveLoad_v6::SaveLoad_v6(GobEngine *vm, const char *targetName) : @@ -45,11 +46,21 @@ SaveLoad_v6::~SaveLoad_v6() { SaveLoad::SaveMode SaveLoad_v6::getSaveMode(const char *fileName) { fileName = stripPath(fileName); - for (int i = 0; i < ARRAYSIZE(_saveFiles); i++) + int i; + for (i = 0; i < ARRAYSIZE(_saveFiles); i++) if (!scumm_stricmp(fileName, _saveFiles[i].sourceName)) - return _saveFiles[i].mode; + break; - return kSaveModeNone; + if (i >= ARRAYSIZE(_saveFiles)) + return kSaveModeNone; + + if (_saveFiles[i].type != kSaveNoCD) + return _saveFiles[i].mode; + + if (_vm->_game->_noCd) + return kSaveModeExists; + else + return kSaveModeNone; } } // End of namespace Gob -- cgit v1.2.3