4939 end; |
4939 end; |
4940 |
4940 |
4941 //////////////////////////////////////////////////////////////////////////////// |
4941 //////////////////////////////////////////////////////////////////////////////// |
4942 procedure doStepStructure(Gear: PGear); |
4942 procedure doStepStructure(Gear: PGear); |
4943 var |
4943 var |
4944 x, y: LongInt; |
4944 x, y, i: LongInt; |
4945 begin |
4945 HH: PHedgehog; |
|
4946 t: PGear; |
|
4947 begin |
|
4948 HH:= Gear^.Hedgehog; |
|
4949 |
4946 if (Gear^.State and gstMoving) <> 0 then |
4950 if (Gear^.State and gstMoving) <> 0 then |
4947 begin |
4951 begin |
4948 AddGearCI(Gear); |
4952 AddGearCI(Gear); |
4949 Gear^.dX:= _0; |
4953 Gear^.dX:= _0; |
4950 Gear^.dY:= _0; |
4954 Gear^.dY:= _0; |
4951 Gear^.State:= Gear^.State and (not gstMoving); |
4955 Gear^.State:= Gear^.State and (not gstMoving); |
4952 end; |
4956 end; |
4953 |
4957 |
4954 if CurAmmoGear = Gear then |
4958 dec(Gear^.Health, Gear^.Damage); |
4955 begin |
4959 Gear^.Damage:= 0; |
4956 if (CurrentHedgehog = nil) or (CurrentHedgehog^.Gear = nil) then |
4960 |
4957 begin |
4961 if Gear^.Pos = 1 then |
4958 DeleteGear(Gear); |
4962 begin |
4959 exit |
|
4960 end; |
|
4961 if Gear = CurAmmoGear then CurAmmoGear := nil; |
|
4962 Gear^.Hedgehog:= CurrentHedgehog; |
|
4963 RemoveGearFromList(CurrentHedgehog^.Gear); |
|
4964 CurrentHedgehog^.Gear^.Z := cHHZ; |
|
4965 CurrentHedgehog^.Gear^.Active := false; |
|
4966 CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State and (not gstHHDriven); |
|
4967 CurrentHedgehog^.GearHidden:= CurrentHedgehog^.Gear; |
|
4968 CurrentHedgehog^.Gear:= nil; |
|
4969 Gear^.Tag:= TotalRounds + Gear^.Tag; |
|
4970 AddGearCI(Gear); |
4963 AddGearCI(Gear); |
4971 end; |
4964 AfterAttack; |
4972 |
4965 if Gear = CurAmmoGear then CurAmmoGear:= nil; |
4973 dec(Gear^.Health, Gear^.Damage); |
4966 if HH^.Gear <> nil then HideHog(HH); |
4974 Gear^.Damage := 0; |
4967 Gear^.Pos:= 2 |
|
4968 end; |
4975 |
4969 |
4976 if (Gear^.Tag = TotalRounds) or (Gear^.Health <= 0) then |
4970 if Gear^.Pos = 2 then |
4977 begin |
4971 begin |
4978 if Gear^.Hedgehog <> nil then |
4972 if ((GameTicks mod 100) = 0) and (Gear^.Timer < 1000) then |
4979 begin |
4973 begin |
4980 Gear^.Hedgehog^.Gear:= Gear^.Hedgehog^.GearHidden; |
4974 if (Gear^.Timer mod 10) = 0 then |
4981 Gear^.Hedgehog^.GearHidden:= nil; |
4975 begin |
4982 Gear^.Hedgehog^.Gear^.X:= Gear^.X; |
4976 DeleteCI(Gear); |
4983 Gear^.Hedgehog^.Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Radius + cHHRadius); |
4977 Gear^.Y:= Gear^.Y - _0_5; |
4984 InsertGearToList(Gear^.Hedgehog^.Gear); |
4978 AddGearCI(Gear); |
4985 Gear^.Hedgehog:= nil; |
4979 end; |
4986 SetAllHHToActive; |
4980 inc(Gear^.Timer); |
4987 end; |
4981 end; |
4988 end; |
4982 if Gear^.Tag <= TotalRounds then Gear^.Pos:= 3; |
|
4983 end; |
|
4984 |
|
4985 if Gear^.Pos = 3 then |
|
4986 if Gear^.Timer < 1000 then |
|
4987 begin |
|
4988 if (Gear^.Timer mod 10) = 0 then |
|
4989 begin |
|
4990 DeleteCI(Gear); |
|
4991 Gear^.Y:= Gear^.Y - _0_5; |
|
4992 AddGearCI(Gear); |
|
4993 end; |
|
4994 inc(Gear^.Timer); |
|
4995 end |
|
4996 else |
|
4997 begin |
|
4998 if HH^.GearHidden <> nil then RestoreHog(HH); |
|
4999 Gear^.Pos:= 4; |
|
5000 end; |
|
5001 |
|
5002 if Gear^.Pos = 4 then |
|
5003 if ((GameTicks mod 1000) = 0) and ((GameFlags And gfInvulnerable) = 0) then |
|
5004 begin |
|
5005 t:= GearsList; |
|
5006 while t <> nil do |
|
5007 begin |
|
5008 if (t^.Kind = gtHedgehog) and (t^.Hedgehog^.Team^.Clan = HH^.Team^.Clan) then |
|
5009 t^.Invulnerable:= true; |
|
5010 t:= t^.NextGear; |
|
5011 end; |
|
5012 end; |
4989 |
5013 |
4990 if Gear^.Health <= 0 then |
5014 if Gear^.Health <= 0 then |
4991 begin |
5015 begin |
|
5016 if HH^.GearHidden <> nil then RestoreHog(HH); |
|
5017 |
4992 x := hwRound(Gear^.X); |
5018 x := hwRound(Gear^.X); |
4993 y := hwRound(Gear^.Y); |
5019 y := hwRound(Gear^.Y); |
4994 |
5020 |
4995 DeleteCI(Gear); |
5021 DeleteCI(Gear); |
4996 DeleteGear(Gear); |
5022 DeleteGear(Gear); |
5050 if (Gear^.Power = 172) and (HH^.Gear <> nil) and |
5076 if (Gear^.Power = 172) and (HH^.Gear <> nil) and |
5051 (HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and |
5077 (HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and |
5052 ((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then |
5078 ((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then |
5053 with HH^.Gear^ do |
5079 with HH^.Gear^ do |
5054 begin |
5080 begin |
5055 State:= State or gstAnimation; |
5081 State:= State or gstAnimation; |
5056 Tag:= 2; |
5082 Tag:= 2; |
5057 Timer:= 0; |
5083 Timer:= 0; |
5058 Pos:= 0 |
5084 Pos:= 0 |
5059 end |
5085 end |
5060 end; |
5086 end; |
5061 if (Gear^.Pos = 3) and (GameTicks and $1F = 0) and (Gear^.Power > 0) then dec(Gear^.Power); |
5087 if (Gear^.Pos = 3) and (GameTicks and $1F = 0) and (Gear^.Power > 0) then dec(Gear^.Power); |
5062 if (Gear^.Pos = 1) and (Gear^.Power = 255) and ((GameTicks mod 2000) = 1000) then Gear^.Pos:= 2; |
5088 if (Gear^.Pos = 1) and (Gear^.Power = 255) and ((GameTicks mod 2000) = 1000) then Gear^.Pos:= 2; |
5063 if (Gear^.Pos = 3) and (Gear^.Power = 0) then |
5089 if (Gear^.Pos = 3) and (Gear^.Power = 0) then |