aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohndoe1232015-11-29 00:10:51 +0100
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commit449d243c8fec19fe7186941bda2c4076730190ff (patch)
treec2cb2e82e36dff2d954ce081d912294b61fc6416
parent9a84c0a62e0f47e5c01b3ed0e21f34107fadc9eb (diff)
downloadscummvm-rg350-449d243c8fec19fe7186941bda2c4076730190ff.tar.gz
scummvm-rg350-449d243c8fec19fe7186941bda2c4076730190ff.tar.bz2
scummvm-rg350-449d243c8fec19fe7186941bda2c4076730190ff.zip
ILLUSIONS: DUCKMAN: Implement opcode 100 and 101
-rw-r--r--engines/illusions/duckman/scriptopcodes_duckman.cpp36
-rw-r--r--engines/illusions/duckman/scriptopcodes_duckman.h4
2 files changed, 20 insertions, 20 deletions
diff --git a/engines/illusions/duckman/scriptopcodes_duckman.cpp b/engines/illusions/duckman/scriptopcodes_duckman.cpp
index f16998f8c0..128264b0ed 100644
--- a/engines/illusions/duckman/scriptopcodes_duckman.cpp
+++ b/engines/illusions/duckman/scriptopcodes_duckman.cpp
@@ -138,8 +138,8 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(96, opIncBlockCounter);
OPCODE(97, opClearBlockCounter);
// 98-99 unused
- // TODO OPCODE(100, );
- // TODO OPCODE(101, );
+ OPCODE(100, opStackPushRandom);
+ OPCODE(101, opStackSwitchRandom);
// 102-103 unused
OPCODE(104, opJumpIf);
OPCODE(105, opIsPrevSceneId);
@@ -172,8 +172,6 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(65, opSetDenySfx);
OPCODE(66, opSetAdjustUpSfx);
OPCODE(67, opSetAdjustDnSfx);
- OPCODE(78, opStackPushRandom);
- OPCODE(79, opIfLte);
OPCODE(105, opIsCurrentSceneId);
OPCODE(106, opIsActiveSceneId);
OPCODE(146, opStackPop);
@@ -749,6 +747,22 @@ void ScriptOpcodes_Duckman::opClearBlockCounter(ScriptThread *scriptThread, OpCa
_vm->_scriptResource->_blockCounters.set(index, 0);
}
+void ScriptOpcodes_Duckman::opStackPushRandom(ScriptThread *scriptThread, OpCall &opCall) {
+ ARG_INT16(maxValue);
+ _vm->_stack->push(_vm->getRandom(maxValue) + 1);
+}
+
+void ScriptOpcodes_Duckman::opStackSwitchRandom(ScriptThread *scriptThread, OpCall &opCall) {
+ ARG_SKIP(2);
+ ARG_INT16(rvalue);
+ ARG_INT16(jumpOffs);
+ int16 lvalue = _vm->_stack->peek();
+ if (lvalue < rvalue) {
+ _vm->_stack->pop();
+ opCall._deltaOfs += jumpOffs;
+ }
+}
+
void ScriptOpcodes_Duckman::opJumpIf(ScriptThread *scriptThread, OpCall &opCall) {
ARG_INT16(jumpOffs);
int16 value = _vm->_stack->pop();
@@ -952,20 +966,6 @@ void ScriptOpcodes_Duckman::opSetAdjustDnSfx(ScriptThread *scriptThread, OpCall
// TODO _vm->setAdjustDnSfx(soundEffectId);
}
-void ScriptOpcodes_Duckman::opStackPushRandom(ScriptThread *scriptThread, OpCall &opCall) {
- ARG_INT16(maxValue);
- _vm->_stack->push(_vm->getRandom(maxValue) + 1);
-}
-
-void ScriptOpcodes_Duckman::opIfLte(ScriptThread *scriptThread, OpCall &opCall) {
- ARG_SKIP(2);
- ARG_INT16(rvalue);
- ARG_INT16(elseJumpOffs);
- int16 lvalue = _vm->_stack->pop();
- if (!(lvalue <= rvalue))
- opCall._deltaOfs += elseJumpOffs;
-}
-
void ScriptOpcodes_Duckman::opIsCurrentSceneId(ScriptThread *scriptThread, OpCall &opCall) {
ARG_SKIP(2);
ARG_UINT32(sceneId);
diff --git a/engines/illusions/duckman/scriptopcodes_duckman.h b/engines/illusions/duckman/scriptopcodes_duckman.h
index 29728e3e0d..0fae4b7b26 100644
--- a/engines/illusions/duckman/scriptopcodes_duckman.h
+++ b/engines/illusions/duckman/scriptopcodes_duckman.h
@@ -111,6 +111,8 @@ protected:
void opActivateButton(ScriptThread *scriptThread, OpCall &opCall);
void opIncBlockCounter(ScriptThread *scriptThread, OpCall &opCall);
void opClearBlockCounter(ScriptThread *scriptThread, OpCall &opCall);
+ void opStackPushRandom(ScriptThread *scriptThread, OpCall &opCall);
+ void opStackSwitchRandom(ScriptThread *scriptThread, OpCall &opCall);
void opJumpIf(ScriptThread *scriptThread, OpCall &opCall);
void opIsPrevSceneId(ScriptThread *scriptThread, OpCall &opCall);
void opNot(ScriptThread *scriptThread, OpCall &opCall);
@@ -141,8 +143,6 @@ protected:
void opSetDenySfx(ScriptThread *scriptThread, OpCall &opCall);
void opSetAdjustUpSfx(ScriptThread *scriptThread, OpCall &opCall);
void opSetAdjustDnSfx(ScriptThread *scriptThread, OpCall &opCall);
- void opStackPushRandom(ScriptThread *scriptThread, OpCall &opCall);
- void opIfLte(ScriptThread *scriptThread, OpCall &opCall);
void opIsCurrentSceneId(ScriptThread *scriptThread, OpCall &opCall);
void opIsActiveSceneId(ScriptThread *scriptThread, OpCall &opCall);
void opStackPop(ScriptThread *scriptThread, OpCall &opCall);