hedgewars/uGears.pas
changeset 14398 87562a68c41f
parent 14394 d670e4efe1ed
child 14400 9c7d5f595881
equal deleted inserted replaced
14397:f9a3cfdec1df 14398:87562a68c41f
    62 
    62 
    63 var delay: LongWord;
    63 var delay: LongWord;
    64     delay2: LongWord;
    64     delay2: LongWord;
    65     step: (stInit, stDelay, stChDmg, stSweep, stTurnStats, stChWin1,
    65     step: (stInit, stDelay, stChDmg, stSweep, stTurnStats, stChWin1,
    66     stTurnReact, stAfterDelay, stChWin2, stWater, stChWin3,
    66     stTurnReact, stAfterDelay, stChWin2, stWater, stChWin3,
    67     stHealth, stSpawn, stNTurn);
    67     stChKing, stHealth, stSpawn, stNTurn);
    68     NewTurnTick: LongWord;
    68     NewTurnTick: LongWord;
    69     //SDMusic: shortstring;
    69     //SDMusic: shortstring;
    70 
    70 
    71 function CheckNoDamage: boolean; // returns TRUE in case of no damaged hhs
    71 function CheckNoDamage: boolean; // returns TRUE in case of no damaged hhs
    72 var Gear: PGear;
    72 var Gear: PGear;
    84         if (Gear^.Damage <> 0) and ((Gear^.Hedgehog^.Effects[heInvulnerable] = 0)) then
    84         if (Gear^.Damage <> 0) and ((Gear^.Hedgehog^.Effects[heInvulnerable] = 0)) then
    85             begin
    85             begin
    86             CheckNoDamage:= false;
    86             CheckNoDamage:= false;
    87 
    87 
    88             dmg:= Gear^.Damage;
    88             dmg:= Gear^.Damage;
    89             if Gear^.Health < dmg then
    89             if (Gear^.Health < dmg) then
    90                 begin
    90                 begin
    91                 Gear^.Active:= true;
    91                 Gear^.Active:= true;
    92                 Gear^.Health:= 0
    92                 Gear^.Health:= 0
    93                 end
    93                 end
    94             else
    94             else
   103             spawnHealthTagForHH(Gear, dmg);
   103             spawnHealthTagForHH(Gear, dmg);
   104 
   104 
   105             RenderHealth(Gear^.Hedgehog^);
   105             RenderHealth(Gear^.Hedgehog^);
   106             RecountTeamHealth(Gear^.Hedgehog^.Team);
   106             RecountTeamHealth(Gear^.Hedgehog^.Team);
   107 
   107 
   108             end;
   108             end
       
   109         else if ((GameFlags and gfKing) <> 0) and (not Gear^.Hedgehog^.Team^.hasKing) then
       
   110             begin
       
   111             Gear^.Active:= true;
       
   112             Gear^.Health:= 0;
       
   113             RenderHealth(Gear^.Hedgehog^);
       
   114             RecountTeamHealth(Gear^.Hedgehog^.Team);
       
   115             end;
       
   116 
   109         if (not isInMultiShoot) then
   117         if (not isInMultiShoot) then
   110             Gear^.Karma:= 0;
   118             Gear^.Karma:= 0;
   111         Gear^.Damage:= 0
   119         Gear^.Damage:= 0
   112         end;
   120         end;
   113     Gear:= Gear^.NextGear
   121     Gear:= Gear^.NextGear
   114     end;
   122     end;
       
   123 end;
       
   124 
       
   125 function CheckMinionsDie: boolean;
       
   126 var Gear: PGear;
       
   127 begin
       
   128     CheckMinionsDie:= false;
       
   129     if (GameFlags and gfKing) = 0 then
       
   130         exit;
       
   131 
       
   132     Gear:= GearsList;
       
   133     while Gear <> nil do
       
   134         begin
       
   135         if (Gear^.Kind = gtHedgehog) and (not Gear^.Hedgehog^.King) and (not Gear^.Hedgehog^.Team^.hasKing) then
       
   136             begin
       
   137             CheckMinionsDie:= true;
       
   138             exit;
       
   139             end;
       
   140         Gear:= Gear^.NextGear;
       
   141         end;
   115 end;
   142 end;
   116 
   143 
   117 procedure HealthMachine;
   144 procedure HealthMachine;
   118 var Gear: PGear;
   145 var Gear: PGear;
   119     team: PTeam;
   146     team: PTeam;
   355         CheckForWin;
   382         CheckForWin;
   356         bDuringWaterRise:= false;
   383         bDuringWaterRise:= false;
   357         inc(step)
   384         inc(step)
   358         end;
   385         end;
   359 
   386 
       
   387     stChKing:
       
   388         begin
       
   389         if (not isInMultiShoot) and (CheckMinionsDie) then
       
   390             step:= stChDmg
       
   391         else
       
   392             inc(step);
       
   393         end;
   360     stHealth:
   394     stHealth:
   361         begin
   395         begin
   362         if (cWaterRise <> 0) or (cHealthDecrease <> 0) then
   396         if (cWaterRise <> 0) or (cHealthDecrease <> 0) then
   363              begin
   397             begin
   364             if (TotalRoundsPre = cSuddenDTurns) and (not SuddenDeath) and (not isInMultiShoot) then
   398             if (TotalRoundsPre = cSuddenDTurns) and (not SuddenDeath) and (not isInMultiShoot) then
   365                 StartSuddenDeath()
   399                 StartSuddenDeath()
   366             else if (TotalRoundsPre < cSuddenDTurns) and (not isInMultiShoot) then
   400             else if (TotalRoundsPre < cSuddenDTurns) and (not isInMultiShoot) then
   367                 begin
   401                 begin
   368                 i:= cSuddenDTurns - TotalRoundsPre;
   402                 i:= cSuddenDTurns - TotalRoundsPre;