aboutsummaryrefslogtreecommitdiff
path: root/engines/lure/surface.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2008-01-02 03:36:19 +0000
committerPaul Gilbert2008-01-02 03:36:19 +0000
commitb2d2bd6f2d4e33ffe545046540a386253d43f8b3 (patch)
tree05bacdb4662f4461fbc95f2f8a1c530f75db6eed /engines/lure/surface.cpp
parent9db76278efd93a6aec7cea7ce1c59fa993c332e0 (diff)
downloadscummvm-rg350-b2d2bd6f2d4e33ffe545046540a386253d43f8b3.tar.gz
scummvm-rg350-b2d2bd6f2d4e33ffe545046540a386253d43f8b3.tar.bz2
scummvm-rg350-b2d2bd6f2d4e33ffe545046540a386253d43f8b3.zip
Room backgrounds now display in EGA mode
svn-id: r30138
Diffstat (limited to 'engines/lure/surface.cpp')
-rw-r--r--engines/lure/surface.cpp20
1 files changed, 16 insertions, 4 deletions
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;
}