hedgewars/uTeams.pas
changeset 8934 a4ec39eac0be
parent 8681 d0fc1dca739c
child 8935 701e3267edce
equal deleted inserted replaced
8933:19be64b0f36e 8934:a4ec39eac0be
   108     end;
   108     end;
   109 GameOver:= true
   109 GameOver:= true
   110 end;
   110 end;
   111 
   111 
   112 procedure SwitchHedgehog;
   112 procedure SwitchHedgehog;
   113 var c, i, j: LongWord;
   113 var c, i, t, j: LongWord;
   114     PrevHH, PrevTeam : LongWord;
   114     PrevHH, PrevTeam : LongWord;
   115 begin
   115 begin
   116 TargetPoint.X:= NoPointX;
   116 TargetPoint.X:= NoPointX;
   117 TryDo(CurrentTeam <> nil, 'nil Team', true);
   117 TryDo(CurrentTeam <> nil, 'nil Team', true);
   118 with CurrentHedgehog^ do
   118 with CurrentHedgehog^ do
   171         inc(c);
   171         inc(c);
   172 
   172 
   173     if c = ClansCount then
   173     if c = ClansCount then
   174         begin
   174         begin
   175         if not PlacingHogs then
   175         if not PlacingHogs then
   176             begin
       
   177             inc(TotalRounds);
   176             inc(TotalRounds);
   178             for i:= 0 to Pred(TeamsCount) do
       
   179                 with TeamsArray[i]^ do
       
   180                     for j:= 0 to Pred(HedgehogsNumber) do
       
   181                         with Hedgehogs[j] do
       
   182                             if Effects[heFrozen] > 255 then
       
   183                                 Effects[heFrozen]:= max(255,Effects[heFrozen]-50000)
       
   184             end;
       
   185         c:= 0
   177         c:= 0
   186         end;
   178         end;
   187 
   179 
   188     with ClansArray[c]^ do
   180     with ClansArray[c]^ do
   189         begin
   181         begin
   196                 PrevHH:= CurrHedgehog mod HedgehogsNumber; // prevent infinite loop when CurrHedgehog = 7, but HedgehogsNumber < 8 (team is destroyed before its first turn)
   188                 PrevHH:= CurrHedgehog mod HedgehogsNumber; // prevent infinite loop when CurrHedgehog = 7, but HedgehogsNumber < 8 (team is destroyed before its first turn)
   197                 repeat
   189                 repeat
   198                     CurrHedgehog:= Succ(CurrHedgehog) mod HedgehogsNumber;
   190                     CurrHedgehog:= Succ(CurrHedgehog) mod HedgehogsNumber;
   199                 until ((Hedgehogs[CurrHedgehog].Gear <> nil) and (Hedgehogs[CurrHedgehog].Effects[heFrozen] = 0)) or (CurrHedgehog = PrevHH)
   191                 until ((Hedgehogs[CurrHedgehog].Gear <> nil) and (Hedgehogs[CurrHedgehog].Effects[heFrozen] = 0)) or (CurrHedgehog = PrevHH)
   200                 end
   192                 end
   201         until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) or (PrevTeam = CurrTeam) or ((CurrTeam = TagTeamIndex) and ((GameFlags and gfTagTeam) <> 0));
   193         until ((CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] < 256)) or (PrevTeam = CurrTeam) or ((CurrTeam = TagTeamIndex) and ((GameFlags and gfTagTeam) <> 0))
   202         end
   194         end;
   203 until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] = 0);
   195         if (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear = nil) or (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] > 255) then
       
   196             begin
       
   197             inc(CurrentTeam^.Clan^.TurnNumber);
       
   198             with CurrentTeam^.Clan^ do
       
   199                 for t:= 0 to Pred(TeamsNumber) do
       
   200                     with Teams[t]^ do
       
   201                         for i:= 0 to Pred(HedgehogsNumber) do
       
   202                             with Hedgehogs[i] do
       
   203                                 if Effects[heFrozen] > 255 then
       
   204                                     Effects[heFrozen]:= max(255,Effects[heFrozen]-50000);
       
   205             end;
       
   206 until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] < 256);
   204 
   207 
   205 SwitchCurrentHedgehog(@(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]));
   208 SwitchCurrentHedgehog(@(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]));
   206 {$IFDEF USE_TOUCH_INTERFACE}
   209 {$IFDEF USE_TOUCH_INTERFACE}
   207 if (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoCrosshair) = 0 then
   210 if (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoCrosshair) = 0 then
   208     begin
   211     begin