Switch to dt from frames for annimation.
diff --git a/res/raw/fall.rs b/res/raw/fall.rs
index 8a89d21..8dee7dc 100644
--- a/res/raw/fall.rs
+++ b/res/raw/fall.rs
@@ -22,6 +22,8 @@
 
 float skyOffsetX;
 float skyOffsetY;
+float g_DT;
+int g_LastTime;
 
 struct vert_s {
     float x;
@@ -75,14 +77,14 @@
         leaf->u2 = (sprite + 1) / (float) LEAVES_TEXTURES_COUNT;
         leaf->altitude = -1.0f;
         leaf->rippled = 1.0f;
-        leaf->deltaX = randf2(-0.02f, 0.02f) / 60.0f;
-        leaf->deltaY = -0.08f * randf2(0.9f, 1.1f) / 60.0f;
+        leaf->deltaX = randf2(-0.02f, 0.02f) / 2.0f;
+        leaf->deltaY = -0.08f * randf2(0.9f, 1.1f) / 2.0f;
         leaf++;
     }
 }
 
 void updateDrop(int ct) {
-    gDrops[ct].spread += 1;
+    gDrops[ct].spread += 30.f * g_DT;
     gDrops[ct].spread2 = gDrops[ct].spread * gDrops[ct].spread;
     gDrops[ct].invSpread = 1 / gDrops[ct].spread;
     gDrops[ct].invSpread2 = gDrops[ct].invSpread * gDrops[ct].invSpread;
@@ -250,12 +252,12 @@
             leaf->spin = spin;
             leaf->rippled = 1.0f;
         }
-        leaf->x = x + leaf->deltaX;
-        leaf->y = y + leaf->deltaY;
+        leaf->x = x + leaf->deltaX * g_DT;
+        leaf->y = y + leaf->deltaY * g_DT;
         r += spin;
         leaf->angle = r;
     } else {
-        a -= 0.006f;
+        a -= 0.15f * g_DT;
         leaf->altitude = a;
         r += spin * 2.0f;
         leaf->angle = r;
@@ -267,15 +269,15 @@
         int sprite = randf(LEAVES_TEXTURES_COUNT);
         leaf->x = randf2(-State->glWidth, State->glWidth);
         leaf->y = randf2(-State->glHeight * 0.5f, State->glHeight * 0.5f);
-        
+
         leaf->scale = randf2(0.4f, 0.5f);
         leaf->spin = degf(randf2(-0.02f, 0.02f)) * 0.35f;
         leaf->u1 = sprite / (float) LEAVES_TEXTURES_COUNT;
         leaf->u2 = (sprite + 1) / (float) LEAVES_TEXTURES_COUNT;
         leaf->altitude = 0.7f;
         leaf->rippled = -1.0f;
-        leaf->deltaX = randf2(-0.02f, 0.02f) / 60.0f;
-        leaf->deltaY = -0.08f * randf2(0.9f, 1.1f) / 60.0f;
+        leaf->deltaX = randf2(-0.02f, 0.02f) / 2.0f;
+        leaf->deltaY = -0.08f * randf2(0.9f, 1.1f) / 2.0f;
     }
 }
 
@@ -344,6 +346,13 @@
 */
 
 int main(int index) {
+    // Compute dt in seconds.
+    int newTime = uptimeMillis();
+    g_DT = (newTime - g_LastTime) / 1000.f;
+    g_LastTime = newTime;
+    g_DT = minf(g_DT, 0.2f);
+
+
     if (Drop->dropX != -1) {
         drop(Drop->dropX, Drop->dropY, 2);
         Drop->dropX = -1;