diff options
author | Bastien Bouclet | 2017-04-08 07:38:49 +0200 |
---|---|---|
committer | Bastien Bouclet | 2017-07-22 20:38:56 +0200 |
commit | 3e99dd8ccc0cda437ed19dcd3048f1e8eaa6c532 (patch) | |
tree | 314c125a6ff6b161d2bc5c8b21158c2537d61c1e /engines/mohawk/myst_stacks/selenitic.cpp | |
parent | 75040819c6642c304962d02ba646e04242cd4755 (diff) | |
download | scummvm-rg350-3e99dd8ccc0cda437ed19dcd3048f1e8eaa6c532.tar.gz scummvm-rg350-3e99dd8ccc0cda437ed19dcd3048f1e8eaa6c532.tar.bz2 scummvm-rg350-3e99dd8ccc0cda437ed19dcd3048f1e8eaa6c532.zip |
MOHAWK: Myst: Switch to bounds checked opcode arguments
Diffstat (limited to 'engines/mohawk/myst_stacks/selenitic.cpp')
-rw-r--r-- | engines/mohawk/myst_stacks/selenitic.cpp | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp index 774efcd0b7..fe1a64a257 100644 --- a/engines/mohawk/myst_stacks/selenitic.cpp +++ b/engines/mohawk/myst_stacks/selenitic.cpp @@ -285,7 +285,7 @@ bool Selenitic::setVarValue(uint16 var, uint16 value) { return refresh; } -void Selenitic::o_mazeRunnerMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerMove(uint16 op, uint16 var, const ArgumentsArray &args) { uint16 oldPosition = _mazeRunnerPosition; uint16 move = var; @@ -566,14 +566,14 @@ void Selenitic::mazeRunnerPlaySoundHelp() { _mazeRunnerLight->drawConditionalDataToScreen(0); } -void Selenitic::o_mazeRunnerSoundRepeat(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerSoundRepeat(uint16 op, uint16 var, const ArgumentsArray &args) { mazeRunnerPlaySoundHelp(); } /** * Sound receiver sigma button */ -void Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound receiver sigma button", op); _vm->_cursor->hideCursor(); @@ -625,7 +625,7 @@ void Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uint16 argc, uint16 /** * Sound receiver right button */ -void Selenitic::o_soundReceiverRight(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundReceiverRight(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound receiver right", op); soundReceiverLeftRight(1); @@ -634,7 +634,7 @@ void Selenitic::o_soundReceiverRight(uint16 op, uint16 var, uint16 argc, uint16 /** * Sound receiver left button */ -void Selenitic::o_soundReceiverLeft(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundReceiverLeft(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound receiver left", op); soundReceiverLeftRight(2); @@ -697,7 +697,7 @@ void Selenitic::soundReceiverDrawAngle() { /** * Sound receiver source selection buttons */ -void Selenitic::o_soundReceiverSource(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundReceiverSource(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound receiver source", op); if (_soundReceiverSigmaPressed) { @@ -719,7 +719,7 @@ void Selenitic::o_soundReceiverSource(uint16 op, uint16 var, uint16 argc, uint16 _vm->_sound->stopEffect(); - uint16 soundId = argv[0]; + uint16 soundId = args[0]; _vm->_sound->stopBackground(); _vm->_sound->playEffect(soundId); @@ -731,23 +731,24 @@ void Selenitic::o_soundReceiverSource(uint16 op, uint16 var, uint16 argc, uint16 _vm->_cursor->showCursor(); } -void Selenitic::o_mazeRunnerDoorButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerDoorButton(uint16 op, uint16 var, const ArgumentsArray &args) { // Used for Selenitic Maze Runner Exit Logic - uint16 cardIdExit = argv[0]; - uint16 cardIdEntry = argv[1]; + uint16 cardIdExit = args[0]; + uint16 cardIdEntry = args[1]; + uint16 updateDataSize = args[2]; if (_mazeRunnerPosition == 288) { _vm->changeToCard(cardIdEntry, kNoTransition); _vm->_sound->playEffect(cardIdEntry); - animatedUpdate(argv[2], &argv[3], 10); + animatedUpdate(ArgumentsArray(args.begin() + 3, updateDataSize), 10); } else if (_mazeRunnerPosition == 289) { _vm->changeToCard(cardIdExit, kNoTransition); _vm->_sound->playEffect(cardIdExit); - animatedUpdate(argv[2], &argv[3], 10); + animatedUpdate(ArgumentsArray(args.begin() + 3, updateDataSize), 10); } } -void Selenitic::o_soundReceiverUpdateSound(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundReceiverUpdateSound(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound receiver update sound", op); soundReceiverUpdateSound(); @@ -795,7 +796,7 @@ MystAreaSlider *Selenitic::soundLockSliderFromVar(uint16 var) { return nullptr; } -void Selenitic::o_soundLockMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundLockMove(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound lock move", op); MystAreaSlider *slider = soundLockSliderFromVar(var); @@ -807,7 +808,7 @@ void Selenitic::o_soundLockMove(uint16 op, uint16 var, uint16 argc, uint16 *argv } } -void Selenitic::o_soundLockStartMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundLockStartMove(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound lock start move", op); MystAreaSlider *slider = soundLockSliderFromVar(var); @@ -819,7 +820,7 @@ void Selenitic::o_soundLockStartMove(uint16 op, uint16 var, uint16 argc, uint16 _vm->_sound->playEffect(_soundLockSoundId, true); } -void Selenitic::o_soundLockEndMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundLockEndMove(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound lock end move", op); MystAreaSlider *slider = soundLockSliderFromVar(var); @@ -878,7 +879,7 @@ void Selenitic::soundLockCheckSolution(MystAreaSlider *slider, uint16 value, uin _vm->_sound->stopEffect(); } -void Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundLockButton(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound lock button", op); bool solved = true; @@ -900,15 +901,18 @@ void Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *ar if (solved) { _soundLockButton->drawConditionalDataToScreen(2); - uint16 cardIdClosed = argv[0]; - uint16 cardIdOpen = argv[1]; + uint16 cardIdClosed = args[0]; + uint16 cardIdOpen = args[1]; _vm->changeToCard(cardIdClosed, kTransitionDissolve); _vm->changeToCard(cardIdOpen, kNoTransition); - _vm->_sound->playEffect(argv[2]); + _vm->_sound->playEffect(args[2]); - animatedUpdate(argv[4], &argv[5], argv[3]); + uint16 animationDelay = args[3]; + uint16 animationDataSize = args[4]; + + animatedUpdate(ArgumentsArray(args.begin() + 5, animationDataSize), animationDelay); } else { _soundLockButton->drawConditionalDataToScreen(0); } @@ -916,7 +920,7 @@ void Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *ar _vm->_cursor->showCursor(); } -void Selenitic::o_soundReceiverEndMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundReceiverEndMove(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound receiver end move", op); uint16 oldDirection = _soundReceiverDirection; @@ -933,15 +937,15 @@ void Selenitic::o_soundReceiverEndMove(uint16 op, uint16 var, uint16 argc, uint1 } } -void Selenitic::o_mazeRunnerCompass_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerCompass_init(uint16 op, uint16 var, const ArgumentsArray &args) { _mazeRunnerCompass = getInvokingResource<MystAreaImageSwitch>(); } -void Selenitic::o_mazeRunnerWindow_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerWindow_init(uint16 op, uint16 var, const ArgumentsArray &args) { _mazeRunnerWindow = getInvokingResource<MystAreaImageSwitch>(); } -void Selenitic::o_mazeRunnerLight_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerLight_init(uint16 op, uint16 var, const ArgumentsArray &args) { _mazeRunnerLight = getInvokingResource<MystAreaImageSwitch>(); } @@ -1061,7 +1065,7 @@ void Selenitic::soundReceiverSolution(uint16 source, uint16 &solution, bool &ena } } -void Selenitic::o_soundReceiver_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundReceiver_init(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound receiver init", op); // Used for Card 1245 (Sound Receiver) @@ -1090,7 +1094,7 @@ void Selenitic::o_soundReceiver_init(uint16 op, uint16 var, uint16 argc, uint16 _soundReceiverSigmaPressed = false; } -void Selenitic::o_soundLock_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_soundLock_init(uint16 op, uint16 var, const ArgumentsArray &args) { debugC(kDebugScript, "Opcode %d: Sound lock init", op); for (uint i = 0; i < _vm->_resources.size(); i++) { @@ -1125,11 +1129,11 @@ void Selenitic::o_soundLock_init(uint16 op, uint16 var, uint16 argc, uint16 *arg _soundLockSoundId = 0; } -void Selenitic::o_mazeRunnerRight_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerRight_init(uint16 op, uint16 var, const ArgumentsArray &args) { _mazeRunnerRightButton = getInvokingResource<MystAreaImageSwitch>(); } -void Selenitic::o_mazeRunnerLeft_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { +void Selenitic::o_mazeRunnerLeft_init(uint16 op, uint16 var, const ArgumentsArray &args) { _mazeRunnerLeftButton = getInvokingResource<MystAreaImageSwitch>(); } |