diff options
author | Johannes Schickel | 2009-06-07 20:43:43 +0000 |
---|---|---|
committer | Johannes Schickel | 2009-06-07 20:43:43 +0000 |
commit | 5c233c447ba9656608b41fd0bd46edcc830e8b13 (patch) | |
tree | a7508b8ec523b7718a5641e5db24ce94c672e0d6 /engines/kyra/saveload_lol.cpp | |
parent | c7861cb65e7bcddc8bb7e51a7df30f6419dcc105 (diff) | |
download | scummvm-rg350-5c233c447ba9656608b41fd0bd46edcc830e8b13.tar.gz scummvm-rg350-5c233c447ba9656608b41fd0bd46edcc830e8b13.tar.bz2 scummvm-rg350-5c233c447ba9656608b41fd0bd46edcc830e8b13.zip |
Remove LoLEngine::_gameFlags and convert all Lands of Lore code to use _flagsTable instead.
svn-id: r41351
Diffstat (limited to 'engines/kyra/saveload_lol.cpp')
-rw-r--r-- | engines/kyra/saveload_lol.cpp | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/engines/kyra/saveload_lol.cpp b/engines/kyra/saveload_lol.cpp index cdfaca3b6d..2090deddfa 100644 --- a/engines/kyra/saveload_lol.cpp +++ b/engines/kyra/saveload_lol.cpp @@ -119,15 +119,33 @@ Common::Error LoLEngine::loadGameState(int slot) { _inventoryCurItem = in.readSint16BE(); _itemInHand = in.readSint16BE(); _lastMouseRegion = in.readSint16BE(); - if (header.version == 14) { - for (int i = 0; i < 16; i++) - _gameFlags[i] = in.readUint16BE(); - _gameFlags[26] = in.readUint16BE(); - _gameFlags[36] = in.readUint16BE(); + + if (header.version <= 15) { + uint16 flags[40]; + memset(flags, 0, sizeof(flags)); + + if (header.version == 14) { + for (int i = 0; i < 16; i++) + flags[i] = in.readUint16BE(); + flags[26] = in.readUint16BE(); + flags[36] = in.readUint16BE(); + } else if (header.version == 15) { + for (int i = 0; i < 40; i++) + flags[i] = in.readUint16BE(); + } + + for (uint i = 0; i < ARRAYSIZE(flags); ++i) { + for (uint k = 0; k < 16; ++k) { + if (flags[i] & (1 << k)) + setGameFlag(((i << 4) & 0xFFF0) | (k & 0x000F)); + } + } } else { - for (int i = 0; i < 40; i++) - _gameFlags[i] = in.readUint16BE(); + uint32 flagsSize = in.readUint32BE(); + assert(flagsSize <= sizeof(_flagsTable)); + in.read(_flagsTable, flagsSize); } + for (int i = 0; i < 24; i++) _globalScriptVars[i] = in.readUint16BE(); _brightness = in.readByte(); @@ -245,7 +263,7 @@ Common::Error LoLEngine::loadGameState(int slot) { loadLevel(_currentLevel); gui_drawPlayField(); timerSpecialCharacterUpdate(0); - _gameFlags[36] |= 0x800; + _flagsTable[73] |= 0x08; while (!_screen->isMouseVisible()) _screen->showMouse(); @@ -323,8 +341,8 @@ Common::Error LoLEngine::saveGameState(int slot, const char *saveName, const Gra out->writeSint16BE(_inventoryCurItem); out->writeSint16BE(_itemInHand); out->writeSint16BE(_lastMouseRegion); - for (int i = 0; i < 40; i++) - out->writeUint16BE(_gameFlags[i]); + out->writeUint32BE(ARRAYSIZE(_flagsTable)); + out->write(_flagsTable, ARRAYSIZE(_flagsTable)); for (int i = 0; i < 24; i++) out->writeUint16BE(_globalScriptVars[i]); out->writeByte(_brightness); |