# HG changeset patch # User sheepluva # Date 1455589163 -3600 # Node ID 881231c1ba46f1d02092a59026df895f707542e4 # Parent 893722a2a1f9b5f9e771e2de04d9ff8ffe5d82b2 disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd) diff -r 893722a2a1f9 -r 881231c1ba46 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Mon Feb 15 23:37:48 2016 +0100 +++ b/hedgewars/uGearsHandlersMess.pas Tue Feb 16 03:19:23 2016 +0100 @@ -1337,6 +1337,11 @@ procedure doStepDEagleShot(Gear: PGear); begin + Gear^.Data:= nil; + // remember who fired this + if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then + Gear^.Data:= Pointer(Gear^.Hedgehog^.Gear); + PlaySound(sndGun); // add 3 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just plain old weird angles Gear^.X := Gear^.X + Gear^.dX * 3; @@ -1349,6 +1354,7 @@ HHGear: PGear; shell: PVisualGear; begin + cArtillery := true; HHGear := Gear^.Hedgehog^.Gear; @@ -1358,6 +1364,9 @@ exit end; + // remember who fired this + Gear^.Data:= Pointer(Gear^.Hedgehog^.Gear); + HHGear^.State := HHGear^.State or gstNotKickable; HedgehogChAngle(HHGear); if not cLaserSighting then @@ -4357,9 +4366,13 @@ continue; end; - // draw bullet trail if isbullet then + begin + // draw bullet trail spawnBulletTrail(iterator); + // the bullet can now hurt the hog that fired it + iterator^.Data:= nil; + end; // calc gear offset in portal vector direction ox := (iterator^.X - Gear^.X); diff -r 893722a2a1f9 -r 881231c1ba46 hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Mon Feb 15 23:37:48 2016 +0100 +++ b/hedgewars/uGearsUtils.pas Tue Feb 16 03:19:23 2016 +0100 @@ -1170,6 +1170,8 @@ begin dec(i); Gear:= t^.ar[i]; + if (Ammo^.Data <> nil) and (Ammo^.Kind in [gtShotgunShot, gtDEagleShot, gtSniperRifleShot, gtSineGunShot]) and (PGear(Ammo^.Data) = Gear) then + continue; if ((Ammo^.Kind = gtFlame) or (Ammo^.Kind = gtBlowTorch)) and (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.Effects[heFrozen] > 255) then Gear^.Hedgehog^.Effects[heFrozen]:= max(255,Gear^.Hedgehog^.Effects[heFrozen]-10000); @@ -1510,6 +1512,9 @@ if (hwRound(Gear^.X) < LongInt(leftX)) or (hwRound(Gear^.X) > LongInt(rightX)) then begin + // bullets can now hurt the hog that fired them + if (WorldEdge <> weSea) and (Gear^.Kind in [gtShotgunShot, gtDEagleShot, gtSniperRifleShot, gtSineGunShot]) then + Gear^.Data:= nil; if WorldEdge = weWrap then begin if (hwRound(Gear^.X) < LongInt(leftX)) then