top of page
logo_flavor_savior_2.png

Flavor Savior

Una deliciosa y trepidante aventura.

Flavor_Savior_logo.png

Flavor Savior es el videojuego que desarrollé junto con 3 compañeras como Trabajo Final del Grado en Creación Digital, Animación y Videojuegos. Este consiste en un RPG de estilo 2.5D cuyo combate gira en torno a minijuegos de cocina. Es el proyecto más complejo en el que he trabajado hasta la fecha y en él volqué todos mis conocimientos de programación.

Gracias a este proyecto aprendí a apoyarme en mi equipo a la hora de tomar decisiones y encontrar soluciones y también a adaptar el trabajo al tiempo disponible, implementando lo máximo posible pero dejando un margen para testear y arreglar errores.

FVS_portada_v01.png
Listado de tareas con su respectiva prioridad y deadline.

Organización

Como Lead del departamento de programación, primero cree un listado con las mecánicas que conformarían el juego divididas por rango de importancia, para poder establecer fechas de entrega. Gracias a esto pude tener una idea clara de qué debería implementar para las distintas versiones del juego:

  • En la versión Pre-Alpha se tendría la funcionalidad primordial del combate por turnos, el mundo explorable y el sistema de guardado. 

  • En la Alpha se implementaría principalmente el sistema de misiones, los ataques basados en minijuegos y la batalla contra el Boss final.

  • Para la Beta, la última fase, se añadiría todo el apartado visual y se compartiría el juego con diversos testers para añadir las últimas mejoras y arreglar los bugs que encontrasen, pudiendo así obtener la Golden.

FVS_portada_v01.png

Programación

Sistema de exploración

El sistema de exploración es el que se encarga del personaje del jugador con su sistema de progresión en base a niveles, el sistema de misiones tanto principales como secundarias, la entrada en batalla y diversas mecánicas secundarias.

El funcionamiento básico del jugador se encuentra en BP_Player.

  • Sistema de guardado temporal 
    Este sistema de guardado se creó al implementar la entrada en batalla, ya que ésta se encuentra en un nivel externo al nivel de exploración y se perdería el progreso conseguido al tener que crear de nuevo el personaje del jugador.

Ahora al crearse el personaje se consulta el archivo “temp” para actualizar las variables guardadas. Tras ello se carga el subnivel en el que se encontrase y se coloca al jugador en la posición guardada. Al terminar se hace la llamada Ready, enlazada con todos los sistemas que no deberían cargarse hasta que el jugador esté listo.
En este personaje también se realiza el guardado del archivo “temp”, proceso que puede ser llamado desde otros sistemas.​

  • Sistema de progresión
    Cuando el jugador consiga puntos de experiencia al derrotar a enemigos o completar objetivos de misiones, se comprobará si ha conseguido los suficientes para aumentar de nivel. Si sube de nivel, aumentarán sus estadísticas según lo definido en la función CheckStats.

Sistema de batalla

El sistema de batalla consiste en un combate por turnos donde ciertos ataques del jugador se realizan según el resultado obtenido en unos cortos minijuegos. Todo su funcionamiento se encuentra en la extensa blueprint BP_Battle y en los enemigos creados a partir de BP_BattleEnemy.

Primero, según los datos guardados en el archivo “customBattle”, se crean los enemigos en unas posiciones definidas que dependen de la cantidad de cada tipo. Posteriormente se enlazan todos los botones del HUD de batalla con las posibles acciones del combate y se decide quién recibe el primer turno según la velocidad de cada bando.

El jugador puede seleccionar cualquiera de los minijuegos que tenga disponibles y tras ello escoger a qué enemigo dañar. Tras seleccionar un ataque se calcula, según la posición del cursor en pantalla, qué enemigo debería marcarse. Cuando el jugador haga clic, se llamará a la función del ataque seleccionado previamente. “El especial de la casa” simplemente realiza la animación correspondiente antes de dañar al enemigo, pero el resto de ataques funcionan gracias al resultado obtenido en distintos minijuegos.

  • Minijuegos

- "Bananarang" añade a pantalla WB_Bananarang y crea un temporizador. Dentro del widget el jugador debe hacer clic y arrastrar su cursor para conseguir lanzar el plátano y completar el minijuego. Si el tiempo se termina antes de que lo consiga, fallará el ataque.

- ​“Batidor de merengue” tiene un funcionamiento muy similar al minijuego anterior. Éste añade a pantalla WB_Merengue, widget en el que el jugador debe desplazar su cursor continuamente para conseguir llenar una barra de carga. Si lo consigue lanzará el ataque exitosamente.

- “Horneado de pastel” crea WB_Pastel donde un indicador se moverá hasta que el jugador lo detenga al pulsar un botón. Dependiendo de en qué zona se pare, lanzará un ataque OK, Perfect o Fail.

- “Bate piruleta” funciona a través de un temporizador también, como puede verse en WB_Piruleta. En este minijuego el jugador debe esperar a que aparezca un enemigo en pantalla y, cuando esto ocurra, clicar para golpearle. Si no consigue hacerlo antes de que desaparezca, fallará el ataque y recibirá daño. Al dañar al enemigo, también lo aturdirá durante unos turnos, consiguiendo que tenga menos probabilidad de atacar.

Al terminar cualquier minijuego, se añadirá un cooldown para impedir al jugador lanzar el mismo ataque varios turnos seguidos. Dependiendo del tipo de ataque, al completarlos exitosamente se llamará a la función para dañar únicamente al enemigo seleccionado o también a los que estén a su alrededor. Luego dentro de la blueprint de cada enemigo se restará el valor de vida correspondiente (si no consigue esquivar) y, si queda alguno con vida, el bando contrario recibirá el turno.

​

Si derrota a todos sus contrincantes, el jugador volverá al mundo de exploración con una recompensa que puede consistir en puntos de experiencia o consumibles.

​

Por otro lado, si el jugador escoge la opción de huir, éste dejará la batalla en el estado actual si su velocidad es mayor, sino seguirá en combate y perderá el turno. Al igual que si escoge tomarse un consumible del inventario, terminando su turno al aplicarse el efecto.

FVS_portada_v01.png
FVS_portada_v01.png
Gameplay
bottom of page