Multiplayer RTS

RTS con soporte de network que busca simplificar y disminuir la cantidad de acciones que debe tomar el jugador para controlar sus unidades

Antecedentes

Este proyecto fue desarrollado durante el año 2019, respondiendo a mi objetivo de crear un videojuego de una manera más seria. Considero importante poner en contexto el desarrollo de este trabajo, ya que recién había salido del colegio, y en lugar de matricularme en una Universidad, tomé la decisión de dedicarme tiempo competo al desarrollo de videojuegos de manera independiente. Al comienzo tenía muy pocos conocimientos y prácticamente ninguna experiencia en la creación de videojuegos, lo que significó que el proceso de desarrollo fuera realmente lento. La situación en la que me encontraba me obligó a ser autodidacta y así poder encontrar por mi mismo las soluciones de los múltiples problemas que iba encontrando en el camino. El aspecto que más me enorgullece y lo que hizo que este proyecto realmente pudiera avanzar, fue mi compromiso y constancia en su desarrollo; de lunes a viernes dediqué aproximadamente 8 horas diarias a estudiar y trabajar en este proyecto.

Objetivo

En los juegos RTS se espera que el jugador realice demasiadas acciones en muy poco tiempo y de manera muy precisa. Esto, en el contexto de un juego competitivo de estrategia, puede resultar frustrante para el usuario, ya que muchas veces el resultado de una partida no es fruto de una estrategia superior, sino de un jugador que es simplemente más rápido y preciso que otro. Por este motivo, en este proyecto buscaba solucionar ese problema.

Mi objetivo fue cambiar el énfasis en lo mecánico y ponerlo en el aspecto estratégico. Para eso busqué simplificar la representación del mapa, limitando la cantidad de posibilidades de movimiento a un mapa hexagonal y el control de las unidades, al implementar un movimiento a base de escuadrones.

Mecanicas implementadas

Recolección de recursos

La mecánica de recolección de recursos en el mapa está implementada y funciona en el contexto de un mapa hexagonal.

Comportamiento de escuadrones

El movimiento de escuadrones fue implementado utilizando el comportamiento de bandada (Flocking).

Inteligencia artificial

Esta controla a los escuadrones cuando no están siendo controlados directamente por el jugador.

Mapa hexagonal con múltiples elevaciones

Para la representación del mapa se usó un sistema de coordenadas geométricas, que en cada lado almacenan información de altura.

Desafíos técnicos

Soporte a multijugador

El principal desafío de este proyecto fue lograr soporte al aspecto multijugador en línea, ya que es necesario sincronizar cientos de agentes autónomos, en múltiples dispositivos por medio de la red.

La solución

En lugar de mandar toda la información de los agentes entre las computadoras, decidí solo mandar la información acerca de las aciones que cada jugador toma y luego generar una simulación independiente en cada máquina.

Esta solución funciona bien, a pesar de tener un prerrequisito; el motor debía ser completamente DETERMINISTA y Unity 3D, por defecto, no lo es.

Determinismo

El determinismo significa que todos los procesos y operaciones de un programa van a ejecutarse de manera IDÉNTICA en todos los dispositivos, siempre y cuando se les entreguen los mismos parámetros.

Para lograr el determinismo en Unity utilicé el sistema ECS (entity component system), en conjunto con una librería matemática que evita usar operaciones con puntos flotantes.