Archive for December, 2010

Tools we use

Monday, December 13, 2010

In the coming months we’ll try to give you a small look into the kitchen of Catnip Games. There’s a lot happening behind the scenes:

We’re working on a  Zombie Survival game together with Projectorgames. Martijn is coding the game engine, squishing bugs and fixing Govert’s pipeline when needed. And Govert is modelling, animating and rendering away, occasionally reworking his art pipeline to have all those sprites rendered in one go.

Then there’s our “pet summer project” RPGM which from a simmer went to taking a day (up to two) a week, with the volunteers still pitching in regularly, but as it’s mostly code for the world generator there’s not much to see, and thus not much to show either. Move along…

Bullet Crave is frozen until further notice, but it is far from being off our minds, we’ll be probably reworking it with the new game engine around second quarter 2011. I was about to say “February”, but I’m learning to keep the deadline vague enough or else they make that well known “whooshing” sound as they go by.

Lets see what could we use for show and tell right now? a screen shot of our node setup in Blender will do:

Node Setup in Blender

Node Setup in Blender

This is just a small example of a pipeline here’s what it does:

From one render layer it almost directly gets the shadeless diffuse (colour) of the model and makes the diffuse.png.

From the other render layer, in which a special height color material is used it jumbles the orientations so the normals fit our game engine, add the alpha and makes the normal.png.

Then from the same layer it takes the height colour (black=floor to white=ceiling)  rips it out and puts it back in so we can code height into the RGB channels of the height.png, because we need that much precision.

Of course this all would be easy peasy if one sprite was enough, it turns out for the levels we need 4 angles (3×4 sprites), then for the animated stuff we use 8 frames for each sprite under 16 angles (3x8x16 sprites=384), and then all those sprites have to be put into a sprite sheet, then the height has to be set and some magic fairy powder added (that’s Martijn’s job) and you have a game…pfew.

Soo, have a nice week,

Govert. /aka Hoxolotl.


Saturday, December 4, 2010

The worlds in RPGM are randomly generated – random geography, random people, random histories. Yet we want players to have fun playing adventures in them. The natural line of thought would be to also randomly generate the stories for these adventures. This is easily said, but if you’re a game developer or academic involved with AI, this should raise several red flags.

The current state of the art for random story generation is not glorious. In the academic world, the main focus these days is on story telling, guiding players through game content in an interactive way that keeps the game fun. While ofcourse very interesting, that’s not what we’re talking about here. The few bits of actual random story generation research out there deliver results that read like it was written by a four year old. With ADHD. This did not seem like a good direction for RPGM.

So instead of randomly generated stories, we’ve chosen a different approach: We apply prewritten stories to a generated world. We swap out the main characters for those that exist in the world and make them play out the scenario. While trying to describe this system to others, it hit me: We’ve introduced Narritivium. Narritivium is a concept thought up by Terry Pratchet for the fantasy world of Discworld. It is that which compels stories to happen. Narritivium is what makes the damsel in distress wait in her tower for the eligible bachelor hero, instead of, say, hitting the guard with a frying pan at two in the morning and making a run for it. It is the stories wanting to happen.

In our worlds, we’re making stories happen according to predetermined scripts – the actors change, the settings change, but the stories remain the same. It is how we can fit human-written narative in an otherwise completely randomly generated world.

Now, ofcourse all of this is a gross oversimplification of our actual system – it’s actually growing into an immensely complex beast of a system. But we’ve had our first randomly generated story to go help a farmer in the tavern, and it works!

To quote ‘The science of Discworld, part II’:
“If you understand the power of story, and learn to detect abuses of it, you might actually deserve the appellation Homo sapiens.” I wonder if it also counts when you’re the one doing the abusing yourself?