Fix collision flag resetting prematurely
This commit is contained in:
parent
d997f1e945
commit
1a3ce032ac
@ -287,7 +287,7 @@ void dchip8_update(PlatformRenderBuffer renderBuffer, PlatformInput input,
|
||||
if (cpu.state == chip8state_load_file)
|
||||
{
|
||||
PlatformFile file = {};
|
||||
if (platform_open_file(L"roms/PONG", &file))
|
||||
if (platform_open_file(L"roms/brix", &file))
|
||||
{
|
||||
DQNT_ASSERT((cpu.INIT_ADDRESS + file.size) <=
|
||||
memory.permanentMemSize);
|
||||
@ -597,13 +597,16 @@ void dchip8_update(PlatformRenderBuffer renderBuffer, PlatformInput input,
|
||||
const i32 BYTES_PER_PIXEL = renderBuffer.bytesPerPixel;
|
||||
i32 pitch = renderBuffer.width * BYTES_PER_PIXEL;
|
||||
|
||||
bool collisionFlag = false;
|
||||
for (i32 i = 0; i < readNumBytesFromMem; i++)
|
||||
{
|
||||
u8 spriteBytes = mainMem[cpu.indexRegister + i];
|
||||
u8 posY = initPosY + (u8)i;
|
||||
|
||||
if (posY >= renderBuffer.height) posY = 0;
|
||||
|
||||
// NOTE: Flip the Y
|
||||
posY = ((u8)(renderBuffer.height-1) - posY);
|
||||
|
||||
const i32 ALPHA_BYTE_INTERVAL = renderBuffer.bytesPerPixel;
|
||||
const i32 BITS_IN_BYTE = 8;
|
||||
i32 baseBitShift = BITS_IN_BYTE - 1;
|
||||
@ -629,14 +632,7 @@ void dchip8_update(PlatformRenderBuffer renderBuffer, PlatformInput input,
|
||||
|
||||
// NOTE: If caused a pixel to XOR into off, then this is
|
||||
// known as a "collision" in chip8
|
||||
if (pixelWasOn && !pixelIsOn)
|
||||
{
|
||||
cpu.VF = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
cpu.VF = 0;
|
||||
}
|
||||
if (pixelWasOn && !pixelIsOn) collisionFlag = true;
|
||||
|
||||
if (pixelIsOn)
|
||||
{
|
||||
@ -648,6 +644,8 @@ void dchip8_update(PlatformRenderBuffer renderBuffer, PlatformInput input,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cpu.VF = collisionFlag;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -43,9 +43,8 @@ FILE_SCOPE void win32_display_render_bitmap(Win32RenderBitmap renderBitmap,
|
||||
{
|
||||
HDC stretchDC = CreateCompatibleDC(deviceContext);
|
||||
SelectObject(stretchDC, renderBitmap.handle);
|
||||
|
||||
StretchBlt(deviceContext, 0, 0, width, height, stretchDC, 0,
|
||||
0, renderBitmap.width, renderBitmap.height, SRCCOPY);
|
||||
StretchBlt(deviceContext, 0, 0, width, height, stretchDC, 0, 0,
|
||||
renderBitmap.width, renderBitmap.height, SRCCOPY);
|
||||
|
||||
// NOTE: Win32 AlphaBlend requires the RGB components to be premultiplied
|
||||
// with alpha.
|
||||
@ -382,7 +381,6 @@ u32 platform_read_file(PlatformFile file, void *buffer, u32 numBytesToRead)
|
||||
return numBytesRead;
|
||||
}
|
||||
|
||||
FILE_SCOPE u32 buffer[15000];
|
||||
bool platform_open_file(const wchar_t *const file, PlatformFile *platformFile)
|
||||
{
|
||||
HANDLE handle = CreateFile(file, GENERIC_READ | GENERIC_WRITE, 0, NULL,
|
||||
|
Loading…
Reference in New Issue
Block a user