Pathing For Assault
General Assault Pathing
First things first: NEVER use the autodoor/door actors. They are bugged. I have noticed bots often get confused when Door/AutoDoor?s are used. Use 2 pathnodes and force a path between them accross the door.
For every single vehicle path you have, try to have about 3 normal paths nearby. This is good for two reasons: bots on foot will attack/defend from different directions and if the vehicle gets off track, it can use the normal paths to find it's way back.
BlockedPaths, ForcedPaths and ProscribedPaths are your friend. Sometimes, bots just need to be forced:
ForcedPaths
Even if the editor doesn't make a link, you can force it yourself by first finding out the name of the node you want the path to (Properties → Object → Name), then selecting the node you want to make the link from and going to it's properties. Here, go to the Navigation group and head down to ForcedPaths. In the first item in the list, add the name of the pathnode you are forcing a link to. The next time you rebuild there will be a yellow line between the two nodes. This is one-way. To have it two way like a normal link, do the same thing, starting with the second node and linking back to the first.
ProscribedPaths
Set them up exactly like ForcedPaths, but they tell bots that they SHOULD NOT take this path, no matter what. This is useful as sometimes bots keep taking some stupid route and end up stuck, confused etc. When you Rebuild, they will be red paths.
BlockedPaths
Sometimes you want bots to follow a path until something happens (a door closes, something falls in the path). This is what blockedpaths are for. Say you have a blast door that is shut and opens when a particular objective is completed. Put a BlockedPath in front of it then make sure that its bBlockedPath property (or whatever it is called) under Navigation is set to true. Seeing as though you will already have nodes on the other side of the door, force a path from the blocked path to one of the nodes on the other side (and back again). Set the tag of the BlockedPath to whatever event opens the door, and when it is triggered (when the door opens), the bBlockedPath property will be toggled to false which lets bots know they can now go down that route.
Vehicle Assault Pathing
More: Pathing For Vehicles and Pathing 2k4 Flying Vehicles
ANY objective that requires the bots to use a vehicle, even if it is not mission-critical, should be given a VehiclePathName. You may have noticed this property before, here's how to use it:
In the GameObjective group of the objective, there is the VehiclePathName field. Here, you enter the name of the vehicle-accessible pathnode closest to the objective they should be trying to reach.
Another thing about vehicle pathing: When vehicle Assault mapping, remember ANY navigation points can be used by vehicles as long as bVehicleDestination (under Navigation) is true. In fact, you don't even need RoadPathNodes at all. The only benefit of using those over normal PathNodes is the distance they link over.
Vehicle paths should be as simple as possible: try to keep them as curves as opposed to sharp bends. The reason is this: If you have an L-shaped bend with one pathnode, it looks like an L to the bots. They don't slow down for it and generally crash. If you use a lot of pathnodes close together to round off the corner (say, 5 pathnodes, 300 Unreal Units apart in a curve, making up the corner), the bots will better judge the corner and slow down.
Defensive bots will not use their vehicles unless they see an enemy to attack with. Not by default. It is turned off in the vehicle code. Turning it back on is a simple matter of adding a few lines and saving it in myLevel. These scripts are like those used in AS-Confexia. These are as so:
class Blargh extends Foo; //Foo can be any one of the Vehicle classes var (Vehicle) bool bDefensiveUse; function PreBeginPlay() { bDefensive = bDefensiveUse; Super.PreBeginPlay(); } defaultproperties { bDefensiveUse=True }
AI Scripts
The AI scripts system is bugged. I noticed this early in the making of HighRise. Here is the way it works:
In an Assault map, every AI script must be linked to an objective. The AI in UT2004 is very intelligent, but not intelligent enough to be able to decipher a mapper's random tags and events.
You do this: The group of AI scripts you want defenders to use when they defend an objective you give the same tag to. MyTag. Then in the properties of the objective they are to defend, go to the GameObjective group. Look for the DefenseScriptTags field. Enter MyTag (subbing in your actual tag obviously). The bots will now know what to do come that objective.
This must be done for every single AI script in the level, there cannot be one single one that is not attached to an objective of some kind or all of them will fail.