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

Method Sprite_Handle_MissileHoming

Source/Fodder.cpp:12573–12697  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12571}
12572
12573void cFodder::Sprite_Handle_MissileHoming(sSprite* pSprite) {
12574 int16 Data0, Data4, Data8, DataC;
12575 sSprite* Data34 = 0;
12576
12577 if (pSprite->field_38)
12578 goto MissileExplode;
12579
12580 dword_3B24B = -1;
12581 Sprite_Create_FireTrail(pSprite);
12582
12583 pSprite->field_8 = 0xA3;
12584 Data34 = pSprite->field_1A_sprite;
12585
12586 if (!Data34 || Data34->field_0 == -32768) {
12587 pSprite->field_36 += 2;
12588 pSprite->field_20 -= 2;
12589 if (pSprite->field_20 >= 0) {
12590 Sprite_Movement_Calculate(pSprite);
12591 return;
12592 }
12593
12594 pSprite->field_20 = 0;
12595 goto MissileExplode;
12596 }
12597
12598 Data0 = Data34->field_0 + 8;
12599 Data4 = Data34->field_4 + 8;
12600 Data8 = pSprite->field_0;
12601 DataC = pSprite->field_4;
12602 Map_Get_Distance_BetweenPoints_Within_Window(Data0, Data4, Data8, DataC);
12603
12604 Data4 = pSprite->field_36 >> 4;
12605 Data4 += 1;
12606
12607 if (Data0 <= Data4)
12608 goto MissileExplode;
12609
12610 if (Data34->field_20 <= 0x10) {
12611
12612 // Distance to target > 0x30?
12613 if (Data0 > 0x30) {
12614 Data0 = pSprite->field_0;
12615 Data4 = pSprite->field_4;
12616 Data8 = Data34->field_0;
12617 DataC = Data34->field_4;
12618 Data8 += 8;
12619 DataC += 8;
12620
12621 if (!Map_PathCheck_CalculateTo(Data0, Data4, Data8, DataC)) {
12622 if (pSprite->field_20 > 8)
12623 pSprite->field_1E_Big -= 0x12000;
12624 }
12625 else {
12626
12627 if (pSprite->field_20 < 0x18)
12628 pSprite->field_1E_Big += 0x28000;
12629 }
12630

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected