What I'm Learning About Game Audio

My initial plan for audio in From The Sun was to have it be entirely procedural. It seemed like a promising direction for a game where player state is already influencing gameplay. The tones would be based on player speed, everything generated at run time. At first it seemed like it was coming together: I had a simple system set up to play arbitrary tones and constants available for the wavelengths of musical notes. Mostly I was generating sine waves, created a player that would combine all the currently playing sounds into a single stream. Eventually I had sound effects for most game events: shooting, collecting photons, taking damage, and dealing damage. They were ... harsh. The simple sine wave tones do not sound good. I would have to create filters for them to make different instruments voices. It would be a lot of effort to recreate something that's been being built up for years. On top of the sound quality not being good I discovered that Unity's WebGL, and maybe WebGL in general, doesn't support generative audio. I like being able to host builds online to show progress. I could have started hosting OS specfic builds, but combined with the low quality sound I was getting it was clear that generative audio is not the way to go.

So I started looking at authoring tools, of which there are tons. It's really overwhelming to sift through all the options, but I managed to find a pretty easy to use sequencer called LMMS. It was really easy to get started on and now I've got some better, although still not amazing, sounds effects and even a dinky little music loop. They've taken me just a few hours to put together, rather than the couple of evenings I spent getting a really low quality sound generator going.

I think the real take away for me from this whole process is that finding the right tool is always going to be faster and give better results than trying to make a new tool without having ever used one like it.

Now here's a link to a new build with that new audio in it.

From The Sun: Tutorial and A Simple Level

Been working on some level planning tools and refining the UI for From The Sun.

My initial toolset was an editor that placed each obstacle individually. This grew tedious quickly and I started setting up groups of spawns as waves and a couple of basic types of waves to generate programmatically. My favorite of those types was one that divided the screen by fifths, picked a random ordering for each of those subdivisions to get a waves, then use the same ordering to place five pieces of debris within the subdivision. I liked it because it created a good spread that hit every point on the screen but wasn't too hard to avoid, plus the first wave of debris describes where the rest of the waves will be on the screen. Those are still in use in the sample level, but there are some new types that I'm generating as well.

In addition to the generative waves I added some new tools to create groups of debris using splines. Following the Cat Like Coding spline tutorial I was able to learn a lot more about custom editor tools to help me lay out paths of debris. Next up will be composite debris that consists of multiple types of debris as a single physical object. That will allow for some interesting debris to navigate that rotates as a unit.

The UI has a new side bar layout that uses its background as a quick color indicator, plus easier to read score, and a less distracting ammo icon. There's also a tutorial that helps describe the mechanics of color changing and gathering ammo.

One big task that I have't even started approaching is audio. I should find some creative commons music and sound effects to use, at least for now.

Play and comment please!

Direct Link To Game

Test level of From The Sun

This is the first build of a game I've been working on for a little while. You control a photon travelling through space. Collision with other photons give you energy, which you can use to destroy obstacles. WASD to move and space to shoot.

Link to web build.

An Open Letter to Gen Con

Dear Gen Con organizers,

To preface: I know you have a couple one time events that cause huge server loads, the opening of event registration is one of these times.

That said, the wishlist system you're using, and which thousands of people are fighting against this morning, is terrible. I'm writing this in 3382nd place in line to try and reserve tickets to an event that's already sold out. I'll be in this line for probably another hour. There is no way to leave this line even though I know the only thing at the end of it is disappointment. This brings me to my first suggestion for next year:

1. Allow your users to cancel waiting on a wishlist to process.

Now this leads into another issue with your system: it's overloaded. That's why the lists take so long to process, and of course additional database or memory operations would be required to allow cancelling, adding to the already great load on your servers. Clearly it would be overkill to invest in a big server cluster for the two times per year, housing registration and event registration, that you get this kind of traffic. Which brings me to my second suggestion for next year:

2. Make use of a 3rd party system to scale and load balance these two yearly events.

There are plenty of services available that will enable you to run this wishlist system or the housing lottery on their servers. These services allow you to scale up automatically as traffic increases and you pay for the time you use, paying extra for only these high traffic events rather than investing in the hardware to handle this kind of traffic at any time.

I think these are two fairly simple, although nuanced, steps that GenCon LLC can take to improve your customer's experience at a reasonable expense. I understand that handling this many customers at once is a big problem and I appreciate that you provide the service at all, these are my observations as an end user.

Thank you for all you do to make an amazing con,
A currently frustrated, but otherwise satisfied customer.


Discussion on Reddit

Ludum Dare 35 and Circumstances Beyond My Control


Got me and Karl's Ludum Dare 35 entry submitted almost a week ago now.

For the theme 'shapeshift' we went with our idea of a reverse werewolf, cursed to change from a regular wolf to a helpless naked human during the full moon and be hunted by the wolves. The ultimate goal of the game is to kill the gypsy queen to free yourself from the curse.

We changed the idea for the plot a lot as we went, finally settling on this one early last Sunday. Until then we had considered setting it up in a zoo instead of the woods. There would have been an inventory and some sort of goal acheivable by going around the zoo and trading items for tips. Once we realized that was too much to try to put in we scaled down the scope to what we have now.

Karl made some assets that didn't end up in the final submission because I didn't have the development time Monday after work that I had planned on having, thanks a mechanical problem with a bridge on my way home. I felt so impotent seeing the time tick away while traffic failed to move, my 1 hour commute taking just over 2 hours. Luckily I still had time to actually upload a build and submit it during the submission grace period.

Today I took the assets from Karl that didn't make it into the submission and put them into the game so we can at least show what should have been. Play that new complete build here.

Here's some of the initial art, as well as zoo art, that didn't make the final version:

Reverse werewolf #1, too happy

Reverse werewolf #1, too happyPompous Lion

Pompous Lion



Helpful Giraffe

Helpful Giraffe

His flashlight doesn't even work, budget cuts are rough.

His flashlight doesn't even work, budget cuts are rough.


Hello World!