Survival Gametype (L4D) - Valve Developer Community (2024)

Survival Gametype (L4D) - Valve Developer Community (1)

Survival Gametype (L4D) - Valve Developer Community (5)

... Survival Gametype (L4D) - Valve Developer Community (6)

This article includes basic instructions for creating a Survival mode map for Left 4 Dead.

Contents

  • 1 Starting Survival
  • 2 Navmesh
    • 2.1 Pure Survival Maps
    • 2.2 Multi-Gamemode Maps
  • 3 info_survivor_position
  • 4 Items
  • 5 info_gamemode - other uses
  • 6 Mission file and testing
  • 7 Changing Default Settings via Vscript
  • 8 See also

Starting Survival

Survival rounds begin by triggering any form of panic event.
Any entity capable of telling the Director to force a Panic Event will work. Such as func_button, func_button_timed, trigger_finale, trigger_once, prop_car_alarm or even that one song on the Jukebox.
This is set up in the same method as starting a finale or crescendo event.

Navmesh

All Survival mode maps rely on using the "Finale" or "Battlefield" and the optional "Battlestation" attribute on your navigation mesh to define the play space for the Survival mode.
Setting up the Nav mesh works differently based on whether your map is exclusively for survival, or if it adds survival mode to maps already used for campaigns.

Survival Gametype (L4D) - Valve Developer Community (7)Tip: Make use of Nav_mode.cfg to more easily edit your navmesh.

Pure Survival Maps

Maps that are only meant to support survival game mode only need three nav_mesh attributes: Player_Start, Battlefield and Finale.

  1. Enter Nav edit mode, select the area immediately around the player start using the Console Command nav_add_to_selected_set to pick one nav square, or nav_begin_drag_selecting followed by nav_end_drag_selecting to box select multiple squares.
  2. Use the Console Command mark player_start to mark this as the player starting area.
  3. Use the Console Command nav_select_radius 99999999999999 to select the entire Navmesh and mark all of it as Battlefield and NOT_CLEARABLE.
  4. Use the Console Command nav_clear_selected_set to drop the entire nav mesh selection.
  5. Select a few navmesh squares somewhere around the survival start trigger (or anywhere, really) and then mark those few faces as Finale.
  6. Use the Console Command Nav_Save to save the navmesh.
  7. Once you are sure you're done with the navmesh, perform a full analyze using nav_analyze.


Other useful attributes:

  • "Battlestation" - Makes survivor bots stay close to that area when fighting.
  • "Obscured" - Marks an area as being out of sight at all times. Very useful to tell the director they can freely dump infected there.
  • "No_Mobs" - Forces the director to not spawn any common infected in that nav area. Good for "Arena like" maps where the CI are supposed to come through gates.

Multi-Gamemode Maps

Existing crescendo or finale events that use the "Battlefield'" or "Finale" nav attributes can often be used without any changes to the nav mesh.

If your map adds survival sections to a coop map, add a func_nav_attribute_region encasing the area you want to play Survival in, as well as areas where infected should spawn for survival.
Call it "survival_nav_battlefield" and enable the Flag "Battlefield" and "Not_Clearable". You may also add additional "func_nav_attribute_region" entities of same names for more attributes like "Battlestation", where Survivor bots tend to stay.

Survival Gametype (L4D) - Valve Developer Community (8)Note:Using both the "Player_start" and "Finale" attributes in the same area does not work in multi-mode maps.

To enable the nav attributes, you need a info_gamemode entity which force spawns a point_template entity with the output OnSurvivalPostIO.

My OutputTarget EntityTarget InputParameterDelayOnly Once
OnSurvivalPostIOPoint_templateForceSpawn<none>0.0No

This very same point_template can be used to spawn all other entities required by survival, such as all weapons and props to block paths.

info_survivor_position

Survivors spawn at info_survivor_position entities.
Unfortunately finale maps use the same entity to "teleport" the survivors away when approaching the escape vehicle. If your survival map is also the finale of a campaign, or if your map uses the info_survivor_position for anything but the survival spawnpoint, you will need to delete those. Else your players might spawn at the wrong place.
Delete the extra info_survivor_position entities via the Info_gamemode entity, using the following outputs

My OutputTarget EntityTarget InputParameterDelayOnly Once
OnSurvivalinfo_survivor_position used by finalekill<none>0.0No

Items

In L4D, all placed items in the map will spawn in survival mode regardless of the normal densities allowed in other modes. If you wish to change the item placement or numbers, you can use the info_gamemode to spawn or kill items.

In L4D2, all item spawns are removed in survival mode.
In order to spawn items, you must give every intended survival item a name. You may give all of them the same name to make it easier.

Survival Gametype (L4D) - Valve Developer Community (11)Note:Director controlled entities such as weapon_spawn and weapon_item_spawn do not work.


Add a point_template, give it a unique name which lists all survival item names in its "Template" lines.
Add a info_gamemode entity with the following outputs

My OutputTarget EntityTarget InputParameterDelayOnly Once
OnSurvivalPostIOPoint_templateForceSpawn<none>0.0No

Survival Gametype (L4D) - Valve Developer Community (13)Warning:Using "OnSurvival" instead of "OnSurvivalPostIO" will cause ammo and ammo upgrades not to be spawned.

info_gamemode - other uses

Maps are able to load different entities, depending on which gamemode the map is run in. As mentioned in the previous section, survival gamemodes in L4D2 require a info_gamemode and point_template to spawn any items in survival gamemode at all.
The same two entities can be used to load func_brush walls, clip brushes, prop_dynamic, items, or any other sort of entity into your map for survival gamemodes. Like adding barricade props to stop players from reaching the end map saferoom.
Alternatively, you could use info_gamemode along with a logic_relay to delete items you do not wish to have in survival, like Alarm cars which when shot would start the survival round prematurely.

Mission file and testing

Before you can test your map in survival mode, you must add your map to the mission files "survival" mode section.

Example:

"modes"{ "survival" { "1" { "Map" "mymap" "DisplayName" "My survival Map" "Image" "maps/preview_01" } }}

The map can be loaded into survival either through the main menu, or using the console via the Command "map mapname_here survival". The latter allows you to use sv_cheats 1 while on survival mode.

Changing Default Settings via Vscript

Most, if not all, settings of survival gamemode are sets of console commands. This means that we can change how the gamemode behaves almost in its entirety.
The following Vscript can be added to any point_entity's Vscript Variable. Preferably info_director. Once the map launches, it will swap all settings with the ones you had defined.

Survival Gametype (L4D) - Valve Developer Community (14)Example: survival_horde_stage_interval_decay set to 0 will stop hordes from appearing in shorter intervals.

Survival Gametype (L4D) - Valve Developer Community (15)Note:Mutation15, Aka "Versus Survival" also removes all weapon_upgradepack_explosive on map launch.

// Survival ConvarsConvars.SetValue("director_survival_setup_time", 0) //default: 0 - Time limit to set up before the round auto-starts.Convars.SetValue("survival_boomer_limit_increase", 0) //default: 0 - After each special wave, increase max boomers by this amount.Convars.SetValue("survival_charger_limit_increase", 0)//default: 0- After each special wave, increase max chargers by this amount.Convars.SetValue("survival_horde_stage_interval", 60) //default: 60- Seconds between horde attacksConvars.SetValue("survival_horde_stage_interval_decay", 2) //default: 2 - After each horde attack, reduce the interval by this many secondsConvars.SetValue("survival_hunter_limit_increase", 1) //default: 1 - After each special wave, increase max hunters by this amount.Convars.SetValue("survival_jockey_limit_increase", 1) //default: 1 - After each special wave, increase max jockeys by this amount.Convars.SetValue("survival_lull_time", 15) //default: 15- Lull duration between survival waves.Convars.SetValue("survival_lull_time_increment", 15) //default: 15- Increment for the lull time per wave.Convars.SetValue("survival_lull_time_max", 60) //default: 60- Max lull duration.Convars.SetValue("survival_max_boomers", 2) //default: 2 - Max boomers alive at one time.Convars.SetValue("survival_max_chargers", 2) //default: 2 - Max chargers alive at one time.Convars.SetValue("survival_max_hunters", 3) //default: 3 - Max hunters alive at one time.Convars.SetValue("survival_max_jockeys", 2) //default: 2 - Max jockeys alive at one time.Convars.SetValue("survival_max_smokers", 4) //default: 4 - Max smokers alive at one time.Convars.SetValue("survival_max_specials", 8) //default: 8 - Max number of special zombies alive at one time.Convars.SetValue("survival_max_spitters", 3) //default: 3 - Max spitters alive at one time.Convars.SetValue("survival_round_restart_delay", 15) //default: 15- After a loss, restart the round after this many seconds.Convars.SetValue("survival_smoker_limit_increase", 1) //default: 1 - After each special wave, increase max smokers by this amount.Convars.SetValue("survival_special_limit_increase", 1) //default: 1 - After each special wave, increase max specials by this amount.Convars.SetValue("survival_special_spawn_interval", 20) //default: 20- Seconds between special spawn wavesConvars.SetValue("survival_special_spawn_interval_decay", 1)//default: 1 - After each special wave, reduce the spawn interval by this many secondsConvars.SetValue("survival_special_stage_interval", 60) //default: 60- After this many seconds, increase special zombie limitsConvars.SetValue("survival_spitter_limit_increase", 1)//default: 1 - After each special wave, increase max spitters by this amount.Convars.SetValue("survival_tank_multiple_spawn_delay", 10) //default: 10- Delay between the two tanks during double spawns.Convars.SetValue("survival_tank_stage_interval", 80) //default: 80- Seconds between tank attacksConvars.SetValue("survival_tank_stage_interval_decay", 20) //default: 20- After some number of waves, reduce the interval by this many secondsDirectorOptions <-{//Intentionally left blank. //Is required for the below Mutation15 stuff to work.}//Mutation15 (Versus survival) Convars. Only changed when mutation 15 is ran.if ( Director.GetGameMode() == "mutation15" ){DirectorOptions.ActiveChallenge <- 1;DirectorOptions.cm_ProhibitBosses <- 0;DirectorOptions.cm_CommonLimit <- 25;DirectorOptions.cm_TankLimit <- 1;DirectorOptions.ZombieTankHealth <- 2667;// Mutation 15 Forces the start of the survival timer after 90 seconds. BUT this will only fire a "PanicEvent" output.// If your survival starting button also activates sounds, particles or triggers other things, those will not be triggered.// To make those outputs be fired, you must use the function below to automatically trigger your button.// Keep in mind that if your survival starting button has "ForcePanicEvent" on a timer, you'll need to include that into your calculation.// As an example, "SurvivalSetupTime" triggers after 90 seconds. // "Survival_Start_relay" triggers after 89 seconds, but also has a one second delay for it to force the panic event. Therefore both panic events trigger at the same time.DirectorOptions.SurvivalSetupTime <- 90; //90 seconds after spawning into map to trigger panic event.function OnGameEvent_round_start_post_nav(params){DoEntFire("Survival_Start_relay", "trigger", "", 89, null, null) //89 seconds after spawning into map to trigger this relay.}Convars.SetValue("director_special_initial_spawn_delay_max", 10) //coop default: 60 -mutation15 default: 10 Convars.SetValue("director_special_initial_spawn_delay_min", 2) //coop default: 30 -mutation15 default: 2 Convars.SetValue("tongue_break_from_damage_amount", 300) //coop default: 50 -mutation15 default: 300 Convars.SetValue("tongue_choke_damage_amount", 5) //coop default: 10 -mutation15 default: 5 Convars.SetValue("tongue_dropping_to_ground_time", 0.5) //coop default: 2 -mutation15 default: 0.5 Convars.SetValue("tongue_hit_delay", 15) //coop default: 20 -mutation15 default: 15 Convars.SetValue("tongue_los_forgiveness_time", 1.5) //coop default: 1-mutation15 default: 1.5 Convars.SetValue("tongue_miss_delay", 3) //coop default: 15 -mutation15 default: 3 Convars.SetValue("tongue_no_progress_choke_early_delay", 1.0) //coop default: 1.5 -mutation15 default: 1.0 Convars.SetValue("z_ghost_los_expected_progress", 2000) //coop default: 1500 -mutation15 default: 2000 Convars.SetValue("z_hunter_limit", 2) //coop default: 1 -mutation15 default: 2 Convars.SetValue("z_jockey_ride_damage", 2) //coop default: 4 -mutation15 default: 2 Convars.SetValue("z_jockey_ride_damage_interval", 0.5) //coop default: 1 -mutation15 default: 0.5 Convars.SetValue("z_max_stagger_duration", 0.9) //coop default: 6 -mutation15 default: 0.9 Convars.SetValue("z_pounce_damage_interrupt", 150) //coop default: 50 -mutation15 default: 150 Convars.SetValue("z_pounce_stumble_radius", 160) //coop default: 0 -mutation15 default: 160 Convars.SetValue("z_scrimmage_creep_delay", 0)//coop default: 30 -mutation15 default: 0 Convars.SetValue("z_scrimmage_creep_rate", 100) //coop default: 30 -mutation15 default: 100 Convars.SetValue("z_smoker_limit", 2) //coop default: 1 -mutation15 default: 2 Convars.SetValue("z_spawn_safety_range", 200) //coop default: 550 -mutation15 default: 200 }

See also

  • Left 4 Dead Level Creation
  • Left 4 Dead 2 Level Creation
Survival Gametype (L4D) - Valve Developer Community (2024)

FAQs

Does Valve own Left 4 Dead? ›

Turtle Rock Studios has since split from Valve and re-formed as an independent company, with Valve retaining the rights to the Left 4 Dead IP.

How do you start a survival map in l4d2? ›

The map can be loaded into survival either through the main menu, or using the console via the Command "map mapname_here survival". The latter allows you to use sv_cheats 1 while on survival mode.

What is versus survival Left 4 Dead? ›

Left 4 Dead 2

There is a variant of Survival Mode, a mutation called Versus Survival. Following both Versus and Survival formulas, the Special Infected are played by a human team and both teams must compete for a better time than their opponent to continue the game until one team fails.

How many copies did Left 4 Dead 2 sell? ›

In February 2010, Electronic Arts, Left 4 Dead 2 retail distributor, revealed that the game had sold 2.9 million on retail so far while Forbes wrote that more than 4 million copies were sold at stores in 2009.

Why did Valve get sued? ›

Immersion — the haptic feedback company that's purchased, developed, or otherwise accumulated so many patents on rumble tech that almost every major tech company has licensed or settled out of court — is now accusing Valve of infringing its patents with the Steam Deck handheld, the Valve Index VR platform, its SteamVR ...

Why was Valve sued? ›

Valve sued by Immersion in patent infringement lawsuit related to haptic technology. A new lawsuit accuses Valve Software of infringing upon patents on touch-feedback technology with its gaming products such as the Steam Deck.

What is the hardest map in L4D2? ›

Dead center is the easiest because you can finish the ending the fastest, all you need to do is collect 13 gas cans but in the other levels you need to wait to escape and that can be more challanging. The sacrifice is the hardest in my opinion because at the end all those tanks make it hard to finish the level.

What are the hardest survival maps in Left 4 Dead 2? ›

If you gauge it by lowest world records it's Blood Harvest's Farmhouse (61:59.30), followed by Sacrifice's Port (64:33.77), then by No Mercy's Hospital (67:33.23). Waterfront's WR is 162:25.43, and it has 2 viable spots for holding out (3 if you're not aiming for a high time).

What is the hardest mode in Left 4 Dead? ›

Expert mode is the toughest difficulty of the four.

Why did Left 4 Dead 3 get Cancelled? ›

The game was designed as an open-world title set in Morocco which would have featured hundreds of zombies on-screen at once. Sadly, the development of that project was canceled due largely to those aforementioned problems with the development of the Source 2 engine.

Why are the L4D2 survivors immune? ›

The reason for Valve intermixing 'Carrier' and 'Immune' is likely due to the fact that there is no true immunity to the ever-changing Infection. Anyone who does not see negative side-effects/ turns after encountering the Infected are most likely only immune due to being a Carrier.

How old is Ellis l4d2? ›

Trivia. He is 23 years old. Keith is a friend of Ellis, as noted from his saferoom stories. He also would have even gotten married himself, had he not ran away from his wedding.

How old is coach l4d2? ›

Trivia. He is 44 years old.

How old is Rochelle l4d2? ›

How old is Rochelle l4d2? Rochelle is a twenty-nine-year-old minor associate producer for a news station with a high reputation, though her job had more to do with moving cables and coffee duties. She was in Savannah producing a segment about the evacuation center when the area became overrun with the Infected.

What company owns Left 4 Dead? ›

Left 4 Dead (abbreviated L4D) is a singleplayer and multiplayer cooperative survival horror FPS game developed by Valve Corporation and Turtle Rock Studios.

Why did Valve abandon Left 4 Dead? ›

Developer struggles

Contrary to popular belief, Valve was working on the three-numbered games in those franchises that everyone loves. It wasn't laziness, disinterest, or prioritizing Steam that kept Valve from finishing those games. Instead, it was a problem with the very foundation they were being built upon.

What company created Left 4 Dead? ›

Why did Valve not make Left 4 Dead 3? ›

Geoff Keighley explains that Source 2 and "Left 4 Dead 3" were in development at the same time, but the ambitious goals the team had for this follow-up proved to be too much for the engine to handle.

Top Articles
Latest Posts
Article information

Author: Pres. Lawanda Wiegand

Last Updated:

Views: 5621

Rating: 4 / 5 (71 voted)

Reviews: 86% of readers found this page helpful

Author information

Name: Pres. Lawanda Wiegand

Birthday: 1993-01-10

Address: Suite 391 6963 Ullrich Shore, Bellefort, WI 01350-7893

Phone: +6806610432415

Job: Dynamic Manufacturing Assistant

Hobby: amateur radio, Taekwondo, Wood carving, Parkour, Skateboarding, Running, Rafting

Introduction: My name is Pres. Lawanda Wiegand, I am a inquisitive, helpful, glamorous, cheerful, open, clever, innocent person who loves writing and wants to share my knowledge and understanding with you.