Cyberknights

Tipo de Proyecto Proyecto grupal
Software Utilizado Unity
Rol(es) principal(es) Diseñador lead / Programador lead
Lenguajes C#
Duración del Proyecto 11 meses

Acerca de Cyberknights

Cyberknights empezó como un trabajo de construcción de mundos para mi programa de diseño de videojuegos, en el que creamos un universo con historia, personajes, biomas, cultura, etc... Más tarde, decidimos partir de esa base para el trabajo de final de curso. Cyberknights es un RPG con un sistema de combate por turnos en el que controlas hasta 4 personajes para derrotar a tus enemigos. Cada personaje cuenta con pasivas, habilidades, jugabilidad y rol únicos, dando lugar a múltiples estrategias de juego. En Cyberknights, deberás escoger tu camino y avanzar por las distintas fases de cada nivel, dando lugar a diversos encuentros: desde zonas de descanso y eventos de diálogo, hasta desafiantes combates contra mini-jefes y jefes.

Historia

El jugador toma control de Helah, nuestra protagonista, una exploradora que trabaja para el gobierno del planeta de Nox, en un programa llamado EOM, que tiene como objetivo explorar y entender la biósfera del recientemente colonizado planeta. Acompañada de su fiel compañero, Hades, un lúgubre y desconocido futuro se avecina sobre el planeta. Helah y los demás supervivientes deberán lidiar con este conflicto de escala mundial, al mismo tiempo que se desvelan los secretos del oscuro pasado de la protagonista y sus consecuencias.

El combate en Cyberknights es un sistema por turnos en el que el jugador controla hasta 4 personajes para enfrentarse contra hasta 4 enemigos. Las habilidades de los personajes se regulan mediante los cristales de energía (esquina inferior izquierda, justo encima del menú de combate). Cada personaje tiene un ataque básico, el cual regenera un cristal de energía, 3 habilidades, las cuales tienen distintos costes de cristales de energía y una habilidad final que se va recargando atacando, recibiendo daño y derrotando enemigos. Si el coste de cristales de energía de una habilidad es superior a los cristales de energía acuales, no se podrá efectuar dicha habilidad.

Barra de acción

En la esquina superior izquierda se puede visualizar la barra de acción, donde el jugador puede visualizar el orden de actuación de los personajes y enemigos, actuando antes el que esté más a la derecha. También se podrá ver en la barra de acción a que enemigo se está atacando, indicado con un fondo rojo. El orden de actuación se determina por la velocidad de cada personaje y enemigo.

Rango

Cada ataque ofensivo puede ser a distancia o cuerpo a cuerpo, indicado por un icono. Los ataques a distancia pueden atacar a cualquiera de los 4 enemigos, sin embargo, los ataques cuerpo a cuerpo solo podrán afectar a los 2 enemigos situados en la línea frontal. Si los enemigos de la línea frontal mueren, se podrá afectar a los enemigos de la línea trasera con ataque cuerpo a cuerpo. Algunas habilidades pueden afectar a ambos enemigos de la línea frontal o incluso a todos enemigos (se indican los enemigos afectados por el ataque antes de realizarlo).

Icono ataque cuerpo a cuerpo

melee-icon

Icono ataque a distancia

ranged-icon

Los enemigos siempre poseen un escudo, y estos tienen dos atributos: afinidad y valor. La afinidad de escudo puede ser: Tecnológico, Salvaje, Lunar y Mágico. Cada una de estas afinidades tiene una afinidad favorable y desfavorable, indicada por la rueda de afinidades. El valor representa la resistencia del escudo.

afinity_wheel

Cuando se rompe un escudo el enemigo queda aturdido durante 1 turno. Después, regenerará su escudo, que podrá ser de otro tipo. Cada personaje es de un tipo de afinidad y sus ataques aplican daño de esa afinidad.

Dependiendo del tipo de escudo que se rompa, el personaje recibirá una bonificación distinta: Tecnológico recupera energía de la habilidad final, Salvaje incrementa el daño del siguiente ataque, Lunar restaura vida y Mágico otorga cristales de energía.

Los personajes y enemigos pueden tener diversos efectos de estado durante la batalla, algunos beneficiosos y otros perjudiciales, estos son resultado de los movimientos de los combatientes.

effects

En los enemigos los estados se muestran debajo de su barra de vida, y en los aliados a la izquierda de la misma. El número que acompaña los iconos determina el número de turnos restantes que durará el efecto. En el caso de las bonificaciones de ataque y defensa, también se indica su potencia (Por ejemplo, 30 significa que el ataque se ve aumentado en un 30%).

effects-enemy effects-ally

En la esquina superior derecha están las funcionalidades extra de aumentar velocidad de combate y revisar la caché. La velocidad de combate se puede aumentar a 1.5x y a 2x. En la caché el jugador puede consultar información sobre los efectos de estado y afinidades.

extra-functionality effects-ally

Esta función se encarga de buscar al objetivo aliado de un ataque individual de un enemigo, dependiendo de si el enemigo ataca cuerpo a cuerpo o a distancia, y de que aliados están vivos.

Este código lo escribí para el ataque "Eclipse" del personaje Shilva. Es un ataque individual con probabilidad de aturdir al objetivo durante 1 turno.

El jugador puede pulsar Z o X para saltar el diálogo rápidamante, la animación y la voz del personaje se cancelarán y se mostrará la línea entera. Después puede volver a pulsar para ir a la siguiente línea.

Funcionamiento

El diálogo del juego se almacena en archivos de texto que contienen las líneas del mismo. Este se almacena en formato: "personaje: texto del diálogo en si: sprite: posición en pantalla: efecto de sonido". De esta manera en cada línea tenemos la información necesaria para mostrar por pantalla todo lo necesario. En el caso del diálogo en combate, solo contiene personaje y texto.

La sección del "sprite" fué creada porque al principio planeamos hacer distintas imagenes para representar las emociones para los personajes, pero debido al tiempo que teniamos no pudimos tener el arte listo. La sección "efecto de sonido" es opcional y la mayoría de líneas no tienen, pero es útil para aportar inmersión en ciertos momentos.

Aquí podemos ver el código que lee el archivo de texto, las líneas y almacena la información.

Diálogo en combate

Para ayudar con la inmersión y hacer el juego más dinámico, implementé un sistema de diálogo dentro del combate. Este no se puede saltar y se irá reproduciendo de forma automática.

Este es el código que se encarga de ir mostrando las líneas de diálogo durante el combate.

Work in progress...

Work in progress...