mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
amiga/amigaaga.cpp: fix playfield-sprite collisions
This commit is contained in:
parent
c876114ae6
commit
e282e248bd
@ -556,8 +556,6 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
// - wbenc30 scrolling in lores mode (fmode=3, expects a +58!, verify ddfstrt / delays)
|
||||
// - sockid_a, alfred gameplay (fmode=1)
|
||||
// - ssf2t (fmode=3, wants >+100, scrolling is very offset)
|
||||
// - turbojam gameplay
|
||||
// (fmode=3, unaffected here, may be missing ddfstop bits given the screen masking)
|
||||
// - watchtow gameplay (fmode=3, copper timings)
|
||||
// - cd32 cdtv:insidino copyright screen (fmode=3)
|
||||
// - cd32 cdtv:labytime intro/tutorial screens
|
||||
@ -670,7 +668,10 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
ddf_stop_pixel += hires ? ddf_stop_offset_hires[bitplane_fmode] : ddf_stop_offset_lores[bitplane_fmode];
|
||||
|
||||
// - https://github.com/dirkwhoffmann/vAmigaTS/blob/master/Agnus/DDF/DDF/ddf1/ddf1_A500_ECS.JPG
|
||||
// - turbojam (gameplay, fmode 3) wants this, particularly when scrolling left (+15 isn't enough).
|
||||
// - turbojam (gameplay) fmode 3 18 9a lores, particularly when scrolling left (+15 isn't enough).
|
||||
// - aladdin 38 ca fmode 3 lores
|
||||
// - amigames:burnout 34 b8 fmode 3 hires
|
||||
// - fbglory (main menu) 28 a4 lores
|
||||
if ( (CUSTOM_REG(REG_DDFSTRT) & 6) != (CUSTOM_REG(REG_DDFSTOP) & 6))
|
||||
{
|
||||
ddf_stop_pixel += defbitoffs;
|
||||
@ -855,20 +856,22 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
}
|
||||
|
||||
/* compute playfield/sprite collisions for first pixel */
|
||||
// NOTE: need to << 2 to please the upgraded get_sprite_pixel bitmask
|
||||
// - dxgalaga player sprite collisions
|
||||
collide = pfpix0 ^ CUSTOM_REG(REG_CLXCON);
|
||||
if ((collide & ocolmask) == 0)
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> 5) & 0x01e;
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> (5 + 2)) & 0x01e;
|
||||
if ((collide & ecolmask) == 0)
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> 1) & 0x1e0;
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> (1 + 2)) & 0x1e0;
|
||||
if ((collide & (ecolmask | ocolmask)) == 0)
|
||||
CUSTOM_REG(REG_CLXDAT) |= 0x001;
|
||||
|
||||
/* compute playfield/sprite collisions for second pixel */
|
||||
collide = pfpix1 ^ CUSTOM_REG(REG_CLXCON);
|
||||
if ((collide & ocolmask) == 0)
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> 5) & 0x01e;
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> (5 + 2)) & 0x01e;
|
||||
if ((collide & ecolmask) == 0)
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> 1) & 0x1e0;
|
||||
CUSTOM_REG(REG_CLXDAT) |= (sprpix >> (1 + 2)) & 0x1e0;
|
||||
if ((collide & (ecolmask | ocolmask)) == 0)
|
||||
CUSTOM_REG(REG_CLXDAT) |= 0x001;
|
||||
// TODO: CLXCON2
|
||||
|
Loading…
Reference in New Issue
Block a user