La aventura del multijugador en Godot 4

 Cuando digo aventura, no es esa de las de Disney, con final feliz y canciones. De hecho, aún no se ve el final por ningún lado. Es más bien una aventura tipo Juego del Calamar (que está de moda), donde no sabes lo que viene a continuación y hay mucho ensayo y error contra reloj. Sobre todo error.

Empecemos por el principio, que es donde empieza a principiar todo. Ya está saliendo el pre alfa de Godot. No he tenido tiempo de hablar del asunto, pero lo he estado usando desde hace un mes aproximadamente. Mi próximo objetvo es hacer algo multijugador, por eso volví a echar mano del tutorial sobre servidor dedicado de Game Dev Center, invertí un rato en ver los videos iniciales con calma, hasta que al fin pude encontrar algo de tiempo para implementar una prueba. El problema es que el sistema de redes cambia muchísimo en Godot 4. La documentación no lo dice, la gente aún no lo sabe (salvo los que lo programaron), así que toca joderse.

Aunque el tutorial aún puede darte una cierta idea general, he tenido que descubrir a las malas cómo se hacen las llamadas RPC. Antes simplemente declarabas una función remote del otro lado. Ahora la función debe estar declarada en ambos lados de la conexión, con los mismos parámetros y marcada con @rpc. Además, de un día para otro, el parámetro any de la anotación @rpc se convirtió en any_peer. Por suerte, un amable mensaje de error me lo explicó en detalle. 

Supongamos que en el cliente creas un singleton llamado server, que entre otras cosas debe enviar un valor al servidor:

server.gd
@rpc(any_peer)
func test_value(val):
    rpc_id(1,StringName("test_value",val)

En el lado del servidor, necesitaremos una clase o script llamado server también, porque la ruta de la función debe ser igual:

server.gd
@rpc(any_peer)
func test_value(val):
    print(val)

 Así, a grosso modo. Si empiezas a ver errores en el debug de que el checksum no coincide y que la ruta del nodo no existe, quiere decir que hay una diferencia entre la función de un extremo y la del otro. Aún me queda mucho por delante, pues ni siquiera he pasado de la parte de login, usando un servidor de autentificación. He decidido, de momento, no enredarme con un gateway, porque ya eso serían cuatro proyectos diferentes. No me parece que se justifique en un entorno donde a lo más, habrían dos o tres servidores, uno para autenticación y los otros sirviendo mundos o regiones del juego.

Con un poco de suerte, en diciembre habré conseguido entender la replicación del estado de los jugadores.

Comentarios