169 AllInactive:= false; |
169 AllInactive:= false; |
170 dec(Gear.Timer); |
170 dec(Gear.Timer); |
171 Gear.Y:= Gear.Y - 0.07; |
171 Gear.Y:= Gear.Y - 0.07; |
172 if Gear.Timer = 0 then |
172 if Gear.Timer = 0 then |
173 begin |
173 begin |
174 PHedgehog(Gear.Hedgehog).Gear.Active:= true; |
174 PHedgehog(Gear.Hedgehog).Gear.Active:= true; // to let current hh die |
175 DeleteGear(Gear) |
175 DeleteGear(Gear) |
176 end |
176 end |
177 end; |
177 end; |
178 |
178 |
|
179 procedure doStepHealthTagWorkUnderWater(Gear: PGear); |
|
180 begin |
|
181 AllInactive:= false; |
|
182 Gear.Y:= Gear.Y - 0.07; |
|
183 if Gear.Y <= cWaterLine + 10 then |
|
184 DeleteGear(Gear) |
|
185 end; |
|
186 |
179 procedure doStepHealthTag(Gear: PGear); |
187 procedure doStepHealthTag(Gear: PGear); |
180 var s: shortstring; |
188 var s: shortstring; |
181 begin |
189 begin |
182 AllInactive:= false; |
190 AllInactive:= false; |
183 str(Gear.State, s); |
191 str(Gear.State, s); |
184 Gear.Surf:= RenderString(s, PHedgehog(Gear.Hedgehog).Team.Color, fnt16); |
192 Gear.Surf:= RenderString(s, PHedgehog(Gear.Hedgehog).Team.Color, fnt16); |
185 Gear.doStep:= doStepHealthTagWork |
193 if Gear.Y < cWaterLine then Gear.doStep:= doStepHealthTagWork |
|
194 else Gear.doStep:= doStepHealthTagWorkUnderWater |
186 end; |
195 end; |
187 |
196 |
188 //////////////////////////////////////////////////////////////////////////////// |
197 //////////////////////////////////////////////////////////////////////////////// |
189 procedure doStepGrave(Gear: PGear); |
198 procedure doStepGrave(Gear: PGear); |
190 begin |
199 begin |
874 Gear.dY:= -0.9; |
883 Gear.dY:= -0.9; |
875 Gear.doStep:= doStepFirePunchWork; |
884 Gear.doStep:= doStepFirePunchWork; |
876 DrawTunnel(HHGear.X - cHHRadius, HHGear.Y + 1, 0.5, 0.0, cHHRadius * 4, 5); |
885 DrawTunnel(HHGear.X - cHHRadius, HHGear.Y + 1, 0.5, 0.0, cHHRadius * 4, 5); |
877 end; |
886 end; |
878 |
887 |
|
888 //////////////////////////////////////////////////////////////////////////////// |
|
889 |
879 procedure doStepParachute(Gear: PGear); |
890 procedure doStepParachute(Gear: PGear); |
880 var HHGear: PGear; |
891 var HHGear: PGear; |
881 begin |
892 begin |
882 HHGear:= PHedgehog(Gear.Hedgehog).Gear; |
893 HHGear:= PHedgehog(Gear.Hedgehog).Gear; |
883 HHGear.State:= HHGear.State and not gstAttacking; |
894 HHGear.State:= HHGear.State and not gstAttacking; |
907 else if (Gear.Message and gm_Right) <> 0 then HHGear.X:= HHGear.X + cMaxWindSpeed * 40; |
918 else if (Gear.Message and gm_Right) <> 0 then HHGear.X:= HHGear.X + cMaxWindSpeed * 40; |
908 if (Gear.Message and gm_Up) <> 0 then HHGear.Y:= HHGear.Y - cGravity * 40 |
919 if (Gear.Message and gm_Up) <> 0 then HHGear.Y:= HHGear.Y - cGravity * 40 |
909 else if (Gear.Message and gm_Down) <> 0 then HHGear.Y:= HHGear.Y + cGravity * 40; |
920 else if (Gear.Message and gm_Down) <> 0 then HHGear.Y:= HHGear.Y + cGravity * 40; |
910 |
921 |
911 HHGear.Y:= HHGear.Y + cGravity * 100; |
922 HHGear.Y:= HHGear.Y + cGravity * 100; |
912 |
923 end; |
913 end; |
924 |
914 |
925 //////////////////////////////////////////////////////////////////////////////// |
915 |
926 const cAirPlaneSpeed = 0.8; |
|
927 cBombsDistance = 30; |
|
928 cBombsSpeed = 0.1; |
|
929 |
|
930 procedure doStepAirAttackWork(Gear: PGear); |
|
931 begin |
|
932 AllInactive:= false; |
|
933 Gear.X:= Gear.X + cAirPlaneSpeed; |
|
934 if (Gear.Health > 0)and(Gear.X >= Gear.dX)and(Gear.X < Gear.dX + cAirPlaneSpeed) then |
|
935 begin |
|
936 dec(Gear.Health); |
|
937 AddGear(round(Gear.X), round(Gear.Y), gtAirBomb, 0, cBombsSpeed, 0.0); |
|
938 Gear.dX:= Gear.dX + cBombsDistance |
|
939 end; |
|
940 if Gear.X > 2560 then DeleteGear(Gear) |
|
941 end; |
|
942 |
|
943 procedure doStepAirAttack(Gear: PGear); |
|
944 begin |
|
945 AllInactive:= false; |
|
946 Gear.X:= -512; |
|
947 Gear.Y:= -128; |
|
948 Gear.dX:= TargetPoint.X - |
|
949 cBombsDistance * 5 / 2 - |
|
950 cBombsSpeed * sqrt(2 * (TargetPoint.Y - Gear.Y) / cGravity); |
|
951 Gear.Health:= 6; |
|
952 Gear.doStep:= doStepAirAttackWork |
|
953 end; |
|
954 |
|
955 //////////////////////////////////////////////////////////////////////////////// |
|
956 |
|
957 procedure doStepAirBomb(Gear: PGear); |
|
958 begin |
|
959 AllInactive:= false; |
|
960 doStepFallingGear(Gear); |
|
961 if (Gear.State and gstCollision) <> 0 then |
|
962 begin |
|
963 doMakeExplosion(round(Gear.X), round(Gear.Y), 35, EXPLAutoSound); |
|
964 DeleteGear(Gear); |
|
965 exit |
|
966 end; |
|
967 if (GameTicks and $3F) = 0 then |
|
968 AddGear(round(Gear.X), round(Gear.Y), gtSmokeTrace, 0) |
|
969 end; |
|
970 |
|
971 |