@Capn_Andy @zanytomato augh that sucks ;_; I send many <3 <3 (Today)

@Capn_Andy uhhh what! Are you okay? :o (Today)

@crypticsea @raiganburns gearing up for the humble A to Z bundle (Yesterday)

@Chris_Rock @mwegner true but that means telling myself I CANT have sushi until I do something which is nearly impossible... (Yesterday)

@mwegner opening packs outside of drafting is for chumps, but I'm flattered that you think I have such discipline. (Yesterday)

@raiganburns @crypticsea I think I'm already on Game C of procrastination though... HELP hahah (Yesterday)

@FourbitFriday I like where your head's at. I'm promoting you to lead vice president of sales and vice marketing. (Yesterday)

@FourbitFriday no we're in the rocket ship not in the rocket. (Yesterday)

@FourbitFriday yes each follower will draw a few pixels crowd sourcing. this is the future. we're on the ground floor of a rocket ship. (Yesterday)

@FourbitFriday do you believe in omens? t.co/Y00Tz3wSEZ (Yesterday)

@FourbitFriday fine you do it (Yesterday)

@fastramdesign I WISH I could just montage away so many things (Yesterday)

My procrastination of finishing Super Sky Sisters is out of control. All I have to do is animations and I just... can't... do it... AUGGHgh (Yesterday)

Whooa this talk is awesome especially if you like makin' games and other things t.co/ycioNhahQf (2 days ago)

@kirilllosev I didnt record it ;_; but maybe I can do some sort of stream or youtube video of it. (2 days ago)

@MattThorson nooooo but I do want to do another version of it as just a screencast. Maybe I can do a twitch stream. (2 days ago)

Got to talk about video game explosions in front of like 40 people tonight! Was a lot of fun ;3 (and hopefully not too confusing) (2 days ago)

@phubans Phubans, how can I get in on the ground floor of this rocket ship? (2 days ago)

RT @djcoreynolan: @kylepulver pornegranate (3 days ago)

RT @amora_b: @LuhPehba @kylepulver t.co/uM1O421QXe (3 days ago)

posts filed under: general

2015 - 5 - 28 / 2:48 am / general

Quick Explosion Stuff

Quick Explosion Stuff

Last night I had the opportunity to talk about explosions in front of a group of game developers. I ended up doing a live demo of making an explosion effect from scratch. Here's what I ended up with after about 45 minutes:


Not my best work but not bad for having to come up with something on the fly in front of a bunch of people. I ended up using Photoshop for animations, ShoeBox to spit out sprite sheets, and Otter to implement the effects.


One of the fun things of the presentation was adding suggestions from the audience which included spawning more explosions from the first explosion. This is why the whole screen briefly fills up with explosions and then calms down again. It uses a quick recursion to make the explosions chill out after a couple of booms.


I had a lot of fun doing this and I want to turn it into some kind of screen cast or stream. I didn't end up recording it since I didn't want to really complicate the set up at the last minute. Running a live demo is already scary enough.

The full source code is available here. The assets needed are uploaded here. If I do a more full version of this talk I'll be sure to post it here!


2015 - 5 - 16 / 4:14 pm / general

Dev Log: Procrastination

Dev Log: Procrastination

Super Sky Sisters is almost done, but I'm having a lot of trouble actually bringing it across the finish line.

The very last thing to do on the game is animations and this is something that I struggle a lot with usually. Animation is probably my weakest skill amongst my game development related talents, and I usually save it for the very end of the project if I can help it. Offspring Fling had almost no animations until I was about 95% done with the game... I think the entire game was totally playable start to finish with all of the secret content and everything before I did a single animation on any of the enemies.

Since I'm not that good at animations I usually get very flustered when trying to work on them. I constantly do not produce results that are good enough for my own taste, which leads to me being very discouraged, which leads to me not liking to do animations, which leads to me procrastinating on doing animations even when it's the last thing to do in the project.

I should probably stop making excuses and just do it because that's the only way I'll be able to get this game done! But first.. I think I'll go work on sounds for a little while.

No Comments

2015 - 5 - 5 / 4:03 pm / general

Dev Log: Solo Mode Controls

Dev Log: Solo Mode Controls

Super Sky Sisters has a solo mode! But it's not for the faint of heart. It's going to be pretty tough controlling both of the sisters at the same time.


Yeah, that looks pretty awful, but is probably the one of the easiest ways I can explain the controls before things get crazy. The game wasn't really designed for solo mode so I hope that most people play co-op, but I understand that not everyone has the opportunity to do so and probably wants to just blow up stuff on their own.

It is actually pretty playable in solo mode until you end up crossing player 2 with player 1. Then your brain melts because the sister on the left is controlled with the joystick on the right of your controller and vice versa, but if you can manage to overcome that madness then it should be a pretty fun way to play the game.

No Comments

2015 - 4 - 30 / 6:03 pm / general

Dev Log: Options Menu

Dev Log: Options Menu

As I totally procrastinate on the final art tasks for Super Sky Sisters I went over the options menu again really quick to add some cool polish. In the options menu the player can configure the sound and music volumes, the quality of the graphics, the hud style, and even reassign all of their keyboard controls.


I swear this game is almost done!

1 Comment

2015 - 4 - 30 / 12:51 pm / general

Doodle Post


1 Comment

2015 - 4 - 29 / 5:14 pm / general

Otter Surface Example

Otter Surface Example

Just a quick post going over how I usually use Surfaces in Otter. A surface is basically a render texture, or render target. The idea of calling it a surface mostly comes from Game Maker.

By default Otter will render all of the graphics to the main surface. However you can make your own surfaces and use them in various ways. The main point of this quick example is to show how to separate HUD elements and gameplay onto different surfaces. The big advantage of doing this is you can now freely rotate and zoom the camera and the HUD will be unaffected.

Alright let's check out the codes!

class Program {
static void Main(string[] args) {
// Create a new game to play.
var game = new Game();

// Set the scroll of the surfaces to 0 so they never scroll on the camera.
Global.SurfaceGameplay.Scroll = 0;
Global.SurfaceHud.Scroll = 0;

// Start the game with a new GameScene.
game.Start(new GameScene(1000, 1000));


class GridBackground : Entity {
public GridBackground() : base() {
Layer = 10;
Surface = Global.SurfaceGameplay;

public override void Added() {

// Just render a simple grid background so when the camera scrolls we can see it.
AddGraphic(new Grid(Scene.Width, Scene.Height, 40, 40, Color.Cyan));
Graphic.Alpha = 0.4f;

class Player : Entity {
public Player(float x, float y) : base(x, y) {
// Add a basic red box for the graphic.
AddGraphic(Image.CreateRectangle(20, 20, Color.Red));

// Assign this entity to render to Global.SurfaceGameplay instead of the default game surface.
Surface = Global.SurfaceGameplay;

// Set up a collider for movement.
var collider = AddCollider(new BoxCollider(20, 20));

// Set up the rest of the movement stuff.
var axis = AddComponent(Axis.CreateWASD());
var movement = AddComponent(new BasicMovement(400, 400, 30));
movement.Axis = axis;
movement.Collider = collider;

class PlayerHud : Entity {
public PlayerHud() : base() {
// Basic hud test with just some text.
AddGraphic(new Text("This is the HUD!", 20));

Surface = Global.SurfaceHud;

class GameScene : Scene {
public GameScene(int width, int height) : base(width, height) {
// Add the entities to the scene when the scene is created.
Add(new Player(HalfWidth, HalfHeight));
Add(new GridBackground());
Add(new PlayerHud());

public override void UpdateLast() {

// Set the scene's camera to follow the player.
var player = GetEntity<Player>();
CenterCamera(player.X, player.Y);

// Set the surface's camera to follow the scene's camera.
Global.SurfaceGameplay.CameraX = CameraX;
Global.SurfaceGameplay.CameraY = CameraY;

// Zoom the surface up and down with the arrow keys.
if (Input.KeyDown(Key.Down)) {
Global.SurfaceGameplay.CameraZoom -= 0.005f;
if (Input.KeyDown(Key.Up)) {
Global.SurfaceGameplay.CameraZoom += 0.005f;

public override void Render() {

// Render the surfaces.

class Global {
// Keep global references to the surfaces used for rendering the game.
public static Surface SurfaceHud = new Surface(640, 480);
public static Surface SurfaceGameplay = new Surface(640, 480, Color.Gray);

The full version is available on pastie.

I have a simple player class, and background class which both render to the surface designated for gameplay. Then the player HUD class is assigned to render to the hud surface. The scene will then take care of rendering both of those surfaces to the game's main surface. I render in the scene's Render method because that will be the very last thing that renders in the frame.

I know some people have been having trouble understanding surfaces fully and how to use them so I hope this example helps. Surfaces can be really powerful especially when you start getting into shaders and one of my main goals for Otter was to make using surfaces as painless as possible.

No Comments



Hi there, my name is Kyle, and I'm a kid disguised as a grown up. I'm making video games and living the indie game developer life in Tempe, Arizona. Here you will find my thoughts, games, websites, doodles, and other stuff like that. I worked on Snapshot, Offspring Fling, and a whole bunch of other games. I also created and maintain Otter, a 2d game making framework. If you want to get a hold of me use the form on the bottom of the page, leave a comment, or just tweet at me. I try to post three times a week. Thanks for stoppin' by! You're the coolest.



Do you want to make a Let's Play of one of my games, or a just a video featuring footage of my games? You have my full permission to do so! Even if you are monetizing your videos, you still have my full permission to use any footage from any of my games. Go for it!


Your message has been sent! Thanks :)