diff options
author | athrxx | 2011-12-11 12:29:09 +0100 |
---|---|---|
committer | Johannes Schickel | 2011-12-26 16:18:16 +0100 |
commit | 8b618e46df21d90a1a5ad62633a2b9d3c1da0317 (patch) | |
tree | 9fb69909c5d19210a458d98dbfe4b6e40d97539b /engines/kyra/saveload_eob.cpp | |
parent | aac7e16afa8546232a27754c6928cd43cd6ba876 (diff) | |
download | scummvm-rg350-8b618e46df21d90a1a5ad62633a2b9d3c1da0317.tar.gz scummvm-rg350-8b618e46df21d90a1a5ad62633a2b9d3c1da0317.tar.bz2 scummvm-rg350-8b618e46df21d90a1a5ad62633a2b9d3c1da0317.zip |
KYRA: (EOB/LOL) - cleanup common code
(rename some stuff and move EOB/LOL common code to separate files)
Diffstat (limited to 'engines/kyra/saveload_eob.cpp')
-rw-r--r-- | engines/kyra/saveload_eob.cpp | 110 |
1 files changed, 7 insertions, 103 deletions
diff --git a/engines/kyra/saveload_eob.cpp b/engines/kyra/saveload_eob.cpp index ec89fca5e2..091b3201bd 100644 --- a/engines/kyra/saveload_eob.cpp +++ b/engines/kyra/saveload_eob.cpp @@ -20,9 +20,8 @@ * */ -#if defined(ENABLE_EOB) || defined(ENABLE_LOL) +#ifdef ENABLE_EOB -#include "kyra/eobcommon.h" #include "kyra/resource.h" #include "kyra/script_eob.h" @@ -32,99 +31,6 @@ namespace Kyra { -void LolEobBaseEngine::generateTempData() { - int l = _currentLevel - 1; - if (_lvlTempData[l]) { - delete[] _lvlTempData[l]->wallsXorData; - delete[] _lvlTempData[l]->flags; - releaseMonsterTempData(_lvlTempData[l]); - releaseFlyingObjectTempData(_lvlTempData[l]); - releaseWallOfForceTempData(_lvlTempData[l]); - delete _lvlTempData[l]; - } - - _lvlTempData[l] = new LevelTempData; - - _lvlTempData[l]->wallsXorData = new uint8[4096]; - _lvlTempData[l]->flags = new uint16[1024]; - - const uint8 *p = getBlockFileData(_currentLevel); - uint16 len = READ_LE_UINT16(p + 4); - p += 6; - - memset(_lvlTempData[l]->wallsXorData, 0, 4096); - memset(_lvlTempData[l]->flags, 0, 1024 * sizeof(uint16)); - uint8 *d = _lvlTempData[l]->wallsXorData; - uint16 *df = _lvlTempData[l]->flags; - - for (int i = 0; i < 1024; i++) { - for (int ii = 0; ii < 4; ii++) - *d++ = p[i * len + ii] ^ _levelBlockProperties[i].walls[ii]; - *df++ = _levelBlockProperties[i].flags; - } - - _lvlTempData[l]->monsters = generateMonsterTempData(_lvlTempData[l]); - _lvlTempData[l]->flyingObjects = generateFlyingObjectTempData(_lvlTempData[l]); - _lvlTempData[l]->wallsOfForce = generateWallOfForceTempData(_lvlTempData[l]); - - _hasTempDataFlags |= (1 << l); -} - -void LolEobBaseEngine::restoreBlockTempData(int levelIndex) { - int l = levelIndex - 1; - const uint8 *p = getBlockFileData(levelIndex); - uint16 len = READ_LE_UINT16(p + 4); - p += 6; - - memset(_levelBlockProperties, 0, 1024 * sizeof(LevelBlockProperty)); - - uint8 *t = _lvlTempData[l]->wallsXorData; - uint16 *t2 = _lvlTempData[l]->flags; - - for (int i = 0; i < 1024; i++) { - for (int ii = 0; ii < 4; ii++) - _levelBlockProperties[i].walls[ii] = p[i * len + ii] ^ *t++; - _levelBlockProperties[i].flags = *t2++; - } - - restoreMonsterTempData(_lvlTempData[l]); - restoreFlyingObjectTempData(_lvlTempData[l]); - restoreWallOfForceTempData(_lvlTempData[l]); -} - -void LolEobBaseEngine::releaseTempData() { - for (int i = 0; i < 29; i++) { - if (_lvlTempData[i]) { - delete[] _lvlTempData[i]->wallsXorData; - delete[] _lvlTempData[i]->flags; - releaseMonsterTempData(_lvlTempData[i]); - releaseFlyingObjectTempData(_lvlTempData[i]); - releaseWallOfForceTempData(_lvlTempData[i]); - delete _lvlTempData[i]; - _lvlTempData[i] = 0; - } - } -} - -void *LolEobBaseEngine::generateFlyingObjectTempData(LevelTempData *tmp) { - assert(_flyingObjectStructSize == sizeof(EobFlyingObject)); - EobFlyingObject *f = new EobFlyingObject[_numFlyingObjects]; - memcpy(f, _flyingObjectsPtr, sizeof(EobFlyingObject) * _numFlyingObjects); - return f; -} - -void LolEobBaseEngine::restoreFlyingObjectTempData(LevelTempData *tmp) { - assert(_flyingObjectStructSize == sizeof(EobFlyingObject)); - memcpy(_flyingObjectsPtr, tmp->flyingObjects, sizeof(EobFlyingObject) * _numFlyingObjects); -} - -void LolEobBaseEngine::releaseFlyingObjectTempData(LevelTempData *tmp) { - EobFlyingObject *p = (EobFlyingObject*)tmp->flyingObjects; - delete[] p; -} - -#ifdef ENABLE_EOB - Common::Error EobCoreEngine::loadGameState(int slot) { const char *fileName = 0; @@ -221,7 +127,7 @@ Common::Error EobCoreEngine::loadGameState(int slot) { _itemInHand = in.readSint16BE(); _hasTempDataFlags = in.readUint32BE(); _partyEffectFlags = in.readUint32BE(); - + _updateFlags = in.readUint16BE(); _compassDirection = in.readUint16BE(); _currentControlMode = in.readUint16BE(); @@ -294,7 +200,7 @@ Common::Error EobCoreEngine::loadGameState(int slot) { EobFlyingObject *lf = new EobFlyingObject[_numFlyingObjects]; l->flyingObjects = lf; WallOfForce *lw = new WallOfForce[5]; - l->wallsOfForce = lw; + l->wallsOfForce = lw; in.read(l->wallsXorData, 4096); for (int ii = 0; ii < 1024; ii++) @@ -364,7 +270,7 @@ Common::Error EobCoreEngine::loadGameState(int slot) { } _screen->setCurPage(0); - gui_drawPlayField(false); + gui_drawPlayField(false); if (_currentControlMode) _screen->copyRegion(176, 0, 0, 0, 144, 168, 0, 5, Screen::CR_NO_P_CHECK); @@ -474,7 +380,7 @@ 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); @@ -529,7 +435,7 @@ Common::Error EobCoreEngine::saveGameStateIntern(int slot, const char *saveName, LevelTempData *l = _lvlTempData[i]; if (!l || !(_hasTempDataFlags & (1 << i))) continue; - + out->write(l->wallsXorData, 4096); for (int ii = 0; ii < 1024; ii++) out->writeByte(l->flags[ii] & 0xff); @@ -643,8 +549,6 @@ void EobCoreEngine::releaseWallOfForceTempData(LevelTempData *tmp) { delete[] p; } -#endif // ENABLE_EOB - } // End of namespace Kyra -#endif // ENABLE_EOB || ENABLE_LOL +#endif // ENABLE_EOB |