trunk/src/mame/drivers/raiden2.c
| r31862 | r31863 | |
| 549 | 549 | return res; |
| 550 | 550 | } |
| 551 | 551 | |
| 552 | /* |
| 553 | TODO: |
| 554 | 2a05: first boss |
| 555 | 2208/2288: first enemies when they crash on the ground (collision direction?) |
| 556 | 39b0: purple laser when it's fired up (variation of 3bb0?) |
| 557 | */ |
| 552 | 558 | WRITE16_MEMBER(raiden2_state::cop_cmd_w) |
| 553 | 559 | { |
| 554 | 560 | cop_status &= 0x7fff; |
| r31862 | r31863 | |
| 591 | 597 | case 0x3b30: |
| 592 | 598 | case 0x3bb0: { // 3bb0 0004 007f 0038 - 0f9c 0b9c 0b9c 0b9c 0b9c 0b9c 0b9c 099c |
| 593 | 599 | /* TODO: these are actually internally loaded via 0x130e command */ |
| 594 | | int dx = space.read_dword(cop_regs[1]+4) - space.read_dword(cop_regs[0]+4); |
| 595 | | int dy = space.read_dword(cop_regs[1]+8) - space.read_dword(cop_regs[0]+8); |
| 600 | int dx,dy; |
| 596 | 601 | |
| 602 | dx = space.read_dword(cop_regs[1]+4) - space.read_dword(cop_regs[0]+4); |
| 603 | dy = space.read_dword(cop_regs[1]+8) - space.read_dword(cop_regs[0]+8); |
| 604 | |
| 597 | 605 | dx = dx >> 16; |
| 598 | 606 | dy = dy >> 16; |
| 599 | 607 | cop_dist = sqrt((double)(dx*dx+dy*dy)); |
| 600 | | |
| 608 | |
| 601 | 609 | if(data & 0x0080) |
| 602 | 610 | space.write_word(cop_regs[0]+0x38, cop_dist); |
| 603 | 611 | break; |
| r31862 | r31863 | |
| 1309 | 1317 | int dx; |
| 1310 | 1318 | int dy; |
| 1311 | 1319 | UINT32 src; |
| 1312 | | |
| 1320 | UINT8 flag; |
| 1313 | 1321 | sprite_prot_src_addr[1] = data; |
| 1314 | 1322 | src = (sprite_prot_src_addr[0]<<4)+sprite_prot_src_addr[1]; |
| 1315 | 1323 | |
| 1316 | 1324 | dx = ((space.read_dword(src+0x08) >> 16) - (sprite_prot_x)) & 0xffff; |
| 1317 | 1325 | dy = ((space.read_dword(src+0x04) >> 16) - (sprite_prot_y)) & 0xffff; |
| 1318 | 1326 | |
| 1319 | | space.write_word(src,(dx < 0x140 && dy < 256) ? (0x0001) : 0x0000); |
| 1327 | flag = dx < 0x140 && dy < 256 ? 1 : 0; |
| 1328 | |
| 1329 | space.write_word(src,flag); |
| 1330 | if(flag == 1) |
| 1331 | { |
| 1320 | 1332 | space.write_word(dst1, space.read_word(src+0x60)); |
| 1321 | 1333 | space.write_word(dst1+2,space.read_word(src+0x62)); |
| 1322 | 1334 | space.write_word(dst1+4,dx-8); |
| 1323 | 1335 | space.write_word(dst1+6,dy-8); |
| 1324 | 1336 | |
| 1325 | 1337 | dst1+=8; |
| 1338 | } |
| 1326 | 1339 | //printf("[%08x] %08x %08x %04x %04x\n",src,dx,dy,dst1,dst2); |
| 1327 | 1340 | } |
| 1328 | 1341 | |