diff options
author | Nicola Mettifogo | 2009-02-26 06:16:35 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2009-02-26 06:16:35 +0000 |
commit | d5d006bb303ddce4401a11132f52e4d3e17f63ac (patch) | |
tree | 00cd9ab6630b3c6696d735ceb165ed8e4241cf3c /engines/parallaction/exec_br.cpp | |
parent | 5093167fde0bf02c0160aa753fbe60afbaaad305 (diff) | |
download | scummvm-rg350-d5d006bb303ddce4401a11132f52e4d3e17f63ac.tar.gz scummvm-rg350-d5d006bb303ddce4401a11132f52e4d3e17f63ac.tar.bz2 scummvm-rg350-d5d006bb303ddce4401a11132f52e4d3e17f63ac.zip |
Cleanup of CommandExec and ProgramExec, and pushed down dependencies from exec.h.
svn-id: r38892
Diffstat (limited to 'engines/parallaction/exec_br.cpp')
-rw-r--r-- | engines/parallaction/exec_br.cpp | 174 |
1 files changed, 81 insertions, 93 deletions
diff --git a/engines/parallaction/exec_br.cpp b/engines/parallaction/exec_br.cpp index e49b679e9d..add492151a 100644 --- a/engines/parallaction/exec_br.cpp +++ b/engines/parallaction/exec_br.cpp @@ -63,13 +63,13 @@ namespace Parallaction { #define SetOpcodeTable(x) table = &x; -typedef Common::Functor0Mem<void, CommandExec_br> OpcodeV1; +typedef Common::Functor1Mem<CommandContext&, void, CommandExec_br> OpcodeV1; #define COMMAND_OPCODE(op) table->push_back(new OpcodeV1(this, &CommandExec_br::cmdOp_##op)) -#define DECLARE_COMMAND_OPCODE(op) void CommandExec_br::cmdOp_##op() +#define DECLARE_COMMAND_OPCODE(op) void CommandExec_br::cmdOp_##op(CommandContext &ctxt) -typedef Common::Functor0Mem<void, ProgramExec_br> OpcodeV2; +typedef Common::Functor1Mem<ProgramContext&, void, ProgramExec_br> OpcodeV2; #define INSTRUCTION_OPCODE(op) table->push_back(new OpcodeV2(this, &ProgramExec_br::instOp_##op)) -#define DECLARE_INSTRUCTION_OPCODE(op) void ProgramExec_br::instOp_##op() +#define DECLARE_INSTRUCTION_OPCODE(op) void ProgramExec_br::instOp_##op(ProgramContext &ctxt) extern const char *_instructionNamesRes_br[]; @@ -116,70 +116,70 @@ void Parallaction_br::clearSubtitles() { DECLARE_COMMAND_OPCODE(location) { warning("Parallaction_br::cmdOp_location command not yet implemented"); - _vm->_location._startPosition = _ctxt.cmd->u._startPos; + _vm->_location._startPosition = ctxt._cmd->u._startPos; _vm->_location._startFrame = 0; // TODO: verify this against the disassembly!f - _vm->_location._followerStartPosition = _ctxt.cmd->u._startPos2; + _vm->_location._followerStartPosition = ctxt._cmd->u._startPos2; _vm->_location._followerStartFrame = 0; // TODO: handle startPos and startPos2 - _vm->scheduleLocationSwitch(_ctxt.cmd->u._string); + _vm->scheduleLocationSwitch(ctxt._cmd->u._string); } DECLARE_COMMAND_OPCODE(open) { warning("Parallaction_br::cmdOp_open command not yet implemented"); - _vm->updateDoor(_ctxt.cmd->u._zone, false); + _vm->updateDoor(ctxt._cmd->u._zone, false); } DECLARE_COMMAND_OPCODE(close) { warning("Parallaction_br::cmdOp_close not yet implemented"); - _vm->updateDoor(_ctxt.cmd->u._zone, true); + _vm->updateDoor(ctxt._cmd->u._zone, true); } DECLARE_COMMAND_OPCODE(on) { - _vm->showZone(_ctxt.cmd->u._zone, true); + _vm->showZone(ctxt._cmd->u._zone, true); } DECLARE_COMMAND_OPCODE(off) { - _vm->showZone(_ctxt.cmd->u._zone, false); + _vm->showZone(ctxt._cmd->u._zone, false); } DECLARE_COMMAND_OPCODE(call) { - _vm->callFunction(_ctxt.cmd->u._callable, &_ctxt.z); + _vm->callFunction(ctxt._cmd->u._callable, &ctxt._z); } DECLARE_COMMAND_OPCODE(drop) { - _vm->dropItem(_ctxt.cmd->u._object); + _vm->dropItem(ctxt._cmd->u._object); } DECLARE_COMMAND_OPCODE(move) { - _vm->scheduleWalk(_ctxt.cmd->u._move.x, _ctxt.cmd->u._move.y, false); + _vm->scheduleWalk(ctxt._cmd->u._move.x, ctxt._cmd->u._move.y, false); suspend(); } DECLARE_COMMAND_OPCODE(start) { - _ctxt.cmd->u._zone->_flags |= kFlagsActing; + ctxt._cmd->u._zone->_flags |= kFlagsActing; } DECLARE_COMMAND_OPCODE(stop) { - _ctxt.cmd->u._zone->_flags &= ~kFlagsActing; + ctxt._cmd->u._zone->_flags &= ~kFlagsActing; } DECLARE_COMMAND_OPCODE(character) { - debugC(9, kDebugExec, "Parallaction_br::cmdOp_character(%s)", _ctxt.cmd->u._string); - _vm->changeCharacter(_ctxt.cmd->u._string); + debugC(9, kDebugExec, "Parallaction_br::cmdOp_character(%s)", ctxt._cmd->u._string); + _vm->changeCharacter(ctxt._cmd->u._string); } DECLARE_COMMAND_OPCODE(followme) { - Common::String s(_ctxt.cmd->u._string); + Common::String s(ctxt._cmd->u._string); if (!s.compareToIgnoreCase("NULL")) { s.clear(); } @@ -198,7 +198,7 @@ DECLARE_COMMAND_OPCODE(offmouse) { DECLARE_COMMAND_OPCODE(add) { - _vm->addInventoryItem(_ctxt.cmd->u._object); + _vm->addInventoryItem(ctxt._cmd->u._object); } @@ -208,14 +208,14 @@ DECLARE_COMMAND_OPCODE(leave) { DECLARE_COMMAND_OPCODE(inc) { - int v = _vm->getCounterValue(_ctxt.cmd->u._counterName); - _vm->setCounterValue(_ctxt.cmd->u._counterName, v + _ctxt.cmd->u._counterValue); + int v = _vm->getCounterValue(ctxt._cmd->u._counterName); + _vm->setCounterValue(ctxt._cmd->u._counterName, v + ctxt._cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(dec) { - int v = _vm->getCounterValue(_ctxt.cmd->u._counterName); - _vm->setCounterValue(_ctxt.cmd->u._counterName, v - _ctxt.cmd->u._counterValue); + 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 @@ -224,20 +224,20 @@ DECLARE_COMMAND_OPCODE(dec) { #define CMD_TEST_LT 27 DECLARE_COMMAND_OPCODE(ifeq) { - _vm->testCounterCondition(_ctxt.cmd->u._counterName, CMD_TEST, _ctxt.cmd->u._counterValue); + _vm->testCounterCondition(ctxt._cmd->u._counterName, CMD_TEST, ctxt._cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(iflt) { - _vm->testCounterCondition(_ctxt.cmd->u._counterName, CMD_TEST_LT, _ctxt.cmd->u._counterValue); + _vm->testCounterCondition(ctxt._cmd->u._counterName, CMD_TEST_LT, ctxt._cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(ifgt) { - _vm->testCounterCondition(_ctxt.cmd->u._counterName, CMD_TEST_GT, _ctxt.cmd->u._counterValue); + _vm->testCounterCondition(ctxt._cmd->u._counterName, CMD_TEST_GT, ctxt._cmd->u._counterValue); } DECLARE_COMMAND_OPCODE(let) { - _vm->setCounterValue(_ctxt.cmd->u._counterName, _ctxt.cmd->u._counterValue); + _vm->setCounterValue(ctxt._cmd->u._counterName, ctxt._cmd->u._counterValue); } @@ -247,19 +247,19 @@ DECLARE_COMMAND_OPCODE(music) { DECLARE_COMMAND_OPCODE(fix) { - _ctxt.cmd->u._zone->_flags |= kFlagsFixed; + ctxt._cmd->u._zone->_flags |= kFlagsFixed; } DECLARE_COMMAND_OPCODE(unfix) { - _ctxt.cmd->u._zone->_flags &= ~kFlagsFixed; + ctxt._cmd->u._zone->_flags &= ~kFlagsFixed; } DECLARE_COMMAND_OPCODE(zeta) { - _vm->_location._zeta0 = _ctxt.cmd->u._zeta0; - _vm->_location._zeta1 = _ctxt.cmd->u._zeta1; - _vm->_location._zeta2 = _ctxt.cmd->u._zeta2; + _vm->_location._zeta0 = ctxt._cmd->u._zeta0; + _vm->_location._zeta1 = ctxt._cmd->u._zeta1; + _vm->_location._zeta2 = ctxt._cmd->u._zeta2; } @@ -279,7 +279,7 @@ DECLARE_COMMAND_OPCODE(give) { DECLARE_COMMAND_OPCODE(text) { - CommandData *data = &_ctxt.cmd->u; + CommandData *data = &ctxt._cmd->u; _vm->setupSubtitles(data->_string, data->_string2, data->_zeta0); } @@ -310,38 +310,38 @@ DECLARE_COMMAND_OPCODE(offsave) { } DECLARE_INSTRUCTION_OPCODE(invalid) { - error("Can't execute invalid opcode %i", (*_ctxt.inst)->_index); + error("Can't execute invalid opcode %i", (*ctxt._inst)->_index); } DECLARE_COMMAND_OPCODE(clear) { - if (_ctxt.cmd->u._flags & kFlagsGlobal) { - _ctxt.cmd->u._flags &= ~kFlagsGlobal; - _globalFlags &= ~_ctxt.cmd->u._flags; + if (ctxt._cmd->u._flags & kFlagsGlobal) { + ctxt._cmd->u._flags &= ~kFlagsGlobal; + _globalFlags &= ~ctxt._cmd->u._flags; } else { - _vm->clearLocationFlags(_ctxt.cmd->u._flags); + _vm->clearLocationFlags(ctxt._cmd->u._flags); } } DECLARE_COMMAND_OPCODE(speak) { - if (ACTIONTYPE(_ctxt.cmd->u._zone) == kZoneSpeak) { - _vm->enterDialogueMode(_ctxt.cmd->u._zone); + if (ACTIONTYPE(ctxt._cmd->u._zone) == kZoneSpeak) { + _vm->enterDialogueMode(ctxt._cmd->u._zone); } else { - _vm->_activeZone = _ctxt.cmd->u._zone; + _vm->_activeZone = ctxt._cmd->u._zone; } } DECLARE_COMMAND_OPCODE(get) { - _ctxt.cmd->u._zone->_flags &= ~kFlagsFixed; - _vm->runZone(_ctxt.cmd->u._zone); + ctxt._cmd->u._zone->_flags &= ~kFlagsFixed; + _vm->runZone(ctxt._cmd->u._zone); } DECLARE_COMMAND_OPCODE(toggle) { - if (_ctxt.cmd->u._flags & kFlagsGlobal) { - _ctxt.cmd->u._flags &= ~kFlagsGlobal; - _globalFlags ^= _ctxt.cmd->u._flags; + if (ctxt._cmd->u._flags & kFlagsGlobal) { + ctxt._cmd->u._flags &= ~kFlagsGlobal; + _globalFlags ^= ctxt._cmd->u._flags; } else { - _vm->toggleLocationFlags(_ctxt.cmd->u._flags); + _vm->toggleLocationFlags(ctxt._cmd->u._flags); } } @@ -350,45 +350,45 @@ DECLARE_COMMAND_OPCODE(quit) { } DECLARE_COMMAND_OPCODE(invalid) { - error("Can't execute invalid command '%i'", _ctxt.cmd->_id); + error("Can't execute invalid command '%i'", ctxt._cmd->_id); } DECLARE_COMMAND_OPCODE(set) { - if (_ctxt.cmd->u._flags & kFlagsGlobal) { - _ctxt.cmd->u._flags &= ~kFlagsGlobal; - _globalFlags |= _ctxt.cmd->u._flags; + if (ctxt._cmd->u._flags & kFlagsGlobal) { + ctxt._cmd->u._flags &= ~kFlagsGlobal; + _globalFlags |= ctxt._cmd->u._flags; } else { - _vm->setLocationFlags(_ctxt.cmd->u._flags); + _vm->setLocationFlags(ctxt._cmd->u._flags); } } DECLARE_INSTRUCTION_OPCODE(on) { - _vm->showZone((*_ctxt.inst)->_z, true); + _vm->showZone((*ctxt._inst)->_z, true); } DECLARE_INSTRUCTION_OPCODE(off) { - _vm->showZone((*_ctxt.inst)->_z, false); + _vm->showZone((*ctxt._inst)->_z, false); } DECLARE_INSTRUCTION_OPCODE(set) { - InstructionPtr inst = *_ctxt.inst; + InstructionPtr inst = *ctxt._inst; inst->_opA.setValue(inst->_opB.getValue()); } DECLARE_INSTRUCTION_OPCODE(inc) { - InstructionPtr inst = *_ctxt.inst; + InstructionPtr inst = *ctxt._inst; int16 rvalue = inst->_opB.getValue(); if (inst->_flags & kInstMod) { // mod int16 _bx = (rvalue > 0 ? rvalue : -rvalue); - if (_ctxt.modCounter % _bx != 0) return; + if (ctxt._modCounter % _bx != 0) return; rvalue = (rvalue > 0 ? 1 : -1); } @@ -433,12 +433,12 @@ DECLARE_INSTRUCTION_OPCODE(wait) { DECLARE_INSTRUCTION_OPCODE(start) { - (*_ctxt.inst)->_z->_flags |= kFlagsActing; + (*ctxt._inst)->_z->_flags |= kFlagsActing; } DECLARE_INSTRUCTION_OPCODE(process) { - _vm->_activeZone2 = (*_ctxt.inst)->_z; + _vm->_activeZone2 = (*ctxt._inst)->_z; } @@ -448,14 +448,14 @@ DECLARE_INSTRUCTION_OPCODE(move) { DECLARE_INSTRUCTION_OPCODE(color) { - InstructionPtr inst = *_ctxt.inst; + InstructionPtr inst = *ctxt._inst; _vm->_gfx->_palette.setEntry(inst->_opB.getValue(), inst->_colors[0], inst->_colors[1], inst->_colors[2]); } DECLARE_INSTRUCTION_OPCODE(mask) { #if 0 - Instruction *inst = *_ctxt.inst; + Instruction *inst = *ctxt._inst; _gfx->_bgLayers[0] = inst->_opA.getRValue(); _gfx->_bgLayers[1] = inst->_opB.getRValue(); _gfx->_bgLayers[2] = inst->_opC.getRValue(); @@ -468,7 +468,7 @@ DECLARE_INSTRUCTION_OPCODE(print) { } DECLARE_INSTRUCTION_OPCODE(text) { - InstructionPtr inst = (*_ctxt.inst); + InstructionPtr inst = (*ctxt._inst); _vm->setupSubtitles(inst->_text, inst->_text2, inst->_y); } @@ -498,42 +498,42 @@ DECLARE_INSTRUCTION_OPCODE(stop) { } DECLARE_INSTRUCTION_OPCODE(loop) { - InstructionPtr inst = *_ctxt.inst; + InstructionPtr inst = *ctxt._inst; - _ctxt.program->_loopCounter = inst->_opB.getValue(); - _ctxt.program->_loopStart = _ctxt.ip; + ctxt._program->_loopCounter = inst->_opB.getValue(); + ctxt._program->_loopStart = ctxt._ip; } DECLARE_INSTRUCTION_OPCODE(endloop) { - if (--_ctxt.program->_loopCounter > 0) { - _ctxt.ip = _ctxt.program->_loopStart; + if (--ctxt._program->_loopCounter > 0) { + ctxt._ip = ctxt._program->_loopStart; } } DECLARE_INSTRUCTION_OPCODE(show) { - _ctxt.suspend = true; + ctxt._suspend = true; } DECLARE_INSTRUCTION_OPCODE(call) { - _vm->callFunction((*_ctxt.inst)->_immediate, 0); + _vm->callFunction((*ctxt._inst)->_immediate, 0); } DECLARE_INSTRUCTION_OPCODE(endscript) { - if ((_ctxt.anim->_flags & kFlagsLooping) == 0) { - _ctxt.anim->_flags &= ~kFlagsActing; - _vm->_cmdExec->run(_ctxt.anim->_commands, _ctxt.anim); - _ctxt.program->_status = kProgramDone; + if ((ctxt._anim->_flags & kFlagsLooping) == 0) { + ctxt._anim->_flags &= ~kFlagsActing; + _vm->_cmdExec->run(ctxt._anim->_commands, ctxt._anim); + ctxt._program->_status = kProgramDone; } - _ctxt.ip = _ctxt.program->_instructions.begin(); - _ctxt.suspend = true; + ctxt._ip = ctxt._program->_instructions.begin(); + ctxt._suspend = true; } -void CommandExec_br::init() { - Common::Array<const Opcode*> *table = 0; +CommandExec_br::CommandExec_br(Parallaction_br* vm) : CommandExec(vm), _vm(vm) { + CommandOpcodeSet *table = 0; SetOpcodeTable(_opcodes); COMMAND_OPCODE(invalid); @@ -580,17 +580,11 @@ void CommandExec_br::init() { COMMAND_OPCODE(offsave); } -CommandExec_br::CommandExec_br(Parallaction_br* vm) : CommandExec(vm), _vm(vm) { - -} - -CommandExec_br::~CommandExec_br() { - -} -void ProgramExec_br::init() { +ProgramExec_br::ProgramExec_br(Parallaction_br *vm) : _vm(vm) { + _instructionNames = _instructionNamesRes_br; - Common::Array<const Opcode*> *table = 0; + ProgramOpcodeSet *table = 0; SetOpcodeTable(_opcodes); INSTRUCTION_OPCODE(invalid); @@ -627,12 +621,6 @@ void ProgramExec_br::init() { INSTRUCTION_OPCODE(endscript); } -ProgramExec_br::ProgramExec_br(Parallaction_br *vm) : _vm(vm) { - _instructionNames = _instructionNamesRes_br; -} - -ProgramExec_br::~ProgramExec_br() { -} } // namespace Parallaction |