client server - online - ¿Cómo funciona el protocolo multijugador de Half-Life 2?
half life 2 online (5)
Me preguntaba cómo funciona el protocolo multijugador de Half-Life 2 en modos como Counter-Strike: Source o Day Of Defeat: Source. Creo que usan algún tipo de ofuscación y algoritmo de compresión propietario. Me gustaría saber cómo se codifican los diferentes tipos de mensajes en un paquete.
Aunque los detalles pueden diferir, el marco general es bastante antiguo. Aquí hay una visión general rápida:
En los primeros juegos de fps como Doom y Quake, la posición del jugador se actualizaba solo en la respuesta del servidor a su comando de movimiento. Es decir, presionó el botón de avance y el cliente se lo comunicó al servidor, el servidor revisó su posición en su memoria y luego transmitió un nuevo estado de juego a su cliente con su nueva posición. Esto llevó a un juego muy lento: disparar, incluso moverse en pasillos estrechos era un juego de predicción de retraso.
Los juegos más nuevos permiten al cliente manejar el disparo y el movimiento del jugador por sí mismos. Aunque esto llevó a un movimiento sin demora y disparó, abrió más posibilidades de hacer trampa al hackear el código del cliente. Ahora, cada jugador se mueve y dispara independientemente en su propia computadora y se comunica con el servidor lo que han hecho. Esto solo se rompe cuando dos jugadores se topan entre sí o intentan recuperar el poder al mismo tiempo.
Ahora el servidor tiene esta corriente de estado de cliente que viene de cada jugador y tiene que sincronizarlos y hacer de ellos un juego coherente. El truco es medir la latencia de cada jugador. El objetivo final es ser capaz de disparar un arma de muy baja latencia (como un rifle de francotirador o una pistola) en un enemigo que se mueve de lado y hacer que golpee correctamente. Si se conoce la latencia de cada jugador, suponga que el jugador A (latencia 50 ms) dispara un arma a B (latencia 60 ms). Para hacer un golpe, el tiro tiene que golpear B donde B era hace 60 ms, desde donde A fue hace 50 ms.
Es una visión general muy aproximada, pero debería darle una idea general.
Debes revisar los papeles de Luigi Auriemmas sobre Half-Life. También encontrarás un decodificador de paquetes y algunos algoritmos desmontados.
La información de ingeniería inversa en Half-Life 2 puede ser difícil de obtener, debido a su relevancia para hacer trampa. Supongo que tablas como mpcforum son tu mejor apuesta.
Esta es una pregunta realmente complicada, mi sugerencia sería mirar algunos de los motores de juegos de red de código abierto:
- http://www.hawksoft.com/hawknl/
- http://www.zoidcom.com/
- http://sourceforge.net/projects/opentnl
- http://www.gillius.org/gne/
También puede consultar el código fuente de la serie de terremotos en la que se basa el motor de Half Life original.
Half-Life 2, Counter-Strike: Source, etc., utilizan el motor Valves Source. Valve tiene una wiki para desarrolladores que cubre muchas cosas (¡es genial verlo!) ...
Estos artículos pueden interesarte:
Te sugiero que mires los motores Quake 1-3. Están disponibles con código fuente. El protocolo de Half-Life puede ser un poco diferente pero lo más probable es que esté lo suficientemente cerca.