aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction
diff options
context:
space:
mode:
authorNicola Mettifogo2007-07-29 15:21:33 +0000
committerNicola Mettifogo2007-07-29 15:21:33 +0000
commit9a766cf5c48683fb81d92e094538eb101ea21660 (patch)
tree42f16e26d9bcde6316e83949e14e59fcc91bfa96 /engines/parallaction
parent04027589ab0413c09bb7d47c95bed74916bf5ca8 (diff)
downloadscummvm-rg350-9a766cf5c48683fb81d92e094538eb101ea21660.tar.gz
scummvm-rg350-9a766cf5c48683fb81d92e094538eb101ea21660.tar.bz2
scummvm-rg350-9a766cf5c48683fb81d92e094538eb101ea21660.zip
Removed direct references to callable functions (opcodes). They are now only available via a virtual member function in the engine.
svn-id: r28291
Diffstat (limited to 'engines/parallaction')
-rw-r--r--engines/parallaction/animation.cpp2
-rw-r--r--engines/parallaction/commands.cpp2
-rw-r--r--engines/parallaction/parallaction.h7
-rw-r--r--engines/parallaction/parallaction_ns.cpp7
4 files changed, 16 insertions, 2 deletions
diff --git a/engines/parallaction/animation.cpp b/engines/parallaction/animation.cpp
index d4f538c451..281e3e8da9 100644
--- a/engines/parallaction/animation.cpp
+++ b/engines/parallaction/animation.cpp
@@ -566,7 +566,7 @@ void jobRunScripts(void *parm, Job *j) {
case INST_CALL: // call
- _callables[(*inst)->_opBase._index](0);
+ _vm->callFunction((*inst)->_opBase._index, 0);
break;
case INST_WAIT: // wait
diff --git a/engines/parallaction/commands.cpp b/engines/parallaction/commands.cpp
index 15acdd2d86..4df9aa4559 100644
--- a/engines/parallaction/commands.cpp
+++ b/engines/parallaction/commands.cpp
@@ -302,7 +302,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
break;
case CMD_CALL: // call
- _callables[u->_callable](z);
+ callFunction(u->_callable, z);
break;
case CMD_QUIT: // quit
diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
index 0cb6e92709..25753f60b2 100644
--- a/engines/parallaction/parallaction.h
+++ b/engines/parallaction/parallaction.h
@@ -478,6 +478,10 @@ protected: // members
int16 pickupItem(Zone *z);
int16 isItemInInventory(int32 v);
int16 getHoverInventoryItem(int16 x, int16 y);
+
+public:
+ virtual void callFunction(uint index, void* parm) { }
+
};
class Parallaction_ns : public Parallaction {
@@ -487,6 +491,9 @@ public:
~Parallaction_ns() { }
int init();
+
+public:
+ virtual void callFunction(uint index, void* parm);
};
class Parallaction_br : public Parallaction {
diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp
index bc856772c3..5f0fb0fe84 100644
--- a/engines/parallaction/parallaction_ns.cpp
+++ b/engines/parallaction/parallaction_ns.cpp
@@ -66,4 +66,11 @@ int Parallaction_ns::init() {
return 0;
}
+void Parallaction_ns::callFunction(uint index, void* parm) {
+ assert(index >= 0 && index < 25); // magic value 25 is maximum # of callables for Nippon Safes
+
+ _callables[index](parm);
+}
+
+
} // namespace Parallaction