aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2004-09-07 12:56:12 +0000
committerTravis Howell2004-09-07 12:56:12 +0000
commit505bbcc295232ae97c0d55b15b863096d0b842f8 (patch)
tree118b5d02d933bf0b0e241bb18348cf3e39b57829
parent67498a174b0c73d060d704484fa767ccb4f6c7be (diff)
downloadscummvm-rg350-505bbcc295232ae97c0d55b15b863096d0b842f8.tar.gz
scummvm-rg350-505bbcc295232ae97c0d55b15b863096d0b842f8.tar.bz2
scummvm-rg350-505bbcc295232ae97c0d55b15b863096d0b842f8.zip
Add another opcode/stub
svn-id: r14941
-rw-r--r--scumm/intern.h1
-rw-r--r--scumm/script_v90he.cpp54
2 files changed, 53 insertions, 2 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index 9b5d9ea17f..9d6297fcf0 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -808,6 +808,7 @@ protected:
void o90_unknown27();
void o90_unknown28();
void o90_unknown29();
+ void o90_unknown37();
};
class ScummEngine_v7 : public ScummEngine_v6 {
diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp
index 42e6d33fd6..b201daaf79 100644
--- a/scumm/script_v90he.cpp
+++ b/scumm/script_v90he.cpp
@@ -110,10 +110,10 @@ void ScummEngine_v90he::setupOpcodes() {
OPCODE(o6_invalid),
OPCODE(o6_invalid),
/* 34 */
+ OPCODE(o72_findAllObjects),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
- OPCODE(o6_invalid),
- OPCODE(o6_invalid),
+ OPCODE(o90_unknown37),
/* 38 */
OPCODE(o6_invalid),
OPCODE(o6_invalid),
@@ -505,6 +505,7 @@ void ScummEngine_v90he::o90_unknown25() {
void ScummEngine_v90he::o90_unknown26() {
// Incomplete
+ int args[16];
int subOp = fetchScriptByte();
subOp -= 34;
@@ -537,6 +538,8 @@ void ScummEngine_v90he::o90_unknown26() {
break;
case 23:
pop();
+ if (_heversion >= 98)
+ pop();
break;
case 29:
pop();
@@ -558,6 +561,9 @@ void ScummEngine_v90he::o90_unknown26() {
case 90:
pop();
break;
+ case 91:
+ getStackList(args, ARRAYSIZE(args));
+ break;
case 124:
break;
case 164:
@@ -676,4 +682,48 @@ void ScummEngine_v90he::o90_unknown29() {
debug(1,"o90_unknown29 stub (%d)", subOp);
}
+void ScummEngine_v90he::o90_unknown37() {
+ int data, dim1start, dim1end, dim2start, dim2end;
+ int type = fetchScriptByte();
+
+ switch (type) {
+ case 2: // SO_BIT_ARRAY
+ data = kBitArray;
+ break;
+ case 3: // SO_NIBBLE_ARRAY
+ data = kNibbleArray;
+ break;
+ case 4: // SO_BYTE_ARRAY
+ data = kByteArray;
+ break;
+ case 5: // SO_INT_ARRAY
+ data = kIntArray;
+ break;
+ case 6:
+ data = kDwordArray;
+ break;
+ case 7: // SO_STRING_ARRAY
+ data = kStringArray;
+ break;
+ default:
+ error("o90_unknown37: default case %d", type);
+ }
+
+ if (pop() == 2) {
+ dim1end = pop();
+ dim1start = pop();
+ dim2end = pop();
+ dim2start = pop();
+ } else {
+ dim2end = pop();
+ dim2start = pop();
+ dim1end = pop();
+ dim1start = pop();
+ }
+
+ defineArray(fetchScriptWord(), data, dim2start, dim2end, dim1start, dim1end);
+
+ debug(1,"o90_unknown37 stub");
+}
+
} // End of namespace Scumm