| 7662 | } |
| 7663 | |
| 7664 | void cFodder::Sprite_Movement_Calculate(sSprite* pSprite) { |
| 7665 | mSprite_Bullet_Destroy = 0; |
| 7666 | if (!pSprite->field_36) |
| 7667 | return; |
| 7668 | |
| 7669 | //loc_2A10D |
| 7670 | pSprite->field_10 &= 0x1FE; |
| 7671 | int16 Data4 = pSprite->field_10; |
| 7672 | |
| 7673 | int16 Data8 = mDirectionVectorTable[Data4 / 2]; |
| 7674 | |
| 7675 | Data4 += 0x80; |
| 7676 | Data4 &= 0x1FE; |
| 7677 | int16 DataC = mDirectionVectorTable[Data4 / 2]; |
| 7678 | Data8 >>= 2; |
| 7679 | DataC >>= 2; |
| 7680 | //seg007:064F |
| 7681 | |
| 7682 | int32 DataaC = (int32)DataC; |
| 7683 | int32 Dataa8 = (int32)Data8; |
| 7684 | |
| 7685 | Data4 = pSprite->field_36; |
| 7686 | |
| 7687 | Dataa8 *= Data4; |
| 7688 | DataaC *= Data4; |
| 7689 | |
| 7690 | int32 tmp = (pSprite->field_2 & 0xFFFF) | pSprite->field_0 << 16; |
| 7691 | tmp += Dataa8; |
| 7692 | |
| 7693 | pSprite->field_2 = tmp & 0xFFFF; |
| 7694 | pSprite->field_0 = tmp >> 16; |
| 7695 | |
| 7696 | if (pSprite->field_0 < 0) { |
| 7697 | pSprite->field_0 = 0; |
| 7698 | pSprite->field_2 = 0; |
| 7699 | mSprite_Bullet_Destroy = -1; |
| 7700 | } |
| 7701 | |
| 7702 | tmp = (pSprite->field_6 & 0xFFFF) | pSprite->field_4 << 16; |
| 7703 | tmp += DataaC; |
| 7704 | pSprite->field_6 = tmp & 0xFFFF; |
| 7705 | pSprite->field_4 = tmp >> 16; |
| 7706 | |
| 7707 | if (pSprite->field_4 < 0) { |
| 7708 | pSprite->field_6 = 0; |
| 7709 | pSprite->field_4 = 0; |
| 7710 | mSprite_Bullet_Destroy = -1; |
| 7711 | } |
| 7712 | } |
| 7713 | |
| 7714 | int16 cFodder::Sprite_Direction_Between_Points(sSprite* pSprite, int16& pData0, int16& pData4) { |
| 7715 | pData0 -= pSprite->field_0; |
nothing calls this directly
no outgoing calls
no test coverage detected