[Scummvm-cvs-logs] SF.net SVN: scummvm: [24640] scummvm/trunk/engines/agos
kirben at users.sourceforge.net
kirben at users.sourceforge.net
Mon Nov 6 15:28:30 CET 2006
Revision: 24640
http://svn.sourceforge.net/scummvm/?rev=24640&view=rev
Author: kirben
Date: 2006-11-06 06:28:19 -0800 (Mon, 06 Nov 2006)
Log Message:
-----------
Add inherit code for earlier games
Modified Paths:
--------------
scummvm/trunk/engines/agos/intern.h
scummvm/trunk/engines/agos/items.cpp
scummvm/trunk/engines/agos/res.cpp
scummvm/trunk/engines/agos/script.cpp
scummvm/trunk/engines/agos/script_e1.cpp
Modified: scummvm/trunk/engines/agos/intern.h
===================================================================
--- scummvm/trunk/engines/agos/intern.h 2006-11-06 13:59:11 UTC (rev 24639)
+++ scummvm/trunk/engines/agos/intern.h 2006-11-06 14:28:19 UTC (rev 24640)
@@ -66,33 +66,33 @@
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 SubChain : Child {
+ uint16 subroutine_id;
+ uint16 chChained;
+};
+
struct SubUserFlag : Child {
uint16 subroutine_id;
uint16 userFlags[8];
uint16 userItems[1];
};
-struct SubContainer : Child {
+struct SubInherit : Child {
uint16 subroutine_id;
- uint16 volume;
- uint16 flags;
+ uint16 inMaster;
};
-struct SubGenExit : Child {
- uint16 subroutine_id;
- uint16 dest[6];
-};
-
enum {
SubRoom_SIZE = sizeof(SubRoom) - sizeof(uint16),
SubSuperRoom_SIZE = sizeof(SubSuperRoom) - sizeof(uint16),
Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp 2006-11-06 13:59:11 UTC (rev 24639)
+++ scummvm/trunk/engines/agos/items.cpp 2006-11-06 14:28:19 UTC (rev 24640)
@@ -110,10 +110,23 @@
}
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;
}
Modified: scummvm/trunk/engines/agos/res.cpp
===================================================================
--- scummvm/trunk/engines/agos/res.cpp 2006-11-06 13:59:11 UTC (rev 24639)
+++ scummvm/trunk/engines/agos/res.cpp 2006-11-06 14:28:19 UTC (rev 24640)
@@ -432,7 +432,7 @@
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 @@
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);
Modified: scummvm/trunk/engines/agos/script.cpp
===================================================================
--- scummvm/trunk/engines/agos/script.cpp 2006-11-06 13:59:11 UTC (rev 24639)
+++ scummvm/trunk/engines/agos/script.cpp 2006-11-06 14:28:19 UTC (rev 24640)
@@ -1105,10 +1105,10 @@
}
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);
}
}
Modified: scummvm/trunk/engines/agos/script_e1.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_e1.cpp 2006-11-06 13:59:11 UTC (rev 24639)
+++ scummvm/trunk/engines/agos/script_e1.cpp 2006-11-06 14:28:19 UTC (rev 24640)
@@ -445,13 +445,13 @@
// 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) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list