Lag Compensation: Difference between revisions
(→Invocation: Lag Compensation Type) |
|||
Line 40: | Line 40: | ||
; <code>LAG_COMPENSATE_BOUNDS</code> | ; <code>LAG_COMPENSATE_BOUNDS</code> | ||
: Rewind | : Rewind entities' locations only, skipping animations. | ||
; <code>LAG_COMPENSATE_HITBOXES</code> | ; <code>LAG_COMPENSATE_HITBOXES</code> | ||
: Rewind both | : Rewind both locations and [[hitbox]]es. This is the standard setting. | ||
; <code>LAG_COMPENSATE_HITBOXES_ALONG_RAY</code> | ; <code>LAG_COMPENSATE_HITBOXES_ALONG_RAY</code> | ||
: Rewind hitboxes if | : 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 == | == Implementation == |
Revision as of 03:11, 1 July 2011
- You may be looking for Yahn Bernier's 2001 paper on game engine networking.
Lag compensation is the notion of the server calculating as best it can when a usercmd was sent, and rewinding time to that point when processing it. In combination with prediction, lag compensation can help to combat network latency to the point of almost eliminating it.
By default only players are rewound. For a more detailed explanation, see Source Multiplayer Networking.

CBasePlayer
does not use lag compensation; it must be implemented by a derived class. Valve's networked player classes do this already.
Invocation
Simply wrap whatever code you want lag compensated within two calls to the lagcompensation
object:
#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
Time will be wound back on the call to StartLagCompensation()
, and wound forward again on the call to FinishLagCompensation()
.
Lag Compensation Type
Starting with Alien Swarm, you can optimise lag compensation with these settings:
LAG_COMPENSATE_BOUNDS
- Rewind entities' locations only, skipping animations.
LAG_COMPENSATE_HITBOXES
- Rewind both locations and hitboxes. This is the standard setting.
LAG_COMPENSATE_HITBOXES_ALONG_RAY
- Rewind hitboxes if an entity is hit by a ray defined by the "weaponPos"
StartLagCompensation()
overload. Otherwise rewind bounds only.
These setting chosen applies to all entities affected by the rewind.
Implementation
[Todo]