aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Hesse2008-12-17 13:07:56 +0000
committerSven Hesse2008-12-17 13:07:56 +0000
commitd0e2107b7e07587f732ae1f882b8ddae8c5ef5bd (patch)
treef0d6333ed40ff3be9c7906a49532d441615e55eb
parent774773b7cd02e3c6932095af4905a25eb1862392 (diff)
downloadscummvm-rg350-d0e2107b7e07587f732ae1f882b8ddae8c5ef5bd.tar.gz
scummvm-rg350-d0e2107b7e07587f732ae1f882b8ddae8c5ef5bd.tar.bz2
scummvm-rg350-d0e2107b7e07587f732ae1f882b8ddae8c5ef5bd.zip
Only do the no-cd-workaround if all resource files can be found
svn-id: r35409
-rw-r--r--engines/gob/game.cpp2
-rw-r--r--engines/gob/game.h4
-rw-r--r--engines/gob/game_v6.cpp12
-rw-r--r--engines/gob/inter_v6.cpp2
-rw-r--r--engines/gob/saveload.h3
-rw-r--r--engines/gob/saveload_v6.cpp19
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