@SteveSwink t.co/qbTXnapS8a (Today)

@Nukikero I'll look into it. Hopefully you can still get a plushie! (Today)

RT @OneMrBean: The Kickstarter Kountdown Party continues! Less than 3hrs to go! :O t.co/2uM68E2RWV t.co/3ABleAlxYg (Today)

@Nukikero Ohh bummer I didn't even know! Thanks for the heads up. (Today)

@mikekasprzak I must break myself of that habit. "I dunno how to solve this so I guess I'll just wander over here and... oh a funny video.." (2 days ago)

@twobitart something between human and clothing?! (2 days ago)

@joeydehnert I try to do this but it's hard to overcome the dread I'm building about all the rewrites that are waiting for me, haha (2 days ago)

@TyrusPeace hahahah awesome (2 days ago)

@TyrusPeace I find myself doing a lot of style/art/juice/particle stuff whenever I'm stuck on a harder problem somewhere else ;D (2 days ago)

@LyleCox Huh, interesting! Oh yeah, nice meeting you! Always cool to run into internet people in the real world ;D (2 days ago)

@konjak dont wanna get cramps! :3 (2 days ago)

@eigenbom Interesting! I figured it would be something like "the easiest stuff on the to-do list first" (2 days ago)

A lot of artists I know do warm up sketches and thumbnails... do programmers have warm up exercises or is it best to just JUMP RIGHT IN? (2 days ago)

@infinite_ammo is there a poster of Rick Berman (3 days ago)

@psysal so gdlk (3 days ago)

@NoelFB the party never ends noel... it never ends... (3 days ago)

@Zeomne Whoa thanks! :O (3 days ago)

@ADAMATOMIC @theBanov @infinite_ammo hahahahahh #busted (3 days ago)

@infinite_ammo @redlettermedia @ChevyRay @NoelFB WHAAAAAAAAAATT?? (4 days ago)

@BriProv Been using Spine but mostly because they had ready to roll code to drop into my engine to use their animation data. (4 days ago)


2014 - 4 - 2 / 11:14 am / doodle

Doodle Post



No Comments

2014 - 3 - 31 / 2:31 am / general

Dev Log: Coroutine Example


Thanks to knowledge passed down from Chevy Ray I was able to get Coroutines working in Otter recently! Coroutines are magical chunks of code that are able to yield their execution and remember their state. It's bonkers what you can do with them using this power.

I added an example to Otter to hopefully help out any folks that are looking into using them:

using Otter;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CoroutineExample {
class CoroutineScene : Scene {

public Image ImageBox = Image.CreateRectangle(50);

public Color NextColor = Color.White;
public Color CurrentColor = Color.White;

public CoroutineScene() : base() {
// Center that box.

// Gotta draw the box.

// Set the box position.
ImageBox.X = 100;
ImageBox.Y = 100;

public override void Begin() {

// Start the coroutine, yo.

/// <summary>
/// The main coroutine to execute. This will move the box around and change its color.
/// </summary>
/// <returns>Whatever a coroutine thing returns. Sometimes 0 I guess.</returns>
IEnumerator MainRoutine() {
// Wait for 30 frames.
yield return Coroutine.Instance.WaitForFrames(30);
// Set the next color.
NextColor = Color.Red;
// Move the box to the top right.
yield return MoveBoxTo(540, 100);

// Wait for 30 frames.
yield return Coroutine.Instance.WaitForFrames(30);
// Set the next color.
NextColor = Color.Yellow;
// Move the box to the bottom right.
yield return MoveBoxTo(540, 380);

// Wait for 30 frames.
yield return Coroutine.Instance.WaitForFrames(30);
// Set the next color.
NextColor = Color.Green;
// Move the box to the bottom left.
yield return MoveBoxTo(100, 380);

// Wait for 30 frames.
yield return Coroutine.Instance.WaitForFrames(30);
// Set the next color.
NextColor = Color.Cyan;
// Move the box to the top left.
yield return MoveBoxTo(100, 100);

// Start a new coroutine.

IEnumerator MoveBoxTo(float x, float y) {
// Used to determine the completion.
var initialDistance = Util.Distance(ImageBox.X, ImageBox.Y, x, y);

float currentDistance = float.MaxValue;
while (currentDistance > 1) {
currentDistance = Util.Distance(ImageBox.X, ImageBox.Y, x, y);

// Determine the completion of the movement from 0 to 1.
var completion = Util.ScaleClamp(currentDistance, 0, initialDistance, 1, 0);

// Lerp the color of the box.
ImageBox.Color = Util.LerpColor(CurrentColor, NextColor, completion);

// Spin the box along with its movement.
ImageBox.Angle = Util.ScaleClamp(completion, 0, 1, 0, 360);

// Actually move the box.
ImageBox.X = Util.Approach(ImageBox.X, x, 5);
ImageBox.Y = Util.Approach(ImageBox.Y, y, 5);

// Wait until next frame.
yield return 0;

// Done moving. Update the color.
CurrentColor = NextColor;

I'm actually totally not sure if I'm doing it correctly in the example, but it seems to be working out well so far. Going to try using them for various things now in my current projects!


2014 - 3 - 31 / 1:27 am / doodle

Doodle Post


Colored this with 20% monitor brightness so hopefully it came out okay.

No Comments

2014 - 3 - 30 / 4:16 pm / general

Otter Updates

Otter Updates

Over the past week I've finally pushed some updates to Otter after managing to rip out the Spine animation stuff. It turns out that in order to use the Spine runtime you need a purchased copy of Spine, meaning that if I include the Spine code in Otter everyone that uses Otter would need a copy of Spine... not ideal. (I wish Spine wouldn't license their code like this.)

So now the Spine runtime for Otter lives in a separate repository. It can be used along with Otter if you import it into your solution also using Otter. After you import it you need to give it a reference to Otter (also in your solution) and then give your game project a reference to OtterSpine. Then you should be ready to roll with SpineAnimation.cs.

Other updates to otter include:

* Renamed GetClass to GetEntities on Scene
* Add Vertices graphics type
* Added Color.Mix()
* Corrected issue between game angle and graphics angles
* Fixed issue with BoxCollider constructor
* Fixed some collision bugs
* Added shortcut of Left-Alt in Debugger to hide debugger (useful for screenshots)
* Minor updates to Particle
* Added LerpColor to Util
* Slight changes to Vector2

If there's any bugs or horrific things broken then let me know in the Otter forums!

No Comments

2014 - 3 - 29 / 3:55 pm / doodle

Doodle Post



No Comments

2014 - 3 - 28 / 3:29 pm / general

TowerFall Tournament Finals

Check out me playing TowerFall at the Humble Bundle 2014 World Invitational Tournament vs. my good friend and training buddy Will Courtney. It was a best of 5 set and each of us had to play through amazing opponents to get to the finals. Good times!




Hi there, my name is Kyle, and I'm a 27 year old kid with adult powers. 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 :)