Treat alpha as 0 if alpha is 1 for blending

This removes the white box in fortune street again, without causing Mario Kart Wii to regress.
This commit is contained in:
Pokechu22 2022-01-24 22:48:43 -08:00
parent 0327e6acb4
commit 444f6fd0cb
3 changed files with 28 additions and 0 deletions

View file

@ -714,6 +714,19 @@ void Tev::Draw()
if (!TevAlphaTest(output[ALP_C]))
return;
// Hardware testing indicates that an alpha of 1 can pass an alpha test,
// but doesn't do anything in blending
// This situation is important for Mario Kart Wii's menus (they will render incorrectly if the
// alpha test for the FMV in the background fails, since they depend on depth for drawing a yellow
// border) and Fortune Street's gameplay (where a rectangle with an alpha value of 1 is drawn over
// the center of the screen several times, but those rectangles shouldn't be visible).
// Blending seems to result in no changes to the output with an alpha of 1, even if the input
// color is white.
// TODO: Investigate this further: we might be handling blending incorrectly in general (though
// there might not be any good way of changing blending behavior)
if (output[ALP_C] == 1)
output[ALP_C] = 0;
// z texture
if (bpmem.ztex2.op != ZTexOp::Disabled)
{