diff options
author | Strangerke | 2012-04-09 17:34:30 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-03-28 17:36:57 +0200 |
commit | 4ed7a101558cdd73e6b51132f19708bcd9251dd6 (patch) | |
tree | 14c27a02a27ec37adfb348dbb311685d4f54bd11 /engines | |
parent | 2acfb7e2b30a84ceb46dd6c86ec5cfccbd4db333 (diff) | |
download | scummvm-rg350-4ed7a101558cdd73e6b51132f19708bcd9251dd6.tar.gz scummvm-rg350-4ed7a101558cdd73e6b51132f19708bcd9251dd6.tar.bz2 scummvm-rg350-4ed7a101558cdd73e6b51132f19708bcd9251dd6.zip |
LILLIPUT: Add default palette, and palette fixup (thanks to SylvainTV for the help)
Diffstat (limited to 'engines')
-rw-r--r-- | engines/lilliput/lilliput.cpp | 97 | ||||
-rw-r--r-- | engines/lilliput/lilliput.h | 13 |
2 files changed, 105 insertions, 5 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp index a35f252fa8..a1d9ccec7f 100644 --- a/engines/lilliput/lilliput.cpp +++ b/engines/lilliput/lilliput.cpp @@ -36,6 +36,72 @@ namespace Lilliput { LilliputEngine *LilliputEngine::s_Engine = 0; +static const byte _basisPalette[768] = { + 0, 0, 0, 0, 0, 42, 0, 42, 0, 0, 42, 42, + 42, 0, 0, 42, 0, 42, 42, 21, 0, 42, 42, 42, + 21, 21, 21, 21, 21, 63, 21, 63, 21, 21, 63, 63, + 63, 21, 21, 63, 21, 63, 63, 63, 21, 63, 63, 63, + 63, 63, 63, 59, 59, 59, 54, 54, 54, 50, 50, 50, + 46, 46, 46, 42, 42, 42, 38, 38, 38, 33, 33, 33, + 29, 29, 29, 25, 25, 25, 21, 21, 21, 17, 17, 17, + 13, 13, 13, 8, 8, 8, 4, 4, 4, 0, 0, 0, + 63, 54, 54, 63, 46, 46, 63, 39, 39, 63, 31, 31, + 63, 23, 23, 63, 16, 16, 63, 8, 8, 63, 0, 0, + 57, 0, 0, 51, 0, 0, 45, 0, 0, 39, 0, 0, + 33, 0, 0, 28, 0, 0, 22, 0, 0, 16, 0, 0, + 63, 58, 54, 63, 54, 46, 63, 50, 39, 63, 46, 31, + 63, 42, 23, 63, 38, 16, 63, 34, 8, 63, 30, 0, + 57, 27, 0, 51, 24, 0, 45, 21, 0, 39, 19, 0, + 33, 16, 0, 28, 14, 0, 22, 11, 0, 16, 8, 0, + 63, 63, 54, 63, 63, 46, 63, 63, 39, 63, 63, 31, + 63, 62, 23, 63, 61, 16, 63, 61, 8, 63, 61, 0, + 57, 54, 0, 51, 49, 0, 45, 43, 0, 39, 39, 0, + 33, 33, 0, 28, 27, 0, 22, 21, 0, 16, 16, 0, + 62, 63, 54, 59, 61, 47, 56, 59, 42, 53, 58, 36, + 50, 56, 32, 47, 54, 26, 44, 52, 22, 41, 50, 17, + 36, 46, 14, 32, 42, 11, 28, 37, 8, 24, 33, 6, + 20, 29, 4, 16, 25, 2, 13, 20, 1, 10, 16, 0, + 54, 63, 54, 48, 61, 48, 43, 59, 43, 38, 58, 38, + 33, 56, 33, 29, 54, 29, 25, 52, 24, 21, 50, 20, + 16, 46, 16, 14, 42, 13, 10, 37, 9, 8, 33, 7, + 6, 29, 4, 4, 25, 2, 2, 20, 1, 1, 16, 0, + 59, 63, 63, 53, 63, 63, 47, 62, 63, 41, 61, 62, + 35, 60, 62, 30, 59, 62, 24, 57, 62, 18, 55, 62, + 20, 52, 56, 15, 47, 50, 11, 42, 45, 8, 37, 39, + 5, 32, 33, 3, 27, 27, 1, 22, 22, 0, 16, 16, + 54, 59, 63, 46, 56, 63, 39, 53, 63, 31, 50, 63, + 23, 47, 63, 16, 44, 63, 8, 42, 63, 0, 39, 63, + 0, 35, 57, 0, 31, 51, 0, 27, 45, 0, 23, 39, + 0, 19, 33, 0, 16, 28, 0, 12, 22, 0, 9, 16, + 54, 54, 63, 46, 47, 63, 39, 39, 63, 31, 32, 63, + 23, 24, 63, 16, 16, 63, 8, 9, 63, 0, 1, 63, + 0, 1, 57, 0, 1, 51, 0, 0, 45, 0, 0, 39, + 0, 0, 33, 0, 0, 28, 0, 0, 22, 0, 0, 16, + 54, 63, 54, 47, 63, 46, 39, 63, 39, 32, 63, 31, + 24, 63, 23, 16, 63, 16, 8, 63, 8, 0, 63, 0, + 0, 56, 0, 0, 49, 0, 0, 43, 0, 0, 36, 0, + 0, 30, 0, 0, 23, 0, 0, 16, 0, 0, 10, 0, + 63, 54, 63, 63, 46, 63, 63, 39, 63, 63, 31, 63, + 63, 23, 63, 63, 16, 63, 63, 8, 63, 63, 0, 63, + 56, 0, 57, 50, 0, 51, 45, 0, 45, 39, 0, 39, + 33, 0, 33, 27, 0, 28, 22, 0, 22, 16, 0, 16, + 63, 58, 55, 63, 56, 52, 63, 54, 49, 63, 53, 47, + 63, 51, 44, 63, 49, 41, 63, 47, 39, 63, 46, 36, + 63, 44, 32, 63, 41, 28, 63, 39, 24, 60, 37, 23, + 58, 35, 22, 55, 34, 21, 52, 32, 20, 50, 31, 19, + 47, 30, 18, 45, 28, 17, 42, 26, 16, 40, 25, 15, + 39, 24, 14, 36, 23, 13, 34, 22, 12, 32, 20, 11, + 29, 19, 10, 27, 18, 9, 23, 16, 8, 21, 15, 7, + 18, 14, 6, 16, 12, 6, 14, 11, 5, 10, 8, 3, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 +}; LilliputEngine::LilliputEngine(OSystem *syst, const LilliputGameDescription *gd) : Engine(syst), _gameDescription(gd) { @@ -96,8 +162,11 @@ byte *LilliputEngine::loadVGA(Common::String filename, bool loadPal) { int remainingSize = f.size(); if (loadPal) { for (int i = 0; i < 768; ++i) - _palette[i] = f.readByte(); + _curPalette[i] = f.readByte(); + remainingSize -= 768; + fixPaletteEntries(_curPalette, 256); + _system->getPaletteManager()->setPalette(_curPalette, 0, 256); } uint8 curByte; @@ -309,14 +378,37 @@ void LilliputEngine::loadRules() { // Skipped: Load Savegame } +void LilliputEngine::fixPaletteEntries(uint8 *palette, int num) { + // Color values are coded on 6bits ( for old 6bits DAC ) + for (int32 i = 0; i < num * 3; i++) { + int32 a = palette[i]; + assert(a < 64); + + a = (a << 2) | (a >> 4); + if (a > 255) + a = 255; + palette[i] = a; + } +} + +void LilliputEngine::initPalette() { + for (int i = 0; i < 768; i++) + _curPalette[i] = _basisPalette[i]; + + fixPaletteEntries(_curPalette, 256); + _system->getPaletteManager()->setPalette(_curPalette, 0, 256); +} + Common::Error LilliputEngine::run() { s_Engine = this; initGraphics(320, 200); + _mainSurface = new Graphics::Surface(); + _mainSurface->create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); // Setup mixer syncSoundSettings(); - // TODO: Init Palette + initPalette(); // Load files. In the original, the size was hardcoded _bufferIdeogram = loadVGA("IDEOGRAM.VGA", false); @@ -333,6 +425,7 @@ Common::Error LilliputEngine::run() { _scriptHandler->runScript(Common::MemoryReadStream(_rulesScript, _rulesScript_size)); //TODO: Main loop + return Common::kNoError; } diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h index e6cbe331b4..b73b5394fe 100644 --- a/engines/lilliput/lilliput.h +++ b/engines/lilliput/lilliput.h @@ -23,11 +23,14 @@ #ifndef LILLIPUT_LILLIPUT_H #define LILLIPUT_LILLIPUT_H -#include "engines/engine.h" -#include "common/file.h" #include "lilliput/console.h" #include "lilliput/script.h" +#include "common/file.h" +#include "engines/engine.h" +#include "graphics/palette.h" +#include "graphics/surface.h" + namespace Common { class RandomSource; } @@ -76,6 +79,7 @@ public: Common::RandomSource *_rnd; LilliputScript *_scriptHandler; + Graphics::Surface *_mainSurface; struct18560 _arr18560[4]; byte _byte1714E; @@ -95,7 +99,7 @@ public: byte *_bufferIsoChars; byte *_bufferIdeogram; byte _buffer10[4032]; - byte _palette[768]; + byte _curPalette[768]; bool _saveFlag; @@ -159,6 +163,9 @@ public: byte *loadRaw(Common::String filename); void loadRules(); + void initPalette(); + void fixPaletteEntries(uint8 *palette, int num); + GameType getGameType() const; Common::Platform getPlatform() const; |