aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/fullpipe/objects.h17
-rw-r--r--engines/fullpipe/stateloader.cpp6
-rw-r--r--engines/fullpipe/utils.cpp24
-rw-r--r--engines/fullpipe/utils.h2
4 files changed, 40 insertions, 9 deletions
diff --git a/engines/fullpipe/objects.h b/engines/fullpipe/objects.h
index 5b15aa04f2..4551d29a19 100644
--- a/engines/fullpipe/objects.h
+++ b/engines/fullpipe/objects.h
@@ -111,6 +111,21 @@ class GameProject : public CObject {
virtual bool load(MfcArchive &file);
};
+class MessageQueue : public CObject {
+ int _id;
+ int _flags;
+ char *_stringObj;
+ int16 _dataId;
+ int16 _field_12;
+ int _field_14;
+ CPtrList _exCommands;
+ int _counter;
+ int _field_38;
+ int _isFinished;
+ int _parId;
+ int _flag1;
+};
+
class CInteraction : public CObject {
int16 _objectId1;
int16 _objectId2;
@@ -122,7 +137,7 @@ class CInteraction : public CObject {
int _objectState2;
int _xOffs;
int _yOffs;
- int _messageQueue;
+ MessageQueue *_messageQueue;
int _sceneId;
int _field_28;
int _flags;
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index e1c6d55bd0..82ba4562bd 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -237,6 +237,8 @@ bool CInteractionController::load(MfcArchive &file) {
bool CObList::load(MfcArchive &file) {
int count = file.readCount();
+ debug(0, "CObList::count: %d", count);
+
for (int i = 0; i < count; i++) {
CObject *t = file.parseClass();
t->load(file);
@@ -281,8 +283,10 @@ bool CInteraction::load(MfcArchive &file) {
_flags = file.readUint32LE();
_stringObj = file.readPascalString();
- // messageQueue
+ debug(0, "CInteraction::_stringObj = %s", _stringObj);
+ // messageQueue
+ _messageQueue = (MessageQueue *)file.parseClass();
return true;
}
diff --git a/engines/fullpipe/utils.cpp b/engines/fullpipe/utils.cpp
index 75e5f69f8d..b39ae423ea 100644
--- a/engines/fullpipe/utils.cpp
+++ b/engines/fullpipe/utils.cpp
@@ -29,9 +29,15 @@
namespace Fullpipe {
-char *MfcArchive::readPascalString() {
+char *MfcArchive::readPascalString(bool twoByte) {
char *tmp;
- int len = readByte();
+ int len;
+
+ if (twoByte)
+ len = readUint16LE();
+ else
+ len = readByte();
+
tmp = (char *)calloc(len + 1, 1);
read(tmp, len);
@@ -73,17 +79,21 @@ CObject *MfcArchive::parseClass() {
uint obTag = readUint16LE();
+ debug(0, "parseClass::obTag = %d", obTag);
+
if (obTag == 0xffff) {
int schema = readUint16LE();
- name = readPascalString();
+ debug(0, "parseClass::schema = %d", schema);
+
+ name = readPascalString(true);
if (!_classMap.contains(name)) {
- error("Unknown class in MfcArchive: %s", name);
+ error("Unknown class in MfcArchive: <%s>", name);
}
- _objectMap[_lastIndex] = objectId = _classMap[name];
- _lastIndex++;
+ objectId = _classMap[name];
+ _objectMap.push_back(objectId);
} else {
obTag &= ~0x8000;
@@ -93,6 +103,8 @@ CObject *MfcArchive::parseClass() {
objectId = _objectMap[obTag];
}
+
+ debug(0, "objectId: %d", objectId);
switch (objectId) {
case kCInteraction:
diff --git a/engines/fullpipe/utils.h b/engines/fullpipe/utils.h
index a791139a6b..df56262421 100644
--- a/engines/fullpipe/utils.h
+++ b/engines/fullpipe/utils.h
@@ -41,7 +41,7 @@ class MfcArchive : public Common::File {
public:
MfcArchive();
- char *readPascalString();
+ char *readPascalString(bool twoByte = false);
int readCount();
CObject *parseClass();
};