aboutsummaryrefslogtreecommitdiff
path: root/scumm/script_v90he.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scumm/script_v90he.cpp')
-rw-r--r--scumm/script_v90he.cpp75
1 files changed, 70 insertions, 5 deletions
diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp
index a6f6adfff2..0b3f07d677 100644
--- a/scumm/script_v90he.cpp
+++ b/scumm/script_v90he.cpp
@@ -105,12 +105,12 @@ void ScummEngine_v90he::setupOpcodes() {
OPCODE(o6_invalid),
OPCODE(o90_unknown2F),
/* 30 */
- OPCODE(o90_unknown30),
+ OPCODE(o90_mod),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
/* 34 */
- OPCODE(o72_findAllObjects),
+ OPCODE(o90_unknown34),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
OPCODE(o90_unknown37),
@@ -242,7 +242,7 @@ void ScummEngine_v90he::setupOpcodes() {
/* 9C */
OPCODE(o6_roomOps),
OPCODE(o72_actorOps),
- OPCODE(o72_verbOps),
+ OPCODE(o90_unknown9E),
OPCODE(o6_getActorFromXY),
/* A0 */
OPCODE(o6_findObject),
@@ -804,9 +804,33 @@ void ScummEngine_v90he::o90_unknown2F() {
debug(1,"o90_unknown2F stub (%d)", subOp);
}
-void ScummEngine_v90he::o90_unknown30() {
+void ScummEngine_v90he::o90_mod() {
int a = pop();
- debug(1,"o90_unknown30 stub (%d)", a);
+ if (a == 0)
+ error("modulus by zero");
+ push(pop() % a);
+}
+
+void ScummEngine_v90he::o90_unknown34() {
+ // Incomplete
+ int args[16];
+
+ getStackList(args, ARRAYSIZE(args));
+ int room = pop();
+ int i = 1;
+
+ if (room != _currentRoom)
+ warning("o72_findAllObjects: current room is not %d", room);
+ writeVar(0, 0);
+ defineArray(0, kDwordArray, 0, 0, 0, _numLocalObjects + 1);
+ writeArray(0, 0, 0, _numLocalObjects);
+
+ while (i < _numLocalObjects) {
+ writeArray(0, 0, i, _objs[i].obj_nr);
+ i++;
+ }
+
+ push(readVar(0));
}
void ScummEngine_v90he::o90_unknown37() {
@@ -853,4 +877,45 @@ void ScummEngine_v90he::o90_unknown37() {
debug(1,"o90_unknown37 stub");
}
+void ScummEngine_v90he::o90_unknown9E() {
+ int subOp = fetchScriptByte();
+ subOp -= 57;
+
+ switch (subOp) {
+ case 0:
+ pop();
+ break;
+ case 6:
+ pop();
+ pop();
+ break;
+ case 9:
+ pop();
+ pop();
+ pop();
+ pop();
+ pop();
+ break;
+ case 13:
+ pop();
+ pop();
+ pop();
+ break;
+ case 29:
+ pop();
+ break;
+ case 118:
+ pop();
+ pop();
+ break;
+ case 160:
+ break;
+ case 198:
+ break;
+ default:
+ error("o90_unknown9E: Unknown case %d", subOp);
+ }
+ debug(1,"o90_unknown9E stub (%d)", subOp);
+}
+
} // End of namespace Scumm