Skip to content

Commit

Permalink
DM: Add the original palettes, edit palette loading accordingly
Browse files Browse the repository at this point in the history
  • Loading branch information
WinterGrascph committed Aug 26, 2016
1 parent 66c55db commit 4a8b34e
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 34 deletions.
31 changes: 7 additions & 24 deletions engines/dm/dm.cpp
Expand Up @@ -16,6 +16,7 @@

namespace DM {


DMEngine::DMEngine(OSystem *syst) : Engine(syst), _console(nullptr) {
// Do not load data files
// Do not initialize graphics here
Expand Down Expand Up @@ -56,38 +57,20 @@ Common::Error DMEngine::run() {
_displayMan->loadGraphics();
_dungeonMan->loadDungeonFile();

_displayMan->loadPalette(palCredits);



byte *palette = new byte[256 * 3];
for (int i = 0; i < 16; ++i)
palette[i * 3] = palette[i * 3 + 1] = palette[i * 3 + 2] = i * 16;

_displayMan->setPalette(palette, 16);

byte *buffer = new byte[320 * 200];
for (int i = 0; i < 320 * 100; ++i)
buffer[i] = 4;
for (int i = 320 * 100; i < 320 * 200; ++i)
buffer[i] = 6;

_system->copyRectToScreen(buffer, 320, 0, 0, 320, 200);
_system->updateScreen();


uint16 width = _displayMan->getImageWidth(75);
uint16 height = _displayMan->getImageHeight(75);
uint16 width = _displayMan->getImageWidth(1);
uint16 height = _displayMan->getImageHeight(1);
byte *cleanByteImg0Data = new byte[width * height];
_displayMan->loadIntoBitmap(75, cleanByteImg0Data);
_displayMan->blitToScreen(cleanByteImg0Data, width, height, 30, 30);
_displayMan->loadIntoBitmap(1, cleanByteImg0Data);
_displayMan->blitToScreen(cleanByteImg0Data, width, height, 0, 0);


while (true) {
_displayMan->updateScreen();
_system->delayMillis(10);
}


delete[] buffer;
delete[] cleanByteImg0Data;

return Common::kNoError;
Expand Down
1 change: 0 additions & 1 deletion engines/dm/dm.h
Expand Up @@ -23,7 +23,6 @@ class DMEngine : public Engine {
~DMEngine();

virtual Common::Error run();
Common::Error go();

private:
Console *_console;
Expand Down
32 changes: 25 additions & 7 deletions engines/dm/gfx.cpp
Expand Up @@ -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);
}
Expand All @@ -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))
Expand Down Expand Up @@ -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() {
Expand Down
18 changes: 16 additions & 2 deletions engines/dm/gfx.h
Expand Up @@ -6,9 +6,23 @@

namespace DM {

enum dmPaletteEnum {
palSwoosh = 0,
palMousePointer = 1,
palCredits = 2,
palEntrance = 3,
palDungeonView0 = 4,
palDungeonView1 = 5,
palDungeonView2 = 6,
palDungeonView3 = 7,
palDungeonView4 = 8,
palDungeonView5 = 9,
};


class DisplayMan {
DMEngine *_vm;
byte *_currPalette;
dmPaletteEnum _currPalette;
uint16 _screenWidth;
uint16 _screenHeight;
byte *_vgaBuffer;
Expand All @@ -22,7 +36,7 @@ class DisplayMan {
~DisplayMan();
void setUpScreens(uint16 width, uint16 height);
void loadGraphics();
void setPalette(byte *buff, uint16 colorCount);
void loadPalette(dmPaletteEnum palette);
void loadIntoBitmap(uint16 index, byte *destBitmap);
uint16 getImageWidth(uint16 index);
uint16 getImageHeight(uint16 index);
Expand Down

0 comments on commit 4a8b34e

Please sign in to comment.