Lag Compensation: Difference between revisions
Jump to navigation
Jump to search
Note:
TomEdwards (talk | contribs) (expanded article somewhat, mainly to get in an explanation of how to implement.) |
TomEdwards (talk | contribs) mNo edit summary |
||
Line 3: | Line 3: | ||
[[File:Lag compensation.jpg|thumb|Client hitboxes (red) versus rewound server hitboxes (blue). 200ms [[net_fakelag|fakelag]].]] | [[File:Lag compensation.jpg|thumb|Client hitboxes (red) versus rewound server hitboxes (blue). 200ms [[net_fakelag|fakelag]].]] | ||
'''Lag compensation''' is the notion of the server calculating 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 | '''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 | By default only players are rewound. For a more detailed explanation, see [[Source Multiplayer Networking#Lag compensation|Source Multiplayer Networking]]. | ||
{{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.}} | {{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.}} | ||
Line 11: | Line 11: | ||
== Implementation == | == Implementation == | ||
Simply wrap whatever code you want lag compensated | Simply wrap whatever code you want lag compensated within two calls to the <code>lagcompensation</code> object: | ||
<source lang=cpp>#ifdef GAME_DLL | <source lang=cpp>#ifdef GAME_DLL |
Revision as of 15:09, 13 August 2009
- You may be looking for Yahn Bernier's 2001 paper on game engine networking.

Client hitboxes (red) versus rewound server hitboxes (blue). 200ms fakelag.
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.Implementation
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 )
{
lagcompensation->StartLagCompensation( this, this->GetCurrentCommand() );
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()
.