diff --git a/libs/rs/java/Fountain/res/raw/fountain.c b/libs/rs/java/Fountain/res/raw/fountain.c
index cee6e22..7bf5033 100644
--- a/libs/rs/java/Fountain/res/raw/fountain.c
+++ b/libs/rs/java/Fountain/res/raw/fountain.c
@@ -7,10 +7,10 @@
     int newPart;
     int drawCount;
     int dx, dy, idx;
-    int partPtr;
-    int vertPtr;
     int posx,posy;
     int c;
+    int srcIdx;
+    int dstIdx;
 
     count = loadI32(con, 0, 1);
     touch = loadI32(con, 0, 2);
@@ -53,36 +53,32 @@
         storeI32(con, 2, 0, newPart);
     }
 
-    // Emulate intrinsic perf...
-    partPtr = loadVp(con, 2, 4);
-    vertPtr = loadVp(con, 1, 0);
-
     drawCount = 0;
     for (ct=0; ct < count; ct++) {
-        //int srcIdx = ct * 5 + 1;
-        //int dstIdx = ct * 3 * 3;
+        srcIdx = ct * 5 + 1;
 
-        dx = * (int* )(partPtr + 0); //loadEnvI32(con, 2, srcIdx);
-        dy = * (int* )(partPtr + 4); //loadEnvI32(con, 2, srcIdx + 1);
-        life = * (int* )(partPtr + 8); //loadEnvI32(con, 2, srcIdx + 2);
-        posx = * (int* )(partPtr + 12); //loadEnvI32(con, 2, srcIdx + 3);
-        posy = * (int* )(partPtr + 16); //loadEnvI32(con, 2, srcIdx + 4);
+        dx = loadI32(con, 2, srcIdx);
+        dy = loadI32(con, 2, srcIdx + 1);
+        life = loadI32(con, 2, srcIdx + 2);
+        posx = loadI32(con, 2, srcIdx + 3);
+        posy = loadI32(con, 2, srcIdx + 4);
 
         if (life) {
             if (posy < (480 << 16)) {
+                dstIdx = ct * 3 * 3;
                 c = 0xffafcf | ((life >> lifeShift) << 24);
 
-                * (int* )(vertPtr) = c; //storeEnvU32(con, 1, dstIdx, c);
-                * (int* )(vertPtr + 4) = posx; //storeEnvI32(con, 1, dstIdx + 1, posx);
-                * (int* )(vertPtr + 8) = posy; //storeEnvI32(con, 1, dstIdx + 2, posy);
+                storeU32(con, 1, dstIdx, c);
+                storeI32(con, 1, dstIdx + 1, posx);
+                storeI32(con, 1, dstIdx + 2, posy);
 
-                * (int* )(vertPtr + 12) = c; //storeEnvU32(con, 1, dstIdx + 3, c);
-                * (int* )(vertPtr + 16) = posx + 0x10000; //storeEnvI32(con, 1, dstIdx + 4, posx + 0x10000);
-                * (int* )(vertPtr + 20) = posy + dy * 4; //storeEnvI32(con, 1, dstIdx + 5, posy);
+                storeU32(con, 1, dstIdx + 3, c);
+                storeI32(con, 1, dstIdx + 4, posx + 0x10000);
+                storeI32(con, 1, dstIdx + 5, posy + dy * 4);
 
-                * (int* )(vertPtr + 24) = c; //storeEnvU32(con, 1, dstIdx + 6, c);
-                * (int* )(vertPtr + 28) = posx - 0x10000; //storeEnvI32(con, 1, dstIdx + 7, posx + 0x0800);
-                * (int* )(vertPtr + 32) = posy + dy * 4; //storeEnvI32(con, 1, dstIdx + 8, posy + 0x10000);
+                storeU32(con, 1, dstIdx + 6, c);
+                storeI32(con, 1, dstIdx + 7, posx - 0x10000);
+                storeI32(con, 1, dstIdx + 8, posy + dy * 4);
 
                 vertPtr = vertPtr + 36;
                 drawCount ++;
@@ -97,14 +93,12 @@
             dy = dy + 0x400;
             life --;
 
-            * (int* )(partPtr + 0) = dx; //storeEnvI32(con, 2, srcIdx, dx);
-            * (int* )(partPtr + 4) = dy; //storeEnvI32(con, 2, srcIdx + 1, dy);
-            * (int* )(partPtr + 8) = life; //storeEnvI32(con, 2, srcIdx + 2, life);
-            * (int* )(partPtr + 12) = posx; //storeEnvI32(con, 2, srcIdx + 3, posx);
-            * (int* )(partPtr + 16) = posy; //storeEnvI32(con, 2, srcIdx + 4, posy);
+            //storeI32(con, 2, srcIdx, dx);
+            storeI32(con, 2, srcIdx + 1, dy);
+            storeI32(con, 2, srcIdx + 2, life);
+            storeI32(con, 2, srcIdx + 3, posx);
+            storeI32(con, 2, srcIdx + 4, posy);
         }
-
-        partPtr = partPtr + 20;
     }
 
     drawTriangleArray(con, loadI32(con, 0, 5), drawCount);
