Game Development

JetLag 2017


I have truly lost count of the number of times I have made more or less this exact same game.

Currently, it may be found on It requires Love2D to play it, as will all of my games for the next little while. If you are interested in the source code, you can find it here.

There is a reason I start with JetLag. When done correctly, it has all of the components of a much more sophisticated game in miniature.


I admit, the graphics are rudimentary. I use filled rectangles and text. These things are not earth shattering.  The point here is that this game draws onto the screen, and to quote Andre LaMothe: “if you can draw a pixel, you can make a game.”


It’s not quite true, about the pixel I mean. It is true that being able to draw a pixel gets you halfway to making a game. The other half is being able to get input from a player. However, once you have the ability to draw something on the screen and the ability to get any sort of input from the user, it makes game creation possible.

In JetLag, the controls are keyboard only, although I am considering supporting the gamepad as well.


Not all games require this, but enough of them do such that it may as well be a required thing. In JetLag, the love.update function hands me a time delta, from which I can calculate when to scroll the display.


JetLag can be enjoyed on mute. The music is merely there for ambiance. I’ve got some mixed feelings about game music.

When I am playing a game on my desktop computer, I may leave the music on, but this is for games like Minecraft or Yonder, where a great deal of thought has been put into the music for the game.

When I am playing a game on my phone, I immediately look to turn off the music and sound effects.  Why? because I want to be able to play the game when I’m “indisposed”, and it making noise is the last thing I want.

So I require of myself when adding music and/or sound effects that I provide a means by which it may be conveniently turned off.

Also, I’m not a composer, so while I do try to select music appropriate to the game, I’m not engineering an immersive experience here. I’m tacking on music because tacking on music is the thing to do.

Sound Effects

Sound effects I pull from sfxr/bfxr/some other sound effect generator. I’m not engineering realistic sounds.

Same deal applies for sound effects as does music. I want it there, but I want to be able to turn it off.

Persisted Preferences

And that brings me to persisted preferences. During a play session, if I turn off the audio, the next time I play, it better stay off!

So I save my preferences to disk somewhere. Love2D has a nice set of functions for saving and loading little files, and I found a usable json library for lua that suits my needs.

I also store the high score achieved in the game, just to add a little self-competition.

State Machine

JetLag has exactly two game states: game over and play, but it still qualifies as a state machine, and is a shadow of the more formalized state machines that I’ll wind up developing later.

The internal state of JetLag might look like it is a grid. It is not, because it doesn’t need to be. The renderable state is two arrays: one for block locations and one for tail locations. In fact, the only really important block/tail location is the head.

Game Development

Defold Lets Me Down, and Griblers Does Not

So, I tried defold, and after doing so, I’m going to go back to Love2D.


Defold is not a bad tool, it just isn’t for the kinds of games that I make. It is for sprite games where you jump and collide and whatnot.

I make games that take place on a grid.

This can be done in defold. Make a game object as the “controller” that responds to inputs, and have those inputs modify the grid. However, when I tried to layer my grid, the transparency didn’t work, so…

I’ve been playing a mobile game Griblers. I like it and highly recommend. It is a crafty-questy-gathery game.

Also, while I realize that I really, really, REALLY wanna make a Splorr!! game, they quickly collapse under their own weight, and really suck to work on after a short while.

So back to basics for me. JetLag, Wandermaze, Pipes, Honeycomb, etc for a while. I want to get several new/updated out on and GameJolt.


Hunting the Wumpus (Searching For "The Ultimate" GameDev Tool)

On Hunting the Wumpus (The Quest for “The Ultimate” GameDev Tool)

I embark upon a quest that cannot be achieved. No, there is no “Ultimate” GameDev tool.

Mostly, I’m looking for one that makes me the least grumpy.

So, the best way I can think of to do this is to try things, take some metrics, and come up with a score.

I’ve decided to go with a “Grumpiness Index” (a negative score) instead of a positive merit based score. This just means that low scores are good.

So, I have categories:

  • Cross Platform(Weight: 3): does the tool allow building for multiple platforms?
  • Local Storage(Weight: 9): can I save data to be retrieved later?
  • Text Input(Weight: 3): can I get an actual unicode input string from the player?
  • Localization(Weight: 3): how hard is it to change display language?
  • Debugging(Weight: 9): how bad are the debugging tools?
  • Strongly Typed(Weight: 3): versus weakly typed.
  • Web Service(Weight: 9): how hard is it to make a request to a web page and get a result?
  • Database(Weight: 1): can I connect to a databse?
  • GamePad(Weight: 1): is using the gamepad supported?
  • Cost(Weight: 9): how expensive is it?
  • Ramp Up(Weight: 9): how difficult is it to learn?

Notice the Weight values after each. A 1 is a “nice to have” and a 9 is an essential feature. A 3 I can live without, but prefer not to.

When evaluating something, I will also give scores of 1, 3 or 9. Occasionally, I’ll give a 0 for the Cost category when something is free, 1 if something isn’t too much of a hassle, 3 if it is a minor pain point, and 9 if it is an intolerable deal breaker.

Multiply scores by weights, add them up, and get a grumpiness score, called the wumpuscore.


A Long Overdue “Rebranding”

I’m now 43.

I’ve always been a bit grumpy and surly.

I’ve been writing software since 13, which means I’ve been at it for 30 years.

I’ve only been writing software professionally since 1997, so I’ve only got 20 years there.



I cannot actually tell you that I write better code than you.  I probably don’t.

But it isn’t about writing the best code, or having 100% code coverage on the unit tests, or about furthering the agenda of the language, tool, programming style, etc.

If you are writing a piece of software, there is only one question that you have to answer:

Did I get out of it what I wanted to get out of it?

Depending on what you are trying to do, this can mean a number of things.

In a professional capacity, this means “did it ship?” (or put into production, if shipping doesn’t quite capture the idea)

In making games in my spare time, it means “did I learn something” usually, and often “did I get something out there” (even if I didn’t finish it, and I’ve failed to finish a large number of things).

A lot of things make me grumpy.

And now I’m going to take this site, and tell others about what makes me grumpy and why it makes me grumpy.

Perhaps it helps you avoid a thing that will also make you grumpy.

Maybe it’ll just make you grumpy.

You don’t have to read my words. You can go elsewhere. Lots of curmudgeonly asses like me pontificating their points of view. Pick one of those instead.

Game Development · Uncategorized

JetLag 2017 on GameJolt


Yes, that’s right. JetLag 2017. Like all the other JetLags, but in 2017.

Play it Here!

Naturally, when I make a new JetLag, it means I’m exploring a new platform for development, and 2017 is no different.

This years platform is Defold, a lua scripted scenegraph manager tool.

It touts itself as the “Ultimate Engine For 2D Games,” which is a lofty ambition.

Pedantically speaking, the world “ultimate” means the same thing as “final”, and non-pedantically, it means that there will never be a better one. Neither of these things are true, of course.

This version of the game sits up there on GameJolt, right next to JetLag 2016, made with a similar tool, Godot.

If you’ve followed my history at all, you will know that I’ve tried just about every tool there is, every platform there is, and most of the languages out there. You might ask the question, what am I looking for?

I’m not actually looking for anything. Certainly, I’m not looking for the “ultimate” anything. I learn things as an end unto itself.



Angular JS and GameDev?

Two years and three days.

Yeah. Two years and three days since my last post.

I’ve been busy with my day job, mostly, but that doesn’t mean I’ve neglected my game development.

Since then, I put in a few Google Play games, one Ouya game.

And now I’ve gone and entered a game jam, and I’m about to enter another.

For the last few years, my day job has consisted of web development, and that naturally leads to the use of JavaScript frameworks.

One that I did not use in the course of my job was AngularJS, though I had heard a lot about it, and there is a larger community and I figured at some point I should learn it.

So after poking around, I wound up making Bottomless Pits and Potato Salad.



And I am now looking forward to the text jam coming up in a few days.

I’ve even started putting some of my old stuff up at

One of these days, I’m going to try out Quintus, too.

And host the stuff on heroku.


Splorr! (Opening and Closing Doors)

Splorr! Now has the ability to open and close doors!

And I think I’m doing to stick with the tap-fest that is my UI.

At first, I was thinking that I wanted to be able to have the player accomplish tasks with a low number of taps, ideally 1 tap for each action.

Then I realized that I don’t, actually. Let the player tap seven times to perform an action. It’ll make him feel like he’s accomplished something.

For example, I’ll take you through a typical action sequence upon entering a room.

In the following image, I’ve just entered a room:

At the moment, I’m facing a wall, the door I just opened and went through is behind me, and there is a passageway to the right.

I don’t want to go back to the room I was just in, so I decide to turn right and go through the passageway.

First, I tap the “Move/Turn” button.

Now I tap turn right to get the following:

Now that I am facing the right way, I move forward in two taps, first by tapping “Move/Turn”:

And then by tapping “Move Forward”, whereupon I will see the following status:

And now there is a closed door in front of me.  To open it, I need three taps.  First, I tap “Room”

Then I tap “Doors/Walls”

And finally tap “Open Door”.

And so, the game becomes a bit of a micro-managing tapfest, but I think that’s what I want.