diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/dm/dungeonman.h | 4 | ||||
-rw-r--r-- | engines/dm/gfx.cpp | 54 | ||||
-rw-r--r-- | engines/dm/gfx.h | 21 |
3 files changed, 76 insertions, 3 deletions
diff --git a/engines/dm/dungeonman.h b/engines/dm/dungeonman.h index 60a0bb6881..dbcb6fbcd8 100644 --- a/engines/dm/dungeonman.h +++ b/engines/dm/dungeonman.h @@ -447,6 +447,10 @@ public: Messages _messages; // @ NONE; int16 _currMapInscriptionWallOrnIndex; // @ G0265_i_CurrentMapInscriptionWallOrnamentIndex + byte _dungeonViewClickableBoxes[6][4]; // G0291_aauc_DungeonViewClickableBoxes + bool _isFacingAlcove; // @ G0286_B_FacingAlcove + bool _isFacingViAltar; // @ G0287_B_FacingViAltar + bool _isFacingFountain; // @ G0288_B_FacingFountain }; } diff --git a/engines/dm/gfx.cpp b/engines/dm/gfx.cpp index c88ca0068a..0840da6b02 100644 --- a/engines/dm/gfx.cpp +++ b/engines/dm/gfx.cpp @@ -121,6 +121,7 @@ enum ViewSquare { kViewSquare_D0C_Explosion = 12 // @ C12_VIEW_SQUARE_D0C_EXPLOSION }; + Frame gCeilingFrame(0, 223, 0, 28, 112, 29, 0, 0); // @ K0012_s_Frame_Ceiling Frame gFloorFrame(0, 223, 66, 135, 112, 70, 0, 0); // @ K0013_s_Frame_Floor @@ -607,8 +608,9 @@ enum GraphicIndice { -extern Viewport gDefultViewPort = {0, 0}; -extern Viewport gDungeonViewport = {0, 64}; // TODO: I guessed the numbers +Viewport gDefultViewPort = {0, 0}; +// TODO: I guessed the numbers +Viewport gDungeonViewport = {0, 64}; // @ G0296_puc_Bitmap_Viewport byte gPalChangesNoChanges[16] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}; // @ G0017_auc_Graphic562_PaletteChanges_NoChanges @@ -1004,6 +1006,9 @@ void DisplayMan::drawSquareD1C(direction dir, int16 posX, int16 posY) { drawFloorPitOrStairsBitmap(kStairsNativeIndex_Down_Front_D1C, gStairFrames[kFrameStairsDownFront_D1C]); break; case kWallElemType: + _vm->_dungeonMan->_isFacingAlcove = false; + _vm->_dungeonMan->_isFacingViAltar = false; + _vm->_dungeonMan->_isFacingFountain = false; drawWallSetBitmapWithoutTransparency(_wallSetBitMaps[kWall_D1LCR], gFrameWalls[kViewSquare_D1C]); break; } @@ -1061,6 +1066,11 @@ void DisplayMan::drawDungeon(direction dir, int16 posX, int16 posY) { byte *tmpBitmap = new byte[305 * 111]; clearBitmap(tmpBitmap, 305, 111, kColorBlack); + memset(_vm->_dungeonMan->_dungeonViewClickableBoxes, 0, sizeof(_vm->_dungeonMan->_dungeonViewClickableBoxes)); + for (uint16 i = 0; i < 6; ++i) { + _vm->_dungeonMan->_dungeonViewClickableBoxes[i][0] = 255; + } + if (flippedFloorCeiling) { uint16 w = gFloorFrame.srcWidth, h = gFloorFrame.srcHeight; blitToBitmap(_floorBitmap, w, h, tmpBitmap, w); @@ -1215,6 +1225,8 @@ void DisplayMan::loadCurrentMapGraphics() { uint16 fountainCount = 0; Map &currMap = *_vm->_dungeonMan->_currMap.map; + _currMapViAltarIndex = -1; + for (uint16 i = 0; i < currMap.wallOrnCount; ++i) { uint16 ornIndice = _currMapWallOrnIndices[i]; uint16 nativeIndice = kFirstWallOrn + ornIndice * 2; @@ -1284,3 +1296,41 @@ void DisplayMan::drawFloorPitOrStairsBitmapFlippedHorizontally(StairIndex relInd blitToScreen(_tmpBitmap, f.srcWidth, f.srcX, f.srcY, f.destFromX, f.destToX, f.destFromY, f.destToY, kColorFlesh, gDungeonViewport); } } + + +Box gBoxWallPatchBehindInscription = {110, 113, 37, 63}; // @ G0202_ac_Graphic558_Box_WallPatchBehindInscription +byte gInscriptionLineY[4] = { // @ G0203_auc_Graphic558_InscriptionLineY + 48, /* 1 Line */ + 59, /* 2 lines */ + 75, /* 3 lines */ + 86}; /* 4 lines */ +byte gWallOrnDerivedBitmapIndexIncrement[12] = { // @ G0190_auc_Graphic558_WallOrnamentDerivedBitmapIndexIncrement + 0, /* D3L Right */ + 0, /* D3R Left */ + 1, /* D3L Front */ + 1, /* D3C Front */ + 1, /* D3R Front */ + 2, /* D2L Right */ + 2, /* D2R Left */ + 3, /* D2L Front */ + 3, /* D2C Front */ + 3, /* D2R Front */ + 4, /* D1L Right */ + 4}; /* D1R Left */ + +byte gPalChangesDoorButtonAndWallOrn_D3[16] = {0, 0, 120, 30, 40, 30, 0, 60, 30, 90, 100, 110, 0, 10, 0, 20}; // @ G0198_auc_Graphic558_PaletteChanges_DoorButtonAndWallOrnament_D3 +byte gPalChangesDoorButtonAndWallOrn_D2[16] = {0, 120, 10, 30, 40, 30, 60, 70, 50, 90, 100, 110, 0, 20, 140, 130}; // @ G0199_auc_Graphic558_PaletteChanges_DoorButtonAndWallOrnament_D2 + +byte gUnreadableInscriptionBoxY2[15] = { // @ G0204_auc_Graphic558_UnreadableInscriptionBoxY2 + /* { Y for 1 line, Y for 2 lines, Y for 3 lines } */ + 45, 48, 53, /* D3L Right, D3R Left */ + 43, 49, 56, /* D3L Front, D3C Front, D3R Front */ + 42, 49, 56, /* D2L Right, D2R Left */ + 46, 53, 63, /* D2L Front, D2C Front, D2R Front */ + 46, 57, 68}; /* D1L Right, D1R Left */ + +Box gBoxChampionPortraitOnWall = {96, 127, 35, 63}; // G0109_s_Graphic558_Box_ChampionPortraitOnWall + +bool DisplayMan::isDrawnWallOrnAnAlcove(int16 wallOrnOrd, ViewWall viewWallIndex) { + return false; // dummy +} diff --git a/engines/dm/gfx.h b/engines/dm/gfx.h index bc7296e9c2..bbd9eb48f9 100644 --- a/engines/dm/gfx.h +++ b/engines/dm/gfx.h @@ -49,6 +49,23 @@ enum StairIndex { kStairsNativeIndex_Side_D0L = 17 // @ G0692_i_StairsNativeBitmapIndex_Side_D0L }; +enum ViewWall { + kViewWall_D3L_RIGHT = 0, // @ C00_VIEW_WALL_D3L_RIGHT + kViewWall_D3R_LEFT = 1, // @ C01_VIEW_WALL_D3R_LEFT + kViewWall_D3L_FRONT = 2, // @ C02_VIEW_WALL_D3L_FRONT + kViewWall_D3C_FRONT = 3, // @ C03_VIEW_WALL_D3C_FRONT + kViewWall_D3R_FRONT = 4, // @ C04_VIEW_WALL_D3R_FRONT + kViewWall_D2L_RIGHT = 5, // @ C05_VIEW_WALL_D2L_RIGHT + kViewWall_D2R_LEFT = 6, // @ C06_VIEW_WALL_D2R_LEFT + kViewWall_D2L_FRONT = 7, // @ C07_VIEW_WALL_D2L_FRONT + kViewWall_D2C_FRONT = 8, // @ C08_VIEW_WALL_D2C_FRONT + kViewWall_D2R_FRONT = 9, // @ C09_VIEW_WALL_D2R_FRONT + kViewWall_D1L_RIGHT = 10, // @ C10_VIEW_WALL_D1L_RIGHT + kViewWall_D1R_LEFT = 11, // @ C11_VIEW_WALL_D1R_LEFT + kViewWall_D1C_FRONT = 12 // @ C12_VIEW_WALL_D1C_FRONT +}; + + enum Color { kColorNoTransparency = 255, @@ -163,6 +180,8 @@ class DisplayMan { void applyCreatureReplColors(int replacedColor, int replacementColor); // @ F0093_DUNGEONVIEW_ApplyCreatureReplacementColors + bool isDrawnWallOrnAnAlcove(int16 wallOrnOrd, ViewWall viewWallIndex); // @ F0107_DUNGEONVIEW_IsDrawnWallOrnamentAnAlcove_CPSF + // some methods use this for a stratchpad, don't make assumptions about content between function calls byte *_tmpBitmap = NULL; public: @@ -201,7 +220,7 @@ public: int16 _championPortraitOrdinal = 0; // @ G0289_i_DungeonView_ChampionPortraitOrdinal int16 _currMapAlcoveOrnIndices[kAlcoveOrnCount] = {0}; // @ G0267_ai_CurrentMapAlcoveOrnamentIndices int16 _currMapFountainOrnIndices[kFountainOrnCount] = {0}; // @ G0268_ai_CurrentMapFountainOrnamentIndices - int16 _currMapWallOrnInfo[16][2] = {0}; // @ G0101_aai_CurrentMapWallOrnamentsInf + int16 _currMapWallOrnInfo[16][2] = {0}; // @ G0101_aai_CurrentMapWallOrnamentsInfo int16 _currMapFloorOrnInfo[16][2] = {0}; // @ G0102_aai_CurrentMapFloorOrnamentsInfo int16 _currMapDoorOrnInfo[17][2] = {0}; // @ G0103_aai_CurrentMapDoorOrnamentsInfo byte *_currMapAllowedCreatureTypes = NULL; // @ G0264_puc_CurrentMapAllowedCreatureTypes |