top of page
logo_flavor_savior_2.png

Flavor Savior

A delicious and thrilling adventure.

Flavor Savior is the videogame that I developed with 3 classmates as a Final Project for the Digital Design, Animation and Videogames Degree. It consists of a 2.5D style RPG whose combat revolves around cooking minigames. This game is the most complex project I have worked on so far and I put all my programming knowledge into it.

Thanks to this project I learned to rely on my team when making decisions and finding solutions and also to adapt the work to the time available, implementing as much as possible but always leaving a margin for testing and fixing bugs.

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

Planning

As the Lead of the programming department, first I made a list with all the mechanics that would form the game ranked by importance so that deadlines could be established. Thanks to this I could have a clear idea of what should be implemented on every game phase:

  • In the Pre-Alpha it would have the core functionality of the turn-based combat, the explorable world and the save system.

  • The Alpha would have mainly implemented the quest system, the minigame based attacks and the final Boss battle.

  • For the final phase, the Beta, all the visuals would have been added and the game would have been shared with various testers to add the lastest improvements and fix the bugs found, achieving the Golden version.

FVS_portada_v01.png

Programming

Exploration system

The exploration system is the one in charge of the player character with their level-based progression system, the main and side quest system, the entry to battle and various secondary mechanics.

TRANSLATION IN PROCESS

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.

Battle system

The battle system consists of a turn-based combat where certain player attacks are performed based on the results of short minigames. All their functioning is on the large blueprint BP_Battle and on the enemies created from BP_BattleEnemy.

First, according to the saved data in the "customBattle" file, enemies are created in defined positions depending on the quantity of each type. Afterwards, all HUD battle buttons are linked to the possible combat actions and it's decided who gets the first turn based on the velocity of each side.

​TRANSLATION IN PROCESS

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