BEEP is at the point now where we are cranking out levels and prepping to begin audio work. I’m happy with the gun controls and general locomotion. I have a nice little selection of enemy types (both stationary and ones that chase the player). The ‘AI entities’ ( ie. Finite State Machines with basic ray-casting perception) are fun to play with and can certainly be challenging given the dangerous environments  that host the encounters (lots of ‘death pits’, as I’m calling them).

Level design is definitely the most labor intensive aspect of BEEP’s development. Actual construction of level geometry is constantly being interrupted by the need to switch to an art program to design a texture. Or if it isn’t art, then I get distracted by the occasional tweak to a piece of the level editor or engine code. Level design seems to be the place where 90% of the nagging ‘mini-bugs’ are found and dealt with.

But even though it’s challenging and a bit dull at times, level design has huge pay-offs. It’s a blast to come up with devious scenarios and challenges to test a player. Not only that, it’s crucial to the success of the game. It IS the game. As a developer, I have to remind myself that the gamer isn’t playing your fancy lighting system, or your clever level editor, or your super-slick texture manager. The gamer is playing LEVELS and all that other stuff has to serve that singular purpose.

As I’ve discussed in a previous article, I’m using Maya as my level editing environment. I thought I’d share a quick video to show what a level looks like in the editor.

The level editor is built on top of the commercial 3d software package, Maya. A custom built exporter uses a web of message connections between nodes to define all of the various assets that comprise a level.

This data is traversed by a Python script and compiled into an XML file that is loaded by the proprietary Bonk 2d game engine.

The ‘node’ and ‘message connection’ pattern used by Maya maps nicely to the engine’s object and pointer representation. So if a relationship is needed between two level objects (like one is a child of the other) then this is represented as a message connection in Maya, which is stored in XML and ultimately becomes a C++ pointer relationship in the engine.

I’ll leave you with a screen-shot of what the level looks like in the game with all the decorations applied.

(click for full size)I left the debug drawing on in this image. You can see a blue ray coming out of the robot towards the player. This is his ‘eye sight’ which at the moment is being blocked by another enemy. You can also see some red rays coming out of his sides. These are used like whiskers to tell when he’s about to bump into something.