L4D2 Mission Files

From Valve Developer Community
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

Mission files are .txt files that are stored in the missions directory, for example left4dead2\addons\deadline2\missions\mycampaign.txt.

Limitations

Icon-Important.pngImportant:A file is given an unique name to avoid conflicts with other campaigns.

Games

Left 4 Dead 2 Left 4 Dead 2

Mission files are metadata scripts that describes the structure and content of a campaign. They are used by the game UI, matchmaking, and the game server.

File format

File format
txt
"mission" { "Name" "<name of the addon>"
Warning.pngWarning:Only Wikipedia icon alphanumeric text. There must not be spaces in-between text.
"Version" "<number>"
Warning.pngWarning:Only Wikipedia icon numerical digits. There must not be dots in-between numbers.
"Author" "<Your name or company name>" "Website" "<link to the addon>" "DisplayTitle" "<title name>" "Description" "<title desc>" "OuttroImage" "vgui\<name of the outro title e.g. OutroTitle_Deadline2>" "poster" { "posterImage" "<loading screen image>" } "modes" { "<mode type; e.g versus, survival; see below>" { "1" { "Map" "<map name>" "DisplayName" "<map title>" "Image" "maps/<image for the map>" } "2" { "Map" "<map name>" "DisplayName" "<map title>" "Image" "maps/<image for the map>" } } "versus" { "1" { "Map" "<map name>" "DisplayName" "<map title>" "Image" "maps/<image for the map>" } "2" { "Map" "<map name>" "DisplayName" "<map title>" "Image" "maps/<image for the map>" } } "survival" { "1" { "Map" "<map name>" "DisplayName" "<map title>" "Image" "maps/<image for the map>" } } "scavenge" { "1" { "Map" "<map name>" "DisplayName" "<map title>" "Image" "maps/<image for the map>" } } } }

Debugging

To debug mission files the game needs to be started with the -allowdebug command line option. Running the mission_reload console command will attempt to load all mission files, and will print information about any errors encountered.

Base Mission File

This is the most bare bones mission file, containing only the things you need.

 "mission"
 {
 	"Name"		"myCampaign"	//For matchmaking system. Only letters A-Z and Numbers 0-9 allowed.
  	"Version"	"1"		//For matchmaking system. Only Numbers 0-9 allowed.
 
 	// Main Menu representation of Campaign.
 	"DisplayTitle"	"My Campaign!"
 	"Description"	"An epic tale of zombies getting shot in the head."
 	"Author"	"Me!"
 
 	// Where to download the campaign. Seen by people trying to join a server playing this campaign. Not required for workshop submissions.
 	"Website"	"http://media.steampowered.com/apps/513/deadline2.html"
 
 	// VMT shown behind the end credits when your campaign ends. MUST have "vgui/" at the front.
 	"OuttroImage"	"vgui/outroTitle_DeadCenter"
 
 	// A list of melee weapons that are allowed to spawn in the campaign. 
 	// Custom melee weapons can be added by using the melee weapon script name in this list, such as "My_custom_melee.txt" at the end of this string.
 	// Not having this line at all will make your maps load any melee weapons in the melee_manifest.txt, even if another mod adds more custom melee weapons. Unfortunately, this would then not allow you to ship custom melee weapons with the map, because those do not need a melee_manifest.txt and entirely rely on this very string to exist. Making the two options mutually exclusive.
 	"meleeweapons"	"baseball_bat;cricket_bat;crowbar;electric_guitar;fireaxe;frying_pan;golfclub;katana;knife;machete;pitchfork;shovel;tonfa;My_custom_melee" //these are all official melee weapon, plus one extra.
 
 	// Which set of survivors should be used. 1 for L4D1, 2 for L4D2
 	"survivor_set"		"2"	
 	
 	// Other options. 0 = Off, 1 = on. 
 	"allow_cola"		"0"	// Allows the Dead Center cola bottles to spawn.
 	"no_wpn_restore"	"0"	// On player wipe, don't keep any weapons.
 	"no_female_boomers"	"0"	// Disables spawning of the Boomette.
 	"no_cs_weapons"		"0"	// Disables spawning of the German version CS weapons. AS of the "The Last Stand" Css weapons are available for every version of the game. It is unsure if this string is still in use.
 	"allow_diesel"		"0"	// Allows the Hard Rain Diesel cans to be used.
 
 	// Loading screen poster settings.
 	"poster"
 	{
 		// Loadingscreen. VMT must be placed in "materials/vgui/"
 		"posterImage"		        "LoadingScreen_MyCampaign" // Square loadingscreen using 1024x1024, 2048x2048, ect ... texture resolution. For below 16:9 Aspect ratio
 		"posterImage_widescreen"	"LoadingScreen_MyCampaign_widescreen" // Rectangular loadingscreen using 1024x2048, 4096x2048, ect texture resolution. For above 16:9 Aspect ratio
 		// If no dedicated textures were available, a square loadingscreen will be stretched on 16:9, while a rectangular texture will be squeezed on 4:3.
 		"fullscreen"			"1" // Fitts loading screen onto entire screen, resizing it if required.  		
 		"l4d2_names"			"1" // Use L4D2 survivor names on loadingscreen or not. "survivor_set" already handles this, making this seemingly useless.		
 		"character_order"		"coach;mechanic;gambler;producer"  //Order in which survivors appear on the bottom left of the loadingscreen.
 		//"character_order"		"biker;manager;teengirl;namvet"  //Ditto, but L4D1 names.		
 	}  
 	"modes"
 	{
 		"coop" //Co-Op Game mode. 
 		{
 			"1"
 			{
 				"Map"		"my_map1" // BSP file name, without extension
 				"DisplayName"	"Map 1!" //Name seen on menu
 				"Image"		"maps/my_map1" //Thumbnail VMT file, must be saved in "materials\vgui\maps"
 			}
 
 		//	Additional maps listed here, make sure to number them correctly.
 		//	"2"
 		//	{
 		//		"Map"		 "my_map2"
 		//		"DisplayName"	 "Map 2!"
 		//		"Image"		 "maps/my_map2"
 		//	}			
 		}
 	}
 }

Game Modes

The "modes" section defines what Game Modes your map(s) support. You may reuse the same bsp for multiple gamemodes, if it was compiled to allow it. See Multi Game Mode Support, Survival Gametype, Scavenge Maps and Mutation Gametype for more info.

All maps must be listed in chronological order, but it does not matter which game mode is listed first. Example:

 "modes"
 {
 	  "coop"
 	  {
 		  "1"
 		  {
 			"Map"		"my_map1"
 			"DisplayName"	"Map 1!"
 			"Image"		"maps/my_map1" 
 		  }			
 		  "2"
 		  {
 			"Map"		"my_map2"
 			"DisplayName"	"Map 2!"
 			"Image"		"maps/my_map2" 
 		  }			
 	  }
 
 	  "versus"
 	  {
 		  "1"
 		  {
 			"Map"		"my_map1"
 			"DisplayName"	"Map 1!"
 			"Image"		"maps/my_map1" 
 			"VersusCompletionScore"	"800" //This map awards max 800 points to the score when the saferoom is reached.
  		  }			
 		  "2"
 		  {
 			"Map"		"my_map2"
 			"DisplayName"	"Map 2!"
 			"Image"		"maps/my_map2"  
 			"VersusCompletionScore"	"1000" //This map is longer and rewards 1000 points.
  		  }			
 	  }
 
 	  "survival"
 	  {
 		  "1"
 		  {
 			// Uses my_map2.bsp, but because it is the first map in survival mode, it is listed as number 1.
 			"Map"		"my_map2"
 			"DisplayName"	"Parking Lot" //Fancy name because the survival play area is just the parking lot.
 			"Image"		"maps/my_map2" 
 		  }			
 	  }
 }

Available Game Modes

These are all available gamemodes. Also showing what gamemode a mutation is based on, along with a description.

Script name Official name Base Description
Coop - - Cooperative gameplay - Humans against AI
Realism - - No object outlines, damage penalty for Friendly Fire, no rescue Closets, Witches Insta-Kill (except on easy), Witch "Cr0wning" is impossible. Also removed "Speechbubble" over playermodel of speaking teammates.
Survival - - Stay alive for as long as possible.
Versus - - Cooperative gameplay - Humans against other Humans playing as Special Infected
Scavenge - - Collect Gas Cans for generators.
Dash - - Survivors must run from one flag to another. A horde and SI spawn after every Waypoint has been activated. Waypoints may require a single, or multiple survivors to be present.
Holdout - - Survivors must stay alive in a specific location until rescue arrives. They are able to build barricades and earn points, by killing SI, to purchase supplies. A helicopter arrives to drop equipment halfway through, before resue arrives.
Shootzones - - Only CI spawn. Survivors can only fire their weapons in specific areas marked by a grave and music playing, when stood in the Shoot Zone.
Gunbrain GunBrain Coop -
Tankrun Tank Run Coop Default COOP, but without CI, SI and Witches. Only Tanks.
Rocketdude RocketDude Coop No Survivor bots. Survivors have 200HP. Only Pain Pills and Adrenaline spawn. Survivors spawn with Grenade Launcher and bladed melee or magnum pistols. Grenade launchers have infinite ammo and act like rocket launchers. Grenade Launchers deal almost no damage to Survivors. The goal is to stay in the air as long as possible, similar to "Rocket Jumping" Soldiers in Team Fortress 2. Downed Survivors may revive themselves into "Black and White" mode by killing SI. Official maps have hidden mushrooms which act as health kits when used.
L4d1 Left 4 Dead 1 Coop Coop Emulate original L4D1 feel. Everything introduced in L4D2, such as Spas, M60, charger, jockey, ect. are removed
L4d1vs Left 4 Dead 1 Versus Versus Same as "L4D1". Literally just includes the L4D1 mutation script and adds nothing.
L4d1survival Left 4 Dead 1 Survival Survival Same as "L4D1". Literally just includes the L4D1 mutation script and adds nothing.
Mutation1 Last Man On Earth Coop Singleplayer. One single survivor, no CI, only SI, no Boomers because they can't spawn CI (except for the "Church Guy"). Getting incapped by SI will revive you automatically, but you'll be one hit away from death. Fewer Pipebombs, more First Aid Kits.
Mutation2 Headshot! Coop Only headshots and Melee decapitations kill CI. SI are unaffected.
Mutation3 Bleed Out Coop No First Aid Kits, only Pain pills, Adrenaline and Defibrillators available. Players start with "Temporary Health" (what you get from Pain Pills) which keeps on dwindling.
Mutation4 Hard Eight Coop A maximum of 8 SI can spawn at once, as opposed to the default 4. SI spawn more often.
Mutation5 Four Swordsmen Coop No weapons available anywhere, but players start with katanas. no CI spawn, SI spawn more often.
Mutation7 Chainsaw Massacre Coop This mutation automatically spawns chainsaws with unlimited fuel. No weapons except starting pistol and chainsaws are available. Players could decide to keep their pistols, or pistols dropped by other players.
Mutation8 Ironman Coop Same as realism, except: If all Survivors die they will be kicked back to the lobby. No ammo piles available.
Mutation9 Last Gnome On Earth Coop Players must transport the Gnome all the way through the campaign. Gnome is spawned by mutation, more could be added by the mapper. Infected chase whoever is holding the gnome. Maps will only transition if the gnome is inside the saferoom.
Mutation10 Room For One Coop Whichever human player arrives at the escape vehicle first is the only one who can leave. Everyone else dies. Automatically loads finale map.
Mutation11 Healthpackalypse! Versus Versus, but no health items available. If players get damaged, they have no way to recover health. Unless the map has triggers or other special ways to regain health.
Mutation12 Realism Versus Versus Same as Realism, except in Versus mode. Infected players can still see outlines of survivors and eachother.
Mutation13 Follow the Liter Scavenge Same as Scavenge, but only one cluster of gas cans is available for pickup at a time.
Mutation14 Gib Fest Coop Players start with a Magnum pistol and M60 rifles. No other weapon spawns are available.
Mutation15 Versus Survival Survival Survival and Versus at once.
Mutation16 Hunting Party Coop All SI are Hunters. Up to six hunters mays pawn. Tanks and Witches still spawn, as they're considered Bosses. CI do more damage, which will be instant incapitations on expert.
Mutation17 Lone Gunman Coop Singleplayer, No Survivor bots. Only available weapons are a magnum pistol and throwable items. Only available Infected are Boomers and their spawned Hordes, along with the usual Tank and Witch spawns.
Mutation18 Bleed Out Versus Versus Same as Bleed out, Except in versus mode.
Mutation19 Taaannnkk! Versus All SI will be tanks. First Aid Kits will be replaced with Pills. "Frustration meter" is disabled. (the timeout meter tank players get when they don't damage Survivors for too long)
Mutation20 Healing Gnome Coop No health items available. Players start with 99 "Temporary Health". The only option to get health is holding the Gnome, which spawns automatically through the mutation. Players could hold the gnome forever, letting teammates die.
Community1 Special Delivery Coop Same as "Hard Eight" except SI have no spawn wait timer and CI do not spawn.
Community2 Flu Season Coop CI only spawn if summoned by a Boomer or during Panic Events. Tanks and Witches only spawn if scripted or forced via entity I/O. SI spawn timer is removed. Up to ten spitters and boomers can spawn at once. Boomers and Spitter are faster and have no cooldown on their attacks.
Community3 Riding My Survivor Versus All SI are Jockeys. Jockeys have increased health, damage and speed.
Community4 Nightmare Survival CI and SI are stronger. Survivors have no outline glow on teammates or items. Fog is thicker.
Community5 Death's Door Coop Survivor incapacitation leads to immediate death. First Aid Kits do not spawn.
Community6 Confogl Versus Versus, but First Aid Kits do not spawn. Players start with Pain Pills instead. Only available weapons are Pump Shotguns, SMGs and the hunting rifle.

Mutations will automatically inherit map settings of whatever game mode the mutation is based on. unless otherwise specified
Example:

 "Versus"
 {
 	"1"
 	{
 		"Map"		"my_map1"
 		"DisplayName"	"Map 1!"
 		"Image"		"maps/my_map1" 
 		"VersusCompletionScore"	"800"
 		"versus_boss_spawning"
 		{
 			"tank_chance"		"1"
 			"witch_chance"		"1"
 		}
 	}			
 }
 "Mutation18" // Bleed Out Versus. Same as regular Versus, but with halfed Tank and Witch spawn chance to make it easier for survivors.
 {
 	"1"
 	{
 		"Map"		"my_map1"
 		"DisplayName"	"Map 1!"
 		"Image"		"maps/my_map1" 
 		"VersusCompletionScore"	"800"
 		"versus_boss_spawning"
 		{
 			"tank_chance"		"0.5"
 			"witch_chance"		"0.5"
 		}
 	}			
 }

Optional Per-Map Settings

The following settings can be added to any map listing in the missionfile, to make the settings only affect that specific map.

Revisiting maps

Some maps, like in Hard Rain can be "Revisited". This allows you to keep all existing item spawns in the same locations, but all the ones you had used are now gone on the way back.

This only works if the items in both maps are in the exact same location, with same orientation. This can be achieved by using the same VMF as a base for both maps, but the saferooms being reversed on the "way back", along with optional visual changes.

Note.pngNote:Adding new weapon and item spawn points on the "way back" has to be done via force spawning weapons using a point_template. The Director will realise those added items have not been there before and won't spawn them, unless you load directly into that map. In which case there's no revisit_source data to read.

Example:

 "1"
 {
   "Map"		"my_map1" 
   "DisplayName"	"Map 1!"
   "Image"		"maps/my_map1"
 	
   "revisitable" "1" // Keep track of all used items on this map. We'll be coming back to this one.
 }
 
 "2"
 {
   "Map"		"my_map2" 
   "DisplayName"	"Map 2!"
   "Image"		"maps/my_map2"
 
   "revisit_source" "my_map1" // We're back, but going the other way. All items osed on the here specified maps will no longer be available.
 }
Todo: Find out if it is possible to chain revisits. As in one "hub" map with tons of supplies, which start to dwindle as we progress.

Director Journals

There's also a nice "Journal" feature the Director has. It can be used to turn on a light on Map1 which will be still turned on on the way back. Or remembering what a logic_case entity picked at random, so on the way back the same thing will be picked.
It could also be used as a "This action has consequences" gimmick where pressing a button on one map will have something happen on a later map because you pressed said button.

To set up a journal, add a logic_auto to your map with the following outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMultiNewRound Director CreateNewJournal Desired.Journal.Name 0.00 No
Io11.png OnMultiNewMap Director CreateNewJournal Desired.Journal.Name 0.00 No

Any entity whose outputs need to be remembered, say a logic_relay named Relay01 needs its outputs set up as such:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger Light01 TurnOn 0.00 No
Io11.png OnTrigger Director WriteToJournal Relay01:trigger 0.00 No

The Relay01 turns on a light and then tells the director to write into its journal to trigger Relay01.
Instead of Relay01:trigger you could use Light01:TurnOn. However, it is better to trigger the relay if the relay triggers many things.

Executing the journal on the way back, to have the director trigger everything he should, can be done using the ExecuteJournalinput referencing the specific Journal you want to have executed.

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMultiNewRound Director ExecuteJournal Desired.Journal.Name 0.00 No
Io11.png OnMultiNewMap Director ExecuteJournal Desired.Journal.Name 0.00 No
Icon-Bug.pngBug:During testing, buttons that get pressed by the director did not turn on sounds, while manually pressing the buttons does.  [todo tested in?]
Note.pngNote:It is possible to use multiple journals per campaign, should you need to do so

Unfortunately, it seems as executing a journal deletes it, so you cannot execute it again on a later map.
Example Scenario: A button at the beginning of C4M1 turns on a light, and a button in its end saferoom turns on a light. Both of these actions are recorded into the journal "C4M1.To.C4M2".
Executing the journal "C4M1.To.C4M2" on the map C4M2 turns on the saferoom light and deletes that journal. So when you finally arrive on C4m5, where the first light was, it will not be turned on by the "C4M1.To.C4M2" journal because it no longer exists.

One way of fixing this is to create a new journal and then executing the previous journal afterwards. That way the outputs made by the director will be recorded into the new journal. But that also requires all the entities that have their outputs triggered to be present on all maps.
Fix: Make a skybox cube outside of the map and paste all buttons or triggers that need their outputs remembered into it. Then, Create a logic auto with the following outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMultiNewRound Director CreateNewJournal "C4M2.To.C4M3" 0.00 No
Io11.png OnMultiNewMap Director CreateNewJournal "C4M2.To.C4M3" 0.00 No
Io11.png OnMultiNewRound Director ExecuteJournal "C4M1.To.C4M2" 0.50 No
Io11.png OnMultiNewMap Director ExecuteJournal "C4M1.To.C4M2" 0.50 No

This, effectively, creates journal "C4M2.To.C4M3" and executes "C4M1.To.C4M2" half a sefcond later. While "C4M1.To.C4M2" is executed it presses the buttons which have their own outputs of WriteToJournal to write into "C4M2.To.C4M3".

Swapping Special Infected Models

We have the ability to swap all Special Infected on a map with the same different model. Official campaigns use this to swap the Boomer, Hunter, Smoker and Tank on L4D1 maps with their L4D1 models.
The required strings are as followed:
Worldmodel

Viewmodel

  • BoomerArmsVariant <model>
  • ChargerArmsVariant <model>
  • HunterArmsVariant <model>
  • JockeyArmsVariant <model>
  • SmokerArmsVariant <model>
  • SpitterArmsVariant <model>
  • TankArmsVariant <model>
Note.pngNote:All custom models must function like a proper replacement mod, except as a standalone model.

Examples

"The Sacrifice" replaces all tanks (which is only one on the map) with this version:

 "TankVariant"		"models/infected/hulk_dlc3.mdl"
 "TankArmsVariant"	"models/v_models/weapons/v_claw_hulk_dlc3.mdl"

Replacing all Si with their available L4D1 counterparts:

 "TankVariant" 		"models/infected/hulk_l4d1.mdl"         
 "HunterVariant" 	"models/infected/hunter_l4d1.mdl"
 "SmokerVariant" 	"models/infected/smoker_l4d1.mdl"
 "BoomerVariant"	"models/infected/boomer_l4d1.mdl"
 "TankArmsVariant"	"models/v_models/weapons/v_claw_hulk_L4D1.mdl"     
 "HunterArmsVariant"	"models/v_models/weapons/v_claw_hunter_l4d1.mdl"
 "SmokerArmsVariant"	"models/v_models/weapons/v_claw_smoker_l4d1.mdl"
 "BoomerArmsVariant"	"models/v_models/weapons/v_claw_boomer_l4d1.mdl"

"The Passing" replaces the witch with one wearing a bridal dress:

 "WitchVariant"	"models/infected/witch_bride.mdl"

Completely custom models can also be made:

 "SpitterVariant"      "models/infected/Custom_spitter.mdl"
 "SpitterArmsVariant"  "models/v_models/weapons/Custom_spitter_viewmodel.mdl"

Using Vscripts it is possible to swap out a model for a single spawnpoint on a map. However, the viewmodel hands will not match up correctly for the person playing as the infected in versus.
This Guide explains how this is achieved.

Versus map settings

Versus maps allow optional modifications to alter the spawning of bosses.

 "versus_boss_spawning"
 {
 	"spawn_pos_min"		"0.10" // Todo|Properly document effects of this
 	"spawn_pos_max"		"0.90" // Todo|Properly document effects of this
 	"allow_boss_mix"	"1" // Todo|Properly document effects of this
	"witch_and_tank"	"1"// Todo|Properly document effects of this
	"tank_chance"		"1.0" // tank spawn chance multiplier. can be set to 0 to stop tank spawns
 	"witch_chance"		"1.0" // witch spawn chance multiplier. can be set to 0 to stop witch spawns
 }

Files

  • campaign1 - Dead Center
  • campaign2 - Dark Carnival
  • campaign3 - Swamp Fever
  • campaign4 - Hard Rain
  • campaign5 - The Parish
  • campaign6 - The Passing
  • campaign7 - The Sacrifice
  • campaign8 - No Mercy
  • campaign9 - Crash Course
  • campaign10 - Death Toll
  • campaign11 - Dead Air
  • campaign12 - Blood Harvest
  • campaign13 - Cold Stream
  • campaign14 - The Last Stand
  • credits - Credits
  • HoldoutChallenge - Holdout Challenge, Two Challenging Holdout arenas
  • HoldoutTraining - Holdout Training, Two Holdout training arenas
  • parishdash - Parish Dash, Two Dash maps set in the Parish
  • shootzones - Carnival Shoot Zones, Play the Shoot Zones sample mode in the carnival

Examples

These are the mission files of Dead Line and Dead Line 2, example campaigns created by Valve. The full add-on and source files can be downloaded off a website hosted by Steam:

Note.pngNote:These are somewhat outdated, yet kept and merged onto this page for legacy. The above information is more up to date and easier to digest.
Note.pngNote:These pages claim double-clicking installs the addons. This does not work and will for most people open GCFScape or Crowbar instead. If "Addoninstaller" is assigned to VPK files it should work, but the addoninstaller usually breaks addons and causes them to not work at all.

Deadline

This is the mission metadata file included with the sample Deadline campaign. Feel free to use this as a template for the metadata while for your own custom campaign addons.

Remember the URL in the Website key should point to the home website to your mission and have a download option there! Players who don't have your mission will be directed to this website to get it.

 // Mission files describe the metadata needed by campaign-specific add-ons so they can be 
 // integrated into Left4Dead. The data in this file is used by the game UI, matchmaking and server.
 // Although you may provide multiple Campaigns in one add-on by putting more than one .TXT file 
 // in the missions folder, it's generally a good idea to stick to one per add-on.
 //
 // HOW TO DEBUG MISSION FILES:
 //	In the console set "developer 2"
 //	Then type "mission_reload"
 // This will make the game reload all the mission files and print out every chapter for every mode it
 // finds.  It's very useful to ensure that your mission file is being correctly read.
 
 "mission"
 {
 	// Use a short name, since it is used as a tag on the servers for matching
 	// your campaign when looking for a dedicated server.  Generally it should
 	// be something unique.  One suggestion to is use your initials and a short
 	// abbreviated name for your campaign.
 	"Name"		"DeadLine"
 
 	// The version number is used when finding campaigns on dedicated servers
 	// and in matchmaking. If you try to connect to someone in matchmaking
 	// who has a newer version, you will be directed to download the new
 	// version.  You must increment this to the next integer (whole numbers)every
         // time you release an update.
 	"Version"       "3"
 
 	// Author is displayed in the UI when people see others playing your
 	// campaign.
 	"Author"	"Valve"
 
 	// Website is extremely important as people will automatically be sent
 	// to this URL if they try to join a friend running your campaign.  This
 	// should be the home page for your campaign and it should provide a
 	// description, a link to download it, and installation instructions.
 	"Website"	"http://media.steampowered.com/apps/513/deadline.html"
 
 	// This name is used when refering to the campaign in the UI.
 	"DisplayTitle"	"Dead Line"
 	"Description"  	"Catch the last subway... out of hell."
 
 	// Vmt shown behind the end credits when your campaign completes.
         // Note: This item needs to have "vgui\" at the front. It is assumed
 	// for the poster and the map thumbnails.
  	"OuttroImage"	"vgui\OutroTitle_Deadline"
 
 	// Loading poster data
 	//
 	// Note that "posterTitle" and "posterTagline" are often blank as
 	// the poster usually includes these in the poster image itself.
 	// If you do not provide a poster, a generic default will be used.
 	"poster"
 	{
 		"posterImage"		"LoadingScreen_DeadLine"
 
 		"posterTitle"		""
 		"posterTitle_y"		"360"
 
 		"posterTagline"		""
 		"posterTagline_y"	"372"
 
 		// Adjust these to align the survivor names on your poster.
 		// 0,0 is center of the poster.
 		// Adjusting x value moves the names horizontally.
 		// Adjusting y value moves the names vertically.
 		// Try to space them in a staggered arrangement so that long names do not overlap.
 		"bill_player_name_x"	"118"
 		"bill_player_name_y"	"-195"
 
 		"louis_player_name_x"	"-53"
 		"louis_player_name_y"	"-205"
 
 		"zoey_player_name_x"	"-124"
 		"zoey_player_name_y"	"-210"
 
 		"francis_player_name_x"	"31"
 		"francis_player_name_y"	"-200"
 	}
 
 	// The modes section lists each of your campaign maps and each mode
 	// they support.  Depending on how you set up your campaign maps,
 	// you can reuse the same bsp for different modes as is the case with 
         // coop and versus in this example. This requires setting up entities
         // that show up or operate differently for different modes.
         //
 	// The following modes are supported: "coop", "versus", "survival"
 	//
 	// Number each map section starting with "1"
 	//
 	// "Map" is the name of the bsp of the starting map. (do not include
         // an extension)
 	// "DisplayName" is the name to use for the chapter of the map.
 	// "Image" is the image used for the chapter in the lobby and
 	// settings.
 
 	"modes"
 	{
 		"coop"
 		{
 			"1"
 			{
 				"Map" "l4d_deadline01"
 				"DisplayName" "Deadline 1"
 				"Image" "maps/l4d_deadline"
 			}
 
 			"2"
 			{
 				"Map" "l4d_deadline02"
 				"DisplayName" "Deadline 2"
 				"Image" "maps/l4d_deadline"
 			}
 		}
 
 		"versus"
 		{
 			"1"
 			{
 				"Map" "l4d_deadline02_vs"
 				"DisplayName" "Deadline Versus"
 				"Image" "maps/l4d_deadline"
 			}
 		}	
 	
 		"survival"
 		{
 			"1"		
 			{
 				"Map" "l4d_deadline02"
 				"DisplayName" "Dead Line Survival"
 				"Image" "maps/l4d_deadline"
 			}
 		}	
 	}
 
 }

Deadline 2

Note how the the mission "Name" does not have any special characters or spaces.

 // Mission files describe the metadata needed by campaign-specific add-ons so they can be
 // integrated into Left4Dead. The data in this file is used by the game UI, matchmaking and server.
 // Although you may provide multiple Campaigns in one add-on by putting more than one .TXT file 
 // in the missions folder, it's generally a good idea to stick to one per add-on.
 //
 // HOW TO DEBUG MISSION FILES:
 //	In the console set "developer 2"
 //	Then type "mission_reload"
 // This will make the game reload all the mission files and print out every chapter for every mode it
 // finds.  It's very useful to ensure that your mission file is being correctly read.
 
 "mission"
 {
 	// Use a short name, since it is used as a tag on the servers for matching
 	// your campaign when looking for a dedicated server.  Generally it should
 	// be something unique.  One suggestion to is use your initials and a short
 	// abbreviated name for your campaign. Avoid spaces and special characters.
 	// Do not change the name when you create a revision, as the matchmaking
         // system will consider it a different campaign. Instead, use "Version" and 
         // "DisplayTitle" below to indicate revisions.
 	"Name"		"DeadLine2"
 
 	// The version number is used when finding campaigns on dedicated servers
 	// and in matchmaking. If you try to connect to someone in matchmaking
 	// who has a newer version, you will be directed to download the new
 	// version.  You must increment this to the next integer (whole numbers)every
         // time you release an update. (I.E. 1, 2, 3, 4, etc.)
 	"Version"       "1"
 
 	// Author is displayed in the UI when people see others playing your
 	// campaign.
 	"Author"	"Valve"
 
 	// Website is extremely important as people will automatically be sent
 	// to this URL if they try to join a friend running your campaign.  This
 	// should be the home page for your campaign and it should provide a
 	// description, a link to download it, and installation instructions.
 	"Website"	"http://media.steampowered.com/apps/513/deadline2.html"
 
 	// This name is used when referring to the campaign in the UI. 
 	"DisplayTitle"	"Dead Line (2.0)"
 	"Description"  	"Catch the last subway... out of hell... Again!"
 
 	// Vmt shown behind the end credits when your campaign completes.
         // Note: This item needs to have "vgui\" at the front. It is assumed
 	// for the poster and the map thumbnails.
  	"OuttroImage"	"vgui\OutroTitle_Deadline2"
 
 	// Loading poster data
 	//
 	// Note that "posterTitle" and "posterTagline" are often blank as
 	// the poster usually includes these in the poster image itself.
 	// If you do not provide a poster, a generic default will be used.
 	"poster"
 	{
 		"posterImage"		"LoadingScreen_DeadLine2"
                 //Note L4D2 does not position player names over the poster.
 
 	}
 
 	// The modes section lists each of your campaign maps and each mode
 	// they support.  Depending on how you set up your campaign maps,
 	// you can reuse the same bsp for different modes as is the case with 
         // coop and versus in this example. This requires setting up entities
         // that show up or operate differently for different modes.
         //
 	// The following modes are supported: "coop", "versus", "survival"
 	//
 	// Number each map section starting with "1"
 	//
 	// "Map" is the name of the bsp of the starting map. (do not include
         // an extension)
 	// "DisplayName" is the name to use for the chapter of the map.
 	// "Image" is the image used for the chapter in the lobby and
 	// settings.
 
 	"modes"
 	{
 		"coop"
 		{
 			"1"
 			{
 				"Map" "l4d_deadline01"
 				"DisplayName" "Deadline 1"
 				"Image" "maps/l4d_deadline2"
 			}
 
 			"2"
 			{
 				"Map" "l4d_deadline02"
 				"DisplayName" "Deadline 2"
 				"Image" "maps/l4d_deadline2"
 			}
 		}
 
 		"versus"
 		{
 			"1"
 			{
 				"Map" "l4d_deadline01"
 				"DisplayName" "Deadline 1"
 				"Image" "maps/l4d_deadline2"
 			}
 
 			"2"
 			{
 				"Map" "l4d_deadline02"
 				"DisplayName" "Deadline 2"
 				"Image" "maps/l4d_deadline2"
 			}
 		}	
 	
 		"survival"
 		{
 			"1"		
 			{
 				"Map" "l4d_deadline02"
 				"DisplayName" "Dead Line Survival"
 				"Image" "maps/l4d_deadline2"
 			}
 		}	
 		"scavenge"
 		{
 			"1"
 			{
 				"Map" "l4d_deadline02"
 				"DisplayName" "Dead Line Scavenge"
 				"Image" "maps/l4d_deadline2"
 			}
 		}	
 	}
 
 }

See also