Left 4 Dead 2 - Update
Author: Kerry,
published 3 years ago,
An update has been released for Left 4 Dead 2.
[b]Bug Fixes[/b]
- 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.
[b]Features and Updates[/b]
- 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] 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.
[b]New Scripting Hooks[/b]
[b]Global[/b]
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
IsMissionFinalMap()
GetScavengeItemsGoal()
GetScavengeItemsRemaining()
SetScavengeItemsGoal()
SetScavengeItemsRemaining()
[b]TheDirector[/b]
AreAllSurvivorsInFinaleArea()
AreTeamsFlipped()
GetMapNumber()
IsAnySurvivorBypassingTank()
IsAnySurvivorInExitCheckpoint()
IsAnySurvivorInStartArea()
IsFinale()
IsFinaleEscapeInProgress()
IsFinaleVehicleReady()
IsFirstMapInScenario()
IsPlayingIntro()
IsSessionStartMap()
GetTotalElapsedMissionTime()
IsFinaleWon()
GetMissionWipes()
IsLocationFoggedToSurvivors( vLocation )
GetTimeSinceSpecialZombieKilled( iClass )
GetClosestActivePipeBomb( origin )
RegisterForbiddenTarget( entity ) - Bots avoid damaging forbidden targets.
UnregisterForbiddenTarget( entity )
[b]CTerrorPlayer[/b]
IsIT()
IsAdrenalineActive()
IsGettingUp()
IsImmobilized()
IsInCombat()
IsOnThirdStrike()
IsFiringWeapon()
IsStaggering()
IsDominatedBySpecialInfected()
GetSpecialInfectedDominatingMe()
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.
[b]CBaseEntity[/b]
GetCenter() - Get world space center of object - absolute coordinates
TakeDamageEx( hInflictor, hAttacker, hWeapon, vecDamageForce, vecDamagePosition, flDamage, nDamageType )
[b]CBaseCombatCharacter[/b]
GetLastKnownArea() - Return the last nav area occupied - NULL if unknown.
[b]NavMesh[/b]
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'.
GetLadderCount()
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 )
[b]CNavLadder[/b]
GetLadderEntity()
GetID()
ConnectTo( area, dir )
Disconnect( area )
IsConnected( area, dir )
GetBottomOrigin()
GetTopOrigin()
GetBottomArea()
GetTopArea()
GetLength()
GetWidth()
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 )
[b]TerrorNavArea[/b]
GetID()
HasAttributes() - Nav area attribute bits
GetAttributes()
SetAttributes(
RemoveAttributes()
HasSpawnAttributes( attributes ) - Spawn attribute bits.
GetSpawnAttributes()
SetSpawnAttributes( attributes )
RemoveSpawnAttributes( attributes )
GetPlaceName()
SetPlaceName( name )
GetCenter()
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.
IsUnderwater()
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.
UnblockArea()
IsBottleneck()
IsCleared( player ) - Returns true if this area has been cleared for the player.
MarkAreaCleared( player ) - Mark this area as cleared for the player
MarkAreaNotCleared()
GetTimeSinceCleared()
IsValidForWanderingPopulation()
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.
[b]Defines[/b]
"LADDER_UP"
"LADDER_DOWN"
"NAV_NORTH"
"NAV_EAST"
"NAV_WEST"
"NAV_SOUTH"