diff options
author | Paul Gilbert | 2015-01-16 21:26:06 -0500 |
---|---|---|
committer | Paul Gilbert | 2015-01-16 21:26:06 -0500 |
commit | 6bfd599535b839ce51261ff7ed82bbca92538050 (patch) | |
tree | 2a0b7c0c2b8d705263cfa93eb8fb9aee8c48c0c5 | |
parent | 484901e7a299f26afa1be9ca1644fee0aef7acf1 (diff) | |
download | scummvm-rg350-6bfd599535b839ce51261ff7ed82bbca92538050.tar.gz scummvm-rg350-6bfd599535b839ce51261ff7ed82bbca92538050.tar.bz2 scummvm-rg350-6bfd599535b839ce51261ff7ed82bbca92538050.zip |
XEEN: Fixes for map loading cells and indoor sprite list references
-rw-r--r-- | engines/xeen/interface.cpp | 44 | ||||
-rw-r--r-- | engines/xeen/interface_map.cpp | 53 | ||||
-rw-r--r-- | engines/xeen/interface_map.h | 2 | ||||
-rw-r--r-- | engines/xeen/map.cpp | 10 |
4 files changed, 55 insertions, 54 deletions
diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp index 9aa76f614e..f3060c2cf4 100644 --- a/engines/xeen/interface.cpp +++ b/engines/xeen/interface.cpp @@ -662,7 +662,7 @@ void Interface::draw3d(bool updateFlag) { } setIndoorsAttackingMonsters(); - setIndoorObjects(); + setIndoorsObjects(); setIndoorsWallPics(); _indoorList[161]._sprites = nullptr; @@ -757,7 +757,7 @@ void Interface::startup() { animate3d(); if (_vm->_map->_isOutdoors) { setIndoorsAttackingMonsters(); - setIndoorObjects(); + setIndoorsObjects(); } else { setOutdoorsMonsters(); setOutdoorsObjects(); @@ -816,7 +816,7 @@ void Interface::setMainButtons() { void Interface::setMazeBits() { Common::fill(&_wo[0], &_wo[308], 0); - switch (_vm->_map->getCell(0)) { + switch (_vm->_map->getCell(0) - 1) { case 0: ++_wo[125]; break; @@ -886,7 +886,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(2)) { + switch (_vm->_map->getCell(2) - 1) { case 0: ++_wo[127]; break; @@ -956,7 +956,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(4)) { + switch (_vm->_map->getCell(4) - 1) { case 0: ++_wo[126]; break; @@ -1002,7 +1002,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(5)) { + switch (_vm->_map->getCell(5) - 1) { case 0: ++_wo[122]; break; @@ -1068,7 +1068,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(7)) { + switch (_vm->_map->getCell(7) - 1) { case 0: ++_wo[124]; break; @@ -1140,7 +1140,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(9)) { + switch (_vm->_map->getCell(9) - 1) { case 0: ++_wo[123]; break; @@ -1186,7 +1186,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(10)) { + switch (_vm->_map->getCell(10) - 1) { case 0: ++_wo[117]; break; @@ -1255,7 +1255,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(12)) { + switch (_vm->_map->getCell(12) - 1) { case 0: ++_wo[118]; break; @@ -1325,7 +1325,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(14)) { + switch (_vm->_map->getCell(14) - 1) { case 0: ++_wo[121]; break; @@ -1395,7 +1395,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(16)) { + switch (_vm->_map->getCell(16) - 1) { case 0: ++_wo[120]; break; @@ -1465,7 +1465,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(18)) { + switch (_vm->_map->getCell(18) - 1) { case 0: ++_wo[119]; break; @@ -1511,7 +1511,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(19)) { + switch (_vm->_map->getCell(19) - 1) { case 0: ++_wo[108]; break; @@ -1580,7 +1580,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(21)) { + switch (_vm->_map->getCell(21) - 1) { case 0: ++_wo[109]; break; @@ -1650,7 +1650,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(23)) { + switch (_vm->_map->getCell(23) - 1) { case 0: ++_wo[110]; break; @@ -1720,7 +1720,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(25)) { + switch (_vm->_map->getCell(25) - 1) { case 0: ++_wo[111]; break; @@ -1790,7 +1790,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(27)) { + switch (_vm->_map->getCell(27) - 1) { case 0: ++_wo[116]; break; @@ -1860,7 +1860,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(29)) { + switch (_vm->_map->getCell(29) - 1) { case 0: ++_wo[115]; break; @@ -1930,7 +1930,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(31)) { + switch (_vm->_map->getCell(31) - 1) { case 0: ++_wo[114]; break; @@ -1999,7 +1999,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(33)) { + switch (_vm->_map->getCell(33) - 1) { case 0: ++_wo[112]; break; @@ -2069,7 +2069,7 @@ void Interface::setMazeBits() { break; } - switch (_vm->_map->getCell(35)) { + switch (_vm->_map->getCell(35) - 1) { case 0: ++_wo[113]; break; diff --git a/engines/xeen/interface_map.cpp b/engines/xeen/interface_map.cpp index da9c2957c9..6780a5c2ee 100644 --- a/engines/xeen/interface_map.cpp +++ b/engines/xeen/interface_map.cpp @@ -166,7 +166,7 @@ OutdoorDrawList::OutdoorDrawList() : _skySprite(_data[1]), _groundSprite(_data[2 IndoorDrawList::IndoorDrawList() : _sky(_data[1]), _ground(_data[2]), _horizon(_data[28]), - _swl_0F1R(_data[ 46]), _swl_0F1L(_data[44]), _swl_1F1R(_data[134]), + _swl_0F1R(_data[146]), _swl_0F1L(_data[144]), _swl_1F1R(_data[134]), _swl_1F1L(_data[133]), _swl_2F2R(_data[110]), _swl_2F1R(_data[109]), _swl_2F1L(_data[108]), _swl_2F2L(_data[107]), _swl_3F1R(_data[ 78]), _swl_3F2R(_data[ 77]), _swl_3F3R(_data[ 76]), _swl_3F4R(_data[ 75]), @@ -377,6 +377,7 @@ InterfaceMap::InterfaceMap(XeenEngine *vm): _vm(vm) { void InterfaceMap::setIndoorsAttackingMonsters() { Combat &combat = *_vm->_combat; Map &map = *_vm->_map; + Common::Point mazePos = _vm->_party._mazePosition; Direction dir = _vm->_party._mazeDirection; const int INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 }; @@ -392,8 +393,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } // The following long sequence sets up monsters in the various positions - if (monster._position.x == SCREEN_POSITIONING_X[dir][2] && - monster._position.y == SCREEN_POSITIONING_Y[dir][2]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][2]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][2])) { monster._isAttacking = true; if (combat._attackMonsters[0] == -1) { combat._attackMonsters[0] = monsterIdx; @@ -407,8 +408,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][7] && - monster._position.y == SCREEN_POSITIONING_Y[dir][7]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][7]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][7])) { monster._isAttacking = true; if (!_wo[27]) { if (combat._attackMonsters[3] == -1) { @@ -424,8 +425,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][5] && - monster._position.y == SCREEN_POSITIONING_Y[dir][5]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][5]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][5])) { if (_wo[27] && _wo[25]) { } else if (_wo[27] && _wo[28]) { } else if (_wo[23] & _wo[25]) { @@ -440,8 +441,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][9] && - monster._position.y == SCREEN_POSITIONING_Y[dir][9]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][9]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][9])) { if (_wo[27] && _wo[26]) { } else if (_wo[27] && _wo[29]) { } else if (_wo[24] & _wo[26]) { @@ -456,8 +457,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][14] && - monster._position.y == SCREEN_POSITIONING_Y[dir][14]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][14]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][14])) { monster._isAttacking = true; if (!_wo[22] && !_wo[27]) { @@ -474,8 +475,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][12] && - monster._position.y == SCREEN_POSITIONING_Y[dir][12]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][12]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][12])) { if (_wo[27]) { } else if (_wo[22] && _wo[23]) { } else if (_wo[22] & _wo[20]) { @@ -493,8 +494,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][16] && - monster._position.y == SCREEN_POSITIONING_Y[dir][16]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][16]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][16])) { if (_wo[27]) { } else if (_wo[22] && _wo[24]) { } else if (_wo[22] & _wo[21]) { @@ -513,8 +514,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][27] && - monster._position.y == SCREEN_POSITIONING_Y[dir][27]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][27]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][27])) { if (!_wo[27] && !_wo[22] && _wo[15]) { monster._isAttacking = true; @@ -531,8 +532,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][25] && - monster._position.y == SCREEN_POSITIONING_Y[dir][25]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][25]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][25])) { if (_wo[27] || _wo[22]) { } else if (_wo[15] && _wo[17]) { } else if (_wo[15] && _wo[12]) { @@ -554,8 +555,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][23] && - monster._position.y == SCREEN_POSITIONING_Y[dir][23]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][23]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][23])) { if (_wo[27]) { } else if (_wo[22] && _wo[20]) { } else if (_wo[22] && _wo[23]) { @@ -572,8 +573,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][29] && - monster._position.y == SCREEN_POSITIONING_Y[dir][29]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][29]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][29])) { if (_wo[27] || _wo[22]) { } else if (_wo[15] && _wo[19]) { } else if (_wo[15] && _wo[14]) { @@ -595,8 +596,8 @@ void InterfaceMap::setIndoorsAttackingMonsters() { } } - if (monster._position.x == SCREEN_POSITIONING_X[dir][31] && - monster._position.y == SCREEN_POSITIONING_Y[dir][31]) { + if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][31]) && + monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][31])) { if (_wo[27]) { } else if (_wo[22] && _wo[21]) { } else if (_wo[22] && _wo[24]) { @@ -642,7 +643,7 @@ void InterfaceMap::setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster drawStruct._flags = MONSTER_EFFECT_FLAGS[monster._effect2][monster._effect3]; } -void InterfaceMap::setIndoorObjects() { +void InterfaceMap::setIndoorsObjects() { Common::Point mazePos = _vm->_party._mazePosition; Direction dir = _vm->_party._mazeDirection; Common::Point pt; diff --git a/engines/xeen/interface_map.h b/engines/xeen/interface_map.h index 8013228122..a77d29e091 100644 --- a/engines/xeen/interface_map.h +++ b/engines/xeen/interface_map.h @@ -107,7 +107,7 @@ public: void setIndoorsAttackingMonsters(); - void setIndoorObjects(); + void setIndoorsObjects(); void setIndoorsWallPics(); diff --git a/engines/xeen/map.cpp b/engines/xeen/map.cpp index a5a40c9029..6bd1ed09ba 100644 --- a/engines/xeen/map.cpp +++ b/engines/xeen/map.cpp @@ -950,7 +950,7 @@ void Map::load(int mapId) { if (mapId != 0) { // Load in the maze's data file Common::String datName = Common::String::format("maze%c%03d.dat", - (_vm->_party._mazeId >= 100) ? 'x' : '0', _vm->_party._mazeId); + (mapId >= 100) ? 'x' : '0', mapId); File datFile(datName); mazeData->synchronize(datFile); datFile.close(); @@ -1435,11 +1435,11 @@ int Map::getCell(int idx) { _currentWall._data = 0x8888; return 0x8888; } - - _mazeDataIndex = 0; - while (_mazeData[_mazeDataIndex]._mazeId != mapId) - ++_mazeDataIndex; } + + _mazeDataIndex = 0; + while (_mazeData[_mazeDataIndex]._mazeId != mapId) + ++_mazeDataIndex; } MazeWallLayers &wallLayers = _mazeData[_mazeDataIndex]._wallData[pt.y][pt.x]; |