aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorathrxx2011-06-17 19:11:32 +0200
committerJohannes Schickel2011-12-26 16:18:11 +0100
commit894df5a4ac97bc67cfe7fd9a7df17e541c505365 (patch)
treed0e1a42b82d84a0c6b39db0741c316f44eda790d /engines
parent6853452bcbed083aa84638f11e4ce04ca189f0a1 (diff)
downloadscummvm-rg350-894df5a4ac97bc67cfe7fd9a7df17e541c505365.tar.gz
scummvm-rg350-894df5a4ac97bc67cfe7fd9a7df17e541c505365.tar.bz2
scummvm-rg350-894df5a4ac97bc67cfe7fd9a7df17e541c505365.zip
KYRA: (EOB) - extended saveload caps
(also save/load inventory and spellbook display state)
Diffstat (limited to 'engines')
-rw-r--r--engines/kyra/eob1.cpp1
-rw-r--r--engines/kyra/eob2.cpp1
-rw-r--r--engines/kyra/eobcommon.cpp23
-rw-r--r--engines/kyra/eobcommon.h2
-rw-r--r--engines/kyra/saveload_eob.cpp56
5 files changed, 65 insertions, 18 deletions
diff --git a/engines/kyra/eob1.cpp b/engines/kyra/eob1.cpp
index 993d06a56b..3a6bd28342 100644
--- a/engines/kyra/eob1.cpp
+++ b/engines/kyra/eob1.cpp
@@ -73,6 +73,7 @@ void EobEngine::startupNew() {
_currentBlock = 490;
_currentDirection = 0;
setHandItem(0);
+ EobCoreEngine::startupNew();
}
void EobEngine::startupLoad() {
diff --git a/engines/kyra/eob2.cpp b/engines/kyra/eob2.cpp
index 45df528c75..06e85a8cc7 100644
--- a/engines/kyra/eob2.cpp
+++ b/engines/kyra/eob2.cpp
@@ -73,6 +73,7 @@ void DarkMoonEngine::startupNew() {
_currentBlock = 171;
_currentDirection = 2;
setHandItem(0);
+ EobCoreEngine::startupNew();
}
void DarkMoonEngine::startupLoad() {
diff --git a/engines/kyra/eobcommon.cpp b/engines/kyra/eobcommon.cpp
index 89a20a0ea3..e0fb584e16 100644
--- a/engines/kyra/eobcommon.cpp
+++ b/engines/kyra/eobcommon.cpp
@@ -383,26 +383,23 @@ Common::Error EobCoreEngine::go() {
return Common::kNoError;
}
-void EobCoreEngine::runLoop() {
- _envAudioTimer = _system->getMillis() + (rollDice(1, 10, 3) * 18 * _tickLength);
-
- _updateFlags = 0;
- _updateCharNum = 0;
- _flashShapeTimer = 0;
- _drawSceneTimer = _system->getMillis();
- //__unkB__ = 1;
+void EobCoreEngine::startupNew() {
gui_setPlayFieldButtons();
-
_screen->_curPage = 0;
gui_drawPlayField(0);
-
- _screen->setFont(Screen::FID_6_FNT);
-
_screen->_curPage = 0;
gui_drawAllCharPortraitsWithStats();
-
drawScene(1);
+ _updateFlags = 0;
+ _updateCharNum = 0;
+}
+void EobCoreEngine::runLoop() {
+ _envAudioTimer = _system->getMillis() + (rollDice(1, 10, 3) * 18 * _tickLength);
+ _flashShapeTimer = 0;
+ _drawSceneTimer = _system->getMillis();
+ //__unkB__ = 1;
+ _screen->setFont(Screen::FID_6_FNT);
_screen->setScreenDim(7);
//_runLoopUnk2 = _currentBlock;
diff --git a/engines/kyra/eobcommon.h b/engines/kyra/eobcommon.h
index 5e34dc3791..6632ae3cba 100644
--- a/engines/kyra/eobcommon.h
+++ b/engines/kyra/eobcommon.h
@@ -292,7 +292,7 @@ protected:
const char *const *_mainMenuStrings;
// Main loop
- virtual void startupNew() = 0;
+ virtual void startupNew();
virtual void startupLoad() = 0;
void runLoop();
void update() { screen()->updateScreen(); }
diff --git a/engines/kyra/saveload_eob.cpp b/engines/kyra/saveload_eob.cpp
index ee91b6549e..18dddddd83 100644
--- a/engines/kyra/saveload_eob.cpp
+++ b/engines/kyra/saveload_eob.cpp
@@ -229,6 +229,23 @@ Common::Error EobCoreEngine::loadGameState(int slot) {
_itemInHand = in.readSint16BE();
_hasTempDataFlags = in.readUint32BE();
_partyEffectFlags = in.readUint32BE();
+
+ _updateFlags = in.readUint16BE();
+ _compassDirection = in.readUint16BE();
+ _currentControlMode = in.readUint16BE();
+ _updateCharNum = in.readUint16BE();
+ _openBookSpellLevel = in.readSByte();
+ _openBookSpellSelectedItem = in.readSByte();
+ _openBookSpellListOffset = in.readSByte();
+ _openBookChar = in.readByte();
+ _openBookType = in.readByte();
+ _openBookCharBackup = in.readByte();
+ _openBookTypeBackup = in.readByte();
+ _activeSpellCaster = in.readByte();
+ _activeSpellCasterPos = in.readByte();
+ _activeSpell = in.readByte();
+ _returnAfterSpellCallback = in.readByte() ? true : false;
+
_inf->loadState(in);
for (int i = 0; i < 600; i++) {
@@ -336,15 +353,29 @@ Common::Error EobCoreEngine::loadGameState(int slot) {
if (_saveLoadMode != -1) {
loadLevel(_currentLevel, _currentSub);
- gui_drawPlayField(0);
_sceneUpdateRequired = true;
- _screen->setCurPage(0);
_screen->setFont(Screen::FID_6_FNT);
- gui_drawAllCharPortraitsWithStats();
- updateHandItemCursor();
_saveLoadMode = 1;
}
+ _screen->setCurPage(0);
+ gui_drawPlayField(0);
+
+ if (_currentControlMode)
+ _screen->copyRegion(176, 0, 0, 0, 144, 168, 0, 5, Screen::CR_NO_P_CHECK);
+
+ _screen->setCurPage(0);
+ gui_drawAllCharPortraitsWithStats();
+ drawScene(1);
+
+ if (_updateFlags) {
+ _updateFlags = 0;
+ useMagicBookOrSymbol(_openBookChar, _openBookType);
+ }
+
+ gui_toggleButtons();
+ updateHandItemCursor();
+
while (!_screen->isMouseVisible())
_screen->showMouse();
@@ -418,6 +449,23 @@ Common::Error EobCoreEngine::saveGameStateIntern(int slot, const char *saveName,
out->writeSint16BE(_itemInHand);
out->writeUint32BE(_hasTempDataFlags);
out->writeUint32BE(_partyEffectFlags);
+
+ out->writeUint16BE(_updateFlags);
+ out->writeUint16BE(_compassDirection);
+ out->writeUint16BE(_currentControlMode);
+ out->writeUint16BE(_updateCharNum);
+ out->writeSByte(_openBookSpellLevel);
+ out->writeSByte(_openBookSpellSelectedItem);
+ out->writeSByte(_openBookSpellListOffset);
+ out->writeByte(_openBookChar);
+ out->writeByte(_openBookType);
+ out->writeByte(_openBookCharBackup);
+ out->writeByte(_openBookTypeBackup);
+ out->writeByte(_activeSpellCaster);
+ out->writeByte(_activeSpellCasterPos);
+ out->writeByte(_activeSpell);
+ out->writeByte(_returnAfterSpellCallback ? 1 : 0);
+
_inf->saveState(out);
for (int i = 0; i < 600; i++) {