Thomas Ortega - Portafolio

Thomas Ortega - Portafolio

EN ES

Prototipo de Juego de Ritmo

Prototipo de Juego de Ritmo
GDScript Godot JSON

Introducción

Como parte del proyecto final de mi formación profesional, me embarqué en el desarrollo de un juego de ritmo multijugador en línea. Aunque las circunstancias requirieron reducir el alcance del proyecto, el prototipo resultante demuestra habilidades técnicas en desarrollo de juegos, programación de audio y gestión de proyectos.

Nota: Debido a que proyecto pertenece a mi centro de FP, el código fuente y la documentación no pueden divulgarse a menos que se publiquen oficialmente. Este artículo se centra en el enfoque técnico y los aprendizajes del proceso de desarrollo.

Descripción del Proyecto

¿Por qué un Juego de Ritmo?

La elección de desarrollar un juego de ritmo fue una decisión impulsada por mí, ya que combina múltiples áreas de interés y creo que puede abrirme el camino a desarrollar el perfil profesional que estoy buscando:

  • Aplica de forma práctica conocimientos de audio a través de la programación
  • Integra elementos musicales con mecánicas de juego
  • Es una oportunidad de explorar los desafíos que enfrentan los programadores de video-juegos
  • Puede ser la base para una futura exploración en programación de juegos, gráficos y audio

Características Principales

El prototipo implementa de forma satisfactoria las siguientes funcionalidades:

  • Mecánicas principales similares a Groove Coaster
  • Sistema personalizado de eventos de notas usando archivos MIDI JSON
  • Sincronización precisa entre audio y gameplay
  • Sistema de puntuación y evaluación de notas
  • Interfaz de usuario con instrucciones
  • Object pooling de notas para mejorar el rendimiento

Aquí tenéis una pequeña demo del proyecto:

coasterclon.gif

Decisiones Técnicas y Desafíos

Elección del Motor Godot

La decisión de usar el Motor Godot se basó en varios factores:

  • Eficiencia en recursos, funciona bien en máquinas con RAM limitada
  • Mejoras recientes en Godot 4.0
  • Naturaleza open-source que encaja con mis preferencias personales
  • Capacidades de prototipado rápido
  • Documentación sólida y soporte de la comunidad

Exploré otras opciones, como desarrollar el juego sin ayuda de un motor y utilizando librerías como Raylib, sin embargo el tiempo para el desarrollo de este proyecto era muy ajustado.

Diseño de Componentes

La arquitectura del juego aprovecha el sistema basado en nodos de Godot, enfatizando la modularidad y mantenibilidad:

  1. GameManager (Node2D)
    • Coordinador central de todos los sistemas
    • Gestiona estado del juego e interacciones
    • Maneja sincronización rítmica y reproducción de audio
    • Procesa datos JSON para información de canciones y notas
  2. AudioManager (Node)
    • Gestiona reproducción de audio
    • Proporciona información precisa de temporización
  3. NoteManager (Node)
    • Analiza y gestiona datos de notas desde archivos JSON
    • Controla spawning y movimiento de objetos de notas
    • Procesa notas según posición actual de reproducción
  4. BeatManager (Node)
    • Sincroniza eventos del juego con el ritmo de la canción
    • Emite señales siguiendo pulsos y compases
  5. HUDManager (Node)
    1. Actualiza los elementos de la interfaz de usuario
    2. Maneja barras de progreso, indicadores de ritmo y la cuenta atrás

Flujo de Datos y Procesamiento

  • Los datos de las canciones se cargan desde archivos JSON
  • AudioManager inicia la reproducción y proporciona el tiempo actual del sample
  • NoteManager procesa notas según el tiempo actual
  • BeatManager rastrea el ritmo y emite señales
  • GameManager procesa entrada del jugador y verifica aciertos/fallos

Superando Obstáculos Técnicos

Sincronización de Audio

Uno de los desafíos críticos fue lograr una sincronización precisa entre eventos de audio y gameplay:

  • Investigué inicialmente los sistemas de reloj de osu-framework y StepMania
  • Implementación final usando la sincronización nativa de Godot
  • Finalmente se redujo de varianza de sincronización de ~30ms a ~4ms

Integración MIDI

  • Estudié la especificación del formato MIDI
  • Finalmente se utlizó un conversor de MIDI a JSON como solución provisional

Proceso de Desarrollo

Mantuve prácticas profesionales de desarrollo:

  • Control de versiones Git
  • Implementé de tablero Trello con metodología Kanban
  • Integré de Discord para seguimiento automatizado
  • La documentación se actualizaba conforme se desarrollaba el proyecto

Logros

Logros Técnicos

  • Implementación exitosa de mecánicas de juego de ritmo
  • Sincronización precisa de audio
  • Sistema eficiente de gestión de notas
  • Arquitectura extensible para futuras iteraciones

Desarrollo Profesional

  • Gané experiencia en resolución de problemas
  • Mejoré mi capacidad de adaptación a cambios de requisitos
  • Gané experiencia en prototipado rápido
  • Mejoré en habilidades de documentación técnica
  • Mejoré mis técnicas de depuración y optimización

Futuras Iteraciones del Proyecto

Hay muchas funcionalidades que me gustaría implementar:

  • Implementación de un sistema personalizado para trabajar con MIDI
  • Mejorar el sistema de feedback visual
  • Integrar funcionalidades multijugador
  • Desarrollo del editor de niveles
  • Optimización de rendimiento
  • Implementación de mecánicas adicionales

Conclusión

Este proyecto, a pesar de sus desafíos, ha sido una experiencia significativa de aprendizaje. Ha mejorado no solo mis habilidades técnicas en desarrollo de juegos, sino también mi capacidad para tomar decisiones informadas sobre herramientas y arquitectura, gestionar proyectos complejos, adaptarme a circunstancias imprevistas y encontrar soluciones a desafíos técnicos.

El prototipo resultante, aunque no es el juego multijugador originalmente previsto, sirve como base sólida para desarrollo futuro y es una prueba de mi resiliencia al lograr crear algo a pesar de los contratiempos tan importantes que atravesó el proyecto.