diff options
author | athrxx | 2011-06-17 19:11:32 +0200 |
---|---|---|
committer | Johannes Schickel | 2011-12-26 16:18:11 +0100 |
commit | 894df5a4ac97bc67cfe7fd9a7df17e541c505365 (patch) | |
tree | d0e1a42b82d84a0c6b39db0741c316f44eda790d /engines | |
parent | 6853452bcbed083aa84638f11e4ce04ca189f0a1 (diff) | |
download | scummvm-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.cpp | 1 | ||||
-rw-r--r-- | engines/kyra/eob2.cpp | 1 | ||||
-rw-r--r-- | engines/kyra/eobcommon.cpp | 23 | ||||
-rw-r--r-- | engines/kyra/eobcommon.h | 2 | ||||
-rw-r--r-- | engines/kyra/saveload_eob.cpp | 56 |
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++) { |