diff options
Diffstat (limited to 'engines/toltecs/script.cpp')
-rw-r--r-- | engines/toltecs/script.cpp | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/engines/toltecs/script.cpp b/engines/toltecs/script.cpp index 0b27e8af3b..fa382194f8 100644 --- a/engines/toltecs/script.cpp +++ b/engines/toltecs/script.cpp @@ -21,6 +21,8 @@ * */ +// TODO: Clean up game variable handling and move it to ToltecsEngine + #include "common/events.h" #include "common/keyboard.h" #include "common/file.h" @@ -45,7 +47,7 @@ namespace Toltecs { ScriptInterpreter::ScriptInterpreter(ToltecsEngine *vm) : _vm(vm) { - _stack = new byte[4096 + 4]; + _stack = new byte[kScriptStackSize]; memset(_slots, 0, sizeof(_slots)); @@ -550,7 +552,7 @@ void ScriptInterpreter::execKernelOpcode(uint16 kernelOpcode) { case 14:// ok { debug(0, "o2_setDeltaPalette(animPalette, %d, %d, %d, %d)", arg8(6), arg8(5), arg8(4), arg8(3)); - _vm->_palette->setDeltaPalette(_vm->_anim->_palette, arg8(6), (char)arg8(5), arg8(4), arg8(3)); + _vm->_palette->setDeltaPalette(_vm->_palette->getAnimPalette(), arg8(6), (char)arg8(5), arg8(4), arg8(3)); break; } @@ -604,8 +606,8 @@ void ScriptInterpreter::execKernelOpcode(uint16 kernelOpcode) { case 22:// ok { - debug(0, "o2_setCameraTop(%d)", arg8(3)); - _vm->setCameraTop(arg8(3)); + debug(0, "o2_setGuiHeight(%d)", arg8(3)); + _vm->setGuiHeight(arg8(3)); break; } @@ -926,7 +928,7 @@ void ScriptInterpreter::execKernelOpcode(uint16 kernelOpcode) { } -ScriptInterpreter::VarType ScriptInterpreter::getGameVarType(uint variable) { +VarType ScriptInterpreter::getGameVarType(uint variable) { switch (variable) { case 0: return vtByte; case 1: return vtWord; @@ -976,7 +978,7 @@ const char *getVarName(uint variable) { case 16: return "walkSpeedX"; case 17: return "flag01"; case 18: return "sceneResIndex"; - case 19: return "cameraTop"; + case 19: return "guiHeight"; case 20: return "sceneHeight"; case 21: return "sceneWidth"; } @@ -1047,7 +1049,7 @@ int16 ScriptInterpreter::getGameVar(uint variable) { value = _vm->_sceneResIndex; break; case 19: - value = _vm->_cameraTop; + value = _vm->_guiHeight; break; case 20: value = _vm->_sceneHeight; @@ -1122,7 +1124,7 @@ void ScriptInterpreter::setGameVar(uint variable, int16 value) { _vm->_sceneResIndex = value; break; case 19: - _vm->_cameraTop = value; + _vm->_guiHeight = value; break; case 20: _vm->_sceneHeight = value; @@ -1217,4 +1219,34 @@ byte *ScriptInterpreter::localPtr(int16 offset) { return &_localData[offset]; } +void ScriptInterpreter::saveState(Common::WriteStream *out) { + + // Save registers + out->writeUint16LE(_regs.reg0); + out->writeUint16LE(_regs.reg1); + out->writeUint16LE(_regs.reg2); + out->writeUint16LE(_regs.reg3); + out->writeUint16LE(_regs.reg4); + out->writeUint16LE(_regs.reg5); + out->writeUint16LE(_regs.reg6); + out->writeUint16LE(_regs.sp); + out->writeUint16LE(_regs.reg8); + + // Save slots + for (int slot = 0; slot < kMaxScriptSlots; slot++) { + out->writeUint32LE(_slots[slot].size); + out->writeUint16LE(_slots[slot].resIndex); + if (_slots[slot].size > 0) + out->write(_slots[slot].data, _slots[slot].size); + } + + // Save stack + out->write(_stack, kScriptStackSize); + out->writeUint16LE(_savedSp); + +} + +void ScriptInterpreter::loadState(Common::ReadStream *in) { +} + } // End of namespace Toltecs |