diff -r 8eaf3d7c54b2 -r b6f3e56fb100 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Wed May 06 22:35:31 2009 +0000 +++ b/hedgewars/GSHandlers.inc Thu May 07 02:04:07 2009 +0000 @@ -471,7 +471,7 @@ if Gear^.Ammo^.AmmoType = amDEagle then AmmoShove(Gear, 7, 20) else - AmmoShove(Gear, Gear^.Timer*2, 20); + AmmoShove(Gear, Gear^.Timer, 20); dec(i) until (i = 0) or (Gear^.Damage > Gear^.Health); if Gear^.Damage > 0 then @@ -484,7 +484,12 @@ if (Gear^.Health <= 0) or (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0) or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then + begin + if (GameFlags and gfLaserSight) = 0 then cLaserSighting:= false; + if (Gear^.Ammo^.NumPerTurn < CurrentHedgehog^.AttacksNum) and + ((GameFlags and gfArtillery) = 0) then cArtillery:= false; Gear^.doStep:= @doStepShotIdle + end; end; procedure doStepDEagleShot(Gear: PGear); @@ -494,27 +499,30 @@ end; procedure doStepSniperRifleShot(Gear: PGear); +var HHGear: PGear; begin cArtillery:= true; +HHGear:=PHedgehog(Gear^.Hedgehog)^.Gear; +HHGear^.State:= HHGear^.State or gstNotKickable; if not cLaserSighting then // game doesn't have default laser sight. turn it on and give them a chance to aim begin cLaserSighting:= true; - DeleteGear(Gear); - AfterAttack; - exit + HHGear^.Message:= 0; + dec(HHGear^.Angle,32) + end; + +if (HHGear^.Message and gm_Attack) <> 0 then + begin + Gear^.State:= Gear^.State or gstAnimation; + Gear^.dX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5; + Gear^.dY:= -AngleCos(HHGear^.Angle) * _0_5; + PlaySound(sndGun, false, nil); + Gear^.doStep:= @doStepBulletWork; end else - inc(CurrentHedgehog^.AttacksNum); // burn up a shot, Tiy wants only a single shot - -if (PHedgehog(Gear^.Hedgehog)^.Gear^.Message and gm_Attack) <> 0 then - begin - Gear^.State:= Gear^.State or gstAnimation; - PlaySound(sndGun, false, nil); - Gear^.doStep:= @doStepBulletWork - end; - -if (Gear^.Ammo^.NumPerTurn < CurrentHedgehog^.AttacksNum) and - ((GameFlags and gfArtillery) = 0) then cArtillery:= false; + if (GameTicks mod 32) = 0 then + if (GameTicks mod 4096) < 2048 then inc(HHGear^.Angle) + else dec(HHGear^.Angle); end;