Publicat per

Memento mori

Publicat per

Memento mori

Logos “Logos” es el nombre de mi prototipo para la Práctica Final de la asignatura Programación de Videojuegos 2D del Máster Universitario…
Logos “Logos” es el nombre de mi prototipo para la Práctica Final de la asignatura Programación de Videojuegos 2D…

Logos

Captura de pantalla de la página de título de Logos

“Logos” es el nombre de mi prototipo para la Práctica Final 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 desarrollar una experiencia completa en 2D de temática libre, utilizando los conocimientos adquiridos durante toda asignatura y realizando investigación por cuenta propia.

“Logos” sirve como demostración conceptual de “Idios”, una propuesta de diseño que se llevó a cabo para la asignatura “Game Design” del Máster Universitario en Diseño y Programación de Videojuegos de la UOC y cuyo GDD puede encontrarse aquí. No obstante, “Logos” es un juego autoconclusivo que permite disfrutar de una experiencia completa de principio a fin y que puede considerarse como una obra enmarcada dentro del mismo universo ludoficcional que “Idios”. Dentro de ese microcosmos narrativo, el concepto de “Logos” hace referencia al término del griego antiguo λóγος, que significa “pensamiento”, y que aquí se utiliza como representación de la mente humana y su capacidad para, ante todo, proteger al organismo, elevándolo en cierta manera hasta el estatus de deidad, aunque ajena al concepto tradicional de dios.

Vídeo explicativo

Versión jugable

Logos by Ragart on itch.io

Repositorio en GitLab

UOC – M7.456 – PEC Final en GitLab

Sinopsis

La muerte es inevitable. O quizás no.

Después de enterarse del suicidio de su mejor amiga, el Personaje, atormentado por no haber hecho nada para evitarlo, despierta en un mundo extraño en el que puede evocar situaciones vividas entre los dos y alterarlas para intentar cambiar los acontecimientos.

Sumergirse en los recuerdos le hará darse cuenta de que la realidad es más compleja de lo que aparenta. ¿Podrá anteponerse al Destino y evitar el funesto desenlace?

Resumen argumental

[Contiene detalles importantes de la trama del juego]

Después de recibir la noticia del suicidio de su mejor amiga, el Personaje se pregunta si podría haber hecho algo para evitarlo e intenta recordar si hubo algún momento en el que ella hubiera dado señales de posibles problemas emocionales que la empujaran a quitarse la vida.

Al hacerlo, se ve transportado a un extraño mundo donde es capaz de revivir algunas situaciones clave vividas entre ambos y sobre las que puede influir para intentar cambiarlas, dando pie a otros recuerdos e incluso a nuevos desenlaces.

No obstante, todas las alternativas que el Personaje desbloquea acaban siempre en la muerte de su amiga, aunque por diferentes motivos.

Después de ver todas las alternativas posibles, un nuevo camino se abre y el Personaje encuentra con una representación más vívida de su amiga. Al interactuar con ella, la figura toma la forma del Personaje y le indica que su amiga no existe y que quien realmente está muriendo es él. La figura se identifica como Logos, la parte de su cerebro que intenta protegerlo de la realidad.

Cuando el Personaje le pregunta cuál es la causa real de su muerte, Logos le indica que eso ya no importa y que la única verdad de la que debe ser consciente es la de la inevitabilidad de su destino.

Cómo jugar

El objetivo del juego es encontrar todas las alternativas argumentales al desenlace por defecto mediante la manipulación de los recuerdos. Para ello, el jugador puede aprender palabras de los diálogos y usarlas en otros para intentar provocar un cambio que evite el desenlace inicial o que permita acceder a otros recuerdos.

El juego se desarrolla en un bucle. Una vez visualizado uno de los finales, el jugador vuelve a la escena inicial y puede probar diferentes combinaciones.

El jugador puede llevar un máximo de cuatro palabras a la vez y, si durante una iteración del bucle quiere aprender alguna palabra adicional, debe descartar una de las que lleve en ese momento. No obstante, las palabras que se conserven al final de la iteración se aprenderán de manera permanente y podrán ser escogidas para equiparse desde el principio de la iteración siguiente.

El control se lleva a cabo mediante teclado y ratón:

  • Las teclas WASD y las fechas direccionales mueven al personaje por el escenario.
  • El ratón permite aprender y usar las palabras dentro del diálogo.

Desarrollo

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

  • Créditos iniciales con la autoría del prototipo
  • Introducción argumental que pone en contexto el motivo del duelo.
  • Pantalla de título y menú principal con opciones para continuar la partida, iniciar una nueva y salir del juego, así como con los créditos. También incluye opciones de configuración:
    • Subir/bajar el volumen maestro
    • Cambiar la velocidad del texto en pantalla
    • Cambiar la velocidad del movimiento del personaje
  • Escena de selección de palabras
  • Escena de juego
  • Escena final que se reproduce después de cada iteración del bucle y que varía en función del final obtenido

Además, para poder llevar a cabo la propuesta, se han utilizado varios de los componentes y técnicas utilizados en prototipos anteriores, pero otros se utilizan por primera vez. A continuación se destacan los más relevantes:

  • Se han utilizado tilemaps isométricos para desplegar la escena de juego. A efectos de simular la superposición entre elementos, se han usado varios tilemaps Z as Y en diferentes sorting layers y con niveles diferentes para el valor Z. Además, debido a la complejidad de la escena de juego, se han elaborado tiles con formas similares a los bordes de los sprites utilizados para definir las colisiones. Tal y como puede observarse en la imagen siguiente, se han añadido varios tipos de tiles para colisiones:
    • Los tiles rosas son de carácter estáticos y se usan para definir los bordes exteriores de la escena.
    • Los tiles azules son de carácter temporal y se usan para definir las barreras entre las escenas, que desaparecer cuando se cumplen ciertas condiciones.
    • Los tiles verdes no son realmente tiles, sino objetos que disparan uno o varios eventos cuando el jugador entra en contacto con ellos.

Captura de pantalla de la vista de Grid de Unity durante el desarrollo de Logos

  • Los tiles de las diferentes capas se han añadido mediante el uso de palettes.

 

Captura de pantalla del componente tilePalette de Unity

  • Para optimizar la creación de las animaciones de los personajes, se han utilizado sprites librariesblend trees.

Captura de pantalla de los elementos blendTree y spriteLibrary de Unity

  • Para poder proporcionar una experiencia completa con el teclado, se ha utilizado el componente Navigation y se han configurado de manera programática las diferentes lógicas que rigen el flujo de desplazamiento del usuario por los menús.

Captura de pantalla del componente navigation de Unity

  • Para poder trabajar con palabras específicas dentro de los textos del juego, se han utilizado las etiquetas de texto enriquecido del componente TextMeshPro. En particular, la etiqueta <link> permite tanto la caracterización de palabras dentro del texto como la interactividad por parte del jugador.

Captura de pantalla de una versión preliminar de Logos en la que se muestra el uso del componente TextMeshPro

  • Además, para poder desplegar el complejo árbol de conversaciones que subyace a esta propuesta, se ha optado por crear varias entidades a nivel de código que reflejan las diferentes unidades que pueden extraerse del texto (segmentos, palabras, etc.) y que facilitan tanto la importación de texto desde un formato de intercambio como el desarrollo del flujo conversacional.
Captura de pantalla del fragmento de código de Logos que define un segmento textual
  • Finalmente, también se ha incorporado un sistema de guardado y cargado que permite retomar el juego por donde se dejó. Para ello, se ha utilizado el almacén de PlayerPrefs, ya que el uso de almacenes de datos basados en ficheros dificulta la publicación en WebGL y se ha preferido ir por lo seguro en base al tiempo disponible.

Captura de pantalla del fragmento de código de Logos que permite cargar una partida

 

Problemas conocidos

En el momento de la publicación de la propuesta, se tiene conocimiento de los problemas siguientes:

  • Los tiles de los puentes y las escenas se superponen en algunas ocasiones, haciendo que el personaje “salte” cuando pasa entre ellos.
  • La versión de WebGL da algunos problemas con el uso del ratón. A veces no es posible encontrar el cursor.

Por hacer

En el momento de la publicación de la propuesta, no fue posible llevar a cabo los siguientes conceptos, incluidos dentro del diseño original:

  • Permitir que la navegación en los diálogos y la selección/uso de palabras se haga mediante el teclado para prescindir del uso del ratón.
  • Extraer todas las cadenas de texto a un fichero de localización. Actualmente, las cadenas relativas a la UI están forzadas en el código y las relativas al contenido argumental están en un JSON con información adicional.
  • Añadir unas sombras NPC que persigan al personaje por los puentes entre las diferentes escenas. Si el personaje es atrapado por ellas, aparece el mensaje “Memento Mori” y debe reiniciar el bucle desde la escena inicial.
  • Hacer que el texto se escriba progresivamente en los cuadros de diálogo en vez de todo a la vez, implementando la configuración relativa a la velocidad de los textos en pantalla.
  • Utilizar el componente Timeline para la secuencia introductoria.

Créditos

Fuentes

Imágenes y animaciones

Sonidos

Música

Referencias

Animaciones

Tilemaps isométricos

TextMeshPro

Guardado, cargado, PlayerPrefs y serialización

Volumen y sliders

Localización (l10n) / internacionalización (i18n)

Debat1el Memento mori

  1. Anna Zango Palau says:

    Pero como se me había pasado por alto esta maravilla?! jajaja lo publicaste tan temprano que ni lo había visto!!! Tanto el diseño como la historia son muy interesantes. Y encima que tenga distintos finales me parece insuperable. Felicidades!!

Publicat per

Long live the onion

Publicat per

Long live the onion

Tortilla Wars “Tortilla Wars” es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3) 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 desarrollar un juego de artillería en 2D, similar a Scorched Earth o Worms, utilizando los conocimientos adquiridos en el estudio del tercer módulo de la asignatura y realizando investigación por cuenta propia. Vídeo explicativo Vídeo versión Android…
Tortilla Wars “Tortilla Wars” es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3) de…

Tortilla Wars

“Tortilla Wars” es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3) 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 desarrollar un juego de artillería en 2D, similar a Scorched Earth o Worms, utilizando los conocimientos adquiridos en el estudio del tercer módulo de la asignatura y realizando investigación por cuenta propia.

Vídeo explicativo

Vídeo versión Android

Versión jugable

Tortilla Wars by Ragart on itch.io

Repositorio en GitLab

UOC – M7.456 – PEC3 en GitLab

Cómo jugar

El objetivo del juego es vencer al resto de jugadores u oponentes. Para ello, los jugadores cuentan con un proyectil que se dispara de manera parabólica y que permite dañar al resto de jugadores u oponentes y destruir el terreno de juego.

El juego permite hasta 4 jugadores locales (pasando el control en cada turno) o controlados por la CPU.

En el caso de WebGL, el control se hace mediante teclado y ratón:

  • La flecha izquierda y la tecla A mueven al personaje hacia la izquierda.
  • La flecha derecha y la tecla D mueven al personaje hacia la derecha.
  • El espacio hace que el personaje salte.
  • El botón izquierdo del ratón dispara el proyectil hacia el punto en el que se haya hecho el clic, aunque siempre asegurando un ángulo mínimo de 45º. Si se mantiene pulsado antes de soltarlo, la fuerza del proyectil aumenta.

En el caso de Android, el control se hace mediante los botones en pantalla:

  • El botón con la flecha izquierda mueve al personaje hacia la izquierda.
  • El botón con la flecha derecha mueve al personaje hacia la derecha.
  • El botón con la flecha superior hace que el personaje salte.
  • El botón de disparo dispara el proyectil hacia la dirección en la que esté mirando el personaje en un ángulo de 45º. Si se mantiene pulsado antes de soltarlo, la fuerza del proyectil aumenta.

Desarrollo

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

  • Cuatro personajes diferentes, cada uno con su propio proyectil, con más de dos animaciones y sistemas de partículas.
  • Los personajes controlados por la CPU calculan la ubicación del personaje más cercano y ajustan la dirección y la fuerza del disparo en base a ello.
  • Hay múltiples escenas, una clase persistente y una máquina de estados que permiten mostrar en pantalla datos del juego, incluyendo la vida de los jugadores y el estado de la partida.
  • Se utilizan etiquetas y capas para la detección de colisiones y para la ubicación de objetos y componentes dentro del código.
  • El juego se ha desarrollado tanto para WebGL como para Android, simplificando en este último caso algunas de las acciones.

De manera adicional, se han usado componentes como Cinemachine o el nuevo InputSystem para obtener un mayor control sobre el juego.

Problemas conocidos

  • En raras ocasiones, el juego salta el turno de un jugador.
  • En la versión móvil, los controles en pantalla no desaparecen en el turno de los jugadores controlados por la CPU.

Créditos

Fuentes

Imágenes y animaciones

Sonidos

Música

Referencias

C#

Unity – General

Lanzamiento de objetos / cálculo de coordenadas

Android / Mobile

Tilemaps

Cinemachine

New InputSystem

Debat1el Long live the onion

  1. Anna Zango Palau says:

    Que pasada madre miiia! Me encanta que puedan jugar hasta 4 personas. Y el vídeo parece un trailer comercial jajaja!  Increíble que hayas podido crear este juegazo en las pocas semanas que tenemos para la PEC3, felicidades!!!

Publicat per

Mario the Hedgehog

Publicat per

Mario the Hedgehog

Jump, Sonic, jump! “Jump, Sonic, jump!” es el nombre de mi prototipo para la segunda Práctica de Evaluación Continua (PEC2) 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 replicara el mundo 1-1 de “Super Marios Bros.” (NES) utilizando los conocimientos adquiridos en el estudio del segundo módulo de la asignatura y realizando investigación por cuenta propia. Vídeo…
Jump, Sonic, jump! “Jump, Sonic, jump!” es el nombre de mi prototipo para la segunda Práctica de Evaluación Continua…

Jump, Sonic, jump!

“Jump, Sonic, jump!” es el nombre de mi prototipo para la segunda Práctica de Evaluación Continua (PEC2) 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 replicara el mundo 1-1 de “Super Marios Bros.” (NES) utilizando los conocimientos adquiridos en el estudio del segundo módulo de la asignatura y realizando investigación por cuenta propia.

Vídeo explicativo

Versión jugable

Jump, Sonic, Jump! by Ragart on itch.io

Repositorio en GitLab

UOC – M7.456 – PEC2 en GitLab

Cómo jugar

El objetivo del juego es llegar hasta el final del nivel, recogiendo monedas y evitando que los oponentes .

Los controles son los siguientes:

  • Flecha izquierda: moverse hacia la izquierda
  • Flecha derecha: moverse hacia la derecha
  • Flecha superior: saltar
  • Flecha inferior: agacharse (elemento estético)

Desarrollo

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

  • Dos escenas: una que muestra la información del jugador (vidas, puntos, etc.) y otra en la que se desarrolla el juego.
  • El escenario de juego se ha estructurado utilizando tilemaps, mediante dos palettes.
  • Se han añadido animaciones y sonidos para todas las acciones del personaje jugador.
  • La cámara se desplaza con el personaje jugador y le impide volver a atrás.
  • Los personajes oponentes también tienen animaciones y sonidos, se desplazan horizontalmente y mueren si el personaje jugador salta sobre ellos, utilizando una mezcla de colliders y de raycast.
  • Se han implementado varios tipos de bloque: los estándar, que el personaje jugador puede romper cuando es grande; los sorpresa, que contienen monedas o powerups; los que contienen múltiples monedas; y, finalmente, los invisibles.
  • Se han implementado dos powerups: las setas que hacen que el personaje jugador crezca y cuente con un punto de daño adicional y las setas que proporcionan una vida extra.
  • Se ha añadido un HUD con información sobre los puntos, las monedas y el tiempo restante. Si el tiempo llega a cero, el jugador pierde.
  • La escena de juego cuenta con música de fondo y sonidos propios.
  • Además de las animaciones proporcionadas por el componente Animator, también se han creado algunas animaciones en tiempo de ejecución mediante las posiciones y el Vector3.Lerp.

Problemas conocidos

  • A veces el personaje jugador salta demasiado alto debido a una detección incorrecta del nivel del suelo.

Créditos

Super Mario Bros™

  • Todos los elementos pertenecientes al juego Super Mario Bros.™ son propiedad de Nintendo Company, Ltd.

Sonic the Hedgehog™

  • Todos los elementos pertenecientes al juego Sonic the Hedgehog™ son propiedad de Sega Corporation​.

Fuentes

Imágenes y animaciones

Referencias

Unity – General

Tilemaps

Raycast

Movimiento y control  del personaje

Animaciones

Partículas

Otras

Debat0el Mario the Hedgehog

No hi ha comentaris.

Publicat per

Yo soy cola, tú pegamento

Publicat per

Yo soy cola, tú pegamento

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.…
A game about piracy “A game about piracy” es el nombre de mi prototipo para la primera Práctica de Evaluación…

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

Debat0el Yo soy cola, tú pegamento

No hi ha comentaris.