Left 4 Dead 2/Scripting: Difference between revisions
ThaiGrocer (talk | contribs) m (Had incorrect info about scavenge and vscripts) |
ThaiGrocer (talk | contribs) m (Back to original TOC alignment.) |
||
Line 1: | Line 1: | ||
{{l4d2}} '''Left 4 Dead 2 vscripts''' are scripts that can be run in-game to perform various tasks and changes. | {{l4d2}} '''Left 4 Dead 2 vscripts''' are scripts that can be run in-game to perform various tasks and changes. | ||
Revision as of 22:44, 12 February 2010
Left 4 Dead 2 vscripts are scripts that can be run in-game to perform various tasks and changes.

Description
Left 4 Dead 2 vscripts are written in Squirrel, a compilable scripting language similar to Lua.
Some uses of vscripts include:
- Mini-games found in Dark Carnival - counters, timers, prop spawning
- Some Scavenge Logic
- Director manipulation - onslaughts, reserved wanderers, complete emptiness/silence, prohibition of boss infected (tanks and witches), direction of mobs
- Model manipulation - green diesel cans attached to survivors in Hard Rain
- Much more!
The file extensions of vscripts are .nut and .nuc, where .nut files are human readable using a text editor. Official .nuc script files are located in scripts/vscripts within pak01_dir.vpk (you can open this file with third party programs like GCFScape).
Some entities that accept vscripts as inputs or properties include info_director, logic_script, and trigger_finale.
Scripting Samples
Some General DirectorOptions
You can start a script with an input to the director "BeginScript" and then the name of the script in the parameters field. Place the script as a ".nut" file in your vscripts directory. To end the script, send an input to the director "EndScript".
Here are some examples:
DirectorOptions <- { ProhibitBosses = 1 (default is 0) AlwaysAllowWanderers = 1 (default is 0) MobMinSize = 10 (default) MobMaxSize = 30 (default) SustainPeakMinTime = 3 (default) SustainPeakMaxTime = 5 (default) IntensityRelaxThreshold = 0.9 (default) RelaxMinInterval = 30 (default) RelaxMaxInterval = 45 (default) RelaxMaxFlowTravel = 3000 (default) SpecialRespawnInterval = 45.0 (default) NumReservedWanderers = 10 (default is 0) }
You can play around with some of these numbers for specific events in your levels. For example, some of our scripts reduce the SpecialRespawnInterval to 30 seconds or we have some that reduce the RelaxMaxFlowTravel to 1000 so that the director won't stay relaxed if the survivors have continued far enough.
Prohibiting Tank and Witch spawns
Left4Dead 2 no longer relies on the mission.txt file to prohibit Tanks and Witches on maps. This is now done with a script file that you should place in your left4dead2/scripts/vscripts folder (you may need to add the vscripts subfolder yourself). Add the following to a text file:
DirectorOptions <- { ProhibitBosses = true }
Save the textfile with the extention .nut in the vscripts folder. In your map, place a logic_auto entity and add an output. The output should target the AI Director entity and make it fire the script by using the BeginScript action. In the parameter field, you set the name of your script (without the .nut extention)
Some Scavenge Gamemode DirectorOptions (for Coop/Versus Finales with Scavenge)
For a finale that is using scavenge as the gameplay (such as in the Mall Atrium finale), you'll need a separate scavenge script. Here's c1m4's (name the script "[the name of the map]_scavenge.nut"):
DirectorOptions <- { PreferredMobDirection = SPAWN_LARGE_VOLUME PreferredSpecialDirection = SPAWN_LARGE_VOLUME ShouldConstrainLargeVolumeSpawn = false MobSpawnMinTime = 45 MobSpawnMaxTime = 90 CommonLimit = 15 ZombieSpawnRange = 3000 } NavMesh.UnblockRescueVehicleNav() Director.ResetMobTimer()
Dark Carnival Onslaught Script
Here's the onslaught script Valve used for the 4th map of Dark Carnival:
Msg("Initiating Onslaught\n"); DirectorOptions <- { // This turns off tanks and witches. ProhibitBosses = false //LockTempo = true MobSpawnMinTime = 3 MobSpawnMaxTime = 7 MobMinSize = 30 MobMaxSize = 30 MobMaxPending = 30 SustainPeakMinTime = 5 SustainPeakMaxTime = 10 IntensityRelaxThreshold = 0.99 RelaxMinInterval = 1 RelaxMaxInterval = 5 RelaxMaxFlowTravel = 50 SpecialRespawnInterval = 1.0 PreferredMobDirection = SPAWN_IN_FRONT_OF_SURVIVORS ZombieSpawnRange = 2000 } Director.ResetMobTimer()