hedgewars/uGears.pas
changeset 2824 2d25e49bc2e8
parent 2814 71e80c6e74bb
child 2840 bb9117753fe4
equal deleted inserted replaced
2823:cf002eb2ab65 2824:2d25e49bc2e8
   512 			else
   512 			else
   513 				dec(Gear^.Health, dmg);
   513 				dec(Gear^.Health, dmg);
   514 
   514 
   515             if (PHedgehog(Gear^.Hedgehog)^.Team = CurrentTeam) and
   515             if (PHedgehog(Gear^.Hedgehog)^.Team = CurrentTeam) and
   516                (Gear^.Damage <> Gear^.Karma) and
   516                (Gear^.Damage <> Gear^.Karma) and
       
   517                 not PHedgehog(Gear^.Hedgehog)^.King and
   517                 not SuddenDeathDmg then
   518                 not SuddenDeathDmg then
   518                 Gear^.State:= Gear^.State or gstLoser;
   519                 Gear^.State:= Gear^.State or gstLoser;
   519 
   520 
   520 			AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12,
   521 			AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12,
   521 					gtHealthTag, dmg, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
   522 					gtHealthTag, dmg, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
   532 SuddenDeathDmg:= false;
   533 SuddenDeathDmg:= false;
   533 end;
   534 end;
   534 
   535 
   535 procedure HealthMachine;
   536 procedure HealthMachine;
   536 var Gear: PGear;
   537 var Gear: PGear;
       
   538     team: PTeam;
       
   539        i: LongWord;
       
   540     flag: Boolean;
   537 begin
   541 begin
   538 Gear:= GearsList;
   542 Gear:= GearsList;
   539 
   543 
   540 while Gear <> nil do
   544 while Gear <> nil do
   541 	begin
   545 	begin
   542 	if Gear^.Kind = gtHedgehog then
   546 	if Gear^.Kind = gtHedgehog then
   543 		Gear^.Damage:= min(cHealthDecrease, Gear^.Health - 1);
   547         begin
       
   548 		inc(Gear^.Damage, min(cHealthDecrease, max(0,Gear^.Health - 1 - Gear^.Damage)));
       
   549         if PHedgehog(Gear^.Hedgehog)^.King then
       
   550             begin
       
   551             flag:= false;
       
   552 		    team:= PHedgehog(Gear^.Hedgehog)^.Team;
       
   553             for i:= 0 to Pred(team^.HedgehogsNumber) do
       
   554                 if (team^.Hedgehogs[i].Gear <> nil) and 
       
   555                    (not team^.Hedgehogs[i].King) and 
       
   556                    (team^.Hedgehogs[i].Gear^.Health > team^.Hedgehogs[i].Gear^.Damage) then flag:= true;
       
   557             if not flag then inc(Gear^.Damage, min(5, max(0,Gear^.Health - 1 - Gear^.Damage)))
       
   558             end
       
   559         end;
   544 
   560 
   545 	Gear:= Gear^.NextGear
   561 	Gear:= Gear^.NextGear
   546 	end;
   562 	end;
   547 end;
   563 end;
   548 
   564 
   630 				cHealthDecrease:= 5;
   646 				cHealthDecrease:= 5;
   631 				AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState);
   647 				AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState);
   632 				playSound(sndSuddenDeath)
   648 				playSound(sndSuddenDeath)
   633 				end;
   649 				end;
   634 
   650 
   635 			if (cHealthDecrease = 0)
   651 			if bBetweenTurns
   636 				or bBetweenTurns
       
   637 				or isInMultiShoot
   652 				or isInMultiShoot
   638 				or (TotalRounds = 0) then inc(step)
   653 				or (TotalRounds = 0) then inc(step)
   639 			else begin
   654 			else begin
   640 				bBetweenTurns:= true;
   655 				bBetweenTurns:= true;
   641 				HealthMachine;
   656 				HealthMachine;
   642 				SuddenDeathDmg:= true;
   657                 if cHealthDecrease > 0 then SuddenDeathDmg:= true;
   643 				step:= stChDmg
   658 				step:= stChDmg
   644 				end
   659 				end
   645 			end;
   660 			end;
   646 	stSpawn: begin
   661 	stSpawn: begin
   647 			if not isInMultiShoot then SpawnBoxOfSmth;
   662 			if not isInMultiShoot then SpawnBoxOfSmth;