diff options
-rw-r--r-- | engines/agos/agos.h | 2 | ||||
-rw-r--r-- | engines/agos/res_ami.cpp | 16 | ||||
-rw-r--r-- | engines/agos/vga.cpp | 26 |
3 files changed, 23 insertions, 21 deletions
diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 51d4f4b77a..a841eb96ad 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1337,7 +1337,7 @@ protected: byte *getBackGround(); byte *getScaleBuf(); - byte *convertclip(const byte *src, bool is32Colors, uint height, uint width, byte flags); + byte *convertclip(VC10_state *state, byte flags); bool decrunchFile(byte *src, byte *dst, uint32 size); void loadVGABeardFile(uint id); diff --git a/engines/agos/res_ami.cpp b/engines/agos/res_ami.cpp index 7024726e2b..714c4fc727 100644 --- a/engines/agos/res_ami.cpp +++ b/engines/agos/res_ami.cpp @@ -115,9 +115,19 @@ static void convertcompressedclip(const byte *src, byte *dst, uint8 colorDepth, } } -byte *AGOSEngine::convertclip(const byte *src, bool is32Colors, uint height, uint width, byte flags) { +byte *AGOSEngine::convertclip(VC10_state *state, byte flags) { int length, i, j; - uint8 colorDepth = is32Colors ? 5 : 4; + + uint8 colorDepth = 4; + if (getGameType() == GType_SIMON1) { + if (((_lockWord & 0x20) && !state->palette) || (getFeatures() & GF_32COLOR)) { + colorDepth = 5; + } + } + + const byte *src = state->depack_src; + int width = state->width * 16; + int height = state->height; free(_planarBuf); _planarBuf = (byte *)malloc(width * height); @@ -129,7 +139,7 @@ byte *AGOSEngine::convertclip(const byte *src, bool is32Colors, uint height, uin length = (width + 15) / 16 * height; for (i = 0; i < length; i++) { uint16 w[kMaxColorDepth]; - if (getGameType() == GType_SIMON1 && !is32Colors) { + if (getGameType() == GType_SIMON1 && colorDepth == 4) { for (j = 0; j < colorDepth; ++j) { w[j] = READ_BE_UINT16(src + j * length * 2); } diff --git a/engines/agos/vga.cpp b/engines/agos/vga.cpp index 0ec2c5004f..c014865d84 100644 --- a/engines/agos/vga.cpp +++ b/engines/agos/vga.cpp @@ -630,16 +630,16 @@ void AGOSEngine::vc10_draw() { if (_dumpImages) dumpSingleBitmap(_vgaCurZoneNum, state.image, state.depack_src, width, height, state.palette); - if (getFeatures() & GF_PLANAR) { - bool is32Colors = false; - if (getGameType() == GType_SIMON1) { - if (((_lockWord & 0x20) && !state.palette) || state.palette == 0xC0 || - (getFeatures() & GF_32COLOR)) { - is32Colors = true; - } - } + state.width = state.draw_width = width; /* cl */ + state.height = state.draw_height = height; /* ch */ - state.depack_src = convertclip(state.depack_src, is32Colors, height, width * 16, flags); + state.depack_cont = -0x80; + + state.x_skip = 0; /* colums to skip = bh */ + state.y_skip = 0; /* rows to skip = bl */ + + if (getFeatures() & GF_PLANAR) { + state.depack_src = convertclip(&state, flags); // converted planar clip is already uncompressed if (state.flags & kDFCompressedFlip) { @@ -664,14 +664,6 @@ void AGOSEngine::vc10_draw() { } } - state.width = state.draw_width = width; /* cl */ - state.height = state.draw_height = height; /* ch */ - - state.depack_cont = -0x80; - - state.x_skip = 0; /* colums to skip = bh */ - state.y_skip = 0; /* rows to skip = bl */ - uint maxWidth = (getGameType() == GType_FF || getGameType() == GType_PP) ? 640 : 20; if ((getGameType() == GType_SIMON2 || getGameType() == GType_FF) && width > maxWidth) { horizontalScroll(&state); |