| 12508 | } |
| 12509 | |
| 12510 | void cFodder::Sprite_Handle_Missile(sSprite* pSprite) { |
| 12511 | |
| 12512 | dword_3B24B = -1; |
| 12513 | Sprite_Create_FireTrail(pSprite); |
| 12514 | |
| 12515 | pSprite->field_8 = 0xA3; |
| 12516 | int16 Data0 = pSprite->field_26; |
| 12517 | int16 Data4 = pSprite->field_28; |
| 12518 | int16 Data8 = pSprite->field_0; |
| 12519 | int16 DataC = pSprite->field_4; |
| 12520 | int16 Data10 = 0x10; |
| 12521 | |
| 12522 | Map_Get_Distance_BetweenPoints(Data0, Data4, Data8, Data10, DataC); |
| 12523 | if (Data0 <= 7) |
| 12524 | goto loc_1BECD; |
| 12525 | |
| 12526 | if (pSprite->field_20 > 4) { |
| 12527 | pSprite->field_1E_Big -= 0xA000; |
| 12528 | } |
| 12529 | |
| 12530 | Data0 = pSprite->field_26; |
| 12531 | Data4 = pSprite->field_28; |
| 12532 | |
| 12533 | Sprite_Direction_Between_Points(pSprite, Data0, Data4); |
| 12534 | Sprite_Movement_Calculate(pSprite); |
| 12535 | |
| 12536 | if (mSprite_Bullet_Destroy) |
| 12537 | goto loc_1BECD; |
| 12538 | |
| 12539 | Data0 = pSprite->field_10; |
| 12540 | |
| 12541 | Data0 >>= 5; |
| 12542 | Data0 -= 1; |
| 12543 | Data0 ^= 0x0F; |
| 12544 | Data0 &= 0x0F; |
| 12545 | pSprite->field_A = Data0; |
| 12546 | |
| 12547 | if (pSprite->field_36 < 0x60) |
| 12548 | pSprite->field_36 += pSprite->field_3A; |
| 12549 | |
| 12550 | Data0 = mMission_EngineTicks; |
| 12551 | Data0 &= 3; |
| 12552 | |
| 12553 | if (!Data0) |
| 12554 | pSprite->field_3A <<= 1; |
| 12555 | |
| 12556 | if (!pSprite->field_32) |
| 12557 | return; |
| 12558 | |
| 12559 | Data0 = -9; |
| 12560 | Data4 = 2; |
| 12561 | if (!Map_Terrain_Get_Type_And_Walkable(pSprite, Data0, Data4)) |
| 12562 | return; |
| 12563 | |
| 12564 | loc_1BECD:; |
| 12565 | |
| 12566 | pSprite->field_18 = eSprite_Explosion2; |
| 12567 | pSprite->field_4 -= 4; |
nothing calls this directly
no outgoing calls
no test coverage detected