Roku GameDev and Me

So, recently, I dusted off the Roku SDK and started making little “games” for my children.

This one is currently unnamed, but my younger daughter says it should be named “Unicorn and Star”. Naming is hard, and she’s 4.

Unicorn and Star it is, then!


The current version can be installed by clicking here. If that doesn’t work, try here. If that doesn’t work, you are a future person, and it is no longer available.

The goal of the game is to move the unicorn onto the star. At that point, the star then moves to a random spot, and you can move the unicorn to it again.

It challenged my concept of “game,” because it has no success metric, but I am reminded that game in the current use of the word encompasses all forms of digital interactive media, for which this certainly qualifies.

I got the graphics fromĀ, to no one’s surprise. The Unicorn is by Delapouite, and the Star is by Lorc.

The maze generation is, as usual, my homegrown implementation of Prim’s Algorithm.

My older daughter played for a good ten minutes this morning, so it is successful for now. Methinks it will need enhancements before too long, however.




F# is bad for Game Development

Yes. The title is misleading. I will explain.

It isn’t just F# that is bad for Game Development. It is just the functional programming language I’m most familiar with and can actually use “effectively”.

To be more complete…. functional languages are bad for game development.

I had two main problems with the F# community. First, I was told a number of times that my code wasn’t pure enough, functional enough, etc. Because it wasn’t, and could not be, because I was making games.

The second is because the group used terms like inclusiveness like a banner of pride, but is really a cult that expects normative behavior. This will be my final mention of this. Don’t talk to me about it, you will get a “cool story bro” at best or a “get off my lawn” at worst.

Back to functional languages being bad for games. Why do I say this?

It would be more accurate, and less accusative, if I were to state “game projects are a poor choice for functional languages”.

And even so, you might ask why.

Let us explore, for a moment, some of the things that F# and other functional languages are principally against:

  • Global state
  • Side effects

Games are pretty much nothing but state, and must be considered often as a whole. Even in a simple game like checkers, the state of the game must be considered as a whole. You don’t perform operations on pieces without regard for the rest of the board.

And video games primarily communicate with the user via graphics and sound, which are both side effects.

So games are made up of nothing but state and make all sorts of side effects as their very purpose.

This is not to say that it is impossible to make a game using F# or another functional language, but its sort of like making an imperative language do functional things. It wasn’t built with that in mind.

So like I said:

F# is bad for game development.



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.