diff --git a/CHANGES b/CHANGES index 899042f7b..48471e3d1 100644 --- a/CHANGES +++ b/CHANGES @@ -43,6 +43,7 @@ Emulation fixes: - GBA Video: Invalidate map cache when modifying BGCNT (fixes mgba.io/i/1846) - GBA Video: Don't draw sprites using unmapped VRAM in GL renderer (fixes mgba.io/i/1865) - GBA Video: Implement green swap (fixes mgba.io/i/1609) + - GBA Video: Fix rare regression blending semitransparent sprites (fixes mgba.io/i/1876) - SM83: Emulate HALT bug Other fixes: - 3DS: Redo video sync to be more precise diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0000.png b/cinema/gba/blend/sma2-semitrans/baseline_0000.png new file mode 100644 index 000000000..89538bf1e Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0000.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0001.png b/cinema/gba/blend/sma2-semitrans/baseline_0001.png new file mode 100644 index 000000000..89538bf1e Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0001.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0002.png b/cinema/gba/blend/sma2-semitrans/baseline_0002.png new file mode 100644 index 000000000..89538bf1e Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0002.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0003.png b/cinema/gba/blend/sma2-semitrans/baseline_0003.png new file mode 100644 index 000000000..2d6d7c61a Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0003.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0004.png b/cinema/gba/blend/sma2-semitrans/baseline_0004.png new file mode 100644 index 000000000..2d6d7c61a Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0004.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0005.png b/cinema/gba/blend/sma2-semitrans/baseline_0005.png new file mode 100644 index 000000000..2d6d7c61a Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0005.png differ diff --git a/cinema/gba/blend/sma2-semitrans/test.mvl b/cinema/gba/blend/sma2-semitrans/test.mvl new file mode 100644 index 000000000..d094a6403 Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/test.mvl differ diff --git a/src/gba/renderers/software-obj.c b/src/gba/renderers/software-obj.c index d533de9ee..514adc724 100644 --- a/src/gba/renderers/software-obj.c +++ b/src/gba/renderers/software-obj.c @@ -162,7 +162,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re } int objwinSlowPath = GBARegisterDISPCNTIsObjwinEnable(renderer->dispcnt) && GBAWindowControlGetBlendEnable(renderer->objwin.packed) != GBAWindowControlIsBlendEnable(renderer->currentWindow.packed); - int variant = (renderer->target1Obj || GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT) && + int variant = renderer->target1Obj && GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT || (renderer->target1Obj && renderer->blendEffect == BLEND_ALPHA) || objwinSlowPath) {