hedgewars/uVisualGearsHandlers.pas
branchqmlfrontend
changeset 10748 dc587913987c
parent 10625 125e120165aa
child 10731 bc359abe0484
--- a/hedgewars/uVisualGearsHandlers.pas	Thu Dec 18 00:03:53 2014 +0300
+++ b/hedgewars/uVisualGearsHandlers.pas	Sat Jan 03 23:46:26 2015 +0300
@@ -80,32 +80,41 @@
 procedure doStepFlake(Gear: PVisualGear; Steps: Longword);
 var sign: real;
     moved: boolean;
+    vfc, vft: LongWord;
 begin
 if vobCount = 0 then exit;
 
 sign:= 1;
 with Gear^ do
     begin
-    inc(FrameTicks, Steps);
-    if not SuddenDeathDmg and (FrameTicks > vobFrameTicks) then
+
+    X:= X + (cWindSpeedf * 400 + dX + tdX) * Steps * Gear^.Scale;
+
+    if SuddenDeathDmg then
         begin
-        dec(FrameTicks, vobFrameTicks);
-        inc(Frame);
-        if Frame = vobFramesCount then
-            Frame:= 0
+        Y:= Y + (dY + tdY + cGravityf * vobSDFallSpeed) * Steps * Gear^.Scale;
+        vfc:= vobSDFramesCount;
+        vft:= vobSDFrameTicks;
         end
-    else if SuddenDeathDmg and (FrameTicks > vobSDFrameTicks) then
+    else
         begin
-        dec(FrameTicks, vobSDFrameTicks);
-        inc(Frame);
-        if Frame = vobSDFramesCount then
-            Frame:= 0
+        Y:= Y + (dY + tdY + cGravityf * vobFallSpeed) * Steps * Gear^.Scale;
+        vfc:= vobFramesCount;
+        vft:= vobFrameTicks;
         end;
-    X:= X + (cWindSpeedf * 400 + dX + tdX) * Steps * Gear^.Scale;
-    if SuddenDeathDmg then
-        Y:= Y + (dY + tdY + cGravityf * vobSDFallSpeed) * Steps * Gear^.Scale
-    else
-        Y:= Y + (dY + tdY + cGravityf * vobFallSpeed) * Steps * Gear^.Scale;
+
+    if vft > 0 then
+        begin
+        inc(FrameTicks, Steps);
+        if FrameTicks > vft then
+            begin
+            dec(FrameTicks, vft);
+            inc(Frame);
+            if Frame = vfc then
+                Frame:= 0
+            end;
+        end;
+
     Angle:= Angle + dAngle * Steps;
     if Angle > 360 then
         Angle:= Angle - 360