mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-06 02:10:28 +00:00
Implement proper color index conversion for Lands of Lore PC98. (The intro and menu screen work fine now)
svn-id: r41867
This commit is contained in:
parent
8343bc6cc0
commit
0ef8d1ffed
@ -327,6 +327,7 @@ public:
|
||||
static uint decodeFrame4(const uint8 *src, uint8 *dst, uint32 dstSize);
|
||||
static void decodeFrameDelta(uint8 *dst, const uint8 *src, bool noXor = false);
|
||||
static void decodeFrameDeltaPage(uint8 *dst, const uint8 *src, const int pitch, bool noXor);
|
||||
|
||||
static void convertAmigaGfx(uint8 *data, int w, int h, bool offscreen = true);
|
||||
static void convertAmigaMsc(uint8 *data);
|
||||
|
||||
|
@ -971,6 +971,30 @@ uint8 Screen_LoL::getShapePaletteSize(const uint8 *shp) {
|
||||
return shp[10];
|
||||
}
|
||||
|
||||
void Screen_LoL::mergeOverlay(int x, int y, int w, int h) {
|
||||
// For now we convert to 16 colors on overlay merging. If that gives
|
||||
// any problems, like Screen functionallity not prepared for the
|
||||
// format PC98 16 color uses, we'll need to think of a better way.
|
||||
//
|
||||
// We must do this before merging the overlay, else the font colors
|
||||
// will be wrong.
|
||||
if (_use16ColorMode)
|
||||
convertPC98Gfx(_sjisOverlayPtrs[0] + y * 640 + x, w, h, 640);
|
||||
|
||||
Screen_v2::mergeOverlay(x, y, w, h);
|
||||
}
|
||||
|
||||
void Screen_LoL::convertPC98Gfx(uint8 *data, int w, int h, int pitch) {
|
||||
while (h--) {
|
||||
for (int i = 0; i < w; ++i) {
|
||||
*data = _paletteConvTable[*data];
|
||||
++data;
|
||||
}
|
||||
|
||||
data += pitch - w;
|
||||
}
|
||||
}
|
||||
|
||||
} // end of namespace Kyra
|
||||
|
||||
#endif // ENABLE_LOL
|
||||
|
@ -92,6 +92,9 @@ public:
|
||||
uint8 *_grayOverlay;
|
||||
int _fadeFlag;
|
||||
|
||||
// PC98 specific
|
||||
static void convertPC98Gfx(uint8 *data, int w, int h, int pitch);
|
||||
|
||||
private:
|
||||
LoLEngine *_vm;
|
||||
|
||||
@ -106,6 +109,9 @@ private:
|
||||
|
||||
uint8 *_levelOverlays[8];
|
||||
|
||||
static const uint8 _paletteConvTable[256];
|
||||
void mergeOverlay(int x, int y, int w, int h);
|
||||
|
||||
// magic atlas
|
||||
void calcBoundariesIntern(int dstX, int dstY, int c, int d);
|
||||
|
||||
|
@ -3159,6 +3159,42 @@ const ScreenDim Screen_LoL::_screenDimTable16C[] = {
|
||||
|
||||
const int Screen_LoL::_screenDimTableCount = ARRAYSIZE(Screen_LoL::_screenDimTable256C);
|
||||
|
||||
// 256 -> 16 color conversion table
|
||||
const uint8 Screen_LoL::_paletteConvTable[256] = {
|
||||
0x0, 0x1, 0x0, 0x3, 0x0, 0x5, 0x0, 0x7,
|
||||
0x0, 0x9, 0x0, 0xB, 0x0, 0xD, 0x0, 0xF,
|
||||
0x1, 0x1, 0x1, 0x3, 0x1, 0x5, 0x1, 0x7,
|
||||
0x1, 0x9, 0x1, 0xB, 0x1, 0xD, 0x1, 0xF,
|
||||
0x2, 0x1, 0x2, 0x3, 0x2, 0x5, 0x2, 0x7,
|
||||
0x2, 0x9, 0x2, 0xB, 0x2, 0xD, 0x2, 0xF,
|
||||
0x3, 0x1, 0x3, 0x3, 0x3, 0x5, 0x3, 0x7,
|
||||
0x3, 0x9, 0x3, 0xB, 0x3, 0xD, 0x3, 0xF,
|
||||
0x4, 0x1, 0x4, 0x3, 0x4, 0x5, 0x4, 0x7,
|
||||
0x4, 0x9, 0x4, 0xB, 0x4, 0xD, 0x4, 0xF,
|
||||
0x5, 0x1, 0x5, 0x3, 0x5, 0x5, 0x5, 0x7,
|
||||
0x5, 0x9, 0x5, 0xB, 0x5, 0xD, 0x5, 0xF,
|
||||
0x6, 0x1, 0x6, 0x3, 0x6, 0x5, 0x6, 0x7,
|
||||
0x6, 0x9, 0x6, 0xB, 0x6, 0xD, 0x6, 0xF,
|
||||
0x7, 0x1, 0x7, 0x3, 0x7, 0x5, 0x7, 0x7,
|
||||
0x7, 0x9, 0x7, 0xB, 0x7, 0xD, 0x7, 0xF,
|
||||
0x8, 0x1, 0x8, 0x3, 0x8, 0x5, 0x8, 0x7,
|
||||
0x8, 0x9, 0x8, 0xB, 0x8, 0xD, 0x8, 0xF,
|
||||
0x9, 0x1, 0x9, 0x3, 0x9, 0x5, 0x9, 0x7,
|
||||
0x9, 0x9, 0x9, 0xB, 0x9, 0xD, 0x9, 0xF,
|
||||
0xA, 0x1, 0xA, 0x3, 0xA, 0x5, 0xA, 0x7,
|
||||
0xA, 0x9, 0xA, 0xB, 0xA, 0xD, 0xA, 0xF,
|
||||
0xB, 0x1, 0xB, 0x3, 0xB, 0x5, 0xB, 0x7,
|
||||
0xB, 0x9, 0xB, 0xB, 0xB, 0xD, 0xB, 0xF,
|
||||
0xC, 0x1, 0xC, 0x3, 0xC, 0x5, 0xC, 0x7,
|
||||
0xC, 0x9, 0xC, 0xB, 0xC, 0xD, 0xC, 0xF,
|
||||
0xD, 0x1, 0xD, 0x3, 0xD, 0x5, 0xD, 0x7,
|
||||
0xD, 0x9, 0xD, 0xB, 0xD, 0xD, 0xD, 0xF,
|
||||
0xE, 0x1, 0xE, 0x3, 0xE, 0x5, 0xE, 0x7,
|
||||
0xE, 0x9, 0xE, 0xB, 0xE, 0xD, 0xE, 0xF,
|
||||
0xF, 0x1, 0xF, 0x3, 0xF, 0x5, 0xF, 0x7,
|
||||
0xF, 0x9, 0xF, 0xB, 0xF, 0xD, 0xF, 0xF
|
||||
};
|
||||
|
||||
const char * const LoLEngine::_languageExt[] = {
|
||||
"ENG",
|
||||
"FRE",
|
||||
|
Loading…
x
Reference in New Issue
Block a user