Enemy AI

by Forum_account
[Share] [Zip]
To download this demo for your Linux/Mac installation, enter this on your command line:

DreamDownload byond://Forum_account.EnemyAI##version=4

Emulator users, in the BYOND pager go to File | Open Location and enter this URL:

byond://Forum_account.EnemyAI##version=4

1597 downloads
Version 4
Date added: Jun 28 2010
Last updated: Jan 14 2011
17 fans
Enemy AI
A sequence of examples that start with simple enemy AI and introduce new features one at a time. [More]
This isn't exactly a demo. It's a sequence of examples that start with simple enemy AI and show how to add features of increasing complexity.

The package includes 15 examples. Each example shows how to implement a distinct feature useful for enemy AI. The concepts are explained in detail.

The examples cover things like:

• How to manage AI loops efficiently with thousands of mobs. (NEW!)

• How to create mobs that attack only when provoked and mobs that don't.

• How to use a simple state machine to create mobs that have a chance to run away when they are weak.

• How to create mobs that call for help so their allies will join them in combat.

• How to evaluate the utility of a situation and various actions to determine which action yields the largest increase in utility.

• How to couple utility functions with state machines to create mobs that can decide what action to perform and execute a multi-step action.

• How to make mobs run away to good hiding spots when they get weak.

• How to organize your AI code so that it doesn't get out of hand too quickly.

The package also includes ten exercises you can try to test your understanding of the concepts (complete solutions are provided for three of them).

Check out this blog post for instructions on how to run the examples.

Advertisement

Comments

FIREking: (Jan 9 2013, 6:44 am)
If you kill a mob right in front of a hiding space, it is possible that the mob will try to choose this hiding space to hide in. Here's some code that can make it choose the farthest away hiding spot:

            ai()
if(dead) return

if(state == NORMAL)
get_target()

if(health < 10)
world << "[name] runs and hides!"

// hiding_spots is a global list of the locations of
// all instances of /obj/hiding_spot.
var/dist_max = 0
var/spot_choose
for(var/spot in hiding_spots)
var/this_dist = get_dist(src, spot)
if(this_dist > dist_max)
dist_max = this_dist
spot_choose = spot
hiding_spot = spot_choose
state = HIDE
return ai()
Phat T: (Oct 30 2012, 2:41 am)
hello there. I`m wondering if you can make tutorial how to prevent AI from walking diagonally. And how to make AI use projectile. Ty for youre respond!
Forum_account: (Jul 21 2011, 9:48 am)
Phoestre wrote:
Explains a lot if you are experienced with DM but not AI. However ai proc seems not to be efficient, still a good starting point for AI beginners.

Thanks for the positive feedback!

There is an example in this demo (I forget what number it is) that shows how to improve efficiency by deactivating the AI loops for mobs when a player isn't nearby.
Phoestre: (Jul 21 2011, 9:41 am)
Explains a lot if you are experienced with DM but not AI. However ai proc seems not to be efficient, still a good starting point for AI beginners.
Lodenis: (Jul 12 2011, 1:15 pm)
Really good, but quite hard to understand if you haven't coded similar to this...