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

kirben at users.sourceforge.net kirben at users.sourceforge.net
Sat Oct 7 10:28:19 CEST 2006


Revision: 24161
          http://svn.sourceforge.net/scummvm/?rev=24161&view=rev
Author:   kirben
Date:     2006-10-07 01:28:06 -0700 (Sat, 07 Oct 2006)

Log Message:
-----------
Add more code differences in Elvira 1

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

Modified: scummvm/trunk/engines/agos/agos.cpp
===================================================================
--- scummvm/trunk/engines/agos/agos.cpp	2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/agos.cpp	2006-10-07 08:28:06 UTC (rev 24161)
@@ -1380,11 +1380,13 @@
 void AGOSEngine::hitarea_stuff_helper() {
 	time_t cur_time;
 
-	if (getGameType() == GType_SIMON2 || getGameType() == GType_FF || getGameType() == GType_PP) {
+	if (getGameType() == GType_SIMON2 || getGameType() == GType_FF ||
+		getGameType() == GType_PP) {
 		if (_variableArray[254] || _variableArray[249]) {
 			hitarea_stuff_helper_2();
 		}
-	} else {
+	} else if (getGameType() == GType_ELVIRA2 || getGameType() == GType_WW || 
+		getGameType() == GType_SIMON1) {
 		uint subr_id = (uint16)_variableArray[254];
 		if (subr_id != 0) {
 			Subroutine *sub = getSubroutineByID(subr_id);

Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h	2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/agos.h	2006-10-07 08:28:06 UTC (rev 24161)
@@ -1054,6 +1054,7 @@
 	void oe1_pobj();
 	void oe1_pName();
 	void oe1_pcName();
+	void oe1_cFlag();
 	void oe1_means();
 	void oe1_setUserItem();
 	void oe1_getUserItem();
@@ -1061,9 +1062,12 @@
 	void oe1_findMaster();
 	void oe1_nextMaster();
 	void oe1_setTime();
+	void oe1_bitClear();
+	void oe1_bitSet();
 	void oe1_bitTest();
 	void oe1_zoneDisk();
 	void oe1_printStats();
+	void oe1_setStore();
 
 	// Opcodes, Elvira 2 only
 	void oe2_loadUserGame();

Modified: scummvm/trunk/engines/agos/debug.h
===================================================================
--- scummvm/trunk/engines/agos/debug.h	2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/debug.h	2006-10-07 08:28:06 UTC (rev 24161)
@@ -168,7 +168,7 @@
 	NULL,
 	NULL,
 	/* 112 */
-	"I|PRINT_OBJ",
+	"IW|PRINT_OBJ",
 	NULL,
 	"I|PRINT_NAME",
 	"I|PRINT_CNAME",
@@ -230,8 +230,8 @@
 	/* 160 */
 	NULL,
 	NULL,
+	"IWJ|IS_CFLAG",
 	NULL,
-	NULL,
 	/* 164 */
 	"|RESCAN",
 	"wwwW|MEANS",
@@ -341,9 +341,9 @@
 	NULL,
 	"IW|SET_CLASS",
 	"IW|UNSET_CLASS",
-	NULL,
+	"WW|CLEAR_BIT",
 	/* 252 */
-	NULL,
+	"WW|SET_BIT",
 	"WWJ|BIT_TEST",
 	NULL,
 	"W|WAIT_SYNC",
@@ -380,7 +380,7 @@
 	/* 280 */
 	"II|SET_PARENT_SPECIAL",
 	"|CLEAR_TIMERS",
-	NULL,
+	"IW|SET_STORE",
 	"WJ|IS_BOX",
 };
 

Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp	2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/items.cpp	2006-10-07 08:28:06 UTC (rev 24161)
@@ -260,6 +260,8 @@
 
 	op[152] = &AGOSEngine::o_debug;
 
+	op[162] = &AGOSEngine::oe1_cFlag;
+
 	op[164] = &AGOSEngine::o1_rescan;
 	op[165] = &AGOSEngine::oe1_means;
 
@@ -300,6 +302,8 @@
 	op[249] = &AGOSEngine::o_setClass;
 	op[250] = &AGOSEngine::o_unsetClass;
 
+	op[251] = &AGOSEngine::oe1_bitClear;
+	op[252] = &AGOSEngine::oe1_bitSet;
 	op[253] = &AGOSEngine::oe1_bitTest;
 
 	op[259] = &AGOSEngine::oe1_setTime;
@@ -1365,9 +1369,11 @@
 }
 
 void AGOSEngine::o_stopTune() {
-	// 134: dummy opcode?
-	midi.stop();
-	_lastMusicPlayed = -1;
+	// 134: stop tune
+	if (getGameType() == GType_SIMON2) {
+		midi.stop();
+		_lastMusicPlayed = -1;
+	}
 }
 
 void AGOSEngine::o_pauseGame() {
@@ -1904,9 +1910,10 @@
 void AGOSEngine::oe1_pobj() {
 	// 112: print object
 	SubObject *subObject = (SubObject *)findChildOfType(getNextItemPtr(), 2);
+	getVarOrWord();
 
-	if (subObject != NULL && subObject->objectFlags & kOFText)
-		showMessageFormat("%s", (const char *)getStringPtrByID(subObject->objectFlagValue[0]));
+	if (subObject != NULL)
+		showMessageFormat("%s", (const char *)getStringPtrByID(subObject->objectName));
 }
 
 void AGOSEngine::oe1_pName() {
@@ -1923,8 +1930,19 @@
 	showMessageFormat("%s", name.c_str());
 }
 
+void AGOSEngine::oe1_cFlag() {
+	// 162: check container flag
+	SubContainer *c = (SubContainer *)findChildOfType(getNextItemPtr(), 7);
+	uint bit = getVarOrWord();
+
+	if (c == NULL)
+		setScriptCondition(false);
+	else
+		setScriptCondition((c->flags & (1 << bit)) != 0);
+}
+
 void AGOSEngine::oe1_means() {
-	// TODO
+	// 165: TODO
 }
 
 void AGOSEngine::oe1_setUserItem() {
@@ -1983,6 +2001,22 @@
 		_objectItem = nextMaster(levelOf(me()), item, ad, no);
 }
 
+void AGOSEngine::oe1_bitClear() {
+	// 251: set bit off
+	int var = getVarOrWord();
+	int bit = getVarOrWord();
+
+	writeVariable(var, _variableArray[var] & ~(1 << bit));
+}
+
+void AGOSEngine::oe1_bitSet() {
+	// 252: set bit on
+	int var = getVarOrWord();
+	int bit = getVarOrWord();
+
+	writeVariable(var, _variableArray[var] | (1 << bit));
+}
+
 void AGOSEngine::oe1_bitTest() {
 	// 253: bit test
 	int var = getVarOrWord();
@@ -2006,6 +2040,16 @@
 	// 270: print stats
 }
 
+void AGOSEngine::oe1_setStore() {
+	// 282: set store
+	Item *item = getNextItemPtr();
+
+	if (getVarOrWord() == 1)
+		_subjectItem = item;
+	else
+		_objectItem = item;
+}
+
 // -----------------------------------------------------------------------
 // Elvira 2 Opcodes
 // -----------------------------------------------------------------------

Modified: scummvm/trunk/engines/agos/verb.cpp
===================================================================
--- scummvm/trunk/engines/agos/verb.cpp	2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/verb.cpp	2006-10-07 08:28:06 UTC (rev 24161)
@@ -744,10 +744,17 @@
 		if (getGameType() == GType_PP) {
 			_variableArray[400] = x;
 			_variableArray[401] = y;
-		} else {
+		} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2 ||
+			getGameType() == GType_FF) {
 			_variableArray[1] = x;
 			_variableArray[2] = y;
-		}
+		} else if (getGameType() == GType_ELVIRA1) {
+			if (best_ha->verb & 0x4000) {
+				if (_variableArray[500] == 0) {
+					_variableArray[500] = best_ha->verb & 0xBFFF;
+				}
+			}
+		} 
 	}
 
 	if (best_ha->flags & kBFNoTouchName) {


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