Gamasutra: The Art & Business of Making Gamesspacer
View All     RSS
October 20, 2017
arrowPress Releases

If you enjoy reading this site, you might also want to check out these UBM Tech sites:


Coding the Sheeple: AI in a Realtime Physics World

by Davey Kerr on 02/03/15 01:07:00 pm   Featured Blogs

1 comments Share on Twitter    RSS

The following blog post, unless otherwise noted, was written by a member of Gamasutras community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.



Designing and programming the Sheeple AI was very challenging. I realize it's not the most complex artificial intelligence ever made, but it was hard enough. It's mostly state machines controlled by fuzzy desires, plan lists, pathfinding (no waypoints), memories, timers, and various stats.

It's harder to do AI when you're in a realtime physics world, where all sorts of things can happen at any time. By contrast a turn-based tile-bound system doesn't have the same concerns. One of the toughest things for me was just having the sheeple wait. Wait between actions, pause, to look like they're contemplating... instead of just doing everything immediately whenever they want to. It's also hard to explain why this was hard.

Their brains are composed of a "problem -> solution(s) -> plan(s)" system. They have one overarching goal (problem) that is picked from a priority-sorted list of problems, then N solutions are calculated to complete that goal, and each solution can have M plans (actions) to do. Each plan is a concrete action, like traveling to point X, or opening a fridge. Each solution is a group of related plans, like "open fridge, check fridge", or "find path, wait, travel". Solutions and plans are stored in a list with an index that increases each time a plan or solution is successfully completed. When the plan index counter reaches the total number of plans, the next solution is enacted. When the solution index counter reaches the total number of solutions, then the problem is completed successfully. This has the benefit of multiple problems/solutions reusing the same plan logic, such as traveling. There is a "plan_failed" flag that can force a problem recalculation at any step, such as if they get stuck traveling. Problem resolution is also convoluted and is done at the start of each AI step. To cut down on CPU, only one top-level AI is run per frame (problems/solutions) but the atomized plans (traveling, etc) are run every frame.

[VIDEO - Sheeple Development]

We all go a little crazy coding sometimes...

One failure on my part was avoidance AI. Sure, they don't get stuck, and they do go around each other. But they do so in a very unnatural way, using strong repellent vectors. For the longest time they would encircle each other endlessly until I added a dot-product facing-plane test that checks if their directions are in conflict or not. The AI is fairly robust though, fast, doesn't crash or leak memory. The Sheeple will find the nearest repeater, fridge, and vending machine on their own, and if there isn't one, they will react accordingly. They don't die of starvation, but they still get hungry standing in front of that repeater. But what is that white stuff getting sucked out of them? And where is it going?

[RESULT - Sheeple Brochure]

PS. Great time for a hard drive crash! I test-rendered these videos shortly before my hard disk got corrupted beyond hope. It isn't polished, I was going to redo the narration and tweak it, but this will have to do. Gotta move on... will be covering the drone enemy AI next.

Related Jobs

voidALPHA, Inc.
voidALPHA, Inc. — Emeryville, California, United States

Software Developer
Infinity Ward / Activision
Infinity Ward / Activision — Woodland Hills, California, United States

Senior AI Engineer
Wargaming Sydney
Wargaming Sydney — Sydney, New South Wales, Australia

Senior Software Engineer – C++, Game Tech Development, Render
Insomniac Games
Insomniac Games — Burbank, California, United States

Engine Programmer

Loading Comments

loader image