Saturday, December 25, 2010
Monday, December 20, 2010
Observatory
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...
Wednesday, December 8, 2010
Water, Reflections and Fish
Friday, December 3, 2010
Shadows!
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
Friday, November 19, 2010
Wednesday, November 17, 2010
Doing Some Decorating
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.
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
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
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
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
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
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
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
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
Thursday, July 29, 2010
Terrain Level-Of-Detail: Dealing with Seams
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:
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:
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:
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:
http://marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d802585505d1
and I have a little promo page here:
http://pinball.nostaticsoftware.com
http://marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d802585505d1
and I have a little promo page here:
http://pinball.nostaticsoftware.com
Tuesday, July 20, 2010
Terrain Rendering Progress
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
Sky
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
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:
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
Friday, June 11, 2010
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.
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.
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
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.
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!
- GamerGeddon now has a full review up.
- The Tunescape Launch Trailer on GameTrailers.com.
- gaygamer says "I honestly wasn't expecting much going into the game. And now I can't stop playing".
- XboxHornet calls it an "amazing little physics/music hybrid".
- The folks at Signed In had a lot of nice things to say about Tunescape on their weekly podcast.
- xblig.co.uk rates Tunescape 4 out of 5, and says "this could be the music driven game to beat this year".
- xblaratings.com rated Tunescape 9 out of 10, saying "This is one of the best musically themed games I’ve played!". Update: They now have a brief interview with me up.
- The Veteran Gamers did a segment about Tunescape on their podcast.
- XBOX 360 Digest gave Tunescape 4/5 stars, calling it "one Indie game that’s hard to put down".
- SFX360 says "this addictive little game can quickly change the way you enjoy music on your Xbox 360".
- Nukezilla gives tunescape a -2 (that's 8 out of 10 on their rating scale), saying "the gameplay is fantastic and the music is great".
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".
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
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:
tunescape.nostaticsoftware.com
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:
tunescape.nostaticsoftware.com
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
Thursday, March 4, 2010
Tuesday, March 2, 2010
Thursday, February 25, 2010
Platform Game - More WIP
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.