hedgewars/uGears.pas
changeset 14349 d35e0fdb70f6
parent 14196 ab5e710d353d
child 14394 d670e4efe1ed
equal deleted inserted replaced
14348:ffebbcc40c9b 14349:d35e0fdb70f6
   126     while Gear <> nil do
   126     while Gear <> nil do
   127     begin
   127     begin
   128         if Gear^.Kind = gtHedgehog then
   128         if Gear^.Kind = gtHedgehog then
   129             begin
   129             begin
   130             tmp:= 0;
   130             tmp:= 0;
       
   131             // Deal poison damage (when not frozen)
   131             if (Gear^.Hedgehog^.Effects[hePoisoned] <> 0) and (Gear^.Hedgehog^.Effects[heFrozen] = 0) then
   132             if (Gear^.Hedgehog^.Effects[hePoisoned] <> 0) and (Gear^.Hedgehog^.Effects[heFrozen] = 0) then
   132                 begin
   133                 begin
   133                 inc(tmp, ModifyDamage(Gear^.Hedgehog^.Effects[hePoisoned], Gear));
   134                 inc(tmp, ModifyDamage(Gear^.Hedgehog^.Effects[hePoisoned], Gear));
   134                 if (GameFlags and gfResetHealth) <> 0 then
   135                 if (GameFlags and gfResetHealth) <> 0 then
   135                     dec(Gear^.Hedgehog^.InitialHealth)  // does not need a minimum check since <= 1 basically disables it
   136                     dec(Gear^.Hedgehog^.InitialHealth);
   136                 end;
   137                 end;
   137             // Apply SD health decrease as soon as SD starts
   138             // Apply SD health decrease as soon as SD starts
   138             if (TotalRoundsPre > cSuddenDTurns - 1) then
   139             if (TotalRoundsPre > cSuddenDTurns - 1) then
   139                 begin
   140                 begin
   140                 inc(tmp, cHealthDecrease);
   141                 inc(tmp, cHealthDecrease);
   141                 if (GameFlags and gfResetHealth) <> 0 then
   142                 if (GameFlags and gfResetHealth) <> 0 then
   142                     dec(Gear^.Hedgehog^.InitialHealth, cHealthDecrease)
   143                     dec(Gear^.Hedgehog^.InitialHealth, cHealthDecrease)
   143                 end;
   144                 end;
       
   145             // Reduce king health when he is alone in team
   144             if Gear^.Hedgehog^.King then
   146             if Gear^.Hedgehog^.King then
   145                 begin
   147                 begin
   146                 flag:= false;
   148                 flag:= false;
   147                 team:= Gear^.Hedgehog^.Team;
   149                 team:= Gear^.Hedgehog^.Team;
   148                 for i:= 0 to Pred(team^.HedgehogsNumber) do
   150                 for i:= 0 to Pred(team^.HedgehogsNumber) do
   154                     inc(tmp, 5);
   156                     inc(tmp, 5);
   155                     if (GameFlags and gfResetHealth) <> 0 then
   157                     if (GameFlags and gfResetHealth) <> 0 then
   156                         dec(Gear^.Hedgehog^.InitialHealth, 5)
   158                         dec(Gear^.Hedgehog^.InitialHealth, 5)
   157                     end
   159                     end
   158                 end;
   160                 end;
       
   161             // Initial health must never be below 1 because hog might be resurrected
       
   162             if Gear^.Hedgehog^.InitialHealth < 1 then
       
   163                 Gear^.Hedgehog^.InitialHealth:= 1;
       
   164             // Set real damage
   159             if tmp > 0 then
   165             if tmp > 0 then
   160                 begin
   166                 begin
   161                 // SD damage never reduces health below 1
   167                 // SD damage never reduces health below 1
   162                 tmp:= min(tmp, max(0, Gear^.Health - 1 - Gear^.Damage));
   168                 tmp:= min(tmp, max(0, Gear^.Health - 1 - Gear^.Damage));
   163                 inc(Gear^.Damage, tmp);
   169                 inc(Gear^.Damage, tmp);