diff options
author | Paul Gilbert | 2014-03-25 21:20:44 -0400 |
---|---|---|
committer | Paul Gilbert | 2014-03-25 21:20:44 -0400 |
commit | e9977e81d0c3ab13d934755e37a93f62b78a65cb (patch) | |
tree | 849ae723c9c5ec26e479358dc4679687e2e16460 | |
parent | 633da299f694a9998a0cdb002a08613750f36e61 (diff) | |
download | scummvm-rg350-e9977e81d0c3ab13d934755e37a93f62b78a65cb.tar.gz scummvm-rg350-e9977e81d0c3ab13d934755e37a93f62b78a65cb.tar.bz2 scummvm-rg350-e9977e81d0c3ab13d934755e37a93f62b78a65cb.zip |
MADS: Fixes and cleanup for palette loading
-rw-r--r-- | engines/mads/assets.cpp | 9 | ||||
-rw-r--r-- | engines/mads/palette.cpp | 46 | ||||
-rw-r--r-- | engines/mads/palette.h | 5 | ||||
-rw-r--r-- | engines/mads/staticres.cpp | 5 | ||||
-rw-r--r-- | engines/mads/staticres.h | 2 | ||||
-rw-r--r-- | engines/mads/user_interface.cpp | 9 |
6 files changed, 28 insertions, 48 deletions
diff --git a/engines/mads/assets.cpp b/engines/mads/assets.cpp index a84d1940df..02b91aac2f 100644 --- a/engines/mads/assets.cpp +++ b/engines/mads/assets.cpp @@ -84,10 +84,15 @@ void SpriteAsset::load(Common::SeekableReadStream *stream, int flags) { palette.resize(numColors); for (int i = 0; i < numColors; ++i) palette[i].load(palStream); + delete palStream; // Process the palette data - _vm->_palette->_paletteUsage.process(palette, flags); - delete palStream; + if (flags & 9) { + warning("TODO: Unknown palette processing"); + } else { + _usageIndex = _vm->_palette->_paletteUsage.process(palette, flags); + assert(_usageIndex >= 0); + } spriteStream = sprite.getItemStream(1); Common::SeekableReadStream *spriteDataStream = sprite.getItemStream(3); diff --git a/engines/mads/palette.cpp b/engines/mads/palette.cpp index f57766ebf1..94ce52e88b 100644 --- a/engines/mads/palette.cpp +++ b/engines/mads/palette.cpp @@ -25,6 +25,7 @@ #include "graphics/palette.h" #include "mads/mads.h" #include "mads/msurface.h" +#include "mads/staticres.h" namespace MADS { @@ -464,54 +465,19 @@ void Palette::initPalette() { _rgbList.reset(); } -const uint32 DEFAULT_VGA_PALETTE[PALETTE_COUNT] = { - 0x000000, 0x0000a8, 0x00a800, 0x00a8a8, 0xa80000, 0xa800a8, 0xa85400, 0xa8a8a8, - 0x545454, 0x5454fc, 0x54fc54, 0x54fcfc, 0xfc5454, 0xfc54fc, 0xfcfc54, 0xfcfcfc, - 0x000000, 0x141414, 0x202020, 0x2c2c2c, 0x383838, 0x444444, 0x505050, 0x606060, - 0x707070, 0x808080, 0x909090, 0xa0a0a0, 0xb4b4b4, 0xc8c8c8, 0xe0e0e0, 0xfcfcfc, - 0x0000fc, 0x4000fc, 0x7c00fc, 0xbc00fc, 0xfc00fc, 0xfc00bc, 0xfc007c, 0xfc0040, - 0xfc0000, 0xfc4000, 0xfc7c00, 0xfcbc00, 0xfcfc00, 0xbcfc00, 0x7cfc00, 0x40fc00, - 0x00fc00, 0x00fc40, 0x00fc7c, 0x00fcbc, 0x00fcfc, 0x00bcfc, 0x007cfc, 0x0040fc, - 0x7c7cfc, 0x9c7cfc, 0xbc7cfc, 0xdc7cfc, 0xfc7cfc, 0xfc7cdc, 0xfc7cbc, 0xfc7c9c, - 0xfc7c7c, 0xfc9c7c, 0xfcbc7c, 0xfcdc7c, 0xfcfc7c, 0xdcfc7c, 0xbcfc7c, 0x9cfc7c, - 0x7cfc7c, 0x7cfc9c, 0x7cfcbc, 0x7cfcdc, 0x7cfcfc, 0x7cdcfc, 0x7cbcfc, 0x7c9cfc, - 0xb4b4fc, 0xc4b4fc, 0xd8b4fc, 0xe8b4fc, 0xfcb4fc, 0xfcb4e8, 0xfcb4d8, 0xfcb4c4, - 0xfcb4b4, 0xfcc4b4, 0xfcd8b4, 0xfce8b4, 0xfcfcb4, 0xe8fcb4, 0xd8fcb4, 0xc4fcb4, - 0xb4fcb4, 0xb4fcc4, 0xb4fcd8, 0xb4fce8, 0xb4fcfc, 0xb4e8fc, 0xb4d8fc, 0xb4c4fc, - 0x000070, 0x1c0070, 0x380070, 0x540070, 0x700070, 0x700054, 0x700038, 0x70001c, - 0x700000, 0x701c00, 0x703800, 0x705400, 0x707000, 0x547000, 0x387000, 0x1c7000, - 0x007000, 0x00701c, 0x007038, 0x007054, 0x007070, 0x005470, 0x003870, 0x001c70, - 0x383870, 0x443870, 0x543870, 0x603870, 0x703870, 0x703860, 0x703854, 0x703844, - 0x703838, 0x704438, 0x705438, 0x706038, 0x707038, 0x607038, 0x547038, 0x447038, - 0x387038, 0x387044, 0x387054, 0x387060, 0x387070, 0x386070, 0x385470, 0x384470, - 0x505070, 0x585070, 0x605070, 0x685070, 0x705070, 0x705068, 0x705060, 0x705058, - 0x705050, 0x705850, 0x706050, 0x706850, 0x707050, 0x687050, 0x607050, 0x587050, - 0x507050, 0x507058, 0x507060, 0x507068, 0x507070, 0x506870, 0x506070, 0x505870, - 0x000040, 0x100040, 0x200040, 0x300040, 0x400040, 0x400030, 0x400020, 0x400010, - 0x400000, 0x401000, 0x402000, 0x403000, 0x404000, 0x304000, 0x204000, 0x104000, - 0x004000, 0x004010, 0x004020, 0x004030, 0x004040, 0x003040, 0x002040, 0x001040, - 0x202040, 0x282040, 0x302040, 0x382040, 0x402040, 0x402038, 0x402030, 0x402028, - 0x402020, 0x402820, 0x403020, 0x403820, 0x404020, 0x384020, 0x304020, 0x284020, - 0x204020, 0x204028, 0x204030, 0x204038, 0x204040, 0x203840, 0x203040, 0x202840, - 0x2c2c40, 0x302c40, 0x342c40, 0x3c2c40, 0x402c40, 0x402c3c, 0x402c34, 0x402c30, - 0x402c2c, 0x40302c, 0x40342c, 0x403c2c, 0x40402c, 0x3c402c, 0x34402c, 0x30402c, - 0x2c402c, 0x2c4030, 0x2c4034, 0x2c403c, 0x2c4040, 0x2c3c40, 0x2c3440, 0x2c3040, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 -}; - void Palette::initVGAPalette(byte *palette) { byte *destP = palette; - for (int palIndex = 0; palIndex < PALETTE_COUNT; ++palIndex) { + for (int palIndex = 0; palIndex < 16; ++palIndex) { for (int byteCtr = 2; byteCtr >= 0; --byteCtr) *destP++ = ((DEFAULT_VGA_PALETTE[palIndex] >> (8 * byteCtr)) & 0xff) >> 2; } } void Palette::setLowRange() { - _mainPalette[0] = _mainPalette[1] = _mainPalette[2] = 0; - _mainPalette[3] = _mainPalette[4] = _mainPalette[5] = 0x15; - _mainPalette[6] = _mainPalette[7] = _mainPalette[8] = 0x2A; - _mainPalette[9] = _mainPalette[10] = _mainPalette[11] = 0x3F; + _mainPalette[0] = _mainPalette[1] = _mainPalette[2] = VGA_COLOR_TRANS(0); + _mainPalette[3] = _mainPalette[4] = _mainPalette[5] = VGA_COLOR_TRANS(0x15); + _mainPalette[6] = _mainPalette[7] = _mainPalette[8] = VGA_COLOR_TRANS(0x2A); + _mainPalette[9] = _mainPalette[10] = _mainPalette[11] = VGA_COLOR_TRANS(0x3F); _vm->_palette->setPalette(_mainPalette, 0, 4); } diff --git a/engines/mads/palette.h b/engines/mads/palette.h index 2fdb38662c..0f04230a81 100644 --- a/engines/mads/palette.h +++ b/engines/mads/palette.h @@ -32,7 +32,7 @@ class MADSEngine; #define PALETTE_USAGE_COUNT 4 -#define VGA_COLOR_TRANS(x) (((((int)(x)) + 1) << 2) - 1) +#define VGA_COLOR_TRANS(x) ((x) * 255 / 63) struct RGB4 { byte r; @@ -134,7 +134,8 @@ public: class Palette { private: /** - * Initialises a stanadrd VGA palette + * Initialises the first 16 palette indexes with the equivalent + * standard VGA palette */ void initVGAPalette(byte *palette); protected: diff --git a/engines/mads/staticres.cpp b/engines/mads/staticres.cpp index d57222c57a..92d2740e2f 100644 --- a/engines/mads/staticres.cpp +++ b/engines/mads/staticres.cpp @@ -46,4 +46,9 @@ const char *const kOverStr = "over"; const char *const kGameReleaseInfoStr = "ScummVM rev: 8.43 14-Sept-92"; const char *const kGameReleaseTitleStr = "GAME RELASE VERSION INFO"; +const uint32 DEFAULT_VGA_PALETTE[16] = { + 0x000000, 0x0000a8, 0x00a800, 0x00a8a8, 0xa80000, 0xa800a8, 0xa85400, 0xa8a8a8, + 0x545454, 0x5454fc, 0x54fc54, 0x54fcfc, 0xfc5454, 0xfc54fc, 0xfcfc54, 0xfcfcfc +}; + } // End of namespace MADS diff --git a/engines/mads/staticres.h b/engines/mads/staticres.h index 5aaa331d25..b4132c8319 100644 --- a/engines/mads/staticres.h +++ b/engines/mads/staticres.h @@ -40,6 +40,8 @@ extern const char *const kOverStr; extern const char *const kGameReleaseInfoStr; extern const char *const kGameReleaseTitleStr; +extern const uint32 DEFAULT_VGA_PALETTE[16]; + } // End of namespace MADS #endif /* MADS_STATICRES_H */ diff --git a/engines/mads/user_interface.cpp b/engines/mads/user_interface.cpp index b45ff14633..05e9b70432 100644 --- a/engines/mads/user_interface.cpp +++ b/engines/mads/user_interface.cpp @@ -224,11 +224,12 @@ void UserInterface::load(const Common::String &resName) { byte *palP = &_vm->_palette->_mainPalette[0]; for (int i = 0; i < 16; ++i, gamePalP++, palP += 3) { - palP[0] = VGA_COLOR_TRANS(palStream->readByte()); - palP[1] = VGA_COLOR_TRANS(palStream->readByte()); - palP[2] = VGA_COLOR_TRANS(palStream->readByte()); + RGB6 rgb; + rgb.load(palStream); + palP[0] = rgb.r; + palP[1] = rgb.g; + palP[2] = rgb.b; *gamePalP |= 1; - palStream->skip(3); } delete palStream; |