aboutsummaryrefslogtreecommitdiff
path: root/engines/draci
diff options
context:
space:
mode:
authorRobert Špalek2009-11-09 04:27:08 +0000
committerRobert Špalek2009-11-09 04:27:08 +0000
commited348133d172ff8a2729b664f9d228b6b6da13d2 (patch)
tree47563e40195d6633a40fa613614f733808fdc2cc /engines/draci
parent99b68b3a1349f41ea149e48192d750361c088cba (diff)
downloadscummvm-rg350-ed348133d172ff8a2729b664f9d228b6b6da13d2.tar.gz
scummvm-rg350-ed348133d172ff8a2729b664f9d228b6b6da13d2.tar.bz2
scummvm-rg350-ed348133d172ff8a2729b664f9d228b6b6da13d2.zip
GPL2 callbacks accept const Array& instead of Queue&
svn-id: r45771
Diffstat (limited to 'engines/draci')
-rw-r--r--engines/draci/script.cpp182
-rw-r--r--engines/draci/script.h93
2 files changed, 136 insertions, 139 deletions
diff --git a/engines/draci/script.cpp b/engines/draci/script.cpp
index 59a09776ce..079e1c5a5a 100644
--- a/engines/draci/script.cpp
+++ b/engines/draci/script.cpp
@@ -23,10 +23,10 @@
*
*/
+#include "common/array.h"
#include "common/debug.h"
#include "common/stream.h"
#include "common/stack.h"
-#include "common/queue.h"
#include "draci/draci.h"
#include "draci/script.h"
@@ -353,7 +353,7 @@ int Script::funcActPhase(int objID) const {
/* GPL commands */
-void Script::play(Common::Queue<int> &params) {
+void Script::play(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
@@ -375,13 +375,13 @@ Animation *Script::loadObjectAnimation(int objID, GameObject *obj, int animID) {
return anim;
}
-void Script::load(Common::Queue<int> &params) {
+void Script::load(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int objID = params.pop() - 1;
- int animID = params.pop() - 1;
+ int objID = params[0] - 1;
+ int animID = params[1] - 1;
uint i;
GameObject *obj = _vm->_game->getObject(objID);
@@ -400,13 +400,13 @@ void Script::load(Common::Queue<int> &params) {
loadObjectAnimation(objID, obj, animID);
}
-void Script::start(Common::Queue<int> &params) {
+void Script::start(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int objID = params.pop() - 1;
- int animID = params.pop() - 1;
+ int objID = params[0] - 1;
+ int animID = params[1] - 1;
GameObject *obj = _vm->_game->getObject(objID);
_vm->_game->stopObjectAnimations(obj);
@@ -449,13 +449,13 @@ void Script::start(Common::Queue<int> &params) {
}
}
-void Script::startPlay(Common::Queue<int> &params) {
+void Script::startPlay(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int objID = params.pop() - 1;
- int animID = params.pop() - 1;
+ int objID = params[0] - 1;
+ int animID = params[1] - 1;
GameObject *obj = _vm->_game->getObject(objID);
_vm->_game->stopObjectAnimations(obj);
@@ -484,7 +484,7 @@ void Script::startPlay(Common::Queue<int> &params) {
anim->registerCallback(&Animation::doNothing);
}
-void Script::justTalk(Common::Queue<int> &params) {
+void Script::justTalk(const Common::Array<int> &params) {
const GameObject *dragon = _vm->_game->getObject(kDragonObject);
const int last_anim = static_cast<Movement> (_vm->_game->playingObjectAnimation(dragon));
int new_anim;
@@ -496,7 +496,7 @@ void Script::justTalk(Common::Queue<int> &params) {
_vm->_game->playHeroAnimation(new_anim);
}
-void Script::justStay(Common::Queue<int> &params) {
+void Script::justStay(const Common::Array<int> &params) {
const GameObject *dragon = _vm->_game->getObject(kDragonObject);
const int last_anim = static_cast<Movement> (_vm->_game->playingObjectAnimation(dragon));
int new_anim;
@@ -508,55 +508,55 @@ void Script::justStay(Common::Queue<int> &params) {
_vm->_game->playHeroAnimation(new_anim);
}
-void Script::c_If(Common::Queue<int> &params) {
- int expression = params.pop();
- int jump = params.pop();
+void Script::c_If(const Common::Array<int> &params) {
+ int expression = params[0];
+ int jump = params[1];
if (expression)
_jump = jump;
}
-void Script::c_Goto(Common::Queue<int> &params) {
- int jump = params.pop();
+void Script::c_Goto(const Common::Array<int> &params) {
+ int jump = params[0];
_jump = jump;
}
-void Script::c_Let(Common::Queue<int> &params) {
- int var = params.pop() - 1;
- int value = params.pop();
+void Script::c_Let(const Common::Array<int> &params) {
+ int var = params[0] - 1;
+ int value = params[1];
_vm->_game->setVariable(var, value);
}
-void Script::loadMusic(Common::Queue<int> &params) {
- int track = params.pop();
+void Script::loadMusic(const Common::Array<int> &params) {
+ int track = params[0];
_vm->_game->setMusicTrack(track);
}
-void Script::startMusic(Common::Queue<int> &params) {
+void Script::startMusic(const Common::Array<int> &params) {
// If already playing this track, nothing happens.
_vm->_music->playSMF(_vm->_game->getMusicTrack(), true);
}
-void Script::stopMusic(Common::Queue<int> &params) {
+void Script::stopMusic(const Common::Array<int> &params) {
_vm->_music->stop();
_vm->_game->setMusicTrack(0);
}
-void Script::mark(Common::Queue<int> &params) {
+void Script::mark(const Common::Array<int> &params) {
_vm->_game->setMarkedAnimationIndex(_vm->_anims->getLastIndex());
}
-void Script::release(Common::Queue<int> &params) {
+void Script::release(const Common::Array<int> &params) {
int markedIndex = _vm->_game->getMarkedAnimationIndex();
_vm->_game->deleteAnimationsAfterIndex(markedIndex);
}
-void Script::icoStat(Common::Queue<int> &params) {
- int status = params.pop();
- int itemID = params.pop() - 1;
+void Script::icoStat(const Common::Array<int> &params) {
+ int status = params[0];
+ int itemID = params[1] - 1;
_vm->_game->setItemStatus(itemID, status == 1);
@@ -600,9 +600,9 @@ void Script::icoStat(Common::Queue<int> &params) {
}
}
-void Script::objStatOn(Common::Queue<int> &params) {
- int objID = params.pop() - 1;
- int roomID = params.pop() - 1;
+void Script::objStatOn(const Common::Array<int> &params) {
+ int objID = params[0] - 1;
+ int roomID = params[1] - 1;
GameObject *obj = _vm->_game->getObject(objID);
@@ -610,9 +610,9 @@ void Script::objStatOn(Common::Queue<int> &params) {
obj->_visible = true;
}
-void Script::objStat(Common::Queue<int> &params) {
- int status = params.pop();
- int objID = params.pop() - 1;
+void Script::objStat(const Common::Array<int> &params) {
+ int status = params[0];
+ int objID = params[1] - 1;
GameObject *obj = _vm->_game->getObject(objID);
@@ -628,47 +628,47 @@ void Script::objStat(Common::Queue<int> &params) {
_vm->_game->stopObjectAnimations(obj);
}
-void Script::execInit(Common::Queue<int> &params) {
+void Script::execInit(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int objID = params.pop() - 1;
+ int objID = params[0] - 1;
const GameObject *obj = _vm->_game->getObject(objID);
run(obj->_program, obj->_init);
}
-void Script::execLook(Common::Queue<int> &params) {
+void Script::execLook(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int objID = params.pop() - 1;
+ int objID = params[0] - 1;
const GameObject *obj = _vm->_game->getObject(objID);
run(obj->_program, obj->_look);
}
-void Script::execUse(Common::Queue<int> &params) {
+void Script::execUse(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int objID = params.pop() - 1;
+ int objID = params[0] - 1;
const GameObject *obj = _vm->_game->getObject(objID);
run(obj->_program, obj->_use);
}
-void Script::stayOn(Common::Queue<int> &params) {
+void Script::stayOn(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int x = params.pop();
- int y = params.pop();
- SightDirection dir = static_cast<SightDirection> (params.pop());
+ int x = params[0];
+ int y = params[1];
+ SightDirection dir = static_cast<SightDirection> (params[2]);
// Jumps into the given position regardless of the walking map.
Common::Point heroPos(_vm->_game->findNearestWalkable(x, y));
@@ -682,14 +682,14 @@ void Script::stayOn(Common::Queue<int> &params) {
dir, heroPos, mousePos, WalkingPath(), startingDirection));
}
-void Script::walkOn(Common::Queue<int> &params) {
+void Script::walkOn(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int x = params.pop();
- int y = params.pop();
- SightDirection dir = static_cast<SightDirection> (params.pop());
+ int x = params[0];
+ int y = params[1];
+ SightDirection dir = static_cast<SightDirection> (params[2]);
// Constructs an optimal path and starts walking there. No callback
// will be called at the end nor will the loop-body exit.
@@ -697,14 +697,14 @@ void Script::walkOn(Common::Queue<int> &params) {
_vm->_game->walkHero(x, y, dir);
}
-void Script::walkOnPlay(Common::Queue<int> &params) {
+void Script::walkOnPlay(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int x = params.pop();
- int y = params.pop();
- SightDirection dir = static_cast<SightDirection> (params.pop());
+ int x = params[0];
+ int y = params[1];
+ SightDirection dir = static_cast<SightDirection> (params[2]);
_vm->_game->stopWalking();
_vm->_game->walkHero(x, y, dir);
@@ -714,20 +714,20 @@ void Script::walkOnPlay(Common::Queue<int> &params) {
_vm->_game->loop(kInnerUntilExit, false);
}
-void Script::newRoom(Common::Queue<int> &params) {
+void Script::newRoom(const Common::Array<int> &params) {
if (_vm->_game->getLoopStatus() == kStatusInventory) {
return;
}
- int room = params.pop() - 1;
- int gate = params.pop() - 1;
+ int room = params[0] - 1;
+ int gate = params[1] - 1;
_vm->_game->scheduleEnteringRoomUsingGate(room, gate);
}
-void Script::talk(Common::Queue<int> &params) {
- int personID = params.pop() - 1;
- int sentenceID = params.pop() - 1;
+void Script::talk(const Common::Array<int> &params) {
+ int personID = params[0] - 1;
+ int sentenceID = params[1] - 1;
Surface *surface = _vm->_screen->getSurface();
@@ -812,19 +812,19 @@ void Script::talk(Common::Queue<int> &params) {
}
}
-void Script::dialogue(Common::Queue<int> &params) {
- int dialogueID = params.pop() - 1;
+void Script::dialogue(const Common::Array<int> &params) {
+ int dialogueID = params[0] - 1;
_vm->_game->dialogueMenu(dialogueID);
}
-void Script::loadMap(Common::Queue<int> &params) {
- int mapID = params.pop() - 1;
+void Script::loadMap(const Common::Array<int> &params) {
+ int mapID = params[0] - 1;
_vm->_game->loadWalkingMap(mapID);
}
-void Script::resetDialogue(Common::Queue<int> &params) {
+void Script::resetDialogue(const Common::Array<int> &params) {
const int currentOffset = _vm->_game->getCurrentDialogueOffset();
for (int i = 0; i < _vm->_game->getDialogueBlockNum(); ++i) {
@@ -832,7 +832,7 @@ void Script::resetDialogue(Common::Queue<int> &params) {
}
}
-void Script::resetDialogueFrom(Common::Queue<int> &params) {
+void Script::resetDialogueFrom(const Common::Array<int> &params) {
const int currentOffset = _vm->_game->getCurrentDialogueOffset();
for (int i = _vm->_game->getDialogueCurrentBlock(); i < _vm->_game->getDialogueBlockNum(); ++i) {
@@ -840,54 +840,53 @@ void Script::resetDialogueFrom(Common::Queue<int> &params) {
}
}
-void Script::resetBlock(Common::Queue<int> &params) {
- int blockID = params.pop() - 1;
+void Script::resetBlock(const Common::Array<int> &params) {
+ int blockID = params[0] - 1;
const int currentOffset = _vm->_game->getCurrentDialogueOffset();
_vm->_game->setDialogueVar(currentOffset + blockID, 0);
}
-void Script::exitDialogue(Common::Queue<int> &params) {
+void Script::exitDialogue(const Common::Array<int> &params) {
_vm->_game->setDialogueExit(true);
}
-void Script::roomMap(Common::Queue<int> &params) {
+void Script::roomMap(const Common::Array<int> &params) {
// Load the default walking map for the room
_vm->_game->loadWalkingMap(_vm->_game->getMapID());
}
-void Script::disableQuickHero(Common::Queue<int> &params) {
+void Script::disableQuickHero(const Common::Array<int> &params) {
_vm->_game->setEnableQuickHero(false);
}
-void Script::enableQuickHero(Common::Queue<int> &params) {
+void Script::enableQuickHero(const Common::Array<int> &params) {
_vm->_game->setEnableQuickHero(true);
}
-void Script::disableSpeedText(Common::Queue<int> &params) {
+void Script::disableSpeedText(const Common::Array<int> &params) {
_vm->_game->setEnableSpeedText(false);
}
-void Script::enableSpeedText(Common::Queue<int> &params) {
+void Script::enableSpeedText(const Common::Array<int> &params) {
_vm->_game->setEnableSpeedText(true);
}
-void Script::loadPalette(Common::Queue<int> &params) {
- int palette = params.pop() - 1;
+void Script::loadPalette(const Common::Array<int> &params) {
+ int palette = params[0] - 1;
_vm->_game->schedulePalette(palette);
}
-void Script::blackPalette(Common::Queue<int> &params) {
+void Script::blackPalette(const Common::Array<int> &params) {
_vm->_game->schedulePalette(kBlackPalette);
}
-void Script::fadePalette(Common::Queue<int> &params) {
- params.pop(); // unused first and last
- params.pop();
- int phases = params.pop();
+void Script::fadePalette(const Common::Array<int> &params) {
+ // Unused first and last
+ int phases = params[2];
// Let the palette fade in the background while the game continues.
// Since we don't set substatus to kInnerWhileFade, the outer loop will
@@ -895,17 +894,16 @@ void Script::fadePalette(Common::Queue<int> &params) {
_vm->_game->initializeFading(phases);
}
-void Script::fadePalettePlay(Common::Queue<int> &params) {
- params.pop(); // unused first and last
- params.pop();
- int phases = params.pop();
+void Script::fadePalettePlay(const Common::Array<int> &params) {
+ // Unused first and last
+ int phases = params[2];
_vm->_game->initializeFading(phases);
// Call the game loop to enable interactivity until the fading is done.
_vm->_game->loop(kInnerWhileFade, false);
}
-void Script::setPalette(Common::Queue<int> &params) {
+void Script::setPalette(const Common::Array<int> &params) {
if (_vm->_game->getScheduledPalette() == -1) {
_vm->_screen->setPalette(NULL, 0, kNumColours);
} else {
@@ -918,15 +916,15 @@ void Script::setPalette(Common::Queue<int> &params) {
_vm->_system->delayMillis(20);
}
-void Script::quitGame(Common::Queue<int> &params) {
+void Script::quitGame(const Common::Array<int> &params) {
_vm->_game->setQuit(true);
}
-void Script::pushNewRoom(Common::Queue<int> &params) {
+void Script::pushNewRoom(const Common::Array<int> &params) {
_vm->_game->pushNewRoom();
}
-void Script::popNewRoom(Common::Queue<int> &params) {
+void Script::popNewRoom(const Common::Array<int> &params) {
_vm->_game->popNewRoom();
}
@@ -1139,7 +1137,7 @@ void Script::run(const GPL2Program &program, uint16 offset) {
Common::MemoryReadStream reader(program._bytecode, program._length);
// Parameter queue that is passed to each command
- Common::Queue<int> params;
+ Common::Array<int> params;
// Offset is given as number of 16-bit integers so we need to convert
// it to a number of bytes
@@ -1189,10 +1187,10 @@ void Script::run(const GPL2Program &program, uint16 offset) {
if (cmd->_paramTypes[i] == kGPL2Math) {
debugC(3, kDraciBytecodeDebugLevel,
"Evaluating (in-script) GPL expression at offset %d: ", offset);
- params.push(handleMathExpression(&reader));
+ params.push_back(handleMathExpression(&reader));
} else {
tmp = reader.readSint16LE();
- params.push(tmp);
+ params.push_back(tmp);
debugC(2, kDraciBytecodeDebugLevel, "\t%d", tmp);
}
}
diff --git a/engines/draci/script.h b/engines/draci/script.h
index 0681172a81..a7be243387 100644
--- a/engines/draci/script.h
+++ b/engines/draci/script.h
@@ -26,9 +26,9 @@
#ifndef DRACI_SCRIPT_H
#define DRACI_SCRIPT_H
+#include "common/array.h"
#include "common/str.h"
#include "common/stream.h"
-#include "common/queue.h"
namespace Draci {
@@ -42,8 +42,7 @@ enum {
kNumCommands = 55
};
-// TODO(spalek): shouldn't modify params passed by reference. Either make it const or copy the parameter.
-typedef void (Script::*GPLHandler)(Common::Queue<int> &);
+typedef void (Script::*GPLHandler)(const Common::Array<int> &);
typedef int (Script::*GPLOperatorHandler)(int, int) const;
typedef int (Script::*GPLFunctionHandler)(int) const;
@@ -112,50 +111,50 @@ private:
const GPL2Operator *_operatorList;
const GPL2Function *_functionList;
- void c_If(Common::Queue<int> &params);
- void c_Goto(Common::Queue<int> &params);
- void c_Let(Common::Queue<int> &params);
- void load(Common::Queue<int> &params);
- void start(Common::Queue<int> &params);
- void loadMusic(Common::Queue<int> &params);
- void startMusic(Common::Queue<int> &params);
- void stopMusic(Common::Queue<int> &params);
- void mark(Common::Queue<int> &params);
- void release(Common::Queue<int> &params);
- void icoStat(Common::Queue<int> &params);
- void objStat(Common::Queue<int> &params);
- void objStatOn(Common::Queue<int> &params);
- void execInit(Common::Queue<int> &params);
- void execLook(Common::Queue<int> &params);
- void execUse(Common::Queue<int> &params);
- void stayOn(Common::Queue<int> &params);
- void walkOn(Common::Queue<int> &params);
- void walkOnPlay(Common::Queue<int> &params);
- void play(Common::Queue<int> &params);
- void startPlay(Common::Queue<int> &params);
- void justTalk(Common::Queue<int> &params);
- void justStay(Common::Queue<int> &params);
- void newRoom(Common::Queue<int> &params);
- void talk(Common::Queue<int> &params);
- void loadMap(Common::Queue<int> &params);
- void roomMap(Common::Queue<int> &params);
- void disableQuickHero(Common::Queue<int> &params);
- void enableQuickHero(Common::Queue<int> &params);
- void disableSpeedText(Common::Queue<int> &params);
- void enableSpeedText(Common::Queue<int> &params);
- void dialogue(Common::Queue<int> &params);
- void exitDialogue(Common::Queue<int> &params);
- void resetDialogue(Common::Queue<int> &params);
- void resetDialogueFrom(Common::Queue<int> &params);
- void resetBlock(Common::Queue<int> &params);
- void setPalette(Common::Queue<int> &params);
- void blackPalette(Common::Queue<int> &params);
- void fadePalette(Common::Queue<int> &params);
- void fadePalettePlay(Common::Queue<int> &params);
- void loadPalette(Common::Queue<int> &params);
- void quitGame(Common::Queue<int> &params);
- void pushNewRoom(Common::Queue<int> &params);
- void popNewRoom(Common::Queue<int> &params);
+ void c_If(const Common::Array<int> &params);
+ void c_Goto(const Common::Array<int> &params);
+ void c_Let(const Common::Array<int> &params);
+ void load(const Common::Array<int> &params);
+ void start(const Common::Array<int> &params);
+ void loadMusic(const Common::Array<int> &params);
+ void startMusic(const Common::Array<int> &params);
+ void stopMusic(const Common::Array<int> &params);
+ void mark(const Common::Array<int> &params);
+ void release(const Common::Array<int> &params);
+ void icoStat(const Common::Array<int> &params);
+ void objStat(const Common::Array<int> &params);
+ void objStatOn(const Common::Array<int> &params);
+ void execInit(const Common::Array<int> &params);
+ void execLook(const Common::Array<int> &params);
+ void execUse(const Common::Array<int> &params);
+ void stayOn(const Common::Array<int> &params);
+ void walkOn(const Common::Array<int> &params);
+ void walkOnPlay(const Common::Array<int> &params);
+ void play(const Common::Array<int> &params);
+ void startPlay(const Common::Array<int> &params);
+ void justTalk(const Common::Array<int> &params);
+ void justStay(const Common::Array<int> &params);
+ void newRoom(const Common::Array<int> &params);
+ void talk(const Common::Array<int> &params);
+ void loadMap(const Common::Array<int> &params);
+ void roomMap(const Common::Array<int> &params);
+ void disableQuickHero(const Common::Array<int> &params);
+ void enableQuickHero(const Common::Array<int> &params);
+ void disableSpeedText(const Common::Array<int> &params);
+ void enableSpeedText(const Common::Array<int> &params);
+ void dialogue(const Common::Array<int> &params);
+ void exitDialogue(const Common::Array<int> &params);
+ void resetDialogue(const Common::Array<int> &params);
+ void resetDialogueFrom(const Common::Array<int> &params);
+ void resetBlock(const Common::Array<int> &params);
+ void setPalette(const Common::Array<int> &params);
+ void blackPalette(const Common::Array<int> &params);
+ void fadePalette(const Common::Array<int> &params);
+ void fadePalettePlay(const Common::Array<int> &params);
+ void loadPalette(const Common::Array<int> &params);
+ void quitGame(const Common::Array<int> &params);
+ void pushNewRoom(const Common::Array<int> &params);
+ void popNewRoom(const Common::Array<int> &params);
int operAnd(int op1, int op2) const;
int operOr(int op1, int op2) const;