diff options
author | Bastien Bouclet | 2016-11-05 08:35:03 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2017-07-03 08:50:10 +0200 |
commit | e7146c9bf7d5bdc62b977dca47c445e7f828392e (patch) | |
tree | 62a3e7db3dda0340a9ee0be4d92fd00362479a07 /engines/mohawk/riven_scripts.cpp | |
parent | 6d4260719c79d457c1162feae2a91e7bbacae445 (diff) | |
download | scummvm-rg350-e7146c9bf7d5bdc62b977dca47c445e7f828392e.tar.gz scummvm-rg350-e7146c9bf7d5bdc62b977dca47c445e7f828392e.tar.bz2 scummvm-rg350-e7146c9bf7d5bdc62b977dca47c445e7f828392e.zip |
MOHAWK: Move the changeToStack command to a dedicated class
Diffstat (limited to 'engines/mohawk/riven_scripts.cpp')
-rw-r--r-- | engines/mohawk/riven_scripts.cpp | 87 |
1 files changed, 56 insertions, 31 deletions
diff --git a/engines/mohawk/riven_scripts.cpp b/engines/mohawk/riven_scripts.cpp index 67a56af1af..6c744fca41 100644 --- a/engines/mohawk/riven_scripts.cpp +++ b/engines/mohawk/riven_scripts.cpp @@ -66,10 +66,13 @@ RivenScriptPtr RivenScriptManager::readScript(Common::ReadStream *stream) { RivenCommand *RivenScriptManager::readCommand(Common::ReadStream *stream) { uint16 type = stream->readUint16BE(); - if (type == 8) { - return RivenSwitchCommand::createFromStream(_vm, type, stream); - } else { - return RivenSimpleCommand::createFromStream(_vm, type, stream); + switch (type) { + case 8: + return RivenSwitchCommand::createFromStream(_vm, type, stream); + case 27: + return RivenStackChangeCommand::createFromStream(_vm, type, stream); + default: + return RivenSimpleCommand::createFromStream(_vm, type, stream); } } @@ -267,7 +270,7 @@ void RivenSimpleCommand::setupOpcodes() { OPCODE(empty), // Complex animation (not used) OPCODE(setVariable), // 0x08 (8 decimal) - OPCODE(mohawkSwitch), + OPCODE(empty), // Not a SimpleCommand OPCODE(enableHotspot), OPCODE(disableHotspot), OPCODE(empty), // Empty @@ -290,7 +293,7 @@ void RivenSimpleCommand::setupOpcodes() { OPCODE(incrementVariable), OPCODE(empty), // Empty OPCODE(empty), // Empty - OPCODE(changeStack), + OPCODE(empty), // Not a SimpleCommand // 0x1C (28 decimal) OPCODE(disableMovie), OPCODE(disableAllMovies), @@ -385,11 +388,6 @@ void RivenSimpleCommand::setVariable(uint16 op, uint16 argc, uint16 *argv) { _vm->getStackVar(argv[0]) = argv[1]; } -// Command 8: conditional branch -void RivenSimpleCommand::mohawkSwitch(uint16 op, uint16 argc, uint16 *argv) { - // dummy function, this opcode does logic checking in processCommands() -} - // Command 9: enable hotspot (blst_id) void RivenSimpleCommand::enableHotspot(uint16 op, uint16 argc, uint16 *argv) { RivenHotspot *hotspot = _vm->getCard()->getHotspotByBlstId(argv[0]); @@ -488,26 +486,6 @@ void RivenSimpleCommand::incrementVariable(uint16 op, uint16 argc, uint16 *argv) _vm->getStackVar(argv[0]) += argv[1]; } -// Command 27: go to stack (stack name, code high, code low) -void RivenSimpleCommand::changeStack(uint16 op, uint16 argc, uint16 *argv) { - Common::String stackName = _vm->getStack()->getName(kStackNames, argv[0]); - int8 index = -1; - - for (byte i = 0; i < 8; i++) - if (_vm->getStackName(i).equalsIgnoreCase(stackName)) { - index = i; - break; - } - - if (index == -1) - error ("'%s' is not a stack name!", stackName.c_str()); - - _vm->changeToStack(index); - uint32 rmapCode = (argv[1] << 16) + argv[2]; - uint16 cardID = _vm->getStack()->getCardStackId(rmapCode); - _vm->changeToCard(cardID); -} - // Command 28: disable a movie void RivenSimpleCommand::disableMovie(uint16 op, uint16 argc, uint16 *argv) { VideoEntryPtr video = _vm->_video->findVideoRiven(argv[0]); @@ -767,4 +745,51 @@ void RivenSwitchCommand::execute() { } } +RivenStackChangeCommand::RivenStackChangeCommand(MohawkEngine_Riven *vm, uint16 stackId, uint32 globalCardId, bool byStackId) : + RivenCommand(vm), + _stackId(stackId), + _cardId(globalCardId), + _byStackId(byStackId) { + +} + +RivenStackChangeCommand::~RivenStackChangeCommand() { + +} + +RivenStackChangeCommand *RivenStackChangeCommand::createFromStream(MohawkEngine_Riven *vm, int type, Common::ReadStream *stream) { + /* argumentsSize = */ stream->readUint16BE(); + uint16 stackId = stream->readUint16BE(); + uint32 globalCardId = stream->readUint32BE(); + + return new RivenStackChangeCommand(vm, stackId, globalCardId, false); +} + +void RivenStackChangeCommand::execute() { + int16 stackID = -1; + if (_byStackId) { + stackID = _stackId; + } else { + Common::String stackName = _vm->getStack()->getName(kStackNames, _stackId); + + for (byte i = kStackFirst; i < kStackLast; i++) + if (_vm->getStackName(i).equalsIgnoreCase(stackName)) { + stackID = i; + break; + } + + if (stackID == -1) + error ("'%s' is not a stack name!", stackName.c_str()); + } + + _vm->changeToStack(stackID); + uint16 cardID = _vm->getStack()->getCardStackId(_cardId); + _vm->changeToCard(cardID); +} + +void RivenStackChangeCommand::dump(byte tabs) { + printTabs(tabs); + debugN("changeStack(%d, %d);\n", _stackId, _cardId); +} + } // End of namespace Mohawk |