Toy Brawler | Indie MOBA por Twin Studios

Zarkend

Llevamos bastante tiempo leyendo el foro de desarrollo de juegos y queríamos presentar el proyecto en el que estamos trabajando últimamente (Empezamos el desarrollo en noviembre de 2017 y trabajamos en el proyecto en nuestro tiempo libre ya que los 2 estamos trabajando como programadores para un tercero).

Toy Brawler


Toy brawler es un MOBA con las siguientes características:

  • 1 solo personaje / avatar genérico para todos los players.
  • Posibilidad de comprar equipo que aporte stats al avatar. Este equipo se comprará con dinero del juego.
  • Posibilidad de comprar adornos visuales. Este equipo se comprará con dinero real o dinero del juego y en ningún caso dará algún tipo de stat o ventaja.
  • Distintos mapas con diferentes mecánicas cada uno.
  • Todos contra todos.

Gameplay


Equipo


Actualmente el equipo está formado por 2 personas (mi hermano y yo), ocupándose él de todo el apartado artístico (modelado, animaciones, arte etc...) y yo de la programación.

Parte técnica


*Desarrollado en Unity
*Cliente y GameServer(headless) son builds standalone de unity que utilizan la HLAPI.
*Gestión de GameServers (spawnear, destruir, conectar con los players etc...): utilizamos el maravilloso framwork https://github.com/alvyxaz/barebones-masterserver que nos ha ahorrado muchísima faena.

Devlog


Semana 08/01/2018 a 14/01/2018
Semana 14/01/2018 a 21/01/2018
Semanas 21/01/2018 a 03/02/2018

Media


Twitter: https://twitter.com/OficialTwin
Web: https://www.twinstudios.es

Si has llegado hasta aquí, gracias por leernos! Cualquier crítica es bien recibida.

2
Jastro

#1 Mola mucho y se ve fluido!!

¿Tiene matchmaking? ¿Como ha sido el desarrollar el online? x)

Zarkend

Buenas Jastro, me alegro que te guste!

El matchmaking aún no está desarrollado, solo tenemos una primera versión que consiste en una cola de jugadores de la que se van cogiendo los X players necesarios para crear un GameServer.

Respecto a desarrollar el online, la parte del juego(Cliente/GameServer) es bastante "sencilla" utilizando la HLAPI de Unet aunque no me está gustando mezclar código cliente/servidor, y utilizar el framework barebones-masterserver para la gestión de gameservers ha sido bastante cómodo también, aunque me he tirado mis horitas poniendo todo en orden!

Lone

#1 Pues tiene pinta de estar entretenido la verdad. Lo jugaría!!

Aunque al vídeo que has subido le habría puesto otra música que refleje más acción.

1
VicoViper

A ver, veo cosas muy interesantes. Y todavía más si lo habéis hecho en ratos libres, joder, muy bien...

(Ahora viene el pero...)

Sin embargo, pese a que lo veo bastante pulido y tiene pinta de que tiene una buena base, viendo el video me parece MUY lento. MUCHO, MUCHÍSIMO. Los personajes son lentos, los proyectiles son lentos, el video es lento en general, en serio, probad a poner el video al doble de velocidad y veréis que incluso a esa velocidad, parece que tiene más sentido (O al menos, a mi me lo ha parecido).

Puedo entender algunos motivos puramente estéticos (al ser juguetes y tal) y otros técnicos (cuanto más rápido sea el juego, más problemas puedes tener con el online) y sobre todo, entiendo que hay motivos "de género", parece que muchos MOBA pecan de esto, sin embargo, otros MOBA tienen habilidades primarias, secundarias, counters, etc... y sólo con ver un gameplay, ya notas que aunque el movimiento sea un poco lento, en pantalla siempre están pasando mil cosas... aquí me ha parecido justo lo contrario. Veo el juego y me da la sensación de que no está pasando nada.

Ok, una vez que he dado el feedback más ranciete, quiero matizar. Es una opinión y lo mismo vosotros lo veis bien así, y es una decisión que habéis tomado por X motivos que desconozco. No os digo que tengáis que meterle un boost al juego ni nada, tan solo os digo lo que me ha parecido a mi en un primer momento...

Y dicho esto, espero que vayamos viendo como evoluciona el juego, que tiene una buena base y puede salir algo chulo...

1 respuesta
B

Para garantizar un ping por debajo de 100, sea cual sea el continente de conexión del cliente, entonces UNet no es la opción.

Por presupuesto es mejor backends de terceros... Photon, SmartFoxServer u otros.

1 respuesta
juaninside

#5 Muchísimas gracias por tomarte tu tiempo en darnos feedback! se agradece muchísimo.

Soy el hermano de Zarkend y aunque también soy programador como él (profesionalmente), estoy más centrado en la parte artística e implementación en Unity de todo lo relacionado con la parte técnica (animación, shaders, etc...).

Al igual que tú, mucha más gente nos ha comentado que el gameplay parece muy lento ( yo también opino lo mismo ).
El motivo seguramente sea debido a que aún nos falta por implementar 2 habilidades más:

  • Invulnerabilidad ( invisibilidad durante X segundos, escudo durante X segundos, o algo parecido aún por definir ).
  • Control de Masas ( aturdir, ralentizar, también aún por definir ).

Con esas 2 habilidades extras que implementemos y teniendo en cuenta que serán 10 personas por partida, no hemos querido hacer el gameplay más rápido por si llegase a saturar demasiado al jugador, obviamente una vez probemos con más personas ( solo hemos probado con 6 ) veremos si el juego sigue pareciendo muy lento o no.

Muchísimas gracias por aportar tu visión, nos ayuda a estar motivados y seguir colgando contenido!

Zarkend

#6 Buenas gForce, tenemos planeado desplegar servidores en las regiones en las que publiquemos el juego por lo tanto no debería de haber problemas con el ping siempre que emparejemos a jugadores de las mismas regiones entre sí. Por ahora, el VPS que usamos para realizar pruebas está alojado en Alemania y la jugabilidad es buena (60 ms aproximadamente). Nos hemos planteado utilizar Photon, pero de momento seguiremos haciéndolo a mano salvo que nos encontremos algún problema insalvable.

1 respuesta
B

#8 "sea cual sea el continente" ... "por presupuesto" ...

El problema es de base. Me explico, si desarrollas el proyecto con UNet será complicado migrar posteriormente a backends de terceros.

Llegado el momento de abarcar zonas entre continentes, UNet requiere alquilar múltiples VPS.

Sin embargo, si usas los recursos de terceros, con su nube te cubren a nivel global.

Saludos y suerte, me gusta el proyecto...

Zarkend

Correcto, si desarrollamos el proyecto con UNet descartamos la posibilidad de migrarlo a terceros. El único problema que le veo a tener el back con terceros es el "poco" control que te dejan. Aunque tienes razón, tenerlo con terceros te asegura estabilidad/globalización/seguridad etc que de otra manera hay que controlar a mano.

1
10 días después
Zarkend

Devlog 1. 08/01/2017 > 14/01/2018

Buenas, os traigo un resumen de en lo que hemos estado trabajando esta semana.

Mostrar texto de cambio de estado del player.


Para nosotros es bastante importante que se vea el daño que hace/recibe el player, a parte de otros estados en los que se pueda encontrar (stuns, roots etc). Hemos creído oportuno mostrar el texto ya que el juego va a basarse principalmente en el equipo que lleve equipado cada player (otorgando estos aumento de stats, efectos etc...).

Estamos trabajando en el estilo de letra para que se vea el texto nítido y pulido.

Cooldown de skills


El sistema de skills aún está en desarrollo, estamos intentando hacerlo lo suficientemente genérico (hablando de código!) para que nos sea posible desarrollar skills nuevas de una manera sencilla.

Hemos tenido bastantes problemas a la hora de implementar el cooldown de cada skill, más que nada por el tema multiplayer. Al final hemos eliminado la predicción en cliente y la verdad es que el feeling al ejecutar una skill es bastante bueno.

Registro de muertes


Como todo buen MOBA, interesa mostrar quien mata a quien ( a parte de un sistema de anuncios de rachas que desarrollaremos en un futuro ). No hay mucho que ver, de momento con gráficos placeholder.

Y hasta aquí el devlog de esta semana, no es mucho puesto que el trabajo a jornada completa no deja demasiado tiempo libre para desarrollar un MOBA(estamos locos).

Espero que os haya gustado. He actualizado también el primer post con alguna imagen más.

4
Zarkend

Devlog 2. 14/01/2017 > 21/01/2018

Buenas noches, en este resumen os hablaremos del estado actual del juego y de algunas skills que hemos desarrollado esta semana.

Test con 8 players simultaneos, todos contra todos!


Con la siguiente actividad buscábamos trastear un poco con el estado actual. Sabíamos que el server iba aguantar (más o menos) y la verdad es que nos hemos llevado una grata sorpresa. Han salido nuevos bugs que no teníamos contemplados y nos hemos echado unas risas con los colegas. Las nuevas skills desarrolladas esta semana parece que funcionan bastante bien (al menos para nosotros). Sin más os dejo con el vídeo:

Sistema de skills


Durante la semana, hemos extendido el sistema de skills un poco más. Hemos añadido el concepto Efecto que vendría a ser recursos que se aplican a un target. En el caso concreto de las skills, los efectos se utilizan para aplicar Daño, Control de masas (Efecto en el tiempo) etc...
Hemos decidido que los efectos serían ScriptableObjects (almenos la parte de datos) ya que así nos es mucho más fácil jugar con el inspector sin la necesidad de que sean GameObjects.
De izquierda a derecha, Weapon > Skill > Effect

Por cierto el asset Odin Inspector and Serializer es una maravilla.

Earth Shield


La primera skill que he desarrollado esta semana ha sido Earth Shield. Al usarla el invocador gana un escudo que reduce el daño recibido de cada golpe en X cantidad durante Y golpes. De momento todo configurable para que en un futuro, cuando estemos balanceando nos permita iterar de una manera rápida.

Brutal Charge


La segunda skill y de momento la más currada es Brutal Charge. Al usarla el invocador carga hacia la zona donde tiene el cursor. Al llegar a su destino o al chocar con un player enemigo le provoca daño(efecto) y lo aturde(efecto) durante X segundos.

Y esto es todo, realmente se me hace difícil mostrar de una manera cómoda los temas de programación, no sé a vosotros :rofl:

Gracias por leernos y hasta la semana que viene!

1 respuesta
Jastro

#12 Me mola un monton el nombre de los personajes de prueba jajajaja.

Me gusta el charge, se ve bastante fluido, pa cuando stress con el foro de desarrollo? :P

1 respuesta
B

El tema de usar scriptableobjects para las skills es un acierto. Además de que podéis usar un parser de CSV para importar o cambiar habilidades sin tener que cambiarlas desde el editor de Unity3D.

El tema que me preocupa y me gustaría saber como programador, es como afrontáis el tema de calcular todas las variables de grupo, ya sean buffs de team, individuales. Es decir, si Player 1 tiene un objeto que da a la party -1 de CD a las habilidades cuando están cerca suya. Como afectaría que estuviera a un Player 2 entrando y saliendo del área. O un efecto que atañe al enemigo como 10% a defensa por decir algo.

1 respuesta
Kyrem

O_O gratamente sorprendido. Tengo un par de preguntas:

1- Al mencionar distintos mapas con diferentes mecánicas ... se contempla un captura objetivos en equipo o similar o buscáis mantener la individualidad?
2-Distintos soldados con diferentes arquetipos (melee, long range poker etc) o algo más standard donde las habilidades marcan la diferencia?

Os seguiré de cerca.

1 respuesta
OviedoSergio

Me gusta mucho,pero me molaria skins o algo asi.

Cuando lo acabéis lo lanzareis en steam? Lo digo para tener población mas que nada

1 respuesta
ColdZimeh

Oye, no me suelo pasar por estos hilos, pero tiene buena pinta,la verdad.

pirri1721

No había visto el video del todos contra todos con 8 personajes... realmente llamativo, dan ganas de ver un par de personajes nuevos.
Mucho ánimo que se ve buen trabajo.

juaninside
#13Jastro:

Me gusta el charge, se ve bastante fluido, pa cuando stress con el foro de desarrollo?

Gracias al test que hicimos ayer con 8 personas simultáneas encontramos bastantes bugs en la parte de backend, por lo que ahora toca corregirlos y una vez funcione de maravilla prepararemos un stress test con todos vosotros, eso seguro :D. Esperamos tener la mayoría de esos bugs corregidos en las próximas 2 semanas.

#15 Buenas Kyrem, me alegro de que te guste ! respondiendo a tus preguntas:

#15Kyrem:

1- Al mencionar distintos mapas con diferentes mecánicas ... se contempla un captura objetivos en equipo o similar o buscáis mantener la individualidad?

Cada mapa tendrá una mecánica diferente y sobre esa mecánica general elegiremos si será Todos contra Todos o Por Equipos.
Las mecánicas de mapa que tenemos en mente son (aún estamos en plena fase de pre producción por lo que no tenemos todo bien definido):

  • Capturar la bandera.
  • Capturar y mantener las base/s.
#15Kyrem:

2-Distintos soldados con diferentes arquetipos (melee, long range poker etc) o algo más standard donde las habilidades marcan la diferencia?

Los arquetipos si que los tenemos más definidos y vamos a empezar con 3 tipos de arma para poder elegir ( en nuestro juego los "Heroes" serán las armas, el personaje es un Avatar genérico al que le podrás equipar items para aumentar tus estadísticas a parte de cosméticos para ser el más guapo del barrio.)
De momento tenemos pensadas estas 2 armas:
· Armas de puño -> Con estas armas te convertirás en un luchador a corta distancia y pegarás a melee junto con un kit de aturdir y aumentar defensa.
· Lanzacohetes -> Esta es la versión de rango en la que lanzarás misiles y empujarás a los enemigos, tendrás menos resistencia que el melee pero podrás infligir más daño.
· La tercera arma aún no la tenemos definida pero queremos que adopte un rol más de soporte, ya sea curando, buffando a la gente o a sí mismo para empoderar-se.

Cada arma tendrá 3 o 4 habilidades más el Ultimate que irás desbloqueando progresivamente a medida que avanza la partida.

#16OviedoSergio:

Me gusta mucho,pero me molaria skins o algo asi.

En efecto! vamos a tener skins que no aporten ventajas a parte del equipo que si que lo hará.

#16OviedoSergio:

Cuando lo acabéis lo lanzareis en steam?

Tenemos pensado lanzar-lo en Steam aún que también estamos valorando otras opciones.

Zarkend

Buenas @yukikaze, intentaré explicar como lo afrontamos (o afrontaremos) en nuestro proyecto.

Re-ordeno las preguntas por coherencia con la respuesta:

#14yukikaze:

O un efecto que atañe al enemigo como 10% a defensa por decir algo.

El sistema de efectos está montado de la siguiente manera:
Cada player tiene una lista de efectos en el tiempo. Para nosotros un efecto en el tiempo es un efecto que se añade al player y se invoca una coroutina para que se elimine del player a los X segundos.

En el caso de efectos que reduzcan el daño recibido

(o lo aumenten) hemos definido una interfaz (IDamageModifier) que implementan este tipo de effectos que cuenta con un método "Modify Damage" al que se le pasa el daño por referencia y es el mismo efecto el que se encarga de aplicar su lógica (reducir daño en este ejemplo).

El flujo es algo así: Player recibe daño > comprobamos si el player tiene efectos IDamageModifier aplicados > si lo tiene se llama al ModifyDamage de cada efecto > se aplica el daño restante.

#14yukikaze:

Es decir, si Player 1 tiene un objeto que da a la party -1 de CD a las habilidades cuando están cerca suya. Como afectaría que estuviera a un Player 2 entrando y saliendo del área.

En este ejemplo yo lo que haría es NO restarle 1 segundo al cooldown de todas las habilidades, sino utilizar una variable auxiliar que restase al cooldown de la habilidad el tiempo que el efecto aplique (en este caso 1 segundo), de esta manera si sale del circulo se mostraría su cd original y si está dentro del círculo su cd modificado por el efecto. Habría que ver como lo implementaría pero no creo que se complicase mucho.

@ColdZimeh y @pirri1721 Me alegro que os guste!

12 días después
Zarkend

Devlog 3. 21/01/2018 > 0301/2018 (2 semanas esta vez)

Buenas! estas dos semanas hemos trabajado bastante, no hemos avanzado mucho en tema gameplay. Por la parte que me toca, he estado refactorizando gran parte del código que tenemos, he implementado Zenject y he corregido algunos bugs (bastantes). Suena poca cosa pero realmente me ha dado mucho trabajo, sobre todo el primer refactor para implementar inyección de dependencias(zenject).

Juan ha estado trabajando en el exterior del mapa, en el vídeo que sigue podréis observar el cambio!

Por otro lado, contamos con la colaboración de un músico que se va a encargar del sonido (él ha compuesto la música que suena en el vídeo).

Cualquier crítica es bien recibida, gracias por leernos :innocent:

PD: Buscamos artistas que quieran involucrarse en el proyecto. Cualquier duda MD!

Usuarios habituales