2812 begin |
2812 begin |
2813 Gear^.Tag := hwRound(HHGear^.Y); |
2813 Gear^.Tag := hwRound(HHGear^.Y); |
2814 DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4+2, 2); |
2814 DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4+2, 2); |
2815 HHGear^.State := HHGear^.State or gstNoDamage; |
2815 HHGear^.State := HHGear^.State or gstNoDamage; |
2816 Gear^.Y := HHGear^.Y; |
2816 Gear^.Y := HHGear^.Y; |
2817 AmmoShove(Gear, Gear^.Boom, 40); |
2817 AmmoShoveCache(Gear, Gear^.Boom, 40); |
2818 HHGear^.State := HHGear^.State and (not gstNoDamage) |
2818 HHGear^.State := HHGear^.State and (not gstNoDamage) |
2819 end; |
2819 end; |
2820 |
2820 |
2821 HHGear^.dY := HHGear^.dY + cGravity; |
2821 HHGear^.dY := HHGear^.dY + cGravity; |
2822 if Gear^.Timer > 0 then dec(Gear^.Timer); |
2822 if Gear^.Timer > 0 then dec(Gear^.Timer); |
2823 if not (HHGear^.dY.isNegative) or (Gear^.Timer = 0) then |
2823 if not (HHGear^.dY.isNegative) or (Gear^.Timer = 0) then |
2824 begin |
2824 begin |
2825 HHGear^.State := HHGear^.State or gstMoving; |
2825 HHGear^.State := HHGear^.State or gstMoving; |
2826 ClearHitOrder(); |
2826 ClearHitOrder(); |
|
2827 ClearProximityCache(); |
2827 DeleteGear(Gear); |
2828 DeleteGear(Gear); |
2828 AfterAttack; |
2829 AfterAttack; |
2829 exit |
2830 exit |
2830 end; |
2831 end; |
2831 |
2832 |
2832 if CheckLandValue(hwRound(HHGear^.X), hwRound(HHGear^.Y + HHGear^.dY + SignAs(_6,Gear^.dY)), |
2833 if CheckLandValue(hwRound(HHGear^.X), hwRound(HHGear^.Y + HHGear^.dY + SignAs(_6,Gear^.dY)), |
2833 lfIndestructible) then |
2834 lfIndestructible) then |
2834 HHGear^.Y := HHGear^.Y + HHGear^.dY |
2835 HHGear^.Y := HHGear^.Y + HHGear^.dY; |
|
2836 |
|
2837 if (Gear^.Timer mod 200) = 0 then |
|
2838 RefillProximityCache(Gear, 300); |
2835 end; |
2839 end; |
2836 |
2840 |
2837 procedure doStepFirePunch(Gear: PGear); |
2841 procedure doStepFirePunch(Gear: PGear); |
2838 var |
2842 var |
2839 HHGear: PGear; |
2843 HHGear: PGear; |
2845 HHGear^.dX := SignAs(cLittle, Gear^.dX); |
2849 HHGear^.dX := SignAs(cLittle, Gear^.dX); |
2846 |
2850 |
2847 HHGear^.dY := - _0_3; |
2851 HHGear^.dY := - _0_3; |
2848 |
2852 |
2849 ClearHitOrder(); |
2853 ClearHitOrder(); |
|
2854 RefillProximityCache(Gear, 300); |
2850 |
2855 |
2851 Gear^.X := HHGear^.X; |
2856 Gear^.X := HHGear^.X; |
2852 Gear^.dX := SignAs(_0_45, Gear^.dX); |
2857 Gear^.dX := SignAs(_0_45, Gear^.dX); |
2853 Gear^.dY := - _0_9; |
2858 Gear^.dY := - _0_9; |
2854 Gear^.doStep := @doStepFirePunchWork; |
2859 Gear^.doStep := @doStepFirePunchWork; |