| 17602 | } |
| 17603 | |
| 17604 | void cFodder::Sprite_Handle_Exploidable(sSprite* pSprite) { |
| 17605 | int64 Dat0; |
| 17606 | int32 Dat4; |
| 17607 | int16 Data0, Data4; |
| 17608 | |
| 17609 | if (pSprite->field_5B) |
| 17610 | goto loc_2132A; |
| 17611 | |
| 17612 | if (pSprite->field_20) |
| 17613 | goto loc_2132A; |
| 17614 | |
| 17615 | if (pSprite->field_38 == eSprite_Anim_Die1) |
| 17616 | goto loc_213F7; |
| 17617 | |
| 17618 | if (pSprite->field_38 > eSprite_Anim_Die1) |
| 17619 | goto loc_2132A; |
| 17620 | |
| 17621 | pSprite->field_5B = 0; |
| 17622 | return; |
| 17623 | |
| 17624 | loc_2132A:; |
| 17625 | |
| 17626 | Sprite_Movement_Calculate(pSprite); |
| 17627 | |
| 17628 | Dat0 = (int64)pSprite->field_1A; |
| 17629 | Dat4 = (pSprite->field_1E & 0xFFFF) | (pSprite->field_20 << 16); |
| 17630 | |
| 17631 | Dat0 -= 0x28000; |
| 17632 | Dat4 += (int32)Dat0; |
| 17633 | |
| 17634 | if (Dat4 < 0) { |
| 17635 | Dat4 = 0; |
| 17636 | Dat0 = -Dat0; |
| 17637 | Dat0 >>= 2; |
| 17638 | } |
| 17639 | |
| 17640 | pSprite->field_1A = (int32)Dat0; |
| 17641 | pSprite->field_1E_Big = Dat4; |
| 17642 | |
| 17643 | if (!(Dat4 >> 16)) { |
| 17644 | if (!(Dat0 >> 16)) |
| 17645 | goto loc_21464; |
| 17646 | } |
| 17647 | |
| 17648 | Data0 = -3; |
| 17649 | Data4 = 0x0C; |
| 17650 | |
| 17651 | Map_Terrain_Get_Type_And_Walkable(pSprite, Data0, Data4); |
| 17652 | |
| 17653 | if (pSprite->field_20) |
| 17654 | return; |
| 17655 | |
| 17656 | if (Data4 == eTerrainFeature_WaterEdge) |
| 17657 | goto loc_21464; |
| 17658 | |
| 17659 | if (Data4 == eTerrainFeature_Water) |
| 17660 | goto loc_21464; |
| 17661 |
nothing calls this directly
no outgoing calls
no test coverage detected