| 17720 | } |
| 17721 | |
| 17722 | void cFodder::Sprite_Handle_Grenade_Terrain_Check(sSprite* pSprite) { |
| 17723 | int16 Data0 = -3; |
| 17724 | int16 Data4 = 2; |
| 17725 | |
| 17726 | if (Map_Terrain_Get_Type_And_Walkable(pSprite, Data0, Data4)) |
| 17727 | goto loc_21599; |
| 17728 | |
| 17729 | if (Data4 == eTerrainFeature_Drop || Data4 == eTerrainFeature_Drop2) { |
| 17730 | |
| 17731 | if (pSprite->field_20 <= 1) { |
| 17732 | pSprite->field_12 = 1; |
| 17733 | return; |
| 17734 | } |
| 17735 | } |
| 17736 | //loc_21561 |
| 17737 | if (Data4 == eTerrainFeature_QuickSand || Data4 == eTerrainFeature_WaterEdge |
| 17738 | || Data4 == eTerrainFeature_Water) { |
| 17739 | |
| 17740 | if (pSprite->field_20) |
| 17741 | return; |
| 17742 | |
| 17743 | pSprite->field_52 = 6; |
| 17744 | (pSprite + 1)->field_52 = 6; |
| 17745 | return; |
| 17746 | } |
| 17747 | //loc_21597 |
| 17748 | return; |
| 17749 | |
| 17750 | loc_21599:; |
| 17751 | if (pSprite->field_20 >= 8) |
| 17752 | return; |
| 17753 | |
| 17754 | pSprite->field_0 = mStoredSpriteX >> 16; |
| 17755 | Data0 = -3; |
| 17756 | Data4 = 2; |
| 17757 | |
| 17758 | if (!Map_Terrain_Get_Type_And_Walkable(pSprite, Data0, Data4)) { |
| 17759 | Data0 = 0x100; |
| 17760 | Data0 -= pSprite->field_10; |
| 17761 | Data0 &= 0x1FE; |
| 17762 | pSprite->field_10 = Data0; |
| 17763 | } |
| 17764 | else { |
| 17765 | Data0 = 0x200; |
| 17766 | Data0 -= pSprite->field_10; |
| 17767 | Data0 &= 0x1FE; |
| 17768 | pSprite->field_10 = Data0; |
| 17769 | } |
| 17770 | Sprite_XY_Restore(pSprite); |
| 17771 | } |
| 17772 | |
| 17773 | int16 cFodder::Sprite_Projectile_Collision_Check(sSprite* pSprite) { |
| 17774 |
nothing calls this directly
no outgoing calls
no test coverage detected