aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/script.cpp
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.cpp
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.cpp')
-rw-r--r--engines/kyra/script.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/engines/kyra/script.cpp b/engines/kyra/script.cpp
index 762288a8e0..2f7973f5a2 100644
--- a/engines/kyra/script.cpp
+++ b/engines/kyra/script.cpp
@@ -68,7 +68,7 @@ ScriptHelper::ScriptHelper(KyraEngine *vm) : _vm(vm) {
#undef COMMAND
}
-bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData) {
+bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData, const Common::Array<const Opcode*> *opcodes) {
uint32 size = 0;
uint8 *data = _vm->resource()->fileData(filename, &size);
const byte *curData = data;
@@ -134,6 +134,8 @@ bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData) {
while (chunkSize--)
scriptData->data[chunkSize] = READ_BE_UINT16(&scriptData->data[chunkSize]);
+
+ scriptData->opcodes = opcodes;
delete [] data;
return true;
@@ -375,7 +377,17 @@ void ScriptHelper::c1_subSP(ScriptState* script) {
}
void ScriptHelper::c1_execOpcode(ScriptState* script) {
- script->retValue = _vm->runOpcode(script, (uint8)_parameter);
+ uint8 opcode = _parameter;
+
+ assert(script->dataPtr->opcodes);
+ assert(opcode < script->dataPtr->opcodes->size());
+
+ if ((*script->dataPtr->opcodes)[opcode]) {
+ script->retValue = (*(*script->dataPtr->opcodes)[opcode])(script);
+ } else {
+ script->retValue = 0;
+ warning("calling unimplemented opcode(0x%.02X)", opcode);
+ }
}
void ScriptHelper::c1_ifNotJmp(ScriptState* script) {