mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-27 05:32:45 +00:00
DM: Add dungeonman.o to module.mk, fix _bitmaps memory leak
This commit is contained in:
parent
af6e6ca468
commit
05fbf0b358
@ -163,7 +163,7 @@ public:
|
|||||||
// TODO: this does stuff other than load the file!
|
// TODO: this does stuff other than load the file!
|
||||||
void loadDungeonFile(); // @ F0434_STARTEND_IsLoadDungeonSuccessful_CPSC
|
void loadDungeonFile(); // @ F0434_STARTEND_IsLoadDungeonSuccessful_CPSC
|
||||||
void setCurrentMap(uint16 mapIndex); // @ F0173_DUNGEON_SetCurrentMap
|
void setCurrentMap(uint16 mapIndex); // @ F0173_DUNGEON_SetCurrentMap
|
||||||
SquareType getRelSquareType(direction dir, uint16 stepsForward, uint16 stepsRight, uint16 posX, uint16 posY) {
|
SquareType getRelSquareType(direction dir, int16 stepsForward, int16 stepsRight, int16 posX, int16 posY) {
|
||||||
return getSquareType(getRelSquare(dir, stepsForward, stepsRight, posX, posY));
|
return getSquareType(getRelSquare(dir, stepsForward, stepsRight, posX, posY));
|
||||||
}// @ F0153_DUNGEON_GetRelativeSquareType
|
}// @ F0153_DUNGEON_GetRelativeSquareType
|
||||||
};
|
};
|
||||||
|
@ -37,14 +37,14 @@ struct Frame {
|
|||||||
uint16 srcX, srcY;
|
uint16 srcX, srcY;
|
||||||
|
|
||||||
Frame(uint16 destFromX, uint16 destToX, uint16 destFromY, uint16 destToY,
|
Frame(uint16 destFromX, uint16 destToX, uint16 destFromY, uint16 destToY,
|
||||||
uint16 srcWidth, uint16 srcHeight, uint16 srcX, uint16 srcY):
|
uint16 srcWidth, uint16 srcHeight, uint16 srcX, uint16 srcY) :
|
||||||
destFromX(destFromX), destToX(destToX + 1), destFromY(destFromY), destToY(destToY + 1),
|
destFromX(destFromX), destToX(destToX + 1), destFromY(destFromY), destToY(destToY + 1),
|
||||||
srcWidth(srcWidth * 2), srcHeight(srcHeight), srcX(srcX), srcY(srcY) {}
|
srcWidth(srcWidth * 2), srcHeight(srcHeight), srcX(srcX), srcY(srcY) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
Frame gCeilingFrame(0, 223, 0, 28, 112, 29, 0, 0);
|
Frame gCeilingFrame(0, 223, 0, 28, 112, 29, 0, 0);
|
||||||
Frame gFloorFrame(0, 223, 66, 135, 112, 70, 0, 0);
|
Frame gFloorFrame(0, 223, 66, 135, 112, 70, 0, 0);
|
||||||
Frame gWallFrameD3L2(0, 15, 25, 73, 8, 49, 0, 0); // @ FRAME G0711_s_Graphic558_Frame_Wall_D3L2
|
Frame gWallFrameD3L2(0, 15, 25, 73, 8, 49, 0, 0); // @ FRAME G0711_s_Graphic558_Frame_Wall_D3L2
|
||||||
Frame gWallFrameD3R2(208, 223, 25, 73, 8, 49, 0, 0); // @ G0712_s_Graphic558_Frame_Wall_D3R2
|
Frame gWallFrameD3R2(208, 223, 25, 73, 8, 49, 0, 0); // @ G0712_s_Graphic558_Frame_Wall_D3R2
|
||||||
|
|
||||||
extern Viewport gDefultViewPort = {0, 0};
|
extern Viewport gDefultViewPort = {0, 0};
|
||||||
@ -63,6 +63,7 @@ DisplayMan::~DisplayMan() {
|
|||||||
delete[] _packedBitmaps;
|
delete[] _packedBitmaps;
|
||||||
delete[] _packedItemPos;
|
delete[] _packedItemPos;
|
||||||
delete[] _vgaBuffer;
|
delete[] _vgaBuffer;
|
||||||
|
delete[] _bitmaps[0];
|
||||||
delete[] _bitmaps;
|
delete[] _bitmaps;
|
||||||
delete[] _wallSetBitMaps[13]; // copy of another bitmap, but flipped
|
delete[] _wallSetBitMaps[13]; // copy of another bitmap, but flipped
|
||||||
delete[] _wallSetBitMaps[14]; // copy of another bitmap, but flipped
|
delete[] _wallSetBitMaps[14]; // copy of another bitmap, but flipped
|
||||||
@ -248,8 +249,8 @@ uint16 DisplayMan::height(uint16 index) {
|
|||||||
return READ_BE_UINT16(data + 2);
|
return READ_BE_UINT16(data + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayMan::drawWallSetBitmap(byte *bitmap, Frame &f, uint16 srcWidth) {
|
void DisplayMan::drawWallSetBitmap(byte *bitmap, Frame &f) {
|
||||||
blitToScreen(bitmap, srcWidth, f.srcX, f.srcY, f.destFromX, f.destToX, f.destFromY, f.destToY, kColorFlesh, gDungeonViewport);
|
blitToScreen(bitmap, f.srcWidth, f.srcX, f.srcY, f.destFromX, f.destToX, f.destFromY, f.destToY, kColorFlesh, gDungeonViewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -282,21 +283,23 @@ void DisplayMan::drawDungeon(direction dir, uint16 posX, uint16 posY) {
|
|||||||
clearBitmap(tmpBitmap, 305, 111, kColorBlack);
|
clearBitmap(tmpBitmap, 305, 111, kColorBlack);
|
||||||
|
|
||||||
if (flippedFloorCeiling) {
|
if (flippedFloorCeiling) {
|
||||||
blitToBitmap(_bitmaps[gFloorIndice], width(gFloorIndice), height(gFloorIndice), tmpBitmap, width(gFloorIndice));
|
uint16 w = gFloorFrame.srcWidth, h = gFloorFrame.srcHeight;
|
||||||
flipBitmapHorizontal(tmpBitmap, width(gFloorIndice), height(gFloorIndice));
|
blitToBitmap(_floorBitmap, w, h, tmpBitmap, w);
|
||||||
drawWallSetBitmap(tmpBitmap, gFloorFrame, width(gFloorIndice));
|
flipBitmapHorizontal(tmpBitmap, w, h);
|
||||||
drawWallSetBitmap(_bitmaps[gCeilingIndice], gCeilingFrame, width(gCeilingIndice));
|
drawWallSetBitmap(tmpBitmap, gFloorFrame);
|
||||||
|
drawWallSetBitmap(_ceilingBitmap, gCeilingFrame);
|
||||||
} else {
|
} else {
|
||||||
blitToBitmap(_bitmaps[gCeilingIndice], width(gCeilingIndice), height(gCeilingIndice), tmpBitmap, width(gCeilingIndice));
|
uint16 w = gCeilingFrame.srcWidth, h = gCeilingFrame.srcHeight;
|
||||||
flipBitmapHorizontal(tmpBitmap, width(gCeilingIndice), height(gCeilingIndice));
|
blitToBitmap(_ceilingBitmap, w, h, tmpBitmap, w);
|
||||||
drawWallSetBitmap(tmpBitmap, gCeilingFrame, width(gCeilingIndice));
|
flipBitmapHorizontal(tmpBitmap, w, h);
|
||||||
drawWallSetBitmap(_bitmaps[gFloorIndice], gFloorFrame, width(gFloorIndice));
|
drawWallSetBitmap(tmpBitmap, gCeilingFrame);
|
||||||
|
drawWallSetBitmap(_floorBitmap, gFloorFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: CRUDE TEST CODE AT BEST
|
|
||||||
if (_vm->_dungeonMan->getRelSquareType(dir, 3, -2, posX, posY) == kWallSquareType)
|
if (_vm->_dungeonMan->getRelSquareType(dir, 3, -2, posX, posY) == kWallSquareType)
|
||||||
drawWallSetBitmap(_bitmaps[77 + 12], gWallFrameD3L2, width(77 + 12));
|
drawWallSetBitmap(_wallSetBitMaps[kWall_D3L2], gWallFrameD3L2);
|
||||||
// TODO CRUDE TEST CODE AT BEST
|
if (_vm->_dungeonMan->getRelSquareType(dir, 3, 2, posX, posY) == kWallSquareType)
|
||||||
|
drawWallSetBitmap(_wallSetBitMaps[kWall_D3R2], gWallFrameD3R2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ class DisplayMan {
|
|||||||
// the original functions has two position parameters, but they are always set to zero
|
// the original functions has two position parameters, but they are always set to zero
|
||||||
void loadIntoBitmap(uint16 index, byte *destBitmap); // @ F0466_EXPAND_GraphicToBitmap
|
void loadIntoBitmap(uint16 index, byte *destBitmap); // @ F0466_EXPAND_GraphicToBitmap
|
||||||
void unpackGraphics();
|
void unpackGraphics();
|
||||||
void drawWallSetBitmap(byte *bitmap, Frame &f, uint16 srcWidth); // @ F0100_DUNGEONVIEW_DrawWallSetBitmap
|
void drawWallSetBitmap(byte *bitmap, Frame &f); // @ F0100_DUNGEONVIEW_DrawWallSetBitmap
|
||||||
public:
|
public:
|
||||||
DisplayMan(DMEngine *dmEngine);
|
DisplayMan(DMEngine *dmEngine);
|
||||||
~DisplayMan();
|
~DisplayMan();
|
||||||
|
@ -3,7 +3,8 @@ MODULE := engines/dm
|
|||||||
MODULE_OBJS := \
|
MODULE_OBJS := \
|
||||||
detection.o \
|
detection.o \
|
||||||
dm.o \
|
dm.o \
|
||||||
gfx.o
|
gfx.o \
|
||||||
|
dungeonman.o
|
||||||
|
|
||||||
MODULE_DIRS += \
|
MODULE_DIRS += \
|
||||||
engines/dm
|
engines/dm
|
||||||
|
Loading…
x
Reference in New Issue
Block a user