Nav Mesh: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (func_tf_bot hints are only used as sniper spots in MvM.)
m (Clarify what?)
 
(30 intermediate revisions by 10 users not shown)
Line 1: Line 1:
{{lang|Navigation_Meshes}}
{{LanguageBar}}
<br>
{{otherlang2|jp=Bot_Navigation_for_Counter-Strike:Source:jp}}
A '''Navigation Mesh''' (or shorter: '''nav mesh''') represents the "walkable areas" of a map. This data is '''required''' by [[Bot]]s and Hostages in {{game link|Counter-Strike: Source}} and {{game link|Counter-Strike: Global Offensive}}, and all [[NextBot]] entities in {{game link|Left 4 Dead}}, {{game link|Left 4 Dead 2}}, {{game link|Garry's Mod}} and {{game link|Team Fortress 2}}, allowing them to "know" where they can go and how to move around in the environment.


Navigation Mesh data is stored in a [[NAV]] file corresponding to the map file ([[bsp|.bsp]]) for which it is used. For example, the nav mesh for <code>cstrike\maps\de_dust.bsp</code> is stored in <code>cstrike\maps\de_dust.nav</code>.
A [[w:Navigation mesh|'''Navigation Mesh''']] ('''NavMesh''' or '''nav mesh''') is a data structure that stores data used for path finding, which is typically used by bots. In {{source|4}}, navigation meshes are used by the following entities:
# [[Bot]]s and Hostages in:
#* {{css|4}}
#* {{csgo|4}}
# [[NextBot]] entities in:
#* {{l4d|4}}
#* {{l4d2|4}}
#* {{gmod|4}}
#* {{tf2|4}}
#* {{p3|4}}
#* {{jb3|4}}
#* {{bms|4}}
…to realize what's navigable in their environment, and path to their desired destination.


== Automatic Navigation Mesh Generation ==
==NAV file format==
A new navigation mesh <code><game>/maps/<mapname>.nav</code> for a map can be generated by using the '''<code>[[Navigation_Mesh_Commands#Mesh_generation|nav_generate]]</code>''' command while the map is loaded which requires {{ent|sv_cheats|1}}. Depending on the size and complexity of the map, this may take a few minutes to a few hours, but mostly about 5 minutes. Large forests however are examples for structures that might take a long time to compute a .nav for. You can then upload the created .nav file to your server.
{{Main|.nav}}


It is recommended that map creators create navigation meshes before releasing their map to the public.
==NAV files ==
Navigation Mesh data is stored in a [[NAV]] file corresponding to the map file ([[BSP|.bsp]]) for which it is used. For example, the nav mesh for <code>cstrike\maps\de_dust[[.bsp]]</code> is stored in <code>cstrike\maps\de_dust[[.nav]]</code>.


{{Note | In {{css}} and {{csgo}}, if [[bot]]s are added on a map with no .nav file, the game will automatically <code>nav_generate</code> (starting from spawn points). This affects custom maps particularly.
==Navigation Mesh Editing==
If the .nav generation takes too long, this automatic process can be avoided by making sure that bots will not join the game e.g. by invoking {{ent|bot_kick}} before choosing a team.}}
{{Main|Nav Mesh Editing}}
{{Main|Nav Mesh Commands}}
The Navigation Mesh Editing is done in-game. A (new) .nav file can be generated with <code>nav_generate</code> (which requires {{Command|sv_cheats|1}} and {{Command|nav_edit|1}}).


=== What is computed during generation ===
==Game Specific SubVersions==
The following steps occur during Navigation Mesh generation:
* Starting at a player spawn point, walkable space is sampled by "flood-filling" outwards from that spot, searching for adjacent walkable points
* Rectangular ''Navigation Areas'' are constructed from the sampled data
* Hiding and Sniper spots are computed
* Encounter Spots and Approach Points are computed (this can take awhile)
* Initial Encounter areas are computed
 
=== Viewing the Navigation Mesh ===
To see the current navigation mesh, type <code>nav_edit 1</code>. To turn the mesh editor off, type <code>nav_edit 0</code>. You will need to have {{ent|sv_cheats|1}} to be able to view the navigation mesh.
 
Perform <code>tf_show_mesh_decoration 1</code> to see all {{tf2}} attributes. Use <code>tf_show_mesh_decoration 0</code> to hide auto generated {{tf2}} attributes.
 
=== Explicitly marking walkable areas (i.e: "There's no mesh upstairs") ===
Some maps that have very steep stairs, ramps, or hills may confuse the generation system, resulting in the Navigation Mesh not covering the entire map.  To solve this, you can manually place additional ''walkable markers'' that tell the generator to search outwards from that point during its sampling phase.
 
To add one or more walkable markers, first aim your view towards a known walkable spot in your map, then type <code>[[Navigation_Mesh_Commands#Mesh_generation|nav_mark_walkable]]</code> in the console. When you are finished placing markers, type <code>[[Navigation_Mesh_Commands#Mesh_generation|nav_generate_incremental]]</code> (followed by <code>nav_clear_selected_set</code>) or <code>nav_generate</code> to re-generate the mesh.
 
You can remove all previously placed walkable markers using the <code>nav_clear_walkable_marks</code> command.
 
=== Quickly generating meshes for testing===
The analysis phase of the generator can be quite time consuming.  To skip it, type <code>nav_quicksave 1</code> in the console. 
:{{note|"Quicksaving" skips the analysis phase, and the resultant nav mesh will be missing important data required by the CS Bots and Hostages higher-level planning and attention systems.  While useful for testing, editing, and tuning a nav mesh, be sure to do a full analyze (ie: <code>nav_analyze</code> with <code>nav_quicksave 0</code>) before publishing your nav file to others.}}
 
== Editing the Navigation Mesh ==
[[Image:nav_edit.jpg|thumb|300px|right|Enabling the Navigation Mesh editor in de_dust]]
The automated Navigation Mesh generator does a reasonable job of constructing a mesh, allowing you to start using Bots and Hostages on custom maps easily.
 
However, careful hand-tuning of the Navigation Mesh can noticeably improve the performance of Bots. In addition, manually decorating the mesh with ''Place Names'' allows the Bots to tell others where events occur, enhances the Counter-Strike radar and includes Place Names in all radio messages.
 
To enable the editor, type <code>nav_edit 1</code> in the console (type <code>nav_edit 0</code> to disable it).
 
* The white cross in the center of your view is the ''cursor''.
* The Navigation Area you are pointing at is the ''selected area'' and is shown with a yellow outline.
* Navigation Areas that can be reached from the selected area are shown in red.
* The white line in the selected area denotes where the area will be split if the <code>nav_split</code> command is executed.
 
{{Warning | Editing the nav mesh while bots are active can crash the game, especially deleting, splitting and merging areas. For safety, execute <code>bot_kick</code> first. If you're done editing, <code>nav_save</code> your work and reload the map before adding bots again.}}
 
=== Save ===
Currently, there is no "undo" command in the Navigation Mesh editing system.  Therefore, it is very important to '''save your work often''' via the <code>nav_save</code> command.
 
=== Creating a new area ===
This can be done with the commands <code>nav_begin_area</code> and <code>nav_end_area</code>.
{|
| [[Image:nav_begin_area.jpg|300px|thumb|left|Place your cursor at where a corner of the new area should be and execute <code>nav_begin_area</code>.]]
| [[Image:nav_drag_area.jpg|300px|thumb|left|Move your cursor to drag out the area's extent.]]
| [[Image:nav_end_area.jpg|300px|thumb|left|Place your cursor at where the opposite corner of the new area should be and execute <code>nav_end_area</code>.]]
|}
{{Note | Areas created like this have no connection to the existing nav mesh.}}
{{Tip | You can use <code>nav_snap_to_grid 1</code> to get consistent rectangle sizes.}}
{{Tip | The 4 corners of the resulting area will be on the same height. If the ground is not even, begin new areas with the highest corner to prevent it from being created under the floor. A floating area can easily be shifted down to the ground using <code>nav_corner_place_on_ground</code> while aiming at it.}}
 
=== Delete ===
To delete an area, aim your cursor at it so that it is highlighted and execute <code>nav_delete</code>.
 
=== Connect two areas ===
{| style="float:right;"
| [[Image:nav_jump_down.jpg|300px|thumb|right|'''<span style="color: rgb(80, 80, 255);">One-way connections</span>''' (marked with dark blue lines) are usually used for "jump-down" links from a ledge to the ground.]]
| [[Image:nav_connections.jpg|300px|thumb|right|'''<span style="color: rgb(51, 204, 204);">Bidirectional (two-way) connections</span>''' (marked with light blue lines at the area edges) allow bots to freely move between the two areas.]]
|}
The connections between areas define whether one can move from one area to another.
 
Usually these connections are ''bidirectional'', meaning one can move back and forth between two areas at will.
However, sometimes the connection is ''one way'', as in the case of ledges that can be jumped down, but not back up.
One-way links can also be useful for forcing bots to travel a specific direction, perhaps to set up for a tricky jump.
 
To make a '''<span style="color: rgb(80, 80, 255);">one-way connection</span>''' from area A to area B (meaning you can move from A to B):
# Mark area A: Place your cursor on it and execute <code>nav_mark</code>.
# Aim at area B and execute <code>nav_connect</code>.
 
To make a '''<span style="color: rgb(51, 204, 204);">bidirectional connection</span>''', repeat the above steps reversing the roles of A and B.
 
=== Disconnect two areas ===
To remove '''all''' connections between the areas A and B:
# Mark area A: Place your cursor on it and execute <code>nav_mark</code>.
# Aim at area B and execute <code>nav_disconnect</code>.
{{clr}}
 
=== Split ===
Splitting divides an area into two bidirectionally connected areas.
{|
| [[Image:nav_edit.jpg|300px|thumb|left|Position yourself and the cursor so that the white split line is where you want the area to be split.]]
| [[Image:nav_split.jpg|300px|thumb|left|Execute <code>nav_split</code> to get two adjacent, inter-connected areas.]]
|}
 
=== Merge ===
Merging two areas reduces the area count.
 
Both areas must be the same size along the edge to be merged. It is not required that the two areas are adjacent.
 
The resulting area will retain all of the connections of the original two areas, and inherit properties (i.e: Place Names, etc) from the marked area.
{{Tip | While moving from point A to point B, bots tend to prefer routes with less areas to travel through, so a route can in theory be made more attractive to bots by merging some areas.}}
{|
| [[Image:nav_mark.jpg|300px|thumb|left|Aim your cursor at the first area and execute <code>nav_mark</code>.]]
| [[Image:nav_pre_merge.jpg|300px|thumb|left|Aim at second area.]]
| [[Image:nav_post_merge.jpg|300px|thumb|left|Execute <code>nav_merge</code>.]]
|}
 
=== Splice ===
Splicing creates a new area between two existing areas. Splicing is a powerful tool, and can be used to easily create sloped areas, as shown in the example below.
{{Tip | It is '''not''' required that the two areas have the same width. The width of the resulting area will be the smaller of the two.}}
{|
| [[Image:nav_prep_splice.jpg|300px|thumb|left|Aim your cursor at the first area and execute <code>nav_mark</code>.]]
| [[Image:nav_pre_splice.jpg|300px|thumb|left|Aim your cursor at the second area.]]
| [[Image:nav_post_splice.jpg|300px|thumb|left|Execute <code>nav_splice</code>.]]{{clr}}
|}
 
=== Area Attributes ===
{| style="float:right;"
| [[Image:nav_jump.jpg|300px|thumb|left|A jump area and a no_jump area.]]
| [[Image:nav_crouch.jpg|300px|thumb|left|Crouch areas.]]
|}
There are a bunch of attributes that each area can have which tell bots to behave in a specific way when touching it.
All attributes of an area are visible for a short amount of time when aimed at. This duration can be set with the [[ConVar]] <code>nav_show_area_info</code>.
To toggle an attribute for an area, aim at it and execute the corresponding command, e.g. <code>nav_jump</code>.
* '''Jump areas''' (marked with a <span style="color:#00FF00">green X</span>) tell bots that they must jump to reach the higher connected area, and that this area is not usable as a hiding/sniping spot.
* '''Crouch areas''' (marked with a <span style="color:#6060FF">blue diagonal slash</span>) force bots to crouch when moving through this area.
* '''No jump areas''' (marked with <span style="color:#FF0000">red rhombus</span>) force bots not to jump. This is useful to prevent excessive jumping. However, bots get stuck if juming is required to keep going, as they may not jump.
* '''Precise areas''' (marked with a <span style="color:#00FF00">green +</span>) stops bots from avoiding obstacles. This can help in places where they can easily fall off, like catwalks with no railing.
* '''Stop areas''' (marked with a <span style="color:#FF0000">red octagon</span>) tells bot to stand still for a short moment when entering this area. Useful to slow bots down to line up tricky jumps more accurately.
* '''Run areas''' (marked with <span style="color:#6060FF">two blue arrows</span>) tell bots explicitly to run.
* '''Walk areas''' (marked with <span style="color:#00FF00">one green arrow</span>) tell bots explicitly to walk silently.
* '''Don't hide areas''' (no mark) tell bots not to use this area as a hiding spot.
* '''Stand areas''' (no mark) tell bots not to crouch while hiding in this area.
 
Apart from the above attributes, which can be set, there is the '''blocked''' attribute (marked with a <span style="color:#6060FF">blue rectangle</span>) that is set automatically in certain cases when bots can't or shouldn't use a nav area.<br>
In {{csgo}}, active [[trigger_hurt]] entities, locked doors and [[func_nav_blocker]]s in particular can block nav areas.
{{clr}}
 
=== Using Mesh Editing Binds ===
Although all of the mesh editing commands can be typed in the console, in practice it is far easier to ''[[bind]]'' these commands to keys.
With <code>bind del nav_delete</code> for example, pressing {{key|Del}} will delete the nav area under your cursor (in nav editing mode).
 
You can temporarily bind many commands at once by using a [[CFG]] file. This is useful for bot navigation editing, because there are many commands, and you will probably not want them to be permanently attached to your keys. See [[Editing Bot Navigation CFG File]] for a pre-made file and instructions on its use.
 
See [[Counter-Strike: Source Navigation Mesh Console Command Reference|Navigation Mesh Console Command Reference]] for a list of all commands related to bot navigation.
 
== Place Names ==
Once you've generated a nav mesh, ''Place Names'' can be assigned to nav areas to label that region of the map. For instance, if there is a prominent house in the map, all of the nav areas in the house can be tagged with the "House" Place Name.
 
Place Names are used by the CS Bot chatter system to announce where they are, by the radar to show the current location of the player, and they are appended to the player's name when that player uses text chat or radio commands. For example:
:<code>ChicagoTed @ '''Apartment''' (RADIO): Fire in the hole!</code>
 
=== Adding place names ===
To add or change the name of a location, you need to turn on the place name editor. Make sure <code>nav_edit</code> is set to 1, then type
:<code>nav_toggle_place_mode</code>.
When the place name editor is enabled (assuming no areas have been named) all the nav squares should turn red. To select which ''Place Name'' you want to assign to an area, type
:<code>nav_use_place <name></code>,
for example <code>nav_use_place Bedroom</code>. Next, aim your cursor at an area you want to label with that ''Place Name'' and turn on ''Place Painting Mode'' by executing
:<code>nav_toggle_place_painting</code>.
While ''Place Painting'' is active, each area you point at will be tagged with the current ''Place Name'' you selected and will turn green in color. You can change the place name you are painting with by typing <code>nav_use_place <newname></code>, notice that after changing the place name, all areas already painted with a different name will turn blue and areas painted with the name you just changed to will turn green. When you are finished using ''Place Painting Mode'', you can exit by executing <code>nav_toggle_place_painting</code> again.
 
For a list of all available ''Place Names'', execute <code>nav_use_place</code> with no argument.
''See also: {{css}} [[Standard Place Names for CSS]], {{csgo}} [[Standard Place Names for CS:GO]].''
<br>
There are several additional commands that provide tools for picking, flood-filling, replacing, and so on. For a complete reference, see [[Navigation_Mesh_Commands#Place_name_commands|Place Name Commands]].
 
== Common mesh problems and solutions ==
=== Extraneous areas on stairs and ramps ===
The automatic generation system tends to build areas that hang off the side of stairs and ramps.  These should be removed to force the bots to take the stairs or ramp straight-on.
 
=== Railings ===
Railings can be a problem for the current bot navigation system, this includes jump-down links that must pass over railings, they should be avoided unless necessary.  The bots will eventually make these jumps, but they are not terribly elegant while doing so.
 
=== Preventing excessive jumping ===
Use the <code>nav_no_jump</code> command to flag the area to discourage jumping.
{{note|The <code>NO_JUMP</code> attribute is not used in {{Game link|Team Fortress 2}}.}}
 
=== Dealing with rotating doors ===
Clip off the nav area to leave an empty space in the nav mesh to allow for the rotating door. You may have to remake the nav square if deleting part of an existing one doesn't work.
 
Bots will sometimes try to walk through the opened door brush from one nav area to another and get stuck. Either removing the adjacent nav area or configuring the areas and connections so the bots have to walk around the opened door should prevent this.
 
== Advanced editing techniques ==
=== Ladders ===
Ladders can be manually built against climbable surfaces. Your editing cursor will turn green when pointing at a climbable surface.
 
'''Using <code>nav_build_ladder</code>'''
 
The easy way to build a ladder is to simply point at a climbable surface, and execute <code>nav_build_ladder</code>.
{|
| [[Image:nav_build_ladder_before.jpg|300px|thumb|left|Point at a climbable surface]]
| [[Image:nav_build_ladder_after.jpg|300px|thumb|left|Ladder created]]{{clr}}
|}
 
'''Using <code>nav_begin_area</code> and <code>nav_end_area</code>'''
 
If <code>nav_build_ladder</code> isn't what you need, you can manually create a ladder:
#Place your cursor at where a corner of the new ladder should be
# Execute <code>nav_begin_area</code>
# Move your cursor to drag out the ladder's extent
# Execute <code>nav_end_area</code>
 
This can be useful to get bots to start going up the ladder, and jump off halfway up, onto the crate:
{|
| [[Image:nav_begin_ladder.jpg|300px|thumb|left|Start dragging ladder at first corner]]
| [[Image:nav_drag_ladder.jpg|300px|thumb|left|Drag ladder extent]]
| [[Image:nav_end_ladder.jpg|300px|thumb|left|Ladder created]]{{clr}}
|}
 
=== Reversing ladders ===
Sometimes a ladder will be created facing the wrong way.  If a ladder is drawn in red, you are looking at it from the back.  The ladder is drawn in green if it is facing you.  To change the orientation of a ladder, simply point at the ladder and use <code>nav_ladder_flip</code>.
{|
| [[Image:nav_ladder_backward.jpg|300px|thumb|left|Ladder facing into the wall (incorrect)]]
| [[Image:nav_ladder_forward.jpg|300px|thumb|left|Ladder facing away from the wall (correct)]]{{clr}}
|}
 
=== Obstacle avoidance and precision movement ===
Using <code>nav_precise</code>, <code>nav_walk</code>, and <code>nav_stop</code> to disable local obstacle avoidance behaviors and control bot movement.
{{note|The <code>WALK</code> and <code>STOP</code> attributes are not used in {{Game link|Team Fortress 2}}.}}
 
=== Marking areas to avoid ===
Using <code>nav_avoid</code> to tell bots to avoid the area unless the normal route has become too dangerous.
{{note|The <code>AVOID</code> attribute is not used in {{Game link|Team Fortress 2}}.}}
 
=== Controlling where bots Can hide ===
Using <code>nav_dont_hide</code> to prevent bots from hiding in that area.
This can be used to force the creation of hiding spots during the analysis phase.
 
=== Setting up sniper spots ===
Mark an area using <code>nav_walk</code> and execute <code>nav_make_sniper_spots</code>. This will break the area into small sub-areas which are used internally by the navigation mesh to encourage sniping.
{{note|In {{Game link|Team Fortress 2}} hiding spots only determine where TFBot Spies lurk; Sniper spots are marked by {{ent|func_tfbot_hint}}, but they are only used by Snipers in [https://wiki.teamfortress.com/wiki/Mann_vs._Machine Mann vs. Machine]; otherwise the game automatically determines Sniper spots.}}
 
=== Lining up tricky jumps and narrow doorways ===
Arranging nav areas to force specific paths.
 
* If the bots are getting hung up on the sides of a door or window, you can carve out a narrow path through the middle of the opening.
* The highest a bot will try to jump is 58 units.  If the top of a jump is 59 or more units above the bottom, bots will give up as soon as they jump.  If this happens in a spot that the bots can actually jump up to, use <code>nav_corner_lower</code> to lower the upper nav area slightly.
 
[[Image:MaximumJumpCrouch.jpg|300px|thumb|left|Highest possible crouchjump]]{{clr}}
 
= Game Specific =
== SubVersions ==
{| class="standard-table"
{| class="standard-table"
! Game !! Known as !! Subversion !! Notes
! Game !! Nav Mesh Class !! Subversion !! Notes
|-
|-
| {{game link|Garry's Mod}}
| {{source|2}}
{{gmod|2}}
| TheNavMesh
| TheNavMesh
| 0
| 0
| Garry's Mod is using the base navigation mesh(It doesn't use it's own implementation unlike Valve games)
| Garry's Mod uses the base navigation mesh (It doesn't use its own implementation unlike Valve games)
|-
|-
| {{game link|Counter-Strike: Source}}
| {{css|2}}
{{csgo|2}}
| CSNavMesh
| CSNavMesh
| 1
| 1
|
| * Appends approach area data to each area.
|-
|-
| {{game link|Team Fortress 2}}
| {{tf2|2}}
| CTFNavMesh
| CTFNavMesh
| 2
| 2
|
| Appends TF2-specific attribute flag to area data.
|-
|-
| {{game link|Left 4 Dead}}
| {{l4d|2}}
| TerrorNavMesh
| TerrorNavMesh
| 13
| 13
|
|
|-
|-
| {{game link|Left 4 Dead 2}}
| {{l4d2|2}}
| TerrorNavMesh
| TerrorNavMesh
| 14
| 14
|
|-
| {{game link|Counter-Strike: Global Offensive}}
| CSNavMesh
| 1
| (Ported from Counter Strike: Source?)
|}
|}


= See also =
==See also==
* [[Navigation Mesh Commands|Navigation Mesh Console Command Reference]]
* [[Nav Mesh Commands|Navigation Mesh Console Command Reference]]
* [[Left 4 Dead Navigation Meshes]]
* [[List of L4D Series Nav Mesh Attributes]]
* [[L4D Level Design/Nav Meshes]]
* [[L4D Level Design/Nav Meshes]]
* [[L4D Level Design/Nav Flow]]
* [[L4D Level Design/Nav Flow]]
* [[L4D Level Design/Advanced Nav Editing]]
* [[L4D Level Design/Advanced Nav Editing]]


= External Links =
==External links==
* Official forums for the bot system (down) - [http://web.archive.org/web/*/http://www.turtlerockstudios.com/forums/csbot/ Archived version].
* Official forums for the bot system (down) - [http://web.archive.org/web/*/http://www.turtlerockstudios.com/forums/csbot/ Archived version].
* [http://www.editlife.net/tutorial.php?tutid=60 Waypointing for CS:S Bots/Hostages (Edit Life)]
* [https://www.editlife.net/tutorial.php?tutid=60 Waypointing for CS:S Bots/Hostages (Edit Life)]


[[Category:Source]]


[[Category:Level Design]]
[[Category:Level Design]]<!--Why?-->

Latest revision as of 00:14, 8 July 2025

English (en)Deutsch (de)Esperanto (eo)Español (es)日本語 (ja)中文 (zh)Translate (Translate)

A Navigation Mesh (NavMesh or nav mesh) is a data structure that stores data used for path finding, which is typically used by bots. In Source Source, navigation meshes are used by the following entities:

  1. Bots and Hostages in:
  2. NextBot entities in:

…to realize what's navigable in their environment, and path to their desired destination.

NAV file format

Main article:  .nav

NAV files

Navigation Mesh data is stored in a NAV file corresponding to the map file (.bsp) for which it is used. For example, the nav mesh for cstrike\maps\de_dust.bsp is stored in cstrike\maps\de_dust.nav.

Navigation Mesh Editing

Main article:  Nav Mesh Editing
Main article:  Nav Mesh Commands

The Navigation Mesh Editing is done in-game. A (new) .nav file can be generated with nav_generate (which requires sv_cheats 1 and nav_edit 1).

Game Specific SubVersions

Game Nav Mesh Class Subversion Notes
Source Source

Garry's Mod Garry's Mod

TheNavMesh 0 Garry's Mod uses the base navigation mesh (It doesn't use its own implementation unlike Valve games)
Counter-Strike: Source Counter-Strike: Source

Counter-Strike: Global Offensive Counter-Strike: Global Offensive

CSNavMesh 1 * Appends approach area data to each area.
Team Fortress 2 Team Fortress 2 CTFNavMesh 2 Appends TF2-specific attribute flag to area data.
Left 4 Dead Left 4 Dead TerrorNavMesh 13
Left 4 Dead 2 Left 4 Dead 2 TerrorNavMesh 14

See also

External links