A game about piracy

«A game about piracy» es el nombre de mi prototipo para la primera Práctica de Evaluación Continua (PEC1) de la asignatura Programación de Videojuegos 2D del Máster Universitario en Diseño y Programación de Videojuegos de la UOC.

El objetivo de la práctica era desarollar un juego en 2D que imitara el sistema de duelos de insultos de «The Secret of Monkey Island» utilizando los conocimientos adquiridos en el estudio del primer módulo de la asignatura y realizando investigación por cuenta propia.

Vídeo explicativo

Versión jugable

A game of piracy by Ragart on itch.io

Repositorio en GitLab

UOC – M7.456 – PEC1 en GitLab

Como jugar

El objetivo del juego es ganar tres asaltos en un duelo de insultos contra la CPU.

  • En el turno del jugador, es necesario elegir un insulto de la lista de insultos disponibles usando el ratón.
    • Si el oponente acierta, gana el asalto y el jugador pierde el turno.
    • Si falla, el jugador gana el asalto y sigue su turno.
  • En el turno del oponente, se escoge un insulto aleatorio y el jugador debe elegir una réplica de la lista de réplicas disponibles usando el ratón.
    • Si el jugador acierda, gana el asalto y el oponente pierde el turno.
    • Si falla, el oponente gana el asalto y sigue su turno.
  • Cuando el jugador o el oponente han ganado tres asaltos, el juego finaliza.

Desarrollo

A efectos de cumplir lo solicitado en las instrucciones, el prototipo incluye lo siguiente:

  • Cinco escenas:
    • Créditos iniciales con la autoría del prototipo y la atribución del sistema de juego a LucasArts.
    • Introducción argumental que pone en contexto el motivo del duelo.
    • Menú principal con las opciones de iniciar la partida y salir del juego, así como con los créditos.
    • Escena de combate en la que se desarrolla el bucle del juego.
    • Final de partida que permite volver a jugar sin reiniciar el juego o volver al menú principal.
  • Múltiples scripts de C# que implementan la lógica de juego, así como algunas opciones adicionales (por ejemplo, cambiar el cursor o ejecutar un diálogo entre personajes).
  • Bucle del juego implementado mediante una máquina de estados compuesta por los estados siguientes:
    • Begin: configuración inicial del bucle de juego y determinación aleatoria del inicio de turno.
    • PlayerTurn: lógica del turno del jugador. Permite seleccionar un insulto y hace que el oponente escoja una réplica de manera aleatoria, pero con un 33% de probabilidades de acertar. Si el oponente no acierta, se mantiene el estado y se vuelve a iniciar el turno. De lo contrario, se pasa al estado EnemyTurn.
    • EnemyTurn: lógica del turno del oponente. Hace que el oponente escoja un insulto de manera aleatoria y permite seleccionar una réplica. Si el jugador acierta, se pasa al estado PlayerTurn. De lo contrario, se mantiene el estado y se vuelve a iniciar el turno.
    • Won: fin del juego cuando el jugador gana tres asaltos antes que el oponente. Muestra unos mensajes finales y redirige a la escena de final de partida.
    • Lost: fin del juego cuando el oponente gana tres asaltos antes que el jugador. Muestra unos mensajes finales y redirige a la escena de final de partida.
  • Lista de insultos obtenida de un fichero JSON almacenado en Resources.
  • Elementos de sonido y visuales en todas las escenas.
    • Para las transiciones entre animaciones, se han utilizado las máquinas de estado proporcionadas por el componente Animator.

Es importante mencionar que la pantalla final no muestra quién ha sido el ganador por una elección de diseño, ya que se muestra de manera agumental, a través de los diálogos de los personajes, en los estados Won y Lost de la escena de juego. De querer implementarse, se hubiese optado por una clase estática con el método DontDestroyOnLoad() que contuviera la información básica del juego que contiene actualmente la clase CombatManager (vidas del jugador y del oponente, estados, etc.).

Problemas conocidos

  • Las animaciones Attack y Hit Taken de jugador y oponente se ejecutan en ocasiones de manera desincronizada.
  • El anclaje de los botones del menú principal y de la pantalla final hacen que el texto se desplace al cambiar de resolución.
  • Al pulsar el botón Escape, se sale del modo a pantalla completa en vez de omitir la introducción, abrir el menú de pausa o cerrar los créditos.

Créditos

Monkey Island™

  • Todos los elementos visuales pertenecientes a la saga Monkey Island™ son propiedad de Lucasfilm Games.

Fuentes

Música

Imágenes y animaciones

Referencias

Deja un comentario