[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