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); |