# HG changeset patch # User alfadur # Date 1652140751 -10800 # Node ID 2839b68a37328a753d5647db878d6a599afc63c0 # Parent 78745063cf330b524ea671bfab3fd0fa3f364424 better sentry free fall behavior diff -r 78745063cf33 -r 2839b68a3732 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Tue May 10 00:19:52 2022 +0300 +++ b/hedgewars/uGearsHandlersMess.pas Tue May 10 02:59:11 2022 +0300 @@ -7245,6 +7245,7 @@ Sentry^.dY := -_0_25; jumpTime := _2 * Sentry^.dY / cGravity; Sentry^.dX := SignAs(int2hwFloat(offsetX - Sentry^.Radius) / jumpTime, Sentry^.dX); + Sentry^.State := Sentry^.State or gstHHJumping; MakeSentryJump := true; end; end; @@ -7397,6 +7398,7 @@ procedure doStepSentryLand(Gear: PGear); var HHGear: PGear; + land: Word; const sentry_Idle = 0; sentry_Walking = 1; sentry_Aiming = 2; @@ -7411,7 +7413,9 @@ if CheckSentryDestroyed(Gear, sentry_Reloading) then exit; - if Gear^.dY.isNegative or (TestCollisionYwithGear(Gear, 1) = 0) then + land := TestCollisionYwithGear(Gear, 1); + if Gear^.dY.isNegative or (land = 0) or + ((Gear^.dY.QWordValue > _0_01.QWordValue) and ((Gear^.State and gstHHJumping) = 0)) then begin DeleteCI(Gear); doStepFallingGear(Gear); @@ -7420,7 +7424,12 @@ exit; end else + begin AddCI(Gear); + Gear^.State := Gear^.State and (not gstHHJumping); + Gear^.dX := SignAs(_0, Gear^.dX); + Gear^.dY := SignAs(_0, Gear^.dY); + end; if Gear^.Timer > 0 then dec(Gear^.Timer); diff -r 78745063cf33 -r 2839b68a3732 hedgewars/uGearsList.pas --- a/hedgewars/uGearsList.pas Tue May 10 00:19:52 2022 +0300 +++ b/hedgewars/uGearsList.pas Tue May 10 02:59:11 2022 +0300 @@ -839,8 +839,8 @@ gtSentry: begin gear^.Radius:= cHHRadius; gear^.Health:= cSentryHealth; - gear^.Friction:= _0_93; - gear^.Elasticity:= _0_05; + gear^.Friction:= _0_999; + gear^.Elasticity:= _0_35; gear^.Density:= _3; gear^.Tag:= 0; gear^.Timer:= 1000; diff -r 78745063cf33 -r 2839b68a3732 hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Tue May 10 00:19:52 2022 +0300 +++ b/hedgewars/uGearsUtils.pas Tue May 10 02:59:11 2022 +0300 @@ -183,6 +183,8 @@ if (not GameOver) then Gear^.State:= (Gear^.State and (not gstWinner)); end; + if Gear^.Kind = gtSentry then + Gear^.State:= Gear^.State and (not gstHHJumping); Gear^.Active:= true; if Gear^.Kind <> gtFlame then FollowGear:= Gear; if Gear^.Kind = gtAirMine then