improve continous ripple generation.  Generate from leaves and vary intensity.
diff --git a/res/raw/fall.rs b/res/raw/fall.rs
index c08ed5a..c807417 100644
--- a/res/raw/fall.rs
+++ b/res/raw/fall.rs
@@ -44,7 +44,6 @@
     float y;
 };
 struct drop_s gDrops[10];
-int gNextDrop;
 int gMaxDrops;
 
 void init() {
@@ -57,7 +56,6 @@
         gDrops[ct].invSpread = 1 / gDrops[ct].spread;
         gDrops[ct].invSpread2 = gDrops[ct].invSpread * gDrops[ct].invSpread;
     }
-    gNextDrop = 0;
 }
 
 void initLeaves() {
@@ -85,13 +83,19 @@
 }
 
 void drop(int x, int y, float s) {
-    gDrops[gNextDrop].amp = s;
-    gDrops[gNextDrop].spread = 0.5f;
-    gDrops[gNextDrop].x = x;
-    gDrops[gNextDrop].y = State->meshHeight - y - 1;
-    gNextDrop++;
-    if (gNextDrop >= gMaxDrops)
-        gNextDrop = 0;
+    int ct;
+    int iMin = 0;
+    float minAmp = 10000.f;
+    for (ct = 0; ct < gMaxDrops; ct++) {
+        if (gDrops[ct].amp < minAmp) {
+            iMin = ct;
+            minAmp = gDrops[ct].amp;
+        }
+    }
+    gDrops[iMin].amp = s;
+    gDrops[iMin].spread = 0.5f;
+    gDrops[iMin].x = x;
+    gDrops[iMin].y = State->meshHeight - y - 1;
 }
 
 void generateRipples() {
@@ -177,8 +181,14 @@
     }
 }
 
-void drawLeaf(struct Leaves_s *leaf, int meshWidth, int meshHeight, float glWidth, float glHeight,
-        int rotate) {
+void genLeafDrop(struct Leaves_s *leaf, float amp) {
+    float nx = (leaf->x + State->glWidth * 0.5f) / State->glWidth;
+    float ny = (leaf->y + State->glHeight * 0.5f) / State->glHeight;
+    drop(nx * State->meshWidth, State->meshHeight - ny * State->meshHeight, amp);
+
+}
+
+void drawLeaf(struct Leaves_s *leaf) {
 
     float x = leaf->x;
     float y = leaf->y;
@@ -199,7 +209,7 @@
     if (a > 0.0f) {
         color(0.0f, 0.0f, 0.0f, 0.15f);
 
-        if (rotate) {
+        if (State->rotate) {
             matrixLoadRotate(matrix, 90.0f, 0.0f, 0.0f, 1.0f);
         } else {
             matrixLoadIdentity(matrix);
@@ -221,7 +231,7 @@
         color(1.0f, 1.0f, 1.0f, 1.0f);
     }
 
-    if (rotate) {
+    if (State->rotate) {
         matrixLoadRotate(matrix, 90.0f, 0.0f, 0.0f, 1.0f);
     } else {
         matrixLoadIdentity(matrix);
@@ -240,8 +250,9 @@
     if (a <= 0.0f) {
         float rippled = leaf->rippled;
         if (rippled < 0.0f) {
-            drop(((x + glWidth * 0.5f) / glWidth) * meshWidth,
-                 meshHeight - ((y + glHeight * 0.5f) / glHeight) * meshHeight, 1);
+            genLeafDrop(leaf, 1.5f);
+            //drop(((x + State->glWidth * 0.5f) / State->glWidth) * meshWidth,
+            //     meshHeight - ((y + State->glHeight * 0.5f) / State->glHeight) * meshHeight, 1);
             spin /= 4.0f;
             leaf->spin = spin;
             leaf->rippled = 1.0f;
@@ -257,12 +268,12 @@
         leaf->angle = r;
     }
 
-    if (-LEAF_SIZE * s + x > glWidth || LEAF_SIZE * s + x < -glWidth ||
-            LEAF_SIZE * s + y < -glHeight / 2.0f) {
+    if (-LEAF_SIZE * s + x > State->glWidth || LEAF_SIZE * s + x < -State->glWidth ||
+            LEAF_SIZE * s + y < -State->glHeight / 2.0f) {
 
         int sprite = randf(LEAVES_TEXTURES_COUNT);
-        leaf->x = randf2(-glWidth, glWidth);
-        leaf->y = randf2(-glHeight * 0.5f, glHeight * 0.5f);
+        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.25f;
         leaf->u1 = sprite / (float) LEAVES_TEXTURES_COUNT;
@@ -283,17 +294,10 @@
     color(1.0f, 1.0f, 1.0f, 1.0f);
 
     int leavesCount = State->leavesCount;
-    int width = State->meshWidth;
-    int height = State->meshHeight;
-    float glWidth = State->glWidth;
-    float glHeight = State->glHeight;
-    int rotate = State->rotate;
-
     struct Leaves_s *leaf = Leaves;
-
     int i = 0;
     for ( ; i < leavesCount; i += 1) {
-        drawLeaf(leaf, width, height, glWidth, glHeight, rotate);
+        drawLeaf(leaf);
         leaf += 1;
     }
 
@@ -388,20 +392,16 @@
     }
 
     int ct;
-    float amp = 0;
+    int add = 0;
     for (ct = 0; ct < gMaxDrops; ct++) {
-        amp += gDrops[ct].amp;
+        if (gDrops[ct].amp < 0.01f) {
+            add = 1;
+        }
     }
 
-    if (State->isPreview || (amp < 0.2f)) {
-        float x = randf(State->meshWidth);
-        float y = randf(State->meshHeight);
-
-        if (State->isPreview) {
-            drop(x, y, 1.f);
-        } else {
-            drop(x, y, 0.2f);
-        }
+    if (add) {
+        int i = (int)randf(State->leavesCount);
+        genLeafDrop(&Leaves[i], randf(0.3f) + 0.1f);
     }
 
     generateRipples();