From 1ad8d3ee6eb06d75b7509c3695f3e9f3de4a6f3a Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 15 Jul 2006 20:46:27 +0000 Subject: Adds filesize check for kyra.dat, this forces to upgrade always to the newest version though. svn-id: r23514 --- engines/kyra/resource.cpp | 10 +++++----- engines/kyra/resource.h | 2 ++ engines/kyra/staticres.cpp | 12 ++++++++++++ 3 files changed, 19 insertions(+), 5 deletions(-) (limited to 'engines') 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) -- cgit v1.2.3