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

kirben at users.sourceforge.net kirben at users.sourceforge.net
Sat Oct 7 03:10:39 CEST 2006


Revision: 24154
          http://svn.sourceforge.net/scummvm/?rev=24154&view=rev
Author:   kirben
Date:     2006-10-06 18:10:32 -0700 (Fri, 06 Oct 2006)

Log Message:
-----------
Add more script opcodes for Elvira 1/2/WW

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

Modified: scummvm/trunk/engines/agos/agos.cpp
===================================================================
--- scummvm/trunk/engines/agos/agos.cpp	2006-10-07 01:05:12 UTC (rev 24153)
+++ scummvm/trunk/engines/agos/agos.cpp	2006-10-07 01:10:32 UTC (rev 24154)
@@ -841,6 +841,10 @@
 	return findChildOfType(item, 2) != NULL;
 }
 
+bool AGOSEngine::isPlayer(Item *item) {
+	return findChildOfType(item, 3) != NULL;
+}
+
 uint AGOSEngine::getOffsetOfChild2Param(SubObject *child, uint prop) {
 	uint m = 1;
 	uint offset = 0;

Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h	2006-10-07 01:05:12 UTC (rev 24153)
+++ scummvm/trunk/engines/agos/agos.h	2006-10-07 01:10:32 UTC (rev 24154)
@@ -600,6 +600,7 @@
 
 	bool isRoom(Item *item);
 	bool isObject(Item *item);
+	bool isPlayer(Item *item);
 
 	void itemChildrenChanged(Item *item);
 	void unlinkItem(Item *item);
@@ -886,8 +887,6 @@
 	void o_oflag();
 	void o_destroy();
 	void o_place();
-	void o_copyof();
-	void o_copyfo();
 	void o_copyff();
 	void o_clear();
 	void o_let();
@@ -1030,9 +1029,17 @@
 	void oe1_isNotAt();
 	void oe1_sibling();
 	void oe1_notSibling();
+	void oe1_isPlayer();
+	void oe1_canPut();
+	void oe1_copyof();
+	void oe1_copyfo();
+	void oe1_whatO();
 	void oe1_setFF();
 	void oe1_score();
 	void oe1_doClass();
+	void oe1_pobj();
+	void oe1_pName();
+	void oe1_pcName();
 	void oe1_setUserItem();
 	void oe1_getUserItem();
 	void oe1_clearUserItem();
@@ -1043,7 +1050,6 @@
 	void oe1_printStats();
 
 	// Opcodes, Elvira 2 only
-	void oe2_pobj();
 	void oe2_loadUserGame();
 	void oe2_setDoorOpen();
 	void oe2_setDoorClosed();

Modified: scummvm/trunk/engines/agos/debug.h
===================================================================
--- scummvm/trunk/engines/agos/debug.h	2006-10-07 01:05:12 UTC (rev 24153)
+++ scummvm/trunk/engines/agos/debug.h	2006-10-07 01:10:32 UTC (rev 24154)
@@ -30,11 +30,11 @@
 	/* 0 */
 	"IJ|AT",
 	"IJ|NOT_AT",
-	NULL,
-	NULL,
+	"IJ|PRESENT",
+	"IJ|NOT_PRESENT",
 	/* 4 */
-	NULL,
-	NULL,
+	"IJ|WORN",
+	"IJ|NOT_WORN",
 	"IJ|CARRIED",
 	"IJ|NOT_CARRIED",
 	/* 8 */
@@ -65,8 +65,8 @@
 	/* 28 */
 	NULL,
 	NULL,
+	"IJ|IS_PLAYER",
 	NULL,
-	NULL,
 	/* 32 */
 	"IJ|IS_ROOM",
 	"IJ|IS_OBJECT",
@@ -74,9 +74,9 @@
 	NULL,
 	/* 36 */
 	"IWJ|OBJECT_HAS_FLAG",
+	"IIJ|CAN_PUT",
 	NULL,
 	NULL,
-	NULL,
 	/* 40 */
 	NULL,
 	NULL,
@@ -95,13 +95,13 @@
 	/* 52 */
 	NULL,
 	NULL,
-	NULL,
-	NULL,
+	"IWV|COPY_OF",
+	"WIW|COPY_FO",
 	/* 56 */
 	"WW|MOVE",
+	"W|WHAT_O",
 	NULL,
 	NULL,
-	NULL,
 	/* 60 */
 	"W|SET_FF",
 	"W|ZERO",
@@ -168,10 +168,10 @@
 	NULL,
 	NULL,
 	/* 112 */
+	"I|PRINT_OBJ",
 	NULL,
-	NULL,
-	NULL,
-	NULL,
+	"I|PRINT_NAME",
+	"I|PRINT_CNAME",
 	/* 116 */
 	NULL,
 	NULL,
@@ -416,25 +416,25 @@
 	NULL,
 	"WJ|CHANCE",
 	/* 24 */
-	NULL,
+	"IJ|IS_PLAYER",
 	"IJ|IS_ROOM",
 	"IJ|IS_OBJECT",
 	"IWJ|ITEM_STATE_IS",
 	/* 28 */
 	"IBJ|OBJECT_HAS_FLAG",
+	"IIJ|CAN_PUT",
 	NULL,
-	NULL,
 	"I|SET_NO_PARENT",
 	/* 32 */
 	NULL,
 	"II|SET_PARENT",
-	NULL,
-	NULL,
+	"IBV|COPY_OF",
+	"VIB|COPY_FO",
 	/* 36 */
 	"VV|MOVE",
+	"W|WHAT_O",
 	NULL,
 	NULL,
-	NULL,
 	/* 40 */
 	NULL,
 	"V|ZERO",
@@ -478,8 +478,8 @@
 	/* 72 */
 	NULL,
 	"I|PRINT_OBJ",
-	NULL,
-	NULL,
+	"I|PRINT_NAME",
+	"I|PRINT_CNAME",
 	/* 76 */
 	"WW|ADD_TIMEOUT",
 	"J|IS_M1_EMPTY",

Modified: scummvm/trunk/engines/agos/intern.h
===================================================================
--- scummvm/trunk/engines/agos/intern.h	2006-10-07 01:05:12 UTC (rev 24153)
+++ scummvm/trunk/engines/agos/intern.h	2006-10-07 01:10:32 UTC (rev 24154)
@@ -192,7 +192,8 @@
 enum SubObjectFlags {
 	kOFText           = 0x1,
 	kOFSize           = 0x2,
-	kOFWeight         = 0x4,
+	kOFWorn           = 0x4, // Elvira 1
+	kOFWeight         = 0x4, // Others
 	kOFVolume         = 0x8,
 	kOFIcon           = 0x10,
 	kOFKeyColor1      = 0x20,

Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp	2006-10-07 01:05:12 UTC (rev 24153)
+++ scummvm/trunk/engines/agos/items.cpp	2006-10-07 01:10:32 UTC (rev 24154)
@@ -190,19 +190,24 @@
 	op[20] = &AGOSEngine::o_ltf;
 	op[21] = &AGOSEngine::o_gtf;
 
+	op[29] = &AGOSEngine::o_chance;
+	op[30] = &AGOSEngine::oe1_isPlayer;
+
 	op[32] = &AGOSEngine::o_isRoom;
 	op[33] = &AGOSEngine::o_isObject;
 	op[34] = &AGOSEngine::o_state;
 
 	op[36] = &AGOSEngine::o_oflag;
+	op[37] = &AGOSEngine::oe1_canPut;
 
 	op[48] = &AGOSEngine::o_destroy;
 
 	op[51] = &AGOSEngine::o_place;
 
-	op[54] = &AGOSEngine::o_copyof;
-	op[55] = &AGOSEngine::o_copyfo;
+	op[54] = &AGOSEngine::oe1_copyof;
+	op[55] = &AGOSEngine::oe1_copyfo;
 	op[56] = &AGOSEngine::o_copyff;
+	op[57] = &AGOSEngine::oe1_whatO;
 
 	op[60] = &AGOSEngine::oe1_setFF;
 	op[61] = &AGOSEngine::o_clear;
@@ -242,6 +247,9 @@
 	op[105] = &AGOSEngine::o_process;
 	op[106] = &AGOSEngine::oe1_doClass;
 
+	op[114] = &AGOSEngine::oe1_pName;
+	op[115] = &AGOSEngine::oe1_pcName;
+
 	op[119] = &AGOSEngine::o_when;
 
 	op[128] = &AGOSEngine::o_if1;
@@ -323,10 +331,15 @@
 void AGOSEngine::setupElvira2Opcodes(OpcodeProc *op) {
 	setupCommonOpcodes(op);
 
-	op[34] = &AGOSEngine::o_copyof;
-	op[35] = &AGOSEngine::o_copyfo;
+	op[24] = &AGOSEngine::oe1_isPlayer;
+	op[29] = &AGOSEngine::oe1_canPut;
+	op[34] = &AGOSEngine::oe1_copyof;
+	op[35] = &AGOSEngine::oe1_copyfo;
+	op[37] = &AGOSEngine::oe1_whatO;
 	op[54] = &AGOSEngine::o_moveDirn;
-	op[73] = &AGOSEngine::oe2_pobj;
+	op[73] = &AGOSEngine::oe1_pobj;
+	op[74] = &AGOSEngine::oe1_pName;
+	op[75] = &AGOSEngine::oe1_pcName;
 	op[83] = &AGOSEngine::o1_rescan;
 	op[89] = &AGOSEngine::oe2_loadUserGame;
 	op[98] = &AGOSEngine::o1_animate;
@@ -370,12 +383,17 @@
 	setupCommonOpcodes(op);
 
 	// Confirmed
-	op[34] = &AGOSEngine::o_copyof;
-	op[35] = &AGOSEngine::o_copyfo;
+	op[24] = &AGOSEngine::oe1_isPlayer;
+	op[29] = &AGOSEngine::oe1_canPut;
+	op[34] = &AGOSEngine::oe1_copyof;
+	op[37] = &AGOSEngine::oe1_whatO;
+	op[35] = &AGOSEngine::oe1_copyfo;
 	op[54] = &AGOSEngine::o_moveDirn;
 	op[55] = &AGOSEngine::oww_goto;
 	op[70] = &AGOSEngine::o1_printLongText;
-	op[73] = &AGOSEngine::oe2_pobj;
+	op[73] = &AGOSEngine::oe1_pobj;
+	op[74] = &AGOSEngine::oe1_pName;
+	op[75] = &AGOSEngine::oe1_pcName;
 	op[83] = &AGOSEngine::o1_rescan;
 	op[98] = &AGOSEngine::o1_animate;
 	op[99] = &AGOSEngine::o1_stopAnimate;
@@ -758,20 +776,6 @@
 	setItemParent(item, getNextItemPtr());
 }
 
-void AGOSEngine::o_copyof() {
-	// 34:
-	Item *item = getNextItemPtr();
-	uint tmp = getVarOrByte();
-	writeNextVarContents(getUserFlag(item, tmp));
-}
-
-void AGOSEngine::o_copyfo() {
-	// 35:
-	uint tmp = getNextVarContents();
-	Item *item = getNextItemPtr();
-	setUserFlag(item, getVarOrByte(), tmp);
-}
-
 void AGOSEngine::o_copyff() {
 	// 36: copy var
 	uint value = getNextVarContents();
@@ -1774,12 +1778,24 @@
 
 void AGOSEngine::oe1_worn() {
 	// 4: worn
-	getNextItemPtr();
+	Item *item = getNextItemPtr();
+	SubObject *subObject = (SubObject *)findChildOfType(item, 2);
+
+	if (item->parent != getItem1ID() || subObject == NULL)
+		setScriptCondition(false);
+	else
+		setScriptCondition((subObject->objectFlags & kOFWorn) != 0);
 }
 
 void AGOSEngine::oe1_notWorn() {
 	// 5: not worn
-	getNextItemPtr();
+	Item *item = getNextItemPtr();
+	SubObject *subObject = (SubObject *)findChildOfType(item, 2);
+
+	if (item->parent != getItem1ID() || subObject == NULL)
+		setScriptCondition(false);
+	else
+		setScriptCondition((subObject->objectFlags & kOFWorn) == 0);
 }
 
 void AGOSEngine::oe1_isNotAt() {
@@ -1802,8 +1818,44 @@
 	setScriptCondition(item1->parent != item2->parent);
 }
 
+void AGOSEngine::oe1_isPlayer() {
+	// 30: is player
+	setScriptCondition(isPlayer(getNextItemPtr()));
+}
+
+void AGOSEngine::oe1_canPut() {
+	// 37: can put
+	Item *item1 = getNextItemPtr();
+	Item *item2 = getNextItemPtr();
+	setScriptCondition(canPlace(item1, item2) == 0);
+}
+
+void AGOSEngine::oe1_copyof() {
+	// 54: copy of
+	Item *item = getNextItemPtr();
+	uint tmp = getVarOrByte();
+	writeNextVarContents(getUserFlag(item, tmp));
+}
+
+void AGOSEngine::oe1_copyfo() {
+	// 55: copy fo
+	uint tmp = getNextVarContents();
+	Item *item = getNextItemPtr();
+	setUserFlag(item, getVarOrByte(), tmp);
+}
+
+void AGOSEngine::oe1_whatO() {
+	// 57: what o
+	int a = getVarOrWord();	
+
+	if (a == 1)
+		_subjectItem = findMaster(levelOf(me()), _scriptAdj1,_scriptNoun1);
+	else
+		_objectItem = findMaster(levelOf(me()), _scriptAdj2, _scriptNoun2);
+}
+
 void AGOSEngine::oe1_setFF() {
-	// 60
+	// 60: set FF
 	writeNextVarContents(0xFF);
 }
 
@@ -1837,6 +1889,28 @@
 	}
 }
 
+void AGOSEngine::oe1_pobj() {
+	// 112: print object
+	SubObject *subObject = (SubObject *)findChildOfType(getNextItemPtr(), 2);
+
+	if (subObject != NULL && subObject->objectFlags & kOFText)
+		showMessageFormat("%s", (const char *)getStringPtrByID(subObject->objectFlagValue[0]));
+}
+
+void AGOSEngine::oe1_pName() {
+	// 114:
+	Item *i = getNextItemPtr();
+	showMessageFormat("%s", (const char *)getStringPtrByID(i->itemName));
+}
+
+void AGOSEngine::oe1_pcName() {
+	// 115:
+	Item *i = getNextItemPtr();
+	Common::String name = (const char *)getStringPtrByID(i->itemName);
+	name.toUppercase();
+	showMessageFormat("%s", name.c_str());
+}
+
 void AGOSEngine::oe1_setUserItem() {
 	// 176: set user item
 	Item *i = getNextItemPtr();
@@ -1915,14 +1989,6 @@
 // Elvira 2 Opcodes
 // -----------------------------------------------------------------------
 
-void AGOSEngine::oe2_pobj() {
-	// 73: print object
-	SubObject *subObject = (SubObject *)findChildOfType(getNextItemPtr(), 2);
-
-	if (subObject != NULL && subObject->objectFlags & kOFText)
-		showMessageFormat("%s", (const char *)getStringPtrByID(subObject->objectFlagValue[0]));
-}
-
 void AGOSEngine::oe2_loadUserGame() {
 	// 89: load user game
 	getStringPtrByID(getNextStringID());


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