Update fountain to use structures.
diff --git a/libs/rs/java/Fountain/res/raw/fountain.c b/libs/rs/java/Fountain/res/raw/fountain.c
index 8c1cad4..99f4048 100644
--- a/libs/rs/java/Fountain/res/raw/fountain.c
+++ b/libs/rs/java/Fountain/res/raw/fountain.c
@@ -4,45 +4,44 @@
 #pragma stateFragment(default)
 #pragma stateFragmentStore(default)
 
+struct PartStruct {float dx; float dy; float x; float y; int c;};
+int newPart = 0;
+
 int main(int launchID) {
     int ct;
     int count = Control_count - 1;
     int rate = Control_rate;
-    float *dataF = loadArrayF(1, 0);
     float height = getHeight();
+    struct PartStruct * p = (struct PartStruct *)loadArrayF(1, 0);
 
     if (rate) {
-        int *dataI = loadArrayI32(1, 0);
         float rMax = ((float)rate) * 0.005f;
         int x = Control_x;
         int y = Control_y;
-        int newPart = loadI32(1, count * 5);
         int c = colorFloatRGBAtoUNorm8(Control_r, Control_g, Control_b, 0.99f);
 
         while (rate--) {
-            int idx = newPart * 5;
-            vec2Rand(dataF + idx, rMax);
-            dataF[idx + 2] = x;
-            dataF[idx + 3] = y;
-            dataI[idx + 4] = c;
+            vec2Rand((float *)(p + newPart), rMax);
+            p[newPart].x = x;
+            p[newPart].y = y;
+            p[newPart].c = c;
             newPart++;
             if (newPart >= count) {
                 newPart = 0;
             }
         }
-        storeI32(1, count * 5, newPart);
     }
 
     for (ct=0; ct < count; ct++) {
-        float dy = dataF[1] + 0.15f;
-        float posy = dataF[3] + dy;
+        float dy = p->dy + 0.15f;
+        float posy = p->y + dy;
         if ((posy > height) && (dy > 0)) {
             dy *= -0.3f;
         }
-        dataF[1] = dy;
-        dataF[2] += dataF[0];
-        dataF[3] = posy;
-        dataF += 5;
+        p->dy = dy;
+        p->x += p->dx;
+        p->y = posy;
+        p++;
     }
 
     uploadToBufferObject(NAMED_PartBuffer);