| 10755 | } |
| 10756 | |
| 10757 | void cFodder::Sprite_Handle_Grenade(sSprite* pSprite) { |
| 10758 | int16 Data0, Data4, Data8, DataC; |
| 10759 | sSprite* Data24; |
| 10760 | int16 a1; |
| 10761 | int32 Dataa4; |
| 10762 | |
| 10763 | if (pSprite->field_38) |
| 10764 | goto loc_1992D; |
| 10765 | |
| 10766 | if (!pSprite->field_12) |
| 10767 | goto loc_1992D; |
| 10768 | |
| 10769 | if (!pSprite->field_56) |
| 10770 | goto loc_19701; |
| 10771 | |
| 10772 | --pSprite->field_56; |
| 10773 | if (!pSprite->field_56) { |
| 10774 | // HACK: Disable grenade sound for cannon plus... it seems corrupted and causes a crash |
| 10775 | if (!mVersionCurrent->isCoverDisk()) |
| 10776 | Sound_Play(pSprite, eSound_Effect_Grenade, 0x0F); |
| 10777 | } |
| 10778 | |
| 10779 | Data24 = pSprite->field_46_sprite; |
| 10780 | pSprite->field_0 = Data24->field_0; |
| 10781 | pSprite->field_2 = Data24->field_2; |
| 10782 | pSprite->field_4 = Data24->field_4; |
| 10783 | pSprite->field_6 = Data24->field_6; |
| 10784 | pSprite->field_4 += 1; |
| 10785 | pSprite->field_0 += 3; |
| 10786 | pSprite->field_8 = 0x7C; |
| 10787 | pSprite->field_A = 0; |
| 10788 | return; |
| 10789 | |
| 10790 | loc_19701:; |
| 10791 | pSprite->field_8 = 0x7D; |
| 10792 | Data0 = pSprite->field_26; |
| 10793 | Data4 = pSprite->field_28; |
| 10794 | Data8 = pSprite->field_0; |
| 10795 | DataC = pSprite->field_4; |
| 10796 | |
| 10797 | Map_Get_Distance_BetweenPoints_Within_Window(Data0, Data4, Data8, DataC); |
| 10798 | if (Data0 <= 1) |
| 10799 | pSprite->field_36 = 0; |
| 10800 | |
| 10801 | if (Data0 <= 4) |
| 10802 | pSprite->field_36 >>= 1; |
| 10803 | |
| 10804 | if (pSprite->field_36) { |
| 10805 | pSprite->field_36 -= 1; |
| 10806 | Sprite_XY_Store(pSprite); |
| 10807 | |
| 10808 | mTmp_FrameNumber = pSprite->field_A; |
| 10809 | Data0 = pSprite->field_26; |
| 10810 | Data4 = pSprite->field_28; |
| 10811 | |
| 10812 | Sprite_Direction_Between_Points(pSprite, Data0, Data4); |
| 10813 | Sprite_Movement_Calculate(pSprite); |
| 10814 | Sprite_Handle_Grenade_Terrain_Check(pSprite); |
nothing calls this directly
no test coverage detected