Postmortem: Cacodemon’s Barbecue Party in Hell

Little over month ago I released a small done-in-under-24-hours game called Cacodemon’s Barbecue Party in Hell. This is a little summary of what I learned from the development of the game.
Mr. Cacodemon
There are two ways you can prototype a game. Either you have a very clear goal (and possibly a written design) of what your doing or you have a very vague idea and you pretty much make the game as you go along. Cacodemon was of the later kind.

A year ago I played around with an example from a physics tutorial. In the example I could bounce and nudge blue cubes with my mouse cursor. I remember that it was awful lot of fun trying to balance a box on top of the mouse cursor. I ended up wasting hours playing around with that physics tutorial example.

Two months ago (one week before the turn of the month) I was wondering what game should I create for December. I remembered my experiences from the physics tutorial so I decided to design a game around balancing things with mouse cursor. Before I started the implementation of the game I came up with using Cacodemon as the main character, mostly because he was round (the physics model only supports cubes and balls) and because he could float (so moving him around with mouse cursor would be logical). The goal of the game I was to implement would be to sort souls (would fall from the sky) into different compartments. My design document

With this initial design I launched into production. As soon as I got the basic implementation together I found out that spinning the “souls” was way more fun than sorting them out. So I knew I had to make that the primary gameplay mechanism. The reasoning behind this being that the more fun the primary mechanism of a game is, the funnier the game. So I kept a small design break (washing the dishes) and came up with the “spin the kittens to get their fur off” -design.

The plan at this point was to make a game where Mr. Cacodemon was working at the eternal soul burning unit. And everybody knows that kitten fur is the number one cause of pollution in hell. So kitten and their furs would have to be burned in their dedicated ovens.

It was very late in the development that I came up with the barbecue theme and decided to go with it.

Kitty So Cacodemon was definitely a game born out during the development of the prototype. The original idea was way crappier than the final game. And I don’t think I would have thought of the design unless I had stumbled through all these steps in the development (with an open mind to tweak the game design as I went along).

So the #1 thing that went right was to let the game its own course, not restricting it to the initial idea.

The #2 thing that went right was the momentum of the project. Ever since I finished Jimmy’s Lost His Marbles I don’t think I have really pushed myself to work on these prototypes as fast as I could. And that is usually a good thing, but most of the I just end up wasting the development time in the parts of the game where it matters the least: graphics. This time around I set myself to create the game in one day. This goal gave the development a very nice speed which meant that I focused on the stuff that matters: gameplay.

As happy as I am about the development smoothness of Cacodemon, there’s always the other side of the coin. The very tight schedule and rapid design changes also introduced some problems. The biggest being the very low gameplay meaning of the oven. The oven was a little bit of a left over from the initial soul sorting design.

The oven has a great potential for a nice simple risk/reward game mechanism. The player could decide to bounce around with the kitten to get a better a score (risk being they could drop the kitten) or they could throw them into the oven and get a even better score. The problem was that if I punished the player too heavily on not getting the kitten into the oven (not allowing her to get the score for that kitten unless she tossed kitten into the oven) I made the game too difficult for the beginners. If I didn’t punish the players heavily for not getting the kitten into the oven the reward you get for doing so seems very lite. I mentally wrestled with the problem for a while and decided to go with the beginner friendlier version.

Overall I’m pretty happy with the way Cacodemon turned out to be, the only thing that really pisses me off is that I didn’t think of naming the game as “Pussy Shavers from Hell” as Joystick suggested.

94 Responses to “Postmortem: Cacodemon’s Barbecue Party in Hell”

  1. Decipher Says:

    Well, I’m not sure what physics calculations go behind the game but compared to other games of yours interestingly Cacodemon was damn slow on my machine [specs are below]. Plus to this, since colors and pleasures can’t be discussed I would prefer the mode to the kitten grilling :). Finally, sounds a lot more funnier than ; you know the latter sounds erm kinda disgusting :P.

    Well that’s it, here’s my two cents.

  2. Decipher Says:

    Oops, forgot the part sorry for double-posting. There it goes :

    - Intel Pentium 4, 3.6 GHZ
    - 1GB GeForce 7950 GX2
    - 2GB RAM

  3. petri.purho Says:

    I honestly don’t know why the game lags on your machine. It “shouldn’t” do that :), your computer is way past the required specs for the game.

    The physics model is actually a bit easier on this game that it is on the others, so the only explanation I have for lagging is that my code and your hardware don’t mix :)
    If you haven’t already tried, could you download the test builds and test if they also lag on your computer? That’s pretty much all the tips I have for getting the game to run.

  4. Decipher Says:

    First of all my first post seems a little bit out-of-english because i discovered that wordpress does eat the content between the < and > characters which I use as quotation marks.

    By the way. The interesting part is the original executable works almost perfect but the test builds are more slower than the original one :). Interesting isn’t it? I think you don’t like high-end PeeCees :P.

  5. petri.purho Says:

    Oh that explains it, why I had little trouble understanding your comment :) I thought it was my limited understanding of the English language :)
    That’s true it’s very interesting that the newer executables run much slower. I can’t really figure out why is that.

    But it’s true that I’m not a very high-end PC person :D My current computer is so old, that I’m too embarrassed to even post it’s specs. I should really update my PC, it could even help me out with the development.

    At the moment I’m compiling for you a new test version, but it takes a little while so I’ll post here when I have it running and zipped. Hopefully this new version works a little better on your over the top computer :D

  6. petri.purho Says:

    Ok here’s a test build for you to test if it speeds up the game:

    I came up with a theory that could explain why cacodemon lags on your computer, but it isn’t fixed on this build :) Does the game run smoothly for a while or does it suffer constantly from a bad performance. In other words is it
    laggish all the time or just from time to time?

    If it lags from time to time, then I might know the reason…

  7. Decipher Says:

    Well as you told it exactly lags from time to time. And I think I also find something. I remarked that when the kitten spins it gets even slower and that has nothing to do with your code but the SDL_rotozoom’s code. Well I have used SDL a lot but am not that familiar with SDL_rotozoom, and I pretty much think that < SDL_ Series > suck; I prefer to use my own engine. Well that’s it and yeah test build works < almost > perfect :P.

    Oh, finally, you’d be one great game developer ’cause you pay attention to feedbacks ;)

  8. petri.purho Says:

    It might be SDL_rotozoom, but it should really be that slow. I know that software is pretty slow when compared to hardware accelerated 2d graphics, but I don’t that thats the reason why it lags.

    I suspect it’s because of my poorly done resource handling. I change the image of the kitten when it spins at a certain speed and every time I change it I load it from the hard drive. I know that this extremely stupid way of doing it, but at the time of the development my engine didn’t support caching of the resources. At this moment there’s a interface for doing the caching, but it doesn’t have the implementation yet. I’m working at it :)
    I’ll try to get that fixed on the next version of Cacodemon, which I’m also working at the moment. And thanks for the bug report :)

  9. Roman Alberto Says:

    nice site