diff --git a/harkka3/samson/assets/sprites/penis-barrel.png b/harkka3/samson/assets/sprites/penis-barrel.png
new file mode 100644
index 0000000000000000000000000000000000000000..62821ed02f176117edde573ecace68066ea2869a
Binary files /dev/null and b/harkka3/samson/assets/sprites/penis-barrel.png differ
diff --git a/harkka3/samson/assets/sprites/penis-cannon-base.png b/harkka3/samson/assets/sprites/penis-cannon-base.png
new file mode 100644
index 0000000000000000000000000000000000000000..060e2c009b9b552c2de7e09dfef8e154e8c66ea9
Binary files /dev/null and b/harkka3/samson/assets/sprites/penis-cannon-base.png differ
diff --git a/harkka3/samson/assets/sprites/sperm.png b/harkka3/samson/assets/sprites/sperm.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9d949546f74cbe7949d558339a83a4982314463
Binary files /dev/null and b/harkka3/samson/assets/sprites/sperm.png differ
diff --git a/harkka3/samson/state2.js b/harkka3/samson/state2.js
index c20aa82190aed6251675118cfaeeaf3cb3e366fb..99d81bd42e54ce9856724cac6e057abb0978f9db 100644
--- a/harkka3/samson/state2.js
+++ b/harkka3/samson/state2.js
@@ -1,9 +1,44 @@
 demo.state2 = function(){};
+var barrel, bullets, velocity = 1000;
+
 demo.state2.prototype = {
-    preload: function(){},
+    preload: function(){
+        game.load.image('base', 'assets/sprites/penis-cannon-base.png');
+        game.load.image('barrel', 'assets/sprites/penis-barrel.png');
+        game.load.image('bullet', 'assets/sprites/sperm.png');
+    },
     create: function(){
         game.stage.backgroundColor = '#0066ff';
         addChangeStateEventListeners();
+
+        var base = game.add.sprite(centerX, centerY, 'base');
+        base.anchor.setTo(0.5);
+        base.scale.setTo(0.4);
+
+        barrel = game.add.sprite(centerX, centerY, 'barrel');
+        barrel.anchor.setTo(0.5, 1);
+        barrel.scale.setTo(0.5);
+
+        bullets = game.add.group();
+        bullets.enableBody = true;
+        bullets.physicsBodyType = Phaser.Physics.ARCADE;
+        bullets.createMultiple(50, 'bullet');
+
+        bullets.setAll('checkWorldBounds', true);
+        bullets.setAll('outOfBoundsKill', true);
+    },
+    update: function(){
+        barrel.rotation = game.physics.arcade.angleToPointer(barrel);
+        if(game.input.activePointer.isDown) {
+            this.fire();
+        }
     },
-    update: function(){}
+    fire: function() {
+        console.log('firing');
+        var bullet = bullets.getFirstDead();
+        bullet.reset(barrel.x, barrel.y);
+
+        game.physics.arcade.moveToPointer(bullet, velocity);
+        bullet.rotation = game.physics.arcade.angleToPointer(bullet);
+    }
 }
\ No newline at end of file