aboutsummaryrefslogtreecommitdiff
path: root/engines/teenagent
diff options
context:
space:
mode:
authorFilippos Karapetis2012-07-15 02:14:37 +0300
committerFilippos Karapetis2012-07-15 02:14:37 +0300
commit13a5e5812af635477626de6a13f54ed8b8e4afa5 (patch)
tree446c55161e7a6675b72b86f56176f17f0908af3f /engines/teenagent
parent2c5cf9f860ffe5264268379ce6e0c0aa5ff25c0e (diff)
downloadscummvm-rg350-13a5e5812af635477626de6a13f54ed8b8e4afa5.tar.gz
scummvm-rg350-13a5e5812af635477626de6a13f54ed8b8e4afa5.tar.bz2
scummvm-rg350-13a5e5812af635477626de6a13f54ed8b8e4afa5.zip
TEENAGENT: Unpack teenagent.dat and remove the engine's zlib dependency
This addresses bug #3539822 - "TEENAGENT: Not working without zlib"
Diffstat (limited to 'engines/teenagent')
-rw-r--r--engines/teenagent/resources.cpp46
1 files changed, 29 insertions, 17 deletions
diff --git a/engines/teenagent/resources.cpp b/engines/teenagent/resources.cpp
index 597ca670c0..74ebae9c9b 100644
--- a/engines/teenagent/resources.cpp
+++ b/engines/teenagent/resources.cpp
@@ -22,7 +22,6 @@
#include "teenagent/resources.h"
#include "teenagent/teenagent.h"
#include "common/textconsole.h"
-#include "common/zlib.h"
namespace TeenAgent {
@@ -69,24 +68,37 @@ bool Resources::loadArchives(const ADGameDescription *gd) {
warning("%s", errorMessage.c_str());
return false;
}
- Common::SeekableReadStream *dat = Common::wrapCompressedReadStream(dat_file);
- cseg.read(dat, 0xb3b0);
- dseg.read(dat, 0xe790);
- eseg.read(dat, 0x8be2);
-
- delete dat;
-
- {
- FilePack varia;
- varia.open("varia.res");
- font7.load(varia, 7);
- font7.width_pack = 1;
- font7.height = 11;
- font8.load(varia, 8);
- font8.height = 31;
- varia.close();
+
+ // Check if teenagent.dat is compressed (older versions of the file)
+ uint16 header = dat_file->readUint16BE();
+ bool isCompressed = (header == 0x1F8B ||
+ ((header & 0x0F00) == 0x0800 &&
+ header % 31 == 0));
+ dat_file->seek(-2, SEEK_CUR);
+
+ if (isCompressed) {
+ delete dat_file;
+ Common::String errorMessage = "The teenagent.dat file is compressed. Please decompress it";
+ GUIErrorMessage(errorMessage);
+ warning("%s", errorMessage.c_str());
+ return false;
}
+ cseg.read(dat_file, 0xb3b0);
+ dseg.read(dat_file, 0xe790);
+ eseg.read(dat_file, 0x8be2);
+
+ delete dat_file;
+
+ FilePack varia;
+ varia.open("varia.res");
+ font7.load(varia, 7);
+ font7.width_pack = 1;
+ font7.height = 11;
+ font8.load(varia, 8);
+ font8.height = 31;
+ varia.close();
+
off.open("off.res");
on.open("on.res");
ons.open("ons.res");