El retardo (lag en inglés) es el tiempo que tarda en llegar un paquete a su destino. En algunos juegos lo denominan “ping” o “rtt” (Round Trip Time). En realidad, ping es una herramienta de red que contabiliza cuánto tarda un paquete desde que se envía a un destino, y este destino lo devuelve y llega de vuelta. De hecho, esa medida es el tiempo rtt, tiempo de ida y vuelta. Se usa esa medida porque no es posible actualmente medir el tiempo que tarda un paquete desde que lo envía un origen hasta que llega a su destino. Eso es así, porque los relojes de cada dispositivo conectado a Internet no suelen estar sincronizados.
Si consideramos el uso de un servidor central, se da la circunstancia de que cada participante esté a una distancia diferente del mismo. Eso implica que, cuando el servidor envíe la actualización del estado del juego, esta información le llegará antes a unos jugadores que a otros. Por tanto, algunos tendrán ventajas sobre otros.
Es más. Si consideramos el modelo de servidor autoritativo, el cliente envía su acción al servidor (por ejemplo, avanzar), este calcula el nuevo estado de la partida (por ejemplo, la distancia que puede avanzar el personaje con la velocidad y obstáculos actuales) y devuelve el resultado (la nueva posición del personaje). Pues bien, si el retardo entre el cliente y el servidor es suficientemente alto, el jugador puede experimentar un modo de juego frustrante, pues verá su personaje moverse con cierto retraso. No sería un juego lo suficientemente interactivo, y tendría una velocidad de respuesta lenta. Para solucionar este problema, el cliente podría suponer que la acción que ha realizado el jugador se va a poder llevar a cabo, y la ejecuta sin tener la respuesta del servidor. Esto permite que la experiencia del jugador sea más interactiva. Eso sí, es necesario rectificar el estado del jugador si llega una respuesta del servidor con información diferente a lo calculado de forma local (por ejemplo, la ubicación).
Una técnica que pueden utilizar los juegos en red en los que haya la posibilidad de desplegar varios servidores es intentar que en las partidas se emparejen jugadores con retardos similares, eligiendo servidores y jugadores cercanos geográficamente para reducir dichos retardos.
Independientemente de lo anterior, nótese que cada jugador recibirá la información de estado del resto de jugadores pasado un tiempo.
En el siguiente vídeo se puede apreciar cómo el personaje remoto se mueve pasado un tiempo desde que se movió en el cliente remoto. En juegos de acción esto puede ser crítico, pues la visión del juego para cada participante puede ser diferente. De esta manera, puede que un participante dispare a la posición en la que cree que está el personaje remoto. En su visión del juego, lo habrá alcanzado. Sin embargo, en la versión del juego del otro participante, el personaje está en otra localización, y no se vería alcanzado por el disparo.
En este caso, entran en juego aspectos psicológicos que hay que atender para que la experiencia del juego sea adecuada. Y es que el impacto negativo que supone disparar a un personaje que estaba a tiro, pero que no es alcanzado, es mayor que el impacto negativo de experimentar que de repente nuestro personaje ha sido alcanzado de alguna manera. En este caso, primaría hacer caso al jugador que ha disparado.
Para contemplar este tipo de situaciones, se utiliza otra técnica denominada compensación del retardo. Esto consiste en que el servidor guarda un número limitado de estados anteriores del juego. Como cada acción y estado tiene asociado un valor del reloj virtual comentado anteriormente, se puede volver al estado de la acción que llega al servidor y evaluar el resultado de aplicar dicha acción en el estado de la partida en el tiempo (turno) virtual adecuado. Si se evalúa que el resultado es diferente al que se ha producido, se actualizaría el estado de la partida acorde. Pero las decisiones de qué hacer en cada tipo de acción dependen del diseño del juego.