diff options
author | Johannes Schickel | 2007-05-05 12:18:02 +0000 |
---|---|---|
committer | Johannes Schickel | 2007-05-05 12:18:02 +0000 |
commit | 776423ff823c28f0b7ef5929af6caa679b11e067 (patch) | |
tree | ea8e43cb1b46b4cb68aa1a645e0ad27bf5a8c120 /engines/kyra/script.cpp | |
parent | ae24e0e99f6ae8e7ebc854a3debe691ad963bdf7 (diff) | |
download | scummvm-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.cpp | 16 |
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) { |