Home | Rules and Guide | Sign In/Create Account | Write a Post | Donate | #ludumdare on irc.afternet.org (Info)

Ludum Dare 23 — April 20th-23rd, 2012 — 10 Year Anniversary!

Ludum Dare 22 :: December 16th-19th, 2011 :: Theme: Alone

[ Results: Top 50 Compo, Jam | Top 25 Categories | View My Entry ]

[ View All (Compo, Jam) | Warmup ]


Cavern Ghost: Postmortem

Posted by
August 31st, 2009 8:27 pm

First off: Many thanks to PoV and phillhassey, and others who donate their time to this event – Seriously, they don’t get enough credit.
LD is great partly because it’s so well organized – thanks to having the infrastructure and so many people involved it’s easy to get and stay excited about the idea – I think this is a major component of the fun in LD, and it wouldn’t be possible without a lot of effort on their part. (besides of course, what fun would going insane be if you weren’t alongside 150 of your closest friends? :) )

So, on to a postmortem of my game…

My project went immeasurably better than my last entry, in LD11; To recap, in LD11 I spent about the first 30 hours building (And debugging) a rendering engine, which didn’t bode well for coming up with anything spectacular in the remaining time. I was also preoccupied with a few other things (including an addictive online game – hah). Ultimately though, I wound up with a minorly neat techdemo type game that was mostly thrown together near the deadline; I didn’t really want to finish it at all really, besides just to have something playable.
This time around, I had most of the rendering code done beforehand (and released in a library) – I didn’t get very tired of working on this project until very nearly the end – it was a very enjoyable experience.

A list of things that went a lot better than I planned:

  • The pre-LD library release
    Having a library of basic rendering / audio code made a lot of the menial tasks of game development a thing of the past; I still wound up having to write some additional rendering code, but it wasn’t a long and drawn out process of debugging to make it work.
    All of the graphics in my entry are in fact procedurally generated or rendered by simple code, there are no art assets (except perhaps the font; that’s a windows system thing) – Having a coherent graphics library helped with this substantially. (I’m not an artist, you might be able to tell)
  • The cavern generator
    In case you hadn’t noticed, the cavern is randomly generated every time you play the game – Most of my effort in this LD went into building this cavern generator; Ultimately I wound up with some simple rules for generation that worked rather well. I had to special case some logic about which caverns are allowed to connect to others, due to some really odd glitches when it was completely random (sometimes a connecting passage would run on top of another cavern somewhere.) – But the end result is really rather nifty; It sometimes builds some insane and highly unusually shaped caves, and it always connects all of the caves together. If I actually had an interesting gameplay mechanic, this would have been an excellent platform to execute it in :P
  • Other technical things
    I love LD because it’s such a good platform for just trying random stuff out. One thing I did in my entry was to split the rendering across multiple threads – So there’s a one frame lag in the world position, but it’s not noticeable at all in the game. The helper thread renders the cave world to a backbuffer one frame ahead, and then the next frame that backbuffer is copied, and used with the lighting code to composite the final output bitmap. I thought it would be harder but the simple signalling system I used was rather painless to implement, and I guess I’m fortunate that my rendering was simple enough to split off without having to deal with more complex synchronization. So if you’re on a multi-cpu system, you get a slight speed boost from this :) (And I did test that it works fine on single-core systems as well.) Additionally, this second thread performs all of the cavern generation, which leaves my main window thread free to render a progress bar – Having the player wait while the game appears to be frozen didn’t seem like a good idea.

And, things that didn’t quite go as planned:

  • The Theme
    This theme was really the sticking point for me – I couldn’t come up with any gameplay ideas that I thought would be doable in the time limit; And I wound up not picking one to attempt until it was too late to do anything serious. As such, my game has a very simple goal. One of the early themes I came up with was one of “Exploration”, but I couldn’t work out how to fit that into a game without being boring and repetitive. So, I guess you’re free to explore the game world in this game, and if you don’t want to explore, there’s not much to it :)
  • Music
    Hey! I had music! I’m reasonably happy with that. It’s very basic, and procedurally generated (just a set of predefined sequences playing with a random base note)… I just feel that so much more could have been done with this.
  • Rendering speed
    Well, everything is software rendered. I was so happy to use my brand new shiny rendering lib – but it is a little on the slow side (it’s highly generic) – some of you have noticed this, on slower computers. The lighting effect in my game is built using essentially a pixel shader that copies pixels from a backbuffer to the front buffer with some lighting value – It’s rather far from the most optimized way to do this… However, I expect the game will be playable on most semi-modern computers. If I had to do it again, knowing what I know now, I would probably opt to set up direct3d or something, and use hardware rendering for this effect.

Overall, as I’ve said, I had quite a lot of fun this LD, and I think I’ve come up with a number of good points I can improve on: I should probably work to secure gameplay sooner, even if it means trying something that doesn’t seem possible. I should probably expand my rendering library to make it easier to import external graphics, so I won’t be so tempted to procedurally generate everything (Or just build much better framework code for procedural generation)… And all games could use to have more cats in them.

That is all, thank you for your time :)
-Stephen

Tags:

Leave a Reply

You must be logged in to post a comment.


All posts, images, and comments are owned by their creators.

[fcache: storing page]