Dynamic Navigation Mesh with Integrated Obstacles

Tutorial Series Summary and Game::AI++

Alex J. Champandard on November 28, 2007

Wednesdays on AiGameDev.com is dedicated to tutorials that show you how to implement AI into your games. Over the last few weeks, following the designs of readers, I’ve been creating simple behaviors for dogs in a simulation game.

I’m currently on a business trip (the unexpected kind) as well as in the process of preparing for GDC Lyon, so I’ll use this opportunity to introduce new readers to the tutorials so far. If you’re a regular subscriber, you might be interested in reading about the library used by the code samples.

Here’s the list of the tutorials this far:

  1. Building AI for a Simulation Game from the Ground Up

  2. The Backbone of AI Behaviors: Movement and Animation

  3. On the Effectiveness of Random Decisions in Structured Behaviors

  4. A Lazy Approach to Designing Consistent AI Behaviors

  5. Beyond AI Pseudo-code and Towards Sensory Systems

The first items are more design oriented, while the more recent articles get into the coding aspect of things.


The whole tutorial series is based on a library I call Game::AI++. The project started out as an experiment with different kinds of technology that I didn’t get the opportunity to use professionally. I’m extremely happy with the behavior tree approach combined with a parametric tree editor that I developed at Rockstar — so I decided to take things further.

Among other things, I experimented with using tree transformations for planning, concatenative stack languages, and latent search built-in to the language. In essence, the goal is to make it easier to integrate planning and execution of AI behaviors, bridge the gap between designer control and automated reasoning, and deal with all behaviors concurrently.

For more information on the subject, read the following articles:

In the end, Game::AI++ turned out as an extensible decision making and control system — although some of the edges are still rough, as I’ve discovered better ways to implement some concepts.

Release Schedule

I made version 0.2 of the library available in August to subscribers of the newsletter. It has on average a 1:1 code to documentation ratio, as well as over 100 unit tests. Version 0.3 is ready, and supports all the features required by last week’s source code. It’s currently under the GPL version 3, for research and feedback purposes mainly.

For various reasons, I’ve decided to release the latest code only to people who are sufficiently interested! This should help me get the feedback I need to improve the library. So starting from next week, if you want the latest release of Game::AI++, then:

  1. Send me an email. The address is at the bottom of the page.

  2. Make sure you put Game::AI++ in the subject somewhere!

  3. Tell me what you’re expecting from this library and why you need it.

I’ll then send you the source code and follow up by asking you for feedback a week later. For the rest of you, stay tuned to the blog for more details in the future!

Discussion 0 Comments

If you'd like to add a comment or question on this page, simply log-in to the site. You can create an account from the sign-up page if necessary... It takes less than a minute!