summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/marinedt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/marinedt.cpp')
-rw-r--r--src/mame/drivers/marinedt.cpp45
1 files changed, 22 insertions, 23 deletions
diff --git a/src/mame/drivers/marinedt.cpp b/src/mame/drivers/marinedt.cpp
index 493db218817..45a865ccdb5 100644
--- a/src/mame/drivers/marinedt.cpp
+++ b/src/mame/drivers/marinedt.cpp
@@ -327,16 +327,16 @@ WRITE8_MEMBER(marinedt_state::output_w)
}
// collision detection
-// we return a value in the form of y<<16|x in case collision occurred
+// we return a value in the form of y<<5|x in case collision occurred
inline uint32_t marinedt_state::obj_to_obj_collision()
{
// bail out if any obj is disabled
if((m_layer_en & 3) != 3)
return 0;
- for(int y=31;y>=0;y--)
+ for(int y=0;y<32;y++)
{
- for(int x=31;x>=0;x--)
+ for(int x=0;x<32;x++)
{
int resx,resy;
@@ -347,7 +347,7 @@ inline uint32_t marinedt_state::obj_to_obj_collision()
continue;
if(m_obj[1].bitmap.pix16(resy,resx) != 0)
- return (resy << 16) | (resx);
+ return ((resy / 8) * 32) | (((resx / 8) - 1) & 0x1f);
}
}
@@ -355,14 +355,15 @@ inline uint32_t marinedt_state::obj_to_obj_collision()
}
inline uint32_t marinedt_state::obj_to_layer_collision()
-{
+{
// bail out if obj target is disabled
if((m_layer_en & 1) == 0)
return 0;
-
- for(int y=31;y>=0;y--)
+
+ // check only internal hitbox
+ for(int y=4;y<28;y++)
{
- for(int x=31;x>=0;x--)
+ for(int x=4;x<28;x++)
{
int resx,resy;
@@ -372,9 +373,9 @@ inline uint32_t marinedt_state::obj_to_layer_collision()
if(m_obj[0].bitmap.pix16(resy,resx) == 0)
continue;
- // TODO: doesn't work with flipscreen
+ // TODO: doesn't work with flipscreen, needs to return +1 plus reverse x/y
if(m_tilemap->pixmap().pix16(resy,resx) != 0)
- return (resy << 16) | (resx);
+ return ((resy / 8) * 32) | (((resx / 8) - 1) & 0x1f);
}
}
@@ -385,26 +386,24 @@ READ8_MEMBER(marinedt_state::pc3259_r)
{
uint32_t rest,reso;
uint8_t reg = offset >> 2;
- uint8_t xt,xo,yt,yo;
+ uint8_t xt,xo;
rest = obj_to_layer_collision();
reso = obj_to_obj_collision();
-
+
switch(reg)
{
case 0:
- xt = ((rest & 0xffff) % 128) / 8;
- xo = ((reso & 0xffff) % 128) / 8;
+ xt = rest & 0xf;
+ xo = reso & 0xf;
return xt|(xo<<4);
case 1:
- yt = (((rest >> 16) / 8) % 64) << 1;
- xt = (rest & 0x80) >> 7;
- yo = (((reso >> 16) / 8) % 64) << 1;
- xo = (reso & 0x80) >> 7;
- return (yt|xt)|((yo|xo)<<4);
+ xt = (rest & 0xf0) >> 4;
+ xo = (reso & 0xf0) >> 4;
+ return xt|(xo<<4);
case 2:
- yt = (rest >> 16) / 64;
- yo = (reso >> 16) / 64;
- return yt|(yo<<4);
+ xt = (rest & 0x300) >> 8;
+ xo = (reso & 0x300) >> 8;
+ return xt|(xo<<4);
case 3:
{
uint8_t res = 0;
@@ -493,7 +492,7 @@ static INPUT_PORTS_START( marinedt )
PORT_DIPNAME( 0x01, 0x00, "DSWB" ) PORT_DIPLOCATION("SWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, "Disable Collision Detection (Cheat)" ) PORT_DIPLOCATION("SWB:2")
+ PORT_DIPNAME( 0x02, 0x00, "Disable sprite-tile collision (Cheat)" ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Yes ) )
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_HIGH, "SWB:3")