Category: CardBattle

Mejoras al backend de TecnoMakers Cardbattle

El mes pasado lo dedique en especial, a hacer algunas mejoras de contenido, y preparar el contenido para el futuro, pero hay algo, que debe terminarse, y eso es el BACKEND, en otras palabras, el software que hace falta, para poder tener el juego online, funcionando sin caídas, escalado horizontal automático pero de procesos en la misma maquina, etc.

Desde que empece el desarrollo del juego, me centre en lo que se conoce como la instancia del juego, que es lo básico para poder entrar, configurar tus mazos, hacer una partida, etc.
A medida, que fue pasando el tiempo, fui investigando sobre lo que se conoce como Multi Instancia, que es para que los MMORPG (Juegos online multijugador) soporten altas cargas, dentro de todo esto, se encuentran varias cosas:

  • Servidores de login
  • Procesos para las instancias de juego/mapas

En Junio del año pasado, comencé a tener el primer esbozo de como quería hacer la infraestructura a nivel de software, sobre noviembre conseguí hacer lo que era, la base de todo esto, separar el proceso de la instancia para jugar, de las demás (login, servidores y sesiones)

Y hasta este mes, no he vuelto a continuar todo lo relacionado con el sistema multi instancia, programe hace semanas, los 3 procesos adicionales mencionados entre paréntesis y he decidido dividir, en unas 3 fases la implementación, ya que es un proceso, muy delicado y que necesita muchas pruebas iniciales para el buen funcionamiento.

Voy a haceros un repaso de las fases de implementación:

Fase 1 (Puesta en marcha básica)

Esta fase consistía en iniciar 4 procesos de manera manual, y mirar si lo que se hizo en su día, la llamada «base» en Noviembre, seguía funcionando igual y sin problemas adicionales.

Imagen de la primera fase, funcionando correctamente

Fue toda una tarde, la cual me encontré con problemas, de como los procesos se comunicaban entre ellos, pero al final pude solucionarlo, porque la idea es tener 2 procesos maestros que reciban mensajes a un puerto interno, y que se hablen entre ellos (server-server), y tener un código de respuesta de servidor, que lo que hiciese es cambiar a la persona que esta jugando al juego, de una instancia a otra, de manera rápida y transparente.

Fase 2 (Mover el buscar rival de instancia al maestro de sesiones)

El siguiente paso, era iniciar una segunda instancia, y tenerlas interconectadas cuando alguien esta buscando un rival para jugar, porque imagínate que las 2 personas que están conectadas, cada una se las envía a una instancia diferente ¿que haces?

El proceso es facil, mover el codigo de buscar rival del nivel de instancia de juego, al maestro de sesiones, por lo que cuando alguien se apunta a buscar rival, la instancia de juego notifica al maestro de sesiones, que esta persona esta buscando a alguien.

Cuando esta empareja rivales para jugar, como tiene todos los puertos de cada instancia, comprueba si están en la misma, en caso afirmativo, manda un mensaje a la instancia para que empiece la partida, pero en caso negativo, se escoge un jugador/a para que sea el anfitrión/a de la partida y se moverá al otro usuario/a a donde esta la anfitrión/a, cuando este/a este conectado/a, y el servidor lo verifique, la partida empezara.
Pero..
Si, hay un pero, imagínate que las 2 instancias están cerca del limite que he quiero poner, como por ejemplo 200 conexiones simultaneas, se buscara la instancia con menos carga, y se mandara ahí a las 2 personas, esto ultimo lo implementare en la Fase 3.

Fase 3 (Automatización)

La ultima fase, la mas importante por la cual se ha hecho todo este proceso es poder ir levantando instancias, o bajándolas en caso que haya mas o menos carga, también incluyendo un control de si la instancia de juego se cierra de manera inesperada por un error en el código de ejecución, poderla levantar de nuevo sin mi intervención.

A parte de este desarrollo, incluiré lo ultimo que mencione en la fase 2, con esto tendré de manera automatizada, el control de carga del juego, pero a nivel de 1 sola maquina, ya que no tengo los recursos necesarios, ni monetarios, para preparar una infraestructura de varios servidores de manera horizontal.

Un ejemplo puede ser este, que es el caso para conectar a alguien, a una instancia de juego.

Modelo del multi instanciado

Espero que os haya gustado, este articulo, a nivel informativo, de todo lo que estoy preparando en el juego, que a nivel visual, no se puede ver, pero existe, actualmente a nivel de procesos dentro del servidor que tengo funcionando el juego.

Mas información: https://www.reddit.com/r/gamedev/comments/64o4bh/can_someone_explain_how_mmo_servers_work/

Un paso adelante con la Multi-instancia

El fin de semana pasado aproveche para realizar cambios en como funciona actualmente TecnoMakers cardbattle.

 

El cambio principal ha sido en la adaptación de como conecto a los jugadores/as en el juego, al principio del desarrollo funcionaba de la siguiente manera:

– La persona se conectaba directamente a una instancia, por lo que si se cae la instancia se pierde la conexión.

Con el nuevo modelo multi instancia, todo esto queda en el pasado, y permite mucha mas capacidad de personas online,

 

Así es como funciona actualmente:

Existe actualmente 1 servicio de login, donde te conectas y verifica tus datos, y de aquí se te pasa a una instancia que tenga menos carga.

Cuando te va a traspasar a otra instancia verifica unos datos, y lo que hace es cerrar la conexión del websocket del servicio, y te conecta de nuevo pero a la instancia de juego.

Así es como ha quedado después de este fin de semana, pero aun queda perfeccionar el sistema, y para evitar que una instancia crashee y haya problemas, la manera de solucionar esto, es con 2 servicios internos para ello, este sera el siguiente paso:

Controlador de sesiones: donde si te caes, y el server de login ha dejado de funcionar, esta sera la base de datos local donde se guardara, ejemplo practico: la instancia en la que estas crashea por un error, el cliente verificara una de las instancias de login, y te conectara hasta una que funcione en caso que hayan crasheado, entonces esta si no tiene tus datos, la verificara y te enviara a alguna instancia, si todas fallan, en el peor de los casos te desconectara del juego porque todas las instancias estarán caídas.

Controlador de instancias: Sera un servicio interno que las demás instancias contactaran para obtener un ID, registrar el puerto y iniciarse, y también el servidor de login, para buscar alguna a la que enviar a quien se conecte a jugar, y también levantar instancias si hace falta, o servicios de login.

El cliente para verificar que instancias hay levantadas, hará una petición a una API para obtener el listado de instancias de login conectadas.

 

Una vez termine eso, el juego quedara mas estable, ahora mismo esta puesto solo 1 instancia, para terminar de arreglar cosas del sistema, pero una vez este programado lo mencionado anteriormente, estará listo para poder auto escalar automáticamente.

TecnoMakers cardbattle en el IndieDevDay

El dia 27 de octubre presentare una nueva demo de Cardbattle, la beta4, con muchisimas mas cartas, mas contenido y muchisimas mejoras de cuando enseñe la alpha2 en la Women Make games de Madrid.

Las mejoras que podras observar son:
– cambios visuales en los botones de ataque ( para ayudar a saber si has atacado o no )
– cartas trampa
– diferencias en las cartas de uso, ataque y trampa ( diferente color)
– 9 personajes diferentes para jugar
– Cerca de 100 cartas para poder crear tu mazo.

 

Podeis visitar los datos del evento , y coger tu entrada en: http://www.indiedevday.es/

 

Durante ese dia, si quieres, podras retarme, si me ganas y tienes una cuenta en mi juego, conseguiras un personaje especial, solo de evento.

El 30 de Septiembre en la Software Crafters Barcelona

El 30 de septiembre estaré en el evento de la Software Crafters Barcelona presentando una charla de como comencé a hacer el juego de cartas online por turnos que empece a hacer a principios de año: TecnoMakers cardbattle.

 

Explicare quien me comento una primera motivación para empezar a ello ( ya que en ese momento, llevaba muchos meses en depresión, sigo con depresión, pero había perdido las ganas totalmente de programar juegos ), también explicare detalles técnicos del juego, como lo estoy haciendo multiplataforma, como hago para hacer la comunicación cliente<->servidor, y mis planes de futuro con el juego, como la escalabilidad, auto escalabilidad, y temas que aun tengo pendiente.

 

Puedes ver detalles del evento en: http://scbcn.github.io/

Explicación detallada de Cardbattle

Entre que he tenido un verano muy movido, y no precisamente de buenas cosas, no he podido de terminar de definir la mecánica, funcionamiento de cardbattle, hasta hace unos días, este es un post donde voy a explicar como funciona, su mecánica de juego, etc.

 

Base para ganar: La vida de los 2 personajes enemigos debe llegar a 0, una vez uno de esos personajes llega a 0, no se puede utilizar, queda K.O. hasta que no se usa un hechizo o carta de recuperación de salud.

 

Al principio de juego: TODOS los mazos son de 30 cartas obligatoriamente, ni una mas, ni una menos, y cada turno conseguirás 1 carta del mazo, antes de empezar este se baraja. Cuando es tu turno, conseguirás un numero inicial de cartas dependiendo del personaje que tengas a la izquierda (Líder).

Ventaja del 2n Turno: Si se pierde el piedra/papel/tijera, o los dados , quien comience en segundo turno, recibirá 20 de escudo.

Limitaciones del primer turno: No puedes utilizar ataques directos ( que se saltan el escudo ).

 

Las clases de los personajes

Los personajes tendrán 4 clases diferentes, dependiendo de ellas, si se elige ese personaje como líder, puedes obtener uno de los siguientes bonus como «pasiva de clase»:

  • Asesino: 50p de energía adicional
  • Tank: El mismo personaje y el otro reciben un máximo de 25 de defensa y 75 de vida adicional. ( No se pierden si bajas a la vida normal del personaje ).
  • Mago: Los ataques tienen un 25% menos de coste
  • Support: El otro personaje recibe 1 ataque de mas ( Es decir, si tiene 2, tendrá 3 durante toda la partida ).

 

Rango de las cartas

Los rangos sirven para delimitar las cartas poderosas al principio de la partida, pero también para indicar que es una carta potente y que gasta mucha energía, estos van desde el I al V (1 al 5) en números romanos, su único efecto es que no puedes utilizar una carta de tal rango, hasta que no sea ese turno o superior.

Ejemplo: Si quieres utilizar una carta de rango IV, hasta el turno 4 o superior ( tuyo ), no la podrás utilizar.

 

Durante la partida:

En la partida podrás utilizar muchas cartas siempre que tengas energía, pero hay otras que estarán limitadas por su tipo, estos son los detalles que deberías tener en cuenta en mitad de la partida:

  • Equipar ataques/hechizos: Durante tu turno solo podrás equipar un numero limitado de ataques que se muestran en tu panel de información, la cantidad que puedes equipar varia según personaje lider, de 1 a 3, pero también puedes equipar mas gastando energía ( utilizando una carta que te añade un equipamiento adicional ).
  • Numero máximo de ataques por turno: Dependerá de tus personajes, si puedes equipar en un personaje 1 ataque, y en el otro 2 ataques ( los support aquí no cuentan, solo utilizan habilidades de soporte o curación), podrás atacar 3 veces por turno en este caso.
    Ejemplo practico: Si tienes de líder un personaje support, y el otro personaje es un asesino/a, puedes llegar a tener hasta 3 ataques en el otro personaje.
  • Funcionamiento del escudo: El escudo te protegerá de ataques a la vida de tu personaje mientras lo tengas, pero si usan ataques que se saltan el escudo, este no servira a no ser que sea un escudo indestructible ( solo lo otorgan algunos personajes ).
  • Uso de cartas por turno: No tienes limite de usar cartas, siempre y cuando no sean del primer tipo mencionado, y luego tengas la energía necesaria para activar la carta ( cartas trampa, de soporte, etc ).

 

Mini update a Cardbattle

Hoy he actualizado cardbattle con las pasivas de los personajes. ¿Que son estas nuevas pasivas?

 

Son las habilidades que haran diferente a cada personaje cuando se vayan sacando, algunos tendran habilidades para resistir y hacer mas daño en combate y otros, se centraran mas en el daño, o si se juega con un personaje del mismo entorno o un ataque del entorno del personaje.

Estas son las pasivas de los primeros 4 personajes de juego:

– Yoshiknight ( Tank) : Si tiene escudo, su ATK aumenta un 20% y disminuye el daño recibido un 20%.
– Zoe ( Asesina ): Al realizar un ataque, tiene posibilidad de hacer un critico que hace +15% de daño adicional. (5% de posibilidades de activación)
– Leslie ( Maga ): Si su vida es inferior al 50% ( máximo ), aumenta su resistencia a ataques un 10%.
– Bianca ( Support ): Mientras tenga escudo, reduce el daño recibido un 50%.

 

Como puedes observar, están mas centradas en el control de la batalla y el campo, pudiendo resistir mucho mas o hacer mas daño.

Cuando la pasiva del personaje este activa, se activara una luz verde en la carta del personaje ( aun por insertar ), si no esta activa, sera en rojo. Y siempre que le des click ahí, puedes visualizar un texto con la descripción de la pasiva del mismo personaje.

 

La próxima mini actualización, sera la pantalla de has ganado / has perdido con algunas estadísticas de la partida, y la habilitación del perfil, donde podrás ver estadísticas personales, y tus ultimas partidas.

Cardbattle: Beta3

Actualmente, por la depresión que estoy sufriendo, no estoy pudiendo cumplir todas mis metas que me propuse en su momento, llevo muchos meses de retraso en el desarrollo del juego, queria ya tener casi todo hecho para este mes, y empezar la versión en Unity, pero al final ni una cosa ni la otra.

 

Solo espero terminar la siguiente versión en el plazo que me he propuesto, porque con esto, estaré muchísimo mas cerca de terminar el juego.

Cardbattle Beta 2

La beta2 de Cardbattle aterriza hoy con algunas novedades! He tardado mas de la cuenta por motivos personales ( ansiedad, depresión ), las novedades son las siguientes:

  • Misiones diarias: Podrás ganar puntos para poder desbloquear cartas de los booster packs en un futuro.
  • Cartas trampa: Añade cartas que pueden servirte para cambiar el curso de la partida, y jugarle una mala pasada a tu enemigo/a.
  • Auto buscador: Busca un rival de manera rápida sin tener que crear sala.

CardBattle Beta1

Hace unos 3 días que saque la beta1 de cardbattle, el juego es relativamente joven, llevo a fecha de hoy 2 meses y medio de desarrollo y puedes jugarlo en www.card-battle.com

Se trata de un juego multijugador en el cual debes crear tu mazo escogiendo 30 cartas que mas vayan a conjunto con los 2 personajes, hay 4 tipos de personajes: Tank, Mago, Asesino, Support, las pasivas de cada clase no están aun funcionando pero lo estarán para de aquí a 1 mes aprox, una vez este implementado esto dependiendo de las 2 clases que escojas ( si escoges mas de 1 personaje de la misma ), los bonus que recibirás sera un 25% de la misma clase. Estas son las pasivas:

* Tank: Todas tus cartas ganan 25 de Defensa y 75 de vida adicional.
* Asesino/a: 75 de energía adicional
* Mago: Un coste del 50% menos en los ataques
* Support: 1 ataque adicional a todas la demás unidad ( no incluyendo a esta )

 

Dentro del mazo hay muchos tipos de cartas, puedes ver todos los tipos aquí, en el foro también encontraras una guia que se esta creando a base de terminar las primeras versiones beta, espero poder sacar la versión release para Verano. Y una vez acabe esto, ponerme con Extreme Racers City, a terminar lo que deje pendiente del año pasado, que no pude terminar por la depresión que sigo arrastrando.

 

Si te gustan los diseños de los personajes, pásate por el devianart, de su autora, ya que le encargue esos diseños hace un par de dias: https://arikoladykawaii.deviantart.com/?rnrd=240215

Una vez termine la versión release, iré sacando nuevos personajes y cartas cada mes, y con su sistema de ranking, obtener puntos para desbloquear cartas y personajes, tengo que decir que este juego como todos, seguirá siendo gratuito, y no tendrá nada de pago, porque al fin y al cabo, es mi misma filosofía de hace 11 años, de cuando comencé a hacer juegos online con engines 2d, y aunque sacase algunos juegos que en su momento me parecían mejor, seguí así, porque al fin y al cabo es mi hobbie, y no quiero ganar dinero por ello, solo mostrar al mundo lo que puedo llegar a hacer esforzándome al máximo.

Cardbattle el nuevo juego!

Sinceramente, este juego no lo hubiese comenzado sin el apoyo de mis amigas de https://femdevs.org/ , es un juego de cartas que trata de acabar con los 2 personajes de tu enemigo con un mazo de 30 cartas, que contienen ataques que puedes equipar a los personajes, recargar energia para realizar los ataques, cartas de desequipar ataques, escudo, hechizo de curación, y un largo etc de cartas para hacer el juego mas dinámico.

Una vez actualice el servidor, a la beta1, publicare el enlace de juego en mi web, de momento puedes ver sus mecánicas en el foro: http://foro.tecnomakers.net/viewtopic.php?f=79&t=320

WordPress Themes