From dcbad3a1ab92b8c2c6e5ec9939a75d74ce7eb6b3 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Thu, 5 Oct 2006 13:46:48 +0000 Subject: Fix startup of Elvira 1 svn-id: r24124 --- engines/agos/items.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'engines/agos/items.cpp') 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 -- cgit v1.2.3