From b2d2bd6f2d4e33ffe545046540a386253d43f8b3 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 2 Jan 2008 03:36:19 +0000 Subject: Room backgrounds now display in EGA mode svn-id: r30138 --- engines/lure/surface.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'engines/lure/surface.cpp') diff --git a/engines/lure/surface.cpp b/engines/lure/surface.cpp index 30c633faf4..bc4eda9986 100644 --- a/engines/lure/surface.cpp +++ b/engines/lure/surface.cpp @@ -106,14 +106,26 @@ Surface::~Surface() { void Surface::loadScreen(uint16 resourceId) { MemoryBlock *rawData = Disk::getReference().getEntry(resourceId); - PictureDecoder decoder; - MemoryBlock *tmpScreen = decoder.decode(rawData, FULL_SCREEN_HEIGHT * FULL_SCREEN_WIDTH + 1); + loadScreen(rawData); delete rawData; - empty(); +} + +void Surface::loadScreen(MemoryBlock *rawData) { + PictureDecoder decoder; + uint16 v = READ_BE_UINT16(rawData->data()); + bool is5Bit = (v & 0xfffe) == 0x140; + MemoryBlock *tmpScreen; + if (is5Bit) + // 5-bit decompression + tmpScreen = decoder.egaDecode(rawData, FULL_SCREEN_HEIGHT * FULL_SCREEN_WIDTH + 1); + else + // VGA decompression + tmpScreen = decoder.vgaDecode(rawData, FULL_SCREEN_HEIGHT * FULL_SCREEN_WIDTH + 1); + + empty(); _data->copyFrom(tmpScreen, 0, MENUBAR_Y_SIZE * FULL_SCREEN_WIDTH, (FULL_SCREEN_HEIGHT - MENUBAR_Y_SIZE) * FULL_SCREEN_WIDTH); - delete tmpScreen; } -- cgit v1.2.3