Section IV - Fritzbot Actions
Basic Info
Okay, you've already learned all about creating the actual paths the bots travel through the map, but what about all those environments that require certain tasks? Well that's where Fritzbot actions come in. Essentially they are like nodes, but they help instruct the bots what to do at given spots in the map. All waypoint files created for any RTCW Multiplayer map is made up of nodes, actions & paths. Actions don't need paths, but there at least has to be one action per map, and it must have valid properties (there will usually be more than one action per map of course)
The rule of thumb is not too lace a map with too many actions, they must be strategically placed to be effective (usually any given map shouldn't require more than say 50 actions). Improper action placement can make a map run like crap with the bots. So it's best to take you're time and double check you're work often. Also remember actions don't have to be set for both teams, some can be for allies only, some axis only, some for both, it just depends on the situation. In these next two sections we'll learn the in and outs of actions, and remember when in doubt load up an already completed waypoint file for assistance. This section is going to be kind of long, but there's a lot of ground to cover.
Action HUD & Finding Action Info
Now the Action HUD isn't on by default, but to turn it on in game after the waypoint editor and such is all loaded open the console and enter /node_drawhud 2 then press enter, you should now see an action HUD similar to the one pictured below.
This works in much in the same way as the Node HUD, but it displays info about the action you're closest too. Below is an explanation of the above HUD options. Most of these we'll get into in this section, some in the next section.
Action Num = Displays the number of the action you are closest too, this number is also displayed above the action itself.
Allied Obj = This is the specific action set for the allies for the action you're near. By default it's set to -1
Axis Obj = Same as above but this is the axis action set for the action you're near. By default this is also set to -1
Action Group = This is the Ggroup ID the particular action is active in.
Active Forever = Indicates if the particular action is active no matter what, regardless of the Goal ID
Closest Node = This is the node the particular action is closest too.
Action Radius = This is the logical area the action takes up on the map.
Action EntNum = This is the Entity number the particular action is linked too.
Action Classes = This is used to tell the bots which type of class (Soldier, Medic, LT or Engineer) can use this action.
Linked Actions = This is used to link certain actions to the given action.
As you can see the options differ slightly from the nodes, but that's mainly because Actions require a little more conditions than nodes, but at the same time this also adds more depth to waypoining maps. It may seem daunting at first, but the actions can be very powerful and over time you'll get the hang of it.
Another way to obtain action info is through the console. This works just like the node one mentioned previously in the guide but displays info about the given action in the console. To view the information about a action in the console say you wanted to find out Action 3's settings. Open the console and type the command /g_action_info 3 and hit enter. You should see a list of settings pertaining to action 3 in the console.
Adding Actions
This really isn't much different than adding nodes. Just stand where you want the action to be placed, then open the console and type the command /action_add then hit enter. It'll then add a new action right where you are standing. Be warned though you will not see the action until you set either an Axis or Allied objective, otherwise it remains invisible. Don't get thrown off by this!
When adding actions make sure to add them fairly close to nodes, if you try to place an action nowhere near a node Fritzbot will refuse to place it, it HAS to be near a node. Also try to place actions logically and strategically and where they can be accessed by the bots without causing troubles. The maximum number of actions you can place in a map at a single time is 256 but you shouldn't need anywhere close to that amount. Actions also follow the 3.5 second rule but they don't need actual paths in between each other or between them and the nodes.
Deleting Actions
At present time there is no way to delete actions singly but you can do the same type of thing with actions as with nodes to make them unavailable. Bots won't even acknowledge actions that don't have objectives set for them, so to remove an action just simply set the Axis and Allied objectives to -1, say you wanted to make action 5 completely unavailable. Go into the console and enter /action_axis 5 -1 then hit enter, after that enter the command /action_allies 5 -1 and hit enter. If done properly the action should disappear and there you go, action deleted (well in a sense anyway).
A secondary method of deleting actions is to wipeout every single action in the map. To do this open the console and enter /action_clear then press enter. Every action that was on the map before should now be deleted. Use this with caution just like the node clear command. If you accidentally save after this and you didn't intend too you'll lose all you're actions previously placed so be VERY careful when using this command.
Moving Actions
Moving actions is no different than moving nodes really. Let's say you want to move action 3 from it's present location to new one. Stand exactly where you want the action 3 moved then bring down the console and enter the command /action_move 3 and hit enter. The action will now be moved to the location where you are standing. Pretty easy huh?
The Goal Tracker & Group ID's
Before we start getting really into actions we must go through the process that actions go through for activation and deactivation first and how Fritzbot does this. I want to tell you first that this can be very confusing at first and it can throw you off a lot but working with the goal tracker and group ID's can create a very well made and powerful waypoint for a map so it's essential that you know and understand this stuff, at it's core the whole entire action system is dependant on the goal tracker and action group ID's.
Okay, by default at the start of ANY map the Goal Tracker is at 0, all actions with a group ID of 0 are activated at this point, all other actions are disabled if they don't have a group ID of 0. Now the goal tracker will increase but only after certain events. The following is a quick overview of which events increase/decrease the goal tracker. The Goal Tracker increases by 1 if either documents are taken or a dynamite objective is destroyed. The Goal Tracker decreases by 1 ONLY if documents are returned. Checkpoint and Spawn flags have NO effect on the Goal Tracker, they can still have group ID's set but the actual flag status won't effect the goal tracker.
Okay now it's going to get confusing. If the goal tracker increases from 0 to 1 all actions with a group ID of 0 will deactivate and all the actions with a group ID of 1 will activate. Now let's say you have two dynamite actions set to group ID 0 and only one is destroyed that destroyed objective WILL increase the goal tracker by 1 but the other is carried over to the next group ID number which is 1 and it remains active. Once that carried over action is destroyed it WILL NOT increase the group ID. It gets even more complex when we start getting into scripting in a couple sections.
The Goal Tracker & Group ID's aren't limited by a specific number, a single map can have many different goal numbers. The best thing to do is to break the maps objectives into specific group ID's before you start placing actions. Let's take mp_castle for example. Here is a quick list of all the objectives on that map...
Allied Objective - Destroy Crypt
Allied Objective - Steal Obelisk
Allied Objective - Destroy Hallway Gate
Allied Objective - Destroy West Gate
Allied Objective - Escape with obelisk
Now let's break these down into group ID's, for each action that links to the above objectives and any other actions you want active while the given objective above is still available use the group ID's we are defining below. All objectives that are available from the start of the map should be part of Group ID 0. Remember the bots follow the actions by comparing the actions group ID with the current state of the Goal Tracker and use the action based on the results, if the numbers aren't the same the bot ignores the action, if there the same he will use that action. Remember this is just an example other maps may require more or less depending on how many objectives and how they are setup.
Group ID 0 - Destroy Hallway Gate, Destroy West Gate & Destroy Crypt
Group ID 1 - Steal Obelisk
Group ID 2 - Escape With Obelisk
Okay so now that we got all the objectives on castle defined to group ID's you'll need to set all the actions related to those objectives (axis or allies) to their proper group ID you defined this includes camp actions, roam actions, any action you want activated while the given objective is still available. Let's say action 15 is part of Group ID 2, now by default all actions placed in a map have a default group value of 0. To change action 15's group ID, open the console and enter /action_group 15 2 then press enter. Action 15's group number will now be 2 and it will not be activated until the Goal Tracker reaches a value of 2. Now let's say you wanted to keep action 15 disabled but have it activated through scripting. Simple enough just use a group ID value of -1 to do this.
A couple notes, make sure to double check all you're actions group ID's before you release you waypoints. Secondly even though you can set, activate and deactivate actions using group ID's and by following the goal tracker YOU CANNOT manipulate the goal tracker. It's part of Fritzbot's coding and how it functions cannot be changed through waypointing. You should set ALL the group ID's for ALL you're actions, all actions will work with group ID's so make sure to set them all properly. All actions can also be activated/deactivated from within the script as well but we'll get into that later.
This can be really complicated at first even I had a confusing time getting the hang of the goal tracker and group ID's but with some time and patience you can learn to understand it fluently. So let's move on shall we.
Action Radius
Actions radius works in the same way as node radius as far as basic concepts go and such except you don't have to confine yourself to the area around you as much and the radiuses aren't as picky with actions as they are with nodes. By default any action placed on the map has a default radius of 70 (just like nodes) but it's always good practice to go through and alter them all so it makes things runs more smoothly. Below is a picture of a action's radius.
It's no different looking than a nodes radius. You'll need to set the draw radius command mentioned in the node radius section to see action radiuses as well. Now let's alter action radiuses shall we. Let's say we wanted to make the radius of action 2 shown in the picture be 45 instead of 70. What you would do is open the console and enter /action_radius 2 45 then hit enter. You should then see the radius value change on the in-game action HUD to 45 and you should see the white lines shown above shrink, and there you go.
We'll be going over specific radius values that I recommend using with different types of actions throughout the next couple of sections to make it easier, actions are way more forgiving for radiuses than nodes in my opinion sometimes camp actions can get kind of picky and dyno actions are picky as well but it isn't too bad really. Again the actions follow the same 3.5 second rule and their radiuses impact this as well so be on the lookout for that.
Setting Action Tasks
Okay this is thee most important aspect of adding/altering actions is to give them specific tasks that the Axis and/or Allies must perform at the given action. This is a very lengthy section being as there is a lot of different settings an action can have but only 1 action can have 1 task assigned to it (either by one team only, or both teams can have an task on the same action) So we'll go through how to set the action tasks first and display a list of all the possible values that can be set, then we will dive into each specific task and talk more about it. Remember that an action is invisible unless at least one team has an action set for that particular action, this is how you do it.
Here is a list of all the possible values & tasks that either the axis or allies can have on a single action. These cannot be added together to have multiple tasks on one node either so you can only use one task at a time.
Task Value Task Description
-1 = Defines No Task For The Given Team
0 = Bot Camp Task
1 = MG42 Task
2 = Checkpoint Flag Task
3 = Aim Task
4 = Dynamite Plant Task
7 = Engineer Camp Task
8 = Dynamite Defuse Task
9 = Alt Roam Task (we will talk about this in the routing system section)
16 = Spawn Flag Task
32 = Delivery Point Task
64 = Steal Objective Task
512 = Airstrike Hint Task
2048 = Patrol/Roam Task
4096 = Sniper Camp Task
8192 = Panzer Camp Task
And there you go, the list of each task an action can have. It can get a bit confusing which task has which value but after you set them multiple times you'll start memorizing them. Until then printing out the list above isn't too bad an idea. Now let's move onto setting an actions tasks shall we. Let's say we have actions 17 and 15. Now for Action 17 you want to make it an axis sniper camp action but you don't want any allied task for that action and for action 15 you want to make it both an axis an allied patrol/roam action. Here's how you would do each.
For action 17 let's set it to an axis camp action now, open the console and enter the command /action_axis 17 4096 then hit enter, the axis obj number for that action should now be 4096. Now to set the allied action to nothing open the console and enter the command /action_allies 17 -1 and hit enter. The allied obj number for that action should now be -1. By default any action placed on a map as both the axis and allied obj numbers set to -1. Now let's do action 15. First we'll set the axis roam task, then the allied. Open the console and enter the command /action_axis 15 2048 and hit enter, before closing the console enter the command /action_allies 15 2048 and hit enter. Now you should see that action 15 now has a value of 2048 for both axis and allied obj settings and that's it.
This is actually WAY more easier than it looks reading it, but you gotta be careful not to set different axis and allied tasks on the same action because it may cause problems (unless one team has a -1 obj value). The only reason you should do something like that is if you want both the allies and axis to camp at a single location during the same action group ID. You can set the same task on a single action or you can have only one team do tasks at a single action. The bots will ignore an action if their teams action task value equals -1. I hope this isn't confusing, remember you can always look at an already pathed map to get suggestions on how to do certain things. Now we will move onto each of the above mentioned action tasks and look at them more in-depth.
Action Task Descriptions
In the previous article we learned about which values are linked to each task and how to set them, in this article we are going to dive into the nuts and bolts of each of those tasks and find out what they are.
No Task Setting
This one is really basic, if you don't want any particular team to use an action you just set their teams obj value to -1 and they will ignore it. Let's say you wanted to make action 7 unavailable to the allies because it's an axis camp action. Open the console and enter the command /action_allies 7 -1 and hit enter. The allied obj value will now be -1 to indicate it's not available to the allies no other settings need to be changed. This is a good way to setup actions strategically so that the axis have their actions and the allies have theirs so it's a good way to provide variety in a map.
Bot Camp, Aim & Linking Actions
Bot camps are places where the bots can camp, once they reach these actions they crouch down and camp and look where instructed to, any bot can camp at a camp node unless a specific class has been set for that camp node (we'll talk about that in a bit). Camp actions NEED to have Aim actions linked to them otherwise they'll just stair off at the wall. This can be a trying process setting up camps, they need to be positioned strategically and they need to be linked to aim actions to work effectively leaving them all out in the open and/or crunched together means an LT with an airstrike can wipe out a whole objectives defense.
They can make or break a map because camp actions are like you're whole entire defensive structure. Each objective or most objectives should have different camp actions to make the defense change based on map events. You can do this using Group ID's that are the same as the given objective. Also camp nodes should be positioned fairly far apart, not too far but they should be spaced away from each other for them to be effective. You can place them anywhere bots and humans can go, but again they must follow the 3.5 second rule and they must be placed near a node. So let's move onto how to set up a camp node.
To set an action as a camp action. Place the action where you want the bot to camp we'll call this action 2 and let's say you want the axis to use this as a camp action. After you place action set the radius to 25 or 30, after that open the console and enter the command /action_axis 2 0 then hit enter. The Axis Obj value should now be set to 0 and it'll now be an axis camp action. Now we need to place aim actions for the camp node and link them together.
Aim actions are aiming spots for the bots who are camping. Wherever the aim action is placed the bots who camp will look at that action, the action group ID's apply to these as well but the bots will not use aim actions unless their links for a camp action. But the aim actions must be linked to camp actions otherwise they don't work. Let's say you place two actions you want to be aim actions for the axis camp mentioned above, let's say their actions 3 and 4. Now let's set them up to be aim actions, you don't need to alter the radius for aim actions. Okay for this example we'll setup action 4 to be an aim action open the console and enter the command /action_axis 4 3 then hit enter. Action 4's Axis Obj number will now be set to 3. You would do the same thing for action 3. Now let's move onto action links.
Action links can only be defined for any type of camp actions and only aim actions can be defined as action links. You can set up to 4 aim actions per camp action. Now using all the examples above, let's set up aim actions 3 and 4 to be action 2's links. open the console and enter the command /action_links 2 3 4 and hit enter. You should now see that action 2's linked actions are 3 and 4. The bot will now look at aim actions 3 and 4 while camped. These are great for making the bots focus on certain areas when camping on defense.
Camp actions are very vital to setting up map defenses. It's good practice to set them up strategically around objectives and setup their aiming links to where they are effective. Don't spam each corner of the map with camp actions or place them in totally obscure places. Remember Camp actions are the defensive setup for you're map, if setup poorly, the bots will play the map poorly. Also try not to place nodes directly in the way of a node path or right up next to a node, and make sure the camp actions radius doesn't intersect with either the path or node's radius as well otherwise you can clog up the bots moving on the normal path but don't place them too far away from nodes.
Other Camp Actions
There currently are 3 other camp actions available for use in Fritzbot they are Sniper, Engineer and Panzer. We'll go through all 3 in this part of the section. Remember these camp actions need aim actions and the need to be linked to aim actions as the previous section described. We won't go into those steps again but you need to know that. The radiuses for these camp actions should be the same as regular camp actions as well.
First things first is the Engineer Camp action. These are ONLY used on dual objective maps so an engineer will camp back at the given teams objective just in case the other teams plants dyno at their defending objective. Maps like Depot use engineer camps. Remember you do not use these on regular objective maps because there not needed. Now let's say you wanted to make action 6 in the map an axis engineer camp action. Open the console and enter the command /action_axis 6 7 and hit enter. This will now turn action 6 into an Engineer Camp action.
Now onto Sniper Camp actions. These are camp actions specifically setup just for snipers to camp at. These should be placed even more strategically because snipers use a lot of camouflage and concealing techniques when they camp. They also should sometimes be placed in elevated areas, like at the top of hills or buildings so they can get a wider view of the map. Say you wanted to make action 15 an allied sniper camp action. Open the console and enter the command /action_allies 15 4096 then hit enter. This will now make action 15 an allied sniper camping action.
And lastly we move onto Panzer Camp actions. These are the same as Sniper camp actions but only Panzer soldiers camp at these camp actions. At last check these we're buggy and I'm not sure if Maleficus fixed them or not but you can try them out. Let's say you wanted to make action 36 an axis panzer camp action. Open the console and enter the command /action_axis 36 8192 then hit enter. Action 36 should now be a panzer camp action.
And there you go, there's a lot of versatility in Fritzbot's camp actions. All the above 3 camp actions follow the same guidelines, rules and restrictions as normal camp actions their just meant for specific types of players.
MG42 Actions
These are actions that are placed next to an MG42 to alert the bots that an MG42 is located at this location, the bots will then OPTIONALLY use the MG42. These are kind of picky and take some practice to get the hang of but their nice to add for some variety. You'll need to do some extra work to set them up too, so we'll cover all that.
First go to the location of the MG42 and place the action like in the following picture. Remember to place the action about one body length away from the end of the MG42, you may have to move it a bit here and there. Take a look at the picture below.
Okay first we need to set the entity number for the MG42 action before we continue. Let's use the example in the picture above. To find out the entity number for the MG42 in the picture above, stand behind it until you see the hand come on screen. After that open the console and enter the command /viewent and hit enter. You should see something similar result in the console after entering that command, if you don't keep moving around the MG42 and reentering the command until you do.
Okay you see how it says MISC_MG42, this is to indicate that the entity we're looking at is an MG42. The ENTNUM is what we need to set for the actions entity number that's next to the MG42, you MUST set the entity number for the MG42 otherwise the bots will not use the MG42. So in this case 490 is the MG42 entity number. So to set the action that's next to the MG42's entity number (in this case action 20) we would open the console and enter the command /action_ent 20 490 then hit enter. This will now set action 20's entity number to that of the MG42.
Next we need to adjust the actions radius, you should set about 35 for the radius of an MG42 action. And finally we set the action to be a MG42 action. Let's say we wanted to make action 20 an axis MG42 action. Open the consoel and enter the command /action_axis 20 1 then hit enter. Action 20 will now be an axis MG42 action.
The tricky thing about MG42's is getting the action placement right. Also remember the bots optionally use the MG42's so just because a bot isn't using it doesn't mean you have something set wrong (although that could be a reason too) You must have the MG42's entity number set on the action you're using for the MG42 otherwise it will not work at all. To make the MG42 more appealing you can place an roam/patrol node next to the MG42 action so the bots visit that area and may opt to use the MG42 more often, although they still may not use it too.
Airstrike Hints
Fritzbot LT's can fully use the artillery support cans that normal humans use on servers. Naturally there coded to use them at certain intervals but what about those instances where you want them to always use artillery strikes at certain locations, that's where Airstrike Hint Actions come in. The second an LT bot reaches an airstrike hints radius it will throw an airstrike canister.
Airstrike Hints can wither be elevated just above head or they can be on the ground. I feel they should be placed just overhead to make the bots toss them in the air like a human would but to each their own I guess. Below is a picture of a couple elevated Airstrike Hints on Beach, this is just slightly above the sea wall near the forward bunker.
Okay first thing first is to place you're Airstrike Hint. If you place them overhead you'll need to be in spectator mode flying around to do so, if you place them on the ground then you can do that normally. Adjust the radius of the airstrike hint to about 150 or 200 (remember they need a little room to throw those things). Now let's say you want to make action 15 an allied airstrike hint. Open the console and enter the command /action_allies 15 512 then hit enter. Action 15 is now an allied airstrike hint, whenever an allied LT bot reaches the radius of that airstrike hint, they will throw an airstrike can.
Use these with caution, as no matter what the bots will throw and airstrike can once they reach these actions regardless if a whole slew of teammates are in the way or not or even if there's no other bots around they will still throw them. Now if they throw them near teammates the teammates will head for cover because of their avoiding skills coded into their AI, this can slowdown the progress of you're fellow teammate bots because there no longer attending to the task at hand their trying to run for cover. Also if their caught out in the open even still there will be a lot of teammates killed by the airstrike.
As you can guess these can be very dangerous to use and can have an impact on bot performance within a map. Seeing as LT bots use airstrike cans tactically without Airstrike Hints (it's part of their enviromental coding) I recommend you don't use them at all unless for extremely special purposes such as those on the sea wall on Beach in which the axis and allies throw airstrike cans at each other until the door or wall is breached.
Roam/Patrol Actions
Now we move into roam/patrol actions. These are actions that tell the bots to optionally visit the location of the roam/patrol action and just check it out. There's no other explanation than that. These can be used to give other bots besides Engineers (and in some cases them too) a goal to perform or place to visit until an objective is completed or you can use these to keep bots in certain locations and/or to entice them to take a spawn/checkpoint flag or use an MG42 or to perform other actions.
By default you can leave the radius of a roam/patrol action at it's default radius of 70. So now we move onto setting an action as roam action, let's say we want to make action 28 as an axis roam/patrol action. Open the console and enter the command /action_axis 28 2048 and hit enter. This will now make action 28 into an axis roam/patrol action.
Try not to spam the map with these. You should only need one per area you can make separate one's for the axis and allies or you can have them both use a single roam/patrol action. You don't need them in every area of the map either, but it's nice to have a few here and there for each objective. Also try to have more than 1 for each action group ID otherwise when bot reach the 1 roam/patrol action and will stand around complaining about not having any valid goals.
So now that we've covered basic action tasks, let's move onto map objective related actions. These take a bit more care and work but aren't too difficult to seup.
Map Objectives
Okay now that we've learned about other types of actions we're going to take a look at setting up actions for objectives within a map. This isn't much different than above but you need to take a couple extra steps to get them to work properly so we'll cover each type of map objective and how to set each up for Fritzbot.
Dynamite Objectives
Dynamite objectives can be any map objective that you need to destroy with dynamite, these can be doors, generators, bridges and so on. Now to path Dynamite Objectives you set an action near it and set the actions settings accordingly. Only engineers pat attention too and access dynamite objective actions. First we must get the entity number for the objective go next to the objective and walk towards it until you see the blue pop-up box at the bottom of the screen. Once that occurs open the console and enter the command /viewent and press enter. You should see info like that shown in the picture below.
Now it has to say TRIGGER_OBJECTIVE_INFO for the classname (if it don't you may have to move around a few steps retrying the command until you do), now see the 98 that's the entity number we need to set on the action next to this particular objective, the action should be placed right in front of the objective itself like shown in the pictures below.
So let's say that action is 47 you would then open the console and enter the command /action_ent 47 98 then hit enter. Action 47's entity number will now be the same as the objective. Next set the radius of the action should be around 25 or 30 and be sure to set you're action group properly. Now let's say this is an objective the allies must destroy and that the axis must defend. Open the console and enter the command /action_allies 47 4 then press enter. This will now make action 47 an allied dynamite plant action. Next enter the console command /action_axis 47 8 then press enter. This will make that same action an axis defuse action.
And there you go, now a few things to keep in mind. Make sure that for doors that the nodes between the actual door aren't connected but will be connected in the script, otherwise you'll see bots running up against the door until it is destroyed. Also make sure to enter the objectives correct entity number otherwise the engineers won't plant at that objective and make sure the dyno actions radius is within the plant range otherwise bots will over throw the dyno or plant it to where it won't trigger the objective. And finally, make sure both teams have tasks set on dyno actions. If you set one team as planting dynamite, have the other set as defusing dynamite on that action otherwise the bots won't disarm dynamite if planted on that action.
Multiple Dynamite Plant Objectives
This feature was just added recently to Fritzbot, the ability to add multiple plant actions for a single dynamite objective. This is useful for Doors that can have dyno planted on either side or for objectives that can have multiple plants at different sides of the objective itself. Take a look at the below two pictures to get an idea of what I'm talking about.
The one on the left is a gate, the other is a crypt. Notice how each side has a dyno action? All these actions have the same properties, same entity number (because their linked to the same objective) and the same group ID's and such. So setting them up is the same as setting up any dynamite action but there's another required step to have multiple plant locations for the same objective. Each dynamite action (if there is more than 1) that's linked to a single objective must be linked to each other. So take action 4 in the picture to the right. It must have 45, 46 & 47 as it's action links (we went through how to set those earlier) and action 1 in the left picture must have 44 as it's action link. You must do this for each dyno action that's linked to a single objective. This is to tell fritzbot to turn off all the other dynamite actions for that objective.
You would mainly use these on objectives that can have multiple plants on different sides. For scripting purposes you would only have to script 1 of the actions in the set for the given objective however you can still have them turned on or off in the script just like any other action. Also, you can only have a maximum of 5 dynamite plant actions per objective.
Checkpoint Objectives
In section three we talked about setting up checkpoint and spawn flag nodes, we'll those still apply here but now we're going to set the actual objective action for the flag. Take a look at the picture below to get an idea of what we're doing.
Look familiar? Well it's the same picture used in section three so I'd assume it would, lol. Notice how action 1 is setup? That's how you should place you're checkpoint action. Now set the radius to around 35 and make sure to set you're action group up properly. Next we need to find the entity number for the checkpoint flag. Take a few steps away from the flag pole and aim towards it. Now open the console and enter the command /viewent then press enter, you should receive something like in the picture below.
Okay for the classname it must say team_WOLF_checkpoint, if it don't take a few steps in different directions and re-entering the viewent command until you do. Now for the entity number you see the 575? That's the entity number for the flag in question. So now that we know the flag's entity we can now set it for the action for the checkpoint flag. So let's say this action is action 5 and you want to set it up as a checkpoint flag action. First we set the entity number so open the console and enter the command /action_ent 5 575 then hit enter, this will now set action 5's entity number up to be that of the checkpoint flags. Now we're going to set action 5 up to be a Checkpoint action. Open the console and enter /action_allies 5 2 and press enter, now before you close the console enter /action_axis 5 2 then hit enter. This will now make action 5 both an axis and allied checkpoint objective action. You only use Checkpoint actions on Checkpoint maps, for objective map flags you would use spawn flag actions (which we'll get into next)
Just a few notes for Checkpoint Actions. Again you must set the correct entity number for the checkpoint action otherwise it will not work, in addition to that you must setup the nodes around the flag as described in section three otherwise the bots will just stand around staring at the flag and they won't take it. Second the checkpoint actions radius MUST intersect the flag pole. Thirdly remember capturing checkpoint or spawn flags does not increase the goal tracker. Another thing it's good practice to place an axis/allied roam action near the flag to make capturing it more appealing to the bots. Lastly, for flag actions (Checkpoint or Spawn) you should always set up both the teams to capture the flag.
Spawn Flag Objectives
Spawn flags are really no different than Checkpoint flags and the process for setting them up is exactly the same as setting up a checkpoint action as far as radius, action placement, entity number, action group ID, etc. goes the only difference is that spawn flag actions use a different action task value.
So let's say you have action 9 and you want it to be a spawn flag action for both axis and allies. Open the console and enter the command /action_allies 9 16 then press enter, before exiting the console enter the command /action_axis 9 16 then press enter. After this action 9 will now be both an axis and allied spawn flag action.
Spawn flags also follow all the rules, regulations and such as Checkpoint flags, they also use the same node arrangement as mentioned in section three.
Steal & Escape Objectives
The last objective we're going to look at is Steal & Escape type objectives these can be documents, an obelisk any thing you have to steal and either transmit or escape with at a certain location. You have to set two actions for these types of objectives on for the steal action and one for the escape. First we're going to setup the steal action. Place the action close to the actual documents or whatever like in the picture below.
Now you'll notice you'll have to adjust the radius so the docs or whatever are just inside the actions radius. After that set you're group ID's accordingly. Now we must find the entity number for the documents you have to steal. So take a few steps away from the documents, open the console and enter the command /viewent then press enter, you will now see something like this.
Now it must say "team_CTF_redflag" (it may say "team_CTF_blueflag" if the docs are allied owned) if it doesn't say that then take a few steps in different directions and re-entering the viewent command until you do see the above. Now you see the EntNum part? The entity for this particular document is 103 so that's the entity number we need for our steal action. So let's say the steal action is action number 3. We would set the entity number by opening the console and entering the command /action_ent 3 103 then press enter. Action 3's entity number will be that of the documents.
Now let's say the allies have to steal those documents, open the console and enter the command /action_allies 3 64 then press enter. This will now make action 3 a steal objective action for the allies. You don't have to set anything for the axis on this action.
Next we're going to place the escape action, this is the location the doc carrier must reach to escape or transmit the docs or whatever. So go to where the escape area is and place the action right at the location that triggers the end game. Take a look at the picture below to get an idea of how to place it.
Action 13 is the escape route in this picture. Make sure to set the radius to where it remains inside the escape trigger area. Now the group ID you'll have to set 1 above the steal action, remember that the second those documents are taken, the goal tracker increases so you'll have to set the escape point above the steal action. So say the Steal action is action group 1 you would set the escape action to action group 2. You do not set the escape actions entity number. Next let's say action 4 is the escape action for the above mentioned allied steal action. Open the console and enter the command /action_allies 4 32 then press enter. This will now make action 4 the allied escape action for the given map, you don't have to set anything for the other team on escape actions, and that's it.
Just a couple notes, again make sure you set the steal actions entity number correct otherwise the bots won't perform the steal action. Also you should setup defensive actions at both the steal action and escape action and set their action group ID's accordingly. That brings me to the next note, make sure to set the escape action's group ID 1 above the steal actions.
Also make sure you're radiuses are correctly set for both the steal action and escape action.
And that does it for objective actions, not too difficult really because a lot of the stuff is similar like setting entity numbers. When these are setup properly, the bots will perform the map objectives without any troubles. Next we'll move onto the rest of the action settings that exist in Fritzbot.
Action Classes
Okay next we're going to take a look at setting up actions to where only certain classes (such as medics, soldeirs, LT's, etc.) only use that action. Once set no other bot will use that particular action unless they are of the same class as specified by the waypointer. By default all actions placed on a map have an action class value of 0, which means any bot can use the given action regardless of their class.
Action class values use bit math for setup, below is a list of possible action class values. These can be added together if you want a few classes using the given action and not other's and vice versa and entered as an action class value. So say you wanted only soldiers and LT's to access a given node you would use the action class value "9" (1+8=9)
Action Class Value Which Class Value Refers To
0 = Everyone
1 = Soldiers Only
2 = Medics Only
4 = Engineers Only
8 = LT's Only
Now let's say we want action 9 to be an allied roam action but can only be accessed by medics. Open the console and enter the command /action_class 9 2 the press enter. This will now make action 9 only available to allied medic bots, no other bot on either team will use the specified action.
Now you should use caution when using these, especially if you use them throughout the map. Make sure to have enough actions for each specific action class setup you have. Also keep in mind you should need to use these a lot, dual objective maps seem like they would need these setup more than regular objective maps (take a look at depot for an example of action class setup) Also keep in mind that the bots already are hard coded to access and ignore certain actions if they don't pertain to them. Like Engineer's Plant/Disarm action, only Engineer's will access these or only snipers access Sniper Camps and so on so try not to use these very much if you can.
Changing an Actions Active Status
Now we already learned about action group ID's earlier in this section but there is a way around making actions follow the goal tracker and that is to make actions active forever. By default all actions aren't active forever and rely on the goal tracker ID for deactivation and activation but what about those actions you want activated throughout the entire map no matter what. That's where active forever comes into play. Using this method you can setup actions to carry over group ID's and last the whole match or for longer periods of time. These can be deactivated/activated through the script as well but once an action is active forever it normally doesn't turn off unless instructed to do so.
So let's say you want action 16 to be active forever, open the console and enter the command /action_active 16 1 then press enter. This will now make actions 16's active forever value be a 1 and that means that it will be on no matter what. A value of 0 turns of the active forever attribute and actions will follow normal group ID numbers.
Now keep in mind that when an action has it's active status set to action forever it won't turn off unless scripted to do so. So that makes the active forever status not very attractive for most actions. You should try not setting this too much on actions unless you really do want them active forever but for say objective actions is not practical to set this attribute (spawn flag actions are an exception to this rule).
Setting an Actions Nearest Node
Earlier we talked about moving actions and how actions must be placed near nodes in order to work. Well by default whenever you place an action on the map it sets it's closest node value to the number of the node closest to that particular action. But let's say you move the action later on, the close node setting won't change so you'll have to do it manually.
So let's say you moved action 29 and you look around and node 213 is closest to the action. Open the console and enter the command /action_closenode 29 213 then press enter. It will now set action 29's closest node to be node 213.
Now remember to do this after you move an action because it's very easy to forget to do so. You MUST set the actions closenode properly otherwise the bots won't use the action at all or will miscalculate how to reach the particular action. If there's multiple nodes around the moved action the same distance away from the action, pick whichever node you want to be the actions closest node.
Viewing Specific Actions
The last command we're going to do is another action display command, this is similar to node_vis but is more specific for actions. Now let's say you wanted to view only camp actions in a map, open the console and enter /node_drawonly 0 then press enter. You will now only see camp actions in the map.
What this command essentially does is it only makes the types of action you specify visible in the map at one time. You would enter the command like normal and for the value you would use the action task value for whichever action you wanted to be visible on the map. By default the value for this command is set to -1 which means all actions are visible. This is useful for large maps if you want to view only camp actions or whatever for troubleshooting or relocation purposes or what not.
Whew, that was a lot to take in wasn't it? Actions aren't very complex really it may look complicated on paper but it's fairly easy when you're actually getting down and dirty with them in a map but in the end they are a very powerful waypointing tool. Next we're going to take a look at the Alternate Route System Fritz has setup so sit back and enjoy the ride, lol.
Console Command Quick Lookup
/viewent - Displays entity information for the given objective.
/node_drawonly <actiontask#> - Displays actions on the map based on the indicated action task value (i.e. /node_drawonly 0 displays only camp actions)
/node_drawhud 2 - Displays the in-game action HUD
/g_action_info <action#> - Displays information about the given action in the console. (i.e. /g_action_info 6 will display information in the console for action 6)
/action_add - Adds an action at you're present location (it's remains invisible until you give it an action task)
/action_axis <action#> <actiontask#> - Sets the axis action task for the given action (i.e. /action_axis 4 1 will set action 4 as an axis MG42 action)
/action_allies <action#> <actiontask#>- Sets the allied action task for the given action (i.e. /action_allies 4 2048 will set action 4 as an allied roam/patrol action)
/action_clear - Deletes all actions on the map (use with caution)
/action_move <action#> - Moves the given action to you're current location (i.e. /action_move 17 will move action 17 to you're current location)
/action_group <action#> <GroupID> - Sets the action group ID number for the given action (i.e. /action_group 5 1 will make action 5 an action group 1 action.
/action_radius <action#> <radius> - Sets the given actions radius to the value given. (i.e. /action_radius 13 75 will set action 13's radius to 75)
/action_links <action#> <link1> <link2> <link3> <link4> - Sets the given aim links as action links for camp nodes, up to 4 action links can be set. (i.e. /action_links 4 17 19 23 makes aim actions 17, 19 & 23 available for camp action 4)
/action_ent <action#> <entity#> - Sets which map entity the given action is linked to (i.e. /action_ent 23 305 sets action 23 to be linked with map entity 305)
/action_class <action#> <class#> - Specified which team class (medics, LT's engineers, etc.) can access the given action (i.e. /action_class 7 1 indicates that only soldiers can access action 7)
/action_active <action#> 1 - Sets the given action to be active through the whole map, no matter what group ID the goal tracker is at (i.e. /action_active 47 1 makes action 47 active forever)
/action_closenode <action#> <node#> - Sets which node is closest to the given action (i.e. /action_closenode 8 39 sets 39 as action 13's closest node)
Section V - Alternate Route System