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

@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 (Today)

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 (Today)

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

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

@RYStorm actually now that I think about it when I get really excited "dude" is one of the first things out of my m… t.co/xjxRg7aZtf (Today)

@dkoontz the brite side (Today)

@MOOMANiBE I grew up in ultra rural upstate new york and somehow I still got it (Today)

when i spend hours on a bug caused by typing x twice instead of x and y t.co/nOkvbJ2XQg (Today)

@NoelFB @RobClemmonsJr coffee totally kills my appetite and I may lean into that more than I should *passes out fro… t.co/QEri4qx8On (Today)

@NoelFB this is a "bad" habit, you say? hmm... interesting... heh heh... *totally not sweating nervously*... (Today)

I've accepted the fact that I'm just going to say "like" 500 times per minute when I'm talking, and that's just, like, how it is. (Today)

@raiganburns yeah something really frustrating about watching a term's meaning totally erode, especially when a ter… t.co/LnabpYVyJQ (Today)

@floatvoid holy poop I havent heard this one yet!! (Today)

@raiganburns seems folks have been using rogue-whatever when they just mean procedural generation for awhile now. (… t.co/yYGOokKJUu (Today)

when are these so called major "esports" teams going to pick up players for link to the past randomizer races?? t.co/mxXI5JRG2X (Yesterday)

@AshBlueWD @ESAdevlog this is legit one of my favorite games of the past couple years. amazingly executed metroidva… t.co/WAQq7r3MQs (2 days ago)

@dannyBstyle Yeah it was an insane disaster and I'm amazed everyone signed on and was like yeah cool this sounds good let's do this (2 days ago)

RT @ESAdevlog: Btw, ESA is 60% off (and OST 30%) this weekend on Steam & Humble Store!! Completely forgot to announce that, whoops https://… (2 days ago)

@dannyBstyle Haha too late. It was... a thing. The original trailer for it was amazing though so I'll just keep watching that. (2 days ago)

posts dated from: september 2014

2014 - 9 - 30 / 4:02 pm / doodle

Doodle Post


No Comments

2014 - 9 - 25 / 1:21 pm / doodle

Doodle Post


No Comments

2014 - 9 - 24 / 2:51 pm / general

Platforming Nudging Assistance

Platforming Nudging Assistance

Making a solid feeling platformer isn't as simple as setting up horizontal movement, jumping, and gravity. There are a lot of tricks and behind the scenes magic involved in making something feel good to the player. In the past I've talked about ledge forgiveness, and input buffering, and now I'm going to add nudging assistance to the list!

Ledge forgiveness, input buffering are two tricks that let the player execute their intended action even if they screw it up slightly. Nudging assistance also falls into that category.

The Problem
My latest small game Starforger II is all about roaming around procedural levels. A lot of times the levels have one tile openings in walls that the player wants to navigate into. Take a look at what happens with just a typical platforming physics system when a player tries to navigate into a small tunnel like this.


Even though the player really wants to slide into that hole as they fly by they simply cant because there is no frame in which the player is able to actually navigate into that tile. If their vertical speed is too great they will miss the hole every time even though they are holding down input that would make it seem like they should be able to squeeze into there.


Image read more


2014 - 9 - 18 / 6:36 pm / stratoforce

Dev Log: Building Buildings

Dev Log: Building Buildings

I'm finally getting back to work on my main project which for now is called Stratoforce. Maybe StratoForce? Strato Force? I dunno, who cares for now.

A big part of the game is placing structures onto islands that you build, and for whatever reason I've been totally stuck in how I should be designing the structures. I had a couple of images in the game for the basic Power Generator and Power Node structures, but I hated how it looked over time. They looked too complex, so I decided to try to dial it back to something way simpler with big simple shapes.


From left to right there's the Ammo Generator, the Power Node, and the Power Generator. I've been trying to find references for RTS structure and building design, but I found that a lot of them use 3d which is quite a bit different. I can see how this kind of thing would be waaay easier in 3d though. I do want to have my structures animate, and respond to things, and doing that in 2d is going to be a little challenging. I might be able to make something work with a bunch of tweens or something though... hopefully I'll be able to prototype some animation stuff for the structures soon!

No Comments

2014 - 9 - 18 / 4:08 pm / general

Game Jam Procedural Generation Part IV

Game Jam Procedural Generation Part IV

The final part of this series about procedural generation for Starforger II will conclude with the last of the level generation code. In the last episode I talked about some of the details in generating rooms, tunnels, and other details in the level. In this final part I'll wrap it up by talking about how I place enemies, breakable blocks, and some final touches on the treasure room.


The next thing in the generation of the level is the breakable blocks. These are blocks that the player can blow up using their bombs. I added these sort of at the last minute of the jam just to give some more interaction with the world, and it felt kinda fun to forge your own path through a big section of breakable blocks.

// put breakable blocks in random places I dunno
for (var yy = 10; yy < grid.TileRows; yy++) {
for (var xx = 0; xx < grid.TileColumns; xx++) {
if (CheckRect(xx, yy, 2, 2)) {
if (Rand.Chance(config.BreakableChance)) {
if (breakables < breakablesMax) {
Scene.Add(new BreakableBlock(xx * 16, yy * 16));
gridBreakable.SetRect(xx, yy, 2, 2);
if (config.Width > 1500) {
if (config.Width > 1000) {

I actually use a separate grid "gridBreakable" to keep track of where I've already placed blocks. This is less expensive in Otter. The alternative would be to do a collision check against all other breakable blocks which would take longer and longer if there are more breakable blocks being added. Whenever a block is added I add a 2 x 2 rectangle to the gridBreakable grid, and the function CheckRect() will check against the breakable grid and the ground grid, so I can't accidentally place a breakable block in the ground, or overlapping another breakable block. read more

No Comments

2014 - 9 - 16 / 6:06 pm / general

Otter Updates

Otter Updates

Another quick round of updates to Otter this week. All of these changes are currently happening in the dev branch and will be moved to the default branch once I get some more documentation and testing done.

* Platforming Movement now supports jump through platforms
The PlatformingMovement component can jump through platforms now.


The set up for this requires adding tags to the component that are to be used as jump through. The next step is adding a collider to the Entity that will act as the jump through platform detector. This collider should be only 1 pixel tall, and should be placed on the very bottom of the entity, and probably be the same width as the collider being used for the rest of the collisions. The component also allows for the player to push down + jump in order to drop through a platform.

* Tiny music changes
The Music class now keeps track of all of the created music objects in order to update them when the global volume is changed. Previously I was using the EventRouter but if the user ever decides to clear all of the event router subscriptions the music object would break.

* QuitKey has become QuitButton
The QuitKey has been replaced with a Button object. The default to quit is still the Escape key on the keyboard, but now it can be set to any key, mouse button, or joystick button.

* AutoTiling example
An example project has been added in the Examples folder which should show the basics on how to use the auto tiling system in Otter.

* Collider double-add bug fix
There was a bug in the Collider system that allowed a collider to be added to the internal collider list twice. If an Entity used AddCollider or SetCollider in its Added method those colliders would be added to the Scene twice. If one of those double-added colliders are then removed at some point then bad things would happen. This has been fixed by only allowing colliders to be added to the scene once.

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