diff options
author | Paul Gilbert | 2017-11-16 20:59:07 -0500 |
---|---|---|
committer | Paul Gilbert | 2017-11-16 20:59:07 -0500 |
commit | 6421170f9224cf56eda4a6502014d315bb3eec70 (patch) | |
tree | 69b978e75d9267fe32fcaf552b177a86438e886e /engines/xeen | |
parent | 2b823d63d42973e751db5f5ff8a4efed10faa239 (diff) | |
download | scummvm-rg350-6421170f9224cf56eda4a6502014d315bb3eec70.tar.gz scummvm-rg350-6421170f9224cf56eda4a6502014d315bb3eec70.tar.bz2 scummvm-rg350-6421170f9224cf56eda4a6502014d315bb3eec70.zip |
XEEN: Map and game flag fixes
Diffstat (limited to 'engines/xeen')
-rw-r--r-- | engines/xeen/map.cpp | 20 | ||||
-rw-r--r-- | engines/xeen/scripts.cpp | 8 |
2 files changed, 12 insertions, 16 deletions
diff --git a/engines/xeen/map.cpp b/engines/xeen/map.cpp index a459b56ae4..b9b674cbdd 100644 --- a/engines/xeen/map.cpp +++ b/engines/xeen/map.cpp @@ -987,7 +987,7 @@ void Map::load(int mapId) { if (isDarkCc && mapId == 50) mazeDataP->setAllTilesStepped(); - if (!isDarkCc && _vm->_party->_gameFlags[25] && + if (!isDarkCc && _vm->_party->_gameFlags[0][25] && (mapId == 42 || mapId == 43 || mapId == 4)) { mazeDataP->clearCellSurfaces(); } @@ -1061,7 +1061,7 @@ void Map::load(int mapId) { _mobData._objects[29]._spriteId = 0; _mobData._objects[29]._id = 8; _mobData._objectSprites[i]._sprites.clear(); - } else if (mapId == 12 && _vm->_party->_gameFlags[43] && + } else if (mapId == 12 && _vm->_party->_gameFlags[0][43] && _mobData._objectSprites[i]._spriteId == 118 && !isDarkCc) { filename = "085.obj"; _mobData._objectSprites[0]._spriteId = 85; @@ -1451,11 +1451,11 @@ int Map::getCell(int idx) { _currentWall = INVALID_CELL; return INVALID_CELL; } - - _mazeDataIndex = 0; - while (_mazeData[_mazeDataIndex]._mazeId != mapId) - ++_mazeDataIndex; } + + _mazeDataIndex = 0; + while (_mazeData[_mazeDataIndex]._mazeId != mapId) + ++_mazeDataIndex; } if (pt.x & 16) { @@ -1494,10 +1494,10 @@ int Map::getCell(int idx) { ++_mazeDataIndex; } + assert(ABS(pt.x) < 16 && ABS(pt.y) < 16); int wallData = _mazeData[_mazeDataIndex]._wallData[pt.y][pt.x]._data; if (_isOutdoors) { if (mapId) { - // TODO: tile is set to word of (wallLayers >> 8) && 0xff? Makes no sense _currentTile = (wallData >> 8) & 0xFF; _currentWall = (wallData >> 4) & 0xF; _currentSurfaceId = wallData & 0xF; @@ -1510,11 +1510,7 @@ int Map::getCell(int idx) { if (!mapId) return 0; - if (pt.x > 31 || pt.y > 31) - _currentSurfaceId = 7; - else - _currentSurfaceId = _mazeData[_mazeDataIndex]._cells[pt.y][pt.x]._surfaceId; - + _currentSurfaceId = _mazeData[_mazeDataIndex]._cells[pt.y][pt.x]._surfaceId; _currentWall = wallData; return (_currentWall >> Res.WALL_SHIFTS[dir][idx]) & 0xF; } diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp index d1bd1f21f2..ea4fc1cc06 100644 --- a/engines/xeen/scripts.cpp +++ b/engines/xeen/scripts.cpp @@ -1446,9 +1446,9 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { } case 20: if (_vm->_files->_isDarkCc) - mask += 0x100; - assert(mask < 0x200); - v = party._gameFlags[mask] ? mask : 0xffffffff; + mask += 256; + assert(mask < 512); + v = party._gameFlags[mask / 256][mask % 256] ? mask : 0xffffffff; break; case 21: // Scans inventories for given item number @@ -1480,7 +1480,7 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { } else { int baseFlag = 8 * (6 + mask); for (int idx = 0; idx < 8; ++idx) { - if (party._gameFlags[baseFlag + idx]) { + if (party._gameFlags[0][baseFlag + idx]) { v = mask; break; } |