MCPcopy Create free account
hub / github.com/OpenFodder/openfodder / Sprite_Movement_Calculate

Method Sprite_Movement_Calculate

Source/Fodder.cpp:7664–7712  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7662}
7663
7664void 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
7714int16 cFodder::Sprite_Direction_Between_Points(sSprite* pSprite, int16& pData0, int16& pData4) {
7715 pData0 -= pSprite->field_0;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected