# HG changeset patch # User alfadur # Date 1520621121 -3600 # Node ID 7040506c831fdd0a08aba0221aac309366f26825 # Parent 9655072d02867ed1c88a014f8eec5336f87ec4b6 Fix direction of dispensed bullet shells from shotgun/sniper/minigun diff -r 9655072d0286 -r 7040506c831f hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Fri Mar 09 19:40:49 2018 +0100 +++ b/hedgewars/uGearsHandlersMess.pas Fri Mar 09 19:45:21 2018 +0100 @@ -1138,10 +1138,24 @@ end end; +procedure CreateShellForGear(Gear: PGear; startFrame: Longword); +var + shell: PVisualGear; +begin + shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); + if shell <> nil then + begin + shell^.dX := gear^.dX.QWordValue / -17179869184; + if (gear^.dX.isNegative) then + shell^.dX := -shell^.dX; + shell^.dY := gear^.dY.QWordValue / -17179869184; + shell^.Frame := startFrame; + end; +end; + procedure doStepShotgunShot(Gear: PGear); var i: LongWord; - shell: PVisualGear; begin AllInactive := false; @@ -1151,13 +1165,7 @@ if Gear^.Timer = 0 then begin PlaySound(sndShotgunFire); - shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); - if shell <> nil then - begin - shell^.dX := gear^.dX.QWordValue / -17179869184; - shell^.dY := gear^.dY.QWordValue / -17179869184; - shell^.Frame := 0 - end; + CreateShellForGear(Gear, 0); Gear^.State := Gear^.State or gstAnimation end; exit @@ -1408,7 +1416,6 @@ procedure doStepSniperRifleShot(Gear: PGear); var HHGear: PGear; - shell: PVisualGear; begin HHGear := Gear^.Hedgehog^.Gear; @@ -1437,13 +1444,7 @@ if (HHGear^.Message and gmAttack) <> 0 then begin - shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); - if shell <> nil then - begin - shell^.dX := gear^.dX.QWordValue / -8589934592; - shell^.dY := gear^.dY.QWordValue / -8589934592; - shell^.Frame := 1 - end; + CreateShellForGear(Gear, 1); Gear^.State := Gear^.State or gstAnimation; Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5; Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5; @@ -6626,7 +6627,6 @@ //////////////////////////////////////////////////////////////////////////////// procedure doStepMinigunWork(Gear: PGear); var HHGear: PGear; - shell: PVisualGear; bullet: PGear; rx, ry: hwFloat; gX, gY: LongInt; @@ -6657,13 +6657,7 @@ bullet^.WDTimer := Gear^.WDTimer; Inc(Gear^.WDTimer); - shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); - if shell <> nil then - begin - shell^.dX := gear^.dX.QWordValue / -17179869184; - shell^.dY := gear^.dY.QWordValue / -17179869184; - shell^.Frame := 0 - end; + CreateShellForGear(Gear, Gear^.Tag and 1); end; if (Gear^.Timer = 0) or ((HHGear^.State and gstHHDriven) = 0) then