diff options
-rw-r--r-- | scumm/intern.h | 1 | ||||
-rw-r--r-- | scumm/script_v6.cpp | 26 |
2 files changed, 25 insertions, 2 deletions
diff --git a/scumm/intern.h b/scumm/intern.h index 94ea6ebdd5..6ab4b821ac 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -369,6 +369,7 @@ protected: void o6_openFile(); void o6_closeFile(); void o6_deleteFile(); + void o6_findAllObjects(); }; class Scumm_v7 : public Scumm_v6 diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp index b3ab94add2..372da5f4e2 100644 --- a/scumm/script_v6.cpp +++ b/scumm/script_v6.cpp @@ -319,7 +319,7 @@ void Scumm_v6::setupOpcodes() OPCODE(o6_invalid), /* DC */ OPCODE(o6_invalid), - OPCODE(o6_invalid), + OPCODE(o6_findAllObjects), OPCODE(o6_deleteFile), OPCODE(o6_invalid), /* E0 */ @@ -2902,7 +2902,7 @@ void Scumm_v6::o6_stampObject() { } void Scumm_v6::o6_stopTalking() { - warning("o6_stopTalking: stub"); + stopTalk(); } void Scumm_v6::o6_openFile() { @@ -2927,6 +2927,28 @@ void Scumm_v6::o6_deleteFile() { _scriptPointer += len + 1; } +void Scumm_v6::o6_findAllObjects() { + // FIXME is this even remotely correct? + // see http://users.bigpond.net.au/tgray2/findallobjects.txt + // for asm + int a = pop(); + int i = 1; + + warning("stub o6_findAllObjects(%d)", a); + if (a != _currentRoom) + warning("o6_findAllObjects: current room is not %d", a); + writeVar(0, 0); + defineArray(0, 5, 0, _numLocalObjects); + defineArray(0, 0, 0, _numLocalObjects); + + while(i < _numLocalObjects) { + writeArray(0, 0, i, _objs[i].obj_nr); + i++; + } + + push(readVar(0)); +} + void Scumm_v6::decodeParseString(int m, int n) { byte b; |