Trampas del netcode: mensajes que desaparecen sin hacer ruido
Los bugs del multijugador son una especie aparte: nada se bloquea, nada registra un error, simplemente no pasa nada. Dos de nuestras trampas favoritas de nuestro propio código de red, como advertencia y como entretenimiento.
Trampa 1: el mensaje sin registrar. Nuestro protocolo de red conoce clases de mensajes: «bloque cambiado», «jugador movido», «chat». Cada tipo de mensaje nuevo tiene que registrarse en el códec para que reciba un ID y se pueda serializar. Si se te olvida, pasa lo peor que puede pasar: la llamada de envío falla, pero en un punto donde el error se traga en silencio. Ni cierre, ni registro: la función «simplemente no funciona». Depuramos eso más de una vez, hasta que el reflejo se nos quedó grabado: ¿clase de mensaje nueva? Primera pregunta: ¿está registrada?
Trampa 2: el bloque fantasma. Cuando el servidor cambia un bloque (por ejemplo, porque un script está remodelando el terreno), tiene que avisar activamente a todos los jugadores conectados. Si se te olvida ese aviso, aparece un bloque fantasma: el servidor sabe que ahí hay un bloque y el cliente muestra aire. El jugador choca contra una pared invisible o, peor aún, construye en un sitio que en el servidor ya ni existe. Solo recargar el chunk vuelve a poner de acuerdo a los dos mundos.
El denominador común: en el multijugador siempre hay dos verdades, la del servidor y la del cliente, y cada punto que tiene que mantenerlas sincronizadas es una trampa en potencia. Nuestra respuesta fueron pruebas que comprueban justo esa sincronización y listas de verificación para los mensajes nuevos. Nada espectacular, pero desde entonces los fantasmas se han vuelto raros.
Comentarios