diff options
author | Travis Howell | 2006-10-05 13:46:48 +0000 |
---|---|---|
committer | Travis Howell | 2006-10-05 13:46:48 +0000 |
commit | dcbad3a1ab92b8c2c6e5ec9939a75d74ce7eb6b3 (patch) | |
tree | fee2f1a4343e0d076663594b5b042a97c98625c2 /engines/agos/items.cpp | |
parent | 5af4438cd25c7678544d09f6c574d00af4a84625 (diff) | |
download | scummvm-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.cpp | 46 |
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 |