aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/items.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/agos/items.cpp')
-rw-r--r--engines/agos/items.cpp132
1 files changed, 99 insertions, 33 deletions
diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp
index 7129cc2dc7..458e48d77e 100644
--- a/engines/agos/items.cpp
+++ b/engines/agos/items.cpp
@@ -190,19 +190,24 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) {
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 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) {
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::setupElvira1Opcodes(OpcodeProc *op) {
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 @@ void AGOSEngine::setupWaxworksOpcodes(OpcodeProc *op) {
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 @@ void AGOSEngine::o_place() {
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_notPresent() {
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 @@ void AGOSEngine::oe1_notSibling() {
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_doClass() {
}
}
+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 @@ void AGOSEngine::oe1_printStats() {
// 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());