Simple AI Escort for AvP2

The following prefab is a simplification to the original AI Escort prefab; it has less triggers, without affecting too much it’s performance. I don’t know whether I’ve stated this before or not, but this page CANNOT REPLACE modmaker’s tutorial and the docs that came with the tools (I’m talking about the avp2_AI_notes.doc file). Read them if you plan on expanding this prefab; you’ll need some info about AI Volumes and AI commands that can be found in those docs. If you’re only after a copy-paste prefab, or you’re experienced enough with AvP2’s AI, you can skip them.

Describing the problem

The problem itself is the same: what does an escort actually do? It follows the player anywhere he/she goes and, when spotting an enemy, opens fire. The AI that escorts the player must be able to receive orders like ‘Follow me’ and ‘Hold ground’. Either way, the AI must attack any enemy within his range. So all we have to do is to give our AI an iddlescript and tell him to run towards the player by sending it the message:

killscripts; iscr(run; mt player; end;)

We can continuously send this command using some sort of loop. The fact that it’s an iddlescript will allow the AI to break the script to engage enemies. Although it’s something that we want, it does have one bad effect: the AI, having the script terminated by engaging the enemy. However, the next message will tell it to move on. How do we ‘persuade’ this pesky marine to stop following us? Well, that’s easy: kill its scripts (the ‘killscripts’ command) and terminate the loop. To make it follow the player again, give it a script and restart the loop

Looped triggers

Place two triggers, both of them with a ‘SendDelay’ of one second and make
them trigger each other: triggerA should have as target triggerB and
vice versa. Trigger any of them and you’ll get a 2 seconds period loop. Each
two seconds triggerA gets triggered. To break the loop, send the ‘lock’
message to one of the triggers. To restart the loop, send the ‘unlock’ message
to the locked trigger and then trigger any of them. That easy.

In our case, we’ll need just one loop.

The scripts

The following images contain explicit scenes and should not be viewed by any audience. This images are for mappers’ eyes only 🙂 First, the structure of one AI escort unit:

simple_escort1The EAIMarine0 is the A.I. unit that gets to follow your ass. loopA0 and loopB0 make up the ‘short-fused’ loop.

FollowMe0 unlocks the loop and restarts them after starting a new script. HoldGround0 does the opposite: kills all scripts and locks the loop. Here are the settings and commands for the AI unit:

escort2
I know this is a little bit unusual, but I’ve set the AI unit to be indestructible. That was  achieved by setting the ‘NeverDestroy’ flag to TRUE (see ‘DamageProperties’ for the AI unit).
However, the interesting part takes place in the ‘Commands’ section and the goals selected in ‘Goals’. As you can see, I choose only the ‘Attack’ and ‘Iddlescript’ goals:escort3

The third goal makes the AI look more natural while standing still. The other stuff I was talking about is the ‘Commands’ section. Placing messages in here will allow you to use the AI unit much like a switch:

escort4

So, if we press ‘USE’ while facing EAIMarine0, we’ll trigger either FollowMe0 or HoldGround0.

As stated earlier, these two triggers unlock and start the loop or do the opposite. The settings and targets for the FollowMe0 trigger:

simple_escort5

What does it do? Unlocks and starts the ‘short-fused’ loop that sends the iscr messages. It also starts the iddlescript for the AI unit, makes it say something and allows it to move anywhere (leash length is set to 0).

The loop has the loopA0 trigger and loopB0 trigger. Those two are almost identical, except the last target. The settings and targets for the loopA0 trigger:

simple_escort7

The loopB0 trigger has it’s second target set to loopA0. Except that, they’re twins.

From ‘HoldGround0’ we’ll expect to kill all scripts and lock one trigger in our loop:

simple_escort6

And you were right; it also makes the AI say one phrase and gives him a 384 units leash around the point it was ordered to guard. If you plan to add more units like these, the only thing you should be aware of is to change the ‘Commands’ section so that EAIMarineXX sends his messages to FollowMeXX and HoldGroundXX. The triggers themselves are excellent connected, so you won’t need to change anything there when copy-pasting folders containing units like these; your only concern will be the ‘Commands’ section. So, copy-paste whole folders and change the ‘Commands’ section for each AI unit.
It may rarely happen that even after you’ve told the marine to hold ground, it may still follow you; that’s because the other trigger already got … triggered and it was only a matter of time (those 3 seconds) until it managed to send it’s messages. You can shorten this amount of time; however, you’ll be starting and ending too many scripts per second, so it may cost you extra CPU. It’s a nasty choice: better AI performance vs. better overall map behavior. Three seconds were a good compromise. However, feel free to toy with this; remember, the power of the computers grows every year.

The .zip file hosted on GoogleDrive will have both the .ed and this .html page. The .ed file is a small map, that has one EscortUnit and a multispawner, triggered by 4 wall
switches. Toy with your escort, make him guard you or their last position with or without enemies. See how they behave. Expand it by means of Copy-Alt_Paste and editing the ActivateOn and ActivateOff fields in the Commands section.

Hopefully, this will spell the end for those SP missions that left you alone to deal with your enemies.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s