hedgewars/uGears.pas
changeset 867 dc7901b1120e
parent 865 a4a5ec6c61d4
child 868 4884bce5e5eb
equal deleted inserted replaced
866:ac6f6c95c23f 867:dc7901b1120e
   325       end else
   325       end else
   326       begin
   326       begin
   327       if not (hwRound(Gear^.Y) < cWaterLine) then
   327       if not (hwRound(Gear^.Y) < cWaterLine) then
   328          begin
   328          begin
   329          t:= max(Gear^.Damage, Gear^.Health);
   329          t:= max(Gear^.Damage, Gear^.Health);
       
   330          Gear^.Damage:= t;
   330          AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtHealthTag, t, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
   331          AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtHealthTag, t, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
   331          uStats.HedgehogDamaged(Gear, t)
   332          uStats.HedgehogDamaged(Gear)
   332          end;
   333          end;
   333       team:= PHedgehog(Gear^.Hedgehog)^.Team;
   334       team:= PHedgehog(Gear^.Hedgehog)^.Team;
   334       if CurrentHedgehog^.Gear = Gear then
   335       if CurrentHedgehog^.Gear = Gear then
   335          FreeActionsList; // to avoid ThinkThread on drawned gear
   336          FreeActionsList; // to avoid ThinkThread on drawned gear
   336       PHedgehog(Gear^.Hedgehog)^.Gear:= nil;
   337       PHedgehog(Gear^.Hedgehog)^.Gear:= nil;
   349 var Gear: PGear;
   350 var Gear: PGear;
   350 begin
   351 begin
   351 CheckNoDamage:= true;
   352 CheckNoDamage:= true;
   352 Gear:= GearsList;
   353 Gear:= GearsList;
   353 while Gear <> nil do
   354 while Gear <> nil do
   354       begin
   355 	begin
   355       if Gear^.Kind = gtHedgehog then
   356 	if Gear^.Kind = gtHedgehog then
   356          if Gear^.Damage <> 0 then
   357 		if Gear^.Damage <> 0 then
   357             begin
   358 		begin
   358             CheckNoDamage:= false;
   359 		CheckNoDamage:= false;
   359             if Gear^.Health < Gear^.Damage then Gear^.Health:= 0
   360 		uStats.HedgehogDamaged(Gear);
   360                                            else dec(Gear^.Health, Gear^.Damage);
   361 
   361             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12,
   362 		if Gear^.Health < Gear^.Damage then
   362                     gtHealthTag, Gear^.Damage, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
   363 			Gear^.Health:= 0
   363             RenderHealth(PHedgehog(Gear^.Hedgehog)^);
   364 		else
   364             RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team);
   365 			dec(Gear^.Health, Gear^.Damage);
   365 
   366 
   366             Gear^.Damage:= 0
   367 		AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12,
   367             end;
   368 				gtHealthTag, Gear^.Damage, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
   368       Gear:= Gear^.NextGear
   369 		RenderHealth(PHedgehog(Gear^.Hedgehog)^);
   369       end;
   370 		RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team);
       
   371 
       
   372 		Gear^.Damage:= 0
       
   373 		end;
       
   374 	Gear:= Gear^.NextGear
       
   375 	end;
   370 end;
   376 end;
   371 
   377 
   372 procedure AddDamageTag(X, Y, Damage: LongWord; Gear: PGear);
   378 procedure AddDamageTag(X, Y, Damage: LongWord; Gear: PGear);
   373 begin
   379 begin
   374 if cAltDamage then
   380 if cAltDamage then
   822                           {$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF}
   828                           {$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF}
   823                           if (Mask and EXPLNoDamage) = 0 then
   829                           if (Mask and EXPLNoDamage) = 0 then
   824                              begin
   830                              begin
   825                              inc(Gear^.Damage, dmg);
   831                              inc(Gear^.Damage, dmg);
   826                              if Gear^.Kind = gtHedgehog then
   832                              if Gear^.Kind = gtHedgehog then
   827                                 begin
       
   828                                 uStats.HedgehogDamaged(Gear, dmg);
       
   829                                 AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, Gear)
   833                                 AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, Gear)
   830                                 end
       
   831                              end;
   834                              end;
   832                           if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then
   835                           if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then
   833                              begin
   836                              begin
   834                              DeleteCI(Gear);
   837                              DeleteCI(Gear);
   835                              Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - int2hwFloat(X));
   838                              Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - int2hwFloat(X));
   866            gtHedgehog,
   869            gtHedgehog,
   867                gtMine,
   870                gtMine,
   868                gtCase,
   871                gtCase,
   869              gtTarget: begin
   872              gtTarget: begin
   870                        inc(t^.Damage, dmg);
   873                        inc(t^.Damage, dmg);
       
   874 
   871                        if t^.Kind = gtHedgehog then
   875                        if t^.Kind = gtHedgehog then
   872                           begin
       
   873                           AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, t);
   876                           AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, t);
   874                           uStats.HedgehogDamaged(t, dmg)
   877 
   875                           end;
       
   876                        DeleteCI(t);
   878                        DeleteCI(t);
   877                        t^.dX:= t^.dX + Gear^.dX * dmg * _0_01 + SignAs(cHHKick, Gear^.dX);
   879                        t^.dX:= t^.dX + Gear^.dX * dmg * _0_01 + SignAs(cHHKick, Gear^.dX);
   878                        t^.dY:= t^.dY + Gear^.dY * dmg * _0_01;
   880                        t^.dY:= t^.dY + Gear^.dY * dmg * _0_01;
   879                        t^.State:= t^.State or gstMoving;
   881                        t^.State:= t^.State or gstMoving;
   880                        t^.Active:= true;
   882                        t^.Active:= true;
   904            gtHedgehog,
   906            gtHedgehog,
   905                gtMine,
   907                gtMine,
   906              gtTarget,
   908              gtTarget,
   907                gtCase: begin
   909                gtCase: begin
   908                        inc(t^.ar[i]^.Damage, Damage);
   910                        inc(t^.ar[i]^.Damage, Damage);
       
   911 
   909                        if t^.ar[i]^.Kind = gtHedgehog then
   912                        if t^.ar[i]^.Kind = gtHedgehog then
   910                           begin
       
   911                           AddDamageTag(hwRound(t^.ar[i]^.X), hwRound(t^.ar[i]^.Y), Damage, t^.ar[i]);
   913                           AddDamageTag(hwRound(t^.ar[i]^.X), hwRound(t^.ar[i]^.Y), Damage, t^.ar[i]);
   912                           uStats.HedgehogDamaged(t^.ar[i], Damage)
   914 
   913                           end;
       
   914                        DeleteCI(t^.ar[i]);
   915                        DeleteCI(t^.ar[i]);
   915                        t^.ar[i]^.dX:= Ammo^.dX * Power * _0_01;
   916                        t^.ar[i]^.dX:= Ammo^.dX * Power * _0_01;
   916                        t^.ar[i]^.dY:= Ammo^.dY * Power * _0_01;
   917                        t^.ar[i]^.dY:= Ammo^.dY * Power * _0_01;
   917                        t^.ar[i]^.Active:= true;
   918                        t^.ar[i]^.Active:= true;
   918                        t^.ar[i]^.State:= t^.ar[i]^.State or gstMoving;
   919                        t^.ar[i]^.State:= t^.ar[i]^.State or gstMoving;