TOLTECS: - Renamed stuff and cleanups
- Beginnings of the saveload system (incomplete)
This commit is contained in:
parent
21f6dad09a
commit
dd5567613f
13 changed files with 280 additions and 27 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue