RT @pixelnicks: Want to explore this island? Just support #EagleIsland on Kickstarter 😊🦉 t.co/jeAAnRtaWG #gamedev #pixelart #indi… (Today)

@rustym @celsiusgs just round that shit UP (Yesterday)

@impbox dang there's always a catch... (Yesterday)

@impbox ah, dunno if you can customize the shortcutz (Yesterday)

I'm now trying out DYNALIST t.co/pxwNPUMXtC for brain management/task tracking/misc writings. Might be cool! (Yesterday)

@kertgartner okay well now you *have* to make your voicemail this t.co/NVtMVTzIVE (Yesterday)

@Commanderstitch yeah it is. I didnt tweet that in the morning. what are you a time cop? (Yesterday)

@mangadrive yeah okay also the opening of episode 22 of kill la kill (Yesterday)

every morning I start my day with a cup of coffee, 4 eggs, and the arc-gurren lagann transformation scene (Yesterday)

@theBanov thx :3 (Yesterday)

@Vash3stampid3 naming them would only give them more attention~ (Yesterday)

@ADAMATOMIC classic pikagreg (Yesterday)

@AsherVo @fell_martins any% world record (Yesterday)

@kinifi hahah amazing! thanks <3 (Yesterday)

getting excited while watching a trailer for a video game but at the end it reminds me that there's already dlc and… t.co/WJh1g2gcGB (Yesterday)

@MoviusC soooo unreal tournament definitely tried terrain maps with their twitch-fps weapons and they were god damned awful lol (2 days ago)

@MoviusC well if it were like a quake map there'd probably be less giant open spaces, or if there were they'd be in… t.co/0LK7FJCbVs (2 days ago)

if PUBG was just like the same concept but a giant quake map and played like quake then I would be dead from playing it for 999999 hours (2 days ago)

@TeddyDief ancient me: "my bloodline will carry out this task for me sometime before the sun consumes our home plan… t.co/T27Mb6a93W (2 days ago)

RT @fell_martins: 💰💎✨ Boys and girls, I'm open for business ✨💎💰 Resposting artwork because most of my stuff is under very secretive NDAs.… (2 days ago)

posts dated from: april 2015

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 / 3:48 pm / doodle

Doodle Post


No Comments

2015 - 4 - 30 / 3:47 pm / doodle

Doodle Post


No Comments

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

2015 - 4 - 22 / 7:47 pm / general

Dev Log: Game Mode Arts

Dev Log: Game Mode Arts

In the continuation of adding art to the menus in the game I recently added art to the difficulty selection screen.


Gonna be tough to finish the game this month as I have to travel a bit this coming weekend, but we're almost there!

No Comments



Hi! My name's Kyle, and I make video games most of the time in Denver, Colorado. 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.

blog stuff






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 :)