[Scummvm-git-logs] scummvm master -> 4c777a9afcd402adda3335e46eac6ffcd24205f0

dreammaster dreammaster at scummvm.org
Fri Dec 8 04:13:44 CET 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4c777a9afc XEEN: Separation of scene indoors & outdoors drawing


Commit: 4c777a9afcd402adda3335e46eac6ffcd24205f0
    https://github.com/scummvm/scummvm/commit/4c777a9afcd402adda3335e46eac6ffcd24205f0
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-12-07T22:13:35-05:00

Commit Message:
XEEN: Separation of scene indoors & outdoors drawing

Changed paths:
    engines/xeen/interface.cpp
    engines/xeen/interface_scene.cpp
    engines/xeen/interface_scene.h


diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp
index 3579c91..c7ed3fd 100644
--- a/engines/xeen/interface.cpp
+++ b/engines/xeen/interface.cpp
@@ -1263,8 +1263,8 @@ void Interface::draw3d(bool updateFlag, bool skipDelay) {
 			combat.moveMonsters();
 	}
 
-	// Draw the map
-	drawMap();
+	// Draw the game scene
+	drawScene();
 
 	// Draw the minimap
 	drawMinimap();
diff --git a/engines/xeen/interface_scene.cpp b/engines/xeen/interface_scene.cpp
index 92e9338..37382b9 100644
--- a/engines/xeen/interface_scene.cpp
+++ b/engines/xeen/interface_scene.cpp
@@ -27,6 +27,11 @@
 
 namespace Xeen {
 
+const int COMBAT_POS_X[3][2] = { { 102, 134 },{ 36, 67 },{ 161, 161 } };
+const int INDOOR_INDEXES[3] = { 157, 151, 154 };
+const int OUTDOOR_INDEXES[3] = { 119, 113, 116 };
+const int COMBAT_OFFSET_X[4] = { 8, 6, 4, 2 };
+
 OutdoorDrawList::OutdoorDrawList() : _sky1(_data[0]), _sky2(_data[1]),
 	_groundSprite(_data[2]), _attackImgs1(&_data[124]), _attackImgs2(&_data[95]),
 	_attackImgs3(&_data[76]), _attackImgs4(&_data[53]), _groundTiles(&_data[3]) {
@@ -383,16 +388,10 @@ InterfaceScene::InterfaceScene(XeenEngine *vm): _vm(vm) {
 	_openDoor = false;
 }
 
-void InterfaceScene::drawMap() {
-	Combat &combat = *_vm->_combat;
+void InterfaceScene::drawScene() {
 	Map &map = *_vm->_map;
 	Scripts &scripts = *_vm->_scripts;
 
-	const int COMBAT_POS_X[3][2] = { { 102, 134 }, { 36, 67 }, { 161, 161 } };
-	const int INDOOR_INDEXES[3] = { 157, 151, 154 };
-	const int OUTDOOR_INDEXES[3] = { 119, 113, 116 };
-	const int COMBAT_OFFSET_X[4] = { 8, 6, 4, 2 };
-
 	MazeObject &objObject = map._mobData._objects[_objNumber];
 	Direction partyDirection = _vm->_party->_mazeDirection;
 	int objNum = _objNumber - 1;
@@ -421,272 +420,281 @@ void InterfaceScene::drawMap() {
 		mazeObject._flipped = animEntry._flipped._flags[directionIndex];
 	}
 
-	if (map._isOutdoors) {
-		// Outdoors drawing
-		for (int idx = 0; idx < 44; ++idx)
-			_outdoorList[Res.OUTDOOR_DRAWSTRCT_INDEXES[idx]]._frame = -1;
-
-		if (combat._monstersAttacking) {
-			for (int idx = 0; idx < 8; ++idx) {
-				if (_outdoorList._attackImgs4[idx]._sprites)
-					_outdoorList._attackImgs4[idx]._frame = 0;
-				else if (_outdoorList._attackImgs3[idx]._sprites)
-					_outdoorList._attackImgs3[idx]._frame = 1;
-				else if (_outdoorList._attackImgs2[idx]._sprites)
-					_outdoorList._attackImgs2[idx]._frame = 2;
-				else if (_outdoorList._attackImgs1[idx]._sprites)
-					_outdoorList._attackImgs1[idx]._frame = 0;
-			}
-		} else if (_charsShooting) {
-			for (int idx = 0; idx < 8; ++idx) {
-				if (_outdoorList._attackImgs1[idx]._sprites)
-					_outdoorList._attackImgs1[idx]._frame = 0;
-				else if (_outdoorList._attackImgs2[idx]._sprites)
-					_outdoorList._attackImgs2[idx]._frame = 1;
-				else if (_outdoorList._attackImgs3[idx]._sprites)
-					_outdoorList._attackImgs3[idx]._frame = 2;
-				else if (_outdoorList._attackImgs4[idx]._sprites)
-					_outdoorList._attackImgs1[idx]._frame = 0;
-			}
-		}
+	if (map._isOutdoors)
+		drawOutdoorsScene();
+	else
+		drawIndoorsScene();
 
-		_isAnimReset = false;
-		int attackMon2 = combat._attackMonsters[2];
-
-		for (int idx = 0; idx < 3; ++idx) {
-			DrawStruct &ds1 = _outdoorList[OUTDOOR_INDEXES[idx] + 1];
-			DrawStruct &ds2 = _outdoorList[OUTDOOR_INDEXES[idx]];
-			ds1._sprites = nullptr;
-			ds2._sprites = nullptr;
-
-			if (combat._charsArray1[idx]) {
-				int vIndex = combat._attackMonsters[1] && !attackMon2 ? 1 : 0;
-				combat._charsArray1[idx]--;
-
-				if (combat._monPow[idx]) {
-					ds2._x = COMBAT_POS_X[idx][vIndex];
-					ds2._frame = 0;
-					ds2._scale = combat._monsterScale[idx];
-
-					if (ds2._scale == 0x8000) {
-						ds2._x /= 3;
-						ds2._y = 60;
-					} else {
-						ds2._y = 73;
-					}
+	animate3d();
+}
 
-					ds2._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
-					ds2._sprites = &_charPowSprites;
-				}
+void InterfaceScene::drawOutdoorsScene() {
+	Combat &combat = *_vm->_combat;
+	Map &map = *_vm->_map;
+
+	for (int idx = 0; idx < 44; ++idx)
+		_outdoorList[Res.OUTDOOR_DRAWSTRCT_INDEXES[idx]]._frame = -1;
+
+	if (combat._monstersAttacking) {
+		for (int idx = 0; idx < 8; ++idx) {
+			if (_outdoorList._attackImgs4[idx]._sprites)
+				_outdoorList._attackImgs4[idx]._frame = 0;
+			else if (_outdoorList._attackImgs3[idx]._sprites)
+				_outdoorList._attackImgs3[idx]._frame = 1;
+			else if (_outdoorList._attackImgs2[idx]._sprites)
+				_outdoorList._attackImgs2[idx]._frame = 2;
+			else if (_outdoorList._attackImgs1[idx]._sprites)
+				_outdoorList._attackImgs1[idx]._frame = 0;
+		}
+	} else if (_charsShooting) {
+		for (int idx = 0; idx < 8; ++idx) {
+			if (_outdoorList._attackImgs1[idx]._sprites)
+				_outdoorList._attackImgs1[idx]._frame = 0;
+			else if (_outdoorList._attackImgs2[idx]._sprites)
+				_outdoorList._attackImgs2[idx]._frame = 1;
+			else if (_outdoorList._attackImgs3[idx]._sprites)
+				_outdoorList._attackImgs3[idx]._frame = 2;
+			else if (_outdoorList._attackImgs4[idx]._sprites)
+				_outdoorList._attackImgs1[idx]._frame = 0;
+		}
+	}
 
-				if (combat._elemPow[idx]) {
-					ds1._x = COMBAT_POS_X[idx][vIndex] + COMBAT_OFFSET_X[idx];
-					ds1._frame = combat._elemPow[idx];
-					ds1._scale = combat._elemScale[idx];
+	_isAnimReset = false;
+	int attackMon2 = combat._attackMonsters[2];
 
-					if (ds1._scale == 0x8000)
-						ds1._x /= 3;
-					ds1._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
-					ds1._sprites = &_charPowSprites;
+	for (int idx = 0; idx < 3; ++idx) {
+		DrawStruct &ds1 = _outdoorList[OUTDOOR_INDEXES[idx] + 1];
+		DrawStruct &ds2 = _outdoorList[OUTDOOR_INDEXES[idx]];
+		ds1._sprites = nullptr;
+		ds2._sprites = nullptr;
+
+		if (combat._charsArray1[idx]) {
+			int vIndex = combat._attackMonsters[1] && !attackMon2 ? 1 : 0;
+			combat._charsArray1[idx]--;
+
+			if (combat._monPow[idx]) {
+				ds2._x = COMBAT_POS_X[idx][vIndex];
+				ds2._frame = 0;
+				ds2._scale = combat._monsterScale[idx];
+
+				if (ds2._scale == 0x8000) {
+					ds2._x /= 3;
+					ds2._y = 60;
 				}
+				else {
+					ds2._y = 73;
+				}
+
+				ds2._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
+				ds2._sprites = &_charPowSprites;
 			}
-		}
 
-		setOutdoorsMonsters();
-		setOutdoorsObjects();
-
-		_outdoorList[123]._sprites = nullptr;
-		_outdoorList[122]._sprites = nullptr;
-		_outdoorList[121]._sprites = nullptr;
-
-		int monsterIndex;
-		if (combat._attackMonsters[0] != -1 && map._mobData._monsters[combat._attackMonsters[0]]._frame >= 8) {
-			_outdoorList[121] = _outdoorList[118];
-			_outdoorList[122] = _outdoorList[119];
-			_outdoorList[123] = _outdoorList[120];
-			_outdoorList[118]._sprites = nullptr;
-			_outdoorList[119]._sprites = nullptr;
-			_outdoorList[120]._sprites = nullptr;
-			monsterIndex = 1;
-		} else if (combat._attackMonsters[1] != -1 && map._mobData._monsters[combat._attackMonsters[1]]._frame >= 8) {
-			_outdoorList[121] = _outdoorList[112];
-			_outdoorList[122] = _outdoorList[113];
-			_outdoorList[123] = _outdoorList[114];
-			_outdoorList[112]._sprites = nullptr;
-			_outdoorList[113]._sprites = nullptr;
-			_outdoorList[124]._sprites = nullptr;
-			monsterIndex = 2;
-		} else if (combat._attackMonsters[2] != -1 && map._mobData._monsters[combat._attackMonsters[2]]._frame >= 8) {
-			_outdoorList[121] = _outdoorList[115];
-			_outdoorList[122] = _outdoorList[116];
-			_outdoorList[123] = _outdoorList[117];
-			_outdoorList[115]._sprites = nullptr;
-			_outdoorList[116]._sprites = nullptr;
-			_outdoorList[117]._sprites = nullptr;
-			monsterIndex = 3;
-		} else {
-			monsterIndex = 0;
-		}
+			if (combat._elemPow[idx]) {
+				ds1._x = COMBAT_POS_X[idx][vIndex] + COMBAT_OFFSET_X[idx];
+				ds1._frame = combat._elemPow[idx];
+				ds1._scale = combat._elemScale[idx];
 
-		drawOutdoors();
-
-		switch (monsterIndex) {
-		case 1:
-			_outdoorList[118] = _outdoorList[121];
-			_outdoorList[119] = _outdoorList[122];
-			_outdoorList[120] = _outdoorList[123];
-			break;
-		case 2:
-			_outdoorList[112] = _outdoorList[121];
-			_outdoorList[113] = _outdoorList[122];
-			_outdoorList[114] = _outdoorList[123];
-			break;
-		case 3:
-			_outdoorList[115] = _outdoorList[121];
-			_outdoorList[116] = _outdoorList[122];
-			_outdoorList[117] = _outdoorList[123];
-			break;
-		default:
-			break;
+				if (ds1._scale == 0x8000)
+					ds1._x /= 3;
+				ds1._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
+				ds1._sprites = &_charPowSprites;
+			}
 		}
+	}
+
+	setOutdoorsMonsters();
+	setOutdoorsObjects();
+
+	_outdoorList[123]._sprites = nullptr;
+	_outdoorList[122]._sprites = nullptr;
+	_outdoorList[121]._sprites = nullptr;
+
+	int monsterIndex;
+	if (combat._attackMonsters[0] != -1 && map._mobData._monsters[combat._attackMonsters[0]]._frame >= 8) {
+		_outdoorList[121] = _outdoorList[118];
+		_outdoorList[122] = _outdoorList[119];
+		_outdoorList[123] = _outdoorList[120];
+		_outdoorList[118]._sprites = nullptr;
+		_outdoorList[119]._sprites = nullptr;
+		_outdoorList[120]._sprites = nullptr;
+		monsterIndex = 1;
+	} else if (combat._attackMonsters[1] != -1 && map._mobData._monsters[combat._attackMonsters[1]]._frame >= 8) {
+		_outdoorList[121] = _outdoorList[112];
+		_outdoorList[122] = _outdoorList[113];
+		_outdoorList[123] = _outdoorList[114];
+		_outdoorList[112]._sprites = nullptr;
+		_outdoorList[113]._sprites = nullptr;
+		_outdoorList[124]._sprites = nullptr;
+		monsterIndex = 2;
+	} else if (combat._attackMonsters[2] != -1 && map._mobData._monsters[combat._attackMonsters[2]]._frame >= 8) {
+		_outdoorList[121] = _outdoorList[115];
+		_outdoorList[122] = _outdoorList[116];
+		_outdoorList[123] = _outdoorList[117];
+		_outdoorList[115]._sprites = nullptr;
+		_outdoorList[116]._sprites = nullptr;
+		_outdoorList[117]._sprites = nullptr;
+		monsterIndex = 3;
 	} else {
-		// Indoor drawing
-		// Default all the parts of draw struct not to be drawn by default
-		for (int idx = 3; idx < _indoorList.size(); ++idx)
-			_indoorList[idx]._frame = -1;
-
-		if (combat._monstersAttacking) {
-			for (int idx = 0; idx < 96; ++idx) {
-				if (_indoorList[79 + idx]._sprites != nullptr) {
-					_indoorList[79 + idx]._frame = 0;
-				}
-				else if (_indoorList[111 + idx]._sprites != nullptr) {
-					_indoorList[111 + idx]._frame = 1;
-				}
-				else if (_indoorList[135 + idx]._sprites != nullptr) {
-					_indoorList[135 + idx]._frame = 2;
-				}
-				else if (_indoorList[162 + idx]._sprites != nullptr) {
-					_indoorList[162 + idx]._frame = 0;
-				}
+		monsterIndex = 0;
+	}
+
+	drawOutdoors();
+
+	switch (monsterIndex) {
+	case 1:
+		_outdoorList[118] = _outdoorList[121];
+		_outdoorList[119] = _outdoorList[122];
+		_outdoorList[120] = _outdoorList[123];
+		break;
+	case 2:
+		_outdoorList[112] = _outdoorList[121];
+		_outdoorList[113] = _outdoorList[122];
+		_outdoorList[114] = _outdoorList[123];
+		break;
+	case 3:
+		_outdoorList[115] = _outdoorList[121];
+		_outdoorList[116] = _outdoorList[122];
+		_outdoorList[117] = _outdoorList[123];
+		break;
+	default:
+		break;
+	}
+}
+
+void InterfaceScene::drawIndoorsScene() {
+	Combat &combat = *_vm->_combat;
+	Map &map = *_vm->_map;
+
+	// Default all the parts of draw struct not to be drawn by default
+	for (int idx = 3; idx < _indoorList.size(); ++idx)
+		_indoorList[idx]._frame = -1;
+
+	if (combat._monstersAttacking) {
+		for (int idx = 0; idx < 96; ++idx) {
+			if (_indoorList[79 + idx]._sprites != nullptr) {
+				_indoorList[79 + idx]._frame = 0;
+			} else if (_indoorList[111 + idx]._sprites != nullptr) {
+				_indoorList[111 + idx]._frame = 1;
+			} else if (_indoorList[135 + idx]._sprites != nullptr) {
+				_indoorList[135 + idx]._frame = 2;
+			} else if (_indoorList[162 + idx]._sprites != nullptr) {
+				_indoorList[162 + idx]._frame = 0;
 			}
-		} else if (_charsShooting) {
-			for (int idx = 0; idx < 8; ++idx) {
-				if (_indoorList._attackImgs1[idx]._sprites != nullptr) {
-					_indoorList._attackImgs1[idx]._frame = 0;
-				} else if (_indoorList._attackImgs2[idx]._sprites != nullptr) {
-					_indoorList._attackImgs2[idx]._frame = 1;
-				} else if (_indoorList._attackImgs3[idx]._sprites != nullptr) {
-					_indoorList._attackImgs3[idx]._frame = 2;
-				} else if (_indoorList._attackImgs4[idx]._sprites != nullptr) {
-					_indoorList._attackImgs4[idx]._frame = 0;
-				}
+		}
+	} else if (_charsShooting) {
+		for (int idx = 0; idx < 8; ++idx) {
+			if (_indoorList._attackImgs1[idx]._sprites != nullptr) {
+				_indoorList._attackImgs1[idx]._frame = 0;
+			} else if (_indoorList._attackImgs2[idx]._sprites != nullptr) {
+				_indoorList._attackImgs2[idx]._frame = 1;
+			} else if (_indoorList._attackImgs3[idx]._sprites != nullptr) {
+				_indoorList._attackImgs3[idx]._frame = 2;
+			} else if (_indoorList._attackImgs4[idx]._sprites != nullptr) {
+				_indoorList._attackImgs4[idx]._frame = 0;
 			}
 		}
+	}
 
-		setMazeBits();
-		_isAnimReset = false;
-
-		// Code in the original that's not being used
-		//MazeObject &objObject = map._mobData._objects[_objNumber - 1];
-
-		for (int idx = 0; idx < 3; ++idx) {
-			DrawStruct &ds1 = _indoorList[INDOOR_INDEXES[idx]];
-			DrawStruct &ds2 = _indoorList[INDOOR_INDEXES[idx] + 1];
-			ds1._sprites = nullptr;
-			ds2._sprites = nullptr;
-
-			if (combat._charsArray1[idx]) {
-				int posIndex = combat._attackMonsters[1] && !combat._attackMonsters[2] ? 1 : 0;
-				--combat._charsArray1[idx];
-
-				if (combat._monPow[idx]) {
-					ds1._x = COMBAT_POS_X[idx][posIndex];
-					ds1._frame = 0;
-					ds1._scale = combat._monsterScale[idx];
-					if (ds1._scale == 0x8000) {
-						ds1._x /= 3;
-						ds1._y = 60;
-					} else {
-						ds1._y = 73;
-					}
+	setMazeBits();
+	_isAnimReset = false;
 
-					ds1._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
-					ds1._sprites = &_charPowSprites;
-				}
+	// Code in the original that's not being used
+	//MazeObject &objObject = map._mobData._objects[_objNumber - 1];
 
-				if (combat._elemPow[idx]) {
-					ds2._x = COMBAT_POS_X[idx][posIndex] + COMBAT_OFFSET_X[idx];
-					ds2._frame = combat._elemPow[idx];
-					ds2._scale = combat._elemScale[idx];
-					if (ds2._scale == 0x8000)
-						ds2._x /= 3;
-					ds2._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
-					ds2._sprites = &_charPowSprites;
+	for (int idx = 0; idx < 3; ++idx) {
+		DrawStruct &ds1 = _indoorList[INDOOR_INDEXES[idx]];
+		DrawStruct &ds2 = _indoorList[INDOOR_INDEXES[idx] + 1];
+		ds1._sprites = nullptr;
+		ds2._sprites = nullptr;
+
+		if (combat._charsArray1[idx]) {
+			int posIndex = combat._attackMonsters[1] && !combat._attackMonsters[2] ? 1 : 0;
+			--combat._charsArray1[idx];
+
+			if (combat._monPow[idx]) {
+				ds1._x = COMBAT_POS_X[idx][posIndex];
+				ds1._frame = 0;
+				ds1._scale = combat._monsterScale[idx];
+				if (ds1._scale == 0x8000) {
+					ds1._x /= 3;
+					ds1._y = 60;
+				} else {
+					ds1._y = 73;
 				}
+
+				ds1._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
+				ds1._sprites = &_charPowSprites;
 			}
-		}
 
-		setIndoorsMonsters();
-		setIndoorsObjects();
-		setIndoorsWallPics();
-
-		_indoorList[161]._sprites = nullptr;
-		_indoorList[160]._sprites = nullptr;
-		_indoorList[159]._sprites = nullptr;
-
-		// Handle attacking monsters
-		int monsterIndex = 0;
-		if (combat._attackMonsters[0] != -1 && map._mobData._monsters[combat._attackMonsters[0]]._frame >= 8) {
-			_indoorList[159] = _indoorList[156];
-			_indoorList[160] = _indoorList[157];
-			_indoorList[161] = _indoorList[158];
-			_indoorList[158]._sprites = nullptr;
-			_indoorList[156]._sprites = nullptr;
-			_indoorList[157]._sprites = nullptr;
-			monsterIndex = 1;
-		} else if (combat._attackMonsters[1] != -1 && map._mobData._monsters[combat._attackMonsters[1]]._frame >= 8) {
-			_indoorList[159] = _indoorList[150];
-			_indoorList[160] = _indoorList[151];
-			_indoorList[161] = _indoorList[152];
-			_indoorList[152]._sprites = nullptr;
-			_indoorList[151]._sprites = nullptr;
-			_indoorList[150]._sprites = nullptr;
-			monsterIndex = 2;
-		} else if (combat._attackMonsters[2] != -1 && map._mobData._monsters[combat._attackMonsters[2]]._frame >= 8) {
-			_indoorList[159] = _indoorList[153];
-			_indoorList[160] = _indoorList[154];
-			_indoorList[161] = _indoorList[155];
-			_indoorList[153]._sprites = nullptr;
-			_indoorList[154]._sprites = nullptr;
-			_indoorList[155]._sprites = nullptr;
-			monsterIndex = 3;
+			if (combat._elemPow[idx]) {
+				ds2._x = COMBAT_POS_X[idx][posIndex] + COMBAT_OFFSET_X[idx];
+				ds2._frame = combat._elemPow[idx];
+				ds2._scale = combat._elemScale[idx];
+				if (ds2._scale == 0x8000)
+					ds2._x /= 3;
+				ds2._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED;
+				ds2._sprites = &_charPowSprites;
+			}
 		}
+	}
 
-		drawIndoors();
-
-		switch (monsterIndex) {
-		case 1:
-			_indoorList[156] = _indoorList[159];
-			_indoorList[157] = _indoorList[160];
-			_indoorList[158] = _indoorList[161];
-			break;
-		case 2:
-			_indoorList[150] = _indoorList[159];
-			_indoorList[151] = _indoorList[160];
-			_indoorList[152] = _indoorList[161];
-			break;
-		case 3:
-			_indoorList[153] = _indoorList[159];
-			_indoorList[154] = _indoorList[160];
-			_indoorList[155] = _indoorList[161];
-			break;
-		default:
-			break;
-		}
+	setIndoorsMonsters();
+	setIndoorsObjects();
+	setIndoorsWallPics();
+
+	_indoorList[161]._sprites = nullptr;
+	_indoorList[160]._sprites = nullptr;
+	_indoorList[159]._sprites = nullptr;
+
+	// Handle attacking monsters
+	int monsterIndex = 0;
+	if (combat._attackMonsters[0] != -1 && map._mobData._monsters[combat._attackMonsters[0]]._frame >= 8) {
+		_indoorList[159] = _indoorList[156];
+		_indoorList[160] = _indoorList[157];
+		_indoorList[161] = _indoorList[158];
+		_indoorList[158]._sprites = nullptr;
+		_indoorList[156]._sprites = nullptr;
+		_indoorList[157]._sprites = nullptr;
+		monsterIndex = 1;
+	} else if (combat._attackMonsters[1] != -1 && map._mobData._monsters[combat._attackMonsters[1]]._frame >= 8) {
+		_indoorList[159] = _indoorList[150];
+		_indoorList[160] = _indoorList[151];
+		_indoorList[161] = _indoorList[152];
+		_indoorList[152]._sprites = nullptr;
+		_indoorList[151]._sprites = nullptr;
+		_indoorList[150]._sprites = nullptr;
+		monsterIndex = 2;
+	} else if (combat._attackMonsters[2] != -1 && map._mobData._monsters[combat._attackMonsters[2]]._frame >= 8) {
+		_indoorList[159] = _indoorList[153];
+		_indoorList[160] = _indoorList[154];
+		_indoorList[161] = _indoorList[155];
+		_indoorList[153]._sprites = nullptr;
+		_indoorList[154]._sprites = nullptr;
+		_indoorList[155]._sprites = nullptr;
+		monsterIndex = 3;
 	}
 
-	animate3d();
+	drawIndoors();
+
+	switch (monsterIndex) {
+	case 1:
+		_indoorList[156] = _indoorList[159];
+		_indoorList[157] = _indoorList[160];
+		_indoorList[158] = _indoorList[161];
+		break;
+	case 2:
+		_indoorList[150] = _indoorList[159];
+		_indoorList[151] = _indoorList[160];
+		_indoorList[152] = _indoorList[161];
+		break;
+	case 3:
+		_indoorList[153] = _indoorList[159];
+		_indoorList[154] = _indoorList[160];
+		_indoorList[155] = _indoorList[161];
+		break;
+	default:
+		break;
+	}
 }
 
 void InterfaceScene::animate3d() {
diff --git a/engines/xeen/interface_scene.h b/engines/xeen/interface_scene.h
index 3b5e452..0c18152 100644
--- a/engines/xeen/interface_scene.h
+++ b/engines/xeen/interface_scene.h
@@ -101,6 +101,16 @@ private:
 	 */
 	void setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster,
 		SpriteResource *sprites, int frame, int defaultY);
+
+	/**
+	 * Draws outdoor scenes
+	 */
+	void drawOutdoorsScene();
+
+	/**
+	 * Draws indoor scenes
+	 */
+	void drawIndoorsScene();
 protected:
 	int8 _wp[20];
 	byte _wo[308];
@@ -119,7 +129,10 @@ protected:
 	 */
 	void animate3d();
 
-	void drawMap();
+	/**
+	 * Draws the game scene
+	 */
+	void drawScene();
 public:
 	OutdoorDrawList _outdoorList;
 	IndoorDrawList _indoorList;





More information about the Scummvm-git-logs mailing list