aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/intern.h1
-rw-r--r--scumm/script_v6.cpp26
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;