[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