aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/lure/palette.cpp27
1 files changed, 20 insertions, 7 deletions
diff --git a/engines/lure/palette.cpp b/engines/lure/palette.cpp
index 59c8ad045b..653e2ce491 100644
--- a/engines/lure/palette.cpp
+++ b/engines/lure/palette.cpp
@@ -152,18 +152,31 @@ void Palette::copyFrom(Palette *src) {
PaletteCollection::PaletteCollection(uint16 resourceId) {
Disk &d = Disk::getReference();
MemoryBlock *resource = d.getEntry(resourceId);
+ bool isEGA = LureEngine::getReference().isEGA();
uint32 palSize;
uint8 *data = resource->data();
- if (resource->size() % (SUB_PALETTE_SIZE * 3) != 0)
- error("Resource #%d is not a valid palette set", resourceId);
+ if (isEGA) {
+ // EGA Palette collection - only has 1 sub-palette
+ if ((resource->size() != 16) && (resource->size() != 17))
+ error("Resource #%d is not a valid palette set", resourceId);
+
+ _numPalettes = 1;
+ _palettes = (Palette **) Memory::alloc(1 * sizeof(Palette *));
+ _palettes[0] = new Palette(16, data, EGA);
- palSize = SUB_PALETTE_SIZE * 3;
- _numPalettes = resource->size() / palSize;
+ } else {
+ // VGA Palette collection
+ if (resource->size() % (SUB_PALETTE_SIZE * 3) != 0)
+ error("Resource #%d is not a valid palette set", resourceId);
- _palettes = (Palette **) Memory::alloc(_numPalettes * sizeof(Palette *));
- for (uint8 paletteCtr = 0; paletteCtr < _numPalettes; ++paletteCtr, data += palSize)
- _palettes[paletteCtr] = new Palette(SUB_PALETTE_SIZE, data, RGB64);
+ palSize = SUB_PALETTE_SIZE * 3;
+ _numPalettes = resource->size() / palSize;
+
+ _palettes = (Palette **) Memory::alloc(_numPalettes * sizeof(Palette *));
+ for (uint8 paletteCtr = 0; paletteCtr < _numPalettes; ++paletteCtr, data += palSize)
+ _palettes[paletteCtr] = new Palette(SUB_PALETTE_SIZE, data, RGB64);
+ }
delete resource;
}