aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/script.h
diff options
context:
space:
mode:
authorJohannes Schickel2007-05-05 12:18:02 +0000
committerJohannes Schickel2007-05-05 12:18:02 +0000
commit776423ff823c28f0b7ef5929af6caa679b11e067 (patch)
treeea8e43cb1b46b4cb68aa1a645e0ad27bf5a8c120 /engines/kyra/script.h
parentae24e0e99f6ae8e7ebc854a3debe691ad963bdf7 (diff)
downloadscummvm-rg350-776423ff823c28f0b7ef5929af6caa679b11e067.tar.gz
scummvm-rg350-776423ff823c28f0b7ef5929af6caa679b11e067.tar.bz2
scummvm-rg350-776423ff823c28f0b7ef5929af6caa679b11e067.zip
- started to move v1 specific functions to KyraEngine_v1 (just opcodes yet)
- reworked script opcode handling svn-id: r26749
Diffstat (limited to 'engines/kyra/script.h')
-rw-r--r--engines/kyra/script.h32
1 files changed, 29 insertions, 3 deletions
diff --git a/engines/kyra/script.h b/engines/kyra/script.h
index 67a57e7590..67aef8361c 100644
--- a/engines/kyra/script.h
+++ b/engines/kyra/script.h
@@ -26,13 +26,39 @@
#include "kyra/kyra.h"
namespace Kyra {
+
+struct ScriptState;
+
+struct Opcode {
+ virtual ~Opcode() {}
+
+ virtual operator bool() const = 0;
+
+ virtual int operator()(ScriptState*) const = 0;
+};
+
+template<class T>
+struct OpcodeImpl : public Opcode {
+ T *vm;
+ typedef int (T::*Callback)(ScriptState*);
+ Callback callback;
+
+ OpcodeImpl(T *v, Callback c) : Opcode(), vm(v), callback(c) {}
+
+ operator bool() const { return callback != 0; }
+
+ int operator()(ScriptState *state) const {
+ return (vm->*callback)(state);
+ }
+};
+
struct ScriptData {
byte *text;
uint16 *data;
uint16 *ordr;
uint16 dataSize;
-
- int opcodeTable; // indicates which opcode table to use (for Kyra3 and Kyra2)
+
+ const Common::Array<const Opcode*> *opcodes;
};
struct ScriptState {
@@ -49,7 +75,7 @@ class ScriptHelper {
public:
ScriptHelper(KyraEngine *vm);
- bool loadScript(const char *filename, ScriptData *data);
+ bool loadScript(const char *filename, ScriptData *data, const Common::Array<const Opcode*> *opcodes);
void unloadScript(ScriptData *data);
void initScript(ScriptState *scriptState, const ScriptData *data);