Category Archives: Game Art

Got myself a crying, talking, sleeping, walking, ragdoll

Thank Cliff for the title.

Since the last update on the game I’ve mostly been busy working on trying to furnish my algorithmically generated level layouts with, well furniture. I’ve bashed together one set of xml files that attempts to roughly outline what kind of rooms a type of location might have in it. Then I conjured up a second set that describes, for each type of room, what kind of furniture might be in it.

Of course to have any furniture to place in the levels meant I had to model and texture some up at last. So Free Company got a whole bunch of exciting new furniture assets recently; like plates and clay pots! The furniture models have to be all tagged up with meta data in a shiny new tool that I think I mentioned I was starting work on last time. It’s forked from the model viewer and is still evolving as I think of more useful ways to describe furniture to the game. Right now it looks like this:

That’s the ghostly Table O’ Doom asset you can see there.

The whole furnishing system is still pretty primitive, and still has some very obvious bugs but it’s coming along. Here is what it thinks a ‘dining room’ might look like right now:

Generated Dining Room

If you peer closely into the gloom you can probably make out the bug where chairs/stools are completely ignored by the placement system.

Other than that I also managed to fit in some time to fiddle about with Bullet Physics, which is something I’m now looking to to replace ODE with to better cater for Free Company’s physics needs. As you might have guessed from the title I was experimenting with ragdolls and after lots of brain teasing work I was able to get something that is just about acceptable or at least doesn’t feature the model warping all over the screen or shrinking into nightmarish ball. Of course it’s impossible to demonstrate physics in a screen shot so I’ve just wrestled with Fraps and Windows Movie Maker and you this delightful film:

It’s probably worth watching just to hear a nice little bit of music from that all round good guy and friend of the Shed; Sam.


Ambient occlusion, new tools and level generation

So, to follow on from my last update eventually I got settled down into London and after a bit of casting around for employment I’ve settled back into a routine of mostly full-time indie game development again. I still have no income but my brilliant co-conspirator in life is supporting me with food rations and bills. As a result rather than mostly mothballing this place I really need to spruce it up instead and put out some more frequent information on my game development activities.

First up, a little spring cleaning of some badly conceived code; my hex grid. When I initially cranked out the hex grid I naively attempted to map it to a two-dimensional array by adding a little off set if the hex was in an odd row. Unfortunately this offset adding code starts to spiral crazily out of control as the algorithms get bigger as you need two paths for every branch; one if you are on an odd hex row and another if you are on an even hex row. Code was becoming unmanageable and hardly any of it could be reused. The solution, it turns out, is to envision the hex grid instead as having three dimensions or axes – one that passes through each set of parallel edges. To index it to a two-dimensional array you just pick two of these three axes and use them as them to provide your 2D indexes. Most of this wisdom and more was unearthed by reading through this treasure trove of hexagonal maths links compiled by Amit.

I still have a few more algorithms to replace as I revisit other parts of the code but so far its working wonders on my code’s comprehensibility and length.

Next up I decided to revisit Screen Space Ambient Occlusion having previously abandoned it as something too tricky to make it look nice. Luckily since my first attempt the scholars at GameDev had put together a good article and a great forum discussion on the topic. SSAO works better on more dynamic scenes than the somewhat static levels of Free Company, the main alternative would be to calculate light maps during load time (my levels are dynamically generated). So far I’m happy enough with my SSAO implementation though and it also has the advantage of being useable across projects and reacting to any more dynamic stuff that I do put into the game. How does it look? Like this:

SSAO example

The darker image being with SSAO and the lighter without. Its main role is to fill in the shadows in corners that my ambient point lighting isn’t managing to. Hopefully it helps make the level feel a bit more substantial and less artificial.

I’ve also spent some time crafting a basic model viewer app I can use to fix problems on assets by looking at them up close. The isometric viewpoint and dark lighting of the game can hide a lot of problems, which is one of the reasons I like it 🙂 however it’s even better if I manage to catch those problems in the model viewer. The model viewer looks a bit like this:

Shot of the Model Viewer App

So far it’s helped me crack a whole range of animation and texture problems in my assets and it is also proving to be a good base from which to branch off into making other useful tools and test projects.

The guiding focus of all these efforts has been in trying to algorithmically generate  levels that both look good and preferably are hardly noticeable as algorithmically generated at all. So far I’ve got as far as generating random dungeon layouts of rectangular rooms and corridors and I’m now moving on to populating those generated rooms with believable layouts of furniture and items. Finally I’ll add room and level appropriate ‘monster’ encounters and then try to tie together all the subsystems around a super system of randomly generated base level types (e.g. ‘Warehouse’, ‘Castle’, ‘Inn’) and randomly generated goals within the level.

All this is building towards a temporary rogue-like game structure where you form a group of mercenaries to tackle a never-ending series of randomly generated missions that get gradually more tricky as your group gets more powerful. I’m going to build toward releasing that before I move on to creating the high level, principally map and economy based strategy layer that forms the other main wedge of the original Free Company design. Hopefully the rogue-like structure will allow me to a) test and improve this area of the game in a rapid way by getting lots of quick battle maps in front of people as fast as possible b) be lots of fun in its own right c) allow me to build up some kind of fan base to help try to support the rest of the game.


Art: Blending a GIMP

By training I’m mostly a philosopher, and a little bit of a programmer too. What I’ve had almost no schooling in at all is art – bit of a problem for a one man game shop you might think. The last week or so I’ve been trying to catch up and get my artistic basics ‘good enough’ to get the job done.

My secret weapon, of course, is that I’ve been teaching myself how to do arty bits on computers since I was a tiny child and first grasped a mouse and a copy of Deluxe Paint. In fact, it was on the artistic side of game development where I first started making contributions, building 3D models for Half-Life and Unreal Engine 2 in a succession of packages popular about seven years ago. However, it’s not seven years ago and my skills have atrophied a little in the intervening time so it was time for a fresh start.

I’ve begun using two new (to me) bits of open source software which have risen up while I’ve been away from the digital art space. For 3D I’ve opted to make use of Blender, which to me looks a lot like Lightwave used to (but controls almost nothing like it), and for 2D the ‘hillariously’ acroynm-ed GIMP.

GIMP was the easiest fit; with its menus and tools being instantly familiar to anyone whose ever made use of a half-decent 2D editing package. It all started coming back fairly swiftly: layers, dodge & burn, smudge, level adjustments. I’m sure I’m missing out on some amazing new Photoshop feature that everyone is raving about, but I bet it also still starts up super slow.

I’ve not had to really use any manuals or tutorials to get into using GIMP so far; though I did find editing and painting transparency information a bit more fiddly than I would have liked. The one thing I did grab was a whole bunch of free brushes, pretty much at random, so that there were some more shapes than the limited default range to choose from. GIMP has its own brush format but can also make use of the Photoshop brush format so you can pretty much grab anything and everything, drop it in the right directory and it’ll be there.

If anyone out there has any top GIMP tips, tutorials, brushes or plugins that might be useful for making game textures, background art and similar then do let me know as I’m sure there’s plenty of stuff I’m still missing.

Blender has been a little trickier to get into. I expect it could be due to its origins on linux or the mac but it has very non-windows native keyboard shortcuts (ctrl +c and ctrl +s do not do what you think they might). I expect its all configurable somewhere but right now I’m not sure what all the buttons do so changing them is probably not the smartest move. The other hurdle is that 3D technology in games has moved on a fair bit more than 2D technology since I last dabbled so I knew I’d have some more things to learn. I want to make use of normal mapping in my first game so figured getting a good workflow for generating these maps was important. The internet provided its wonderous bounty once again and I found
this tutorial particularly clear for my purposes. I also wanted a clear tutorial on UV unwrapping, because in my previous experience each 3D package tends to have a few quirks in this area, and found a decent summation in the online blender manual, which is a general wealth of information on all things blender.

I also had a bit of ‘fun’ tinkering with the default .x exporter (my current model data format of choice) with it first seeming to export a completely invalid file (with no warnings) and then exporting a model with flipped normals and broken UVs. I did manage to fix it in the end but I’m not entirely sure exactly how I got to the fix so I expect I may have more good times ahead wrestling with it.

As above, if you have anything I should definitely know about blender or any really good resources for Blender + games rather than Blender + films stick it in the comments.

You are formally requested to monitor me via twitter here.