Saturday, December 25, 2010

Monday, December 20, 2010


Block Village

I inevitably ran out of time, but managed to at least submit a build before the deadline. Click the image above, or here to play it in your browser. Windows and Mac builds are available from the Observatory Ludum Dare page.

I'm happy with the intro and the way the art style turned out. Where I fell short was in the actual gameplay - I was only able to add a basic telescope control mechanic before time ran out.

Overall, though, I was able to accomplish quite a bit in a couple of short days. Working with Unity3D for the first time definitely hurt me, but the upside is that I know my way around it pretty well, now.

Saturday, December 18, 2010

Ludum Dare #19

I'm participating in my first Ludum Dare 48hr game development competition this weekend. In the spirit of trying something new, I'm also using Unity3D for the first time.

The competition theme is "Discovery". This video shows some of what I have so far. One of the tough things about this competition (other than the 48hr time limit, of course) is that you have to create everything from scratch.

I'm better at drawing planet textures now than I was this morning...

Saturday, December 11, 2010

The Inevitable Next Step...

Block Village

I said I didn't think I would be able to resist adding fishing to the game. Turns out I was right...

Wednesday, December 8, 2010

Water, Reflections and Fish

Block Village

I just finished adding water/reflections back into my engine. Now I have a pond with some fish in it.

I don't think I'm going to be able to resist adding fishing to the game...

Friday, December 3, 2010


I've got shadows working pretty well now - they definitely add a lot to the look of the game.

I've also taking an initial shot at creating some background music.

Sunday, November 28, 2010

Battling Bats in a Graveyard

Battling Bats

The bats fly off the ground, so you have to jump and shoot to hit them.

I really need to add shadows - without them it is difficult to see the location of objects in the air.

Friday, November 19, 2010

Don't Mess with an Angry Mage

Block Village

A little before/after comparison...

Wednesday, November 17, 2010

Doing Some Decorating

Block Village

Now that my core engine is in pretty good shape for now (stuff draws, objects move, collide and explode), I'm starting to work on the "game" part of my next game. That means adding content.

These are a few screenshots of what I've got so far.

Block Village

Not much, yet, but it's a start.

Wednesday, November 3, 2010

Shooting Spree

I've switched my Block World game to a third-person view (at least for the moment).

This is a video of my place-holder protagonist going on a shooting spree against some skull worm thingies.

Thursday, October 28, 2010

C# random number generator starts returning only zero

Yesterday my game AI started going haywire on me. At a random point, all of my creatures would start moving in a single direction.

Turns out the cause was Random.NextDouble starting to return only zero. And it turns out the cause of that was multiple threads accessing the same instance of the Random class.

As I would have expected had I thought about it, Random is not thread safe. If it gets accessed from one thread while it is in the middle of an operation for another, its internal state gets mucked up and it just spits back zeros from then on.

The solution is to use one instance of Random per thread (which is what I did) or to ensure synchronized access.

Wednesday, October 20, 2010

Throwing Rocks at Frogs

Exploding frogs - what's not to like about that?

Friday, October 15, 2010

Frogs in Block World

Slow week since my graphics card died on me over the weekend. I finally got up and running again last night.

To celebrate my new graphics card, I made some frogs.

Thursday, October 7, 2010

Block Model Editor

Terrain Rendering

I hate making editors. Creating an editor for a feature always takes ten times the amount of time that it took to add the actual feature itself. And it is much less rewarding code to write.

I need an intern...

Anyway, I've got a half-assed editor for the block models that I will be scattering throughout my block world. I used my mad 3D art skills to draw a tree. So there!

Monday, October 4, 2010

Block Models

Terrain Rendering

I am currently working on adding more details to my Block World environment. This will be done mostly through the use of what I am calling "Block Models" - meshes generated from a 3D cubic grid of "trixels".

I started with 16x16x16 grid and did a test to see how many I could render. Quite a few, it turns out.

Monday, September 27, 2010

Another Block World Island

Terrain Rendering

Here's a shot of another island in Block World.

Thursday, September 23, 2010

Block World

Here is a little video to show the current state of my "Block World".

I've implemented a physics model and added some basic terrain editing. The next step will be to increase the diversity of the landscape - adding angled ramps (but still keeping things blocky) and some decorations (bushes, trees, etc.)

Friday, September 17, 2010

Lo Fi

Terrain Rendering

Inspired by Minecraft (which I find interesting, but have no real desire to "play") and 3D Dot Game Heroes (which I ordered today), I spent the day messing around with this.

I'm not yet sure if I will do anything with it, but I think it looks cool.

Tuesday, September 14, 2010

Bike Gameplay Video

Here is a short video showing the current state of my bike game.

The physics is not quite where I want it yet, I need a real motorbike engine sound, and I need a more interesting track (currently I'm using the track path I showed in my previous post with some "humps" added in along the route to make things a bit more interesting).

Progress is being made, though.

Wednesday, September 8, 2010

Bike Paths

Terrain Rendering

I wouldn't have much of a bike game without a track, so that's what I've been working on today. The red points are editable control points and I interpolate the other points using Catmull-Rom Splines.

The track is just X-Y coordinates, with the Z value obtained from the height of the terrain.

Tuesday, September 7, 2010

Potential new game WIP

Terrain Rendering

I had been working on some sort of flight mechanic as the gameplay for my next project.

Then, I had a thought - what about bikes?

Friday, August 6, 2010

Tunescape on the Top IGN Picks list

I just noticed a healthy uptick in Tunescape sales that I was at a loss to explain. Turns out that it is currently in the Top IGN Picks list in the Indie Games section of the Xbox dash. Nice!

Tuesday, August 3, 2010

Trees Using Model Instancing

Tress Using Model Instancing

I'm working on getting more detail into my islands, so adding trees was an obvious next step. To draw them efficiently, I'm using model instancing - a technique that allows you to render multiple instances of the same geometry in a single draw call.

Thursday, July 29, 2010

Terrain Level-Of-Detail: Dealing with Seams

Terrain Rendering

Handling Level-Of-Detail (LOD) gracefully for terrain turns out to be tougher than you might expect. Terrain has a particular characteristic that you don't usually have to deal with when doing LOD for other kinds of objects (ie: trees, etc.) - it is continuous. That creates problems.

Initially, I was doing LOD on an entire island-by-island basis. I could increase or decrease the detail of the island based on distance, but the entire island had the same level of detail. That worked ok, but it was inefficient and I knew I would eventually outgrow it.

Above, you can see my current method for doing terrain LOD. Instead of the terrain being composed of a single grid mesh, it is now broken down into concentric square "rings". With each successive ring, the grid size is doubled. As the camera moves, the grid moves with it so that the highly detailed area is always nearby.

The big win you get from doing this is that the number of triangles you need to draw increases linearly with the size of the terrain, rather than exponentially with the area. The down side is that you have to deal with seams. Where one level of detail meets the next, you get discontinuities in the terrain. As you can see below, this is clearly not acceptable:

Terrain Rendering

It took me a while before I came up with a solution to the seam problem that I was happy with. Most techniques for handling seams revolve around adding extra geometry to "stitch" the edges together. I really didn't want to resort to that unless I had to.

Yesterday I finally came up with a good solution. I'll see if I can explain it in a way that makes sense. The situation that creates seams is the edge between one ring and the next ring with half as many grid squares. As you can see below, where the two rings share an edge, the more detailed ring samples an extra height point between each point on the less detailed ring. This creates a gap in the mesh:

Terrain Rendering

Conceptually, my solution was to force the heights of the extra middle points on the edge of the more detailed grid to be the average of the two points on either side - essentially simulating the edges of the neighboring, less detailed grid. In practice, though, it is a bit more tricky. I couldn't do the averaging in the terrain shader since it only has very local access to one vertex at a time.

Since my height data is passed to the shader in a texture (rather than being baked into the vertices themselves), I was able to create a secondary texture at each level of detail where I pre-set the averaged intermediate points. Then I configured my grid vertex data with an extra piece of data (currently in the otherwise unused 'Z' component of position) - a blend amount between the averaged height texture and the unmodified texture. Edge vertices have this set to 1, while it is zero elsewhere.

So far it seems to be working really well. Here is the same picture from above, but now using the averaging technique:

Terrain Rendering

Yay - no seams!

Monday, July 26, 2010

Avatar Pinball now available on Xbox LIVE Indie Games

Avatar Pinball went live on the Indie Games marketplace last night. You can find it on the web-based marketplace here:

and I have a little promo page here:

Tuesday, July 20, 2010

Terrain Rendering Progress

Terrain Rendering

It isn't Crysis or Just Cause 2 yet, but my terrain rendering system is coming along nicely.

Here is a flyover video. Any stuttering in the video is from the capture and encoding process - it runs butter-smooth.

Techniques I'm currently using:
  • Terrain generation with L3DT.
  • Skybox rendered with Terragen and cube-maped with AMD CupeMapGen.
  • Texture splatting for landscape detailing.
  • Water shading based on a modified version of Kyle Hayward's water component with the addition of variable water transparency depending on water depth.
  • Bloom and Lens Flare based on Microsoft's XNA samples.
  • Simple terrain Level-Of-Detail system. It currently works at a whole-island level - I'll likely have to move to a more complicated approach.

Wednesday, July 7, 2010


Terrain with Skybox

I just finished adding a skybox to my scene (rendered with Terragen, put into a cubemap texture with AMD CupeMapGen). The water looks much more interesting when it has something to reflect.

Tuesday, July 6, 2010

New Project

Terrain Rendering

With Avatar Pinball now in peer review, it was time to move on to a new project. Since the backdrop for my next game is a set of islands, I needed to create a terrain rendering system. I've only been working on it for a couple of days, but as you can see above, I've already managed to get pretty far.

I'm using similar techniques to those I described a few years ago when I was working with TV3D. In this case, however, I'm using my own shader to do the texture splatting.

The water is done using a modified version of Kyle Hayward's water component for XNA.

Wednesday, June 23, 2010

Avatar Pinball - Sock Puppet PC Demo

I took a break from development this morning to package up a PC version of my current Avatar Pinball build. It contains the Sock Puppet Pinball mode - one of 5 different modes in the game.

To run it, you will need to have .NET Framework 3.5 and the XNA 3.1 redistributable package. Both are small, easy installs.

You can get .NET 3.5 here (note that if you are running Windows 7, you already have it):

.NET 3.5

The XNA 3.1 redistributable package can be downloaded here:

XNA 3.1

My pinball demo can be downloaded here:

Avatar Pinball Sock Puppet PC Demo

Please do not redistribute the demo.

Use an Xbox controller if you have one connected to your PC.

Keyboard Controls:
  • Menu navigation with arrow keys, enter and escape or back
  • Launch ball with enter
  • Shift keys control flippers
  • Space nudges table
  • Escape pauses game
You will need a decently beefy system to run the demo.  My PC (Core 2 Quad / GeForce 8800 GT) runs it fine. My laptop not so much. The game is hard-coded to run windowed at  1280x720. I figure if your screen size isn't at least that big, your system probably can't handle it anyway... :-)

    Friday, June 11, 2010

    Avatar Pinball

    Avatar Pinball

    Current cover art for the game I'm working on. It still needs work, but it is the first version I've produced that didn't outright suck :-)

    The Sock Puppet Pinball video I posted last week is one of the modes in the game, but on the Xbox the focus is on Avatars.

    Avatar Pinball

    The project is coming together nicely, and I am (I hope!) in the final stages of development.

    If I get time, I may release a windows build of the Sock Puppet gameplay (Avatars don't work outside of the Xbox).

    Thursday, June 10, 2010

    Spritefont Effects (Ouline, Dropshadow, etc.) in XNA

    In the course of trying to jazz up the text in my current game, I came across a great little tool for generating XNA Spritefonts with various effects added. Effects include outlining, beveling, dropshadows, and texturing.

    It generates a .png file that you add as content to your project using "Sprite Font Texture" as the content processor rather than "Sprite Font Description". In code, you load it just like any other SpriteFont.

    You can find it here.

    Friday, June 4, 2010

    Something Completely Different...

    A video of my current project:

    Thursday, May 27, 2010

    Converting 3d studio max .3ds files into .fbx format for Xna

    You'd think that importing .3ds files into Xna would be a common enough operation that a quick search would come up with a solution. Think again. I wasted a whole morning trying to find a working method. After a bunch of dead-ends, I finally found the Autodesk FBX Converter.

    You can download it here.

    It purports to convert .3ds, .obj, .dae, and .dxf files to .fbx, but so far I've only tried .3ds.

    Note that I had to select FBX 2010 as the destination format, as the default of FBX 2011 didn't work for me.

    Thursday, May 13, 2010

    More Tunescape Press

    Here is an update on various reviews of Tunescape from around the web. I've been pleasantly surprised to find that there are quite a few gaming websites out there that cover Xbox Live Indie Games. Now if only more people read them...

    Thanks to everyone who took the time to review the game. I really appreciate it!

    Monday, April 5, 2010

    Tunescape starting to get some reviews

    Tunescape has only been available for a few days, but I've already started to see some reaction to it online:
    • xnPlay picked it as one of their favorites of the week, and say "finally a 'gameplay is based on your music' game that works well".
    •  GamerGeddon calls it "a steal at 80 points and well worth checking out".
    Thanks for the feedback!

      So far so good, despite the baby...


      When Tunescape hit the New Arrivals list on Xbox Live Indie Games, my first reaction was "Cool!". My second reaction was "What's up with that baby?". I'm guessing a lot of other people have the same reaction. Oh, well - nothing I can do about that.

      Despite the baby, Tunescape is off to a pretty good start (at least by Indie Games standards). It made the Top Downloads page today, which was a very pleasant surprise. My trial to purchase conversion rate so far is almost 10% 12% 14%,  which I am also quite pleased about.

      Friday, April 2, 2010

      Tunescape is live on Xbox Indie Games!

      Tunescape passed peer review earlier today and is now available on Xbox Live Indie Games for 80 Microsoft points ($1). I know, pretty spendy...

      Last time I checked, it was not yet showing up in the "New Arrivals" section, but if you search for it under 'T', you can find it.

      The Tunescape page on the web-based marketplace is here.

      I've also put together a little promo website:

      Monday, March 29, 2010

      Latest Tunescape Screenshots


      I submitted Tunescape into the peer review process for Xbox Live Indie Games today, so I needed to update my screenshots. This is what the game is looking like right now.




      Tuesday, March 9, 2010

      Platform Game - Main Character

      Sherry has rediscovered her inner doodler and has been helping me with art assets for the platform game. Here's what she has so far for the main character:

      Platform Game

      In game:

      Platform Game

      Thursday, March 4, 2010

      Tunescape Tutorial Video

      This is the in-game tutorial in Tunescape.

      Tuesday, March 2, 2010

      Tunescape DBP 2010 Trailer

      This is the Tunescape trailer for DreamBuildPlay 2010.

      I suck at video editing...

      Thursday, February 25, 2010

      Platform Game - More WIP

      Platform Game

      A little more progress on my platform game. I've now got background tiles, grass and little wee flowers.

      The blurring effect in the background is done in real-time on the GPU. Yay for gratuitous use of shaders!

      Wednesday, February 24, 2010

      Going old-school

      While I've still got work to do on Tunescape, it is starting to wrap up so I needed something else to keep me busy. I've started to work on a new project - a kind of platform/exploration/adventure game of sorts. So far, I've been working on getting the basic platforming elements to feel right.

      If you squint, you might recognize my placeholder player character...

      Friday, February 12, 2010

      Tunescape Update


      I've managed to avoid my standard behavior and have been pushing to try to actually finish (!!) Tunescape. It is in pretty good shape right now, and I've currently got it in playtest over on Xbox Live Indie Games.

      In polishing the game, I've been doing some fun shader work. I implemented a particle system shader for my new explosion effects, and I created a "plasma" shader for the background that uses multi-resolution noise to generate a smoothly moving cloud pattern.