# HG changeset patch # User alfadur # Date 1634346407 -10800 # Node ID e48c3333c4048ae0023a0ad80988a4e9e4b96d6b # Parent 681db3039ad7c2a7f843972235dbb24f184b5983 make seduction work on sentries diff -r 681db3039ad7 -r e48c3333c404 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Sat Oct 16 03:35:48 2021 +0300 +++ b/hedgewars/uGearsHandlersMess.pas Sat Oct 16 04:06:47 2021 +0300 @@ -141,6 +141,7 @@ procedure doStepMinigunWork(Gear: PGear); procedure doStepMinigun(Gear: PGear); procedure doStepMinigunBullet(Gear: PGear); +procedure ResetSentryState(Gear: PGear; state, timer: LongInt); procedure doStepSentryDeploy(Gear: PGear); var @@ -4079,7 +4080,7 @@ //////////////////////////////////////////////////////////////////////////////// procedure doStepSeductionWork(Gear: PGear); var i: LongInt; - hogs: PGearArrayS; + hits: PGearArrayS; HHGear: PGear; begin AllInactive := false; @@ -4093,12 +4094,12 @@ exit; end; - hogs := GearsNear(Gear^.X, Gear^.Y, gtHedgehog, Gear^.Radius); - if hogs.size > 0 then - begin - for i:= 0 to hogs.size - 1 do - with hogs.ar^[i]^ do - if (hogs.ar^[i] <> CurrentHedgehog^.Gear) and (Hedgehog^.Effects[heFrozen] = 0) then + hits := GearsNear(Gear^.X, Gear^.Y, gtHedgehog, Gear^.Radius); + if hits.size > 0 then + begin + for i:= 0 to hits.size - 1 do + with hits.ar^[i]^ do + if (hits.ar^[i] <> CurrentHedgehog^.Gear) and (Hedgehog^.Effects[heFrozen] = 0) then begin if (WorldEdge <> weWrap) or (not (hwAbs(Gear^.X - X) > int2hwFloat(Gear^.Radius))) then dX:= _50 * cGravity * (Gear^.X - X) / _25 @@ -4112,6 +4113,19 @@ else if Hedgehog^.Effects[heFrozen] > 255 then Hedgehog^.Effects[heFrozen]:= 255 end ; + + hits := GearsNear(Gear^.X, Gear^.Y, gtSentry, Gear^.Radius); + if hits.size > 0 then + for i:= 0 to hits.size - 1 do + with hits.ar^[i]^ do + if (Gear^.Hedgehog <> nil) and (Hedgehog <> Gear^.Hedgehog) then + begin + dX := SignAs(_0, dX); + dY := -_0_15; + Hedgehog := Gear^.Hedgehog; + ResetSentryState(hits.ar^[i], 0, 10000); + end; + AfterAttack; DeleteGear(Gear); end;