From b907ccce96dff37cb61f7149e5d483dd00e540e9 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 6 Dec 2017 21:50:30 -0500 Subject: XEEN: Rename InterfaceMap class to InterfaceScene This is avoid confusion with the minimap and map dialog classes --- engines/xeen/interface.cpp | 3 +- engines/xeen/interface.h | 4 +- engines/xeen/interface_map.cpp | 4449 ------------------------------------ engines/xeen/interface_map.h | 175 -- engines/xeen/interface_minimap.cpp | 2 +- engines/xeen/interface_scene.cpp | 4449 ++++++++++++++++++++++++++++++++++++ engines/xeen/interface_scene.h | 175 ++ engines/xeen/module.mk | 2 +- 8 files changed, 4630 insertions(+), 4629 deletions(-) delete mode 100644 engines/xeen/interface_map.cpp delete mode 100644 engines/xeen/interface_map.h create mode 100644 engines/xeen/interface_scene.cpp create mode 100644 engines/xeen/interface_scene.h diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp index b3df1f68c4..3579c915b6 100644 --- a/engines/xeen/interface.cpp +++ b/engines/xeen/interface.cpp @@ -128,9 +128,10 @@ void PartyDrawer::unhighlightChar() { void PartyDrawer::resetHighlight() { _hiliteChar = HILIGHT_CHAR_NONE; } + /*------------------------------------------------------------------------*/ -Interface::Interface(XeenEngine *vm) : ButtonContainer(vm), InterfaceMap(vm), +Interface::Interface(XeenEngine *vm) : ButtonContainer(vm), InterfaceScene(vm), PartyDrawer(vm), _vm(vm) { _buttonsLoaded = false; _intrIndex1 = 0; diff --git a/engines/xeen/interface.h b/engines/xeen/interface.h index d28b24987f..35169288d7 100644 --- a/engines/xeen/interface.h +++ b/engines/xeen/interface.h @@ -25,8 +25,8 @@ #include "common/scummsys.h" #include "xeen/dialogs.h" -#include "xeen/interface_map.h" #include "xeen/interface_minimap.h" +#include "xeen/interface_scene.h" #include "xeen/party.h" #include "xeen/window.h" @@ -62,7 +62,7 @@ public: /** * Implements the main in-game interface */ -class Interface: public ButtonContainer, public InterfaceMap, +class Interface: public ButtonContainer, public InterfaceScene, public InterfaceMinimap, public PartyDrawer { private: XeenEngine *_vm; diff --git a/engines/xeen/interface_map.cpp b/engines/xeen/interface_map.cpp deleted file mode 100644 index 21064b309f..0000000000 --- a/engines/xeen/interface_map.cpp +++ /dev/null @@ -1,4449 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "xeen/interface.h" -#include "xeen/dialogs_error.h" -#include "xeen/resources.h" -#include "xeen/xeen.h" - -namespace Xeen { - -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]) { - _data[0] = DrawStruct(0, 8, 8); - _data[1] = DrawStruct(1, 8, 25); - _data[2] = DrawStruct(0, 8, 67); - _data[3] = DrawStruct(0, 8, 67); - _data[4] = DrawStruct(0, 38, 67); - _data[5] = DrawStruct(0, 84, 67); - _data[6] = DrawStruct(0, 134, 67); - _data[7] = DrawStruct(0, 117, 67); - _data[8] = DrawStruct(0, 117, 67); - _data[9] = DrawStruct(0, 103, 67); - _data[10] = DrawStruct(0, 8, 73); - _data[11] = DrawStruct(0, 8, 73); - _data[12] = DrawStruct(0, 30, 73); - _data[13] = DrawStruct(0, 181, 73); - _data[14] = DrawStruct(0, 154, 73); - _data[15] = DrawStruct(0, 129, 73); - _data[16] = DrawStruct(0, 87, 73); - _data[17] = DrawStruct(0, 8, 81); - _data[18] = DrawStruct(0, 8, 81); - _data[19] = DrawStruct(0, 202, 81); - _data[20] = DrawStruct(0, 145, 81); - _data[21] = DrawStruct(0, 63, 81); - _data[22] = DrawStruct(0, 8, 93); - _data[23] = DrawStruct(0, 169, 93); - _data[24] = DrawStruct(0, 31, 93); - _data[25] = DrawStruct(0, 8, 109); - _data[26] = DrawStruct(0, 201, 109); - _data[27] = DrawStruct(0, 8, 109); - _data[28] = DrawStruct(1, -64, 61, 14, SPRFLAG_SCENE_CLIPPED); - _data[29] = DrawStruct(1, -40, 61, 14, 0); - _data[30] = DrawStruct(1, -16, 61, 14, 0); - _data[31] = DrawStruct(1, 8, 61, 14, 0); - _data[32] = DrawStruct(1, 128, 61, 14, SPRFLAG_HORIZ_FLIPPED | SPRFLAG_SCENE_CLIPPED); - _data[33] = DrawStruct(1, 104, 61, 14, SPRFLAG_HORIZ_FLIPPED); - _data[34] = DrawStruct(1, 80, 61, 14, SPRFLAG_HORIZ_FLIPPED); - _data[35] = DrawStruct(1, 56, 61, 14, SPRFLAG_HORIZ_FLIPPED); - _data[36] = DrawStruct(1, 32, 61, 14, 0); - _data[37] = DrawStruct(0, -9, 61, 14, 0); - _data[38] = DrawStruct(0, -58, 61, 14, 0); - _data[39] = DrawStruct(0, 40, 61, 14, 0); - _data[40] = DrawStruct(0, -82, 61, 14, 0); - _data[41] = DrawStruct(0, 64, 61, 14, 0); - _data[42] = DrawStruct(0, -41, 61, 14, 0); - _data[43] = DrawStruct(0, -26, 61, 14, 0); - _data[44] = DrawStruct(0, -34, 61, 14, 0); - _data[45] = DrawStruct(0, -16, 61, 14, 0); - _data[46] = DrawStruct(0, 23, 61, 14, 0); - _data[47] = DrawStruct(0, 16, 61, 14, 0); - _data[48] = DrawStruct(0, -58, 61, 14, 0); - _data[49] = DrawStruct(0, 40, 61, 14, 0); - _data[50] = DrawStruct(0, -17, 61, 14, 0); - _data[51] = DrawStruct(0, -1, 58, 14, 0); - _data[52] = DrawStruct(0, -9, 58, 14, 0); - _data[53] = DrawStruct(0, 72, 58, 12, 0); - _data[54] = DrawStruct(0, 72, 58, 12, SPRFLAG_HORIZ_FLIPPED); - _data[55] = DrawStruct(0, 69, 63, 12, 0); - _data[56] = DrawStruct(0, 75, 63, 12, SPRFLAG_HORIZ_FLIPPED); - _data[57] = DrawStruct(0, 73, 53, 12, 0); - _data[58] = DrawStruct(0, 71, 53, 12, SPRFLAG_HORIZ_FLIPPED); - _data[59] = DrawStruct(0, 80, 57, 12, 0); - _data[60] = DrawStruct(0, 64, 57, 12, SPRFLAG_HORIZ_FLIPPED); - _data[61] = DrawStruct(2, -11, 54, 8, 0); - _data[62] = DrawStruct(1, -21, 54, 11, 0); - _data[63] = DrawStruct(2, 165, 54, 8, SPRFLAG_HORIZ_FLIPPED); - _data[64] = DrawStruct(1, 86, 54, 11, SPRFLAG_HORIZ_FLIPPED); - _data[65] = DrawStruct(1, 33, 54, 11, 0); - _data[66] = DrawStruct(0, -8, 54, 12, 0); - _data[67] = DrawStruct(0, -73, 54, 12, 0); - _data[68] = DrawStruct(0, 57, 54, 12, 0); - _data[69] = DrawStruct(0, -65, 54, 12, 0); - _data[70] = DrawStruct(0, -81, 54, 12, 0); - _data[71] = DrawStruct(0, 49, 54, 12, 0); - _data[72] = DrawStruct(0, 65, 54, 12, 0); - _data[73] = DrawStruct(0, -24, 54, 12, 0); - _data[74] = DrawStruct(0, 9, 50, 12, 0); - _data[75] = DrawStruct(0, -8, 50, 12, 0); - _data[76] = DrawStruct(0, 72, 53, 8, 0); - _data[77] = DrawStruct(0, 72, 53, 8, SPRFLAG_HORIZ_FLIPPED); - _data[78] = DrawStruct(0, 77, 58, 8, 0); - _data[79] = DrawStruct(0, 67, 58, 8, SPRFLAG_HORIZ_FLIPPED); - _data[80] = DrawStruct(0, 81, 47, 8, 0); - _data[81] = DrawStruct(0, 63, 47, 8, SPRFLAG_HORIZ_FLIPPED); - _data[82] = DrawStruct(0, 94, 52, 8, 0); - _data[83] = DrawStruct(0, 50, 52, 8, SPRFLAG_HORIZ_FLIPPED); - _data[84] = DrawStruct(2, 8, 40); - _data[85] = DrawStruct(2, 146, 40, 0, SPRFLAG_HORIZ_FLIPPED); - _data[86] = DrawStruct(1, 32, 40, 6, 0); - _data[87] = DrawStruct(0, -7, 30, 7, 0); - _data[88] = DrawStruct(0, -112, 30, 7, SPRFLAG_SCENE_CLIPPED); - _data[89] = DrawStruct(0, 98, 30, 7, SPRFLAG_SCENE_CLIPPED); - _data[90] = DrawStruct(0, -112, 30, 8, SPRFLAG_SCENE_CLIPPED); - _data[91] = DrawStruct(0, 98, 30, 8, SPRFLAG_SCENE_CLIPPED); - _data[92] = DrawStruct(0, -38, 30, 8, 0); - _data[93] = DrawStruct(0, 25, 30, 8, 0); - _data[94] = DrawStruct(0, -7, 30, 8, 0); - _data[95] = DrawStruct(0, 72, 48, 4, 0); - _data[96] = DrawStruct(0, 72, 48, 4, SPRFLAG_HORIZ_FLIPPED); - _data[97] = DrawStruct(0, 85, 53, 4, 0); - _data[98] = DrawStruct(0, 59, 53, 4, SPRFLAG_HORIZ_FLIPPED); - _data[99] = DrawStruct(0, 89, 41, 4, 0); - _data[100] = DrawStruct(0, 55, 41, 4, SPRFLAG_HORIZ_FLIPPED); - _data[101] = DrawStruct(0, 106, 47, 4, 0); - _data[102] = DrawStruct(0, 38, 47, 4, SPRFLAG_HORIZ_FLIPPED); - _data[103] = DrawStruct(0, 8, 24); - _data[104] = DrawStruct(0, 169, 24, 0, SPRFLAG_HORIZ_FLIPPED); - _data[105] = DrawStruct(1, 32, 24); - _data[106] = DrawStruct(0, -23, 40, 0, SPRFLAG_SCENE_CLIPPED); - _data[107] = DrawStruct(0, 200, 40, 0, SPRFLAG_HORIZ_FLIPPED | SPRFLAG_SCENE_CLIPPED); - _data[108] = DrawStruct(0, 8, 47); - _data[109] = DrawStruct(0, 169, 47, 0, SPRFLAG_HORIZ_FLIPPED); - _data[110] = DrawStruct(1, -56, -4, 0x8000, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[111] = DrawStruct(0, -5, 2, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[112] = DrawStruct(0, -67, 2, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[113] = DrawStruct(0, 44, 73); - _data[114] = DrawStruct(0, 44, 73); - _data[115] = DrawStruct(0, 58, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[116] = DrawStruct(0, 169, 73); - _data[117] = DrawStruct(0, 169, 73); - _data[118] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[119] = DrawStruct(0, 110, 73); - _data[120] = DrawStruct(0, 110, 73); - _data[121] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[122] = DrawStruct(0, 110, 73); - _data[123] = DrawStruct(0, 110, 73); - _data[124] = DrawStruct(0, 72, 43); - _data[125] = DrawStruct(0, 72, 43, 0, SPRFLAG_HORIZ_FLIPPED); - _data[126] = DrawStruct(0, 93, 48); - _data[127] = DrawStruct(0, 51, 48, 0, SPRFLAG_HORIZ_FLIPPED); - _data[128] = DrawStruct(0, 97, 36); - _data[129] = DrawStruct(0, 47, 36, 0, SPRFLAG_HORIZ_FLIPPED); - _data[130] = DrawStruct(0, 118, 42); - _data[131] = DrawStruct(0, 26, 42, 0, SPRFLAG_HORIZ_FLIPPED); -} - -/*------------------------------------------------------------------------*/ - -IndoorDrawList::IndoorDrawList() : - _sky1(_data[0]), _sky2(_data[1]), _ground(_data[2]), _horizon(_data[28]), - _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]), - _swl_3F1L(_data[ 74]), _swl_3F2L(_data[ 73]), _swl_3F3L(_data[ 72]), - _swl_3F4L(_data[ 71]), _swl_4F4R(_data[ 33]), _swl_4F3R(_data[ 34]), - _swl_4F2R(_data[ 35]), _swl_4F1R(_data[ 36]), _swl_4F1L(_data[ 32]), - _swl_4F2L(_data[ 31]), _swl_4F3L(_data[ 30]), _swl_4F4L(_data[ 29]), - _fwl_4F4R(_data[ 45]), _fwl_4F3R(_data[ 44]), _fwl_4F2R(_data[ 43]), - _fwl_4F1R(_data[ 42]), _fwl_4F( _data[ 41]), _fwl_4F1L(_data[ 40]), - _fwl_4F2L(_data[ 39]), _fwl_4F3L(_data[ 38]), _fwl_4F4L(_data[ 37]), - _fwl_2F1R(_data[121]), _fwl_2F( _data[120]), _fwl_2F1L(_data[119]), - _fwl_3F2R(_data[ 91]), _fwl_3F1R(_data[ 90]), _fwl_3F( _data[ 89]), - _fwl_3F1L(_data[ 88]), _fwl_3F2L(_data[ 87]), _fwl_1F( _data[147]), - _fwl_1F1R(_data[145]), _fwl_1F1L(_data[143]), - _groundTiles(&_data[3]), - _objects0(_data[149]), _objects1(_data[125]), _objects2(_data[126]), - _objects3(_data[127]), _objects4(_data[97]), _objects5(_data[98]), - _objects6(_data[99]), _objects7(_data[55]), _objects8(_data[56]), - _objects9(_data[58]), _objects10(_data[57]), _objects11(_data[59]), - _attackImgs1(&_data[162]), _attackImgs2(&_data[135]), - _attackImgs3(&_data[111]), _attackImgs4(&_data[79]) { - // Setup draw structure positions - _data[0] = DrawStruct(0, 8, 8); - _data[1] = DrawStruct(1, 8, 25); - _data[2] = DrawStruct(0, 8, 67); - _data[3] = DrawStruct(0, 8, 67); - _data[4] = DrawStruct(0, 38, 67); - _data[5] = DrawStruct(0, 84, 67); - _data[6] = DrawStruct(0, 134, 67); - _data[7] = DrawStruct(0, 117, 67); - _data[8] = DrawStruct(0, 117, 67); - _data[9] = DrawStruct(0, 103, 67); - _data[10] = DrawStruct(0, 8, 73); - _data[11] = DrawStruct(0, 8, 73); - _data[12] = DrawStruct(0, 30, 73); - _data[13] = DrawStruct(0, 181, 73); - _data[14] = DrawStruct(0, 154, 73); - _data[15] = DrawStruct(0, 129, 73); - _data[16] = DrawStruct(0, 87, 73); - _data[17] = DrawStruct(0, 8, 81); - _data[18] = DrawStruct(0, 8, 81); - _data[19] = DrawStruct(0, 202, 81); - _data[20] = DrawStruct(0, 145, 81); - _data[21] = DrawStruct(0, 63, 81); - _data[22] = DrawStruct(0, 8, 93); - _data[23] = DrawStruct(0, 169, 93); - _data[24] = DrawStruct(0, 31, 93); - _data[25] = DrawStruct(0, 8, 109); - _data[26] = DrawStruct(0, 201, 109); - _data[27] = DrawStruct(0, 8, 109); - _data[28] = DrawStruct(7, 8, 64); - _data[29] = DrawStruct(22, 32, 60); - _data[30] = DrawStruct(20, 56, 60); - _data[31] = DrawStruct(18, 80, 60); - _data[32] = DrawStruct(16, 104, 60); - _data[33] = DrawStruct(23, 152, 60, 0, SPRFLAG_HORIZ_FLIPPED); - _data[34] = DrawStruct(21, 144, 60, 0, SPRFLAG_HORIZ_FLIPPED); - _data[35] = DrawStruct(19, 131, 60, 0, SPRFLAG_HORIZ_FLIPPED); - _data[36] = DrawStruct(17, 120, 60, 0, SPRFLAG_HORIZ_FLIPPED); - _data[37] = DrawStruct(14, 8, 60); - _data[38] = DrawStruct(12, 32, 60); - _data[39] = DrawStruct(10, 56, 60); - _data[40] = DrawStruct(14, 80, 60); - _data[41] = DrawStruct(14, 104, 60); - _data[42] = DrawStruct(14, 128, 60); - _data[43] = DrawStruct(14, 152, 60); - _data[44] = DrawStruct(8, 176, 60); - _data[45] = DrawStruct(8, 200, 60); - _data[46] = DrawStruct(0, -64, 61, 14, 0); - _data[47] = DrawStruct(0, -40, 61, 14, 0); - _data[48] = DrawStruct(0, -16, 61, 14, 0); - _data[49] = DrawStruct(0, 8, 61, 14, 0); - _data[50] = DrawStruct(0, 32, 61, 14, 0); - _data[51] = DrawStruct(0, 56, 61, 14, 0); - _data[52] = DrawStruct(0, 80, 61, 14, 0); - _data[53] = DrawStruct(0, 104, 61, 14, 0); - _data[54] = DrawStruct(0, 128, 61, 14, 0); - _data[55] = DrawStruct(0, -9, 58, 14, 0); - _data[56] = DrawStruct(0, -34, 58, 14, 0); - _data[57] = DrawStruct(0, 16, 58, 14, 0); - _data[58] = DrawStruct(0, -58, 58, 14, 0); - _data[59] = DrawStruct(0, 40, 58, 14, 0); - _data[60] = DrawStruct(0, -41, 58, 14, 0); - _data[61] = DrawStruct(0, -26, 58, 14, 0); - _data[62] = DrawStruct(0, -34, 58, 14, 0); - _data[63] = DrawStruct(0, -16, 58, 14, 0); - _data[64] = DrawStruct(0, 23, 58, 14, 0); - _data[65] = DrawStruct(0, 16, 58, 14, 0); - _data[66] = DrawStruct(0, -58, 58, 14, 0); - _data[67] = DrawStruct(0, 40, 58, 14, 0); - _data[68] = DrawStruct(0, -17, 58, 14, 0); - _data[69] = DrawStruct(0, -1, 58, 14, 0); - _data[70] = DrawStruct(0, -9, 58, 14, 0); - _data[71] = DrawStruct(14, 8, 58); - _data[72] = DrawStruct(12, 8, 55); - _data[73] = DrawStruct(10, 32, 52); - _data[74] = DrawStruct(14, 88, 52); - _data[75] = DrawStruct(14, 128, 52, 0, SPRFLAG_HORIZ_FLIPPED); - _data[76] = DrawStruct(14, 152, 52, 0, SPRFLAG_HORIZ_FLIPPED); - _data[77] = DrawStruct(0, 176, 55, 0, SPRFLAG_HORIZ_FLIPPED); - _data[78] = DrawStruct(0, 200, 58, 0, SPRFLAG_HORIZ_FLIPPED); - _data[79] = DrawStruct(0, 72, 58, 12, 0); - _data[80] = DrawStruct(0, 72, 58, 12, SPRFLAG_HORIZ_FLIPPED); - _data[81] = DrawStruct(0, 69, 63, 12, 0); - _data[82] = DrawStruct(0, 75, 63, 12, SPRFLAG_HORIZ_FLIPPED); - _data[83] = DrawStruct(0, 73, 53, 12, 0); - _data[84] = DrawStruct(0, 71, 53, 12, SPRFLAG_HORIZ_FLIPPED); - _data[85] = DrawStruct(0, 80, 57, 12, 0); - _data[86] = DrawStruct(0, 64, 57, 12, SPRFLAG_HORIZ_FLIPPED); - _data[87] = DrawStruct(7, -24, 52, 0, SPRFLAG_SCENE_CLIPPED); - _data[88] = DrawStruct(7, 32, 52); - _data[89] = DrawStruct(7, 88, 52); - _data[90] = DrawStruct(0, 144, 52); - _data[91] = DrawStruct(0, 200, 52, 0, SPRFLAG_SCENE_CLIPPED); - _data[92] = DrawStruct(0, -79, 52, 11, SPRFLAG_SCENE_CLIPPED); - _data[93] = DrawStruct(0, -27, 52, 11, 0); - _data[94] = DrawStruct(0, 32, 52, 11, 0); - _data[95] = DrawStruct(0, 89, 52, 11, 0); - _data[96] = DrawStruct(0, 145, 52, 11, SPRFLAG_SCENE_CLIPPED); - _data[97] = DrawStruct(0, -8, 50, 12, 0); - _data[98] = DrawStruct(0, -65, 50, 12, 0); - _data[99] = DrawStruct(0, 49, 50, 12, 0); - _data[100] = DrawStruct(0, -65, 50, 12, 0); - _data[101] = DrawStruct(0, -81, 50, 12, 0); - _data[102] = DrawStruct(0, 49, 50, 12, 0); - _data[103] = DrawStruct(0, 65, 50, 12, 0); - _data[104] = DrawStruct(0, -24, 50, 12, 0); - _data[105] = DrawStruct(0, 9, 50, 12, 0); - _data[106] = DrawStruct(0, -8, 50, 12, 0); - _data[107] = DrawStruct(7, 8, 48); - _data[108] = DrawStruct(7, 64, 40); - _data[109] = DrawStruct(6, 144, 40, 0, SPRFLAG_HORIZ_FLIPPED); - _data[110] = DrawStruct(6, 200, 48, 0, SPRFLAG_HORIZ_FLIPPED); - _data[111] = DrawStruct(0, 72, 53, 8, 0); - _data[112] = DrawStruct(0, 72, 53, 8, SPRFLAG_HORIZ_FLIPPED); - _data[113] = DrawStruct(0, 77, 58, 8, 0); - _data[114] = DrawStruct(0, 67, 58, 8, SPRFLAG_HORIZ_FLIPPED); - _data[115] = DrawStruct(0, 81, 47, 8, 0); - _data[116] = DrawStruct(0, 63, 47, 8, SPRFLAG_HORIZ_FLIPPED); - _data[117] = DrawStruct(0, 94, 52, 8, 0); - _data[118] = DrawStruct(0, 50, 52, 8, SPRFLAG_HORIZ_FLIPPED); - _data[119] = DrawStruct(6, -40, 40, 0, SPRFLAG_SCENE_CLIPPED); - _data[120] = DrawStruct(6, 64, 40); - _data[121] = DrawStruct(0, 168, 40, 0, SPRFLAG_SCENE_CLIPPED); - _data[122] = DrawStruct(0, -72, 40, 6, SPRFLAG_SCENE_CLIPPED); - _data[123] = DrawStruct(0, 32, 40, 6, 0); - _data[124] = DrawStruct(0, 137, 40, 6, SPRFLAG_SCENE_CLIPPED); - _data[125] = DrawStruct(0, -7, 25, 7, 0); - _data[126] = DrawStruct(0, -112, 25, 7, SPRFLAG_SCENE_CLIPPED); - _data[127] = DrawStruct(0, 98, 25, 7, SPRFLAG_SCENE_CLIPPED); - _data[128] = DrawStruct(0, -112, 29, 8, SPRFLAG_SCENE_CLIPPED); - _data[129] = DrawStruct(0, 98, 29, 8, SPRFLAG_SCENE_CLIPPED); - _data[130] = DrawStruct(0, -38, 29, 8, 0); - _data[131] = DrawStruct(0, 25, 29, 8, 0); - _data[132] = DrawStruct(0, -7, 29, 8, 0); - _data[133] = DrawStruct(6, 32, 24); - _data[134] = DrawStruct(0, 168, 24, 0, SPRFLAG_HORIZ_FLIPPED); - _data[135] = DrawStruct(0, 72, 48, 4, 0); - _data[136] = DrawStruct(0, 72, 48, 4, SPRFLAG_HORIZ_FLIPPED); - _data[137] = DrawStruct(0, 85, 53, 4, 0); - _data[138] = DrawStruct(0, 59, 53, 4, SPRFLAG_HORIZ_FLIPPED); - _data[139] = DrawStruct(0, 89, 41, 4, 0); - _data[140] = DrawStruct(0, 55, 41, 4, SPRFLAG_HORIZ_FLIPPED); - _data[141] = DrawStruct(0, 106, 47, 4, 0); - _data[142] = DrawStruct(0, 38, 47, 4, SPRFLAG_HORIZ_FLIPPED); - _data[143] = DrawStruct(0, -136, 24, 0, SPRFLAG_SCENE_CLIPPED); - _data[144] = DrawStruct(0, 8, 12); - _data[145] = DrawStruct(0, 32, 24); - _data[146] = DrawStruct(0, 200, 12, 0, SPRFLAG_HORIZ_FLIPPED); - _data[147] = DrawStruct(0, 200, 24, 0, SPRFLAG_SCENE_CLIPPED); - _data[148] = DrawStruct(0, 32, 24); - _data[149] = DrawStruct(0, -5, 2, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[150] = DrawStruct(0, -67, 10, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[151] = DrawStruct(0, 44, 73); - _data[152] = DrawStruct(0, 44, 73); - _data[153] = DrawStruct(0, 58, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[154] = DrawStruct(0, 169, 73); - _data[155] = DrawStruct(0, 169, 73); - _data[156] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[157] = DrawStruct(0, 110, 73); - _data[158] = DrawStruct(0, 110, 73); - _data[159] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); - _data[160] = DrawStruct(0, 110, 73); - _data[161] = DrawStruct(0, 110, 73); - _data[162] = DrawStruct(0, 72, 43); - _data[163] = DrawStruct(0, 72, 43, 0, SPRFLAG_HORIZ_FLIPPED); - _data[164] = DrawStruct(0, 93, 48); - _data[165] = DrawStruct(0, 51, 48, 0, SPRFLAG_HORIZ_FLIPPED); - _data[166] = DrawStruct(0, 97, 36); - _data[167] = DrawStruct(0, 47, 36, 0, SPRFLAG_HORIZ_FLIPPED); - _data[168] = DrawStruct(0, 118, 42); - _data[169] = DrawStruct(0, 26, 42, 0, SPRFLAG_HORIZ_FLIPPED); -} - -/*------------------------------------------------------------------------*/ - -InterfaceMap::InterfaceMap(XeenEngine *vm): _vm(vm) { - Common::fill(&_wp[0], &_wp[20], 0); - Common::fill(&_wo[0], &_wo[308], 0); - _overallFrame = 0; - _flipWater = false; - _flipGround = false; - _flipSky = false; - _flipDefaultGround = false; - _isAttacking = false; - _charsShooting = false; - _objNumber = 0; - _combatFloatCounter = 0; - _thinWall = false; - _isAnimReset = false; - _overallFrame = 0; - _openDoor = false; -} - -void InterfaceMap::drawMap() { - Combat &combat = *_vm->_combat; - 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; - - // Loop to update the frame numbers for each maze object, applying the animation frame - // limits as specified by the map's _animationInfo listing - for (uint idx = 0; idx < map._mobData._objects.size(); ++idx) { - MazeObject &mazeObject = map._mobData._objects[idx]; - AnimationEntry &animEntry = map._animationInfo[mazeObject._spriteId]; - int directionIndex = Res.DIRECTION_ANIM_POSITIONS[mazeObject._direction][partyDirection]; - - if (_isAnimReset) { - mazeObject._frame = animEntry._frame1._frames[directionIndex]; - } else { - ++mazeObject._frame; - if ((int)idx == objNum && scripts._animCounter > 0 && ( - objObject._spriteId == (_vm->_files->_isDarkCc ? 15 : 16) || - objObject._spriteId == 58 || objObject._spriteId == 73)) { - if (mazeObject._frame > 4 || mazeObject._spriteId == 58) - mazeObject._frame = 1; - } else if (mazeObject._frame >= animEntry._frame2._frames[directionIndex]) { - mazeObject._frame = animEntry._frame1._frames[directionIndex]; - } - } - - 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; - } - } - - _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; - } - - ds2._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED; - ds2._sprites = &_charPowSprites; - } - - 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]; - - 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 { - 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; - } - } 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; - } - } - } 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; - } - - ds1._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED; - ds1._sprites = &_charPowSprites; - } - - 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; - } - } - } - - 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; - } - - 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; - } - } - - animate3d(); -} - -void InterfaceMap::animate3d() { - Combat &combat = *_vm->_combat; - Map &map = *_vm->_map; - _overallFrame = (_overallFrame + 1) % 5; - _combatFloatCounter = (_combatFloatCounter + 1) % 8; - - for (uint idx = 0; idx < map._mobData._monsters.size(); ++idx) { - MazeMonster &monster = map._mobData._monsters[idx]; - if (!monster._damageType) { - if (monster._frame < 8) { - MonsterStruct &monsterData = *monster._monsterData; - if (!monsterData._loopAnimation) { - // Monster isn't specially looped, so cycle through the 8 frames - monster._frame = (monster._frame + 1) % 8; - } else if (!monster._field9) { - monster._frame = (monster._frame + 1) % 8; - if (monster._frame == 0) { - monster._field9 ^= 1; - monster._frame = 6; - } - } else { - if (monster._frame) - --monster._frame; - if (monster._frame == 0) - monster._field9 = 0; - } - } else if (monster._frame == 11) { - --monster._fieldA; - if (monster._fieldA == 0) - monster._frame = 0; - } else { - ++monster._frame; - if (monster._frame == 11) { - --monster._frame; - monster._frame = monster._fieldA ? 10 : 0; - } - } - } - - // Block 2 - if (monster._effect2) { - if (monster._effect1) { - if (monster._effect1 & 0x80) { - if (monster._effect3) - --monster._effect3; - if (monster._effect3 == 0) - monster._effect1 ^= 0x80; - } else { - monster._effect3 = (monster._effect3 + 1) % 3; - if (monster._effect3 == 0) { - monster._effect1 ^= 0x80; - monster._effect3 = 2; - } - } - } - } else { - monster._effect3 = (monster._effect3 + 1) % 8; - if (monster._effect3 == 0) { - MonsterStruct &monsterData = *monster._monsterData; - monster._effect1 = monster._effect2 = monsterData._animationEffect; - } - } - } - - DrawStruct *combatImgs1 = map._isOutdoors ? _outdoorList._attackImgs1 : _indoorList._attackImgs1; - DrawStruct *combatImgs2 = map._isOutdoors ? _outdoorList._attackImgs2 : _indoorList._attackImgs2; - DrawStruct *combatImgs3 = map._isOutdoors ? _outdoorList._attackImgs3 : _indoorList._attackImgs3; - DrawStruct *combatImgs4 = map._isOutdoors ? _outdoorList._attackImgs4 : _indoorList._attackImgs4; - - if (combat._monstersAttacking) { - for (int idx = 0; idx < 8; ++idx) { - if (combatImgs1[idx]._sprites) { - combatImgs1[idx]._sprites = nullptr; - combat._shooting[idx] = false; - } else if (combatImgs2[idx]._sprites) { - combatImgs1[idx]._sprites = combatImgs2[idx]._sprites; - combatImgs2[idx]._sprites = nullptr; - } else if (combatImgs3[idx]._sprites) { - combatImgs2[idx]._sprites = combatImgs3[idx]._sprites; - combatImgs3[idx]._sprites = nullptr; - } else if (combatImgs4[idx]._sprites) { - combatImgs3[idx]._sprites = combatImgs4[idx]._sprites; - combatImgs4[idx]._sprites = nullptr; - } - } - } else if (_charsShooting) { - for (int idx = 0; idx < 8; ++idx) { - if (combatImgs4[idx]._sprites) { - combatImgs4[idx]._sprites = nullptr; - } else if (combatImgs3[idx]._sprites) { - combatImgs4[idx]._sprites = combatImgs3[idx]._sprites; - combatImgs3[idx]._sprites = nullptr; - } else if (combatImgs2[idx]._sprites) { - combatImgs3[idx]._sprites = combatImgs2[idx]._sprites; - combatImgs2[idx]._sprites = nullptr; - } else if (combatImgs1[idx]._sprites) { - combatImgs2[idx]._sprites = combatImgs1[idx]._sprites; - combatImgs1[idx]._sprites = nullptr; - } - } - } - - for (uint idx = 0; idx < map._mobData._wallItems.size(); ++idx) { - MazeWallItem &wallItem = map._mobData._wallItems[idx]; - wallItem._frame = (wallItem._frame + 1) % wallItem._sprites->size(); - } -} - -void InterfaceMap::setMazeBits() { - Common::fill(&_wo[0], &_wo[308], 0); - - switch (_vm->_map->getCell(0) - 1) { - case 0: - ++_wo[125]; - break; - case 1: - ++_wo[69]; - break; - case 2: - ++_wo[185]; - break; - case 3: - case 12: - ++_wo[105]; - break; - case 4: - case 7: - ++_wo[25]; - break; - case 5: - ++_wo[225]; - break; - case 6: - ++_wo[205]; - break; - case 8: - ++_wo[145]; - break; - case 9: - ++_wo[305]; - break; - case 10: - ++_wo[245]; - break; - case 11: - ++_wo[165]; - break; - case 13: - ++_wo[265]; - break; - case 14: - ++_wo[285]; - break; - default: - break; - } - - switch (_vm->_map->getCell(1) - 1) { - case 1: - ++_wo[72]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[28]; - break; - default: - break; - } - - switch (_vm->_map->getCell(2) - 1) { - case 0: - ++_wo[127]; - break; - case 1: - ++_wo[71]; - break; - case 2: - ++_wo[187]; - break; - case 3: - case 12: - ++_wo[107]; - break; - case 4: - case 7: - ++_wo[27]; - break; - case 5: - ++_wo[227]; - break; - case 6: - ++_wo[207]; - break; - case 8: - ++_wo[147]; - break; - case 9: - ++_wo[307]; - break; - case 10: - ++_wo[247]; - break; - case 11: - ++_wo[167]; - break; - case 13: - ++_wo[267]; - break; - case 14: - ++_wo[287]; - break; - default: - break; - } - - _vm->_party->handleLight(); - - switch (_vm->_map->getCell(3) - 1) { - case 1: - ++_wo[73]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[29]; - break; - default: - break; - } - - switch (_vm->_map->getCell(4) - 1) { - case 0: - ++_wo[126]; - break; - case 1: - ++_wo[70]; - break; - case 2: - ++_wo[186]; - break; - case 3: - case 12: - ++_wo[106]; - break; - case 4: - case 7: - ++_wo[26]; - break; - case 5: - ++_wo[226]; - break; - case 6: - ++_wo[206]; - break; - case 8: - ++_wo[146]; - break; - case 9: - ++_wo[306]; - break; - case 10: - ++_wo[246]; - break; - break; - case 11: - ++_wo[166]; - break; - case 13: - ++_wo[266]; - break; - case 14: - ++_wo[286]; - break; - default: - break; - } - - switch (_vm->_map->getCell(5) - 1) { - case 0: - ++_wo[122]; - break; - case 1: - ++_wo[64]; - break; - case 2: - ++_wo[182]; - break; - case 3: - case 12: - ++_wo[102]; - break; - case 4: - case 7: - ++_wo[20]; - break; - case 5: - ++_wo[222]; - break; - case 6: - ++_wo[202]; - break; - case 8: - ++_wo[142]; - break; - case 9: - ++_wo[302]; - break; - case 10: - ++_wo[242]; - break; - case 11: - ++_wo[162]; - break; - case 13: - ++_wo[262]; - break; - case 14: - ++_wo[282]; - break; - default: - break; - } - - switch (_vm->_map->getCell(6) - 1) { - case 1: - ++_wo[67]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[23]; - break; - default: - break; - } - - switch (_vm->_map->getCell(7) - 1) { - case 0: - ++_wo[124]; - break; - case 1: - ++_wo[66]; - break; - case 2: - ++_wo[184]; - break; - case 3: - case 12: - ++_wo[104]; - break; - case 4: - case 7: - ++_wo[22]; - break; - case 5: - ++_wo[224]; - break; - case 6: - ++_wo[204]; - break; - case 8: - ++_wo[144]; - break; - case 9: - ++_wo[304]; - break; - case 10: - ++_wo[244]; - break; - case 11: - ++_wo[164]; - break; - case 13: - ++_wo[264]; - break; - case 14: - ++_wo[284]; - break; - default: - break; - } - - _thinWall = (_vm->_map->_currentWall != INVALID_CELL) && _wo[27]; - - switch (_vm->_map->getCell(8) - 1) { - case 1: - ++_wo[68]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[24]; - break; - default: - break; - } - - switch (_vm->_map->getCell(9) - 1) { - case 0: - ++_wo[123]; - break; - case 1: - ++_wo[65]; - break; - case 2: - ++_wo[183]; - break; - case 3: - case 12: - ++_wo[103]; - break; - case 4: - case 7: - ++_wo[21]; - break; - case 5: - ++_wo[223]; - break; - case 6: - ++_wo[203]; - break; - case 8: - ++_wo[143]; - break; - case 9: - ++_wo[303]; - break; - case 10: - ++_wo[243]; - break; - case 11: - ++_wo[163]; - break; - case 13: - ++_wo[263]; - break; - case 14: - ++_wo[283]; - break; - default: - break; - } - - switch (_vm->_map->getCell(10) - 1) { - case 0: - ++_wo[117]; - break; - case 1: - ++_wo[55]; - break; - case 2: - ++_wo[177]; - break; - case 3: - case 12: - ++_wo[97]; - break; - case 4: - case 7: - ++_wo[11]; - break; - case 5: - ++_wo[217]; - break; - case 6: - ++_wo[197]; - break; - case 8: - ++_wo[137]; - break; - case 9: - ++_wo[297]; - break; - case 10: - ++_wo[237]; - break; - case 11: - ++_wo[157]; - break; - case 13: - ++_wo[257]; - break; - case 14: - ++_wo[277]; - break; - default: - break; - } - - switch (_vm->_map->getCell(11) - 1) { - case 1: - ++_wo[60]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[16]; - break; - default: - break; - } - - switch (_vm->_map->getCell(12) - 1) { - case 0: - ++_wo[118]; - break; - case 1: - ++_wo[56]; - break; - case 2: - ++_wo[178]; - break; - case 3: - case 12: - ++_wo[98]; - break; - case 4: - case 7: - ++_wo[12]; - break; - case 5: - ++_wo[218]; - break; - case 6: - ++_wo[198]; - break; - case 8: - ++_wo[138]; - break; - case 9: - ++_wo[298]; - break; - case 10: - ++_wo[238]; - break; - case 11: - ++_wo[158]; - break; - case 13: - ++_wo[258]; - break; - case 14: - ++_wo[278]; - break; - default: - break; - } - - switch (_vm->_map->getCell(13) - 1) { - case 1: - ++_wo[61]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[17]; - break; - default: - break; - } - - switch (_vm->_map->getCell(14) - 1) { - case 0: - ++_wo[121]; - break; - case 1: - ++_wo[59]; - break; - case 2: - ++_wo[181]; - break; - case 3: - case 12: - ++_wo[101]; - break; - case 4: - case 7: - ++_wo[15]; - break; - case 5: - ++_wo[221]; - break; - case 6: - ++_wo[201]; - break; - case 8: - ++_wo[141]; - break; - case 9: - ++_wo[301]; - break; - case 10: - ++_wo[241]; - break; - case 11: - ++_wo[161]; - break; - case 13: - ++_wo[261]; - break; - case 14: - ++_wo[281]; - break; - default: - break; - } - - switch (_vm->_map->getCell(15) - 1) { - case 1: - ++_wo[63]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[19]; - break; - default: - break; - } - - switch (_vm->_map->getCell(16) - 1) { - case 0: - ++_wo[120]; - break; - case 1: - ++_wo[58]; - break; - case 2: - ++_wo[180]; - break; - case 3: - case 12: - ++_wo[100]; - break; - case 4: - case 7: - ++_wo[14]; - break; - case 5: - ++_wo[220]; - break; - case 6: - ++_wo[200]; - break; - case 8: - ++_wo[140]; - break; - case 9: - ++_wo[300]; - break; - case 10: - ++_wo[240]; - break; - case 11: - ++_wo[160]; - break; - case 13: - ++_wo[260]; - break; - case 14: - ++_wo[280]; - break; - default: - break; - } - - switch (_vm->_map->getCell(17) - 1) { - case 1: - ++_wo[62]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[18]; - break; - default: - break; - } - - switch (_vm->_map->getCell(18) - 1) { - case 0: - ++_wo[119]; - break; - case 1: - ++_wo[57]; - break; - case 2: - ++_wo[179]; - break; - case 3: - case 12: - ++_wo[99]; - break; - case 4: - case 7: - ++_wo[13]; - break; - case 5: - ++_wo[219]; - break; - case 6: - ++_wo[199]; - break; - case 8: - ++_wo[139]; - break; - case 9: - ++_wo[299]; - break; - case 10: - ++_wo[239]; - break; - case 11: - ++_wo[159]; - break; - case 13: - ++_wo[259]; - break; - case 14: - ++_wo[279]; - break; - default: - break; - } - - switch (_vm->_map->getCell(19) - 1) { - case 0: - ++_wo[108]; - break; - case 1: - ++_wo[78]; - break; - case 2: - ++_wo[168]; - break; - case 3: - case 12: - ++_wo[88]; - break; - case 4: - case 7: - ++_wo[34]; - break; - case 5: - ++_wo[208]; - break; - case 6: - ++_wo[188]; - break; - case 8: - ++_wo[128]; - break; - case 9: - ++_wo[288]; - break; - case 10: - ++_wo[228]; - break; - case 11: - ++_wo[148]; - break; - case 13: - ++_wo[248]; - break; - case 14: - ++_wo[268]; - break; - default: - break; - } - - switch (_vm->_map->getCell(20) - 1) { - case 1: - ++_wo[76]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[32]; - break; - default: - break; - } - - switch (_vm->_map->getCell(21) - 1) { - case 0: - ++_wo[109]; - break; - case 1: - ++_wo[44]; - break; - case 2: - ++_wo[169]; - break; - case 3: - case 12: - ++_wo[89]; - break; - case 4: - case 7: - ++_wo[0]; - break; - case 5: - ++_wo[209]; - break; - case 6: - ++_wo[189]; - break; - case 8: - ++_wo[129]; - break; - case 9: - ++_wo[289]; - break; - case 10: - ++_wo[229]; - break; - case 11: - ++_wo[149]; - break; - case 13: - ++_wo[249]; - break; - case 14: - ++_wo[269]; - break; - default: - break; - } - - switch (_vm->_map->getCell(22) - 1) { - case 1: - ++_wo[74]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[30]; - break; - default: - break; - } - - switch (_vm->_map->getCell(23) - 1) { - case 0: - ++_wo[110]; - break; - case 1: - ++_wo[45]; - break; - case 2: - ++_wo[170]; - break; - case 3: - case 12: - ++_wo[90]; - break; - case 4: - case 7: - ++_wo[1]; - break; - case 5: - ++_wo[210]; - break; - case 6: - ++_wo[190]; - break; - case 8: - ++_wo[130]; - break; - case 9: - ++_wo[290]; - break; - case 10: - ++_wo[230]; - break; - case 11: - ++_wo[150]; - break; - case 13: - ++_wo[250]; - break; - case 14: - ++_wo[270]; - break; - default: - break; - } - - switch (_vm->_map->getCell(24) - 1) { - case 1: - ++_wo[52]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[8]; - break; - default: - break; - } - - switch (_vm->_map->getCell(25) - 1) { - case 0: - ++_wo[111]; - break; - case 1: - ++_wo[46]; - break; - case 2: - ++_wo[171]; - break; - case 3: - case 12: - ++_wo[91]; - break; - case 4: - case 7: - ++_wo[2]; - break; - case 5: - ++_wo[211]; - break; - case 6: - ++_wo[191]; - break; - case 8: - ++_wo[131]; - break; - case 9: - ++_wo[291]; - break; - case 10: - ++_wo[231]; - break; - case 11: - ++_wo[151]; - break; - case 13: - ++_wo[251]; - break; - case 14: - ++_wo[271]; - break; - default: - break; - } - - switch (_vm->_map->getCell(26) - 1) { - case 1: - ++_wo[51]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[7]; - break; - default: - break; - } - - switch (_vm->_map->getCell(27) - 1) { - case 0: - ++_wo[116]; - break; - case 1: - ++_wo[50]; - break; - case 2: - ++_wo[176]; - break; - case 3: - case 12: - ++_wo[96]; - break; - case 4: - case 7: - ++_wo[6]; - break; - case 5: - ++_wo[216]; - break; - case 6: - ++_wo[196]; - break; - case 8: - ++_wo[136]; - break; - case 9: - ++_wo[296]; - break; - case 10: - ++_wo[236]; - break; - case 11: - ++_wo[156]; - break; - case 13: - ++_wo[256]; - break; - case 14: - ++_wo[276]; - break; - default: - break; - } - - switch (_vm->_map->getCell(28) - 1) { - case 1: - ++_wo[53]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[9]; - break; - default: - break; - } - - switch (_vm->_map->getCell(29) - 1) { - case 0: - ++_wo[115]; - break; - case 1: - ++_wo[49]; - break; - case 2: - ++_wo[175]; - break; - case 3: - case 12: - ++_wo[95]; - break; - case 4: - case 7: - ++_wo[5]; - break; - case 5: - ++_wo[215]; - break; - case 6: - ++_wo[195]; - break; - case 8: - ++_wo[135]; - break; - case 9: - ++_wo[295]; - break; - case 10: - ++_wo[235]; - break; - case 11: - ++_wo[155]; - break; - case 13: - ++_wo[255]; - break; - case 14: - ++_wo[275]; - break; - default: - break; - } - - switch (_vm->_map->getCell(30) - 1) { - case 1: - ++_wo[54]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[10]; - break; - default: - break; - } - - switch (_vm->_map->getCell(31) - 1) { - case 0: - ++_wo[114]; - break; - case 1: - ++_wo[48]; - break; - case 2: - ++_wo[174]; - break; - case 3: - case 12: - ++_wo[94]; - break; - case 4: - case 7: - ++_wo[4]; - break; - case 5: - ++_wo[214]; - break; - case 6: - ++_wo[194]; - break; - case 8: - ++_wo[134]; - break; - case 9: - ++_wo[294]; - break; - case 10: - ++_wo[234]; - break; - case 11: - ++_wo[154]; - break; - case 13: - ++_wo[254]; - break; - case 14: - ++_wo[274]; - break; - default: - break; - } - - switch (_vm->_map->getCell(32) - 1) { - case 1: - ++_wo[75]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[31]; - break; - default: - break; - } - - switch (_vm->_map->getCell(33) - 1) { - case 0: - ++_wo[112]; - break; - case 1: - ++_wo[47]; - break; - case 2: - ++_wo[172]; - break; - case 3: - case 12: - ++_wo[92]; - break; - case 4: - case 7: - ++_wo[3]; - break; - case 5: - ++_wo[212]; - break; - case 6: - ++_wo[192]; - break; - case 8: - ++_wo[132]; - break; - case 9: - ++_wo[292]; - break; - case 10: - ++_wo[232]; - break; - case 11: - ++_wo[152]; - break; - case 13: - ++_wo[252]; - break; - case 14: - ++_wo[272]; - break; - default: - break; - } - - switch (_vm->_map->getCell(34) - 1) { - case 1: - ++_wo[77]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[33]; - break; - default: - break; - } - - switch (_vm->_map->getCell(35) - 1) { - case 0: - ++_wo[113]; - break; - case 1: - ++_wo[79]; - break; - case 2: - ++_wo[173]; - break; - case 3: - case 12: - ++_wo[93]; - break; - case 4: - case 7: - ++_wo[35]; - break; - case 5: - ++_wo[213]; - break; - case 6: - ++_wo[193]; - break; - case 8: - ++_wo[133]; - break; - case 9: - ++_wo[293]; - break; - case 10: - ++_wo[233]; - break; - case 11: - ++_wo[153]; - break; - case 13: - ++_wo[253]; - break; - case 14: - ++_wo[273]; - break; - default: - break; - } - - switch (_vm->_map->getCell(36) - 1) { - case 1: - ++_wo[83]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[39]; - break; - default: - break; - } - - switch (_vm->_map->getCell(37) - 1) { - case 1: - ++_wo[82]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[38]; - break; - default: - break; - } - - switch (_vm->_map->getCell(38) - 1) { - case 1: - ++_wo[81]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[37]; - break; - default: - break; - } - - switch (_vm->_map->getCell(39) - 1) { - case 1: - ++_wo[80]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[36]; - break; - default: - break; - } - - switch (_vm->_map->getCell(40) - 1) { - case 1: - ++_wo[84]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[40]; - break; - default: - break; - } - - switch (_vm->_map->getCell(41) - 1) { - case 1: - ++_wo[85]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[41]; - break; - default: - break; - } - - switch (_vm->_map->getCell(42) - 1) { - case 1: - ++_wo[86]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[42]; - break; - default: - break; - } - - switch (_vm->_map->getCell(43) - 1) { - case 1: - ++_wo[87]; - break; - case 0: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - ++_wo[43]; - break; - default: - break; - } -} - -void InterfaceMap::setIndoorsMonsters() { - Combat &combat = *_vm->_combat; - Map &map = *_vm->_map; - Common::Point mazePos = _vm->_party->_mazePosition; - Direction dir = _vm->_party->_mazeDirection; - - combat.clear(); - for (uint monsterIdx = 0; monsterIdx < map._mobData._monsters.size(); ++monsterIdx) { - MazeMonster &monster = map._mobData._monsters[monsterIdx]; - SpriteResource *sprites = monster._sprites; - int frame = monster._frame; - - if (frame >= 8) { - sprites = monster._attackSprites; - frame -= 8; - } - - // The following long sequence sets up monsters in the various positions - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][2]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][2])) { - monster._isAttacking = true; - if (combat._attackMonsters[0] == -1) { - combat._attackMonsters[0] = monsterIdx; - setMonsterSprite(_indoorList[156], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]); - } else if (combat._attackMonsters[1] == -1) { - combat._attackMonsters[1] = monsterIdx; - setMonsterSprite(_indoorList[150], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]); - } else if (combat._attackMonsters[2] == -1) { - combat._attackMonsters[2] = monsterIdx; - setMonsterSprite(_indoorList[153], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]); - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][7]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][7])) { - monster._isAttacking = true; - if (!_wo[27]) { - if (combat._attackMonsters[3] == -1) { - combat._attackMonsters[3] = monsterIdx; - setMonsterSprite(_indoorList[132], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); - } else if (combat._attackMonsters[4] == -1) { - combat._attackMonsters[4] = monsterIdx; - setMonsterSprite(_indoorList[130], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); - } else if (combat._attackMonsters[2] == -1) { - combat._attackMonsters[5] = monsterIdx; - setMonsterSprite(_indoorList[131], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][5]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][5])) { - if (_wo[27] && _wo[25]) { - } else if (_wo[27] && _wo[28]) { - } else if (_wo[23] & _wo[25]) { - } else if (_wo[23] && _wo[28]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[12] == -1) { - combat._attackMonsters[12] = monsterIdx; - setMonsterSprite(_indoorList[128], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][9]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][9])) { - if (_wo[27] && _wo[26]) { - } else if (_wo[27] && _wo[29]) { - } else if (_wo[24] & _wo[26]) { - } else if (_wo[24] && _wo[29]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[13] == -1) { - combat._attackMonsters[13] = monsterIdx; - setMonsterSprite(_indoorList[129], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][14]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][14])) { - monster._isAttacking = true; - - if (!_wo[22] && !_wo[27]) { - if (combat._attackMonsters[6] == -1) { - combat._attackMonsters[6] = monsterIdx; - setMonsterSprite(_indoorList[106], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); - } else if (combat._attackMonsters[7] == -1) { - combat._attackMonsters[7] = monsterIdx; - setMonsterSprite(_indoorList[104], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); - } else if (combat._attackMonsters[8] == -1) { - combat._attackMonsters[8] = monsterIdx; - setMonsterSprite(_indoorList[105], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][12]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][12])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[23]) { - } else if (_wo[22] & _wo[20]) { - } else if (_wo[23] && _wo[17]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[14] == -1) { - combat._attackMonsters[14] = monsterIdx; - setMonsterSprite(_indoorList[100], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); - } else if (combat._attackMonsters[20] == -1) { - combat._attackMonsters[20] = monsterIdx; - setMonsterSprite(_indoorList[101], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][16]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][16])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[24]) { - } else if (_wo[22] & _wo[21]) { - } else if (_wo[24] && _wo[19]) { - } else if (_wo[21] && _wo[19]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[15] == -1) { - combat._attackMonsters[15] = monsterIdx; - setMonsterSprite(_indoorList[102], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); - } else if (combat._attackMonsters[21] == -1) { - combat._attackMonsters[21] = monsterIdx; - setMonsterSprite(_indoorList[103], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][27]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][27])) { - if (!_wo[27] && !_wo[22] && !_wo[15]) { - monster._isAttacking = true; - - if (combat._attackMonsters[9] == -1) { - combat._attackMonsters[9] = monsterIdx; - setMonsterSprite(_indoorList[70], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[10] == -1) { - combat._attackMonsters[10] = monsterIdx; - setMonsterSprite(_indoorList[68], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[11] == -1) { - combat._attackMonsters[11] = monsterIdx; - setMonsterSprite(_indoorList[69], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][25]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][25])) { - if (_wo[27] || _wo[22]) { - } else if (_wo[15] && _wo[17]) { - } else if (_wo[15] && _wo[12]) { - } else if (_wo[12] && _wo[7]) { - } else if (_wo[17] && _wo[7]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[16] == -1) { - combat._attackMonsters[16] = monsterIdx; - setMonsterSprite(_indoorList[62], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[22] == -1) { - combat._attackMonsters[22] = monsterIdx; - setMonsterSprite(_indoorList[60], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[24] == -1) { - combat._attackMonsters[24] = monsterIdx; - setMonsterSprite(_indoorList[61], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][23]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][23])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[20]) { - } else if (_wo[22] && _wo[23]) { - } else if (_wo[20] && _wo[17]) { - } else if (_wo[23] && _wo[17]) { - } else if (_wo[12] || _wo[8]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[18] == -1) { - combat._attackMonsters[18] = monsterIdx; - setMonsterSprite(_indoorList[66], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][29]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][29])) { - if (_wo[27] || _wo[22]) { - } else if (_wo[15] && _wo[19]) { - } else if (_wo[15] && _wo[14]) { - } else if (_wo[14] && _wo[9]) { - } else if (_wo[19] && _wo[9]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[17] == -1) { - combat._attackMonsters[17] = monsterIdx; - setMonsterSprite(_indoorList[65], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[23] == -1) { - combat._attackMonsters[23] = monsterIdx; - setMonsterSprite(_indoorList[63], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[25] == -1) { - combat._attackMonsters[25] = monsterIdx; - setMonsterSprite(_indoorList[64], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } - } - } - - if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][31]) && - monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][31])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[21]) { - } else if (_wo[22] && _wo[24]) { - } else if (_wo[21] && _wo[19]) { - } else if (_wo[24] && _wo[19]) { - } else if (_wo[14] || _wo[10]) { - } else { - monster._isAttacking = true; - - if (combat._attackMonsters[19] == -1) { - combat._attackMonsters[19] = monsterIdx; - setMonsterSprite(_indoorList[67], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[23] == -1) { - combat._attackMonsters[23] = monsterIdx; - setMonsterSprite(_indoorList[63], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } else if (combat._attackMonsters[25] == -1) { - combat._attackMonsters[25] = monsterIdx; - setMonsterSprite(_indoorList[64], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); - } - } - } - } - - _indoorList[153]._x += 58; - _indoorList[131]._x += 25; - _indoorList[105]._x += 9; - _indoorList[69]._x--; - _indoorList[61]._x -= 26; - _indoorList[64]._x += 23; - _indoorList[66]._x -= 58; - _indoorList[67]._x += 40; - _indoorList[100]._x -= 65; - _indoorList[101]._x -= 85; - _indoorList[102]._x += 49; - _indoorList[103]._x += 65; - _indoorList[128]._x -= 112; - _indoorList[129]._x += 98; - - if (combat._attackMonsters[1] != -1 && combat._attackMonsters[2] == -1) { - _indoorList[156]._x += 31; - _indoorList[150]._x -= 36; - } else { - _indoorList[156]._x -= 5; - _indoorList[150]._x -= 67; - } - - if (combat._attackMonsters[4] != -1 && combat._attackMonsters[5] == -1) { - _indoorList[132]._x += 8; - _indoorList[130]._x -= 23; - } else { - _indoorList[132]._x -= 7; - _indoorList[130]._x -= 38; - } - - if (combat._attackMonsters[7] != -1 && combat._attackMonsters[8] == -1) { - _indoorList[104]._x -= 16; - } else { - _indoorList[106]._x -= 8; - _indoorList[104]._x -= 24; - } - - if (combat._attackMonsters[10] != -1 && combat._attackMonsters[11] == -1) { - _indoorList[70]._x -= 5; - _indoorList[68]._x -= 13; - } else { - _indoorList[70]._x -= 9; - _indoorList[68]._x -= 17; - } - - if (combat._attackMonsters[22] == -1 && combat._attackMonsters[24] == -1) { - _indoorList[62]._x -= 27; - _indoorList[60]._x -= 37; - } else { - _indoorList[62]._x -= 34; - _indoorList[60]._x -= 41; - } - - if (combat._attackMonsters[23] != -1 && combat._attackMonsters[25] == -1) { - _indoorList[65]._x += 20; - _indoorList[63]._x -= 12; - } else { - _indoorList[65]._x += 16; - _indoorList[63]._x -= 16; - } -} - -void InterfaceMap::setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster, SpriteResource *sprites, - int frame, int defaultY) { - MonsterStruct &monsterData = *monster._monsterData; - bool flying = monsterData._flying; - - drawStruct._frame = frame; - drawStruct._sprites = sprites; - drawStruct._y = defaultY; - - if (flying) { - drawStruct._x = Res.COMBAT_FLOAT_X[_combatFloatCounter]; - drawStruct._y = Res.COMBAT_FLOAT_Y[_combatFloatCounter]; - } else { - drawStruct._x = 0; - } - - drawStruct._flags &= ~0xFFF; - if (monster._effect2) - drawStruct._flags = Res.MONSTER_EFFECT_FLAGS[monster._effect2][monster._effect3]; -} - -void InterfaceMap::setIndoorsObjects() { - Common::Point mazePos = _vm->_party->_mazePosition; - Direction dir = _vm->_party->_mazeDirection; - Common::Point pt; - _objNumber = 0; - - Common::Array &objects = _vm->_map->_mobData._objects; - for (uint idx = 0; idx < objects.size(); ++idx) { - MazeObject &mazeObject = objects[idx]; - - // Determine which half of the X/Y lists to use - int listOffset; - if (_vm->_files->_isDarkCc) { - listOffset = mazeObject._spriteId == 47 ? 1 : 0; - } else { - listOffset = mazeObject._spriteId == 113 ? 1 : 0; - } - - // Position 1 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][2]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][2]) == mazeObject._position.y - && _indoorList._objects0._frame == -1) { - _indoorList._objects0._x = Res.INDOOR_OBJECT_X[listOffset][0]; - _indoorList._objects0._y = Res.MAP_OBJECT_Y[listOffset][0]; - _indoorList._objects0._frame = mazeObject._frame; - _indoorList._objects0._sprites = mazeObject._sprites; - _indoorList._objects0._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects0._flags |= SPRFLAG_HORIZ_FLIPPED; - _objNumber = idx; - } - - // Position 2 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][7]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][7]) == mazeObject._position.y - && !_wo[27] && _indoorList._objects1._frame == -1) { - _indoorList._objects1._x = Res.INDOOR_OBJECT_X[listOffset][1]; - _indoorList._objects1._y = Res.MAP_OBJECT_Y[listOffset][1]; - _indoorList._objects1._frame = mazeObject._frame; - _indoorList._objects1._sprites = mazeObject._sprites; - _indoorList._objects1._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects1._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - // Position 3 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][5]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][5]) == mazeObject._position.y) { - if (_wo[27] && _wo[25]) { - } else if (_wo[27] && _wo[28]) { - } else if (_wo[23] && _wo[25]) { - } else if (_wo[23] && _wo[28]) { - } else if (_indoorList._objects2._frame == -1) { - _indoorList._objects2._x = Res.INDOOR_OBJECT_X[listOffset][2]; - _indoorList._objects2._y = Res.MAP_OBJECT_Y[listOffset][2]; - _indoorList._objects2._frame = mazeObject._frame; - _indoorList._objects2._sprites = mazeObject._sprites; - _indoorList._objects2._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects2._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Position 4 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][9]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][9]) == mazeObject._position.y) { - if (_wo[27] && _wo[26]) { - } else if (_wo[27] && _wo[29]) { - } else if (_wo[24] && _wo[26]) { - } else if (_wo[24] && _wo[29]) { - } else if (_indoorList._objects3._frame == -1) { - _indoorList._objects3._x = Res.INDOOR_OBJECT_X[listOffset][3]; - _indoorList._objects3._y = Res.MAP_OBJECT_Y[listOffset][3]; - _indoorList._objects3._frame = mazeObject._frame; - _indoorList._objects3._sprites = mazeObject._sprites; - _indoorList._objects3._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects3._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Position 5 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][14]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][14]) == mazeObject._position.y) { - if (!_wo[22] && !_wo[27] && _indoorList._objects4._frame == -1) { - _indoorList._objects4._x = Res.INDOOR_OBJECT_X[listOffset][4]; - _indoorList._objects4._y = Res.MAP_OBJECT_Y[listOffset][4]; - _indoorList._objects4._frame = mazeObject._frame; - _indoorList._objects4._sprites = mazeObject._sprites; - _indoorList._objects4._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects4._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Position 6 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][12]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][12]) == mazeObject._position.y) { - if (_wo[27]) { - } else if (_wo[22] && _wo[23]) { - } else if (_wo[22] && _wo[20]) { - } else if (_wo[23] && _wo[17]) { - } else if (_wo[20] && _wo[17]) { - } else if (_indoorList._objects5._frame == -1) { - _indoorList._objects5._x = Res.INDOOR_OBJECT_X[listOffset][5]; - _indoorList._objects5._y = Res.MAP_OBJECT_Y[listOffset][5]; - _indoorList._objects5._frame = mazeObject._frame; - _indoorList._objects5._sprites = mazeObject._sprites; - _indoorList._objects5._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects5._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Position 7 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][16]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][16]) == mazeObject._position.y) { - if (_wo[27]) { - } else if (_wo[22] && _wo[24]) { - } else if (_wo[22] && _wo[21]) { - } else if (_wo[24] && _wo[19]) { - } else if (_wo[21] && _wo[19]) { - } else if (_indoorList._objects6._frame == -1) { - _indoorList._objects6._x = Res.INDOOR_OBJECT_X[listOffset][6]; - _indoorList._objects6._y = Res.MAP_OBJECT_Y[listOffset][6]; - _indoorList._objects6._frame = mazeObject._frame; - _indoorList._objects6._sprites = mazeObject._sprites; - _indoorList._objects6._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects6._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Position 8 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][27]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][27]) == mazeObject._position.y) { - if (!_wo[27] && !_wo[22] && !_wo[15] && _indoorList._objects7._frame == -1) { - _indoorList._objects7._x = Res.INDOOR_OBJECT_X[listOffset][7]; - _indoorList._objects7._y = Res.MAP_OBJECT_Y[listOffset][7]; - _indoorList._objects7._frame = mazeObject._frame; - _indoorList._objects7._sprites = mazeObject._sprites; - _indoorList._objects7._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects7._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Position 9 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][25]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][25]) == mazeObject._position.y) { - if (_wo[27] || _wo[22]) { - } else if (_wo[15] && _wo[17]) { - } else if (_wo[15] && _wo[12]) { - } else if (_wo[12] && _wo[7]) { - } else if (_wo[17] && _wo[7]) { - } else if (_indoorList._objects8._frame == -1) { - _indoorList._objects8._x = Res.INDOOR_OBJECT_X[listOffset][8]; - _indoorList._objects8._y = Res.MAP_OBJECT_Y[listOffset][8]; - _indoorList._objects8._frame = mazeObject._frame; - _indoorList._objects8._sprites = mazeObject._sprites; - _indoorList._objects8._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects8._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Position 10 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][23]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][23]) == mazeObject._position.y) { - if (_wo[27]) { - } else if (_wo[22] && _wo[20]) { - } else if (_wo[22] && _wo[23]) { - } else if (_wo[20] && _wo[17]) { - } else if (_wo[23] && _wo[17]) { - } else if (!_wo[12] && !_wo[8] && _indoorList._objects9._frame == -1) { - _indoorList._objects9._x = Res.INDOOR_OBJECT_X[listOffset][10]; - _indoorList._objects9._y = Res.MAP_OBJECT_Y[listOffset][10]; - _indoorList._objects9._frame = mazeObject._frame; - _indoorList._objects9._sprites = mazeObject._sprites; - _indoorList._objects9._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects9._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Block 11 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][29]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][29]) == mazeObject._position.y) { - if (_wo[27]) { - } else if (_wo[15] && _wo[19]) { - } else if (_wo[15] && _wo[14]) { - } else if (_wo[14] && _wo[9]) { - } else if (_wo[19] && _wo[9]) { - } else if (_indoorList._objects10._frame == -1) { - _indoorList._objects10._x = Res.INDOOR_OBJECT_X[listOffset][9]; - _indoorList._objects10._y = Res.MAP_OBJECT_Y[listOffset][9]; - _indoorList._objects10._frame = mazeObject._frame; - _indoorList._objects10._sprites = mazeObject._sprites; - _indoorList._objects10._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects10._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - - // Block 12 - if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][31]) == mazeObject._position.x - && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][31]) == mazeObject._position.y) { - if (_wo[27]) { - } else if (_wo[22] && _wo[21]) { - } else if (_wo[22] && _wo[24]) { - } else if (_wo[21] && _wo[19]) { - } else if (_wo[24] && _wo[19]) { - } else if (!_wo[14] && !_wo[10] && _indoorList._objects11._frame == -1) { - _indoorList._objects11._x = Res.INDOOR_OBJECT_X[listOffset][11]; - _indoorList._objects11._y = Res.MAP_OBJECT_Y[listOffset][11]; - _indoorList._objects11._frame = mazeObject._frame; - _indoorList._objects11._sprites = mazeObject._sprites; - _indoorList._objects11._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (mazeObject._flipped) - _indoorList._objects11._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } - } -} - -void InterfaceMap::setIndoorsWallPics() { - Map &map = *_vm->_map; - const Common::Point &mazePos = _vm->_party->_mazePosition; - Direction dir = _vm->_party->_mazeDirection; - - Common::fill(&_wp[0], &_wp[20], -1); - - for (uint idx = 0; idx < map._mobData._wallItems.size(); ++idx) { - MazeWallItem &wallItem = map._mobData._wallItems[idx]; - if (wallItem._direction != dir) - continue; - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][2]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][2])) { - if (_wp[1] == -1) { - _indoorList[148]._frame = wallItem._frame; - _indoorList[148]._sprites = wallItem._sprites; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][7]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][7])) { - if (!_wo[27] && _wp[1] == -1) { - _indoorList[123]._frame = wallItem._frame; - _indoorList[123]._sprites = wallItem._sprites; - _wp[4] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][5]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][5])) { - if (_wo[27] && _wo[25]) { - } else if (_wo[27] && _wo[28]) { - } else if (_wo[23] && _wo[25]) { - } else if (_wo[23] && _wo[28]) { - } else if (_wp[3] == -1) { - _indoorList[122]._frame = wallItem._frame; - _indoorList[122]._sprites = wallItem._sprites; - _wp[3] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][9]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][9])) { - if (_wo[27] && _wo[26]) { - } else if (_wo[27] && _wo[29]) { - } else if (_wo[24] && _wo[26]) { - } else if (_wo[24] && _wo[29]) { - } else if (_wp[5] == -1) { - _indoorList[124]._frame = wallItem._frame; - _indoorList[124]._sprites = wallItem._sprites; - _wp[5] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][14]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][14])) { - if (!_wo[22] && !_wo[27] && !_wp[8]) { - _indoorList[94]._frame = wallItem._frame; - _indoorList[94]._sprites = wallItem._sprites; - _wp[8] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][12]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][12])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[23]) { - } else if (_wo[22] && _wo[20]) { - } else if (_wo[23] && _wo[17]) { - } else if (_wo[20] && _wo[17]) { - } else if (_wp[7] == -1) { - _indoorList[93]._frame = wallItem._frame; - _indoorList[93]._sprites = wallItem._sprites; - _wp[7] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][16]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][16])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[24]) { - } else if (_wo[22] && _wo[21]) { - } else if (_wo[24] && _wo[19]) { - } else if (_wo[21] && _wo[19]) { - } else if (_wp[9] == -1) { - _indoorList[95]._frame = wallItem._frame; - _indoorList[95]._sprites = wallItem._sprites; - _wp[9] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][12]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][12])) { - if (_wo[27]) { - } else if (_wo[25] && _wo[28]) { - } else if (_wo[20] && _wo[16]) { - } else if (_wp[6] == -1) { - _indoorList[92]._frame = wallItem._frame; - _indoorList[92]._sprites = wallItem._sprites; - _wp[6] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][16]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][16])) { - if (!_wo[26] && !_wo[29] && !_wo[21] && !_wo[18] && _wp[10] == -1) { - _indoorList[96]._frame = wallItem._frame; - _indoorList[96]._sprites = wallItem._sprites; - _wp[10] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][27]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][27])) { - if (!_wo[27] && !_wo[22] && !_wo[15] && _wp[15] == -1) { - _indoorList[50]._frame = wallItem._frame; - _indoorList[50]._sprites = wallItem._sprites; - _wp[15] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][25]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][25])) { - if (_wo[27]) { - } else if (_wo[27] && _wo[22]) { - } else if (_wo[15] && _wo[17]) { - } else if (_wo[15] && _wo[12]) { - } else if (_wo[12] && _wo[7]) { - } else if (_wo[17] && _wo[7]) { - } else if (_wp[14] == -1) { - _indoorList[49]._frame = wallItem._frame; - _indoorList[49]._sprites = wallItem._sprites; - _wp[14] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[20]) { - } else if (_wo[22] && _wo[23]) { - } else if (_wo[20] && _wo[17]) { - } else if (_wo[23] && _wo[17]) { - } else if (_wo[12] && _wo[8]) { - } else if (_wp[13] == -1) { - _indoorList[48]._frame = wallItem._frame; - _indoorList[48]._sprites = wallItem._sprites; - _wp[13] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][29]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][29])) { - if (_wo[27] || _wo[22]) { - } else if (_wo[15] && _wo[19]) { - } else if (_wo[15] && _wo[14]) { - } else if (_wo[14] && _wo[9]) { - } else if (_wo[19] && _wo[9]) { - } else if (_wp[16] == -1) { - _indoorList[51]._frame = wallItem._frame; - _indoorList[51]._sprites = wallItem._sprites; - _wp[16] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) { - if (_wo[27]) { - } else if (_wo[22] && _wo[21]) { - } else if (_wo[22] && _wo[24]) { - } else if (_wo[21] && _wo[19]) { - } else if (_wo[24] && _wo[19]) { - } else if (!_wo[14] && !_wo[10] && _wp[17] == -1) { - _indoorList[52]._frame = wallItem._frame; - _indoorList[52]._sprites = wallItem._sprites; - _wp[17] = idx; - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) { - if (!_wo[27] && !_wo[20] && !_wo[12] && !_wo[23] && !_wo[8] && !_wo[30]) { - if (_wp[12] == -1) { - _indoorList[47]._frame = wallItem._frame; - _indoorList[47]._sprites = wallItem._sprites; - _wp[12] = idx; - } - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) { - if (!_wo[27] && !_wo[21] && !_wo[14] && !_wo[24] && !_wo[10] && !_wo[31]) { - if (_wp[18] == -1) { - _indoorList[53]._frame = wallItem._frame; - _indoorList[53]._sprites = wallItem._sprites; - _wp[18] = idx; - } - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) { - if (!_wo[25] && !_wo[28] && !_wo[20] && !_wo[11] && !_wo[16] && !_wo[30] && !_wo[32]) { - if (_wp[11] == -1) { - _indoorList[46]._frame = wallItem._frame; - _indoorList[46]._sprites = wallItem._sprites; - _wp[11] = idx; - } - } - } - - if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) && - mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) { - if (!_wo[26] && !_wo[20] && !_wo[21] && !_wo[13] && !_wo[18] && !_wo[31] && !_wo[33]) { - if (_wp[19] == -1) { - _indoorList[54]._frame = wallItem._frame; - _indoorList[54]._sprites = wallItem._sprites; - _wp[19] = idx; - } - } - } - } -} - -void InterfaceMap::setOutdoorsMonsters() { - Combat &combat = *_vm->_combat; - Map &map = *_vm->_map; - Party &party = *_vm->_party; - Direction dir = party._mazeDirection; - Common::Point pt = party._mazePosition; - - for (uint idx = 0; idx < map._mobData._monsters.size(); ++idx) { - MazeMonster &monster = map._mobData._monsters[idx]; - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][2]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][2])) { - monster._isAttacking = true; - if (combat._attackMonsters[0] == -1) { - _outdoorList[118]._frame = idx; - combat._attackMonsters[0] = idx; - } else if (combat._attackMonsters[1] == -1) { - _outdoorList[112]._frame = idx; - combat._attackMonsters[1] = idx; - } else if (combat._attackMonsters[2] == -1) { - _outdoorList[115]._frame = idx; - combat._attackMonsters[2] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][7]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][7])) { - monster._isAttacking = true; - if (combat._attackMonsters[3] == -1) { - _outdoorList[94]._frame = idx; - combat._attackMonsters[3] = idx; - } else if (combat._attackMonsters[4] == -1) { - _outdoorList[92]._frame = idx; - combat._attackMonsters[4] = idx; - } else if (combat._attackMonsters[5] == -1) { - _outdoorList[93]._frame = idx; - combat._attackMonsters[5] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][5]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][5])) { - monster._isAttacking = true; - if (combat._attackMonsters[12] == -1) { - _outdoorList[90]._frame = idx; - combat._attackMonsters[12] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][9]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][9])) { - monster._isAttacking = true; - if (combat._attackMonsters[13] == -1) { - _outdoorList[91]._frame = idx; - combat._attackMonsters[13] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][14]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][14])) { - monster._isAttacking = true; - if (combat._attackMonsters[6] == -1) { - _outdoorList[75]._frame = idx; - combat._attackMonsters[6] = idx; - } else if (combat._attackMonsters[7] == -1) { - _outdoorList[73]._frame = idx; - combat._attackMonsters[7] = idx; - } else if (combat._attackMonsters[8] == -1) { - _outdoorList[74]._frame = idx; - combat._attackMonsters[8] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][12]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][12])) { - monster._isAttacking = true; - if (combat._attackMonsters[14] == -1) { - _outdoorList[69]._frame = idx; - combat._attackMonsters[14] = idx; - } else if (combat._attackMonsters[20] == -1) { - _outdoorList[70]._frame = idx; - combat._attackMonsters[20] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][16]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][16])) { - monster._isAttacking = true; - if (combat._attackMonsters[15] == -1) { - _outdoorList[71]._frame = idx; - combat._attackMonsters[15] = idx; - } else if (combat._attackMonsters[21] == -1) { - _outdoorList[72]._frame = idx; - combat._attackMonsters[21] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][27]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][27])) { - monster._isAttacking = true; - if (combat._attackMonsters[9] == -1) { - _outdoorList[52]._frame = idx; - combat._attackMonsters[9] = idx; - } else if (combat._attackMonsters[10] == -1) { - _outdoorList[50]._frame = idx; - combat._attackMonsters[10] = idx; - } else if (combat._attackMonsters[11] == -1) { - _outdoorList[51]._frame = idx; - combat._attackMonsters[11] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][25]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][25])) { - monster._isAttacking = true; - if (combat._attackMonsters[16] == -1) { - _outdoorList[44]._frame = idx; - combat._attackMonsters[16] = idx; - } else if (combat._attackMonsters[22] == -1) { - _outdoorList[42]._frame = idx; - combat._attackMonsters[22] = idx; - } else if (combat._attackMonsters[24] == -1) { - _outdoorList[43]._frame = idx; - combat._attackMonsters[24] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][23]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][23])) { - monster._isAttacking = true; - if (combat._attackMonsters[18] == -1) { - _outdoorList[48]._frame = idx; - combat._attackMonsters[18] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][29]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][29])) { - monster._isAttacking = true; - if (combat._attackMonsters[17] == -1) { - _outdoorList[47]._frame = idx; - combat._attackMonsters[17] = idx; - } else if (combat._attackMonsters[23] == -1) { - _outdoorList[45]._frame = idx; - combat._attackMonsters[23] = idx; - } else if (combat._attackMonsters[25] == -1) { - _outdoorList[46]._frame = idx; - combat._attackMonsters[25] = idx; - } - } - - if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][31]) && - monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][31])) { - monster._isAttacking = true; - if (combat._attackMonsters[19] == -1) { - _outdoorList[49]._frame = idx; - combat._attackMonsters[19] = idx; - } - } - } - - _outdoorList[115]._x = 58; - _outdoorList[93]._x = 25; - _outdoorList[74]._x = 9; - _outdoorList[51]._x = -1; - _outdoorList[43]._x = -26; - _outdoorList[46]._x = 23; - _outdoorList[48]._x = -58; - _outdoorList[49]._x = 40; - _outdoorList[69]._x = -65; - _outdoorList[70]._x = -85; - _outdoorList[71]._x = 49; - _outdoorList[72]._x = 65; - _outdoorList[90]._x = -112; - _outdoorList[91]._x = 98; - - if (combat._attackMonsters[1] != -1 && combat._attackMonsters[2] == -1) { - _outdoorList[118]._x = 31; - _outdoorList[112]._x = -36; - } else { - _outdoorList[118]._x = -5; - _outdoorList[112]._x = -67; - } - if (combat._attackMonsters[4] != -1 && combat._attackMonsters[5] == -1) { - _outdoorList[94]._x = 8; - _outdoorList[92]._x = -23; - } else { - _outdoorList[94]._x = -7; - _outdoorList[92]._x = -38; - } - if (combat._attackMonsters[7] != -1 && combat._attackMonsters[8] == -1) { - _outdoorList[75]._x = 0; - _outdoorList[73]._x = -16; - } else { - _outdoorList[75]._x = -8; - _outdoorList[73]._x = -24; - } - if (combat._attackMonsters[10] != -1 && combat._attackMonsters[11] == -1) { - _outdoorList[52]._x = -5; - _outdoorList[50]._x = -13; - } else { - _outdoorList[52]._x = -9; - _outdoorList[50]._x = -17; - } - if (combat._attackMonsters[22] != -1 && combat._attackMonsters[24] == -1) { - _outdoorList[44]._x = -27; - _outdoorList[42]._x = -37; - } else { - _outdoorList[44]._x = -34; - _outdoorList[42]._x = -41; - } - if (combat._attackMonsters[23] != -1 && combat._attackMonsters[25] == -1) { - _outdoorList[47]._x = 20; - _outdoorList[45]._x = -12; - } else { - _outdoorList[47]._x = 16; - _outdoorList[45]._x = -16; - } - - for (int idx = 0; idx < 26; ++idx) { - DrawStruct &ds = _outdoorList[Res.OUTDOOR_MONSTER_INDEXES[idx]]; - - if (ds._frame != -1) { - ds._flags &= ~0xfff; - - // TODO: Double-check.. this section looks *weird* - MazeMonster &monster = map._mobData._monsters[ds._frame]; - MonsterStruct &monsterData = *monster._monsterData; - - ds._frame = monster._frame; - - if (monster._effect2) { - ds._flags = Res.MONSTER_EFFECT_FLAGS[monster._effect2 - 1][monster._effect3]; - } - - if (monster._frame > 7) { - monster._frame -= 8; - ds._sprites = monster._attackSprites; - } else { - ds._sprites = monster._sprites; - } - - ds._y = Res.OUTDOOR_MONSTERS_Y[idx]; - - if (monsterData._flying) { - ds._x += Res.COMBAT_FLOAT_X[_combatFloatCounter]; - ds._y += Res.COMBAT_FLOAT_Y[_combatFloatCounter]; - } - } - } - // TODO -} - -void InterfaceMap::setOutdoorsObjects() { - Map &map = *_vm->_map; - Party &party = *_vm->_party; - const Common::Point &pt = party._mazePosition; - Direction dir = party._mazeDirection; - int posIndex; - - for (uint idx = 0; idx < map._mobData._objects.size(); ++idx) { - MazeObject &obj = map._mobData._objects[idx]; - - if (_vm->_files->_isDarkCc) { - posIndex = obj._spriteId == 47 ? 1 : 0; - } else { - posIndex = obj._spriteId == 113 ? 1 : 0; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][2]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][2]) && - _outdoorList[111]._frame == -1) { - DrawStruct &ds = _outdoorList[111]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][0]; - ds._y = Res.MAP_OBJECT_Y[posIndex][0]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - _objNumber = idx; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][7]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][7]) && - _outdoorList[87]._frame == -1) { - DrawStruct &ds = _outdoorList[87]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][1]; - ds._y = Res.MAP_OBJECT_Y[posIndex][1]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][5]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][5]) && - _outdoorList[88]._frame == -1) { - DrawStruct &ds = _outdoorList[88]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][2]; - ds._y = Res.MAP_OBJECT_Y[posIndex][2]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][9]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][9]) && - _outdoorList[89]._frame == -1) { - DrawStruct &ds = _outdoorList[89]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][3]; - ds._y = Res.MAP_OBJECT_Y[posIndex][3]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][14]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][14]) && - _outdoorList[66]._frame == -1) { - DrawStruct &ds = _outdoorList[66]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][4]; - ds._y = Res.MAP_OBJECT_Y[posIndex][4]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][12]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][12]) && - _outdoorList[67]._frame == -1) { - DrawStruct &ds = _outdoorList[67]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][5]; - ds._y = Res.MAP_OBJECT_Y[posIndex][5]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][16]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][16]) && - _outdoorList[68]._frame == -1) { - DrawStruct &ds = _outdoorList[68]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][6]; - ds._y = Res.MAP_OBJECT_Y[posIndex][6]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][27]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][27]) && - _outdoorList[37]._frame == -1) { - DrawStruct &ds = _outdoorList[37]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][7]; - ds._y = Res.MAP_OBJECT_Y[posIndex][7]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][25]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][25]) && - _outdoorList[38]._frame == -1) { - DrawStruct &ds = _outdoorList[38]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][8]; - ds._y = Res.MAP_OBJECT_Y[posIndex][8]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][23]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][23]) && - _outdoorList[40]._frame == -1) { - DrawStruct &ds = _outdoorList[40]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][10]; - ds._y = Res.MAP_OBJECT_Y[posIndex][10]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][29]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][29]) && - _outdoorList[39]._frame == -1) { - DrawStruct &ds = _outdoorList[39]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][9]; - ds._y = Res.MAP_OBJECT_Y[posIndex][9]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - - if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][31]) && - obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][31]) && - _outdoorList[41]._frame == -1) { - DrawStruct &ds = _outdoorList[41]; - ds._x = Res.OUTDOOR_OBJECT_X[posIndex][11]; - ds._y = Res.MAP_OBJECT_Y[posIndex][11]; - ds._frame = obj._frame; - ds._sprites = obj._sprites; - - ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; - if (obj._flipped) - ds._flags |= SPRFLAG_HORIZ_FLIPPED; - } - } -} - -void InterfaceMap::drawIndoors() { - Map &map = *_vm->_map; - Windows &windows = *_vm->_windows; - int surfaceId; - - // Draw any surface tiles on top of the default ground - for (int cellIndex = 0; cellIndex < 25; ++cellIndex) { - map.getCell(Res.DRAW_NUMBERS[cellIndex]); - - DrawStruct &drawStruct = _indoorList._groundTiles[cellIndex]; - SpriteResource &sprites = map._surfaceSprites[map._currentSurfaceId]; - drawStruct._sprites = sprites.empty() ? (SpriteResource *)nullptr : &sprites; - - surfaceId = map.mazeData()._surfaceTypes[map._currentSurfaceId]; - if (surfaceId == SURFTYPE_WATER || surfaceId == SURFTYPE_LAVA || - surfaceId == SURFTYPE_SEWER) { - drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0]; - drawStruct._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0; - } else { - drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0]; - drawStruct._flags = _flipGround ? SPRFLAG_HORIZ_FLIPPED : 0; - } - } - - if (!_wo[27] && !_wo[20] && !_wo[23] && !_wo[12] && !_wo[8] && !_wo[30]) { - if (_wo[39]) - _indoorList._swl_4F4L._frame = 22; - else if (_wo[83]) - _indoorList._swl_4F4L._frame = 46; - } - - if (!_wo[27] && !_wo[22] && !_wo[17] && !_wo[12] && !_wo[8]) { - if (_wo[38]) - _indoorList._swl_4F3L._frame = 20; - else if (_wo[82]) - _indoorList._swl_4F3L._frame = 44; - } - - if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[2] && !_wo[7]) { - if (_wo[37]) - _indoorList._swl_4F2L._frame = 18; - else if (_wo[81]) - _indoorList._swl_4F2L._frame = 42; - } - - if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[6]) { - if (_wo[36]) - _indoorList._swl_4F1L._frame = 16; - else if (_wo[80]) - _indoorList._swl_4F1L._frame = 40; - } - - if (!_wo[27] && !_wo[21] && !_wo[24] && !_wo[14] && !_wo[10] && !_wo[31]) { - if (_wo[43]) - _indoorList._swl_4F4R._frame = 23; - else if (_wo[87]) - _indoorList._swl_4F4R._frame = 47; - } - - if (!_wo[27] && !_wo[22] && !_wo[19] && !_wo[14] && !_wo[10]) { - if (_wo[42]) - _indoorList._swl_4F3R._frame = 21; - else if (_wo[86]) - _indoorList._swl_4F3R._frame = 45; - } - - if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[5] && !_wo[9]) { - if (_wo[41]) - _indoorList._swl_4F2R._frame = 19; - else if (_wo[85]) - _indoorList._swl_4F2R._frame = 43; - } - - if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[6]) { - if (_wo[40]) - _indoorList._swl_4F1R._frame = 17; - else if (_wo[84]) - _indoorList._swl_4F1R._frame = 41; - } - - if (!_wo[25] && !_wo[28] && !_wo[20] && !_wo[11] && - !_wo[16] && !_wo[30] && !_wo[32]) { - if (_wo[88]) - _indoorList._fwl_4F4L._frame = 7; - else if (_wo[78]) - _indoorList._fwl_4F4L._frame = 16; - else if (_wo[148]) - _indoorList._fwl_4F4L._frame = _overallFrame + 1; - else if (_wo[108]) - _indoorList._fwl_4F4L._frame = 8; - else if (_wo[168]) - _indoorList._fwl_4F4L._frame = 10; - else if (_wo[128]) - _indoorList._fwl_4F4L._frame = 9; - else if (_wo[34]) - _indoorList._fwl_4F4L._frame = 0; - else if (_wo[188]) - _indoorList._fwl_4F4L._frame = 15; - else if (_wo[208]) - _indoorList._fwl_4F4L._frame = 14; - else if (_wo[228]) - _indoorList._fwl_4F4L._frame = 6; - else if (_wo[248]) - _indoorList._fwl_4F4L._frame = 11; - else if (_wo[268]) - _indoorList._fwl_4F4L._frame = 12; - else if (_wo[288]) - _indoorList._fwl_4F4L._frame = 13; - } - - if (!_wo[26] && !_wo[29] && !_wo[21] && !_wo[13] && !_wo[18] && !_wo[31] && !_wo[33]) { - if (_wo[93]) - _indoorList._fwl_4F4R._frame = 7; - else if (_wo[79]) - _indoorList._fwl_4F4R._frame = 16; - else if (_wo[153]) - _indoorList._fwl_4F4R._frame = _overallFrame + 1; - else if (_wo[113]) - _indoorList._fwl_4F4R._frame = 8; - else if (_wo[173]) - _indoorList._fwl_4F4R._frame = 10; - else if (_wo[133]) - _indoorList._fwl_4F4R._frame = 9; - else if (_wo[35]) - _indoorList._fwl_4F4R._frame = 0; - else if (_wo[79]) - _indoorList._fwl_4F4R._frame = 15; - else if (_wo[213]) - _indoorList._fwl_4F4R._frame = 14; - else if (_wo[233]) - _indoorList._fwl_4F4R._frame = 6; - else if (_wo[253]) - _indoorList._fwl_4F4R._frame = 11; - else if (_wo[273]) - _indoorList._fwl_4F4R._frame = 12; - else if (_wo[293]) - _indoorList._fwl_4F4R._frame = 13; - } - - if (!_wo[25] && !_wo[28] && !_wo[20] && !_wo[11] && !_wo[16] && !_wo[30]) { - if (_wo[32]) - _indoorList._swl_3F4L._frame = 14; - else if (_wo[76]) - _indoorList._swl_3F4L._frame = 38; - } - - if (!_wo[26] && !_wo[29] && !_wo[21] && !_wo[13] && !_wo[18] && !_wo[31]) { - if (_wo[33]) - _indoorList._swl_3F1R._frame = 15; - else if (_wo[77]) - _indoorList._swl_3F1R._frame = 39; - } - - if (_wo[28] && _wo[27]) { - } else if (_wo[28] && _wo[12]) { - } else if (_wo[28] && _wo[23]) { - } else if (_wo[28] && _wo[8]) { - } else if (_wo[25] && _wo[27]) { - } else if (_wo[25] && _wo[12]) { - } else if (_wo[25] && _wo[23]) { - } else if (_wo[25] && _wo[8]) { - } else if (_wo[11] && _wo[27]) { - } else if (_wo[11] && _wo[12]) { - } else if (_wo[11] && _wo[23]) { - } else if (_wo[11] && _wo[8]) { - } else if (_wo[17] && _wo[27]) { - } else if (_wo[17] && _wo[12]) { - } else if (_wo[17] && _wo[23]) { - } else if (_wo[17] && _wo[8]) { - } else if (_wo[20]) { - } else if (_wo[30]) { - _indoorList._swl_3F3L._frame = 12; - } else if (_wo[74]) { - _indoorList._swl_3F3L._frame = 36; - } - - if (_wo[29] && _wo[27]) { - } else if (_wo[29] && _wo[14]) { - } else if (_wo[29] && _wo[24]) { - } else if (_wo[29] && _wo[10]) { - } else if (_wo[26] && _wo[27]) { - } else if (_wo[26] && _wo[14]) { - } else if (_wo[26] && _wo[24]) { - } else if (_wo[26] && _wo[10]) { - } else if (_wo[13] && _wo[27]) { - } else if (_wo[13] && _wo[14]) { - } else if (_wo[13] && _wo[24]) { - } else if (_wo[13] && _wo[10]) { - } else if (_wo[19] && _wo[27]) { - } else if (_wo[19] && _wo[24]) { - } else if (_wo[19] && _wo[10]) { - } else if (_wo[21]) { - } else if (_wo[31]) { - _indoorList._swl_3F2R._frame = 13; - } else if (_wo[75]) { - _indoorList._swl_3F2R._frame = 37; - } - - if (!_wo[27] && !_wo[20] && !_wo[12] && !_wo[23] && !_wo[8] && !_wo[30]) { - if (_wo[89]) - _indoorList._fwl_4F3L._frame = 7; - else if (_wo[44]) - _indoorList._fwl_4F3L._frame = 16; - else if (_wo[149]) - _indoorList._fwl_4F3L._frame = _overallFrame + 1; - else if (_wo[109]) - _indoorList._fwl_4F3L._frame = 8; - else if (_wo[169]) - _indoorList._fwl_4F3L._frame = 10; - else if (_wo[129]) - _indoorList._fwl_4F3L._frame = 9; - else if (_wo[0]) - _indoorList._fwl_4F3L._frame = 0; - else if (_wo[189]) - _indoorList._fwl_4F3L._frame = 15; - else if (_wo[209]) - _indoorList._fwl_4F3L._frame = 14; - else if (_wo[229]) - _indoorList._fwl_4F3L._frame = 6; - else if (_wo[249]) - _indoorList._fwl_4F3L._frame = 11; - else if (_wo[269]) - _indoorList._fwl_4F3L._frame = 12; - else if (_wo[289]) - _indoorList._fwl_4F3L._frame = 13; - } - - if (_wo[22] && _wo[20]) { - } else if (_wo[22] && _wo[23]) { - } else if (_wo[20] && _wo[17]) { - } else if (_wo[23] && _wo[17]) { - } else if (_wo[12]) { - } else if (_wo[8]) { - } else if (_wo[90]) { - _indoorList._fwl_4F2L._frame = 7; - } else if (_wo[45]) { - _indoorList._fwl_4F2L._frame = 16; - } else if (_wo[150]) { - _indoorList._fwl_4F2L._frame = _overallFrame + 1; - } else if (_wo[110]) { - _indoorList._fwl_4F2L._frame = 8; - } else if (_wo[170]) { - _indoorList._fwl_4F2L._frame = 10; - } else if (_wo[130]) { - _indoorList._fwl_4F2L._frame = 9; - } else if (_wo[1]) { - _indoorList._fwl_4F2L._frame = 0; - } else if (_wo[190]) { - _indoorList._fwl_4F2L._frame = 15; - } else if (_wo[210]) { - _indoorList._fwl_4F2L._frame = 14; - } else if (_wo[230]) { - _indoorList._fwl_4F2L._frame = 6; - } else if (_wo[250]) { - _indoorList._fwl_4F2L._frame = 11; - } else if (_wo[270]) { - _indoorList._fwl_4F2L._frame = 12; - } else if (_wo[290]) { - _indoorList._fwl_4F2L._frame = 13; - } - - if (_wo[15] && _wo[17]) { - } else if (_wo[15] && _wo[12]) { - } else if (_wo[12] && _wo[7]) { - } else if (_wo[17] && _wo[7]) { - } else if (_wo[91]) { - _indoorList._fwl_4F1L._frame = 7; - } else if (_wo[46]) { - _indoorList._fwl_4F1L._frame = 16; - } else if (_wo[151]) { - _indoorList._fwl_4F1L._frame = _overallFrame + 1; - } else if (_wo[111]) { - _indoorList._fwl_4F1L._frame = 8; - } else if (_wo[171]) { - _indoorList._fwl_4F1L._frame = 10; - } else if (_wo[131]) { - _indoorList._fwl_4F1L._frame = 9; - } else if (_wo[2]) { - _indoorList._fwl_4F1L._frame = 0; - } else if (_wo[191]) { - _indoorList._fwl_4F1L._frame = 15; - } else if (_wo[211]) { - _indoorList._fwl_4F1L._frame = 14; - } else if (_wo[231]) { - _indoorList._fwl_4F1L._frame = 6; - } else if (_wo[251]) { - _indoorList._fwl_4F1L._frame = 11; - } else if (_wo[271]) { - _indoorList._fwl_4F1L._frame = 12; - } else if (_wo[291]) { - _indoorList._fwl_4F1L._frame = 13; - } - - if (!_wo[27] && !_wo[21] && !_wo[14] && !_wo[24] && !_wo[10] && !_wo[31]) { - if (_wo[92]) { - _indoorList._fwl_4F3R._frame = 7; - } else if (_wo[47]) { - _indoorList._fwl_4F3R._frame = 16; - } else if (_wo[152]) { - _indoorList._fwl_4F3R._frame = _overallFrame + 1; - } else if (_wo[112]) { - _indoorList._fwl_4F3R._frame = 8; - } else if (_wo[172]) { - _indoorList._fwl_4F3R._frame = 10; - } else if (_wo[132]) { - _indoorList._fwl_4F3R._frame = 9; - } else if (_wo[3]) { - _indoorList._fwl_4F3R._frame = 0; - } else if (_wo[192]) { - _indoorList._fwl_4F3R._frame = 15; - } else if (_wo[212]) { - _indoorList._fwl_4F3R._frame = 14; - } else if (_wo[232]) { - _indoorList._fwl_4F3R._frame = 6; - } else if (_wo[252]) { - _indoorList._fwl_4F3R._frame = 11; - } else if (_wo[272]) { - _indoorList._fwl_4F3R._frame = 12; - } else if (_wo[292]) { - _indoorList._fwl_4F3R._frame = 13; - } - } - - if (_wo[22] && _wo[21]) { - } else if (_wo[22] && _wo[24]) { - } else if (_wo[21] && _wo[19]) { - } else if (_wo[24] && _wo[19]) { - } else if (_wo[14] || _wo[10]) { - } else if (_wo[94]) { - _indoorList._fwl_4F2R._frame = 7; - } else if (_wo[48]) { - _indoorList._fwl_4F2R._frame = 16; - } else if (_wo[154]) { - _indoorList._fwl_4F2R._frame = _overallFrame + 1; - } else if (_wo[114]) { - _indoorList._fwl_4F2R._frame = 8; - } else if (_wo[174]) { - _indoorList._fwl_4F2R._frame = 10; - } else if (_wo[134]) { - _indoorList._fwl_4F2R._frame = 9; - } else if (_wo[4]) { - _indoorList._fwl_4F2R._frame = 0; - } else if (_wo[194]) { - _indoorList._fwl_4F2R._frame = 15; - } else if (_wo[214]) { - _indoorList._fwl_4F2R._frame = 14; - } else if (_wo[234]) { - _indoorList._fwl_4F2R._frame = 6; - } else if (_wo[254]) { - _indoorList._fwl_4F2R._frame = 11; - } else if (_wo[274]) { - _indoorList._fwl_4F2R._frame = 12; - } else if (_wo[294]) { - _indoorList._fwl_4F2R._frame = 13; - } - - if (_wo[15] && _wo[19]) { - } else if (_wo[15] && _wo[14]) { - } else if (_wo[14] && _wo[9]) { - } else if (_wo[19] && _wo[9]) { - } else if (_wo[95]) { - _indoorList._fwl_4F1R._frame = 7; - } else if (_wo[49]) { - _indoorList._fwl_4F1R._frame = 16; - } else if (_wo[155]) { - _indoorList._fwl_4F1R._frame = _overallFrame + 1; - } else if (_wo[115]) { - _indoorList._fwl_4F1R._frame = 8; - } else if (_wo[175]) { - _indoorList._fwl_4F1R._frame = 10; - } else if (_wo[135]) { - _indoorList._fwl_4F1R._frame = 9; - } else if (_wo[5]) { - _indoorList._fwl_4F1R._frame = 0; - } else if (_wo[195]) { - _indoorList._fwl_4F1R._frame = 15; - } else if (_wo[215]) { - _indoorList._fwl_4F1R._frame = 14; - } else if (_wo[235]) { - _indoorList._fwl_4F1R._frame = 6; - } else if (_wo[255]) { - _indoorList._fwl_4F1R._frame = 11; - } else if (_wo[275]) { - _indoorList._fwl_4F1R._frame = 12; - } else if (_wo[295]) { - _indoorList._fwl_4F1R._frame = 13; - } - - if (_wo[27] || _wo[22] || _wo[15] || _wo[96]) { - } else if (_wo[50]) { - _indoorList._fwl_4F._frame = 16; - } else if (_wo[156]) { - _indoorList._fwl_4F._frame = _overallFrame + 1; - } else if (_wo[116]) { - _indoorList._fwl_4F._frame = 8; - } else if (_wo[176]) { - _indoorList._fwl_4F._frame = 10; - } else if (_wo[136]) { - _indoorList._fwl_4F._frame = 9; - } else if (_wo[6]) { - _indoorList._fwl_4F._frame = 0; - } else if (_wo[196]) { - _indoorList._fwl_4F._frame = 15; - } else if (_wo[216]) { - _indoorList._fwl_4F._frame = 14; - } else if (_wo[236]) { - _indoorList._fwl_4F._frame = 6; - } else if (_wo[256]) { - _indoorList._fwl_4F._frame = 11; - } else if (_wo[276]) { - _indoorList._fwl_4F._frame = 12; - } else if (_wo[296]) { - _indoorList._fwl_4F._frame = 13; - } - - if (!_wo[27] && !_wo[22] && !_wo[15]) { - if (_wo[7]) - _indoorList._swl_3F1L._frame = 8; - else if (_wo[51]) - _indoorList._swl_3F1L._frame = 32; - } - - if (_wo[22] && _wo[23]) { - } else if (_wo[22] && _wo[20]) { - } else if (_wo[17] && _wo[23]) { - } else if (_wo[17] && _wo[20]) { - } else if (_wo[8]) { - _indoorList._swl_3F2L._frame = 10; - } else if (_wo[52]) { - _indoorList._swl_3F2L._frame = 34; - } - - if (_wo[27] || _wo[22] || _wo[15]) { - } else if (_wo[9]) { - _indoorList._swl_3F4R._frame = 9; - } else if (_wo[53]) { - _indoorList._swl_3F4R._frame = 33; - } - - if (_wo[22] && _wo[24]) { - } else if (_wo[22] && _wo[21]) { - } else if (_wo[19] && _wo[24]) { - } else if (_wo[19] && _wo[21]) { - } else if (_wo[14]) { - } else if (_wo[10]) { - _indoorList._swl_3F3R._frame = 11; - } else if (_wo[54]) { - _indoorList._swl_3F3R._frame = 35; - } - - if (_wo[25] || _wo[28] || _wo[20] || _wo[16]) { - } else if (_wo[97]) { - _indoorList._fwl_3F2L._frame = 24; - } else if (_wo[55]) { - _indoorList._fwl_3F2L._frame = 33; - } else if (_wo[137]) { - _indoorList._fwl_3F2L._frame = 26; - } else if (_wo[157]) { - _indoorList._fwl_3F2L._frame = _overallFrame + 18; - } else if (_wo[117]) { - _indoorList._fwl_3F2L._frame = 25; - } else if (_wo[177]) { - _indoorList._fwl_3F2L._frame = 27; - } else if (_wo[11]) { - _indoorList._fwl_3F2L._frame = 17; - } else if (_wo[197]) { - _indoorList._fwl_3F2L._frame = 32; - } else if (_wo[217]) { - _indoorList._fwl_3F2L._frame = 31; - } else if (_wo[237]) { - _indoorList._fwl_3F2L._frame = 23; - } else if (_wo[257]) { - _indoorList._fwl_3F2L._frame = 28; - } else if (_wo[277]) { - _indoorList._fwl_3F2L._frame = 29; - } else if (_wo[297]) { - _indoorList._fwl_3F2L._frame = 30; - } - - if (_wo[22] && _wo[23]) { - } else if (_wo[22] && _wo[20]) { - } else if (_wo[23] && _wo[17]) { - } else if (_wo[20] && _wo[17]) { - } else if (_wo[98]) { - _indoorList._fwl_3F1L._frame = 24; - } else if (_wo[56]) { - _indoorList._fwl_3F1L._frame = 33; - } else if (_wo[178]) { - _indoorList._fwl_3F1L._frame = 27; - } else if (_wo[118]) { - _indoorList._fwl_3F1L._frame = 25; - } else if (_wo[158]) { - _indoorList._fwl_3F1L._frame = _overallFrame + 18; - } else if (_wo[138]) { - _indoorList._fwl_3F1L._frame = 26; - } else if (_wo[12]) { - _indoorList._fwl_3F1L._frame = 17; - } else if (_wo[198]) { - _indoorList._fwl_3F1L._frame = 32; - } else if (_wo[218]) { - _indoorList._fwl_3F1L._frame = 31; - } else if (_wo[238]) { - _indoorList._fwl_3F1L._frame = 23; - } else if (_wo[258]) { - _indoorList._fwl_3F1L._frame = 28; - } else if (_wo[278]) { - _indoorList._fwl_3F1L._frame = 29; - } else if (_wo[298]) { - _indoorList._fwl_3F1L._frame = 30; - } - - if (_wo[26] || _wo[29] || _wo[21] || _wo[18]) { - } else if (_wo[99]) { - _indoorList._fwl_3F2R._frame = 24; - } else if (_wo[57]) { - _indoorList._fwl_3F2R._frame = 33; - } else if (_wo[139]) { - _indoorList._fwl_3F2R._frame = 26; - } else if (_wo[159]) { - _indoorList._fwl_3F2R._frame = _overallFrame + 18; - } else if (_wo[119]) { - _indoorList._fwl_3F2R._frame = 25; - } else if (_wo[179]) { - _indoorList._fwl_3F2R._frame = 27; - } else if (_wo[13]) { - _indoorList._fwl_3F2R._frame = 17; - } else if (_wo[199]) { - _indoorList._fwl_3F2R._frame = 32; - } else if (_wo[219]) { - _indoorList._fwl_3F2R._frame = 31; - } else if (_wo[239]) { - _indoorList._fwl_3F2R._frame = 23; - } else if (_wo[259]) { - _indoorList._fwl_3F2R._frame = 28; - } else if (_wo[279]) { - _indoorList._fwl_3F2R._frame = 29; - } else if (_wo[299]) { - _indoorList._fwl_3F2R._frame = 30; - } - - if (_wo[22] && _wo[24]) { - } else if (_wo[22] && _wo[21]) { - } else if (_wo[24] && _wo[19]) { - } else if (_wo[21] && _wo[19]) { - } else if (_wo[100]) { - _indoorList._fwl_3F1R._frame = 24; - } else if (_wo[58]) { - _indoorList._fwl_3F1R._frame = 33; - } else if (_wo[140]) { - _indoorList._fwl_3F1R._frame = 26; - } else if (_wo[160]) { - _indoorList._fwl_3F1R._frame = _overallFrame + 18; - } else if (_wo[120]) { - _indoorList._fwl_3F1R._frame = 25; - } else if (_wo[180]) { - _indoorList._fwl_3F1R._frame = 27; - } else if (_wo[14]) { - _indoorList._fwl_3F1R._frame = 17; - } else if (_wo[200]) { - _indoorList._fwl_3F1R._frame = 32; - } else if (_wo[220]) { - _indoorList._fwl_3F1R._frame = 31; - } else if (_wo[240]) { - _indoorList._fwl_3F1R._frame = 23; - } else if (_wo[260]) { - _indoorList._fwl_3F1R._frame = 28; - } else if (_wo[280]) { - _indoorList._fwl_3F1R._frame = 29; - } else if (_wo[300]) { - _indoorList._fwl_3F1R._frame = 30; - } - - if (_wo[22] || _wo[27]) { - } else if (_wo[101]) { - _indoorList._fwl_3F._frame = 24; - } else if (_wo[59]) { - _indoorList._fwl_3F._frame = 33; - } else if (_wo[141]) { - _indoorList._fwl_3F._frame = 26; - } else if (_wo[161]) { - _indoorList._fwl_3F._frame = _overallFrame + 18; - } else if (_wo[121]) { - _indoorList._fwl_3F._frame = 25; - } else if (_wo[181]) { - _indoorList._fwl_3F._frame = 27; - } else if (_wo[15]) { - _indoorList._fwl_3F._frame = 17; - } else if (_wo[201]) { - _indoorList._fwl_3F._frame = 32; - } else if (_wo[221]) { - _indoorList._fwl_3F._frame = 31; - } else if (_wo[241]) { - _indoorList._fwl_3F._frame = 23; - } else if (_wo[261]) { - _indoorList._fwl_3F._frame = 28; - } else if (_wo[281]) { - _indoorList._fwl_3F._frame = 29; - } else if (_wo[301]) { - _indoorList._fwl_3F._frame = 30; - } - - if (_wo[25] || _wo[28] || _wo[20]) { - } else if (_wo[16]) { - _indoorList._swl_2F2L._frame = 6; - } else if (_wo[60]) { - _indoorList._swl_2F2L._frame = 30; - } - - if (_wo[27] || _wo[22]) { - } else if (_wo[17]) { - _indoorList._swl_2F1L._frame = 4; - } else if (_wo[61]) { - _indoorList._swl_2F1L._frame = 28; - } - - if (_wo[26] || _wo[29] || _wo[21]) { - } else if (_wo[18]) { - _indoorList._swl_2F2R._frame = 7; - } else if (_wo[62]) { - _indoorList._swl_2F2R._frame = 31; - } - - if (_wo[27] || _wo[22]) { - } else if (_wo[19]) { - _indoorList._swl_2F1R._frame = 5; - } else if (_wo[63]) { - _indoorList._swl_2F1R._frame = 29; - } - - if (_wo[27] && _wo[25]) { - } else if (_wo[27] && _wo[28]) { - } else if (_wo[23] & _wo[25]) { - } else if (_wo[23] && _wo[28]) { - } else if (_wo[102]) { - _indoorList._fwl_2F1L._frame = 7; - } else if (_wo[64]) { - _indoorList._fwl_2F1L._frame = 16; - } else if (_wo[182]) { - _indoorList._fwl_2F1L._frame = 10; - } else if (_wo[122]) { - _indoorList._fwl_2F1L._frame = 8; - } else if (_wo[142]) { - _indoorList._fwl_2F1L._frame = 9; - } else if (_wo[162]) { - _indoorList._fwl_2F1L._frame = _overallFrame + 1; - } else if (_wo[20]) { - _indoorList._fwl_2F1L._frame = 0; - } else if (_wo[202]) { - _indoorList._fwl_2F1L._frame = 15; - } else if (_wo[222]) { - _indoorList._fwl_2F1L._frame = 14; - } else if (_wo[242]) { - _indoorList._fwl_2F1L._frame = 6; - } else if (_wo[262]) { - _indoorList._fwl_2F1L._frame = 11; - } else if (_wo[282]) { - _indoorList._fwl_2F1L._frame = 12; - } else if (_wo[302]) { - _indoorList._fwl_2F1L._frame = 13; - } - - if (_wo[27] && _wo[26]) { - } else if (_wo[27] && _wo[29]) { - } else if (_wo[24] && _wo[26]) { - } else if (_wo[24] && _wo[29]) { - } else if (_wo[103]) { - _indoorList._fwl_2F1R._frame = 7; - } else if (_wo[65]) { - _indoorList._fwl_2F1R._frame = 16; - } else if (_wo[183]) { - _indoorList._fwl_2F1R._frame = 10; - } else if (_wo[123]) { - _indoorList._fwl_2F1R._frame = 8; - } else if (_wo[143]) { - _indoorList._fwl_2F1R._frame = 9; - } else if (_wo[163]) { - _indoorList._fwl_2F1R._frame = _overallFrame + 1; - } else if (_wo[21]) { - _indoorList._fwl_2F1R._frame = 0; - } else if (_wo[203]) { - _indoorList._fwl_2F1R._frame = 15; - } else if (_wo[223]) { - _indoorList._fwl_2F1R._frame = 14; - } else if (_wo[243]) { - _indoorList._fwl_2F1R._frame = 6; - } else if (_wo[263]) { - _indoorList._fwl_2F1R._frame = 11; - } else if (_wo[283]) { - _indoorList._fwl_2F1R._frame = 12; - } else if (_wo[303]) { - _indoorList._fwl_2F1R._frame = 13; - } - - if (_wo[27]) { - } else if (_wo[104]) { - _indoorList._fwl_2F._frame = 7; - } else if (_wo[66]) { - _indoorList._fwl_2F._frame = 16; - } else if (_wo[184]) { - _indoorList._fwl_2F._frame = 10; - } else if (_wo[124]) { - _indoorList._fwl_2F._frame = 8; - } else if (_wo[144]) { - _indoorList._fwl_2F._frame = 9; - } else if (_wo[164]) { - _indoorList._fwl_2F._frame = _overallFrame + 1; - } else if (_wo[22]) { - _indoorList._fwl_2F._frame = 0; - } else if (_wo[204]) { - _indoorList._fwl_2F._frame = 15; - } else if (_wo[224]) { - _indoorList._fwl_2F._frame = 14; - } else if (_wo[244]) { - _indoorList._fwl_2F._frame = 6; - } else if (_wo[264]) { - _indoorList._fwl_2F._frame = 11; - } else if (_wo[284]) { - _indoorList._fwl_2F._frame = 12; - } else if (_wo[304]) { - _indoorList._fwl_2F._frame = 13; - } - - if (_wo[27]) { - } else if (_wo[23]) { - _indoorList._swl_1F1L._frame = 2; - } else if (_wo[67]) { - _indoorList._swl_1F1L._frame = 26; - } - - if (_wo[27]) { - } else if (_wo[24]) { - _indoorList._swl_1F1R._frame = 3; - } else if (_wo[68]) { - _indoorList._swl_1F1R._frame = 27; - } - - if (_wo[28]) { - } else if (_wo[105] || _wo[25] || _wo[165] || _wo[125] || _wo[185] || _wo[145]) { - _indoorList._fwl_1F1L._frame = 0; - _indoorList._fwl_1F1L._sprites = &map._wallSprites._fwl1; - } else if (_wo[69]) { - _indoorList._fwl_1F1L._frame = 9; - _indoorList._fwl_1F1L._sprites = &map._wallSprites._fwl2; - } - - if (_wo[29]) { - } else if (_wo[106] || _wo[26] || _wo[166] || _wo[126] || _wo[186] || _wo[146]) { - _indoorList._fwl_1F._frame = 0; - _indoorList._fwl_1F._sprites = &map._wallSprites._fwl1; - } else if (_wo[70]) { - _indoorList._fwl_1F._frame = 9; - _indoorList._fwl_1F._sprites = &map._wallSprites._fwl2; - } - - if (_wo[107]) { - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - if (!_openDoor) - _indoorList._fwl_1F1R._frame = 0; - else - _indoorList._fwl_1F1R._frame = map.mazeData()._wallKind ? 1 : 10; - } else if (_wo[71]) { - _indoorList._fwl_1F1R._frame = 9; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[167]) { - _indoorList._fwl_1F1R._frame = _overallFrame + 1; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl1; - } else if (_wo[127]) { - _indoorList._fwl_1F1R._frame = 1; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[147]) { - _indoorList._fwl_1F1R._frame = 2; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[187]) { - _indoorList._fwl_1F1R._frame = 3; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[27]) { - _indoorList._fwl_1F1R._frame = 0; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl1; - } else if (_wo[207]) { - _indoorList._fwl_1F1R._frame = 8; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[227]) { - _indoorList._fwl_1F1R._frame = 7; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[247]) { - _indoorList._fwl_1F1R._frame = 6; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl1; - } else if (_wo[267]) { - _indoorList._fwl_1F1R._frame = 4; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[287]) { - _indoorList._fwl_1F1R._frame = 5; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } else if (_wo[307]) { - _indoorList._fwl_1F1R._frame = 6; - _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; - } - - if (_wo[28]) { - _indoorList._swl_0F1L._frame = 0; - } else if (_wo[72]) { - _indoorList._swl_0F1L._frame = 24; - } - - if (_wo[29]) { - _indoorList._swl_0F1R._frame = 1; - } else if (_wo[73]) { - _indoorList._swl_0F1R._frame = 25; - } - - map.cellFlagLookup(_vm->_party->_mazePosition); - - assert(map._currentSky < 2); - _indoorList[0]._sprites = &map._skySprites[map._currentSky]; - _indoorList[0]._flags = _flipSky ? SPRFLAG_HORIZ_FLIPPED : 0; - - if (_openDoor) { - Common::Point pt( - _vm->_party->_mazePosition.x + Res.SCREEN_POSITIONING_X[ - _vm->_party->_mazeDirection][_vm->_party->_mazePosition.x], - _vm->_party->_mazePosition.y + Res.SCREEN_POSITIONING_Y[ - _vm->_party->_mazeDirection][_vm->_party->_mazePosition.y] - ); - map.cellFlagLookup(pt); - - _indoorList._sky2._sprites = &map._skySprites[0]; - } else { - _indoorList._sky2._sprites = _indoorList[0]._sprites; - } - - _indoorList._sky2._flags = _flipSky ? SPRFLAG_HORIZ_FLIPPED : 0; - _indoorList._ground._flags = _flipDefaultGround ? SPRFLAG_HORIZ_FLIPPED : 0; - _indoorList._horizon._frame = 7; - - // Finally draw the darn indoor scene - windows[3].drawList(&_indoorList[0], _indoorList.size()); - - // Check for any character shooting - _isAttacking = false; - for (uint idx = 0; idx < _vm->_party->_activeParty.size(); ++idx) { - if (_vm->_combat->_shooting[idx]) - _isAttacking = true; - } - - _charsShooting = _isAttacking; -} - -void InterfaceMap::drawOutdoors() { - Map &map = *_vm->_map; - Party &party = *_vm->_party; - Windows &windows = *_vm->_windows; - int surfaceId; - - // Draw any surface tiles on top of the default ground - for (int cellIndex = 0; cellIndex < 25; ++cellIndex) { - map.getCell(cellIndex == 24 ? 2 : Res.DRAW_NUMBERS[cellIndex]); - - DrawStruct &drawStruct = _outdoorList._groundTiles[cellIndex]; - SpriteResource &sprites = map._surfaceSprites[map._currentSurfaceId]; - drawStruct._sprites = sprites.empty() ? (SpriteResource *)nullptr : &sprites; - - surfaceId = map.mazeData()._surfaceTypes[map._currentSurfaceId]; - if (surfaceId == SURFTYPE_DWATER || surfaceId == SURFTYPE_LAVA) { - drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0]; - drawStruct._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0; - } else { - drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0]; - drawStruct._flags = _flipGround ? SPRFLAG_HORIZ_FLIPPED : 0; - } - } - - party.handleLight(); - - // Set up terrain draw entries - const int TERRAIN_INDEXES1[9] = { 44, 36, 37, 38, 45, 43, 42, 41, 39 }; - const int TERRAIN_INDEXES2[5] = { 22, 24, 31, 29, 26 }; - const int TERRAIN_INDEXES3[3] = { 11, 16, 13 }; - const int TERRAIN_INDEXES4[5] = { 5, 9, 7, 0, 4 }; - - // Loops to set draw entries for the terrain - assert(map._currentWall != INVALID_CELL); - for (int idx = 0; idx < 9; ++idx) { - map.getCell(TERRAIN_INDEXES1[idx]); - SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; - _outdoorList[28 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; - } - for (int idx = 0; idx < 5; ++idx) { - map.getCell(TERRAIN_INDEXES2[idx]); - SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; - _outdoorList[61 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; - } - for (int idx = 0; idx < 3; ++idx) { - map.getCell(TERRAIN_INDEXES3[idx]); - SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; - _outdoorList[84 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; - } - for (int idx = 0; idx < 5; ++idx) { - map.getCell(TERRAIN_INDEXES4[idx]); - SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; - _outdoorList[103 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; - } - - map.getCell(1); - SpriteResource &surface = map._wallSprites._surfaces[map._currentWall]; - _outdoorList[108]._sprites = surface.size() == 0 ? (SpriteResource *)nullptr : &surface; - _outdoorList[109]._sprites = _outdoorList[108]._sprites; - _outdoorList[110]._sprites = _outdoorList[108]._sprites; - _outdoorList._sky1._flags = _outdoorList._sky2._flags = _flipSky ? SPRFLAG_HORIZ_FLIPPED : 0; - _outdoorList._groundSprite._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0; - - // Finally render the outdoor scene - windows[3].drawList(&_outdoorList[0], _outdoorList.size()); - - // Check for any character shooting - _isAttacking = false; - for (uint idx = 0; idx < _vm->_party->_activeParty.size(); ++idx) { - if (_vm->_combat->_shooting[idx]) - _isAttacking = true; - } - - _charsShooting = _isAttacking; -} - -} // End of namespace Xeen diff --git a/engines/xeen/interface_map.h b/engines/xeen/interface_map.h deleted file mode 100644 index aaa5478c94..0000000000 --- a/engines/xeen/interface_map.h +++ /dev/null @@ -1,175 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef XEEN_INTERFACE_MAP_H -#define XEEN_INTERFACE_MAP_H - -#include "common/scummsys.h" -#include "xeen/map.h" -#include "xeen/window.h" - -namespace Xeen { - -class XeenEngine; - -class OutdoorDrawList { -public: - DrawStruct _data[132]; - DrawStruct &_sky1, &_sky2; - DrawStruct &_groundSprite; - DrawStruct * const _groundTiles; - DrawStruct * const _attackImgs1; - DrawStruct * const _attackImgs2; - DrawStruct * const _attackImgs3; - DrawStruct * const _attackImgs4; -public: - OutdoorDrawList(); - - DrawStruct &operator[](int idx) { - assert(idx < size()); - return _data[idx]; - } - - int size() const { return 132; } -}; - -class IndoorDrawList { -public: - DrawStruct _data[170]; - DrawStruct &_sky1, &_sky2; - DrawStruct &_ground; - DrawStruct &_horizon; - DrawStruct * const _groundTiles; - DrawStruct &_swl_0F1R, &_swl_0F1L, &_swl_1F1R, &_swl_1F1L, - &_swl_2F2R, &_swl_2F1R, &_swl_2F1L, &_swl_2F2L, - &_swl_3F1R, &_swl_3F2R, &_swl_3F3R, &_swl_3F4R, - &_swl_3F1L, &_swl_3F2L, &_swl_3F3L, &_swl_3F4L, - &_swl_4F4R, &_swl_4F3R, &_swl_4F2R, &_swl_4F1R, - &_swl_4F1L, &_swl_4F2L, &_swl_4F3L, &_swl_4F4L; - DrawStruct &_fwl_4F4R, &_fwl_4F3R, &_fwl_4F2R, &_fwl_4F1R, - &_fwl_4F, &_fwl_4F1L, &_fwl_4F2L, &_fwl_4F3L, &_fwl_4F4L; - DrawStruct &_fwl_2F1R, &_fwl_2F, &_fwl_2F1L, &_fwl_3F2R, - &_fwl_3F1R, &_fwl_3F, &_fwl_3F1L, &_fwl_3F2L; - DrawStruct &_fwl_1F, &_fwl_1F1R, &_fwl_1F1L; - DrawStruct &_objects0, &_objects1, &_objects2, &_objects3; - DrawStruct &_objects4, &_objects5, &_objects6, &_objects7; - DrawStruct &_objects8, &_objects9, &_objects10, &_objects11; - DrawStruct * const _attackImgs1; - DrawStruct * const _attackImgs2; - DrawStruct * const _attackImgs3; - DrawStruct * const _attackImgs4; -public: - IndoorDrawList(); - - DrawStruct &operator[](int idx) { - assert(idx < size()); - return _data[idx]; - } - - int size() const { return 170; } -}; - -class InterfaceMap { -private: - XeenEngine *_vm; - int _combatFloatCounter; - - void initDrawStructs(); - - /** - * Helper method for setIndoorsMonsters to set a draw structure - * with the deatils for a given monster - */ - void setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster, - SpriteResource *sprites, int frame, int defaultY); -protected: - int8 _wp[20]; - byte _wo[308]; - bool _flipWater; - bool _flipGround; - bool _flipSky; - bool _flipDefaultGround; - bool _thinWall; - bool _isAnimReset; - - void setMazeBits(); - - /** - * Handles animation of monsters, wall items, and combat within the 3d - * view by cycling the appropriate frame numbers - */ - void animate3d(); - - void drawMap(); -public: - OutdoorDrawList _outdoorList; - IndoorDrawList _indoorList; - SpriteResource _charPowSprites; - int _objNumber; - int _overallFrame; - bool _charsShooting; - bool _openDoor; - bool _isAttacking; -public: - InterfaceMap(XeenEngine *vm); - - virtual ~InterfaceMap() {} - - /** - * Set up draw structures for displaying on-screen monsters - */ - void setIndoorsMonsters(); - - /** - * Set up draw structures for displaying on-screen objects - */ - void setIndoorsObjects(); - - /** - * Set up draw structures for displaying on-screen wall items - */ - void setIndoorsWallPics(); - - /** - * Draw the contents of the current 3d view of an indoor map - */ - void drawIndoors(); - - /** - * Set up the draw structures for displaying monsters on outdoor maps - */ - void setOutdoorsMonsters(); - - /** - * Set up the draw structures for displaying objects on outdoor maps - */ - void setOutdoorsObjects(); - - /** - * Draw the contents of the current 3d view of an outdoor map - */ - void drawOutdoors(); -}; - -} // End of namespace Xeen - -#endif /* XEEN_INTERFACE_MAP_H */ diff --git a/engines/xeen/interface_minimap.cpp b/engines/xeen/interface_minimap.cpp index ba15204cc5..fbebd3b2ee 100644 --- a/engines/xeen/interface_minimap.cpp +++ b/engines/xeen/interface_minimap.cpp @@ -121,7 +121,7 @@ void InterfaceMinimap::drawIndoorsMinimap() { const Common::Point &pt = party._mazePosition; int frame2 = _animFrame; _animFrame = (_animFrame + 2) % 8; - party._wizardEyeActive = true;//***DEBUG**** + // Draw default ground for all the valid explored areas for (int yp = MINIMAP_YSTART, mazeY = pt.y + MINIMAP_DIFF; mazeY >= (pt.y - MINIMAP_DIFF); yp += TILE_HEIGHT, --mazeY) { diff --git a/engines/xeen/interface_scene.cpp b/engines/xeen/interface_scene.cpp new file mode 100644 index 0000000000..92e9338743 --- /dev/null +++ b/engines/xeen/interface_scene.cpp @@ -0,0 +1,4449 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "xeen/interface_scene.h" +#include "xeen/dialogs_error.h" +#include "xeen/resources.h" +#include "xeen/xeen.h" + +namespace Xeen { + +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]) { + _data[0] = DrawStruct(0, 8, 8); + _data[1] = DrawStruct(1, 8, 25); + _data[2] = DrawStruct(0, 8, 67); + _data[3] = DrawStruct(0, 8, 67); + _data[4] = DrawStruct(0, 38, 67); + _data[5] = DrawStruct(0, 84, 67); + _data[6] = DrawStruct(0, 134, 67); + _data[7] = DrawStruct(0, 117, 67); + _data[8] = DrawStruct(0, 117, 67); + _data[9] = DrawStruct(0, 103, 67); + _data[10] = DrawStruct(0, 8, 73); + _data[11] = DrawStruct(0, 8, 73); + _data[12] = DrawStruct(0, 30, 73); + _data[13] = DrawStruct(0, 181, 73); + _data[14] = DrawStruct(0, 154, 73); + _data[15] = DrawStruct(0, 129, 73); + _data[16] = DrawStruct(0, 87, 73); + _data[17] = DrawStruct(0, 8, 81); + _data[18] = DrawStruct(0, 8, 81); + _data[19] = DrawStruct(0, 202, 81); + _data[20] = DrawStruct(0, 145, 81); + _data[21] = DrawStruct(0, 63, 81); + _data[22] = DrawStruct(0, 8, 93); + _data[23] = DrawStruct(0, 169, 93); + _data[24] = DrawStruct(0, 31, 93); + _data[25] = DrawStruct(0, 8, 109); + _data[26] = DrawStruct(0, 201, 109); + _data[27] = DrawStruct(0, 8, 109); + _data[28] = DrawStruct(1, -64, 61, 14, SPRFLAG_SCENE_CLIPPED); + _data[29] = DrawStruct(1, -40, 61, 14, 0); + _data[30] = DrawStruct(1, -16, 61, 14, 0); + _data[31] = DrawStruct(1, 8, 61, 14, 0); + _data[32] = DrawStruct(1, 128, 61, 14, SPRFLAG_HORIZ_FLIPPED | SPRFLAG_SCENE_CLIPPED); + _data[33] = DrawStruct(1, 104, 61, 14, SPRFLAG_HORIZ_FLIPPED); + _data[34] = DrawStruct(1, 80, 61, 14, SPRFLAG_HORIZ_FLIPPED); + _data[35] = DrawStruct(1, 56, 61, 14, SPRFLAG_HORIZ_FLIPPED); + _data[36] = DrawStruct(1, 32, 61, 14, 0); + _data[37] = DrawStruct(0, -9, 61, 14, 0); + _data[38] = DrawStruct(0, -58, 61, 14, 0); + _data[39] = DrawStruct(0, 40, 61, 14, 0); + _data[40] = DrawStruct(0, -82, 61, 14, 0); + _data[41] = DrawStruct(0, 64, 61, 14, 0); + _data[42] = DrawStruct(0, -41, 61, 14, 0); + _data[43] = DrawStruct(0, -26, 61, 14, 0); + _data[44] = DrawStruct(0, -34, 61, 14, 0); + _data[45] = DrawStruct(0, -16, 61, 14, 0); + _data[46] = DrawStruct(0, 23, 61, 14, 0); + _data[47] = DrawStruct(0, 16, 61, 14, 0); + _data[48] = DrawStruct(0, -58, 61, 14, 0); + _data[49] = DrawStruct(0, 40, 61, 14, 0); + _data[50] = DrawStruct(0, -17, 61, 14, 0); + _data[51] = DrawStruct(0, -1, 58, 14, 0); + _data[52] = DrawStruct(0, -9, 58, 14, 0); + _data[53] = DrawStruct(0, 72, 58, 12, 0); + _data[54] = DrawStruct(0, 72, 58, 12, SPRFLAG_HORIZ_FLIPPED); + _data[55] = DrawStruct(0, 69, 63, 12, 0); + _data[56] = DrawStruct(0, 75, 63, 12, SPRFLAG_HORIZ_FLIPPED); + _data[57] = DrawStruct(0, 73, 53, 12, 0); + _data[58] = DrawStruct(0, 71, 53, 12, SPRFLAG_HORIZ_FLIPPED); + _data[59] = DrawStruct(0, 80, 57, 12, 0); + _data[60] = DrawStruct(0, 64, 57, 12, SPRFLAG_HORIZ_FLIPPED); + _data[61] = DrawStruct(2, -11, 54, 8, 0); + _data[62] = DrawStruct(1, -21, 54, 11, 0); + _data[63] = DrawStruct(2, 165, 54, 8, SPRFLAG_HORIZ_FLIPPED); + _data[64] = DrawStruct(1, 86, 54, 11, SPRFLAG_HORIZ_FLIPPED); + _data[65] = DrawStruct(1, 33, 54, 11, 0); + _data[66] = DrawStruct(0, -8, 54, 12, 0); + _data[67] = DrawStruct(0, -73, 54, 12, 0); + _data[68] = DrawStruct(0, 57, 54, 12, 0); + _data[69] = DrawStruct(0, -65, 54, 12, 0); + _data[70] = DrawStruct(0, -81, 54, 12, 0); + _data[71] = DrawStruct(0, 49, 54, 12, 0); + _data[72] = DrawStruct(0, 65, 54, 12, 0); + _data[73] = DrawStruct(0, -24, 54, 12, 0); + _data[74] = DrawStruct(0, 9, 50, 12, 0); + _data[75] = DrawStruct(0, -8, 50, 12, 0); + _data[76] = DrawStruct(0, 72, 53, 8, 0); + _data[77] = DrawStruct(0, 72, 53, 8, SPRFLAG_HORIZ_FLIPPED); + _data[78] = DrawStruct(0, 77, 58, 8, 0); + _data[79] = DrawStruct(0, 67, 58, 8, SPRFLAG_HORIZ_FLIPPED); + _data[80] = DrawStruct(0, 81, 47, 8, 0); + _data[81] = DrawStruct(0, 63, 47, 8, SPRFLAG_HORIZ_FLIPPED); + _data[82] = DrawStruct(0, 94, 52, 8, 0); + _data[83] = DrawStruct(0, 50, 52, 8, SPRFLAG_HORIZ_FLIPPED); + _data[84] = DrawStruct(2, 8, 40); + _data[85] = DrawStruct(2, 146, 40, 0, SPRFLAG_HORIZ_FLIPPED); + _data[86] = DrawStruct(1, 32, 40, 6, 0); + _data[87] = DrawStruct(0, -7, 30, 7, 0); + _data[88] = DrawStruct(0, -112, 30, 7, SPRFLAG_SCENE_CLIPPED); + _data[89] = DrawStruct(0, 98, 30, 7, SPRFLAG_SCENE_CLIPPED); + _data[90] = DrawStruct(0, -112, 30, 8, SPRFLAG_SCENE_CLIPPED); + _data[91] = DrawStruct(0, 98, 30, 8, SPRFLAG_SCENE_CLIPPED); + _data[92] = DrawStruct(0, -38, 30, 8, 0); + _data[93] = DrawStruct(0, 25, 30, 8, 0); + _data[94] = DrawStruct(0, -7, 30, 8, 0); + _data[95] = DrawStruct(0, 72, 48, 4, 0); + _data[96] = DrawStruct(0, 72, 48, 4, SPRFLAG_HORIZ_FLIPPED); + _data[97] = DrawStruct(0, 85, 53, 4, 0); + _data[98] = DrawStruct(0, 59, 53, 4, SPRFLAG_HORIZ_FLIPPED); + _data[99] = DrawStruct(0, 89, 41, 4, 0); + _data[100] = DrawStruct(0, 55, 41, 4, SPRFLAG_HORIZ_FLIPPED); + _data[101] = DrawStruct(0, 106, 47, 4, 0); + _data[102] = DrawStruct(0, 38, 47, 4, SPRFLAG_HORIZ_FLIPPED); + _data[103] = DrawStruct(0, 8, 24); + _data[104] = DrawStruct(0, 169, 24, 0, SPRFLAG_HORIZ_FLIPPED); + _data[105] = DrawStruct(1, 32, 24); + _data[106] = DrawStruct(0, -23, 40, 0, SPRFLAG_SCENE_CLIPPED); + _data[107] = DrawStruct(0, 200, 40, 0, SPRFLAG_HORIZ_FLIPPED | SPRFLAG_SCENE_CLIPPED); + _data[108] = DrawStruct(0, 8, 47); + _data[109] = DrawStruct(0, 169, 47, 0, SPRFLAG_HORIZ_FLIPPED); + _data[110] = DrawStruct(1, -56, -4, 0x8000, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[111] = DrawStruct(0, -5, 2, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[112] = DrawStruct(0, -67, 2, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[113] = DrawStruct(0, 44, 73); + _data[114] = DrawStruct(0, 44, 73); + _data[115] = DrawStruct(0, 58, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[116] = DrawStruct(0, 169, 73); + _data[117] = DrawStruct(0, 169, 73); + _data[118] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[119] = DrawStruct(0, 110, 73); + _data[120] = DrawStruct(0, 110, 73); + _data[121] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[122] = DrawStruct(0, 110, 73); + _data[123] = DrawStruct(0, 110, 73); + _data[124] = DrawStruct(0, 72, 43); + _data[125] = DrawStruct(0, 72, 43, 0, SPRFLAG_HORIZ_FLIPPED); + _data[126] = DrawStruct(0, 93, 48); + _data[127] = DrawStruct(0, 51, 48, 0, SPRFLAG_HORIZ_FLIPPED); + _data[128] = DrawStruct(0, 97, 36); + _data[129] = DrawStruct(0, 47, 36, 0, SPRFLAG_HORIZ_FLIPPED); + _data[130] = DrawStruct(0, 118, 42); + _data[131] = DrawStruct(0, 26, 42, 0, SPRFLAG_HORIZ_FLIPPED); +} + +/*------------------------------------------------------------------------*/ + +IndoorDrawList::IndoorDrawList() : + _sky1(_data[0]), _sky2(_data[1]), _ground(_data[2]), _horizon(_data[28]), + _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]), + _swl_3F1L(_data[ 74]), _swl_3F2L(_data[ 73]), _swl_3F3L(_data[ 72]), + _swl_3F4L(_data[ 71]), _swl_4F4R(_data[ 33]), _swl_4F3R(_data[ 34]), + _swl_4F2R(_data[ 35]), _swl_4F1R(_data[ 36]), _swl_4F1L(_data[ 32]), + _swl_4F2L(_data[ 31]), _swl_4F3L(_data[ 30]), _swl_4F4L(_data[ 29]), + _fwl_4F4R(_data[ 45]), _fwl_4F3R(_data[ 44]), _fwl_4F2R(_data[ 43]), + _fwl_4F1R(_data[ 42]), _fwl_4F( _data[ 41]), _fwl_4F1L(_data[ 40]), + _fwl_4F2L(_data[ 39]), _fwl_4F3L(_data[ 38]), _fwl_4F4L(_data[ 37]), + _fwl_2F1R(_data[121]), _fwl_2F( _data[120]), _fwl_2F1L(_data[119]), + _fwl_3F2R(_data[ 91]), _fwl_3F1R(_data[ 90]), _fwl_3F( _data[ 89]), + _fwl_3F1L(_data[ 88]), _fwl_3F2L(_data[ 87]), _fwl_1F( _data[147]), + _fwl_1F1R(_data[145]), _fwl_1F1L(_data[143]), + _groundTiles(&_data[3]), + _objects0(_data[149]), _objects1(_data[125]), _objects2(_data[126]), + _objects3(_data[127]), _objects4(_data[97]), _objects5(_data[98]), + _objects6(_data[99]), _objects7(_data[55]), _objects8(_data[56]), + _objects9(_data[58]), _objects10(_data[57]), _objects11(_data[59]), + _attackImgs1(&_data[162]), _attackImgs2(&_data[135]), + _attackImgs3(&_data[111]), _attackImgs4(&_data[79]) { + // Setup draw structure positions + _data[0] = DrawStruct(0, 8, 8); + _data[1] = DrawStruct(1, 8, 25); + _data[2] = DrawStruct(0, 8, 67); + _data[3] = DrawStruct(0, 8, 67); + _data[4] = DrawStruct(0, 38, 67); + _data[5] = DrawStruct(0, 84, 67); + _data[6] = DrawStruct(0, 134, 67); + _data[7] = DrawStruct(0, 117, 67); + _data[8] = DrawStruct(0, 117, 67); + _data[9] = DrawStruct(0, 103, 67); + _data[10] = DrawStruct(0, 8, 73); + _data[11] = DrawStruct(0, 8, 73); + _data[12] = DrawStruct(0, 30, 73); + _data[13] = DrawStruct(0, 181, 73); + _data[14] = DrawStruct(0, 154, 73); + _data[15] = DrawStruct(0, 129, 73); + _data[16] = DrawStruct(0, 87, 73); + _data[17] = DrawStruct(0, 8, 81); + _data[18] = DrawStruct(0, 8, 81); + _data[19] = DrawStruct(0, 202, 81); + _data[20] = DrawStruct(0, 145, 81); + _data[21] = DrawStruct(0, 63, 81); + _data[22] = DrawStruct(0, 8, 93); + _data[23] = DrawStruct(0, 169, 93); + _data[24] = DrawStruct(0, 31, 93); + _data[25] = DrawStruct(0, 8, 109); + _data[26] = DrawStruct(0, 201, 109); + _data[27] = DrawStruct(0, 8, 109); + _data[28] = DrawStruct(7, 8, 64); + _data[29] = DrawStruct(22, 32, 60); + _data[30] = DrawStruct(20, 56, 60); + _data[31] = DrawStruct(18, 80, 60); + _data[32] = DrawStruct(16, 104, 60); + _data[33] = DrawStruct(23, 152, 60, 0, SPRFLAG_HORIZ_FLIPPED); + _data[34] = DrawStruct(21, 144, 60, 0, SPRFLAG_HORIZ_FLIPPED); + _data[35] = DrawStruct(19, 131, 60, 0, SPRFLAG_HORIZ_FLIPPED); + _data[36] = DrawStruct(17, 120, 60, 0, SPRFLAG_HORIZ_FLIPPED); + _data[37] = DrawStruct(14, 8, 60); + _data[38] = DrawStruct(12, 32, 60); + _data[39] = DrawStruct(10, 56, 60); + _data[40] = DrawStruct(14, 80, 60); + _data[41] = DrawStruct(14, 104, 60); + _data[42] = DrawStruct(14, 128, 60); + _data[43] = DrawStruct(14, 152, 60); + _data[44] = DrawStruct(8, 176, 60); + _data[45] = DrawStruct(8, 200, 60); + _data[46] = DrawStruct(0, -64, 61, 14, 0); + _data[47] = DrawStruct(0, -40, 61, 14, 0); + _data[48] = DrawStruct(0, -16, 61, 14, 0); + _data[49] = DrawStruct(0, 8, 61, 14, 0); + _data[50] = DrawStruct(0, 32, 61, 14, 0); + _data[51] = DrawStruct(0, 56, 61, 14, 0); + _data[52] = DrawStruct(0, 80, 61, 14, 0); + _data[53] = DrawStruct(0, 104, 61, 14, 0); + _data[54] = DrawStruct(0, 128, 61, 14, 0); + _data[55] = DrawStruct(0, -9, 58, 14, 0); + _data[56] = DrawStruct(0, -34, 58, 14, 0); + _data[57] = DrawStruct(0, 16, 58, 14, 0); + _data[58] = DrawStruct(0, -58, 58, 14, 0); + _data[59] = DrawStruct(0, 40, 58, 14, 0); + _data[60] = DrawStruct(0, -41, 58, 14, 0); + _data[61] = DrawStruct(0, -26, 58, 14, 0); + _data[62] = DrawStruct(0, -34, 58, 14, 0); + _data[63] = DrawStruct(0, -16, 58, 14, 0); + _data[64] = DrawStruct(0, 23, 58, 14, 0); + _data[65] = DrawStruct(0, 16, 58, 14, 0); + _data[66] = DrawStruct(0, -58, 58, 14, 0); + _data[67] = DrawStruct(0, 40, 58, 14, 0); + _data[68] = DrawStruct(0, -17, 58, 14, 0); + _data[69] = DrawStruct(0, -1, 58, 14, 0); + _data[70] = DrawStruct(0, -9, 58, 14, 0); + _data[71] = DrawStruct(14, 8, 58); + _data[72] = DrawStruct(12, 8, 55); + _data[73] = DrawStruct(10, 32, 52); + _data[74] = DrawStruct(14, 88, 52); + _data[75] = DrawStruct(14, 128, 52, 0, SPRFLAG_HORIZ_FLIPPED); + _data[76] = DrawStruct(14, 152, 52, 0, SPRFLAG_HORIZ_FLIPPED); + _data[77] = DrawStruct(0, 176, 55, 0, SPRFLAG_HORIZ_FLIPPED); + _data[78] = DrawStruct(0, 200, 58, 0, SPRFLAG_HORIZ_FLIPPED); + _data[79] = DrawStruct(0, 72, 58, 12, 0); + _data[80] = DrawStruct(0, 72, 58, 12, SPRFLAG_HORIZ_FLIPPED); + _data[81] = DrawStruct(0, 69, 63, 12, 0); + _data[82] = DrawStruct(0, 75, 63, 12, SPRFLAG_HORIZ_FLIPPED); + _data[83] = DrawStruct(0, 73, 53, 12, 0); + _data[84] = DrawStruct(0, 71, 53, 12, SPRFLAG_HORIZ_FLIPPED); + _data[85] = DrawStruct(0, 80, 57, 12, 0); + _data[86] = DrawStruct(0, 64, 57, 12, SPRFLAG_HORIZ_FLIPPED); + _data[87] = DrawStruct(7, -24, 52, 0, SPRFLAG_SCENE_CLIPPED); + _data[88] = DrawStruct(7, 32, 52); + _data[89] = DrawStruct(7, 88, 52); + _data[90] = DrawStruct(0, 144, 52); + _data[91] = DrawStruct(0, 200, 52, 0, SPRFLAG_SCENE_CLIPPED); + _data[92] = DrawStruct(0, -79, 52, 11, SPRFLAG_SCENE_CLIPPED); + _data[93] = DrawStruct(0, -27, 52, 11, 0); + _data[94] = DrawStruct(0, 32, 52, 11, 0); + _data[95] = DrawStruct(0, 89, 52, 11, 0); + _data[96] = DrawStruct(0, 145, 52, 11, SPRFLAG_SCENE_CLIPPED); + _data[97] = DrawStruct(0, -8, 50, 12, 0); + _data[98] = DrawStruct(0, -65, 50, 12, 0); + _data[99] = DrawStruct(0, 49, 50, 12, 0); + _data[100] = DrawStruct(0, -65, 50, 12, 0); + _data[101] = DrawStruct(0, -81, 50, 12, 0); + _data[102] = DrawStruct(0, 49, 50, 12, 0); + _data[103] = DrawStruct(0, 65, 50, 12, 0); + _data[104] = DrawStruct(0, -24, 50, 12, 0); + _data[105] = DrawStruct(0, 9, 50, 12, 0); + _data[106] = DrawStruct(0, -8, 50, 12, 0); + _data[107] = DrawStruct(7, 8, 48); + _data[108] = DrawStruct(7, 64, 40); + _data[109] = DrawStruct(6, 144, 40, 0, SPRFLAG_HORIZ_FLIPPED); + _data[110] = DrawStruct(6, 200, 48, 0, SPRFLAG_HORIZ_FLIPPED); + _data[111] = DrawStruct(0, 72, 53, 8, 0); + _data[112] = DrawStruct(0, 72, 53, 8, SPRFLAG_HORIZ_FLIPPED); + _data[113] = DrawStruct(0, 77, 58, 8, 0); + _data[114] = DrawStruct(0, 67, 58, 8, SPRFLAG_HORIZ_FLIPPED); + _data[115] = DrawStruct(0, 81, 47, 8, 0); + _data[116] = DrawStruct(0, 63, 47, 8, SPRFLAG_HORIZ_FLIPPED); + _data[117] = DrawStruct(0, 94, 52, 8, 0); + _data[118] = DrawStruct(0, 50, 52, 8, SPRFLAG_HORIZ_FLIPPED); + _data[119] = DrawStruct(6, -40, 40, 0, SPRFLAG_SCENE_CLIPPED); + _data[120] = DrawStruct(6, 64, 40); + _data[121] = DrawStruct(0, 168, 40, 0, SPRFLAG_SCENE_CLIPPED); + _data[122] = DrawStruct(0, -72, 40, 6, SPRFLAG_SCENE_CLIPPED); + _data[123] = DrawStruct(0, 32, 40, 6, 0); + _data[124] = DrawStruct(0, 137, 40, 6, SPRFLAG_SCENE_CLIPPED); + _data[125] = DrawStruct(0, -7, 25, 7, 0); + _data[126] = DrawStruct(0, -112, 25, 7, SPRFLAG_SCENE_CLIPPED); + _data[127] = DrawStruct(0, 98, 25, 7, SPRFLAG_SCENE_CLIPPED); + _data[128] = DrawStruct(0, -112, 29, 8, SPRFLAG_SCENE_CLIPPED); + _data[129] = DrawStruct(0, 98, 29, 8, SPRFLAG_SCENE_CLIPPED); + _data[130] = DrawStruct(0, -38, 29, 8, 0); + _data[131] = DrawStruct(0, 25, 29, 8, 0); + _data[132] = DrawStruct(0, -7, 29, 8, 0); + _data[133] = DrawStruct(6, 32, 24); + _data[134] = DrawStruct(0, 168, 24, 0, SPRFLAG_HORIZ_FLIPPED); + _data[135] = DrawStruct(0, 72, 48, 4, 0); + _data[136] = DrawStruct(0, 72, 48, 4, SPRFLAG_HORIZ_FLIPPED); + _data[137] = DrawStruct(0, 85, 53, 4, 0); + _data[138] = DrawStruct(0, 59, 53, 4, SPRFLAG_HORIZ_FLIPPED); + _data[139] = DrawStruct(0, 89, 41, 4, 0); + _data[140] = DrawStruct(0, 55, 41, 4, SPRFLAG_HORIZ_FLIPPED); + _data[141] = DrawStruct(0, 106, 47, 4, 0); + _data[142] = DrawStruct(0, 38, 47, 4, SPRFLAG_HORIZ_FLIPPED); + _data[143] = DrawStruct(0, -136, 24, 0, SPRFLAG_SCENE_CLIPPED); + _data[144] = DrawStruct(0, 8, 12); + _data[145] = DrawStruct(0, 32, 24); + _data[146] = DrawStruct(0, 200, 12, 0, SPRFLAG_HORIZ_FLIPPED); + _data[147] = DrawStruct(0, 200, 24, 0, SPRFLAG_SCENE_CLIPPED); + _data[148] = DrawStruct(0, 32, 24); + _data[149] = DrawStruct(0, -5, 2, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[150] = DrawStruct(0, -67, 10, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[151] = DrawStruct(0, 44, 73); + _data[152] = DrawStruct(0, 44, 73); + _data[153] = DrawStruct(0, 58, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[154] = DrawStruct(0, 169, 73); + _data[155] = DrawStruct(0, 169, 73); + _data[156] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[157] = DrawStruct(0, 110, 73); + _data[158] = DrawStruct(0, 110, 73); + _data[159] = DrawStruct(0, -5, 14, 0, SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED); + _data[160] = DrawStruct(0, 110, 73); + _data[161] = DrawStruct(0, 110, 73); + _data[162] = DrawStruct(0, 72, 43); + _data[163] = DrawStruct(0, 72, 43, 0, SPRFLAG_HORIZ_FLIPPED); + _data[164] = DrawStruct(0, 93, 48); + _data[165] = DrawStruct(0, 51, 48, 0, SPRFLAG_HORIZ_FLIPPED); + _data[166] = DrawStruct(0, 97, 36); + _data[167] = DrawStruct(0, 47, 36, 0, SPRFLAG_HORIZ_FLIPPED); + _data[168] = DrawStruct(0, 118, 42); + _data[169] = DrawStruct(0, 26, 42, 0, SPRFLAG_HORIZ_FLIPPED); +} + +/*------------------------------------------------------------------------*/ + +InterfaceScene::InterfaceScene(XeenEngine *vm): _vm(vm) { + Common::fill(&_wp[0], &_wp[20], 0); + Common::fill(&_wo[0], &_wo[308], 0); + _overallFrame = 0; + _flipWater = false; + _flipGround = false; + _flipSky = false; + _flipDefaultGround = false; + _isAttacking = false; + _charsShooting = false; + _objNumber = 0; + _combatFloatCounter = 0; + _thinWall = false; + _isAnimReset = false; + _overallFrame = 0; + _openDoor = false; +} + +void InterfaceScene::drawMap() { + Combat &combat = *_vm->_combat; + 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; + + // Loop to update the frame numbers for each maze object, applying the animation frame + // limits as specified by the map's _animationInfo listing + for (uint idx = 0; idx < map._mobData._objects.size(); ++idx) { + MazeObject &mazeObject = map._mobData._objects[idx]; + AnimationEntry &animEntry = map._animationInfo[mazeObject._spriteId]; + int directionIndex = Res.DIRECTION_ANIM_POSITIONS[mazeObject._direction][partyDirection]; + + if (_isAnimReset) { + mazeObject._frame = animEntry._frame1._frames[directionIndex]; + } else { + ++mazeObject._frame; + if ((int)idx == objNum && scripts._animCounter > 0 && ( + objObject._spriteId == (_vm->_files->_isDarkCc ? 15 : 16) || + objObject._spriteId == 58 || objObject._spriteId == 73)) { + if (mazeObject._frame > 4 || mazeObject._spriteId == 58) + mazeObject._frame = 1; + } else if (mazeObject._frame >= animEntry._frame2._frames[directionIndex]) { + mazeObject._frame = animEntry._frame1._frames[directionIndex]; + } + } + + 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; + } + } + + _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; + } + + ds2._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED; + ds2._sprites = &_charPowSprites; + } + + 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]; + + 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 { + 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; + } + } 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; + } + } + } 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; + } + + ds1._flags = SPRFLAG_4000 | SPRFLAG_SCENE_CLIPPED; + ds1._sprites = &_charPowSprites; + } + + 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; + } + } + } + + 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; + } + + 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; + } + } + + animate3d(); +} + +void InterfaceScene::animate3d() { + Combat &combat = *_vm->_combat; + Map &map = *_vm->_map; + _overallFrame = (_overallFrame + 1) % 5; + _combatFloatCounter = (_combatFloatCounter + 1) % 8; + + for (uint idx = 0; idx < map._mobData._monsters.size(); ++idx) { + MazeMonster &monster = map._mobData._monsters[idx]; + if (!monster._damageType) { + if (monster._frame < 8) { + MonsterStruct &monsterData = *monster._monsterData; + if (!monsterData._loopAnimation) { + // Monster isn't specially looped, so cycle through the 8 frames + monster._frame = (monster._frame + 1) % 8; + } else if (!monster._field9) { + monster._frame = (monster._frame + 1) % 8; + if (monster._frame == 0) { + monster._field9 ^= 1; + monster._frame = 6; + } + } else { + if (monster._frame) + --monster._frame; + if (monster._frame == 0) + monster._field9 = 0; + } + } else if (monster._frame == 11) { + --monster._fieldA; + if (monster._fieldA == 0) + monster._frame = 0; + } else { + ++monster._frame; + if (monster._frame == 11) { + --monster._frame; + monster._frame = monster._fieldA ? 10 : 0; + } + } + } + + // Block 2 + if (monster._effect2) { + if (monster._effect1) { + if (monster._effect1 & 0x80) { + if (monster._effect3) + --monster._effect3; + if (monster._effect3 == 0) + monster._effect1 ^= 0x80; + } else { + monster._effect3 = (monster._effect3 + 1) % 3; + if (monster._effect3 == 0) { + monster._effect1 ^= 0x80; + monster._effect3 = 2; + } + } + } + } else { + monster._effect3 = (monster._effect3 + 1) % 8; + if (monster._effect3 == 0) { + MonsterStruct &monsterData = *monster._monsterData; + monster._effect1 = monster._effect2 = monsterData._animationEffect; + } + } + } + + DrawStruct *combatImgs1 = map._isOutdoors ? _outdoorList._attackImgs1 : _indoorList._attackImgs1; + DrawStruct *combatImgs2 = map._isOutdoors ? _outdoorList._attackImgs2 : _indoorList._attackImgs2; + DrawStruct *combatImgs3 = map._isOutdoors ? _outdoorList._attackImgs3 : _indoorList._attackImgs3; + DrawStruct *combatImgs4 = map._isOutdoors ? _outdoorList._attackImgs4 : _indoorList._attackImgs4; + + if (combat._monstersAttacking) { + for (int idx = 0; idx < 8; ++idx) { + if (combatImgs1[idx]._sprites) { + combatImgs1[idx]._sprites = nullptr; + combat._shooting[idx] = false; + } else if (combatImgs2[idx]._sprites) { + combatImgs1[idx]._sprites = combatImgs2[idx]._sprites; + combatImgs2[idx]._sprites = nullptr; + } else if (combatImgs3[idx]._sprites) { + combatImgs2[idx]._sprites = combatImgs3[idx]._sprites; + combatImgs3[idx]._sprites = nullptr; + } else if (combatImgs4[idx]._sprites) { + combatImgs3[idx]._sprites = combatImgs4[idx]._sprites; + combatImgs4[idx]._sprites = nullptr; + } + } + } else if (_charsShooting) { + for (int idx = 0; idx < 8; ++idx) { + if (combatImgs4[idx]._sprites) { + combatImgs4[idx]._sprites = nullptr; + } else if (combatImgs3[idx]._sprites) { + combatImgs4[idx]._sprites = combatImgs3[idx]._sprites; + combatImgs3[idx]._sprites = nullptr; + } else if (combatImgs2[idx]._sprites) { + combatImgs3[idx]._sprites = combatImgs2[idx]._sprites; + combatImgs2[idx]._sprites = nullptr; + } else if (combatImgs1[idx]._sprites) { + combatImgs2[idx]._sprites = combatImgs1[idx]._sprites; + combatImgs1[idx]._sprites = nullptr; + } + } + } + + for (uint idx = 0; idx < map._mobData._wallItems.size(); ++idx) { + MazeWallItem &wallItem = map._mobData._wallItems[idx]; + wallItem._frame = (wallItem._frame + 1) % wallItem._sprites->size(); + } +} + +void InterfaceScene::setMazeBits() { + Common::fill(&_wo[0], &_wo[308], 0); + + switch (_vm->_map->getCell(0) - 1) { + case 0: + ++_wo[125]; + break; + case 1: + ++_wo[69]; + break; + case 2: + ++_wo[185]; + break; + case 3: + case 12: + ++_wo[105]; + break; + case 4: + case 7: + ++_wo[25]; + break; + case 5: + ++_wo[225]; + break; + case 6: + ++_wo[205]; + break; + case 8: + ++_wo[145]; + break; + case 9: + ++_wo[305]; + break; + case 10: + ++_wo[245]; + break; + case 11: + ++_wo[165]; + break; + case 13: + ++_wo[265]; + break; + case 14: + ++_wo[285]; + break; + default: + break; + } + + switch (_vm->_map->getCell(1) - 1) { + case 1: + ++_wo[72]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[28]; + break; + default: + break; + } + + switch (_vm->_map->getCell(2) - 1) { + case 0: + ++_wo[127]; + break; + case 1: + ++_wo[71]; + break; + case 2: + ++_wo[187]; + break; + case 3: + case 12: + ++_wo[107]; + break; + case 4: + case 7: + ++_wo[27]; + break; + case 5: + ++_wo[227]; + break; + case 6: + ++_wo[207]; + break; + case 8: + ++_wo[147]; + break; + case 9: + ++_wo[307]; + break; + case 10: + ++_wo[247]; + break; + case 11: + ++_wo[167]; + break; + case 13: + ++_wo[267]; + break; + case 14: + ++_wo[287]; + break; + default: + break; + } + + _vm->_party->handleLight(); + + switch (_vm->_map->getCell(3) - 1) { + case 1: + ++_wo[73]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[29]; + break; + default: + break; + } + + switch (_vm->_map->getCell(4) - 1) { + case 0: + ++_wo[126]; + break; + case 1: + ++_wo[70]; + break; + case 2: + ++_wo[186]; + break; + case 3: + case 12: + ++_wo[106]; + break; + case 4: + case 7: + ++_wo[26]; + break; + case 5: + ++_wo[226]; + break; + case 6: + ++_wo[206]; + break; + case 8: + ++_wo[146]; + break; + case 9: + ++_wo[306]; + break; + case 10: + ++_wo[246]; + break; + break; + case 11: + ++_wo[166]; + break; + case 13: + ++_wo[266]; + break; + case 14: + ++_wo[286]; + break; + default: + break; + } + + switch (_vm->_map->getCell(5) - 1) { + case 0: + ++_wo[122]; + break; + case 1: + ++_wo[64]; + break; + case 2: + ++_wo[182]; + break; + case 3: + case 12: + ++_wo[102]; + break; + case 4: + case 7: + ++_wo[20]; + break; + case 5: + ++_wo[222]; + break; + case 6: + ++_wo[202]; + break; + case 8: + ++_wo[142]; + break; + case 9: + ++_wo[302]; + break; + case 10: + ++_wo[242]; + break; + case 11: + ++_wo[162]; + break; + case 13: + ++_wo[262]; + break; + case 14: + ++_wo[282]; + break; + default: + break; + } + + switch (_vm->_map->getCell(6) - 1) { + case 1: + ++_wo[67]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[23]; + break; + default: + break; + } + + switch (_vm->_map->getCell(7) - 1) { + case 0: + ++_wo[124]; + break; + case 1: + ++_wo[66]; + break; + case 2: + ++_wo[184]; + break; + case 3: + case 12: + ++_wo[104]; + break; + case 4: + case 7: + ++_wo[22]; + break; + case 5: + ++_wo[224]; + break; + case 6: + ++_wo[204]; + break; + case 8: + ++_wo[144]; + break; + case 9: + ++_wo[304]; + break; + case 10: + ++_wo[244]; + break; + case 11: + ++_wo[164]; + break; + case 13: + ++_wo[264]; + break; + case 14: + ++_wo[284]; + break; + default: + break; + } + + _thinWall = (_vm->_map->_currentWall != INVALID_CELL) && _wo[27]; + + switch (_vm->_map->getCell(8) - 1) { + case 1: + ++_wo[68]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[24]; + break; + default: + break; + } + + switch (_vm->_map->getCell(9) - 1) { + case 0: + ++_wo[123]; + break; + case 1: + ++_wo[65]; + break; + case 2: + ++_wo[183]; + break; + case 3: + case 12: + ++_wo[103]; + break; + case 4: + case 7: + ++_wo[21]; + break; + case 5: + ++_wo[223]; + break; + case 6: + ++_wo[203]; + break; + case 8: + ++_wo[143]; + break; + case 9: + ++_wo[303]; + break; + case 10: + ++_wo[243]; + break; + case 11: + ++_wo[163]; + break; + case 13: + ++_wo[263]; + break; + case 14: + ++_wo[283]; + break; + default: + break; + } + + switch (_vm->_map->getCell(10) - 1) { + case 0: + ++_wo[117]; + break; + case 1: + ++_wo[55]; + break; + case 2: + ++_wo[177]; + break; + case 3: + case 12: + ++_wo[97]; + break; + case 4: + case 7: + ++_wo[11]; + break; + case 5: + ++_wo[217]; + break; + case 6: + ++_wo[197]; + break; + case 8: + ++_wo[137]; + break; + case 9: + ++_wo[297]; + break; + case 10: + ++_wo[237]; + break; + case 11: + ++_wo[157]; + break; + case 13: + ++_wo[257]; + break; + case 14: + ++_wo[277]; + break; + default: + break; + } + + switch (_vm->_map->getCell(11) - 1) { + case 1: + ++_wo[60]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[16]; + break; + default: + break; + } + + switch (_vm->_map->getCell(12) - 1) { + case 0: + ++_wo[118]; + break; + case 1: + ++_wo[56]; + break; + case 2: + ++_wo[178]; + break; + case 3: + case 12: + ++_wo[98]; + break; + case 4: + case 7: + ++_wo[12]; + break; + case 5: + ++_wo[218]; + break; + case 6: + ++_wo[198]; + break; + case 8: + ++_wo[138]; + break; + case 9: + ++_wo[298]; + break; + case 10: + ++_wo[238]; + break; + case 11: + ++_wo[158]; + break; + case 13: + ++_wo[258]; + break; + case 14: + ++_wo[278]; + break; + default: + break; + } + + switch (_vm->_map->getCell(13) - 1) { + case 1: + ++_wo[61]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[17]; + break; + default: + break; + } + + switch (_vm->_map->getCell(14) - 1) { + case 0: + ++_wo[121]; + break; + case 1: + ++_wo[59]; + break; + case 2: + ++_wo[181]; + break; + case 3: + case 12: + ++_wo[101]; + break; + case 4: + case 7: + ++_wo[15]; + break; + case 5: + ++_wo[221]; + break; + case 6: + ++_wo[201]; + break; + case 8: + ++_wo[141]; + break; + case 9: + ++_wo[301]; + break; + case 10: + ++_wo[241]; + break; + case 11: + ++_wo[161]; + break; + case 13: + ++_wo[261]; + break; + case 14: + ++_wo[281]; + break; + default: + break; + } + + switch (_vm->_map->getCell(15) - 1) { + case 1: + ++_wo[63]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[19]; + break; + default: + break; + } + + switch (_vm->_map->getCell(16) - 1) { + case 0: + ++_wo[120]; + break; + case 1: + ++_wo[58]; + break; + case 2: + ++_wo[180]; + break; + case 3: + case 12: + ++_wo[100]; + break; + case 4: + case 7: + ++_wo[14]; + break; + case 5: + ++_wo[220]; + break; + case 6: + ++_wo[200]; + break; + case 8: + ++_wo[140]; + break; + case 9: + ++_wo[300]; + break; + case 10: + ++_wo[240]; + break; + case 11: + ++_wo[160]; + break; + case 13: + ++_wo[260]; + break; + case 14: + ++_wo[280]; + break; + default: + break; + } + + switch (_vm->_map->getCell(17) - 1) { + case 1: + ++_wo[62]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[18]; + break; + default: + break; + } + + switch (_vm->_map->getCell(18) - 1) { + case 0: + ++_wo[119]; + break; + case 1: + ++_wo[57]; + break; + case 2: + ++_wo[179]; + break; + case 3: + case 12: + ++_wo[99]; + break; + case 4: + case 7: + ++_wo[13]; + break; + case 5: + ++_wo[219]; + break; + case 6: + ++_wo[199]; + break; + case 8: + ++_wo[139]; + break; + case 9: + ++_wo[299]; + break; + case 10: + ++_wo[239]; + break; + case 11: + ++_wo[159]; + break; + case 13: + ++_wo[259]; + break; + case 14: + ++_wo[279]; + break; + default: + break; + } + + switch (_vm->_map->getCell(19) - 1) { + case 0: + ++_wo[108]; + break; + case 1: + ++_wo[78]; + break; + case 2: + ++_wo[168]; + break; + case 3: + case 12: + ++_wo[88]; + break; + case 4: + case 7: + ++_wo[34]; + break; + case 5: + ++_wo[208]; + break; + case 6: + ++_wo[188]; + break; + case 8: + ++_wo[128]; + break; + case 9: + ++_wo[288]; + break; + case 10: + ++_wo[228]; + break; + case 11: + ++_wo[148]; + break; + case 13: + ++_wo[248]; + break; + case 14: + ++_wo[268]; + break; + default: + break; + } + + switch (_vm->_map->getCell(20) - 1) { + case 1: + ++_wo[76]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[32]; + break; + default: + break; + } + + switch (_vm->_map->getCell(21) - 1) { + case 0: + ++_wo[109]; + break; + case 1: + ++_wo[44]; + break; + case 2: + ++_wo[169]; + break; + case 3: + case 12: + ++_wo[89]; + break; + case 4: + case 7: + ++_wo[0]; + break; + case 5: + ++_wo[209]; + break; + case 6: + ++_wo[189]; + break; + case 8: + ++_wo[129]; + break; + case 9: + ++_wo[289]; + break; + case 10: + ++_wo[229]; + break; + case 11: + ++_wo[149]; + break; + case 13: + ++_wo[249]; + break; + case 14: + ++_wo[269]; + break; + default: + break; + } + + switch (_vm->_map->getCell(22) - 1) { + case 1: + ++_wo[74]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[30]; + break; + default: + break; + } + + switch (_vm->_map->getCell(23) - 1) { + case 0: + ++_wo[110]; + break; + case 1: + ++_wo[45]; + break; + case 2: + ++_wo[170]; + break; + case 3: + case 12: + ++_wo[90]; + break; + case 4: + case 7: + ++_wo[1]; + break; + case 5: + ++_wo[210]; + break; + case 6: + ++_wo[190]; + break; + case 8: + ++_wo[130]; + break; + case 9: + ++_wo[290]; + break; + case 10: + ++_wo[230]; + break; + case 11: + ++_wo[150]; + break; + case 13: + ++_wo[250]; + break; + case 14: + ++_wo[270]; + break; + default: + break; + } + + switch (_vm->_map->getCell(24) - 1) { + case 1: + ++_wo[52]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[8]; + break; + default: + break; + } + + switch (_vm->_map->getCell(25) - 1) { + case 0: + ++_wo[111]; + break; + case 1: + ++_wo[46]; + break; + case 2: + ++_wo[171]; + break; + case 3: + case 12: + ++_wo[91]; + break; + case 4: + case 7: + ++_wo[2]; + break; + case 5: + ++_wo[211]; + break; + case 6: + ++_wo[191]; + break; + case 8: + ++_wo[131]; + break; + case 9: + ++_wo[291]; + break; + case 10: + ++_wo[231]; + break; + case 11: + ++_wo[151]; + break; + case 13: + ++_wo[251]; + break; + case 14: + ++_wo[271]; + break; + default: + break; + } + + switch (_vm->_map->getCell(26) - 1) { + case 1: + ++_wo[51]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[7]; + break; + default: + break; + } + + switch (_vm->_map->getCell(27) - 1) { + case 0: + ++_wo[116]; + break; + case 1: + ++_wo[50]; + break; + case 2: + ++_wo[176]; + break; + case 3: + case 12: + ++_wo[96]; + break; + case 4: + case 7: + ++_wo[6]; + break; + case 5: + ++_wo[216]; + break; + case 6: + ++_wo[196]; + break; + case 8: + ++_wo[136]; + break; + case 9: + ++_wo[296]; + break; + case 10: + ++_wo[236]; + break; + case 11: + ++_wo[156]; + break; + case 13: + ++_wo[256]; + break; + case 14: + ++_wo[276]; + break; + default: + break; + } + + switch (_vm->_map->getCell(28) - 1) { + case 1: + ++_wo[53]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[9]; + break; + default: + break; + } + + switch (_vm->_map->getCell(29) - 1) { + case 0: + ++_wo[115]; + break; + case 1: + ++_wo[49]; + break; + case 2: + ++_wo[175]; + break; + case 3: + case 12: + ++_wo[95]; + break; + case 4: + case 7: + ++_wo[5]; + break; + case 5: + ++_wo[215]; + break; + case 6: + ++_wo[195]; + break; + case 8: + ++_wo[135]; + break; + case 9: + ++_wo[295]; + break; + case 10: + ++_wo[235]; + break; + case 11: + ++_wo[155]; + break; + case 13: + ++_wo[255]; + break; + case 14: + ++_wo[275]; + break; + default: + break; + } + + switch (_vm->_map->getCell(30) - 1) { + case 1: + ++_wo[54]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[10]; + break; + default: + break; + } + + switch (_vm->_map->getCell(31) - 1) { + case 0: + ++_wo[114]; + break; + case 1: + ++_wo[48]; + break; + case 2: + ++_wo[174]; + break; + case 3: + case 12: + ++_wo[94]; + break; + case 4: + case 7: + ++_wo[4]; + break; + case 5: + ++_wo[214]; + break; + case 6: + ++_wo[194]; + break; + case 8: + ++_wo[134]; + break; + case 9: + ++_wo[294]; + break; + case 10: + ++_wo[234]; + break; + case 11: + ++_wo[154]; + break; + case 13: + ++_wo[254]; + break; + case 14: + ++_wo[274]; + break; + default: + break; + } + + switch (_vm->_map->getCell(32) - 1) { + case 1: + ++_wo[75]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[31]; + break; + default: + break; + } + + switch (_vm->_map->getCell(33) - 1) { + case 0: + ++_wo[112]; + break; + case 1: + ++_wo[47]; + break; + case 2: + ++_wo[172]; + break; + case 3: + case 12: + ++_wo[92]; + break; + case 4: + case 7: + ++_wo[3]; + break; + case 5: + ++_wo[212]; + break; + case 6: + ++_wo[192]; + break; + case 8: + ++_wo[132]; + break; + case 9: + ++_wo[292]; + break; + case 10: + ++_wo[232]; + break; + case 11: + ++_wo[152]; + break; + case 13: + ++_wo[252]; + break; + case 14: + ++_wo[272]; + break; + default: + break; + } + + switch (_vm->_map->getCell(34) - 1) { + case 1: + ++_wo[77]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[33]; + break; + default: + break; + } + + switch (_vm->_map->getCell(35) - 1) { + case 0: + ++_wo[113]; + break; + case 1: + ++_wo[79]; + break; + case 2: + ++_wo[173]; + break; + case 3: + case 12: + ++_wo[93]; + break; + case 4: + case 7: + ++_wo[35]; + break; + case 5: + ++_wo[213]; + break; + case 6: + ++_wo[193]; + break; + case 8: + ++_wo[133]; + break; + case 9: + ++_wo[293]; + break; + case 10: + ++_wo[233]; + break; + case 11: + ++_wo[153]; + break; + case 13: + ++_wo[253]; + break; + case 14: + ++_wo[273]; + break; + default: + break; + } + + switch (_vm->_map->getCell(36) - 1) { + case 1: + ++_wo[83]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[39]; + break; + default: + break; + } + + switch (_vm->_map->getCell(37) - 1) { + case 1: + ++_wo[82]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[38]; + break; + default: + break; + } + + switch (_vm->_map->getCell(38) - 1) { + case 1: + ++_wo[81]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[37]; + break; + default: + break; + } + + switch (_vm->_map->getCell(39) - 1) { + case 1: + ++_wo[80]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[36]; + break; + default: + break; + } + + switch (_vm->_map->getCell(40) - 1) { + case 1: + ++_wo[84]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[40]; + break; + default: + break; + } + + switch (_vm->_map->getCell(41) - 1) { + case 1: + ++_wo[85]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[41]; + break; + default: + break; + } + + switch (_vm->_map->getCell(42) - 1) { + case 1: + ++_wo[86]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[42]; + break; + default: + break; + } + + switch (_vm->_map->getCell(43) - 1) { + case 1: + ++_wo[87]; + break; + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + ++_wo[43]; + break; + default: + break; + } +} + +void InterfaceScene::setIndoorsMonsters() { + Combat &combat = *_vm->_combat; + Map &map = *_vm->_map; + Common::Point mazePos = _vm->_party->_mazePosition; + Direction dir = _vm->_party->_mazeDirection; + + combat.clear(); + for (uint monsterIdx = 0; monsterIdx < map._mobData._monsters.size(); ++monsterIdx) { + MazeMonster &monster = map._mobData._monsters[monsterIdx]; + SpriteResource *sprites = monster._sprites; + int frame = monster._frame; + + if (frame >= 8) { + sprites = monster._attackSprites; + frame -= 8; + } + + // The following long sequence sets up monsters in the various positions + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][2]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][2])) { + monster._isAttacking = true; + if (combat._attackMonsters[0] == -1) { + combat._attackMonsters[0] = monsterIdx; + setMonsterSprite(_indoorList[156], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]); + } else if (combat._attackMonsters[1] == -1) { + combat._attackMonsters[1] = monsterIdx; + setMonsterSprite(_indoorList[150], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]); + } else if (combat._attackMonsters[2] == -1) { + combat._attackMonsters[2] = monsterIdx; + setMonsterSprite(_indoorList[153], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]); + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][7]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][7])) { + monster._isAttacking = true; + if (!_wo[27]) { + if (combat._attackMonsters[3] == -1) { + combat._attackMonsters[3] = monsterIdx; + setMonsterSprite(_indoorList[132], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); + } else if (combat._attackMonsters[4] == -1) { + combat._attackMonsters[4] = monsterIdx; + setMonsterSprite(_indoorList[130], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); + } else if (combat._attackMonsters[2] == -1) { + combat._attackMonsters[5] = monsterIdx; + setMonsterSprite(_indoorList[131], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][5]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][5])) { + if (_wo[27] && _wo[25]) { + } else if (_wo[27] && _wo[28]) { + } else if (_wo[23] & _wo[25]) { + } else if (_wo[23] && _wo[28]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[12] == -1) { + combat._attackMonsters[12] = monsterIdx; + setMonsterSprite(_indoorList[128], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][9]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][9])) { + if (_wo[27] && _wo[26]) { + } else if (_wo[27] && _wo[29]) { + } else if (_wo[24] & _wo[26]) { + } else if (_wo[24] && _wo[29]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[13] == -1) { + combat._attackMonsters[13] = monsterIdx; + setMonsterSprite(_indoorList[129], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][14]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][14])) { + monster._isAttacking = true; + + if (!_wo[22] && !_wo[27]) { + if (combat._attackMonsters[6] == -1) { + combat._attackMonsters[6] = monsterIdx; + setMonsterSprite(_indoorList[106], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); + } else if (combat._attackMonsters[7] == -1) { + combat._attackMonsters[7] = monsterIdx; + setMonsterSprite(_indoorList[104], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); + } else if (combat._attackMonsters[8] == -1) { + combat._attackMonsters[8] = monsterIdx; + setMonsterSprite(_indoorList[105], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][12]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][12])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[23]) { + } else if (_wo[22] & _wo[20]) { + } else if (_wo[23] && _wo[17]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[14] == -1) { + combat._attackMonsters[14] = monsterIdx; + setMonsterSprite(_indoorList[100], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); + } else if (combat._attackMonsters[20] == -1) { + combat._attackMonsters[20] = monsterIdx; + setMonsterSprite(_indoorList[101], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][16]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][16])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[24]) { + } else if (_wo[22] & _wo[21]) { + } else if (_wo[24] && _wo[19]) { + } else if (_wo[21] && _wo[19]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[15] == -1) { + combat._attackMonsters[15] = monsterIdx; + setMonsterSprite(_indoorList[102], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); + } else if (combat._attackMonsters[21] == -1) { + combat._attackMonsters[21] = monsterIdx; + setMonsterSprite(_indoorList[103], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][27]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][27])) { + if (!_wo[27] && !_wo[22] && !_wo[15]) { + monster._isAttacking = true; + + if (combat._attackMonsters[9] == -1) { + combat._attackMonsters[9] = monsterIdx; + setMonsterSprite(_indoorList[70], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[10] == -1) { + combat._attackMonsters[10] = monsterIdx; + setMonsterSprite(_indoorList[68], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[11] == -1) { + combat._attackMonsters[11] = monsterIdx; + setMonsterSprite(_indoorList[69], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][25]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][25])) { + if (_wo[27] || _wo[22]) { + } else if (_wo[15] && _wo[17]) { + } else if (_wo[15] && _wo[12]) { + } else if (_wo[12] && _wo[7]) { + } else if (_wo[17] && _wo[7]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[16] == -1) { + combat._attackMonsters[16] = monsterIdx; + setMonsterSprite(_indoorList[62], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[22] == -1) { + combat._attackMonsters[22] = monsterIdx; + setMonsterSprite(_indoorList[60], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[24] == -1) { + combat._attackMonsters[24] = monsterIdx; + setMonsterSprite(_indoorList[61], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][23]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][23])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[20]) { + } else if (_wo[22] && _wo[23]) { + } else if (_wo[20] && _wo[17]) { + } else if (_wo[23] && _wo[17]) { + } else if (_wo[12] || _wo[8]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[18] == -1) { + combat._attackMonsters[18] = monsterIdx; + setMonsterSprite(_indoorList[66], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][29]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][29])) { + if (_wo[27] || _wo[22]) { + } else if (_wo[15] && _wo[19]) { + } else if (_wo[15] && _wo[14]) { + } else if (_wo[14] && _wo[9]) { + } else if (_wo[19] && _wo[9]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[17] == -1) { + combat._attackMonsters[17] = monsterIdx; + setMonsterSprite(_indoorList[65], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[23] == -1) { + combat._attackMonsters[23] = monsterIdx; + setMonsterSprite(_indoorList[63], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[25] == -1) { + combat._attackMonsters[25] = monsterIdx; + setMonsterSprite(_indoorList[64], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } + } + } + + if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][31]) && + monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][31])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[21]) { + } else if (_wo[22] && _wo[24]) { + } else if (_wo[21] && _wo[19]) { + } else if (_wo[24] && _wo[19]) { + } else if (_wo[14] || _wo[10]) { + } else { + monster._isAttacking = true; + + if (combat._attackMonsters[19] == -1) { + combat._attackMonsters[19] = monsterIdx; + setMonsterSprite(_indoorList[67], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[23] == -1) { + combat._attackMonsters[23] = monsterIdx; + setMonsterSprite(_indoorList[63], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } else if (combat._attackMonsters[25] == -1) { + combat._attackMonsters[25] = monsterIdx; + setMonsterSprite(_indoorList[64], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]); + } + } + } + } + + _indoorList[153]._x += 58; + _indoorList[131]._x += 25; + _indoorList[105]._x += 9; + _indoorList[69]._x--; + _indoorList[61]._x -= 26; + _indoorList[64]._x += 23; + _indoorList[66]._x -= 58; + _indoorList[67]._x += 40; + _indoorList[100]._x -= 65; + _indoorList[101]._x -= 85; + _indoorList[102]._x += 49; + _indoorList[103]._x += 65; + _indoorList[128]._x -= 112; + _indoorList[129]._x += 98; + + if (combat._attackMonsters[1] != -1 && combat._attackMonsters[2] == -1) { + _indoorList[156]._x += 31; + _indoorList[150]._x -= 36; + } else { + _indoorList[156]._x -= 5; + _indoorList[150]._x -= 67; + } + + if (combat._attackMonsters[4] != -1 && combat._attackMonsters[5] == -1) { + _indoorList[132]._x += 8; + _indoorList[130]._x -= 23; + } else { + _indoorList[132]._x -= 7; + _indoorList[130]._x -= 38; + } + + if (combat._attackMonsters[7] != -1 && combat._attackMonsters[8] == -1) { + _indoorList[104]._x -= 16; + } else { + _indoorList[106]._x -= 8; + _indoorList[104]._x -= 24; + } + + if (combat._attackMonsters[10] != -1 && combat._attackMonsters[11] == -1) { + _indoorList[70]._x -= 5; + _indoorList[68]._x -= 13; + } else { + _indoorList[70]._x -= 9; + _indoorList[68]._x -= 17; + } + + if (combat._attackMonsters[22] == -1 && combat._attackMonsters[24] == -1) { + _indoorList[62]._x -= 27; + _indoorList[60]._x -= 37; + } else { + _indoorList[62]._x -= 34; + _indoorList[60]._x -= 41; + } + + if (combat._attackMonsters[23] != -1 && combat._attackMonsters[25] == -1) { + _indoorList[65]._x += 20; + _indoorList[63]._x -= 12; + } else { + _indoorList[65]._x += 16; + _indoorList[63]._x -= 16; + } +} + +void InterfaceScene::setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster, SpriteResource *sprites, + int frame, int defaultY) { + MonsterStruct &monsterData = *monster._monsterData; + bool flying = monsterData._flying; + + drawStruct._frame = frame; + drawStruct._sprites = sprites; + drawStruct._y = defaultY; + + if (flying) { + drawStruct._x = Res.COMBAT_FLOAT_X[_combatFloatCounter]; + drawStruct._y = Res.COMBAT_FLOAT_Y[_combatFloatCounter]; + } else { + drawStruct._x = 0; + } + + drawStruct._flags &= ~0xFFF; + if (monster._effect2) + drawStruct._flags = Res.MONSTER_EFFECT_FLAGS[monster._effect2][monster._effect3]; +} + +void InterfaceScene::setIndoorsObjects() { + Common::Point mazePos = _vm->_party->_mazePosition; + Direction dir = _vm->_party->_mazeDirection; + Common::Point pt; + _objNumber = 0; + + Common::Array &objects = _vm->_map->_mobData._objects; + for (uint idx = 0; idx < objects.size(); ++idx) { + MazeObject &mazeObject = objects[idx]; + + // Determine which half of the X/Y lists to use + int listOffset; + if (_vm->_files->_isDarkCc) { + listOffset = mazeObject._spriteId == 47 ? 1 : 0; + } else { + listOffset = mazeObject._spriteId == 113 ? 1 : 0; + } + + // Position 1 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][2]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][2]) == mazeObject._position.y + && _indoorList._objects0._frame == -1) { + _indoorList._objects0._x = Res.INDOOR_OBJECT_X[listOffset][0]; + _indoorList._objects0._y = Res.MAP_OBJECT_Y[listOffset][0]; + _indoorList._objects0._frame = mazeObject._frame; + _indoorList._objects0._sprites = mazeObject._sprites; + _indoorList._objects0._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects0._flags |= SPRFLAG_HORIZ_FLIPPED; + _objNumber = idx; + } + + // Position 2 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][7]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][7]) == mazeObject._position.y + && !_wo[27] && _indoorList._objects1._frame == -1) { + _indoorList._objects1._x = Res.INDOOR_OBJECT_X[listOffset][1]; + _indoorList._objects1._y = Res.MAP_OBJECT_Y[listOffset][1]; + _indoorList._objects1._frame = mazeObject._frame; + _indoorList._objects1._sprites = mazeObject._sprites; + _indoorList._objects1._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects1._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + // Position 3 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][5]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][5]) == mazeObject._position.y) { + if (_wo[27] && _wo[25]) { + } else if (_wo[27] && _wo[28]) { + } else if (_wo[23] && _wo[25]) { + } else if (_wo[23] && _wo[28]) { + } else if (_indoorList._objects2._frame == -1) { + _indoorList._objects2._x = Res.INDOOR_OBJECT_X[listOffset][2]; + _indoorList._objects2._y = Res.MAP_OBJECT_Y[listOffset][2]; + _indoorList._objects2._frame = mazeObject._frame; + _indoorList._objects2._sprites = mazeObject._sprites; + _indoorList._objects2._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects2._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Position 4 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][9]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][9]) == mazeObject._position.y) { + if (_wo[27] && _wo[26]) { + } else if (_wo[27] && _wo[29]) { + } else if (_wo[24] && _wo[26]) { + } else if (_wo[24] && _wo[29]) { + } else if (_indoorList._objects3._frame == -1) { + _indoorList._objects3._x = Res.INDOOR_OBJECT_X[listOffset][3]; + _indoorList._objects3._y = Res.MAP_OBJECT_Y[listOffset][3]; + _indoorList._objects3._frame = mazeObject._frame; + _indoorList._objects3._sprites = mazeObject._sprites; + _indoorList._objects3._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects3._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Position 5 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][14]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][14]) == mazeObject._position.y) { + if (!_wo[22] && !_wo[27] && _indoorList._objects4._frame == -1) { + _indoorList._objects4._x = Res.INDOOR_OBJECT_X[listOffset][4]; + _indoorList._objects4._y = Res.MAP_OBJECT_Y[listOffset][4]; + _indoorList._objects4._frame = mazeObject._frame; + _indoorList._objects4._sprites = mazeObject._sprites; + _indoorList._objects4._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects4._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Position 6 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][12]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][12]) == mazeObject._position.y) { + if (_wo[27]) { + } else if (_wo[22] && _wo[23]) { + } else if (_wo[22] && _wo[20]) { + } else if (_wo[23] && _wo[17]) { + } else if (_wo[20] && _wo[17]) { + } else if (_indoorList._objects5._frame == -1) { + _indoorList._objects5._x = Res.INDOOR_OBJECT_X[listOffset][5]; + _indoorList._objects5._y = Res.MAP_OBJECT_Y[listOffset][5]; + _indoorList._objects5._frame = mazeObject._frame; + _indoorList._objects5._sprites = mazeObject._sprites; + _indoorList._objects5._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects5._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Position 7 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][16]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][16]) == mazeObject._position.y) { + if (_wo[27]) { + } else if (_wo[22] && _wo[24]) { + } else if (_wo[22] && _wo[21]) { + } else if (_wo[24] && _wo[19]) { + } else if (_wo[21] && _wo[19]) { + } else if (_indoorList._objects6._frame == -1) { + _indoorList._objects6._x = Res.INDOOR_OBJECT_X[listOffset][6]; + _indoorList._objects6._y = Res.MAP_OBJECT_Y[listOffset][6]; + _indoorList._objects6._frame = mazeObject._frame; + _indoorList._objects6._sprites = mazeObject._sprites; + _indoorList._objects6._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects6._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Position 8 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][27]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][27]) == mazeObject._position.y) { + if (!_wo[27] && !_wo[22] && !_wo[15] && _indoorList._objects7._frame == -1) { + _indoorList._objects7._x = Res.INDOOR_OBJECT_X[listOffset][7]; + _indoorList._objects7._y = Res.MAP_OBJECT_Y[listOffset][7]; + _indoorList._objects7._frame = mazeObject._frame; + _indoorList._objects7._sprites = mazeObject._sprites; + _indoorList._objects7._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects7._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Position 9 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][25]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][25]) == mazeObject._position.y) { + if (_wo[27] || _wo[22]) { + } else if (_wo[15] && _wo[17]) { + } else if (_wo[15] && _wo[12]) { + } else if (_wo[12] && _wo[7]) { + } else if (_wo[17] && _wo[7]) { + } else if (_indoorList._objects8._frame == -1) { + _indoorList._objects8._x = Res.INDOOR_OBJECT_X[listOffset][8]; + _indoorList._objects8._y = Res.MAP_OBJECT_Y[listOffset][8]; + _indoorList._objects8._frame = mazeObject._frame; + _indoorList._objects8._sprites = mazeObject._sprites; + _indoorList._objects8._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects8._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Position 10 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][23]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][23]) == mazeObject._position.y) { + if (_wo[27]) { + } else if (_wo[22] && _wo[20]) { + } else if (_wo[22] && _wo[23]) { + } else if (_wo[20] && _wo[17]) { + } else if (_wo[23] && _wo[17]) { + } else if (!_wo[12] && !_wo[8] && _indoorList._objects9._frame == -1) { + _indoorList._objects9._x = Res.INDOOR_OBJECT_X[listOffset][10]; + _indoorList._objects9._y = Res.MAP_OBJECT_Y[listOffset][10]; + _indoorList._objects9._frame = mazeObject._frame; + _indoorList._objects9._sprites = mazeObject._sprites; + _indoorList._objects9._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects9._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Block 11 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][29]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][29]) == mazeObject._position.y) { + if (_wo[27]) { + } else if (_wo[15] && _wo[19]) { + } else if (_wo[15] && _wo[14]) { + } else if (_wo[14] && _wo[9]) { + } else if (_wo[19] && _wo[9]) { + } else if (_indoorList._objects10._frame == -1) { + _indoorList._objects10._x = Res.INDOOR_OBJECT_X[listOffset][9]; + _indoorList._objects10._y = Res.MAP_OBJECT_Y[listOffset][9]; + _indoorList._objects10._frame = mazeObject._frame; + _indoorList._objects10._sprites = mazeObject._sprites; + _indoorList._objects10._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects10._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + + // Block 12 + if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][31]) == mazeObject._position.x + && (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][31]) == mazeObject._position.y) { + if (_wo[27]) { + } else if (_wo[22] && _wo[21]) { + } else if (_wo[22] && _wo[24]) { + } else if (_wo[21] && _wo[19]) { + } else if (_wo[24] && _wo[19]) { + } else if (!_wo[14] && !_wo[10] && _indoorList._objects11._frame == -1) { + _indoorList._objects11._x = Res.INDOOR_OBJECT_X[listOffset][11]; + _indoorList._objects11._y = Res.MAP_OBJECT_Y[listOffset][11]; + _indoorList._objects11._frame = mazeObject._frame; + _indoorList._objects11._sprites = mazeObject._sprites; + _indoorList._objects11._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (mazeObject._flipped) + _indoorList._objects11._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } + } +} + +void InterfaceScene::setIndoorsWallPics() { + Map &map = *_vm->_map; + const Common::Point &mazePos = _vm->_party->_mazePosition; + Direction dir = _vm->_party->_mazeDirection; + + Common::fill(&_wp[0], &_wp[20], -1); + + for (uint idx = 0; idx < map._mobData._wallItems.size(); ++idx) { + MazeWallItem &wallItem = map._mobData._wallItems[idx]; + if (wallItem._direction != dir) + continue; + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][2]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][2])) { + if (_wp[1] == -1) { + _indoorList[148]._frame = wallItem._frame; + _indoorList[148]._sprites = wallItem._sprites; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][7]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][7])) { + if (!_wo[27] && _wp[1] == -1) { + _indoorList[123]._frame = wallItem._frame; + _indoorList[123]._sprites = wallItem._sprites; + _wp[4] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][5]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][5])) { + if (_wo[27] && _wo[25]) { + } else if (_wo[27] && _wo[28]) { + } else if (_wo[23] && _wo[25]) { + } else if (_wo[23] && _wo[28]) { + } else if (_wp[3] == -1) { + _indoorList[122]._frame = wallItem._frame; + _indoorList[122]._sprites = wallItem._sprites; + _wp[3] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][9]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][9])) { + if (_wo[27] && _wo[26]) { + } else if (_wo[27] && _wo[29]) { + } else if (_wo[24] && _wo[26]) { + } else if (_wo[24] && _wo[29]) { + } else if (_wp[5] == -1) { + _indoorList[124]._frame = wallItem._frame; + _indoorList[124]._sprites = wallItem._sprites; + _wp[5] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][14]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][14])) { + if (!_wo[22] && !_wo[27] && !_wp[8]) { + _indoorList[94]._frame = wallItem._frame; + _indoorList[94]._sprites = wallItem._sprites; + _wp[8] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][12]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][12])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[23]) { + } else if (_wo[22] && _wo[20]) { + } else if (_wo[23] && _wo[17]) { + } else if (_wo[20] && _wo[17]) { + } else if (_wp[7] == -1) { + _indoorList[93]._frame = wallItem._frame; + _indoorList[93]._sprites = wallItem._sprites; + _wp[7] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][16]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][16])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[24]) { + } else if (_wo[22] && _wo[21]) { + } else if (_wo[24] && _wo[19]) { + } else if (_wo[21] && _wo[19]) { + } else if (_wp[9] == -1) { + _indoorList[95]._frame = wallItem._frame; + _indoorList[95]._sprites = wallItem._sprites; + _wp[9] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][12]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][12])) { + if (_wo[27]) { + } else if (_wo[25] && _wo[28]) { + } else if (_wo[20] && _wo[16]) { + } else if (_wp[6] == -1) { + _indoorList[92]._frame = wallItem._frame; + _indoorList[92]._sprites = wallItem._sprites; + _wp[6] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][16]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][16])) { + if (!_wo[26] && !_wo[29] && !_wo[21] && !_wo[18] && _wp[10] == -1) { + _indoorList[96]._frame = wallItem._frame; + _indoorList[96]._sprites = wallItem._sprites; + _wp[10] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][27]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][27])) { + if (!_wo[27] && !_wo[22] && !_wo[15] && _wp[15] == -1) { + _indoorList[50]._frame = wallItem._frame; + _indoorList[50]._sprites = wallItem._sprites; + _wp[15] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][25]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][25])) { + if (_wo[27]) { + } else if (_wo[27] && _wo[22]) { + } else if (_wo[15] && _wo[17]) { + } else if (_wo[15] && _wo[12]) { + } else if (_wo[12] && _wo[7]) { + } else if (_wo[17] && _wo[7]) { + } else if (_wp[14] == -1) { + _indoorList[49]._frame = wallItem._frame; + _indoorList[49]._sprites = wallItem._sprites; + _wp[14] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[20]) { + } else if (_wo[22] && _wo[23]) { + } else if (_wo[20] && _wo[17]) { + } else if (_wo[23] && _wo[17]) { + } else if (_wo[12] && _wo[8]) { + } else if (_wp[13] == -1) { + _indoorList[48]._frame = wallItem._frame; + _indoorList[48]._sprites = wallItem._sprites; + _wp[13] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][29]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][29])) { + if (_wo[27] || _wo[22]) { + } else if (_wo[15] && _wo[19]) { + } else if (_wo[15] && _wo[14]) { + } else if (_wo[14] && _wo[9]) { + } else if (_wo[19] && _wo[9]) { + } else if (_wp[16] == -1) { + _indoorList[51]._frame = wallItem._frame; + _indoorList[51]._sprites = wallItem._sprites; + _wp[16] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) { + if (_wo[27]) { + } else if (_wo[22] && _wo[21]) { + } else if (_wo[22] && _wo[24]) { + } else if (_wo[21] && _wo[19]) { + } else if (_wo[24] && _wo[19]) { + } else if (!_wo[14] && !_wo[10] && _wp[17] == -1) { + _indoorList[52]._frame = wallItem._frame; + _indoorList[52]._sprites = wallItem._sprites; + _wp[17] = idx; + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) { + if (!_wo[27] && !_wo[20] && !_wo[12] && !_wo[23] && !_wo[8] && !_wo[30]) { + if (_wp[12] == -1) { + _indoorList[47]._frame = wallItem._frame; + _indoorList[47]._sprites = wallItem._sprites; + _wp[12] = idx; + } + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) { + if (!_wo[27] && !_wo[21] && !_wo[14] && !_wo[24] && !_wo[10] && !_wo[31]) { + if (_wp[18] == -1) { + _indoorList[53]._frame = wallItem._frame; + _indoorList[53]._sprites = wallItem._sprites; + _wp[18] = idx; + } + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) { + if (!_wo[25] && !_wo[28] && !_wo[20] && !_wo[11] && !_wo[16] && !_wo[30] && !_wo[32]) { + if (_wp[11] == -1) { + _indoorList[46]._frame = wallItem._frame; + _indoorList[46]._sprites = wallItem._sprites; + _wp[11] = idx; + } + } + } + + if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) && + mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) { + if (!_wo[26] && !_wo[20] && !_wo[21] && !_wo[13] && !_wo[18] && !_wo[31] && !_wo[33]) { + if (_wp[19] == -1) { + _indoorList[54]._frame = wallItem._frame; + _indoorList[54]._sprites = wallItem._sprites; + _wp[19] = idx; + } + } + } + } +} + +void InterfaceScene::setOutdoorsMonsters() { + Combat &combat = *_vm->_combat; + Map &map = *_vm->_map; + Party &party = *_vm->_party; + Direction dir = party._mazeDirection; + Common::Point pt = party._mazePosition; + + for (uint idx = 0; idx < map._mobData._monsters.size(); ++idx) { + MazeMonster &monster = map._mobData._monsters[idx]; + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][2]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][2])) { + monster._isAttacking = true; + if (combat._attackMonsters[0] == -1) { + _outdoorList[118]._frame = idx; + combat._attackMonsters[0] = idx; + } else if (combat._attackMonsters[1] == -1) { + _outdoorList[112]._frame = idx; + combat._attackMonsters[1] = idx; + } else if (combat._attackMonsters[2] == -1) { + _outdoorList[115]._frame = idx; + combat._attackMonsters[2] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][7]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][7])) { + monster._isAttacking = true; + if (combat._attackMonsters[3] == -1) { + _outdoorList[94]._frame = idx; + combat._attackMonsters[3] = idx; + } else if (combat._attackMonsters[4] == -1) { + _outdoorList[92]._frame = idx; + combat._attackMonsters[4] = idx; + } else if (combat._attackMonsters[5] == -1) { + _outdoorList[93]._frame = idx; + combat._attackMonsters[5] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][5]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][5])) { + monster._isAttacking = true; + if (combat._attackMonsters[12] == -1) { + _outdoorList[90]._frame = idx; + combat._attackMonsters[12] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][9]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][9])) { + monster._isAttacking = true; + if (combat._attackMonsters[13] == -1) { + _outdoorList[91]._frame = idx; + combat._attackMonsters[13] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][14]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][14])) { + monster._isAttacking = true; + if (combat._attackMonsters[6] == -1) { + _outdoorList[75]._frame = idx; + combat._attackMonsters[6] = idx; + } else if (combat._attackMonsters[7] == -1) { + _outdoorList[73]._frame = idx; + combat._attackMonsters[7] = idx; + } else if (combat._attackMonsters[8] == -1) { + _outdoorList[74]._frame = idx; + combat._attackMonsters[8] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][12]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][12])) { + monster._isAttacking = true; + if (combat._attackMonsters[14] == -1) { + _outdoorList[69]._frame = idx; + combat._attackMonsters[14] = idx; + } else if (combat._attackMonsters[20] == -1) { + _outdoorList[70]._frame = idx; + combat._attackMonsters[20] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][16]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][16])) { + monster._isAttacking = true; + if (combat._attackMonsters[15] == -1) { + _outdoorList[71]._frame = idx; + combat._attackMonsters[15] = idx; + } else if (combat._attackMonsters[21] == -1) { + _outdoorList[72]._frame = idx; + combat._attackMonsters[21] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][27]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][27])) { + monster._isAttacking = true; + if (combat._attackMonsters[9] == -1) { + _outdoorList[52]._frame = idx; + combat._attackMonsters[9] = idx; + } else if (combat._attackMonsters[10] == -1) { + _outdoorList[50]._frame = idx; + combat._attackMonsters[10] = idx; + } else if (combat._attackMonsters[11] == -1) { + _outdoorList[51]._frame = idx; + combat._attackMonsters[11] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][25]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][25])) { + monster._isAttacking = true; + if (combat._attackMonsters[16] == -1) { + _outdoorList[44]._frame = idx; + combat._attackMonsters[16] = idx; + } else if (combat._attackMonsters[22] == -1) { + _outdoorList[42]._frame = idx; + combat._attackMonsters[22] = idx; + } else if (combat._attackMonsters[24] == -1) { + _outdoorList[43]._frame = idx; + combat._attackMonsters[24] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][23]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][23])) { + monster._isAttacking = true; + if (combat._attackMonsters[18] == -1) { + _outdoorList[48]._frame = idx; + combat._attackMonsters[18] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][29]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][29])) { + monster._isAttacking = true; + if (combat._attackMonsters[17] == -1) { + _outdoorList[47]._frame = idx; + combat._attackMonsters[17] = idx; + } else if (combat._attackMonsters[23] == -1) { + _outdoorList[45]._frame = idx; + combat._attackMonsters[23] = idx; + } else if (combat._attackMonsters[25] == -1) { + _outdoorList[46]._frame = idx; + combat._attackMonsters[25] = idx; + } + } + + if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][31]) && + monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][31])) { + monster._isAttacking = true; + if (combat._attackMonsters[19] == -1) { + _outdoorList[49]._frame = idx; + combat._attackMonsters[19] = idx; + } + } + } + + _outdoorList[115]._x = 58; + _outdoorList[93]._x = 25; + _outdoorList[74]._x = 9; + _outdoorList[51]._x = -1; + _outdoorList[43]._x = -26; + _outdoorList[46]._x = 23; + _outdoorList[48]._x = -58; + _outdoorList[49]._x = 40; + _outdoorList[69]._x = -65; + _outdoorList[70]._x = -85; + _outdoorList[71]._x = 49; + _outdoorList[72]._x = 65; + _outdoorList[90]._x = -112; + _outdoorList[91]._x = 98; + + if (combat._attackMonsters[1] != -1 && combat._attackMonsters[2] == -1) { + _outdoorList[118]._x = 31; + _outdoorList[112]._x = -36; + } else { + _outdoorList[118]._x = -5; + _outdoorList[112]._x = -67; + } + if (combat._attackMonsters[4] != -1 && combat._attackMonsters[5] == -1) { + _outdoorList[94]._x = 8; + _outdoorList[92]._x = -23; + } else { + _outdoorList[94]._x = -7; + _outdoorList[92]._x = -38; + } + if (combat._attackMonsters[7] != -1 && combat._attackMonsters[8] == -1) { + _outdoorList[75]._x = 0; + _outdoorList[73]._x = -16; + } else { + _outdoorList[75]._x = -8; + _outdoorList[73]._x = -24; + } + if (combat._attackMonsters[10] != -1 && combat._attackMonsters[11] == -1) { + _outdoorList[52]._x = -5; + _outdoorList[50]._x = -13; + } else { + _outdoorList[52]._x = -9; + _outdoorList[50]._x = -17; + } + if (combat._attackMonsters[22] != -1 && combat._attackMonsters[24] == -1) { + _outdoorList[44]._x = -27; + _outdoorList[42]._x = -37; + } else { + _outdoorList[44]._x = -34; + _outdoorList[42]._x = -41; + } + if (combat._attackMonsters[23] != -1 && combat._attackMonsters[25] == -1) { + _outdoorList[47]._x = 20; + _outdoorList[45]._x = -12; + } else { + _outdoorList[47]._x = 16; + _outdoorList[45]._x = -16; + } + + for (int idx = 0; idx < 26; ++idx) { + DrawStruct &ds = _outdoorList[Res.OUTDOOR_MONSTER_INDEXES[idx]]; + + if (ds._frame != -1) { + ds._flags &= ~0xfff; + + // TODO: Double-check.. this section looks *weird* + MazeMonster &monster = map._mobData._monsters[ds._frame]; + MonsterStruct &monsterData = *monster._monsterData; + + ds._frame = monster._frame; + + if (monster._effect2) { + ds._flags = Res.MONSTER_EFFECT_FLAGS[monster._effect2 - 1][monster._effect3]; + } + + if (monster._frame > 7) { + monster._frame -= 8; + ds._sprites = monster._attackSprites; + } else { + ds._sprites = monster._sprites; + } + + ds._y = Res.OUTDOOR_MONSTERS_Y[idx]; + + if (monsterData._flying) { + ds._x += Res.COMBAT_FLOAT_X[_combatFloatCounter]; + ds._y += Res.COMBAT_FLOAT_Y[_combatFloatCounter]; + } + } + } + // TODO +} + +void InterfaceScene::setOutdoorsObjects() { + Map &map = *_vm->_map; + Party &party = *_vm->_party; + const Common::Point &pt = party._mazePosition; + Direction dir = party._mazeDirection; + int posIndex; + + for (uint idx = 0; idx < map._mobData._objects.size(); ++idx) { + MazeObject &obj = map._mobData._objects[idx]; + + if (_vm->_files->_isDarkCc) { + posIndex = obj._spriteId == 47 ? 1 : 0; + } else { + posIndex = obj._spriteId == 113 ? 1 : 0; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][2]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][2]) && + _outdoorList[111]._frame == -1) { + DrawStruct &ds = _outdoorList[111]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][0]; + ds._y = Res.MAP_OBJECT_Y[posIndex][0]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + _objNumber = idx; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][7]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][7]) && + _outdoorList[87]._frame == -1) { + DrawStruct &ds = _outdoorList[87]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][1]; + ds._y = Res.MAP_OBJECT_Y[posIndex][1]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][5]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][5]) && + _outdoorList[88]._frame == -1) { + DrawStruct &ds = _outdoorList[88]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][2]; + ds._y = Res.MAP_OBJECT_Y[posIndex][2]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][9]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][9]) && + _outdoorList[89]._frame == -1) { + DrawStruct &ds = _outdoorList[89]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][3]; + ds._y = Res.MAP_OBJECT_Y[posIndex][3]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][14]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][14]) && + _outdoorList[66]._frame == -1) { + DrawStruct &ds = _outdoorList[66]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][4]; + ds._y = Res.MAP_OBJECT_Y[posIndex][4]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][12]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][12]) && + _outdoorList[67]._frame == -1) { + DrawStruct &ds = _outdoorList[67]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][5]; + ds._y = Res.MAP_OBJECT_Y[posIndex][5]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][16]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][16]) && + _outdoorList[68]._frame == -1) { + DrawStruct &ds = _outdoorList[68]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][6]; + ds._y = Res.MAP_OBJECT_Y[posIndex][6]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][27]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][27]) && + _outdoorList[37]._frame == -1) { + DrawStruct &ds = _outdoorList[37]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][7]; + ds._y = Res.MAP_OBJECT_Y[posIndex][7]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][25]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][25]) && + _outdoorList[38]._frame == -1) { + DrawStruct &ds = _outdoorList[38]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][8]; + ds._y = Res.MAP_OBJECT_Y[posIndex][8]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][23]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][23]) && + _outdoorList[40]._frame == -1) { + DrawStruct &ds = _outdoorList[40]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][10]; + ds._y = Res.MAP_OBJECT_Y[posIndex][10]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][29]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][29]) && + _outdoorList[39]._frame == -1) { + DrawStruct &ds = _outdoorList[39]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][9]; + ds._y = Res.MAP_OBJECT_Y[posIndex][9]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + + if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][31]) && + obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][31]) && + _outdoorList[41]._frame == -1) { + DrawStruct &ds = _outdoorList[41]; + ds._x = Res.OUTDOOR_OBJECT_X[posIndex][11]; + ds._y = Res.MAP_OBJECT_Y[posIndex][11]; + ds._frame = obj._frame; + ds._sprites = obj._sprites; + + ds._flags &= ~SPRFLAG_HORIZ_FLIPPED; + if (obj._flipped) + ds._flags |= SPRFLAG_HORIZ_FLIPPED; + } + } +} + +void InterfaceScene::drawIndoors() { + Map &map = *_vm->_map; + Windows &windows = *_vm->_windows; + int surfaceId; + + // Draw any surface tiles on top of the default ground + for (int cellIndex = 0; cellIndex < 25; ++cellIndex) { + map.getCell(Res.DRAW_NUMBERS[cellIndex]); + + DrawStruct &drawStruct = _indoorList._groundTiles[cellIndex]; + SpriteResource &sprites = map._surfaceSprites[map._currentSurfaceId]; + drawStruct._sprites = sprites.empty() ? (SpriteResource *)nullptr : &sprites; + + surfaceId = map.mazeData()._surfaceTypes[map._currentSurfaceId]; + if (surfaceId == SURFTYPE_WATER || surfaceId == SURFTYPE_LAVA || + surfaceId == SURFTYPE_SEWER) { + drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0]; + drawStruct._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0; + } else { + drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0]; + drawStruct._flags = _flipGround ? SPRFLAG_HORIZ_FLIPPED : 0; + } + } + + if (!_wo[27] && !_wo[20] && !_wo[23] && !_wo[12] && !_wo[8] && !_wo[30]) { + if (_wo[39]) + _indoorList._swl_4F4L._frame = 22; + else if (_wo[83]) + _indoorList._swl_4F4L._frame = 46; + } + + if (!_wo[27] && !_wo[22] && !_wo[17] && !_wo[12] && !_wo[8]) { + if (_wo[38]) + _indoorList._swl_4F3L._frame = 20; + else if (_wo[82]) + _indoorList._swl_4F3L._frame = 44; + } + + if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[2] && !_wo[7]) { + if (_wo[37]) + _indoorList._swl_4F2L._frame = 18; + else if (_wo[81]) + _indoorList._swl_4F2L._frame = 42; + } + + if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[6]) { + if (_wo[36]) + _indoorList._swl_4F1L._frame = 16; + else if (_wo[80]) + _indoorList._swl_4F1L._frame = 40; + } + + if (!_wo[27] && !_wo[21] && !_wo[24] && !_wo[14] && !_wo[10] && !_wo[31]) { + if (_wo[43]) + _indoorList._swl_4F4R._frame = 23; + else if (_wo[87]) + _indoorList._swl_4F4R._frame = 47; + } + + if (!_wo[27] && !_wo[22] && !_wo[19] && !_wo[14] && !_wo[10]) { + if (_wo[42]) + _indoorList._swl_4F3R._frame = 21; + else if (_wo[86]) + _indoorList._swl_4F3R._frame = 45; + } + + if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[5] && !_wo[9]) { + if (_wo[41]) + _indoorList._swl_4F2R._frame = 19; + else if (_wo[85]) + _indoorList._swl_4F2R._frame = 43; + } + + if (!_wo[27] && !_wo[22] && !_wo[15] && !_wo[6]) { + if (_wo[40]) + _indoorList._swl_4F1R._frame = 17; + else if (_wo[84]) + _indoorList._swl_4F1R._frame = 41; + } + + if (!_wo[25] && !_wo[28] && !_wo[20] && !_wo[11] && + !_wo[16] && !_wo[30] && !_wo[32]) { + if (_wo[88]) + _indoorList._fwl_4F4L._frame = 7; + else if (_wo[78]) + _indoorList._fwl_4F4L._frame = 16; + else if (_wo[148]) + _indoorList._fwl_4F4L._frame = _overallFrame + 1; + else if (_wo[108]) + _indoorList._fwl_4F4L._frame = 8; + else if (_wo[168]) + _indoorList._fwl_4F4L._frame = 10; + else if (_wo[128]) + _indoorList._fwl_4F4L._frame = 9; + else if (_wo[34]) + _indoorList._fwl_4F4L._frame = 0; + else if (_wo[188]) + _indoorList._fwl_4F4L._frame = 15; + else if (_wo[208]) + _indoorList._fwl_4F4L._frame = 14; + else if (_wo[228]) + _indoorList._fwl_4F4L._frame = 6; + else if (_wo[248]) + _indoorList._fwl_4F4L._frame = 11; + else if (_wo[268]) + _indoorList._fwl_4F4L._frame = 12; + else if (_wo[288]) + _indoorList._fwl_4F4L._frame = 13; + } + + if (!_wo[26] && !_wo[29] && !_wo[21] && !_wo[13] && !_wo[18] && !_wo[31] && !_wo[33]) { + if (_wo[93]) + _indoorList._fwl_4F4R._frame = 7; + else if (_wo[79]) + _indoorList._fwl_4F4R._frame = 16; + else if (_wo[153]) + _indoorList._fwl_4F4R._frame = _overallFrame + 1; + else if (_wo[113]) + _indoorList._fwl_4F4R._frame = 8; + else if (_wo[173]) + _indoorList._fwl_4F4R._frame = 10; + else if (_wo[133]) + _indoorList._fwl_4F4R._frame = 9; + else if (_wo[35]) + _indoorList._fwl_4F4R._frame = 0; + else if (_wo[79]) + _indoorList._fwl_4F4R._frame = 15; + else if (_wo[213]) + _indoorList._fwl_4F4R._frame = 14; + else if (_wo[233]) + _indoorList._fwl_4F4R._frame = 6; + else if (_wo[253]) + _indoorList._fwl_4F4R._frame = 11; + else if (_wo[273]) + _indoorList._fwl_4F4R._frame = 12; + else if (_wo[293]) + _indoorList._fwl_4F4R._frame = 13; + } + + if (!_wo[25] && !_wo[28] && !_wo[20] && !_wo[11] && !_wo[16] && !_wo[30]) { + if (_wo[32]) + _indoorList._swl_3F4L._frame = 14; + else if (_wo[76]) + _indoorList._swl_3F4L._frame = 38; + } + + if (!_wo[26] && !_wo[29] && !_wo[21] && !_wo[13] && !_wo[18] && !_wo[31]) { + if (_wo[33]) + _indoorList._swl_3F1R._frame = 15; + else if (_wo[77]) + _indoorList._swl_3F1R._frame = 39; + } + + if (_wo[28] && _wo[27]) { + } else if (_wo[28] && _wo[12]) { + } else if (_wo[28] && _wo[23]) { + } else if (_wo[28] && _wo[8]) { + } else if (_wo[25] && _wo[27]) { + } else if (_wo[25] && _wo[12]) { + } else if (_wo[25] && _wo[23]) { + } else if (_wo[25] && _wo[8]) { + } else if (_wo[11] && _wo[27]) { + } else if (_wo[11] && _wo[12]) { + } else if (_wo[11] && _wo[23]) { + } else if (_wo[11] && _wo[8]) { + } else if (_wo[17] && _wo[27]) { + } else if (_wo[17] && _wo[12]) { + } else if (_wo[17] && _wo[23]) { + } else if (_wo[17] && _wo[8]) { + } else if (_wo[20]) { + } else if (_wo[30]) { + _indoorList._swl_3F3L._frame = 12; + } else if (_wo[74]) { + _indoorList._swl_3F3L._frame = 36; + } + + if (_wo[29] && _wo[27]) { + } else if (_wo[29] && _wo[14]) { + } else if (_wo[29] && _wo[24]) { + } else if (_wo[29] && _wo[10]) { + } else if (_wo[26] && _wo[27]) { + } else if (_wo[26] && _wo[14]) { + } else if (_wo[26] && _wo[24]) { + } else if (_wo[26] && _wo[10]) { + } else if (_wo[13] && _wo[27]) { + } else if (_wo[13] && _wo[14]) { + } else if (_wo[13] && _wo[24]) { + } else if (_wo[13] && _wo[10]) { + } else if (_wo[19] && _wo[27]) { + } else if (_wo[19] && _wo[24]) { + } else if (_wo[19] && _wo[10]) { + } else if (_wo[21]) { + } else if (_wo[31]) { + _indoorList._swl_3F2R._frame = 13; + } else if (_wo[75]) { + _indoorList._swl_3F2R._frame = 37; + } + + if (!_wo[27] && !_wo[20] && !_wo[12] && !_wo[23] && !_wo[8] && !_wo[30]) { + if (_wo[89]) + _indoorList._fwl_4F3L._frame = 7; + else if (_wo[44]) + _indoorList._fwl_4F3L._frame = 16; + else if (_wo[149]) + _indoorList._fwl_4F3L._frame = _overallFrame + 1; + else if (_wo[109]) + _indoorList._fwl_4F3L._frame = 8; + else if (_wo[169]) + _indoorList._fwl_4F3L._frame = 10; + else if (_wo[129]) + _indoorList._fwl_4F3L._frame = 9; + else if (_wo[0]) + _indoorList._fwl_4F3L._frame = 0; + else if (_wo[189]) + _indoorList._fwl_4F3L._frame = 15; + else if (_wo[209]) + _indoorList._fwl_4F3L._frame = 14; + else if (_wo[229]) + _indoorList._fwl_4F3L._frame = 6; + else if (_wo[249]) + _indoorList._fwl_4F3L._frame = 11; + else if (_wo[269]) + _indoorList._fwl_4F3L._frame = 12; + else if (_wo[289]) + _indoorList._fwl_4F3L._frame = 13; + } + + if (_wo[22] && _wo[20]) { + } else if (_wo[22] && _wo[23]) { + } else if (_wo[20] && _wo[17]) { + } else if (_wo[23] && _wo[17]) { + } else if (_wo[12]) { + } else if (_wo[8]) { + } else if (_wo[90]) { + _indoorList._fwl_4F2L._frame = 7; + } else if (_wo[45]) { + _indoorList._fwl_4F2L._frame = 16; + } else if (_wo[150]) { + _indoorList._fwl_4F2L._frame = _overallFrame + 1; + } else if (_wo[110]) { + _indoorList._fwl_4F2L._frame = 8; + } else if (_wo[170]) { + _indoorList._fwl_4F2L._frame = 10; + } else if (_wo[130]) { + _indoorList._fwl_4F2L._frame = 9; + } else if (_wo[1]) { + _indoorList._fwl_4F2L._frame = 0; + } else if (_wo[190]) { + _indoorList._fwl_4F2L._frame = 15; + } else if (_wo[210]) { + _indoorList._fwl_4F2L._frame = 14; + } else if (_wo[230]) { + _indoorList._fwl_4F2L._frame = 6; + } else if (_wo[250]) { + _indoorList._fwl_4F2L._frame = 11; + } else if (_wo[270]) { + _indoorList._fwl_4F2L._frame = 12; + } else if (_wo[290]) { + _indoorList._fwl_4F2L._frame = 13; + } + + if (_wo[15] && _wo[17]) { + } else if (_wo[15] && _wo[12]) { + } else if (_wo[12] && _wo[7]) { + } else if (_wo[17] && _wo[7]) { + } else if (_wo[91]) { + _indoorList._fwl_4F1L._frame = 7; + } else if (_wo[46]) { + _indoorList._fwl_4F1L._frame = 16; + } else if (_wo[151]) { + _indoorList._fwl_4F1L._frame = _overallFrame + 1; + } else if (_wo[111]) { + _indoorList._fwl_4F1L._frame = 8; + } else if (_wo[171]) { + _indoorList._fwl_4F1L._frame = 10; + } else if (_wo[131]) { + _indoorList._fwl_4F1L._frame = 9; + } else if (_wo[2]) { + _indoorList._fwl_4F1L._frame = 0; + } else if (_wo[191]) { + _indoorList._fwl_4F1L._frame = 15; + } else if (_wo[211]) { + _indoorList._fwl_4F1L._frame = 14; + } else if (_wo[231]) { + _indoorList._fwl_4F1L._frame = 6; + } else if (_wo[251]) { + _indoorList._fwl_4F1L._frame = 11; + } else if (_wo[271]) { + _indoorList._fwl_4F1L._frame = 12; + } else if (_wo[291]) { + _indoorList._fwl_4F1L._frame = 13; + } + + if (!_wo[27] && !_wo[21] && !_wo[14] && !_wo[24] && !_wo[10] && !_wo[31]) { + if (_wo[92]) { + _indoorList._fwl_4F3R._frame = 7; + } else if (_wo[47]) { + _indoorList._fwl_4F3R._frame = 16; + } else if (_wo[152]) { + _indoorList._fwl_4F3R._frame = _overallFrame + 1; + } else if (_wo[112]) { + _indoorList._fwl_4F3R._frame = 8; + } else if (_wo[172]) { + _indoorList._fwl_4F3R._frame = 10; + } else if (_wo[132]) { + _indoorList._fwl_4F3R._frame = 9; + } else if (_wo[3]) { + _indoorList._fwl_4F3R._frame = 0; + } else if (_wo[192]) { + _indoorList._fwl_4F3R._frame = 15; + } else if (_wo[212]) { + _indoorList._fwl_4F3R._frame = 14; + } else if (_wo[232]) { + _indoorList._fwl_4F3R._frame = 6; + } else if (_wo[252]) { + _indoorList._fwl_4F3R._frame = 11; + } else if (_wo[272]) { + _indoorList._fwl_4F3R._frame = 12; + } else if (_wo[292]) { + _indoorList._fwl_4F3R._frame = 13; + } + } + + if (_wo[22] && _wo[21]) { + } else if (_wo[22] && _wo[24]) { + } else if (_wo[21] && _wo[19]) { + } else if (_wo[24] && _wo[19]) { + } else if (_wo[14] || _wo[10]) { + } else if (_wo[94]) { + _indoorList._fwl_4F2R._frame = 7; + } else if (_wo[48]) { + _indoorList._fwl_4F2R._frame = 16; + } else if (_wo[154]) { + _indoorList._fwl_4F2R._frame = _overallFrame + 1; + } else if (_wo[114]) { + _indoorList._fwl_4F2R._frame = 8; + } else if (_wo[174]) { + _indoorList._fwl_4F2R._frame = 10; + } else if (_wo[134]) { + _indoorList._fwl_4F2R._frame = 9; + } else if (_wo[4]) { + _indoorList._fwl_4F2R._frame = 0; + } else if (_wo[194]) { + _indoorList._fwl_4F2R._frame = 15; + } else if (_wo[214]) { + _indoorList._fwl_4F2R._frame = 14; + } else if (_wo[234]) { + _indoorList._fwl_4F2R._frame = 6; + } else if (_wo[254]) { + _indoorList._fwl_4F2R._frame = 11; + } else if (_wo[274]) { + _indoorList._fwl_4F2R._frame = 12; + } else if (_wo[294]) { + _indoorList._fwl_4F2R._frame = 13; + } + + if (_wo[15] && _wo[19]) { + } else if (_wo[15] && _wo[14]) { + } else if (_wo[14] && _wo[9]) { + } else if (_wo[19] && _wo[9]) { + } else if (_wo[95]) { + _indoorList._fwl_4F1R._frame = 7; + } else if (_wo[49]) { + _indoorList._fwl_4F1R._frame = 16; + } else if (_wo[155]) { + _indoorList._fwl_4F1R._frame = _overallFrame + 1; + } else if (_wo[115]) { + _indoorList._fwl_4F1R._frame = 8; + } else if (_wo[175]) { + _indoorList._fwl_4F1R._frame = 10; + } else if (_wo[135]) { + _indoorList._fwl_4F1R._frame = 9; + } else if (_wo[5]) { + _indoorList._fwl_4F1R._frame = 0; + } else if (_wo[195]) { + _indoorList._fwl_4F1R._frame = 15; + } else if (_wo[215]) { + _indoorList._fwl_4F1R._frame = 14; + } else if (_wo[235]) { + _indoorList._fwl_4F1R._frame = 6; + } else if (_wo[255]) { + _indoorList._fwl_4F1R._frame = 11; + } else if (_wo[275]) { + _indoorList._fwl_4F1R._frame = 12; + } else if (_wo[295]) { + _indoorList._fwl_4F1R._frame = 13; + } + + if (_wo[27] || _wo[22] || _wo[15] || _wo[96]) { + } else if (_wo[50]) { + _indoorList._fwl_4F._frame = 16; + } else if (_wo[156]) { + _indoorList._fwl_4F._frame = _overallFrame + 1; + } else if (_wo[116]) { + _indoorList._fwl_4F._frame = 8; + } else if (_wo[176]) { + _indoorList._fwl_4F._frame = 10; + } else if (_wo[136]) { + _indoorList._fwl_4F._frame = 9; + } else if (_wo[6]) { + _indoorList._fwl_4F._frame = 0; + } else if (_wo[196]) { + _indoorList._fwl_4F._frame = 15; + } else if (_wo[216]) { + _indoorList._fwl_4F._frame = 14; + } else if (_wo[236]) { + _indoorList._fwl_4F._frame = 6; + } else if (_wo[256]) { + _indoorList._fwl_4F._frame = 11; + } else if (_wo[276]) { + _indoorList._fwl_4F._frame = 12; + } else if (_wo[296]) { + _indoorList._fwl_4F._frame = 13; + } + + if (!_wo[27] && !_wo[22] && !_wo[15]) { + if (_wo[7]) + _indoorList._swl_3F1L._frame = 8; + else if (_wo[51]) + _indoorList._swl_3F1L._frame = 32; + } + + if (_wo[22] && _wo[23]) { + } else if (_wo[22] && _wo[20]) { + } else if (_wo[17] && _wo[23]) { + } else if (_wo[17] && _wo[20]) { + } else if (_wo[8]) { + _indoorList._swl_3F2L._frame = 10; + } else if (_wo[52]) { + _indoorList._swl_3F2L._frame = 34; + } + + if (_wo[27] || _wo[22] || _wo[15]) { + } else if (_wo[9]) { + _indoorList._swl_3F4R._frame = 9; + } else if (_wo[53]) { + _indoorList._swl_3F4R._frame = 33; + } + + if (_wo[22] && _wo[24]) { + } else if (_wo[22] && _wo[21]) { + } else if (_wo[19] && _wo[24]) { + } else if (_wo[19] && _wo[21]) { + } else if (_wo[14]) { + } else if (_wo[10]) { + _indoorList._swl_3F3R._frame = 11; + } else if (_wo[54]) { + _indoorList._swl_3F3R._frame = 35; + } + + if (_wo[25] || _wo[28] || _wo[20] || _wo[16]) { + } else if (_wo[97]) { + _indoorList._fwl_3F2L._frame = 24; + } else if (_wo[55]) { + _indoorList._fwl_3F2L._frame = 33; + } else if (_wo[137]) { + _indoorList._fwl_3F2L._frame = 26; + } else if (_wo[157]) { + _indoorList._fwl_3F2L._frame = _overallFrame + 18; + } else if (_wo[117]) { + _indoorList._fwl_3F2L._frame = 25; + } else if (_wo[177]) { + _indoorList._fwl_3F2L._frame = 27; + } else if (_wo[11]) { + _indoorList._fwl_3F2L._frame = 17; + } else if (_wo[197]) { + _indoorList._fwl_3F2L._frame = 32; + } else if (_wo[217]) { + _indoorList._fwl_3F2L._frame = 31; + } else if (_wo[237]) { + _indoorList._fwl_3F2L._frame = 23; + } else if (_wo[257]) { + _indoorList._fwl_3F2L._frame = 28; + } else if (_wo[277]) { + _indoorList._fwl_3F2L._frame = 29; + } else if (_wo[297]) { + _indoorList._fwl_3F2L._frame = 30; + } + + if (_wo[22] && _wo[23]) { + } else if (_wo[22] && _wo[20]) { + } else if (_wo[23] && _wo[17]) { + } else if (_wo[20] && _wo[17]) { + } else if (_wo[98]) { + _indoorList._fwl_3F1L._frame = 24; + } else if (_wo[56]) { + _indoorList._fwl_3F1L._frame = 33; + } else if (_wo[178]) { + _indoorList._fwl_3F1L._frame = 27; + } else if (_wo[118]) { + _indoorList._fwl_3F1L._frame = 25; + } else if (_wo[158]) { + _indoorList._fwl_3F1L._frame = _overallFrame + 18; + } else if (_wo[138]) { + _indoorList._fwl_3F1L._frame = 26; + } else if (_wo[12]) { + _indoorList._fwl_3F1L._frame = 17; + } else if (_wo[198]) { + _indoorList._fwl_3F1L._frame = 32; + } else if (_wo[218]) { + _indoorList._fwl_3F1L._frame = 31; + } else if (_wo[238]) { + _indoorList._fwl_3F1L._frame = 23; + } else if (_wo[258]) { + _indoorList._fwl_3F1L._frame = 28; + } else if (_wo[278]) { + _indoorList._fwl_3F1L._frame = 29; + } else if (_wo[298]) { + _indoorList._fwl_3F1L._frame = 30; + } + + if (_wo[26] || _wo[29] || _wo[21] || _wo[18]) { + } else if (_wo[99]) { + _indoorList._fwl_3F2R._frame = 24; + } else if (_wo[57]) { + _indoorList._fwl_3F2R._frame = 33; + } else if (_wo[139]) { + _indoorList._fwl_3F2R._frame = 26; + } else if (_wo[159]) { + _indoorList._fwl_3F2R._frame = _overallFrame + 18; + } else if (_wo[119]) { + _indoorList._fwl_3F2R._frame = 25; + } else if (_wo[179]) { + _indoorList._fwl_3F2R._frame = 27; + } else if (_wo[13]) { + _indoorList._fwl_3F2R._frame = 17; + } else if (_wo[199]) { + _indoorList._fwl_3F2R._frame = 32; + } else if (_wo[219]) { + _indoorList._fwl_3F2R._frame = 31; + } else if (_wo[239]) { + _indoorList._fwl_3F2R._frame = 23; + } else if (_wo[259]) { + _indoorList._fwl_3F2R._frame = 28; + } else if (_wo[279]) { + _indoorList._fwl_3F2R._frame = 29; + } else if (_wo[299]) { + _indoorList._fwl_3F2R._frame = 30; + } + + if (_wo[22] && _wo[24]) { + } else if (_wo[22] && _wo[21]) { + } else if (_wo[24] && _wo[19]) { + } else if (_wo[21] && _wo[19]) { + } else if (_wo[100]) { + _indoorList._fwl_3F1R._frame = 24; + } else if (_wo[58]) { + _indoorList._fwl_3F1R._frame = 33; + } else if (_wo[140]) { + _indoorList._fwl_3F1R._frame = 26; + } else if (_wo[160]) { + _indoorList._fwl_3F1R._frame = _overallFrame + 18; + } else if (_wo[120]) { + _indoorList._fwl_3F1R._frame = 25; + } else if (_wo[180]) { + _indoorList._fwl_3F1R._frame = 27; + } else if (_wo[14]) { + _indoorList._fwl_3F1R._frame = 17; + } else if (_wo[200]) { + _indoorList._fwl_3F1R._frame = 32; + } else if (_wo[220]) { + _indoorList._fwl_3F1R._frame = 31; + } else if (_wo[240]) { + _indoorList._fwl_3F1R._frame = 23; + } else if (_wo[260]) { + _indoorList._fwl_3F1R._frame = 28; + } else if (_wo[280]) { + _indoorList._fwl_3F1R._frame = 29; + } else if (_wo[300]) { + _indoorList._fwl_3F1R._frame = 30; + } + + if (_wo[22] || _wo[27]) { + } else if (_wo[101]) { + _indoorList._fwl_3F._frame = 24; + } else if (_wo[59]) { + _indoorList._fwl_3F._frame = 33; + } else if (_wo[141]) { + _indoorList._fwl_3F._frame = 26; + } else if (_wo[161]) { + _indoorList._fwl_3F._frame = _overallFrame + 18; + } else if (_wo[121]) { + _indoorList._fwl_3F._frame = 25; + } else if (_wo[181]) { + _indoorList._fwl_3F._frame = 27; + } else if (_wo[15]) { + _indoorList._fwl_3F._frame = 17; + } else if (_wo[201]) { + _indoorList._fwl_3F._frame = 32; + } else if (_wo[221]) { + _indoorList._fwl_3F._frame = 31; + } else if (_wo[241]) { + _indoorList._fwl_3F._frame = 23; + } else if (_wo[261]) { + _indoorList._fwl_3F._frame = 28; + } else if (_wo[281]) { + _indoorList._fwl_3F._frame = 29; + } else if (_wo[301]) { + _indoorList._fwl_3F._frame = 30; + } + + if (_wo[25] || _wo[28] || _wo[20]) { + } else if (_wo[16]) { + _indoorList._swl_2F2L._frame = 6; + } else if (_wo[60]) { + _indoorList._swl_2F2L._frame = 30; + } + + if (_wo[27] || _wo[22]) { + } else if (_wo[17]) { + _indoorList._swl_2F1L._frame = 4; + } else if (_wo[61]) { + _indoorList._swl_2F1L._frame = 28; + } + + if (_wo[26] || _wo[29] || _wo[21]) { + } else if (_wo[18]) { + _indoorList._swl_2F2R._frame = 7; + } else if (_wo[62]) { + _indoorList._swl_2F2R._frame = 31; + } + + if (_wo[27] || _wo[22]) { + } else if (_wo[19]) { + _indoorList._swl_2F1R._frame = 5; + } else if (_wo[63]) { + _indoorList._swl_2F1R._frame = 29; + } + + if (_wo[27] && _wo[25]) { + } else if (_wo[27] && _wo[28]) { + } else if (_wo[23] & _wo[25]) { + } else if (_wo[23] && _wo[28]) { + } else if (_wo[102]) { + _indoorList._fwl_2F1L._frame = 7; + } else if (_wo[64]) { + _indoorList._fwl_2F1L._frame = 16; + } else if (_wo[182]) { + _indoorList._fwl_2F1L._frame = 10; + } else if (_wo[122]) { + _indoorList._fwl_2F1L._frame = 8; + } else if (_wo[142]) { + _indoorList._fwl_2F1L._frame = 9; + } else if (_wo[162]) { + _indoorList._fwl_2F1L._frame = _overallFrame + 1; + } else if (_wo[20]) { + _indoorList._fwl_2F1L._frame = 0; + } else if (_wo[202]) { + _indoorList._fwl_2F1L._frame = 15; + } else if (_wo[222]) { + _indoorList._fwl_2F1L._frame = 14; + } else if (_wo[242]) { + _indoorList._fwl_2F1L._frame = 6; + } else if (_wo[262]) { + _indoorList._fwl_2F1L._frame = 11; + } else if (_wo[282]) { + _indoorList._fwl_2F1L._frame = 12; + } else if (_wo[302]) { + _indoorList._fwl_2F1L._frame = 13; + } + + if (_wo[27] && _wo[26]) { + } else if (_wo[27] && _wo[29]) { + } else if (_wo[24] && _wo[26]) { + } else if (_wo[24] && _wo[29]) { + } else if (_wo[103]) { + _indoorList._fwl_2F1R._frame = 7; + } else if (_wo[65]) { + _indoorList._fwl_2F1R._frame = 16; + } else if (_wo[183]) { + _indoorList._fwl_2F1R._frame = 10; + } else if (_wo[123]) { + _indoorList._fwl_2F1R._frame = 8; + } else if (_wo[143]) { + _indoorList._fwl_2F1R._frame = 9; + } else if (_wo[163]) { + _indoorList._fwl_2F1R._frame = _overallFrame + 1; + } else if (_wo[21]) { + _indoorList._fwl_2F1R._frame = 0; + } else if (_wo[203]) { + _indoorList._fwl_2F1R._frame = 15; + } else if (_wo[223]) { + _indoorList._fwl_2F1R._frame = 14; + } else if (_wo[243]) { + _indoorList._fwl_2F1R._frame = 6; + } else if (_wo[263]) { + _indoorList._fwl_2F1R._frame = 11; + } else if (_wo[283]) { + _indoorList._fwl_2F1R._frame = 12; + } else if (_wo[303]) { + _indoorList._fwl_2F1R._frame = 13; + } + + if (_wo[27]) { + } else if (_wo[104]) { + _indoorList._fwl_2F._frame = 7; + } else if (_wo[66]) { + _indoorList._fwl_2F._frame = 16; + } else if (_wo[184]) { + _indoorList._fwl_2F._frame = 10; + } else if (_wo[124]) { + _indoorList._fwl_2F._frame = 8; + } else if (_wo[144]) { + _indoorList._fwl_2F._frame = 9; + } else if (_wo[164]) { + _indoorList._fwl_2F._frame = _overallFrame + 1; + } else if (_wo[22]) { + _indoorList._fwl_2F._frame = 0; + } else if (_wo[204]) { + _indoorList._fwl_2F._frame = 15; + } else if (_wo[224]) { + _indoorList._fwl_2F._frame = 14; + } else if (_wo[244]) { + _indoorList._fwl_2F._frame = 6; + } else if (_wo[264]) { + _indoorList._fwl_2F._frame = 11; + } else if (_wo[284]) { + _indoorList._fwl_2F._frame = 12; + } else if (_wo[304]) { + _indoorList._fwl_2F._frame = 13; + } + + if (_wo[27]) { + } else if (_wo[23]) { + _indoorList._swl_1F1L._frame = 2; + } else if (_wo[67]) { + _indoorList._swl_1F1L._frame = 26; + } + + if (_wo[27]) { + } else if (_wo[24]) { + _indoorList._swl_1F1R._frame = 3; + } else if (_wo[68]) { + _indoorList._swl_1F1R._frame = 27; + } + + if (_wo[28]) { + } else if (_wo[105] || _wo[25] || _wo[165] || _wo[125] || _wo[185] || _wo[145]) { + _indoorList._fwl_1F1L._frame = 0; + _indoorList._fwl_1F1L._sprites = &map._wallSprites._fwl1; + } else if (_wo[69]) { + _indoorList._fwl_1F1L._frame = 9; + _indoorList._fwl_1F1L._sprites = &map._wallSprites._fwl2; + } + + if (_wo[29]) { + } else if (_wo[106] || _wo[26] || _wo[166] || _wo[126] || _wo[186] || _wo[146]) { + _indoorList._fwl_1F._frame = 0; + _indoorList._fwl_1F._sprites = &map._wallSprites._fwl1; + } else if (_wo[70]) { + _indoorList._fwl_1F._frame = 9; + _indoorList._fwl_1F._sprites = &map._wallSprites._fwl2; + } + + if (_wo[107]) { + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + if (!_openDoor) + _indoorList._fwl_1F1R._frame = 0; + else + _indoorList._fwl_1F1R._frame = map.mazeData()._wallKind ? 1 : 10; + } else if (_wo[71]) { + _indoorList._fwl_1F1R._frame = 9; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[167]) { + _indoorList._fwl_1F1R._frame = _overallFrame + 1; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl1; + } else if (_wo[127]) { + _indoorList._fwl_1F1R._frame = 1; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[147]) { + _indoorList._fwl_1F1R._frame = 2; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[187]) { + _indoorList._fwl_1F1R._frame = 3; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[27]) { + _indoorList._fwl_1F1R._frame = 0; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl1; + } else if (_wo[207]) { + _indoorList._fwl_1F1R._frame = 8; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[227]) { + _indoorList._fwl_1F1R._frame = 7; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[247]) { + _indoorList._fwl_1F1R._frame = 6; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl1; + } else if (_wo[267]) { + _indoorList._fwl_1F1R._frame = 4; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[287]) { + _indoorList._fwl_1F1R._frame = 5; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } else if (_wo[307]) { + _indoorList._fwl_1F1R._frame = 6; + _indoorList._fwl_1F1R._sprites = &map._wallSprites._fwl2; + } + + if (_wo[28]) { + _indoorList._swl_0F1L._frame = 0; + } else if (_wo[72]) { + _indoorList._swl_0F1L._frame = 24; + } + + if (_wo[29]) { + _indoorList._swl_0F1R._frame = 1; + } else if (_wo[73]) { + _indoorList._swl_0F1R._frame = 25; + } + + map.cellFlagLookup(_vm->_party->_mazePosition); + + assert(map._currentSky < 2); + _indoorList[0]._sprites = &map._skySprites[map._currentSky]; + _indoorList[0]._flags = _flipSky ? SPRFLAG_HORIZ_FLIPPED : 0; + + if (_openDoor) { + Common::Point pt( + _vm->_party->_mazePosition.x + Res.SCREEN_POSITIONING_X[ + _vm->_party->_mazeDirection][_vm->_party->_mazePosition.x], + _vm->_party->_mazePosition.y + Res.SCREEN_POSITIONING_Y[ + _vm->_party->_mazeDirection][_vm->_party->_mazePosition.y] + ); + map.cellFlagLookup(pt); + + _indoorList._sky2._sprites = &map._skySprites[0]; + } else { + _indoorList._sky2._sprites = _indoorList[0]._sprites; + } + + _indoorList._sky2._flags = _flipSky ? SPRFLAG_HORIZ_FLIPPED : 0; + _indoorList._ground._flags = _flipDefaultGround ? SPRFLAG_HORIZ_FLIPPED : 0; + _indoorList._horizon._frame = 7; + + // Finally draw the darn indoor scene + windows[3].drawList(&_indoorList[0], _indoorList.size()); + + // Check for any character shooting + _isAttacking = false; + for (uint idx = 0; idx < _vm->_party->_activeParty.size(); ++idx) { + if (_vm->_combat->_shooting[idx]) + _isAttacking = true; + } + + _charsShooting = _isAttacking; +} + +void InterfaceScene::drawOutdoors() { + Map &map = *_vm->_map; + Party &party = *_vm->_party; + Windows &windows = *_vm->_windows; + int surfaceId; + + // Draw any surface tiles on top of the default ground + for (int cellIndex = 0; cellIndex < 25; ++cellIndex) { + map.getCell(cellIndex == 24 ? 2 : Res.DRAW_NUMBERS[cellIndex]); + + DrawStruct &drawStruct = _outdoorList._groundTiles[cellIndex]; + SpriteResource &sprites = map._surfaceSprites[map._currentSurfaceId]; + drawStruct._sprites = sprites.empty() ? (SpriteResource *)nullptr : &sprites; + + surfaceId = map.mazeData()._surfaceTypes[map._currentSurfaceId]; + if (surfaceId == SURFTYPE_DWATER || surfaceId == SURFTYPE_LAVA) { + drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0]; + drawStruct._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0; + } else { + drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0]; + drawStruct._flags = _flipGround ? SPRFLAG_HORIZ_FLIPPED : 0; + } + } + + party.handleLight(); + + // Set up terrain draw entries + const int TERRAIN_INDEXES1[9] = { 44, 36, 37, 38, 45, 43, 42, 41, 39 }; + const int TERRAIN_INDEXES2[5] = { 22, 24, 31, 29, 26 }; + const int TERRAIN_INDEXES3[3] = { 11, 16, 13 }; + const int TERRAIN_INDEXES4[5] = { 5, 9, 7, 0, 4 }; + + // Loops to set draw entries for the terrain + assert(map._currentWall != INVALID_CELL); + for (int idx = 0; idx < 9; ++idx) { + map.getCell(TERRAIN_INDEXES1[idx]); + SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; + _outdoorList[28 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; + } + for (int idx = 0; idx < 5; ++idx) { + map.getCell(TERRAIN_INDEXES2[idx]); + SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; + _outdoorList[61 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; + } + for (int idx = 0; idx < 3; ++idx) { + map.getCell(TERRAIN_INDEXES3[idx]); + SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; + _outdoorList[84 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; + } + for (int idx = 0; idx < 5; ++idx) { + map.getCell(TERRAIN_INDEXES4[idx]); + SpriteResource &spr = map._wallSprites._surfaces[map._currentWall]; + _outdoorList[103 + idx]._sprites = spr.size() == 0 ? (SpriteResource *)nullptr : &spr; + } + + map.getCell(1); + SpriteResource &surface = map._wallSprites._surfaces[map._currentWall]; + _outdoorList[108]._sprites = surface.size() == 0 ? (SpriteResource *)nullptr : &surface; + _outdoorList[109]._sprites = _outdoorList[108]._sprites; + _outdoorList[110]._sprites = _outdoorList[108]._sprites; + _outdoorList._sky1._flags = _outdoorList._sky2._flags = _flipSky ? SPRFLAG_HORIZ_FLIPPED : 0; + _outdoorList._groundSprite._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0; + + // Finally render the outdoor scene + windows[3].drawList(&_outdoorList[0], _outdoorList.size()); + + // Check for any character shooting + _isAttacking = false; + for (uint idx = 0; idx < _vm->_party->_activeParty.size(); ++idx) { + if (_vm->_combat->_shooting[idx]) + _isAttacking = true; + } + + _charsShooting = _isAttacking; +} + +} // End of namespace Xeen diff --git a/engines/xeen/interface_scene.h b/engines/xeen/interface_scene.h new file mode 100644 index 0000000000..3b5e4526ff --- /dev/null +++ b/engines/xeen/interface_scene.h @@ -0,0 +1,175 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef XEEN_INTERFACE_SCENE_H +#define XEEN_INTERFACE_SCENE_H + +#include "common/scummsys.h" +#include "xeen/map.h" +#include "xeen/window.h" + +namespace Xeen { + +class XeenEngine; + +class OutdoorDrawList { +public: + DrawStruct _data[132]; + DrawStruct &_sky1, &_sky2; + DrawStruct &_groundSprite; + DrawStruct * const _groundTiles; + DrawStruct * const _attackImgs1; + DrawStruct * const _attackImgs2; + DrawStruct * const _attackImgs3; + DrawStruct * const _attackImgs4; +public: + OutdoorDrawList(); + + DrawStruct &operator[](int idx) { + assert(idx < size()); + return _data[idx]; + } + + int size() const { return 132; } +}; + +class IndoorDrawList { +public: + DrawStruct _data[170]; + DrawStruct &_sky1, &_sky2; + DrawStruct &_ground; + DrawStruct &_horizon; + DrawStruct * const _groundTiles; + DrawStruct &_swl_0F1R, &_swl_0F1L, &_swl_1F1R, &_swl_1F1L, + &_swl_2F2R, &_swl_2F1R, &_swl_2F1L, &_swl_2F2L, + &_swl_3F1R, &_swl_3F2R, &_swl_3F3R, &_swl_3F4R, + &_swl_3F1L, &_swl_3F2L, &_swl_3F3L, &_swl_3F4L, + &_swl_4F4R, &_swl_4F3R, &_swl_4F2R, &_swl_4F1R, + &_swl_4F1L, &_swl_4F2L, &_swl_4F3L, &_swl_4F4L; + DrawStruct &_fwl_4F4R, &_fwl_4F3R, &_fwl_4F2R, &_fwl_4F1R, + &_fwl_4F, &_fwl_4F1L, &_fwl_4F2L, &_fwl_4F3L, &_fwl_4F4L; + DrawStruct &_fwl_2F1R, &_fwl_2F, &_fwl_2F1L, &_fwl_3F2R, + &_fwl_3F1R, &_fwl_3F, &_fwl_3F1L, &_fwl_3F2L; + DrawStruct &_fwl_1F, &_fwl_1F1R, &_fwl_1F1L; + DrawStruct &_objects0, &_objects1, &_objects2, &_objects3; + DrawStruct &_objects4, &_objects5, &_objects6, &_objects7; + DrawStruct &_objects8, &_objects9, &_objects10, &_objects11; + DrawStruct * const _attackImgs1; + DrawStruct * const _attackImgs2; + DrawStruct * const _attackImgs3; + DrawStruct * const _attackImgs4; +public: + IndoorDrawList(); + + DrawStruct &operator[](int idx) { + assert(idx < size()); + return _data[idx]; + } + + int size() const { return 170; } +}; + +class InterfaceScene { +private: + XeenEngine *_vm; + int _combatFloatCounter; + + void initDrawStructs(); + + /** + * Helper method for setIndoorsMonsters to set a draw structure + * with the deatils for a given monster + */ + void setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster, + SpriteResource *sprites, int frame, int defaultY); +protected: + int8 _wp[20]; + byte _wo[308]; + bool _flipWater; + bool _flipGround; + bool _flipSky; + bool _flipDefaultGround; + bool _thinWall; + bool _isAnimReset; + + void setMazeBits(); + + /** + * Handles animation of monsters, wall items, and combat within the 3d + * view by cycling the appropriate frame numbers + */ + void animate3d(); + + void drawMap(); +public: + OutdoorDrawList _outdoorList; + IndoorDrawList _indoorList; + SpriteResource _charPowSprites; + int _objNumber; + int _overallFrame; + bool _charsShooting; + bool _openDoor; + bool _isAttacking; +public: + InterfaceScene(XeenEngine *vm); + + virtual ~InterfaceScene() {} + + /** + * Set up draw structures for displaying on-screen monsters + */ + void setIndoorsMonsters(); + + /** + * Set up draw structures for displaying on-screen objects + */ + void setIndoorsObjects(); + + /** + * Set up draw structures for displaying on-screen wall items + */ + void setIndoorsWallPics(); + + /** + * Draw the contents of the current 3d view of an indoor map + */ + void drawIndoors(); + + /** + * Set up the draw structures for displaying monsters on outdoor maps + */ + void setOutdoorsMonsters(); + + /** + * Set up the draw structures for displaying objects on outdoor maps + */ + void setOutdoorsObjects(); + + /** + * Draw the contents of the current 3d view of an outdoor map + */ + void drawOutdoors(); +}; + +} // End of namespace Xeen + +#endif /* XEEN_INTERFACE_SCENE_H */ diff --git a/engines/xeen/module.mk b/engines/xeen/module.mk index 7a374474d3..1be0d28207 100644 --- a/engines/xeen/module.mk +++ b/engines/xeen/module.mk @@ -32,8 +32,8 @@ MODULE_OBJS := \ files.o \ font.o \ interface.o \ - interface_map.o \ interface_minimap.o \ + interface_scene.o \ map.o \ music.o \ party.o \ -- cgit v1.2.3