Left 4 Dead 2 – Update

An update has been released for Left 4 Dead 2.

Bug Fixes

– Fixed file path for CricketBat.Miss sound event.
– Fixed muzzle flash occurring if you melee immediately after shooting.
– Fixed a crash on zero-byte VPKs.
– Fixed a startup crash on Linux.
– Fixed some memory leaks in VGUI.
– Fixed text corruption when using emojis in player names or text.
– Fixed some text corruption related to UTF-8 conversion in some instances on Linux.
– Fixed some out-of-bounds reads with weapon indices.
– Fixed fps_max being reset when loading a new map.
– Fixed custom maps with no lights disabling lighting for the rest of the play session (mat_fullbright).
– Fixed addon info being truncated much earlier on Linux.
– Fixed selecting certain audio/video options via navigation via arrow keys or controller.
– Fixed Widowed (No Border) option on Linux.
– Fixed a crash if a script call to QueueSpeak() didn’t pass any modifiers.
– Fixed a possible crash if a script-defined forbidden target is destroyed.
– Rebuilt gas can physics to fix an issue with falling through the world.
– Fixed an issue in Rocket Dude with a player getting moved to spectator after a level transition.
– Fixed two malformed player clips in c4m1 and c4m5.
– Fixed some incorrect place names in Cold Stream nav.
– Restored some missing commentary entities in c5m5.

Features and Updates

– Added a Vulkan render backend (currently accessible through the -vulkan command line parameter).
– Better support for ultrawide monitors in the UI and game (requires Vulkan if using Linux)
– Marked the game as DPI-aware for high DPI displays.
– Improved default settings for window size and type.
– Improved full-screen quad rendering performance.
– Made captions anti-aliased
– Marked fps_max and viewmodel_fov as FCVAR_RELEASE.
– Cvars ‘survivor_incap_health’ and ‘survivor_incap_decay_rate’ can now be changed after startup.
– New cvar ‘charger_pz_claw_damage’; functions the same as equivalent melee cvars for other specials.
– New archived cvar “addons_hide_conflict_dialog” suppresses the warning dialog in the addons screen. Any conflicting addons will still be highlighted in red with conflicts printed to the console.
– Added an FOV slider to the Multiplayer settings.
– Added a +bench_demo [name] <stats output>  command line parameter which will run a demo, and quit after it is finished.
– Added a -bench_settings [name] command line parameter to load a cfg/video_bench_{name}.txt file containing settings to load. There are a set of defaults provided, very_high_4k, very_high, high, medium and low.
– Lobbies that connect via a forced server IP are not considered for “Official Only” Quick Match searches.
– Overhauled UI usability on controller
• Added controller button icons across the UI.
• Made confirmation prompts accessible on controller.
• Now able to select mutations on controller.
• Now able to fully manage lobbys on controller.
• Now able to manage addons on controller.
• Now able to browse achievement details on controller.
• The game instructor (in-game hints) now shows controller buttons and hints.
• Added a flashlight binding to the default controller config.
• Made the intro video skippable by any button on a Steam Controller.

New Scripting Hooks



FindRescueAreaTrigger() – Returns the trigger entity for the rescue area
GetDifficulty() – Returns the current difficulty as a numeric value
GetDifficultyString() – Returns the current difficulty as a string
HasConfigurableDifficultySetting() – Returns true if the mode supports more than a single difficulty


IsLocationFoggedToSurvivors( vLocation )
GetTimeSinceSpecialZombieKilled( iClass )
GetClosestActivePipeBomb( origin )
RegisterForbiddenTarget( entity ) – Bots avoid damaging forbidden targets.
UnregisterForbiddenTarget( entity )


GetAliveDuration() – Returns the time the character has been alive (only valid when alive).
HasEverBeenInjured( team ) – Returns true if the character has ever been injured by a member of the given team.


GetCenter() – Get world space center of object – absolute coordinates
TakeDamageEx( hInflictor, hAttacker, hWeapon, vecDamageForce, vecDamagePosition, flDamage, nDamageType )


GetLastKnownArea() – Return the last nav area occupied – NULL if unknown.


GetNavAreaByID( areaID )
GetLadderByID( ladderID )
GetNavArea( origin, flBeneath ) – given a position in the world, return the nav area that is closest to or below that height.
GetNearestNavArea( origin, maxDist, checkLOS, checkGround ) – given a position in the world, return the nearest nav area that is closest to or below that height.
GetNavAreasInRadius( origin, radius, table ) – fills a passed in table of nav areas within the radius.
FindNavAreaAlongRay( startpos, endpos, ignoreAreaID )
GetNavAreaCount() – return total number of nav areas.
GetAllAreas( table ) – fills a passed in table of all nav areas.
GetObstructingEntities( table ) – fills a passed in table of all obstructing entities.
GetAreasWithAttributes( bits, table ) – fills a passed in table of all nav areas that have the specified attribute bits.
NavAreaBuildPath( area, area, goalPos, flMaxPathLength, teamID, ignoreNavBlockers ) – returns true if a path exists.
NavAreaTravelDistance( area, area, flMaxPathLength ) – compute distance between two areas. Return -1 if can’t reach ‘endArea’ from ‘startArea’.
GetAllLadders( table ) – fills a passed in table of all nav ladders.
FindLadderAlongRay( startpos, endpos, ignoreArea )
GetNavAreasFromBuildPath( table ) – Fills table with areas from a path. Returns whether a path was found.
GetNavAreasOverlappingEntityExtent( entity, table ) – fills passed in table with areas overlapping entity’s extent.
RegisterAvoidanceObstacle( entity )
UnregisterAvoidanceObstacle( entity )


ConnectTo( area, dir )
Disconnect( area )
IsConnected( area, dir )
GetDir() – Return the direction the ladder faces (ie: surface normal of climbable side).
GetPosAtHeight() – Return 2D coordinate of the ladder at a given height.
IsInUse() – Return true if someone is on this ladder (other than ‘ignore’).
IsUsableByTeam( team )


HasAttributes() – Nav area attribute bits
HasSpawnAttributes( attributes ) – Spawn attribute bits.
SetSpawnAttributes( attributes )
RemoveSpawnAttributes( attributes )
SetPlaceName( name )

GetCorner( cornerIndex ) – Get a corner position.
FindRandomSpot() – Get a random origin within the area extents.
GetSizeX() – Return the area size along the X axis.
GetSizeY() – Return the area size along the Y axis.
GetZ( pos ) – Return Z of area at (x,y) of ‘pos’.
GetDistanceSquaredToPoint( pos ) – Return shortest distance between point and this area.
IsRoughlySquare() – Return true if this area is approximately square.
IsFlat() – Return true if this area is approximately flat.
IsDegenerate() – Return true if this area is badly formed.
IsVisible( point ) – Return true if area is visible from the given point.
IsCoplanar( area ) – Return true if this area and given area are approximately co-planar.
IsEdge( dir ) – Return true if there are no bi-directional links on the given side.
Contains( area ) – Return true if other area is on or above this area, but no others.
ContainsOrigin( point ) – Return true if given point is on or above this area, but no others.
IsOverlapping( area ) – Return true if ‘area’ overlaps our 2D extents.
IsOverlappingOrigin( pos, tolerance ) – Return true if ‘pos’ is within 2D extents of area.

GetAdjacentCount( dir ) – Get the number of adjacent areas in the given direction.
GetAdjacentAreas( dir, table ) – Fills a passed in table with all adjacent areas in the given direction.
GetAdjacentArea( dir, n ) – Return the n’th adjacent area in the given direction.
GetRandomAdjacentArea( dir ) – Return a random adjacent area in the given direction.
IsConnected( area, dir )
ConnectTo( area, dir ) – Connect this area to given area in given direction.
Disconnect( area ) – Disconnect this area from given area.
GetIncomingConnections( dir, table ) – Fills a passed in table with areas connected TO this area by a ONE-WAY link (ie: we have no connection back to them).
AddIncomingConnection( area, dir ) – Add areas that connect TO this area by a ONE-WAY link.
RemoveOrthogonalConnections() – Removes all connections in directions to left and right of specified direction.
ComputeDirection( point ) – Return direction from this area to the given point.

GetParent() – Returns the area just prior to this one in the search path.
GetParentHow() – Returns how we get from parent to us.
GetLadders( table ) – Fills a passed in table of ladders in direction.
ConnectToLadder( ladder )
DisconnectLadder( ladder )
IsConnectedLadder( ladder, dir )
GetElevator() – Returns the elevator if in an elevator’s path.
GetElevatorAreas( table ) – Fills a passed in table with a collection of areas reachable via elevator from this area.
GetDoor() – Returns the door entity above the area.

IsDamaging() – Return true if continuous damage (eg: fire) is in this area.
MarkAsDamaging( duration ) – Mark this area is damaging for the next ‘duration’ seconds.
IsBlocked( team ) – Return true if team is blocked in this area.
MarkAsBlocked( team ) – Mark this area as blocked for a team.
IsCleared( player ) – Returns true if this area has been cleared for the player.
MarkAreaCleared( player ) – Mark this area as cleared for the player
IsSpawningAllowed() – Returns true if spawning is allowed in this area.
IsPotentiallyVisibleToTeam( team ) – Return true if any portion of this area is visible to anyone on the given team.
IsCompletelyVisibleToTeam( team ) – Return true if given area is completely visible from somewhere in this area by someone on the team.
HasAvoidanceObstacle( maxheight ) – Returns true if there’s a large, immobile object obstructing this area.
MarkObstacleToAvoid( height ) – Marks the obstructed status of the nav area.
GetAvoidanceObstacleHeight() – Returns the maximum height of the obstruction above the ground.
GetPlayerCount( team ) – Return number of players of given team currently within this area (team of zero means any/all).
DebugDrawFilled() – Draw area as a filled rectangle of the given color.




Rent your own Left 4 Dead 2 gameserver at 4Netplayers.com