aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/intern.h2
-rw-r--r--scumm/script_v90he.cpp67
2 files changed, 67 insertions, 2 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index b6ab82b8f9..8de311ccfa 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -1130,6 +1130,8 @@ protected:
void o90_getActorData();
void o90_startScriptUnk();
void o90_jumpToScriptUnk();
+ void o90_smackerOps();
+ void o90_getSmackerData();
void o90_wizImageOps();
void o90_getDistanceBetweenPoints();
void o90_getSpriteInfo();
diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp
index 6e851ad34f..5d0df8b2c0 100644
--- a/scumm/script_v90he.cpp
+++ b/scumm/script_v90he.cpp
@@ -98,8 +98,8 @@ void ScummEngine_v90he::setupOpcodes() {
OPCODE(o90_startScriptUnk),
/* 2C */
OPCODE(o90_jumpToScriptUnk),
- OPCODE(o6_invalid),
- OPCODE(o6_invalid),
+ OPCODE(o90_smackerOps),
+ OPCODE(o90_getSmackerData),
OPCODE(o90_floodState),
/* 30 */
OPCODE(o90_mod),
@@ -510,6 +510,69 @@ void ScummEngine_v90he::o90_jumpToScriptUnk() {
runScript(script, (flags == 199 || flags == 200), (flags == 195 || flags == 200), args, cycle);
}
+void ScummEngine_v90he::o90_smackerOps() {
+ byte smackerFilename[260];
+
+ int subOp = fetchScriptByte();
+ subOp -= 49;
+
+ switch (subOp) {
+ case 0:
+ copyScriptString(smackerFilename, sizeof(smackerFilename));
+ break;
+ case 5:
+ pop();
+ break;
+ case 8:
+ memset(smackerFilename, 0, sizeof(smackerFilename));
+ pop();
+ break;
+ case 14:
+ pop();
+ break;
+ case 116:
+ break;
+ case 206:
+ break;
+ default:
+ error("o90_smackerOps: unhandled case %d", subOp);
+ }
+
+ debug(0,"o90_smackerOps stub (%d)", subOp);
+}
+
+void ScummEngine_v90he::o90_getSmackerData() {
+ int subOp = fetchScriptByte();
+ subOp -= 32;
+
+ switch (subOp) {
+ case 0:
+ pop();
+ break;
+ case 1:
+ pop();
+ break;
+ case 4:
+ pop();
+ break;
+ case 20:
+ pop();
+ break;
+ case 31:
+ pop();
+ break;
+ case 107:
+ pop();
+ pop();
+ break;
+ default:
+ error("o90_getSmackerData: unhandled case %d", subOp);
+ }
+
+ push(0);
+ debug(0,"o90_getSmackerData stub (%d)", subOp);
+}
+
void ScummEngine_v90he::o90_wizImageOps() {
int a, b;
int subOp = fetchScriptByte();