RT @psychicteeth: I've just released Cottage of Doom, and it's 75% off for the Halloween weekend! GET IT OR ARE YOU SCARED t.co/o6Pw… (Today)

@rustym Yeah it's like "You got +150XP for doing something in the game, now your gun has +10% accuracy!" (Today)

@siegarettes I think Valve just focuses on making a really solid experience so playing the game itself is addicting. (Today)

@TheKazvon I'm sure that's coming some time after the game comes out x_x (Today)

@Anlysia Not familiar with Payday, but it's really similar to the modern Battlefield system. t.co/WMp1VbCehD (Today)

@siegarettes Yeah you level up your abilities based on XP you get from playing. t.co/WMp1VbCehD (Today)

I'm so mad about this because Evolve looked like a super fun asymmetrical multiplayer game, and it's fucked by a stupid progression hook. (Today)

@KurpUnderscore Cosmetic stuff, sure, whatever, but shit that effects the core game balance by how long you've played? Fucking bullshit. (Today)

Was pretty excited about Evolve until I saw the player progression screen. Fuck this stupid time sink for better shit bullshit fuck. >:I (Today)

@isabelboyd @VancouverAqua aahhhhhhhh <3 (Yesterday)

@adventureface the eternal spirit of macho man randy savage watches over you (Yesterday)

@infinite_ammo @MattThorson nooo it okay don't be anxiety t.co/9StKYrUHWu (Yesterday)

@amora_b @Chris_Rock @konjak AND THIS! t.co/MNY5O1dEsg (Yesterday)

@phubans consider yourself training in 100x gravity (2 days ago)

Coin Crypt is out on Steam now and you should def check out that hotness t.co/c9I5QnxS5Q (2 days ago)

@infinite_ammo @TommyRefenes @BeeMickSee and then eventually mr plinkett will review a movie that we're all in #endgame (2 days ago)

@BeeMickSee @TommyRefenes @infinite_ammo YES INFINITY WARS IS HAPPENING 2 MOVIES FUUUUUUCK (2 days ago)

@infinite_ammo Hahah this is like the opposite of how I feel about all of these movies. * o * (2 days ago)

@aeiowu being greg wohlwend (2 days ago)

@Megazell UHHH Kind of a heavy question to answer in 140 chars. If you want any specific advice feel free to email me hi@kpulv.com (2 days ago)

posts tagged with: gamedev

2014 - 10 - 22 / 3:04 pm / general

Dev Log: Skeletons

Dev Log: Skeletons

This past week I've been chipping away at some general changes to Otter as well as doing some quick experiments with some things that I eventually want to include in my bigger game project.

The most recent of these experiments is setting up a general purposed skeleton system. The main idea is that I want to be able to make up enemies and other objects with a bunch of individual pieces that move around and animate. Normally I could say just using something like Spine or Spriter is good enough for this, but for this I wanted something of my own creation.


The idea is that there is a Skeleton Entity in Otter that contains bones that all move, rotate, and scale based on their parent. Typical skeleton bone behavior. The difference is that each bone can hold an Entity on it. Each individual Entity on the bone can then have its own logic, so for example the first thing I want to have is the ability to destroy individual pieces of the skeleton. I can do that by having the Entities on each bone have logic for taking damage and being destroyed.


So far I have one early iteration of this working but I'm realizing that the math that programs like Spine and Spriter do might be slightly different, and I'm trying to figure out exactly how they approach their transformations. It's a little difficult to find any articles or tutorials on how to code this stuff up yourself, as most people assume that using Spine or Spriter is what you want to do. I could potentially go back to using Spine and try to figure out how to wrangle its data format into loading a Skeleton into my custom format, but sometimes just making something yourself from scratch ends up being more straight forward!

No Comments

2014 - 10 - 10 / 5:21 pm / general

Dev Log: Bezier Curves

Dev Log: Bezier Curves

This week has kinda sucked for game development stuff. I'm not really sure why, but I just haven't really felt super inspired to work on anything lately, and when I do try to work on things I feel like everything I make is just terrible so I procrastinate. It's a vicious cycle! So I tried to think of maybe something I can add to Otter because that should be easy enough.

I decided to try and just learn about bezier curves in more detail. I've never used them in a game, but it seems like they would be handy in a lot of aspects of game development. I found this quick tutorial and got started with recreating the example code in Otter.


Although... I'm not sure if this is looking quite right. I'm pretty sure I'm doing the same exact code in the example, but for some reason every curve on my bezier path has sharp end points with the next curve on the path... so for now I'm going to have to look into this further, but the current source is in the Util class in Otter's dev branch if anyone wants to give it a look!


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 - 6 / 2:51 pm / general

Game Jam Procedural Generation Part II

Game Jam Procedural Generation Part II

In the last episode of Game Jam Procedural Generation I talked about the "outer layer" of my procedural generation code for my yet to be released game jam game. After the outer layer of stuff has been generated, that can be used to inform the "inner layer" of the procedural generation. So the outer layer in this case is the galaxy that the player can explore in their ship, and the inner layer is the actual side scrolling platformer level that they will explore.


Where do we even begin? First keep in mind that I'm using Otter for all of this stuff, so if you see functions and code that looks totally unfamiliar, it's probably an Otter thing. Also keep in mind that all of this code was written during a 48 hour game jam, so it ain't pretty. I'm just going to be sharing big snippets of code and hopefully try to explain what is happening in each one.

In the last step I talked about how I create a config object to hold all of the possible fields that will be used to generate the level. Here's what that looks like:

class ScenePlatformingConfig {
public int Width;
public int Height;

public int ShipStartOffset;

public int TreasureDirection;
public int TreasureDistanceOffset;

public int GroundLevelOffset;

public bool Explored;
public bool Pillaged;

public int Jagginess;

public int Platforms;

public int DecaySpots;
public int DecayChance;

public int IslandSpots;
public int IslandSize;

public int Rooms;

public string Name;

public int BreakableChance;

public int CreatureChance;

Pretty straight forward. Just a simple class that will hold a bunch of values that can be then passed to the classes that generate the platforming level. read more

No Comments



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