trunk/src/mame/machine/raiden2cop.c
| r32398 | r32399 | |
| 1621 | 1621 | UINT16 hithoxy = space.read_word(hitadr2); |
| 1622 | 1622 | UINT16 hitboxx = space.read_word(hitadr2 + 2); |
| 1623 | 1623 | |
| 1624 | | INT16 start_x,start_y,height,width; |
| 1624 | INT16 dx[3],size[3]; |
| 1625 | 1625 | |
| 1626 | | { |
| 1627 | | height = UINT8(hithoxy >> 8); |
| 1628 | | start_y = INT8(hithoxy); |
| 1629 | | width = UINT8(hitboxx >> 8); |
| 1630 | | start_x = INT8(hitboxx); |
| 1631 | | } |
| 1632 | 1626 | |
| 1627 | size[0] = UINT8(hithoxy >> 8); |
| 1628 | dx[0] = INT8(hithoxy); |
| 1629 | size[1] = UINT8(hitboxx >> 8); |
| 1630 | dx[1] = INT8(hitboxx); |
| 1631 | size[2] = 0; |
| 1632 | dx[2] = 0; |
| 1633 | |
| 1633 | 1634 | int j = slot; |
| 1635 | int i; |
| 1634 | 1636 | |
| 1635 | 1637 | //for (j = 0; j < 2; j++) |
| 1638 | for (i = 0; i < 3;i++) |
| 1636 | 1639 | { |
| 1637 | | if (cop_collision_info[j].allow_swap && (cop_collision_info[j].flags_swap & (1 << 1))) |
| 1640 | if (cop_collision_info[j].allow_swap && (cop_collision_info[j].flags_swap & (1 << i))) |
| 1638 | 1641 | { |
| 1639 | | m_LEGACY_cop_collision_info[j].max_x = (cop_collision_info[j].pos[1]) - start_x; |
| 1640 | | m_LEGACY_cop_collision_info[j].min_x = m_LEGACY_cop_collision_info[j].max_x - width; |
| 1642 | m_LEGACY_cop_collision_info[j].max[i] = (cop_collision_info[j].pos[i]) - dx[i]; |
| 1643 | m_LEGACY_cop_collision_info[j].min[i] = m_LEGACY_cop_collision_info[j].max[i] - size[i]; |
| 1641 | 1644 | } |
| 1642 | 1645 | else |
| 1643 | 1646 | { |
| 1644 | | m_LEGACY_cop_collision_info[j].min_x = (cop_collision_info[j].pos[1]) + start_x; |
| 1645 | | m_LEGACY_cop_collision_info[j].max_x = m_LEGACY_cop_collision_info[j].min_x + width; |
| 1647 | m_LEGACY_cop_collision_info[j].min[i] = (cop_collision_info[j].pos[i]) + dx[i]; |
| 1648 | m_LEGACY_cop_collision_info[j].max[i] = m_LEGACY_cop_collision_info[j].min[i] + size[i]; |
| 1646 | 1649 | } |
| 1647 | | |
| 1648 | | if (cop_collision_info[j].allow_swap && (cop_collision_info[j].flags_swap & (1 << 0))) |
| 1649 | | { |
| 1650 | | m_LEGACY_cop_collision_info[j].max_y = (cop_collision_info[j].pos[0]) - start_y; |
| 1651 | | m_LEGACY_cop_collision_info[j].min_y = m_LEGACY_cop_collision_info[j].max_y - height; |
| 1652 | | } |
| 1653 | | else |
| 1654 | | { |
| 1655 | | m_LEGACY_cop_collision_info[j].min_y = (cop_collision_info[j].pos[0]) + start_y; |
| 1656 | | m_LEGACY_cop_collision_info[j].max_y = m_LEGACY_cop_collision_info[j].min_y + height; |
| 1657 | | } |
| 1658 | 1650 | } |
| 1659 | 1651 | static UINT8 res; |
| 1660 | 1652 | |
| 1661 | 1653 | res = 3; |
| 1662 | 1654 | |
| 1663 | 1655 | /* outbound X check */ |
| 1664 | | if(m_LEGACY_cop_collision_info[0].max_x >= m_LEGACY_cop_collision_info[1].min_x && m_LEGACY_cop_collision_info[0].min_x <= m_LEGACY_cop_collision_info[1].max_x) |
| 1656 | if(m_LEGACY_cop_collision_info[0].max[1] >= m_LEGACY_cop_collision_info[1].min[1] && m_LEGACY_cop_collision_info[0].min[1] <= m_LEGACY_cop_collision_info[1].max[1]) |
| 1665 | 1657 | res &= ~2; |
| 1666 | 1658 | |
| 1667 | | if(m_LEGACY_cop_collision_info[1].max_x >= m_LEGACY_cop_collision_info[0].min_x && m_LEGACY_cop_collision_info[1].min_x <= m_LEGACY_cop_collision_info[0].max_x) |
| 1659 | if(m_LEGACY_cop_collision_info[1].max[1] >= m_LEGACY_cop_collision_info[0].min[1] && m_LEGACY_cop_collision_info[1].min[1] <= m_LEGACY_cop_collision_info[0].max[1]) |
| 1668 | 1660 | res &= ~2; |
| 1669 | 1661 | |
| 1670 | 1662 | /* outbound Y check */ |
| 1671 | | if(m_LEGACY_cop_collision_info[0].max_y >= m_LEGACY_cop_collision_info[1].min_y && m_LEGACY_cop_collision_info[0].min_y <= m_LEGACY_cop_collision_info[1].max_y) |
| 1663 | if(m_LEGACY_cop_collision_info[0].max[0] >= m_LEGACY_cop_collision_info[1].min[0] && m_LEGACY_cop_collision_info[0].min[0] <= m_LEGACY_cop_collision_info[1].max[0]) |
| 1672 | 1664 | res &= ~1; |
| 1673 | 1665 | |
| 1674 | | if(m_LEGACY_cop_collision_info[1].max_y >= m_LEGACY_cop_collision_info[0].min_y && m_LEGACY_cop_collision_info[1].min_y <= m_LEGACY_cop_collision_info[0].max_y) |
| 1666 | if(m_LEGACY_cop_collision_info[1].max[0] >= m_LEGACY_cop_collision_info[0].min[0] && m_LEGACY_cop_collision_info[1].min[0] <= m_LEGACY_cop_collision_info[0].max[0]) |
| 1675 | 1667 | res &= ~1; |
| 1676 | 1668 | |
| 1677 | | cop_hit_val[1] = (cop_collision_info[0].pos[1] - cop_collision_info[1].pos[1]); |
| 1678 | | cop_hit_val[0] = (cop_collision_info[0].pos[0] - cop_collision_info[1].pos[0]); |
| 1679 | | cop_hit_val[2] = 1; |
| 1669 | for (i = 0; i < 3;i++) |
| 1670 | cop_hit_val[i] = (cop_collision_info[0].pos[i] - cop_collision_info[1].pos[i]); |
| 1671 | |
| 1680 | 1672 | cop_hit_val_stat = res; // TODO: there's also bit 2 and 3 triggered in the tests, no known meaning |
| 1681 | 1673 | |
| 1682 | 1674 | |