“Game3″ post-mortem. (Or how I learned to stop worrying and love development outside of the DBP competition.)

This game was called “Game3″ just because this is the 3rd XNA project I’ve opened on this computer, and that was the default name.

I’ve put in somewhere between 500-900 hours into this project (schoolwork being mixed in there makes it hard to estimate), and I think that I’ve been very productive in that time. The project is now 8300 lines of code, in about 187 class files.

So, why didn’t I finish in time for DBP? Here are some of the mistakes I made:

  • Overambitious project goals.
  • Picked wrong light rendering design for the design of this game.
  • Underestimated the complexity of implementing some design ideas, such as the terrain, and the lighting set up.
  • Focused too much on building clean, pretty code, instead of hacking together a finished game.
  • Spent too much time building the game engine, and too little time building the actual game logic.
  • Spent two weeks building my own physics engine from scratch, instead of using an existing engine.

Here’s a composite of a few screenshots of my Git commit history:

(Click to enlarge.)

I tried to choose a game concept that was as simple as possible, while still maintaining some of the key elements from my 100+ page outline of a much more complex game.

That said, I was still far too ambitious for a 3 month project. I think that any 3D game that can be competitive with a 2D game is going to take a lot of extra time to polish well. For example, I didn’t realize how much time triplanar normal mapping would take to get right. It’s simple in theory, but getting the slope angles just right, getting the transitions between texturing planes just right, mapping the normal maps onto the correct plane, etc, etc, all took a lot of extra time.

Before deciding to do this project in first person 3D, I read that many people avoid indie 3D games because creating the artwork takes so much longer (or they can’t do it themselves). As one example, it took me about 45 minutes to create the doll enemy model (pretty quick, no?). I figured, well, I can create a 3D model of an enemy in ~45 minutes, so 3D artwork is not a big deal — I’ll just go make the next Halo now!

In reality, the artwork is no big deal. It’s really everything but the artwork that makes 3D much more work than 2D, especially from a first person perspective. When I say “artwork” I mean 3D models, textures, texture mapping, animations.

In a first person perspective, you can see thousands of meters into the distance, but also if the player looks straight down at the ground, since only a 1-2 meters are viewable, we expect to see a great deal of detail. Managing detail at close and far distances well is an order of magnitude harder than managing detail in a 2D game. In a 2D game, or even in a 3D game with a relatively fixed camera perspective (e.g. Starcraft or Diablo), you know how much geometry can be viewable in the worst case, and there’s much less detail scaling needed.

As an example of detail scaling, getting terrain detail to scale well in this game was done over the course of many weeks. Indeed, it’s still not perfect. If you’ve tried your hand at realtime 3D drawing, then you’ve probably done a terrain. However, you may not have encountered the mess of fading textures and specular/normal/emmissive maps between detail levels. I used geometry instancing for the distant chunks, which meant no lights in the distance in my lighting model. Things like this added up quickly.

I thought a bit about what the title of this post should be. A reference to Duke Nukem Forever felt appropriate at first, until I realized that it’s probably not fair to compare my 3 months of development to 14 years of off-and-on DNF development. Hell, even if I am writing DNF-level vaporware, at least Duke Nukem Forever is finally being released, right?

This entry was posted in DBP2011, XNA and tagged , . Bookmark the permalink.

8 Responses to “Game3″ post-mortem. (Or how I learned to stop worrying and love development outside of the DBP competition.)

  1. 3nixios says:

    It’s always a good idea to post-mortem your own projects to see your shortcomings, and in the few projects I’ve worked on, your ‘mistakes’ section reads the same pretty much word for word, I guess every project will go wrong in someway :) .
    That being said I think you’ve done huge amounts of work and should be proud with what you’ve learned and produced, even if the deadline wasn’t met, you can still work on it until it’s playable and this site is great as part of a portfolio.
    Good luck with getting it finished, I’d like to play it ^^.

  2. DJ says:

    {q}in the few projects I’ve worked on, your ‘mistakes’ section reads the same pretty much word for word
    Yeah. These mistakes are so hard to avoid…

    I hope the best, man. It’s really inspiring to see something like this, and I hope you get everything you want out of it. :)

  3. I’ll immediately seize your rss as I can not to find your e-mail subscription link or e-newsletter service. Do you have any? Kindly allow me realize in order that I could subscribe. Thanks.

  4. randka says:

    I’m not that much of a online reader to be honest but your sites really nice, keep it up!

    I’ll go ahead and bookmark your website to come back later. Many thanks

  5. I got this website from my pal who told me about this site and at the moment this time I
    am browsing this web page and reading very informative posts at
    this place.

  6. treat acne says:

    This piece of writing will help the internet users for building up new blog
    or even a weblog from start to end.

  7. I think this is one of the most important information for
    me. And i’m glad reading your article. But wanna remark on few general things, The website style is
    wonderful, the articles is really great : D. Good job, cheers

    My blog post … air conditioner repair boca raton

  8. Wow because this is great job! Congrats and keep it up

Leave a Reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>