Common L4D Mapping Problems: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
Line 59: Line 59:
== See also ==
== See also ==
* [[Left 4 Dead Level Creation]]
* [[Left 4 Dead Level Creation]]
* [[Left 4 Dead Navigation Meshes]]
* [[L4D Mapping Notes]]


[[Category:Left 4 Dead]]
[[Category:Left 4 Dead]]

Revision as of 21:15, 1 April 2009

This is a collection of Frequently Asked Questions and common error messages related to mapping for Left 4 Dead.

FAQ

  • Why does a newly compiled map crash L4D after being loaded?
    • Left 4 Dead requires the file "stringtable_dictionary.dct" to be embedded inside the BSP to open it. If the file is not present L4D will pack the file inside the BSP, but will crash in the process. To prevent this from happening, you can configure Hammer to automatically pack a "stringtable_dictionary.dct" file into your BSP during the compile process. To do this, follow the tutorial here. The "stringtable_dictionary.dct" file itself can be obtained from that tutorial, or extracted from an official L4D map using a tool like Pakrat.


  • How do I make the infected spawn?
    • Your map must have a info_director that is enabled, you also may have to use the console command "director_start".


  • Why won't the survivor bots move?


  • Why is the molotov fire / Smoker's smoke cloud not visible in-game?
    • This is usually due to the lack of a env_fog_controller entity. Also, check to make sure there were no errors generated during the map's compile process.


  • Why won't my rescue closets work?
    • Rescue closets will not function correctly if there are any nav errors present in the map (the "NAV ERRORS - Map is unplayable!" message appears in game). You will want to make sure the map's nav mesh is properly set-up.


  • How do I play my map in Versus Mode?
    • Versus Mode is enabled through the map's name. To create a Versus Mode map, simply prefix the map's name with "l4d_vs_". For example, if you had a map named "oiltanker_engineroom", to make it into a Versus map, just rename it to "l4d_vs_oiltanker_engineroom".


  • I followed the tutorial here to use L4D resources in Hammer, but some textures I use still don't show up in-game (they appear as purple and black checkers). Why is this?
    • Textures in the texture browser don't necessarily exist in the available L4D resources that are used in-game, and hence, will appear as the purple/black checkers while playing your map in Left 4 Dead. I haven't found how to get these textures to work, but a quick way to check if a texture will work while playing the game is to select the texture in the texture browser and hit the "Open Source" button. If some program opens with the selected VMT file, then the texture will work. If nothing happens, the texture will not show up in L4D.


Error messages and what they mean

Navigation mesh related errors

  • The nav file was built for an older compile.
    • This error message means the ".nav" file for a map is older then the ".bsp" itself. This should not be a problem unless the map's layout was changed after the ".nav" file was created. This can be remedied by running nav_analyze in the console after changes are made to the ".bsp".

The nav errors below will cause the message "NAV ERRORS - Map is unplayable!" to be displayed in game when the map is loaded.

  • Missing nav file.
  • Missing Battlefield check found N areas
  • GetGoalArea: Cannot find SPAWN_RESCUE_CLOSET area in FINALE, thus cannot guarantee reachability of goal area.
    • Regarding respawn closets; there are 2 essential steps for making them work properly. Place 3 Info survivor position entities in a room or closet then in game use the mark RESCUE_CLOSET console command to identify the closet/room as a rescue area. This process is explained in Navigation Meshes. Equally important is labeling the "player start" and checkpoint meshes using mark CHECKPOINT and mark PLAYER_START respectively.
  • GetGoalArea: Cannot find end area - no checkpoint or finale located.
    • This error is due to lack of one of the following: 1.) A missing Prop door rotating checkpoint entity. 2.) Not identifying a navigation mesh with mark CHECKPOINT. 3.) Not identifying a navigation mesh with mark FINALE.
  • ComputeFlowDistances: ERROR - Cannot compute flow.
    • The "Flow" of the map refers to the ability of the AI to travel from the spawn location to the designated Saferoom/finale checkpoint. If there are any breaks in the navigation mesh (meshes that are not connected via nav_connect or nav_splice), L4D cannot compute the path necessary to travel the map.
      Note.pngNote:Nav_generate can leave certain essential meshes from being connected, sometimes manual connection is required.
Note.pngNote:It is possible to remove the "NAV ERRORS - Map is unplayable!" error message. One method found is to make sure your map has an info_player_start, info_director, and a nav mesh, then follow the steps in "One method for changing levels" and "Building the navigation mesh" above.

Others

  • WARN: CL4DBasePanel::UpdateProgressBar called outside of level loading, discarded!
  • Engine Error: 81/ - weapon_ammo_spawn: UTIL_SetModel: not precached: models/props_unique/spawn_apartment/coffeeammo.mdl

The 2 errors below may be due to the BSP missing a "stringtable_dictionary.dct" file. For more information on this, see "Why does a newly compiled map crash after being loaded in L4D?" above.

  • Engine Error: CModelLoader::FindModel: NULL name
    • This can be caused due to compiling the map using an outdated FGD. Older FGDs do not have the new values for the env_fog and light_environment entities, therefore you are compiling a BSP with missing information.
  • Assert, File: U:\dev\terror\src\tier0\memstd.cpp, Line: 1623, Assert: ***** OUT OF MEMORY! attempted allocation size: 536873088 ****
    • Underneath this error message, there is a button labeled "Break in Dubugger". Click this. Your game will crash, but once you relaunch, load your map again. It should load up fine the second time.
    • Alternatively, next to the "Ignore this assertion [#] time(s)", putting any number for how many times you would like the engine to skip that error.

See also