2016-05-02 18:58:55 +00:00
|
|
|
#ifndef GFX_H
|
|
|
|
#define GFX_H
|
|
|
|
|
|
|
|
#include "common/scummsys.h"
|
|
|
|
#include "dm/dm.h"
|
|
|
|
|
|
|
|
namespace DM {
|
|
|
|
|
2016-05-15 13:53:00 +00:00
|
|
|
extern uint16 gPalSwoosh[16];
|
|
|
|
extern uint16 gPalMousePointer[16];
|
|
|
|
extern uint16 gPalCredits[16];
|
|
|
|
extern uint16 gPalEntrance[16];
|
|
|
|
extern uint16 gPalDungeonView[6][16];
|
|
|
|
|
2016-05-05 16:11:11 +00:00
|
|
|
struct Frame;
|
2016-05-12 18:46:37 +00:00
|
|
|
enum WallSet {
|
|
|
|
kWallSetStone = 0 // @ C0_WALL_SET_STONE
|
|
|
|
};
|
|
|
|
|
|
|
|
enum FloorSet {
|
|
|
|
kFloorSetStone = 0 // @ C0_FLOOR_SET_STONE
|
|
|
|
};
|
2016-05-06 16:55:09 +00:00
|
|
|
|
2016-05-05 16:36:02 +00:00
|
|
|
enum Color {
|
2016-05-06 16:20:30 +00:00
|
|
|
kColorNoTransparency = 255,
|
|
|
|
kColorBlack = 0,
|
|
|
|
kColorDarkGary = 1,
|
|
|
|
kColorLightGray = 2,
|
|
|
|
kColorDarkBrown = 3,
|
|
|
|
kColorCyan = 4,
|
|
|
|
kColorLightBrown = 5,
|
|
|
|
kColorDarkGreen = 6,
|
|
|
|
kColorLightGreen = 7,
|
|
|
|
kColorRed = 8,
|
|
|
|
kColorGold = 9,
|
|
|
|
kColorFlesh = 10,
|
|
|
|
kColorYellow = 11,
|
|
|
|
kColorDarkestGray = 12,
|
|
|
|
kColorLightestGray = 13,
|
|
|
|
kColorBlue = 14,
|
|
|
|
kColorWhite = 15
|
2016-05-05 16:36:02 +00:00
|
|
|
};
|
2016-05-05 16:11:11 +00:00
|
|
|
|
2016-05-04 10:50:06 +00:00
|
|
|
|
2016-05-06 16:55:09 +00:00
|
|
|
struct Viewport {
|
|
|
|
// TODO: should probably add width and height, seems redundant right meow
|
|
|
|
uint16 posX, posY;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern Viewport gDefultViewPort;
|
|
|
|
extern Viewport gDungeonViewport;
|
2016-05-04 10:50:06 +00:00
|
|
|
|
2016-05-06 16:13:23 +00:00
|
|
|
|
2016-05-15 13:53:00 +00:00
|
|
|
#define kAlcoveOrnCount 3
|
|
|
|
#define kFountainOrnCount 1
|
|
|
|
|
|
|
|
#define kFloorSetGraphicCount 2 // @ C002_FLOOR_SET_GRAPHIC_COUNT
|
|
|
|
#define kWallSetGraphicCount 13 // @ C013_WALL_SET_GRAPHIC_COUNT
|
|
|
|
#define kStairsGraphicCount 18 // @ C018_STAIRS_GRAPHIC_COUNT
|
|
|
|
#define kDoorSetGraphicsCount 3 // @ C003_DOOR_SET_GRAPHIC_COUNT
|
|
|
|
#define kDoorButtonCount 1 // @ C001_DOOR_BUTTON_COUNT
|
|
|
|
#define kNativeBitmapIndex 0 // @ C0_NATIVE_BITMAP_INDEX
|
|
|
|
#define kNativeCoordinateSet 1 // @ C1_COORDINATE_SET
|
|
|
|
#define kCreatureTypeCount 27 // @ C027_CREATURE_TYPE_COUNT
|
|
|
|
#define kExplosionAspectCount 4 // @ C004_EXPLOSION_ASPECT_COUNT
|
|
|
|
#define kObjAspectCount 85 // @ C085_OBJECT_ASPECT_COUNT
|
|
|
|
#define kProjectileAspectCount 14 // @ C014_PROJECTILE_ASPECT_COUNT
|
|
|
|
|
|
|
|
|
|
|
|
#define kDoorButton 0 // @ C0_DOOR_BUTTON
|
|
|
|
#define kWallOrnInscription 0 // @ C0_WALL_ORNAMENT_INSCRIPTION
|
|
|
|
#define kFloorOrnFootprints 15 // @ C15_FLOOR_ORNAMENT_FOOTPRINTS
|
|
|
|
#define kDoorOrnDestroyedMask 15 // @ C15_DOOR_ORNAMENT_DESTROYED_MASK
|
|
|
|
#define kDoorOrnThivesEyeMask 16 // @ C16_DOOR_ORNAMENT_THIEVES_EYE_MASK
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-06 16:13:23 +00:00
|
|
|
|
2016-05-02 18:58:55 +00:00
|
|
|
class DisplayMan {
|
2016-05-15 16:59:55 +00:00
|
|
|
DMEngine *_vm = NULL;
|
2016-05-02 18:58:55 +00:00
|
|
|
uint16 _screenWidth;
|
2016-05-15 16:59:55 +00:00
|
|
|
uint16 _screenHeight = 0;
|
|
|
|
byte *_vgaBuffer = NULL;
|
2016-05-12 18:46:37 +00:00
|
|
|
|
|
|
|
|
2016-05-15 13:53:00 +00:00
|
|
|
/// Related to graphics.dat file
|
2016-05-15 16:59:55 +00:00
|
|
|
uint16 grapItemCount = 0; // @ G0632_ui_GraphicCount
|
|
|
|
uint32 *_packedItemPos = NULL;
|
|
|
|
byte *_packedBitmaps = NULL;
|
|
|
|
byte **_bitmaps = NULL;
|
2016-05-12 18:46:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
// the last two pointers are owned by this array
|
|
|
|
byte *_wallSetBitMaps[15] = {NULL}; // @G[0696..0710]_puc_Bitmap_WallSet_...
|
|
|
|
|
2016-05-19 14:26:56 +00:00
|
|
|
// only [7-11] is used, indexing convenience
|
|
|
|
byte *_wallSetBitMapsNative[12] = {NULL}; // @G[0095..0099]_puc_Bitmap_Wall...
|
|
|
|
byte *_wallSetBitMapsFlipped[12] = {NULL}; // @G[0090..0094]_puc_Bitmap_Wall...
|
|
|
|
|
2016-05-12 18:46:37 +00:00
|
|
|
// pointers are not owned by these fields
|
2016-05-15 16:59:55 +00:00
|
|
|
byte *_floorBitmap = NULL;
|
|
|
|
byte *_ceilingBitmap = NULL;
|
2016-05-12 18:46:37 +00:00
|
|
|
|
2016-05-15 13:53:00 +00:00
|
|
|
|
2016-05-15 16:59:55 +00:00
|
|
|
byte *_palChangesProjectile[4] = {NULL}; // @G0075_apuc_PaletteChanges_Projectile
|
2016-05-15 13:53:00 +00:00
|
|
|
|
|
|
|
|
2016-05-03 15:55:04 +00:00
|
|
|
DisplayMan(const DisplayMan &other); // no implementation on purpose
|
2016-05-02 18:58:55 +00:00
|
|
|
void operator=(const DisplayMan &rhs); // no implementation on purpose
|
2016-05-05 16:11:11 +00:00
|
|
|
|
2016-05-06 16:13:23 +00:00
|
|
|
byte *getCurrentVgaBuffer();
|
2016-05-15 13:53:00 +00:00
|
|
|
// the original function has two position parameters, but they are always set to zero
|
2016-05-12 08:16:00 +00:00
|
|
|
void loadIntoBitmap(uint16 index, byte *destBitmap); // @ F0466_EXPAND_GraphicToBitmap
|
2016-05-05 16:11:11 +00:00
|
|
|
void unpackGraphics();
|
2016-05-15 13:53:00 +00:00
|
|
|
|
2016-05-12 20:44:30 +00:00
|
|
|
void drawWallSetBitmap(byte *bitmap, Frame &f); // @ F0100_DUNGEONVIEW_DrawWallSetBitmap
|
2016-05-20 11:37:47 +00:00
|
|
|
void drawWallSetBitmapWithoutTransparency(byte *bitmap, Frame &f); // @ F0101_DUNGEONVIEW_DrawWallSetBitmapWithoutTransparency
|
2016-05-12 22:54:01 +00:00
|
|
|
void drawSquareD3L(direction dir, int16 posX, int16 posY); // @ F0116_DUNGEONVIEW_DrawSquareD3L
|
2016-05-20 11:37:47 +00:00
|
|
|
void drawSquareD3R(direction dir, int16 posX, int16 posY); // @ F0117_DUNGEONVIEW_DrawSquareD3R
|
|
|
|
void drawSquareD3C(direction dir, int16 posX, int16 posY); // @ F0118_DUNGEONVIEW_DrawSquareD3C_CPSF
|
|
|
|
void drawSquareD2L(direction dir, int16 posX, int16 posY); // @ F0119_DUNGEONVIEW_DrawSquareD2L
|
|
|
|
void drawSquareD2R(direction dir, int16 posX, int16 posY); // @ F0120_DUNGEONVIEW_DrawSquareD2R_CPSF
|
|
|
|
void drawSquareD2C(direction dir, int16 posX, int16 posY); // @ F0121_DUNGEONVIEW_DrawSquareD2C
|
|
|
|
void drawSquareD1L(direction dir, int16 posX, int16 posY); // @ F0122_DUNGEONVIEW_DrawSquareD1L
|
|
|
|
void drawSquareD1R(direction dir, int16 posX, int16 posY); // @ F0122_DUNGEONVIEW_DrawSquareD1R
|
|
|
|
void drawSquareD1C(direction dir, int16 posX, int16 posY); // @ F0124_DUNGEONVIEW_DrawSquareD1C
|
|
|
|
void drawSquareD0L(direction dir, int16 posX, int16 posY); // @ F0125_DUNGEONVIEW_DrawSquareD0L
|
|
|
|
void drawSquareD0R(direction dir, int16 posX, int16 posY); // @ F0126_DUNGEONVIEW_DrawSquareD0R
|
|
|
|
void drawSquareD0C(direction dir, int16 posX, int16 posY); // @ F0127_DUNGEONVIEW_DrawSquareD0C
|
2016-05-15 13:53:00 +00:00
|
|
|
|
|
|
|
void loadWallSet(WallSet set); // @ F0095_DUNGEONVIEW_LoadWallSet
|
|
|
|
void loadFloorSet(FloorSet set); // @ F0094_DUNGEONVIEW_LoadFloorSet
|
|
|
|
|
|
|
|
void applyCreatureReplColors(int replacedColor, int replacementColor); // @ F0093_DUNGEONVIEW_ApplyCreatureReplacementColors
|
|
|
|
|
2016-05-02 18:58:55 +00:00
|
|
|
public:
|
|
|
|
DisplayMan(DMEngine *dmEngine);
|
|
|
|
~DisplayMan();
|
|
|
|
void setUpScreens(uint16 width, uint16 height);
|
2016-05-12 18:46:37 +00:00
|
|
|
|
2016-05-15 13:53:00 +00:00
|
|
|
void loadGraphics(); // @ F0479_MEMORY_ReadGraphicsDatHeader, F0460_START_InitializeGraphicData
|
2016-05-12 18:46:37 +00:00
|
|
|
|
2016-05-15 13:53:00 +00:00
|
|
|
void loadCurrentMapGraphics();
|
|
|
|
|
|
|
|
void loadPalette(uint16 *palette);
|
2016-05-06 16:13:23 +00:00
|
|
|
|
|
|
|
/// Gives the width of an IMG0 type item
|
|
|
|
uint16 width(uint16 index);
|
|
|
|
/// Gives the height of an IMG1 type item
|
|
|
|
uint16 height(uint16 index);
|
|
|
|
|
|
|
|
void blitToBitmap(byte *srcBitmap, uint16 srcWidth, uint16 srcX, uint16 srcY,
|
|
|
|
byte *destBitmap, uint16 destWidth,
|
|
|
|
uint16 destFromX, uint16 destToX, uint16 destFromY, uint16 destToY,
|
2016-05-06 16:55:09 +00:00
|
|
|
Color transparent = kColorNoTransparency, Viewport &viewport = gDefultViewPort);
|
2016-05-06 16:13:23 +00:00
|
|
|
void blitToBitmap(byte *srcBitmap, uint16 srcWidth, uint16 srcHeight, byte *destBitmap, uint16 destWidth, uint16 destX = 0, uint16 destY = 0);
|
|
|
|
void blitToScreen(byte *srcBitmap, uint16 srcWidth, uint16 srcX, uint16 srcY,
|
|
|
|
uint16 destFromX, uint16 destToX, uint16 destFromY, uint16 destToY,
|
2016-05-06 16:55:09 +00:00
|
|
|
Color transparent = kColorNoTransparency, Viewport &viewport = gDefultViewPort);
|
2016-05-06 16:13:23 +00:00
|
|
|
|
2016-05-05 20:18:51 +00:00
|
|
|
void flipBitmapHorizontal(byte *bitmap, uint16 width, uint16 height);
|
2016-05-06 16:13:23 +00:00
|
|
|
void flipBitmapVertical(byte *bitmap, uint16 width, uint16 height);
|
|
|
|
|
2016-05-05 20:18:51 +00:00
|
|
|
void clearBitmap(byte *bitmap, uint16 width, uint16 height, Color color);
|
2016-05-05 17:49:26 +00:00
|
|
|
void clearScreen(Color color);
|
2016-05-12 22:54:01 +00:00
|
|
|
void drawDungeon(direction dir, int16 posX, int16 posY); // @ F0128_DUNGEONVIEW_Draw_CPSF
|
2016-05-06 16:13:23 +00:00
|
|
|
void updateScreen();
|
2016-05-02 18:58:55 +00:00
|
|
|
|
|
|
|
|
2016-05-15 13:53:00 +00:00
|
|
|
int16 _championPortraitOrdinal = 0; // @ G0289_i_DungeonView_ChampionPortraitOrdinal
|
2016-05-15 16:59:55 +00:00
|
|
|
int16 _currMapAlcoveOrnIndices[kAlcoveOrnCount] = {0}; // @ G0267_ai_CurrentMapAlcoveOrnamentIndices
|
|
|
|
int16 _currMapFountainOrnIndices[kFountainOrnCount] = {0}; // @ G0268_ai_CurrentMapFountainOrnamentIndices
|
|
|
|
int16 _currMapWallOrnInfo[16][2] = {0}; // @ G0101_aai_CurrentMapWallOrnamentsInf
|
|
|
|
int16 _currMapFloorOrnInfo[16][2] = {0}; // @ G0102_aai_CurrentMapFloorOrnamentsInfo
|
|
|
|
int16 _currMapDoorOrnInfo[17][2] = {0}; // @ G0103_aai_CurrentMapDoorOrnamentsInfo
|
|
|
|
byte *_currMapAllowedCreatureTypes = NULL; // @ G0264_puc_CurrentMapAllowedCreatureTypes
|
|
|
|
byte _currMapWallOrnIndices[16] = {0}; // @ G0261_auc_CurrentMapWallOrnamentIndices
|
|
|
|
byte _currMapFloorOrnIndices[16] = {0}; // @ G0262_auc_CurrentMapFloorOrnamentIndices
|
|
|
|
byte _currMapDoorOrnIndices[18] = {0}; // @ G0263_auc_CurrentMapDoorOrnamentIndices
|
|
|
|
|
|
|
|
int16 _currMapViAltarIndex = 0; // @ G0266_i_CurrentMapViAltarWallOrnamentIndex
|
2016-05-15 13:53:00 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
2016-05-02 18:58:55 +00:00
|
|
|
|
|
|
|
#endif
|