aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2006-07-15 20:46:27 +0000
committerJohannes Schickel2006-07-15 20:46:27 +0000
commit1ad8d3ee6eb06d75b7509c3695f3e9f3de4a6f3a (patch)
tree8ae2e156153dc4a419a3a0d07cbca1d0d9692d69 /engines/kyra
parentea0e3a806c4de7fc30cd5f5324bf339e01ca9e80 (diff)
downloadscummvm-rg350-1ad8d3ee6eb06d75b7509c3695f3e9f3de4a6f3a.tar.gz
scummvm-rg350-1ad8d3ee6eb06d75b7509c3695f3e9f3de4a6f3a.tar.bz2
scummvm-rg350-1ad8d3ee6eb06d75b7509c3695f3e9f3de4a6f3a.zip
Adds filesize check for kyra.dat, this forces to upgrade always to the newest version though.
svn-id: r23514
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/resource.cpp10
-rw-r--r--engines/kyra/resource.h2
-rw-r--r--engines/kyra/staticres.cpp12
3 files changed, 19 insertions, 5 deletions
diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp
index 11b119ea16..b011ed3e7c 100644
--- a/engines/kyra/resource.cpp
+++ b/engines/kyra/resource.cpp
@@ -39,10 +39,10 @@ Resource::Resource(KyraEngine *engine) {
if (_engine->game() == GI_KYRA1) {
// we're loading KYRA.DAT here too (but just for Kyrandia 1)
- if (!loadPakFile("KYRA.DAT")) {
- GUI::MessageDialog errorMsg("You're missing the 'KYRA.DAT' file, get it from the ScummVM website");
+ if (!loadPakFile("KYRA.DAT") || !StaticResource::checkKyraDat()) {
+ GUI::MessageDialog errorMsg("You're missing the 'KYRA.DAT' file or it got corrupted, (re)get it from the ScummVM website");
errorMsg.runModal();
- error("couldn't open Kyrandia resource file ('KYRA.DAT') make sure you got one file for your version");
+ error("You're missing the 'KYRA.DAT' file or it got corrupted, (re)get it from the ScummVM website");
}
// We only need kyra.dat for the demo.
@@ -51,7 +51,7 @@ Resource::Resource(KyraEngine *engine) {
// only VRM file we need in the *whole* game for kyra1
if (_engine->features() & GF_TALKIE) {
- if !(loadPakFile("CHAPTER1.VRM"))
+ if (!loadPakFile("CHAPTER1.VRM"))
error("couldn't open pakfile 'CHAPTER1.VRM'");
}
} else if (_engine->game() == GI_KYRA3) {
@@ -72,7 +72,7 @@ Resource::Resource(KyraEngine *engine) {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
if (file->displayName().hasSuffix("PAK") || file->displayName().hasSuffix("APK")) {
- if (loadPakFile(file->displayName()) {
+ if (!loadPakFile(file->displayName())) {
error("couldn't open pakfile '%s'", file->displayName().c_str());
}
}
diff --git a/engines/kyra/resource.h b/engines/kyra/resource.h
index 7cb16f9918..beb79bfbb8 100644
--- a/engines/kyra/resource.h
+++ b/engines/kyra/resource.h
@@ -199,6 +199,8 @@ class StaticResource {
public:
StaticResource(KyraEngine *engine) : _engine(engine), _resList(), _fileLoader(0), _builtIn(0), _filenameTable(0) {}
~StaticResource() { deinit(); }
+
+ static bool checkKyraDat();
bool init();
void deinit();
diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp
index 724d318299..5a26d2f1f5 100644
--- a/engines/kyra/staticres.cpp
+++ b/engines/kyra/staticres.cpp
@@ -29,6 +29,18 @@
namespace Kyra {
#define RESFILE_VERSION 12
+#define KYRADAT_FILESIZE 67227
+
+bool StaticResource::checkKyraDat() {
+ Common::File kyraDat;
+ if (!kyraDat.open("KYRA.DAT"))
+ return false;
+
+ if (kyraDat.size() != KYRADAT_FILESIZE)
+ return false;
+
+ return true;
+}
#define GAME_FLAGS (GF_FLOPPY | GF_TALKIE | GF_DEMO | GF_AUDIOCD)
#define LANGUAGE_FLAGS (GF_ENGLISH | GF_FRENCH | GF_GERMAN | GF_SPANISH | GF_ITALIAN | GF_LNGUNK)