diff options
Diffstat (limited to 'engines/parallaction/exec_br.cpp')
-rw-r--r-- | engines/parallaction/exec_br.cpp | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/engines/parallaction/exec_br.cpp b/engines/parallaction/exec_br.cpp index cc07578859..40c9de8cda 100644 --- a/engines/parallaction/exec_br.cpp +++ b/engines/parallaction/exec_br.cpp @@ -199,42 +199,36 @@ DECLARE_COMMAND_OPCODE(leave) { DECLARE_COMMAND_OPCODE(inc) { - _vm->_counters[_ctxt.cmd->u._lvalue] += _ctxt.cmd->u._rvalue; + int v = _vm->getCounterValue(_ctxt.cmd->u._counterName); + _vm->setCounterValue(_ctxt.cmd->u._counterName, v + _ctxt.cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(dec) { - _vm->_counters[_ctxt.cmd->u._lvalue] -= _ctxt.cmd->u._rvalue; + int v = _vm->getCounterValue(_ctxt.cmd->u._counterName); + _vm->setCounterValue(_ctxt.cmd->u._counterName, v - _ctxt.cmd->u._counterValue); } +// these definitions must match those in parser_br.cpp +#define CMD_TEST 25 +#define CMD_TEST_GT 26 +#define CMD_TEST_LT 27 DECLARE_COMMAND_OPCODE(ifeq) { - if (_vm->_counters[_ctxt.cmd->u._lvalue] == _ctxt.cmd->u._rvalue) { - _vm->setLocationFlags(kFlagsTestTrue); - } else { - _vm->clearLocationFlags(kFlagsTestTrue); - } + _vm->testCounterCondition(_ctxt.cmd->u._counterName, CMD_TEST, _ctxt.cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(iflt) { - if (_vm->_counters[_ctxt.cmd->u._lvalue] < _ctxt.cmd->u._rvalue) { - _vm->setLocationFlags(kFlagsTestTrue); - } else { - _vm->clearLocationFlags(kFlagsTestTrue); - } + _vm->testCounterCondition(_ctxt.cmd->u._counterName, CMD_TEST_LT, _ctxt.cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(ifgt) { - if (_vm->_counters[_ctxt.cmd->u._lvalue] > _ctxt.cmd->u._rvalue) { - _vm->setLocationFlags(kFlagsTestTrue); - } else { - _vm->clearLocationFlags(kFlagsTestTrue); - } + _vm->testCounterCondition(_ctxt.cmd->u._counterName, CMD_TEST_GT, _ctxt.cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(let) { - _vm->_counters[_ctxt.cmd->u._lvalue] = _ctxt.cmd->u._rvalue; + _vm->setCounterValue(_ctxt.cmd->u._counterName, _ctxt.cmd->u._counterValue); } @@ -545,4 +539,5 @@ ProgramExec_br::ProgramExec_br(Parallaction_br *vm) : ProgramExec_ns(vm), _vm(vm ProgramExec_br::~ProgramExec_br() { } + } // namespace Parallaction |