From 9e4932f96b459b056d7c5a797be2dbc064803f5a Mon Sep 17 00:00:00 2001 From: Fabio Battaglia Date: Mon, 9 Jan 2012 00:17:29 +0100 Subject: [PATCH] SWORD2: Force fake transparency for PSX sprites In PSX version blending is done through hardware transparency, this would have to be simulated using 16-bit mode. As this is not yet available in this engine, fake transparency is used as a placeholder --- engines/sword2/sprite.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/engines/sword2/sprite.cpp b/engines/sword2/sprite.cpp index 8d260947f11..20d2b016129 100644 --- a/engines/sword2/sprite.cpp +++ b/engines/sword2/sprite.cpp @@ -762,14 +762,18 @@ int32 Screen::drawSprite(SpriteInfo *s) { src = sprite + rs.top * srcPitch + rs.left; dst = _buffer + _screenWide * rd.top + rd.left; - if (s->type & RDSPR_BLEND && !Sword2Engine::isPsx()) { // Blending is unavailable in PSX version + if (s->type & RDSPR_BLEND) { // The original code had two different blending cases. One for // s->blend & 0x01 and one for s->blend & 0x02. However, the // only values that actually appear in the cluster files are // 0, 513 and 1025 so the s->blend & 0x02 case was never used. // Which is just as well since that code made no sense to me. - if (!(_renderCaps & RDBLTFX_SPRITEBLEND)) { + // TODO: In PSX version, blending is done through hardware transparency. + // The only correct way to simulate this would be using 16-bit mode. + // As this is not yet available for this engine, fake transparency is used + // as placeholder. + if (!(_renderCaps & RDBLTFX_SPRITEBLEND) || Sword2Engine::isPsx()) { for (i = 0; i < rs.height(); i++) { for (j = 0; j < rs.width(); j++) { if (src[j] && ((i & 1) == (j & 1)))