aboutsummaryrefslogtreecommitdiff
path: root/engines/dm/gfx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dm/gfx.cpp')
-rw-r--r--engines/dm/gfx.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/engines/dm/gfx.cpp b/engines/dm/gfx.cpp
index 577251cf21..846f4bc931 100644
--- a/engines/dm/gfx.cpp
+++ b/engines/dm/gfx.cpp
@@ -7,21 +7,35 @@
using namespace DM;
+// this is for the Amiga version, later when we add support for more versions, this will have to be renamed
+uint16 dmPalettes[10][16] = {
+ {0x000, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0x000, 0xFFF, 0xAAA, 0xFFF, 0xAAA, 0x444, 0xFF0, 0xFF0},
+ {0x000, 0x666, 0x888, 0x620, 0x0CC, 0x840, 0x080, 0x0C0, 0xF00, 0xFA0, 0xC86, 0xFF0, 0x000, 0xAAA, 0x00F, 0xFFF},
+ {0x006, 0x0AA, 0xFF6, 0x840, 0xFF8, 0x000, 0x080, 0xA00, 0xC84, 0xFFA, 0xF84, 0xFC0, 0xFA0, 0x000, 0x620, 0xFFC},
+ {0x000, 0x666, 0x888, 0x840, 0xCA8, 0x0C0, 0x080, 0x0A0, 0x864, 0xF00, 0xA86, 0x642, 0x444, 0xAAA, 0x620, 0xFFF},
+ {0x000, 0x666, 0x888, 0x620, 0x0CC, 0x840, 0x080, 0x0C0, 0xF00, 0xFA0, 0xC86, 0xFF0, 0x444, 0xAAA, 0x00F, 0xFFF},
+ {0x000, 0x444, 0x666, 0x620, 0x0CC, 0x820, 0x060, 0x0A0, 0xC00, 0x000, 0x000, 0xFC0, 0x222, 0x888, 0x00C, 0xCCC},
+ {0x000, 0x222, 0x444, 0x420, 0x0CC, 0x620, 0x040, 0x080, 0xA00, 0x000, 0x000, 0xFA0, 0x000, 0x666, 0x00A, 0xAAA},
+ {0x000, 0x000, 0x222, 0x200, 0x0CC, 0x420, 0x020, 0x060, 0x800, 0x000, 0x000, 0xC80, 0x000, 0x444, 0x008, 0x888},
+ {0x000, 0x000, 0x000, 0x000, 0x0CC, 0x200, 0x000, 0x040, 0x600, 0x000, 0x000, 0xA60, 0x000, 0x222, 0x006, 0x666},
+ {0x000, 0x000, 0x000, 0x000, 0x0CC, 0x000, 0x000, 0x020, 0x400, 0x000, 0x000, 0x640, 0x000, 0x000, 0x004, 0x444}
+};
+
+
DisplayMan::DisplayMan(DMEngine *dmEngine) :
- _vm(dmEngine), _currPalette(NULL), _screenWidth(0), _screenHeight(0),
+ _vm(dmEngine), _currPalette(palSwoosh), _screenWidth(0), _screenHeight(0),
_vgaBuffer(0), _itemCount(0), _indexBytePos(NULL), _compressedData(NULL) {}
DisplayMan::~DisplayMan() {
delete[] _compressedData;
delete[] _indexBytePos;
- delete[] _currPalette;
delete[] _vgaBuffer;
}
void DisplayMan::setUpScreens(uint16 width, uint16 height) {
- _currPalette = new byte[256 * 3];
_screenWidth = width;
_screenHeight = height;
+ loadPalette(palSwoosh);
_vgaBuffer = new byte[_screenWidth * _screenHeight];
memset(_vgaBuffer, 0, width * height);
}
@@ -45,9 +59,14 @@ void DisplayMan::loadGraphics() {
f.close();
}
-void DisplayMan::setPalette(byte *buff, uint16 colorCount) {
- memcpy(_currPalette, buff, sizeof(byte) * colorCount * 3);
- _vm->_system->getPaletteManager()->setPalette(buff, 0, colorCount);
+void DisplayMan::loadPalette(dmPaletteEnum palette) {
+ byte colorPalette[16 * 3];
+ for (int i = 0; i < 16; ++i) {
+ colorPalette[i * 3] = (dmPalettes[palette][i] >> 8) * (256 / 16);
+ colorPalette[i * 3 + 1] = (dmPalettes[palette][i] >> 4) * (256 / 16);
+ colorPalette[i * 3 + 2] = dmPalettes[palette][i] * (256 / 16);
+ }
+ _vm->_system->getPaletteManager()->setPalette(colorPalette, 0, 16);
}
#define TOBE2(byte1, byte2) ((((uint16)(byte1)) << 8) | (uint16)(byte2))
@@ -103,7 +122,6 @@ void DisplayMan::loadIntoBitmap(uint16 index, byte *destBitmap) {
void DisplayMan::blitToScreen(byte *srcBitmap, uint16 srcWidth, uint16 srcHeight, uint16 destX, uint16 destY) {
for (uint16 y = 0; y < srcHeight; ++y)
memcpy(getCurrentVgaBuffer() + ((y + destY) * _screenWidth + destX), srcBitmap + y * srcWidth, srcWidth * sizeof(byte));
-
}
void DisplayMan::updateScreen() {