diff options
-rw-r--r-- | engines/illusions/duckman/scriptopcodes_duckman.cpp | 36 | ||||
-rw-r--r-- | engines/illusions/duckman/scriptopcodes_duckman.h | 4 |
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); |