diff options
author | Travis Howell | 2006-11-06 14:28:19 +0000 |
---|---|---|
committer | Travis Howell | 2006-11-06 14:28:19 +0000 |
commit | 1b926fee107cef0e1bc525a7a082121f1d000881 (patch) | |
tree | 62d6d47e782a7dca338e6eb4a815f9a11d7135a2 /engines | |
parent | 415ec670564a328a67648ddae7c42a7142a2f053 (diff) | |
download | scummvm-rg350-1b926fee107cef0e1bc525a7a082121f1d000881.tar.gz scummvm-rg350-1b926fee107cef0e1bc525a7a082121f1d000881.tar.bz2 scummvm-rg350-1b926fee107cef0e1bc525a7a082121f1d000881.zip |
Add inherit code for earlier games
svn-id: r24640
Diffstat (limited to 'engines')
-rw-r--r-- | engines/agos/intern.h | 24 | ||||
-rw-r--r-- | engines/agos/items.cpp | 15 | ||||
-rw-r--r-- | engines/agos/res.cpp | 4 | ||||
-rw-r--r-- | engines/agos/script.cpp | 4 | ||||
-rw-r--r-- | engines/agos/script_e1.cpp | 4 |
5 files changed, 32 insertions, 19 deletions
diff --git a/engines/agos/intern.h b/engines/agos/intern.h index 7eed262f1c..14cd9275fb 100644 --- a/engines/agos/intern.h +++ b/engines/agos/intern.h @@ -66,31 +66,31 @@ struct SubPlayer : Child { int32 score; }; -struct SubUserChain : Child { +struct SubGenExit : Child { uint16 subroutine_id; - uint16 chChained; + uint16 dest[6]; }; -struct SubUserInherit : Child { +struct SubContainer : Child { uint16 subroutine_id; - uint16 inMaster; + uint16 volume; + uint16 flags; }; -struct SubUserFlag : Child { +struct SubChain : Child { uint16 subroutine_id; - uint16 userFlags[8]; - uint16 userItems[1]; + uint16 chChained; }; -struct SubContainer : Child { +struct SubUserFlag : Child { uint16 subroutine_id; - uint16 volume; - uint16 flags; + uint16 userFlags[8]; + uint16 userItems[1]; }; -struct SubGenExit : Child { +struct SubInherit : Child { uint16 subroutine_id; - uint16 dest[6]; + uint16 inMaster; }; enum { diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp index 0c111021ed..a7c8fa3aa5 100644 --- a/engines/agos/items.cpp +++ b/engines/agos/items.cpp @@ -110,10 +110,23 @@ void AGOSEngine::createPlayer() { } Child *AGOSEngine::findChildOfType(Item *i, uint type) { + Item *b = NULL; Child *child = i->children; - for (; child; child = child->next) + + for (; child; child = child->next) { if (child->type == type) return child; + if (child->type == 255) + b = derefItem(((SubInherit *)(child))->inMaster); + } + if (b) { + child = b->children; + for (; child; child = child->next) { + if (child->type == type) + return child; + } + } + return NULL; } diff --git a/engines/agos/res.cpp b/engines/agos/res.cpp index d26957fdd6..503e707766 100644 --- a/engines/agos/res.cpp +++ b/engines/agos/res.cpp @@ -432,7 +432,7 @@ void AGOSEngine::readItemChildren(Common::SeekableReadStream *in, Item *item, ui container->volume = in->readUint16BE(); container->flags = in->readUint16BE(); } else if (type == 8) { - SubUserChain *chain = (SubUserChain *)allocateChildBlock(item, 8, sizeof(SubUserChain)); + SubChain *chain = (SubChain *)allocateChildBlock(item, 8, sizeof(SubChain)); chain->chChained = (uint16)fileReadItemID(in); } else if (type == 9) { setUserFlag(item, 0, in->readUint16BE()); @@ -451,7 +451,7 @@ void AGOSEngine::readItemChildren(Common::SeekableReadStream *in, Item *item, ui fileReadItemID(in); } } else if (type == 255) { - SubUserInherit *inherit = (SubUserInherit *)allocateChildBlock(item, 255, sizeof(SubUserInherit)); + SubInherit *inherit = (SubInherit *)allocateChildBlock(item, 255, sizeof(SubInherit)); inherit->inMaster = (uint16)fileReadItemID(in); } else { error("readItemChildren: invalid type %d", type); diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp index c79f0b9902..a59037b15f 100644 --- a/engines/agos/script.cpp +++ b/engines/agos/script.cpp @@ -1105,10 +1105,10 @@ Child *nextSub(Child *sub, int16 key) { } void AGOSEngine::synchChain(Item *i) { - SubUserChain *c = (SubUserChain *)findChildOfType(i, 8); + SubChain *c = (SubChain *)findChildOfType(i, 8); while (c) { setItemState(derefItem(c->chChained), i->state); - c = (SubUserChain *)nextSub((Child *)c, 8); + c = (SubChain *)nextSub((Child *)c, 8); } } diff --git a/engines/agos/script_e1.cpp b/engines/agos/script_e1.cpp index 42d86fe18a..06fae926ad 100644 --- a/engines/agos/script_e1.cpp +++ b/engines/agos/script_e1.cpp @@ -445,13 +445,13 @@ void AGOSEngine::oe1_doorExit() { // 181: door exit Item *x; Item *a = (Item *)-1; - SubUserChain *c; + SubChain *c; Item *i = getNextItemPtr(); Item *d = getNextItemPtr(); int16 f = getVarOrWord(); int16 ct = 0; - c = (SubUserChain *)findChildOfType(d, 8); + c = (SubChain *)findChildOfType(d, 8); if (c) a = derefItem(c->chChained); while (ct < 6) { |