diff options
-rw-r--r-- | engines/fullpipe/objects.h | 17 | ||||
-rw-r--r-- | engines/fullpipe/stateloader.cpp | 6 | ||||
-rw-r--r-- | engines/fullpipe/utils.cpp | 24 | ||||
-rw-r--r-- | engines/fullpipe/utils.h | 2 |
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(); }; |