aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/items.cpp
diff options
context:
space:
mode:
authorTravis Howell2006-10-05 13:46:48 +0000
committerTravis Howell2006-10-05 13:46:48 +0000
commitdcbad3a1ab92b8c2c6e5ec9939a75d74ce7eb6b3 (patch)
treefee2f1a4343e0d076663594b5b042a97c98625c2 /engines/agos/items.cpp
parent5af4438cd25c7678544d09f6c574d00af4a84625 (diff)
downloadscummvm-rg350-dcbad3a1ab92b8c2c6e5ec9939a75d74ce7eb6b3.tar.gz
scummvm-rg350-dcbad3a1ab92b8c2c6e5ec9939a75d74ce7eb6b3.tar.bz2
scummvm-rg350-dcbad3a1ab92b8c2c6e5ec9939a75d74ce7eb6b3.zip
Fix startup of Elvira 1
svn-id: r24124
Diffstat (limited to 'engines/agos/items.cpp')
-rw-r--r--engines/agos/items.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp
index 2592b850d4..e225c4478f 100644
--- a/engines/agos/items.cpp
+++ b/engines/agos/items.cpp
@@ -248,6 +248,8 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) {
op[152] = &AGOSEngine::o_debug;
+ op[164] = &AGOSEngine::o1_rescan;
+
op[176] = &AGOSEngine::oe1_opcode176;
op[178] = &AGOSEngine::oe1_opcode178;
@@ -260,6 +262,9 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) {
op[207] = &AGOSEngine::o_getNext;
op[208] = &AGOSEngine::o_getChildren;
+ op[219] = &AGOSEngine::oe1_findMaster;
+ op[220] = &AGOSEngine::oe1_nextMaster;
+
op[224] = &AGOSEngine::o_picture;
op[225] = &AGOSEngine::o_loadZone;
op[226] = &AGOSEngine::o1_animate;
@@ -1759,16 +1764,49 @@ void AGOSEngine::oe1_setFF() {
}
void AGOSEngine::oe1_opcode176() {
+ // 176
getNextItemPtr();
getVarOrWord();
getNextItemPtr();
}
void AGOSEngine::oe1_opcode178() {
+ // 178
getNextItemPtr();
getVarOrWord();
}
+void AGOSEngine::oe1_findMaster() {
+ // 219: find master
+ int16 ad, no;
+ int16 d = getVarOrWord();
+
+ ad = (d == 1) ? _scriptAdj1 : _scriptAdj2;
+ no = (d == 1) ? _scriptNoun1 : _scriptNoun2;
+
+ d = getVarOrWord();
+ if (d == 1)
+ _subjectItem = findMaster(levelOf(me()), ad, no);
+ else
+ _objectItem = findMaster(levelOf(me()), ad, no);
+}
+
+void AGOSEngine::oe1_nextMaster() {
+ // 220: next master
+ int16 ad, no;
+ Item *item = getNextItemPtr();
+ int16 d = getVarOrWord();
+
+ ad = (d == 1) ? _scriptAdj1 : _scriptAdj2;
+ no = (d == 1) ? _scriptNoun1 : _scriptNoun2;
+
+ d = getVarOrWord();
+ if (d == 1)
+ _subjectItem = nextMaster(levelOf(me()), item, ad, no);
+ else
+ _objectItem = nextMaster(levelOf(me()), item, ad, no);
+}
+
void AGOSEngine::oe1_zoneDisk() {
// 267: zone disk
getVarOrWord();
@@ -2813,4 +2851,12 @@ void AGOSEngine::stopAnimateSimon2(uint a, uint b) {
_lockWord &= ~0x8000;
}
+int16 AGOSEngine::levelOf(Item *item) {
+ SubPlayer *p = (SubPlayer *) findChildOfType(item, 3);
+ if(p == NULL)
+ return 0;
+
+ return p->level;
+}
+
} // End of namespace AGOS