--- a/hedgewars/uGears.pas Sun Dec 09 22:28:46 2018 +0100
+++ b/hedgewars/uGears.pas Mon Dec 10 02:30:14 2018 +0100
@@ -64,7 +64,7 @@
delay2: LongWord;
step: (stInit, stDelay, stChDmg, stSweep, stTurnStats, stChWin1,
stTurnReact, stAfterDelay, stChWin2, stWater, stChWin3,
- stHealth, stSpawn, stNTurn);
+ stChKing, stHealth, stSpawn, stNTurn);
NewTurnTick: LongWord;
//SDMusic: shortstring;
@@ -86,7 +86,7 @@
CheckNoDamage:= false;
dmg:= Gear^.Damage;
- if Gear^.Health < dmg then
+ if (Gear^.Health < dmg) then
begin
Gear^.Active:= true;
Gear^.Health:= 0
@@ -105,7 +105,15 @@
RenderHealth(Gear^.Hedgehog^);
RecountTeamHealth(Gear^.Hedgehog^.Team);
+ end
+ else if ((GameFlags and gfKing) <> 0) and (not Gear^.Hedgehog^.Team^.hasKing) then
+ begin
+ Gear^.Active:= true;
+ Gear^.Health:= 0;
+ RenderHealth(Gear^.Hedgehog^);
+ RecountTeamHealth(Gear^.Hedgehog^.Team);
end;
+
if (not isInMultiShoot) then
Gear^.Karma:= 0;
Gear^.Damage:= 0
@@ -114,6 +122,25 @@
end;
end;
+function CheckMinionsDie: boolean;
+var Gear: PGear;
+begin
+ CheckMinionsDie:= false;
+ if (GameFlags and gfKing) = 0 then
+ exit;
+
+ Gear:= GearsList;
+ while Gear <> nil do
+ begin
+ if (Gear^.Kind = gtHedgehog) and (not Gear^.Hedgehog^.King) and (not Gear^.Hedgehog^.Team^.hasKing) then
+ begin
+ CheckMinionsDie:= true;
+ exit;
+ end;
+ Gear:= Gear^.NextGear;
+ end;
+end;
+
procedure HealthMachine;
var Gear: PGear;
team: PTeam;
@@ -357,10 +384,17 @@
inc(step)
end;
+ stChKing:
+ begin
+ if (not isInMultiShoot) and (CheckMinionsDie) then
+ step:= stChDmg
+ else
+ inc(step);
+ end;
stHealth:
begin
if (cWaterRise <> 0) or (cHealthDecrease <> 0) then
- begin
+ begin
if (TotalRoundsPre = cSuddenDTurns) and (not SuddenDeath) and (not isInMultiShoot) then
StartSuddenDeath()
else if (TotalRoundsPre < cSuddenDTurns) and (not isInMultiShoot) then