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