Backend de Cardbattle: Finalizado

Después de empezar en Noviembre, lo que fue la primera parte del backend, separando login, instancias y conexiones actuales en un único proceso (para poder preparar, todo lo demás).

Una vez separadas, lo siguiente fue crear el respectivo proceso para cada acción, actualmente el Login sigue siendo un solo proceso, pero en un futuro, serán varios. Ya que este, ya esta preparado, igual que el proceso del juego.

El siguiente proceso, las conexiones donde se guardan todos los tokens de las conexiones exitosas al juego, esto contiene los datos de en que instancia de juego están jugando, y cuando el jugador se desconecta, se avisa a este proceso, para que borre los datos que existen.

Y por ultimo, tenemos el proceso de instancias, que digamos, hace de «load balancer» de los procesos, va iniciando procesos a medida que hacen falta, aun no los cierra si no hay actividad, pero eso para el futuro, lo que también hace es ir levantando instancias cuando haga falta, y si una deja de funcionar, se levanta de nuevo, para que ese puerto, vuelva a estar operativo.

Con esto, es todo el sistema para poder, permitir muchas conexiones, sin saturar los procesos de juego principal, aun quedan mejoras, pero ya en otro momento, ahora se puede decir, que si esta «terminado», y puedo seguir con el contenido del juego, que he dejado de lado, durante bastante tiempo, para poder terminar todo esto que he explicado.

Así que, ahora todas las actualizaciones que van a llegar, serán de contenido para finalizar la versión 1.0 de TecnoMakers Cardbattle, la idea es que haya mas de 400 cartas diferentes, mas de 30 personajes y muchas formas de poder crear mazos, con sus tácticas de combate.

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/

Primera fase del update de Febrero: Cartas y efectos nuevos

La update de febrero, la voy a dividir en 3 partes, para poder realizar bien la implementación de todas las novedades, y con calma.

Tipos de cartas nuevas

Todas las cartas, tienen usos diferentes, eso es lo que distingue a una carta, cuando se usa, y también están los efectos, que son añadidos al uso, para poder crear combinaciones diferentes.

Estas son las nuevas cartas que tendrán el siguiente uso:

  • Awaken: Esta carta, al usarla el personaje recupera toda su salud, y recibe al instante un 50% mas de vida DEL TOTAL que tiene ahora mismo, aplica un buff de reducción del 25% de daño del total, a parte añade 1 ataque adicional al personaje (si se usa, no se puede utilizar la carta ataque adicional). LIMITADA A 1 POR MAZO Y CADA PERSONAJE tiene su carta, pero solo puedes tener 1 de esta clase
  • Ataque adicional: El personaje al que se utiliza, gana un ataque adicional hasta 4 (no se puede tener mas, por si piensas en recuperarla de las cartas usadas), y reduce el gasto de energía de los ataques en ESE slot abierto, un 30% (No se puede utilizar con un personaje que se ha usado Awaken).
    LIMITADA A 1 POR MAZO Y CADA PERSONAJE tiene su carta, pero solo puedes tener 1 de esta clase
  • Destrucción de mano: Esta carta hace que tu rival descarte de 1 a 3 cartas de su mano, y podrá tener efectos que serán descritos, en el listado de efectos nuevos
  • Bloqueo de mano: Esta carta bloquea al azar una carta o varias, de 1 a 3 turnos.
  • Visualizar mano: Dependiendo del coste de activación, puedes visualizar una carta al azar, o toda la mano.
  • Generar «aggro»: El aggro es conocido en los videojuegos MMORPG sobretodo, por ser el «foco de atención», al que van a atacar todas las personas en la batalla, del bando rival, durante un corto periodo de turno. Esta carta dependiendo de su coste, te convertirá en el blanco durante 1 o 2 turnos, al activarla regeneras el 100% de la vida, pero no puedes atacar con ese personaje mientras dure el efecto.
  • Coste 0: Esta carta de utilidad, te permitirá equipar un ataque sin gastar energía, para activarla, dependerá de condiciones nuevas.
  • Bloquear arma: Bloquearas el slot del ataque de un personaje rival, de 1 a 3 turnos.
  • Robar arma: Robaras el arma de tu rival (menos ataques especiales de personajes) y lo recibirás en un slot que tengas, en caso que este lleno, se puede perder el ataque, o reemplazar uno que tengas. El gasto sera el 50% en este caso, del ataque robado. LIMITADA A 1 POR MAZO.

Condiciones de uso/activación

Las condiciones de activación actualmente solo estaban basados, en el coste de energía, siendo muy repetitivo, las condiciones de las cartas, a partir de esta actualización, habrán nuevas condiciones para su uso.

Todas las formas mencionadas a continuación, pueden combinarse para activar una carta.

Cambios en las cartas de uso/ataques

  • Coste de energía: Se mantiene tal y como estaba desde el principio del juego
  • Coste por descarte: Para activarla, tienes que descartar X carta(s) de tu mano
  • Coste por retirar cartas usadas: Deberás eliminar del listado de cartas que has utilizado, X carta(s) para proceder a activarla.
  • Requisito de personaje/clase: Se mantiene tal y como estaba al principio del juego, haciendo que esa carta solo se pueda activar en ese personaje o clase (tank, asesino/a, mago/a, support)
  • Sacrificio de recarga energía: Perderás de 1 a 2 turnos, donde no podrás recargar energía.
  • Sacrificio de bloqueo de slot: Perderás temporalmente ese slot de atk/hechizo, durante 2 a 3 turnos, no se pierde lo que tuvieses ahí equipado.

Efectos nuevos

Se añadirán los siguientes efectos, al utilizar un ataque, que los contenga:

  • Devolver trampa a la mano: La trampa no se activa, y es devuelta a la mano del rival.
  • Bloquear carta de la mano: Bloqueas una carta al azar de la mano de tu rival, de 1 a 2 turnos.
  • Auto rank-up: cada turno, sube de rango, si alcanza el rango 5 no pueden ser destruidas ni desequipadas
  • Power-Rank: Cada turno hasta un máximo de 5, sube un 10% el daño base al arma y si es reemplazada por otra carta del mismo tipo de ataque y es de rango mayor, obtiene como base un 50% del daño base que se sumara al daño de la carta, ejemplo: rango 1 -> 20 de atk, obtendras 10 de ataque adicional al daño de la carta

Cambios en efectos de activación de una carta trampa

Actualmente, TODAS las cartas trampa, se activan cuando se realiza un ataque, a partir de ahora el juego te preguntara, si quieres activarla o no, cuando recibes un ataque.

El tiempo limite de respuesta del servidor, serán 10s, en caso negativo de no responder, no se activara. Cuando salga este mensaje, la persona que tiene el turno, el tiempo que tiene en su turno, se congelara hasta que no se vaya el mensaje.

A parte este pequeño cambio, también se insertaran nuevos métodos de activación, para que haya mas variedad:

  • Al equipar un ataque
  • Al usar una carta
  • Al utilizar un hechizo
  • Activación en el turno del rival (solo en draw phase, antes de que robe carta tu rival).

Y también voy a incorporar efectos de cartas, que pueden ser infinitos, que no se vayan a no ser, que se elimine esa carta.
En estos efectos infinitos, un ejemplo puede ser, bloquear el slot de un hechizo o ataque.

Y esto es toda la primera parte de la actualización, que voy a ver si termino en todo febrero.

Futuro de los antiguos juegos

Los antiguos juegos que estaban anunciados, que un día volverán, de momento los quitare, y si puedo, los volveré a implementar, pero totalmente diferente a como se conocían en aquel momento.

El único juego, que si voy a dar información puntual es sobre Night Chase Killing, aun estoy pensándome en cambiar el nombre, pero ya lo decidire, aquel juego que empece a finales de 2010, de vándalos y peleas simuladas, este se convertirá en un juego en tiempo real, o peleas contra NPC, todas por turnos, equipos de 3 personajes donde podrás reclutar personajes de Ciudad404, hacer equipo y luchar contra otros equipos.

El point&click existente, seguirá, ya que el formato de visualizar la ciudad, sera la clave también, para explorar las partes de la ciudad que estén disponibles.

El Modo de combate sera 3vs3 como comente, y a cada «server tick», se ira recargando energía del personaje, cuando este llegue, tendrá un turno de 1min para realizar alguna acción, como atacar o otra acción, utilizar un objeto del inventario, y así sucesivamente, la obtención de los turnos sera mediante la estadística: «Velocidad».

Las estadísticas de los personajes que tendrán, son las siguientes:
Rango: del 1 al 5, aumenta las estadísticas base, y proporciona habilidades especiales nuevas.
ATK: Aumenta el daño base del arma
Def: Aumenta la cantidad de DEF que proporcione su equipamiento (Chaleco, casco, pantalones y botas)
Resistencia: Mejora la vida total
Velocidad: Recuperación basada en «ticks» hasta el proximo ataque. El tiempo de espera base para poder atacar por personajes variara, algunos desde los 10s otros hasta los 15 o 20s.
% Crit: Probabilidad de hacer un daño critico
Stamina: Posibilidad de ejecutar acciones tácticas (esquivar, cambiar posición, skills de los personajes)

Ya proporcionare mas información, una vez consiga terminar, cosas pendientes del núcleo del juego de Cardbattle.

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.

WordPress Themes