Lag Compensation: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
(moving content for title case.)
Tag: New redirect
Line 1: Line 1:
: ''You may be looking for [[Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization|Yahn Bernier's 2001 paper on game engine networking]].''
#REDIRECT [[Lag Compensation]]
 
[[File:Lag compensation.jpg|thumb|Historic client hitboxes (red) versus rewound server hitboxes (blue).]]
 
'''Lag compensation''' is the notion of the server using a player's latency to rewind time when processing a [[usercmd]], in order to see what the player saw when the command was sent. In combination with [[prediction]], lag compensation can help to combat network latency to the point of almost eliminating it from the perspective of an attacker. For a more detailed explanation see the [[Source Multiplayer Networking#Lag compensation|Source Multiplayer Networking]] article.
 
By default only players are rewound, and one second of location/animation history is kept.
 
{{note|<code>[[CBasePlayer]]</code> does not use lag compensation; it must be implemented by a derived class. Valve's networked player classes do this already.}}
 
{{tip|Since {{l4d2}}, ''all'' entities can be lag compensated using the <code>LagCompensate</code> {{not in FGD}} keyvalue. Use this sparingly!}}
 
== Configuration ==
 
{{IO|cl_lagcompensation|param=bool|Allows clients to tell the server that they don't want their own commands lag compensated. This is ''not'' a cheat.}}
{{IO|cl_lagcomp_errorcheck|param=int|Deprecated? In theory displays error information for the given player index, in practice is not referenced anywhere.}}
{{IO|sv_lagcompensationforcerestore|param=bool|Cheat. Disabling this causes the game to check if each entity can still occupy its rewind position in the current, un-rewound world. If it can't, it is rewound to the last valid position instead of the desired one. {{todo|Why would anyone want that to happen?}}}}
{{IO|sv_showlagcompensation|param=bool|Cheat. Displays rewound [[hitbox]]es whenever a player is lag compensated. This fills the role of the old <code>sv_showhitboxes</code> command, only without the confusion caused by the hitboxes also being shown when compensation is not in effect.}}
 
Developer server builds (those compiled with <code>ALLOW_DEVELOPMENT_CVARS</code>) have some extra commands:
 
{{IO|sv_unlag|param=bool|Enable/disable lag compensation entirely.}}
{{IO|sv_maxunlag|param=float|Number of seconds to store player positions for. Default (and maximum) is 1.}}
 
== Invocation ==
 
Simply wrap whatever code you want lag compensated within two calls to the <code>lagcompensation</code> object:
 
<source lang=cpp>
#ifdef GAME_DLL
 
#include "..\server\ilagcompensationmanager.h"
 
void CMyPlayer::FireBullets ( const FireBulletsInfo_t &info )
{
// Source 2007
lagcompensation->StartLagCompensation( this, this->GetCurrentCommand() );
 
// Alien Swarm and later (see also sub-section below)
lagcompensation->StartLagCompensation( this, LAG_COMPENSATE_HITBOXES );
 
BaseClass::FireBullets(info);
 
lagcompensation->FinishLagCompensation( this );
}
#endif
</source>
 
Time will be wound back on the call to <code>StartLagCompensation()</code>, and wound forward again on the call to <code>FinishLagCompensation()</code>.
 
== Lag Compensation Type ==
 
Starting with Alien Swarm, you can optimise lag compensation with these settings:
 
; <code>LAG_COMPENSATE_BOUNDS</code>
: Rewind entities' locations only, skipping animations.
; <code>LAG_COMPENSATE_HITBOXES</code>
: Rewind both locations and [[hitbox]]es. This is the standard setting.
; <code>LAG_COMPENSATE_HITBOXES_ALONG_RAY</code>
: Rewind hitboxes if an entity is hit by a ray defined by the "weaponPos" <code>StartLagCompensation()</code> overload. Otherwise rewind bounds only.
 
These setting chosen applies to ''all'' entities affected by the rewind.
 
== Implementation ==
 
{{todo|Supporting lag compensation on new entities.}}
 
== See also ==
 
* [[Source Multiplayer Networking#Lag compensation]]
* [[NPC Lag Compensation]]
* [[Prediction]]
* [[Interpolation]]
 
[[Category:Networking]]

Revision as of 08:00, 4 May 2022

Redirect to: