diff --git a/player/index.html b/player/index.html
index 2a56c09..aa57f62 100644
--- a/player/index.html
+++ b/player/index.html
@@ -68,6 +68,7 @@
         }
 
     </style>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.5/dat.gui.min.js"></script>
     <!-- build:js lottie.js -->
     <script src="js/main.js"></script>
     <script src="js/utils/common.js"></script>
@@ -243,6 +244,12 @@
     }, 1000);
 
 
+    const global_options = {
+      spring_force: 0.5
+    }
+    var gui = new dat.GUI()
+
+    gui.add(global_options, 'spring_force', 0, 1).step(.01)
 
 
     /*var elem = document.getElementById('lottie2');
diff --git a/player/js/elements/webglElements/effects/WebGLPuppetPin.js b/player/js/elements/webglElements/effects/WebGLPuppetPin.js
index dd85416..c09ba16 100644
--- a/player/js/elements/webglElements/effects/WebGLPuppetPin.js
+++ b/player/js/elements/webglElements/effects/WebGLPuppetPin.js
@@ -98,42 +98,50 @@
     gl.bufferData(gl.ARRAY_BUFFER, this.texture_positions, gl.STATIC_DRAW);
 }
 
+function WPuppetPinParticle(x, y) {
+    this.x = x;
+    this.y = y;
+}
+
+WPuppetPinParticle.prototype.addForce = function(x, y) {
+    this.x += x;
+    this.y += y;
+}
+
 WPuppetPinEffect.prototype.renderFrame = function(forceRender, buffer){
     var effectElements = this.filterManager.effectElements;
     var gl = this.gl;
     this.gl.useProgram(this.program);
-    
+
     //POSITION
+    var particles = []
     var positions = [];
     var i, j, len = 10, jlen = 10;
     for(j = 0; j < jlen; j += 1) {
         for(i = 0; i < len; i += 1) {
-            /*positions.push(i/10);
-            positions.push(j/10);
-            positions.push((i+1)/10);
-            positions.push(j/10);
-            positions.push(i/10);
-            positions.push((j+1)/10);
-            positions.push((i+1)/10);
-            positions.push(j/10);
-            positions.push((i+1)/10);
-            positions.push((j+1)/10);
-            positions.push(i/10);
-            positions.push((j+1)/10);*/
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
-            positions.push(Math.random());
+            particles.push(new WPuppetPinParticle(i / 10, j / 10));
+            particles.push(new WPuppetPinParticle((i + 1) / 10, j / 10));
+            particles.push(new WPuppetPinParticle(i / 10, (j + 1) / 10));
+            particles.push(new WPuppetPinParticle((i + 1) / 10, j / 10));
+            particles.push(new WPuppetPinParticle((i + 1) / 10, (j + 1) / 10));
+            particles.push(new WPuppetPinParticle(i / 10, (j + 1) / 10));
+
+            /*particles.push(new WPuppetPinParticle(Math.random(), Math.random()));
+            particles.push(new WPuppetPinParticle(Math.random(), Math.random()));
+            particles.push(new WPuppetPinParticle(Math.random(), Math.random()));
+            particles.push(new WPuppetPinParticle(Math.random(), Math.random()));
+            particles.push(new WPuppetPinParticle(Math.random(), Math.random()));
+            particles.push(new WPuppetPinParticle(Math.random(), Math.random()));*/
+            
         }   
     }
+    for(i = 0; i < particles.length; i += 1) {
+        if(i > 40 && i < 70) {
+            particles[i].addForce(0.01,0.01);
+        }
+        positions.push(particles[i].x);
+        positions.push(particles[i].y);
+    }
     this.positions = new Float32Array(positions);
     this.positionBuffer = gl.createBuffer();
     gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);
