Update 2021-06-26 [es]


Sistema de Networking Auto-Mágico

Buenas, quería contarles un poco acerca de los avances de este sistema.

Resumen de lo que tenía

La última vez que publiqué tenía un sistema Open Source que:

Sincronizaba automágicamente objetos de gamemaker (sin necesidad de tener conocimientos de networking, o de andar luchando con el suavizado por la latencia, y el flujo de las comunicaciones).

Como mencioné, realizaba esta sincronización de forma suave y fluída, con una capa de seguridad (validaciones server-side), e independiente del motor de networking que se desee utilizar (yo en uno de mis juegos lo utilizo con una dll llamada HTTP2, y en otro juego, con el networking de GML).

Novedades

Qué cosas incorporé ahora?

SISTEMA DE COMUNICACIÓN MANUAL

  • Un sistema de comunicación manual inspirado en el modelo de emisión de eventos que plantea Socket.IO (en vez de enviar y recibir strings, te subscribís a eventos, y emitís objetos, o en el caso de GML, structs).
  • Este sistema de comunicación manual permite expandir al infinito las posibilidades de tu juego, sin necesidad de recurrir a los clásicos sockets de GML con sus hermosos buffers.

SINCRONIZACIÓN DE VARIABLES GLOBALES

  • Nada extra que explicar. Simplemente era algo que descrubrí que faltaba cuando empece a utilizar Auto-Mágico en mi juego.

REMOTE PROCEDURE CALLS (Work in progress)

  • Remote procedure calls (RPC) te brindan una tercera alternativa en la comunicación de los juegos, intermedia entre la comunicación automágica y la comunicación manual.
  • Utilizando RPC se pueden llamar a métodos cuya "lógica" está ubicada en otro nodo de la red.
  • Cuándo utilizar RPC? Aquí un sencillo ejemplo.
EJEMPLO Supongan un juego de peleas, en el que cada aspecto es controlado por el servidor, salvo las elecciones del jugador dentro de una batalla. Usando el modelo auto-mágico, tenemos:
  • Controles jugador A y B (senders en el cliente, receivers en el servidor)
  • Jugador A y B (senders en el servidor, receivers en el cliente) Luego, en el servidor, el jugador A lanza un ataque al jugador B, y esto crea una instancia de un efecto (o un texto con el daño podría ser).
  • El efecto es un objeto, que tiene un tiempo de vida corto hace un movimiento lineal en alguna dirección mientras pierde opacity, hasta que se vuelve invisible y se destruye. Si hago esto con automágico, sincronizaría el image_alpha, y el x/y de este objeto, consumiendo una cantidad de recursos innecesaria. Además, cuando se destruye el objeto desde el sender, esto replica la destrucción a los receivers.
La mejor opción para esto (evitando la comunicación manual) es usar RPC. Básicamente funcionaría así: en el NetworkActor se configura una función que sea la que muestre el efecto, y se define que el emisor de dicha función sea el servidor, y el receptor todos los clientes. Entonces, cuando se necesite mostrar el efecto, se llama a la función, y esta en cada receptor crea una instancia del efecto que funciona "Client-side". Se ahorra ancho de banda, y se mejora la fluidez del efecto.

Links útiles

Posteos anteriores:

- La primera "idea" que tuve de este sistema

https://www.facebook.com/.../GMLA.../posts/4504890269520962/

- La primera demo del mismo (un día después de la idea)

https://www.facebook.com/.../GMLA.../posts/4507769179233071/

- Avances al 30 de mayo

https://www.facebook.com/.../GMLA.../posts/4518060548203934/

Muchas gracias por su atención

Files

https://github.com/lcnvdl/gms2-networking
External
Jun 26, 2021

Get Auto-magic Networking System

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.