NES PPU viewer: fix calculations of hovered sprites from mouse coordinates. they were pretty crashy before
This commit is contained in:
parent
cb162f12d6
commit
b7b60ae7b4
|
@ -551,7 +551,41 @@ namespace BizHawk.Client.EmuHawk
|
||||||
byte[] ppuBus = _ppu.GetPPUBus(); // caching is quicker, but not really correct in this case
|
byte[] ppuBus = _ppu.GetPPUBus(); // caching is quicker, but not really correct in this case
|
||||||
|
|
||||||
bool is8x16 = _ppu.SPTall;
|
bool is8x16 = _ppu.SPTall;
|
||||||
var spriteNumber = ((e.Y / 24) * 16) + (e.X / 16);
|
|
||||||
|
//figure out which sprite we're over
|
||||||
|
int spriteSlotY = e.Y / 8;
|
||||||
|
int spriteSlotX = e.X / 8;
|
||||||
|
|
||||||
|
//exclude mouse over empty area (vertical). this depends on how big the sprites are
|
||||||
|
if (is8x16)
|
||||||
|
{
|
||||||
|
if (spriteSlotY % 3 == 2)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (spriteSlotY % 3 != 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//exclude mouse over empty area to the right of sprites
|
||||||
|
if (spriteSlotX % 2 == 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//convert these 8x8 "slots" we've been working on to more sensible slots
|
||||||
|
spriteSlotX /= 2;
|
||||||
|
spriteSlotY /= 3;
|
||||||
|
|
||||||
|
//if these were utterly senseless slots (so far out of range) then bail
|
||||||
|
if (spriteSlotX < 0 || spriteSlotX >= 16)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (spriteSlotY < 0 || spriteSlotY >= 4)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//find the final sprite number that's being hovered
|
||||||
|
var spriteNumber = spriteSlotY * 16 + spriteSlotX;
|
||||||
|
|
||||||
int x = oam[(spriteNumber * 4) + 3];
|
int x = oam[(spriteNumber * 4) + 3];
|
||||||
int y = oam[spriteNumber * 4];
|
int y = oam[spriteNumber * 4];
|
||||||
var color = oam[(spriteNumber * 4) + 2] & 0x03;
|
var color = oam[(spriteNumber * 4) + 2] & 0x03;
|
||||||
|
|
Loading…
Reference in New Issue