aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction/exec_br.cpp
diff options
context:
space:
mode:
authorNicola Mettifogo2009-01-04 14:23:20 +0000
committerNicola Mettifogo2009-01-04 14:23:20 +0000
commitf2b495ba2d31fc6cdfd07130c9491dea026c07cb (patch)
tree64e20efe7bdaf26335cc6eb8163a3c1c984233d9 /engines/parallaction/exec_br.cpp
parent4273d0db92f37dcaefea280022e9d6b2effafeb9 (diff)
downloadscummvm-rg350-f2b495ba2d31fc6cdfd07130c9491dea026c07cb.tar.gz
scummvm-rg350-f2b495ba2d31fc6cdfd07130c9491dea026c07cb.tar.bz2
scummvm-rg350-f2b495ba2d31fc6cdfd07130c9491dea026c07cb.zip
Implemented counters in BRA. Only valid answer options are shown, and counter calculations in scripts are performed.
svn-id: r35723
Diffstat (limited to 'engines/parallaction/exec_br.cpp')
-rw-r--r--engines/parallaction/exec_br.cpp31
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