[Scummvm-cvs-logs] SF.net SVN: scummvm: [24260] scummvm/trunk/engines/agos

kirben at users.sourceforge.net kirben at users.sourceforge.net
Tue Oct 10 13:25:52 CEST 2006


Revision: 24260
          http://svn.sourceforge.net/scummvm/?rev=24260&view=rev
Author:   kirben
Date:     2006-10-10 04:25:45 -0700 (Tue, 10 Oct 2006)

Log Message:
-----------
Fix movement in Elvira 1

Modified Paths:
--------------
    scummvm/trunk/engines/agos/agos.h
    scummvm/trunk/engines/agos/contain.cpp
    scummvm/trunk/engines/agos/debug.h
    scummvm/trunk/engines/agos/items.cpp

Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h	2006-10-09 20:50:21 UTC (rev 24259)
+++ scummvm/trunk/engines/agos/agos.h	2006-10-10 11:25:45 UTC (rev 24260)
@@ -928,7 +928,6 @@
 	void o_mod();
 	void o_modf();
 	void o_random();
-	void o_moveDirn();
 	void o_goto();
 	void o_oset();
 	void o_oclear();
@@ -1041,6 +1040,10 @@
 	int sizeOfRec(Item *o, int d);
 	int sizeRec(Item *x, int d);
 
+	int weighUp(Item *x);
+	int weightRec(Item *x, int d);
+	int weightOf(Item *x);
+
 	int canPlace(Item *x, Item *y);
 	void xPlace(Item *x, Item *y);
 
@@ -1058,7 +1061,9 @@
 	void oe1_copyof();
 	void oe1_copyfo();
 	void oe1_whatO();
+	void oe1_weigh();
 	void oe1_setFF();
+	void oe1_moveDirn();
 	void oe1_score();
 	void oe1_doClass();
 	void oe1_pobj();
@@ -1088,6 +1093,7 @@
 	void oe1_setStore();
 
 	// Opcodes, Elvira 2 only
+	void oe2_moveDirn();
 	void oe2_loadUserGame();
 	void oe2_setDoorOpen();
 	void oe2_setDoorClosed();

Modified: scummvm/trunk/engines/agos/contain.cpp
===================================================================
--- scummvm/trunk/engines/agos/contain.cpp	2006-10-09 20:50:21 UTC (rev 24259)
+++ scummvm/trunk/engines/agos/contain.cpp	2006-10-10 11:25:45 UTC (rev 24260)
@@ -98,4 +98,33 @@
 	return 0;
 }
 
+int AGOSEngine::weighUp(Item *x) {
+	return weightRec(x, 0);
+}
+
+int AGOSEngine::weightRec(Item *x, int d) {
+	int n = weightOf(x);
+	Item *o;
+
+	if (d > 32)
+		return 0;
+	o = derefItem(x->child);
+	while (o) {
+		n += weightRec(o, d + 1);
+		o = derefItem(o->next);
+	}
+
+	return n;
+}
+
+int AGOSEngine::weightOf(Item *x) {
+	SubObject *o = (SubObject *)findChildOfType(x, 2);
+	SubPlayer *p = (SubPlayer *)findChildOfType(x, 3);
+	if (o)
+		return o->objectWeight;
+	if (p)
+		return p->weight;
+	return 0;
+}
+
 } // End of namespace AGOS

Modified: scummvm/trunk/engines/agos/debug.h
===================================================================
--- scummvm/trunk/engines/agos/debug.h	2006-10-09 20:50:21 UTC (rev 24259)
+++ scummvm/trunk/engines/agos/debug.h	2006-10-10 11:25:45 UTC (rev 24260)
@@ -101,7 +101,7 @@
 	"WW|MOVE",
 	"W|WHAT_O",
 	NULL,
-	NULL,
+	"IW|WEIGH",
 	/* 60 */
 	"W|SET_FF",
 	"W|ZERO",

Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp	2006-10-09 20:50:21 UTC (rev 24259)
+++ scummvm/trunk/engines/agos/items.cpp	2006-10-10 11:25:45 UTC (rev 24260)
@@ -209,6 +209,7 @@
 	op[56] = &AGOSEngine::o_copyff;
 	op[57] = &AGOSEngine::oe1_whatO;
 
+	op[59] = &AGOSEngine::oe1_weigh;
 	op[60] = &AGOSEngine::oe1_setFF;
 	op[61] = &AGOSEngine::o_clear;
 
@@ -225,7 +226,7 @@
 	op[74] = &AGOSEngine::o_modf;
 	op[75] = &AGOSEngine::o_random;
 
-	op[76] = &AGOSEngine::o_moveDirn;
+	op[76] = &AGOSEngine::oe1_moveDirn;
 	op[77] = &AGOSEngine::o_goto;
 
 	op[80] = &AGOSEngine::o_oset;
@@ -350,7 +351,7 @@
 	op[34] = &AGOSEngine::oe1_copyof;
 	op[35] = &AGOSEngine::oe1_copyfo;
 	op[37] = &AGOSEngine::oe1_whatO;
-	op[54] = &AGOSEngine::o_moveDirn;
+	op[54] = &AGOSEngine::oe2_moveDirn;
 	op[73] = &AGOSEngine::oe1_pobj;
 	op[74] = &AGOSEngine::oe1_pName;
 	op[75] = &AGOSEngine::oe1_pcName;
@@ -406,7 +407,7 @@
 	op[34] = &AGOSEngine::oe1_copyof;
 	op[37] = &AGOSEngine::oe1_whatO;
 	op[35] = &AGOSEngine::oe1_copyfo;
-	op[54] = &AGOSEngine::o_moveDirn;
+	op[54] = &AGOSEngine::oww_moveDirn;
 	op[55] = &AGOSEngine::oww_goto;
 	op[70] = &AGOSEngine::o1_printLongText;
 	op[73] = &AGOSEngine::oe1_pobj;
@@ -892,20 +893,6 @@
 		writeVariable(var, _rnd.getRandomNumber(value - 1));
 }
 
-void AGOSEngine::o_moveDirn() {
-	// 54: move direction
-	int16 d = getVarOrByte();
-
-	if (getGameType() == GType_WW) {
-		moveDirn_ww(me(), d);
-	} else if (getGameType() == GType_ELVIRA2) {
-		moveDirn_e2(me(), d);
-	} else {
-		moveDirn_e1(me(), d);
-	}
-
-}
-
 void AGOSEngine::o_goto() {
 	// 55: set itemA parent
 	uint item = getNextItemID();
@@ -1867,11 +1854,23 @@
 		_objectItem = findMaster(levelOf(me()), _scriptAdj2, _scriptNoun2);
 }
 
+void AGOSEngine::oe1_weigh() {
+	// 59: weight
+	Item *item = getNextItemPtr();
+	writeVariable(getVarOrWord(), weighUp(item));
+}
+
 void AGOSEngine::oe1_setFF() {
 	// 60: set FF
 	writeNextVarContents(0xFF);
 }
 
+void AGOSEngine::oe1_moveDirn() {
+	// 54: move direction
+	int16 d = readVariable(getVarOrWord());
+	moveDirn_e1(me(), d);
+}
+
 void AGOSEngine::oe1_score() {
 	// 90: score
 	SubPlayer *p = (SubPlayer *) findChildOfType(me(), 3);
@@ -1937,7 +1936,16 @@
 }
 
 void AGOSEngine::oe1_means() {
-	// 165: TODO
+	// 165: means
+	_scriptVerb = getNextWord();
+	_scriptNoun1 = getNextWord();
+	_scriptNoun2 = getNextWord();
+
+	if (getVarOrWord()) {
+		int16 tmp = _scriptNoun1;
+		_scriptNoun1 = _scriptNoun2;
+		_scriptNoun2 = tmp;
+	}
 }
 
 void AGOSEngine::oe1_setUserItem() {
@@ -2125,6 +2133,12 @@
 // Elvira 2 Opcodes
 // -----------------------------------------------------------------------
 
+void AGOSEngine::oe2_moveDirn() {
+	// 54: move direction
+	int16 d = getVarOrByte();
+	moveDirn_e2(me(), d);
+}
+
 void AGOSEngine::oe2_loadUserGame() {
 	// 89: load user game
 	getStringPtrByID(getNextStringID());
@@ -2193,6 +2207,12 @@
 // Waxworks Opcodes
 // -----------------------------------------------------------------------
 
+void AGOSEngine::oww_moveDirn() {
+	// 54: move direction
+	int16 d = getVarOrByte();
+	moveDirn_ww(me(), d);
+}
+
 void AGOSEngine::oww_goto() {
 	// 55: set itemA parent
 	uint item = getNextItemID();


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