aboutsummaryrefslogtreecommitdiff
path: root/engines/cryo
diff options
context:
space:
mode:
authorFilippos Karapetis2017-02-10 02:51:52 +0200
committerFilippos Karapetis2017-02-10 10:12:05 +0200
commit248e5d3c59adae40006db4b80a0efc3107312082 (patch)
tree6449fe7a41b2548816c300bd105e7cc00c887c2f /engines/cryo
parent29616127b32d833c7c413cfc979f2c523def1e11 (diff)
downloadscummvm-rg350-248e5d3c59adae40006db4b80a0efc3107312082.tar.gz
scummvm-rg350-248e5d3c59adae40006db4b80a0efc3107312082.tar.bz2
scummvm-rg350-248e5d3c59adae40006db4b80a0efc3107312082.zip
CRYO: Add handling for the cryo.dat aux data file
Diffstat (limited to 'engines/cryo')
-rw-r--r--engines/cryo/eden.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/engines/cryo/eden.cpp b/engines/cryo/eden.cpp
index b8e191c50b..4ff18bf307 100644
--- a/engines/cryo/eden.cpp
+++ b/engines/cryo/eden.cpp
@@ -48,6 +48,8 @@
namespace Cryo {
+#define CRYO_DAT_VER 1 // 1 byte
+
int16 _torchTick = 0;
int16 _glowIndex = 0;
int16 _torchCurIndex = 0;
@@ -4733,11 +4735,23 @@ void EdenGame::loadpermfiles() {
// Since PC version stores hotspots and rooms info in the executable, load them from premade resource file
Common::File f;
- if (f.open("led.dat")) {
+ if (f.open("cryo.dat")) {
const int kNumIcons = 136;
const int kNumRooms = 424;
- if (f.size() != kNumIcons * sizeof(Icon) + kNumRooms * sizeof(Room))
- error("Mismatching aux data");
+ const int dataSize = f.size() - 8 - 1; // CRYODATA + version
+ char headerId[9];
+
+ f.read(headerId, 8);
+ headerId[8] = '\0';
+ if (strcmp(headerId, "CRYODATA"))
+ error("Invalid aux data file");
+
+ if (f.readByte() != CRYO_DAT_VER)
+ error("Incorrect aux data version");
+
+ if (dataSize != kNumIcons * sizeof(Icon) + kNumRooms * sizeof(Room))
+ error("Mismatching data in aux data file");
+
for (int i = 0; i < kNumIcons; i++) {
_gameIcons[i].sx = f.readSint16LE();
_gameIcons[i].sy = f.readSint16LE();