hedgewars/uVisualGears.pas
changeset 5562 8056d82b4d23
parent 5491 3a82724de759
child 5563 fc73b6e941f7
--- a/hedgewars/uVisualGears.pas	Sun Aug 14 13:45:37 2011 -0400
+++ b/hedgewars/uVisualGears.pas	Sun Aug 14 16:59:55 2011 -0400
@@ -109,7 +109,8 @@
             @doStepLineTrail,
             @doStepBulletHit,
             @doStepCircle,
-            @doStepSmoothWindBar
+            @doStepSmoothWindBar,
+            @doStepStraightShot
         );
 
 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType; State: LongWord = 0; Critical: Boolean = false): PVisualGear;
@@ -118,12 +119,9 @@
     t: Longword;
     sp: real;
 begin
-if (GameType = gmtSave) or (fastUntilLag and (GameType = gmtNet)) then // we are scrolling now
-    if (Kind <> vgtCloud) and not Critical then
-        begin
-        AddVisualGear:= nil;
-        exit
-        end;
+AddVisualGear:= nil;
+if ((GameType = gmtSave) or (fastUntilLag and (GameType = gmtNet))) and // we are scrolling now
+   ((Kind <> vgtCloud) and not Critical) then exit;
 
 if ((cReducedQuality and rqAntiBoom) <> 0) and
    not Critical and
@@ -136,11 +134,7 @@
     vgtSmokeTrace,
     vgtEvilTrace,
     vgtNote,
-    vgtSmoothWindBar]) then
-    begin
-      AddVisualGear:= nil;
-      exit
-    end;
+    vgtSmoothWindBar]) then exit;
 
 inc(VGCounter);
 New(gear);
@@ -331,6 +325,15 @@
                 Angle := 0;
                 end;
 vgtSmoothWindBar: Tag:= hwRound(cWindSpeed * 72 / cMaxWindSpeed);
+ vgtStraightShot: begin
+                dx:= 0.001 * (random(200));
+                dy:= 0.001 * (random(200));
+                if random(2) = 0 then dx := -dx;
+                if random(2) = 0 then dy := -dy;
+                Frame:= 0;
+                FrameTicks:= random(750) + 1000;
+                Sprite:= sprSnowDust;
+                end;
         end;
 
 if State <> 0 then gear^.State:= State;
@@ -485,6 +488,7 @@
             vgtSmallDamageTag: DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex);
             vgtHealthTag: if Gear^.Tex <> nil then DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex);
             vgtHealth: DrawSprite(sprHealth, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, 0);
+            vgtStraightShot: DrawRotatedF(Gear^.Sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
         end;
         if (cReducedQuality and rqAntiBoom) = 0 then
             case Gear^.Kind of