diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/fullpipe/fullpipe.cpp | 3 | ||||
-rw-r--r-- | engines/fullpipe/fullpipe.h | 4 | ||||
-rw-r--r-- | engines/fullpipe/gfx.h | 1 | ||||
-rw-r--r-- | engines/fullpipe/messagequeue.cpp | 32 | ||||
-rw-r--r-- | engines/fullpipe/messagequeue.h | 11 | ||||
-rw-r--r-- | engines/fullpipe/scene.cpp | 15 | ||||
-rw-r--r-- | engines/fullpipe/scene.h | 2 | ||||
-rw-r--r-- | engines/fullpipe/scenes.cpp | 5 |
8 files changed, 71 insertions, 2 deletions
diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp index 2123d0887b..bbd43b63c2 100644 --- a/engines/fullpipe/fullpipe.cpp +++ b/engines/fullpipe/fullpipe.cpp @@ -69,6 +69,9 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc) _scene2 = 0; _globalMessageQueueList = 0; + _messageHandlers = 0; + + _updateScreenCallback = 0; g_fullpipe = this; } diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index 468d6ca1ec..4253499bdd 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -50,6 +50,7 @@ class CInventory2; class EntranceInfo; class GameProject; class GlobalMessageQueueList; +class MessageHandler; class NGIArchive; class Scene; class SoundList; @@ -110,6 +111,7 @@ public: bool _flgSoundList; GlobalMessageQueueList *_globalMessageQueueList; + MessageHandler *_messageHandlers; bool _needQuit; @@ -124,6 +126,8 @@ public: Scene *_inventoryScene; CInventory2 *_inventory; + int (*_updateScreenCallback)(void *); + void setObjectState(const char *name, int state); int getObjectEnumState(const char *name, const char *state); diff --git a/engines/fullpipe/gfx.h b/engines/fullpipe/gfx.h index 7eea54241c..44919fdc69 100644 --- a/engines/fullpipe/gfx.h +++ b/engines/fullpipe/gfx.h @@ -110,6 +110,7 @@ class GameObject : public CObject { virtual bool load(MfcArchive &file); void setOXY(int x, int y); void renumPictures(CPtrList *lst); + void setFlags(int16 flags) { _flags = flags; } }; class PictureObject : public GameObject { diff --git a/engines/fullpipe/messagequeue.cpp b/engines/fullpipe/messagequeue.cpp index 3c9e0889fc..7688a6a129 100644 --- a/engines/fullpipe/messagequeue.cpp +++ b/engines/fullpipe/messagequeue.cpp @@ -87,4 +87,36 @@ void GlobalMessageQueueList::disableQueueById(int id) { } } +bool removeMessageHandler(int16 id, int pos) { + if (g_fullpipe->_messageHandlers) { + MessageHandler *curItem = g_fullpipe->_messageHandlers; + MessageHandler *prevItem = 0; + int curPos = 0; + + while (id != curItem->id) { + prevItem = curItem; + curItem = curItem->nextItem; + curPos++; + + if (!curItem) + return false; + } + + if (pos == -1 || curPos == pos) { + prevItem->nextItem = curItem->nextItem; + delete curItem; + updateMessageHandlerIndex(prevItem->nextItem, -1); + + return true; + } + } + + return false; +} + +void updateMessageHandlerIndex(MessageHandler *msg, int offset) { + for (; msg; msg = msg->nextItem) + msg->index += offset; +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/messagequeue.h b/engines/fullpipe/messagequeue.h index 1f4cf02bfc..bb8d4108e3 100644 --- a/engines/fullpipe/messagequeue.h +++ b/engines/fullpipe/messagequeue.h @@ -62,6 +62,17 @@ class GlobalMessageQueueList : public CPtrList { void disableQueueById(int id); }; +struct MessageHandler { + int (*callback)(ExCommand *cmd); + int16 id; + int16 field_6; + int index; + MessageHandler *nextItem; +}; + +bool removeMessageHandler(int16 id, int pos); +void updateMessageHandlerIndex(MessageHandler *msg, int offset); + } // End of namespace Fullpipe #endif /* FULLPIPE_MESSAGEQUEUE_H */ diff --git a/engines/fullpipe/scene.cpp b/engines/fullpipe/scene.cpp index ab4f817373..3bc7c9d412 100644 --- a/engines/fullpipe/scene.cpp +++ b/engines/fullpipe/scene.cpp @@ -283,6 +283,21 @@ void Scene::addStaticANIObject(StaticANIObject *obj, bool addList2) { } } +void Scene::setPictureObjectsFlag4() { + for (uint i = 0; i < _picObjList.size(); i++) { + ((PictureObject *)_picObjList[i])->_flags |= 4; + } +} + +PictureObject *Scene::getPictureObjectById(int objId, int flags) { + for (uint i = 1; i < _picObjList.size(); i++) { + if(((PictureObject *)_picObjList[i])->_id == objId && ((PictureObject *)_picObjList[i])->_field_4 == flags) + return (PictureObject *)_picObjList[i]; + } + + return 0; +} + void Scene::draw(int par) { updateScrolling(par); diff --git a/engines/fullpipe/scene.h b/engines/fullpipe/scene.h index ac47d7e0ef..4085b058a7 100644 --- a/engines/fullpipe/scene.h +++ b/engines/fullpipe/scene.h @@ -54,6 +54,8 @@ class Scene : public Background { StaticANIObject *getStaticANIObject1ById(int obj, int a3); void deleteStaticANIObject(StaticANIObject *obj); void addStaticANIObject(StaticANIObject *obj, bool addList2); + void setPictureObjectsFlag4(); + PictureObject *getPictureObjectById(int objId, int flags); }; class SceneTag : public CObject { diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index 03017f65cd..46ef73ad5e 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -31,6 +31,7 @@ #include "fullpipe/sound.h" #include "fullpipe/motion.h" #include "fullpipe/input.h" +#include "fullpipe/messagequeue.h" #include "fullpipe/gameobj.h" @@ -111,12 +112,11 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { _aniMan2 = 0; } -#if 0 scene->setPictureObjectsFlag4(); for (CPtrList::iterator s = scene->_staticANIObjectList1.begin(); s != scene->_staticANIObjectList1.end(); ++s) { StaticANIObject *o = (StaticANIObject *)s; - o->setFlags(o->field_6 & 0xFE7F); + o->setFlags(o->_field_6 & 0xFE7F); } PictureObject *p = accessScene(SC_INV)->getPictureObjectById(PIC_INV_MENU, 0); @@ -125,6 +125,7 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { removeMessageHandler(2, -1); _updateScreenCallback = 0; +#if 0 switch (entrance->_sceneId) { case SC_INTRO1: sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_INTRO1"); |