Fixed radar for Seibu Cup Soccer

This commit is contained in:
Angelo Salese 2014-09-09 20:20:11 +00:00
parent 76306e400c
commit 111ec37e89

View File

@ -2739,6 +2739,7 @@ WRITE16_MEMBER( seibu_cop_legacy_device::generic_cop_w )
m_cop_angle += 0x80; m_cop_angle += 0x80;
} }
m_cop_angle-=0x80;
m_r0 = dy; m_r0 = dy;
m_r1 = dx; m_r1 = dx;
@ -2911,31 +2912,35 @@ WRITE16_MEMBER( seibu_cop_legacy_device::generic_cop_w )
{ {
UINT8 offs; UINT8 offs;
int div; int div;
INT16 dir_offset;
// INT16 offs_val; // INT16 offs_val;
/* TODO: [4-7] could be mirrors of [0-3] (this is the only command so far that uses 4-7 actually)*/ /* TODO: [4-7] could be mirrors of [0-3] (this is the only command so far that uses 4-7 actually)*/
/* 0 + [4] */ /* ? 0 + [4] */
/* 4 + [5] */ /* sub32 4 + [5] */
/* 8 + [4] */ /* write16h 8 + [4] */
/* 4 + [6] */ /* addmem16 4 + [6] */
// these two are obvious ... // these two are obvious ...
// 0xf x 16 = 240 // 0xf x 16 = 240
// 0x14 x 16 = 320 // 0x14 x 16 = 320
// what are these two instead? scale factor? offsets? // what are these two instead? scale factor? offsets? (edit: offsets to apply from the initial sprite data)
// 0xfc69 ? // 0xfc69 ?
// 0x7f4 ? // 0x7f4 ?
//printf("%08x %08x %08x %08x %08x %08x %08x\n",m_cop_register[0],m_cop_register[1],m_cop_register[2],m_cop_register[3],m_cop_register[4],m_cop_register[5],m_cop_register[6]); //printf("%08x %08x %08x %08x %08x %08x %08x\n",m_cop_register[0],m_cop_register[1],m_cop_register[2],m_cop_register[3],m_cop_register[4],m_cop_register[5],m_cop_register[6]);
offs = (offset & 3) * 4; offs = (offset & 3) * 4;
div = space.read_word(m_cop_register[4] + offs) + 1; div = space.read_word(m_cop_register[4] + offs);
dir_offset = space.read_word(m_cop_register[4] + offs + 8);
// offs_val = space.read_word(m_cop_register[3] + offs); // offs_val = space.read_word(m_cop_register[3] + offs);
//420 / 180 = 500 : 400 = 30 / 50 = 98 / 18 //420 / 180 = 500 : 400 = 30 / 50 = 98 / 18
/* TODO: this probably trips a cop status flag */
if(div == 0) { div = 1; } if(div == 0) { div = 1; }
space.write_word((m_cop_register[6] + offs + 4), ((space.read_word(m_cop_register[5] + offs + 4)) / div));
space.write_word((m_cop_register[6] + offs + 4), ((space.read_word(m_cop_register[5] + offs + 4) + dir_offset) / div));
return; return;
} }