Portada del TFG Multi Race Driving

Damas y caballeros, después de unos días de calma y tranquilidad, ¡volvemos a la carga! Continuando con la línea argumental del post del Out Run, hoy os traigo uno de logros más relevantes de mi vida hasta la fecha. El día 16 de diciembre del 2020, tuvo lugar la presentación de mi Trabajo de fin de grado, al que titulé como “Multi Race Driving: una plataforma general y personalizada para videojuegos de carreras en 2.5D.”

A lo largo de este artículo, os voy a comentar cómo surgió la idea de hacer este proyecto, las diferentes etapas por las que pasó, las piedras que me encontré en el camino, así como los momentos de agobio y felicidad que experimenté durante su elaboración. Finalmente, os contaré cómo fue el desenlace de esta suculenta aventura y qué es lo que sentí. ¡Preparaos que la cosa promete bastante!

GoldenEye: una propuesta de proyecto fallida

La historia de mi TFG comenzó en verano del 2019, cuando me vino a la cabeza hacer una especie de IA (Inteligencia Artificial) que fuese capaz de jugar bien al ajedrez. En principio, iba a tener varios modos de dificultad, y además, iba a poder ser totalmente configurable por los jugadores. De este modo, el programa podría proporcionar fantásticas experiencias de juego, tanto a jugadores novatos como a grandes maestros del momento.

La verdad sea dicha, fueron muchas las veces que me imagine a grandes jugadores como Magnus Carlsen, Shakhriyar Mamedyarov, Fabiano Caruana, Levon Aronian o Wesley So jugando contra ella. ¡Sí, lo sé! Soy todo un soñador, pero sin aspiraciones y pasiones no se llega ni a la vuelta de la esquina. Es más, digo yo que un poco de motivación nunca le viene mal a nadie ¿no?

Volviendo al tema principal, no tenía muy claro ni cuánto tiempo me iba a costar ni qué problemas me iban a surgir por el camino. Esos fueron los principales motivos por los que decidí “curarme en salud” y comenzarlo en aquellas fechas. Por aquel entonces, había terminado el tercer curso del grado y había visto ya la asignatura de Inteligencia Artificial, presente en el primer cuatrimestre del curso de acuerdo a las directrices del plan de estudios.

En esa materia, dentro del campo de la teoría de juegos, vi un algoritmo denominado “Minimax”. Este algoritmo es un método recursivo de decisión para minimizar la pérdida máxima esperada en juegos con adversario y con información perfecta. En otras palabras, el funcionamiento de “Minimax” puede resumirse en cómo elegir el mejor movimiento para ti mismo suponiendo que tu contrincante escogerá el peor para ti.

El programa lo comencé en verano. Lo desarrollé en el lenguaje de programación Java. Dentro del mundo de la implementación de videojuegos, Java no es un lenguaje que se use excesivamente demasiado. Así las cosas, lenguajes como C, C++ o C# están mucho más estandarizados en el sector. Sin embargo, ya los conocía bastante porque había hecho diversos proyectos caseros y muchos trabajos previos. Quería probar experiencias nuevas y me lancé a la aventura. ¡El conocimiento es importante!

Al final del verano tenía una aplicación sólida. Conseguí programar el funcionamiento de todas las piezas, y además, tenía gran parte de la interfaz diseñada. Le incorporé diversas opciones de configuración, incluso hice posible que pudieran jugar dos personas, pero no a través de red, sino por medio de la propia máquina. A dicho software lo bauticé como GoldenEye, en honor a la decimoséptima película de la saga de James Bond 007 que lleva ese mismo nombre. Estrenada en 1995, fue la primera de las cuatro cintas protagonizadas por Pierce Brosnan. Ya hablaremos en un futuro de este metraje que es bastante interesante.

Carátula de la película GoldenEye de 007 estrenada en 1995
Carátula de la película GoldenEye (1995)

Retomando el argumento principal, llegó el momento de comenzar el cuarto curso, la última fase del grado. Fue entonces, cuando comencé a tantear a diversos profesores, en vistas a plantearles la propuesta y ver qué las parecía como posible proyecto de TFG. Con un simple “sí” todo se solucionaría. Me iba a quitar un gran peso de encima porque gran parte del trabajo ya estaba hecho.

Terminal del motor de GoldenEye para jugar al ajedrez
Terminal de GoldenEye

Tras diversos debates internos, decidí a quien plantearle mi propuesta de TFG. Le eché valor, y fui con todo, a explicársela a mi profesor de Inteligencia Artificial. Desgraciadamente, ¡me caí con todo el equipo! Me comunicó que la idea estaba bastante bien, pero que no era nada novedosa, y además, que dudaba de si la complejidad era suficiente para presentarla en un proyecto de tal envergadura. Me dijo que no estaba interesado. ¡Primer golpe!

Lógicamente, me sentí un poco desconcertado y apesadumbrado, ya que le expuse la idea muy bien y yo creía que daba bastante “juego”, nunca mejor dicho. Había trabajado mucho creyendo que el proyecto iba a ver la luz, pero no fue así. No obstante, aún quedaba mucho tiempo para poder maniobrar, por lo que no había que poner el grito en el cielo.

Dejé el problema “reposar” un tiempo prudencial. Es más, aquí aprovecho para daros un consejo, que yo también me debería aplicar más a menudo. Las decisiones importantes hay que tomarlas con la cabeza fría. Si tomáis decisiones en caliente, disgustados o enfadados, es casi seguro que la vais a cagar. Luego vienen los arrepentimientos, y ahí, es cuando ya no se puede hacer nada. Así que lo dicho, “id despacito y con buena letra”.

Multi Race Driving: una propuesta de proyecto exitosa

El tema del TFG no lo volví a tocar hasta que terminé los exámenes del primer cuatrismestre, allá por febrero del 2020. Ahora era el momento de cursar la asignatura por la que me había metido al grado de Ingenería Informática, la materia de Videojuegos. Leyendo los objetivos de la asignatura pensé, que con un poco de suerte, podría hacer trabajos que fuesen parecidos, y así allanarme el camino tanto en el TFG como en la propia asignatura. No sabía lo que quería hacer, pero de lo que sí estaba seguro, era de que mi proyecto de fin de carrera iba a ser un videojuego.

Primeros pasos

Tras la presentación de la asignatura, comencé a darle vueltas a la cabeza sobre cuál podría ser la temática de los videojuegos que iba a hacer. Pensando, llegó a mi mente el videojuego del Out Run, y ahí lo vi claro. ¡Ese iba a ser mi proyecto de TFG! Paralelamente, pensé en el Super Hang-On como videojuego a presentar como trabajo de la asignatura. Así las cosas, ya tenía ambos videojuegos planteados. Ahora quedaba lo más difícil, que el plan se llevara a cabo.

Escogí como candidato principal a tutor de mi TFG al profesor de la asignatura de Videojuegos, ya que pude comprobar que era un erudito de la materia, como yo. De esta manera, al controlar los dos del tema, el flujo de comunicación tenía pinta de que iba a ser rápido, sencillo y claro. ¡Viento en popa a toda vela! Sin embargo, no podía exponerle la idea con las manos vacías. Había que presentar una pequeña base de cómo iba a ser el proyecto.

Me informé de cuáles eran las librerías más utilizadas para crear videojuegos a bajo nivel. Fue así como descubrí SFML, comentada en el post sobre el Out Run. ¿A que ya no os acordabais? Investigué como se configuraba con Codeblocks, el IDE (Integrated Development Environment) que usé para programar en C++, y monté un pequeño proyecto que permitía ejecutar un código de ejemplo con funcionalidades de la librería.

Así las cosas, el susodicho código sería utilizado, más adelante, para ir incorporando las nuevas funcionalidades. ¡Tenía el plan bien medido al milímetro! Para aquellos curiosos, os diré que las primeras líneas de código las metí el 17 de febrero de 2020. La documentación del proyecto figura aquí. En la pestaña de “commits”, podéis ver la fecha del primero que realice al repositorio en Github.

Un día después, 18 de febrero de 2020, mandé un correo para hablar a quien iba a ser mi futuro director de TFG. Cuando llegué a su despacho, le planteé mi propuesta de trabajo y el pequeño proyecto de prueba que había realizado. ¡Le encantó! Sin embargo, tampoco era suficiente trabajo para presentarlo como TFG. Había que extenderlo de alguna forma.

Finalmente, tras un intenso debate, se optó por hacer una plataforma, totalmente configurable, que permitiera jugar a videojuegos de carreras que tuvieran gráficos en 2.5D. Se tomaría como referencia las bases del Super Hang-On, y posteriormente, se utilizaría este modo de juego para construir otros cuatro más, que ya comentaremos más adelante. El Out Run, por su parte, se convirtió en el videojuego candidato como trabajo para la asignatura. ¡Menudo giro de 180 grados! El resto de la historia del Out Run ya la conocéis, pero aun así, os la dejo en este enlace. ¡No me digáis que no es fascinante la de vueltas que da la vida!

Aquí, me gustaría matizar que esta no fue la idea definitiva de Multi Race Driving, ya que al momento de realizar la propuesta del proyecto en abril, fijaos que todavía faltaba poca más de un mes, metimos nuevos cambios. Lo comentaré más adelante, pero me parecía oportuno arrojaros cierta luz sobre estos hechos.

La pandemia de la COVID19

Tras la confirmación de cómo iba a ser el plan a seguir, comencé a implementar poco a poco una pequeña versión del videojuego del Super Hang-On. En la reunión especificada anteriormente, recuerdo comentar algunos aspectos que podíamos variar con respecto de la entrega original, así como pulir pequeños detalles que iban surgiendo conforme iba programando. Haciendo un poco de memoria, para la segunda reunión le traje una primera demo que consistía en un escenario de prueba que el jugador podía libremente recorrer. Os muestro un pequeño fragmento de qué es lo que le enseñé. La calidad no es la mejor, ya que está grabado con el móvil. No lo he editado porque quería que vierais el vídeo original.

Demo de un pequeño nivel de prueba del Super Hang-On
Demo de un pequeño nivel de prueba del Super Hang-On

Como podéis fácilmente observar, aún quedaba mucho trabajo por hacer. Había que reescalar los sprites del mapa, hacer las animaciones de las colisiones, meter las motos rivales, mejorar los cambios de rasante, así como ajustar la velocidad de la moto para evitar ese “efecto de cinta” que aparece en algunos momentos, etcétera. Recuerdo que esos eran algunos cambios que, en un principio, deberían estar para la siguiente reunión, programada para el día 14 de marzo de 2020. Lamentablemente, esta reunión jamás llegó a efectuarse presencialmente.

El SARS-CoV-2 había empezado a ocasionar estragos por toda Europa. Lejos quedaban ya las primeras noticias que se escuchaban acerca de los casos de coronavirus que habían empezado a ocurrir en la ciudad de Wuhan (China), allá por diciembre de 2019. La COVID-19 comenzó a extenderse por la UE vertiginosamente. Finalmente, el 11 de marzo de 2020, se decretó en España el estado de alarma y comenzó la fase del confinamiento. ¡Tiempos oscuros nos iba a tocar vivir!

Este fue el segundo gran golpe que sufrí. De repente, estaba yo solo. Podía hablar con familiares y amigos, pero a distancia. La gente que me conoce sabe que a mí la comunicación telemática no me gusta, ya que no capta la esencia de las personas. Tenía que hablar con mi tutor por videollamada, lo cual era horrible porque era todo muy artificial, y además, había ocasiones en las que era bastante difícil ponernos de acuerdo. Paralelamente, hay que sumar la carga de trabajo de las otras asignaturas, que no eran moco de pavo en absoluto: Robótica, Visión por computador y Videojuegos.

En este contexto, un matiz que me frustró mucho fue que ninguno de mis compañeros de la asignatura de Robótica se quiso llevar el robot. Me tuve que sacrificar por el equipo, tragar orgullo y llevármelo a mi casa. Todavía recuerdo con claridad las prácticas y el trabajo de la asignatura. Había que montar laberintos para que el androide los fuera recorriendo hasta encontrar la salida.

Como paredes del laberinto usaba películas. Soy bastante cinéfilo y tengo cajas de DVD’s para aburrir. El robot no hacía otra cosa que tirar todo, y yo venga a recolocar. ¡Qué trasto más torpe! Los compañeros reprogramaban el código desde su casa, yo lo pasaba a la Raspberry Pi del androide y lo ejecutaba esperando con éxito que funcionara, pero volvía a chocarse y a dejarlo todo como una pena. ¡Menudo cabrón! La verdad sea dicha, fueron unos meses muy malos. Sin embargo, hubo también momentos de risas. Así que, en líneas generales, tengo un “buen recuerdo” de esa etapa.

Sé que me estoy desvirtuando un poco del tema principal, pero me parece bastante interesante comentar estos sentimientos porque yo creo que nunca había tocado estas experiencias con nadie. Fue una época bastante peliaguda para todos, y el hecho de que no pudiéramos salir a la calle a que nos diera el fresco crispaba todavía más los ambientes. Había días que se me hacía muy cuesta arriba avanzar.

Durante el mes de marzo no avancé relativamente demasiado con el TFG porque había mucha carga de trabajo con las otras tres asignaturas. Entre el robot y el Out Run solía acabar bastante agotado, y no me quedaban ganas para ponerme a continuar con Multi Race Driving. Pese a que no avanzaba a pasos agigantados con él, sí que me iba reuniendo con el tutor para discutir propiedades estéticas de la interfaz, posibles aspectos de configuración como los menús, los tipos de coche, los escenarios, etcétera.

Tuve algunas peloteras con el tutor, fruto de la diversidad de opiniones. Las discusiones estaban ligadas sobre todo con los colores, fuente y apariencia estética de los menús de la plataforma. Una de las que recuerdo bastante bien fue cuando acordamos meter distintos tipos de coches y un menú para que el jugador pudiera elegir el que más le gustara. Al presentarle la susodicha funcionalidad me puso tibio: “que si este color no pega, que si la letra no la entiendo, que si los sprites de los coches no deberían girar, que si no tenía gusto ninguno”, etcétera. Yendo tan estresado como iba, ¡eso era lo que me faltaba ya por oír!

A contrarreloj

Finalmente, llegó el mes de abril, y tras la semana santa, las asignaturas de Visión por computador y Robótica llegaron a su fin como aquel que dice. Eran Videojuegos y el TFG las únicas piezas sobre el tablero. Llegó el momento de dar un paso importante en el proceso de desarrollo de Multi Race Driving, la realización de la propuesta del TFG, que fue entregada el 11 de abril.

En dicha propuesta se perfiló que se iba a realizar una arquitectura que permitiera incorporar múltiples videojuegos retro de conducción arcade con gráficos en 2.5D, los cuales, podrían ser totalmente customizables. Además, como incentivo adicional se decidió plantear un modo de juego multijugador en red. Así las cosas, Multi Race Driving pasó de ser una versión nueva del Super Hang-On con ciertas mejoras, a un motor gráfico implementado a bajo nivel que permitía jugar a diversos videojuegos de carreras (se crearon cinco) para un solo jugador. Y adicionalmente, se incorporaría un modo multijugador que permitiría a los jugadores echar partidas a algunos de esas modalidades en comunidad. Como ya os había adelantado antes, fue un cambio radical.

La elaboración de los modos de juego para un solo jugador fue un proceso muy duro, ya que había mucho trabajo que hacer y muy poco tiempo. A continuación, os voy a explicar cuáles fueron las modalidades de juego que el tutor y yo acordamos incorporar en Multi Race Driving:

  • World Tour: es un modo de juego en el que el jugador se enfrenta a otros siete rivales en carreras por todo el mundo esquivando al tráfico circundante. Para poder promocionar a la siguiente carrera se debe llegar a la meta antes de que se acabe el tiempo de juego y en primera posición. A lo largo del trayecto hay distintos puntos de control que el jugador debe ir cruzando para incrementar el tiempo de juego. Si se agota el tiempo de juego el jugador es descalificado. Esta modalidad se inspiró en el videojuego retro Super Hang-On para la Sega Megadrive de 1989.
Fotograma del Super Hang-On para la Sega Megadrive de 1989
Fotograma del Super Hang-On para la Sega Megadrive (1989)
  • Out Run: es una modalidad de juego en la que el jugador debe recorrer cinco escenarios y llegar a la meta antes de que se acabe el tiempo de juego, y con la mayor puntuación posible. Al final de los cuatro primeros escenarios hay una bifurcación por la que el jugador puede optar ir a izquierda o a derecha. La dirección que tome determina el siguiente escenario por el que correr. Cada vez que se pasa por una bifurcación se incrementa el tiempo de juego. Si se agota el tiempo de juego, el jugador es eliminado y se pierde la partida. Cuanto más rápido se circula, más puntos se consiguen. Este modo se basó en el videojuego retro llamado Out Run para la máquina arcade de 1986.
Fotograma del Out Run para la máquina recreativa (1986)
Fotograma del Out Run para la máquina recreativa (1986)
  • Pole Position: en este modo de juego el jugador debe competir en solitario o contra diversos rivales dando vueltas a un circuito e intentar llegar a meta en primera posición antes de agotarse el tiempo de juego. En esta modalidad de juego, tanto el circuito donde competir, como el número de vueltas que dar y los rivales contra los que correr son seleccionados previamente por el jugador. En el circuito hay distintos puntos de control que el jugador debe ir cruzando para incrementar el tiempo de juego. Si llega a la meta pero no en primera posición, se le solicita si desea repetir la carrera. Si se agota el tiempo de juego el jugador es descalificado. Esta modalidad se ha inspirado en el modo de juego retro Pole Position 2 (1983), lanzado por Namco para la consola Atari.
Fotograma del Out Run para Atari (1983)
Fotograma del Pole Position 2 para Atari (1983)
  • Driving Fury: en esta modalidad el jugador dispone de un tiempo de juego para perseguir a un vehículo criminal y colisionar contra él, hasta que el nivel de salud baje a cero para arrestarlo, antes de completar cinco escenarios. Al final de los cuatro primeros escenarios del recorrido hay una bifurcación por la que el jugador puede optar ir libremente a izquierda o a derecha. La dirección que tome el jugador en la bifurcación determina el siguiente escenario por el que correr. Al pasar por cada bifurcación se incrementa el tiempo de juego. En caso de arrestar al criminal (bajarle el nivel de salud a cero), el jugador promociona al siguiente nivel y debe perseguir a un criminal distinto. Si se agota el tiempo de juego el jugador pierde la partida. Como referencia para este modo se tomó el videojuego retro Chase HQ (1988), creado por Taito, para la máquina recreativa.
Fotograma del Chase HQ para la máquina recreativa (1988)
Fotograma del Chase HQ para la máquina recreativa (1988)
  • Demarrage: en este modo el jugador dispone de un tiempo de juego para perseguir a un vehículo rival, adelantarlo, y ponerse por delante de él una distancia de 400 metros, antes de completar cinco escenarios. Al final de los cuatro primeros escenarios del recorrido hay una bifurcación por la que el jugador puede optar ir libremente a izquierda o a derecha. La dirección que tome el jugador en la bifurcación determina el siguiente escenario por el que correr. Al pasar por cada bifurcación se incrementa el tiempo de juego. Si se logra el objetivo, el jugador promociona al siguiente nivel y se enfrenta a un rival distinto. Si se agota el tiempo de juego el jugador pierde la partida. Dicho modo de juego se inspiró en una submodalidad de conducción del juego Need For Speed Undercover, lanzado para PS2 en 2008.
Fotograma del Need for speed Undercover (modo Demarrage) para PS2 (2008)
Fotograma del Need for speed Undercover (modo Demarrage) para PS2 (2008)

Ante la incipiente cantidad de trabajo, hubo que meter el turbo y poner “pies en polvorosa” porque el tiempo, en cualquier momento, se me podía echar encima. Lamentablemente, ¡así fue! La fecha de depósito salió el 28 de junio y la de la presentación salió el 7 de julio. Teniendo en cuenta todo lo que había en juego sobre la mesa, había que ponerse las pilas. La convocatoria estaba muy cerca. ¡Tocaba correr!

Realicé una segunda versión de la interfaz. Me lo curré muchísimo porque quería evitar que el tutor me echara para atrás, ya que en caso de que no le gustara tendría que recular bastante, y no podría dedicar tiempo a otros requisitos funcionales como el modo multijugador. Diseñé un sistema de configuración mediante ficheros en XML (Extensible Markup Language). Así las cosas, se podían configurar los menús de la GUI (Graphical User Interface), los escenarios de los modos de juego, los tipos de vehículos, así como las opciones básicas del modo multijugador.

Confeccioné cuatro escenarios distintos para el World Tour. Hice otros cuatro mapas para el Pole Position, y para el resto de modos de juego hice quince mapas compartidos, es decir, los modos Out Run, Driving Fury y Demarrage compartían escenarios. La razón de esta decisión, que tomé en solitario, estribaba en que hacer mapas costaba muchísimo tiempo. Había que definir los fondos, la gama de colores, el relieve del circuito, y por último y no menos importante, rellenarlo con los distintos sprites. En definitiva, era una tarea simple y mecánica, pero muy tediosa.

El siguiente paso fue meter cuatro tipos de coche: una moto, un deportivo, un todoterreno y un camión, para posteriormente, diseñar el menú de selección de vehículos que permitiría al jugador seleccionar el que más le gustara. Como podéis ver, invertí mucho tiempo en meter “pijadas” a la plataforma y no me pude centrar en lo realmente importante.

A medida que pasaban los días, me iba aumentando el miedo y la inquietud porque no me podía reunir con el tutor. No podía validar el trabajo que estaba haciendo, y las labores realmente importantes seguían incompletas (ni los modos de juego ni el multijugador estaban hechos). Las fechas se acercaban, la tensión se me disparaba, y francamente, empezaba a ser consciente de que no llegaba. ¡Era un manojo de nervios!

Dibujo animado muy enfadado

Por suerte, me pude poner en contacto con el tutor, y conseguí concretar una reunión para el día 22 de junio, una semana antes del día de depósito. Recuerdo aquel día como si lo estuviera viendo ahora, estaba súper nervioso. Sabía que, seguramente, no me iba a dar tiempo porque quedaba mucho por hacer. Todo dependía del visto bueno del tutor a lo que había hecho. Si decía que sí, aún había una oportunidad remota de llegar a tiempo. Si decía que no, ¡ya estaba sentenciado!

Tristemente, ocurrió lo segundo, pero a lo bestia. ¡Tuve que cambiar todo! La estética de los menús no le gustó, y además, quería que los modos de juego Driving Fury, Out Run y Demarrage tuvieran sus propios niveles. En resumen, no solo no llegué a la fecha, sino que encima tuve que rehacer gran parte del trabajo. ¡Otro golpe al canto! Vaya con el “proyectito” de fin de grado. Es una pena que no conserve capturas de aquellos menús. La cuenta de la universidad se me ha borrado, y ahí estaba gran parte de este material.

Estaba súper enfadado, hasta el punto que quise renunciar y dejarlo porque de verdad que parecía que no había salida. ¡Estaba muy agobiado! Este hecho, unido a que todos mis amigos presentaron, en tiempo y forma, me desmotivó enormemente. Así las cosas, mientras ellos tenían su título y el verano entero para descansar, yo estaba “en el fango”, sin título, con una cantidad de trabajo descomunal, y encima sin poder hablar con nadie.

En verdad, sí que podía hablar con la gente, pero sabía que si lo hacía me iban a tratar con condescendencia, con empatía y con compasión. No hay cosa que me dé más asco que el hecho de que otros sientan pena por mí. ¡Me repatea! Así que yo, siguiendo “en mis trece”, me comí el marrón yo solo y en silencio. ¡No menté palabra! Me tomé dos días de descanso, me relajé, saqué pecho y volví a la carga. ¡Había que luchar y darlo todo!

Felices meses de verano

Tras esta pequeña etapa de crisis, me puse manos a la obra. Seguí las directrices del tutor al pie de la letra. Rehíce los menús de la interfaz, mejoré el sistema de lectura de ficheros y diseñé el resto de los mapas. Para que os hagáis una idea, diseñé un total de 53 escenarios: cuatro del Wolrd Tour, cuatro para el Pole Position, quince para el Out Run, quince para el Driving Fury y otros quince para el Demarrage. ¡Menuda matada macho!

Además, hice un sistema de cargado de ficheros basado en el patrón de diseño Master-Worker. Básicamente, es una metodología, mediante la cual, un proceso principal (el master) coordinaba a un conjunto de subprocesos hijos (los workers), los cuales, cada uno por separado y de modo concurrente, cargaba un escenario. La razón de por qué usé este patrón de diseño radica en que así, la plataforma es mucho más rápida a la hora de procesar toda la información, ya que la carga de trabajo está mucho más repartida.

Esquema del patrón de diseño Master-Worker para la carga de escenarios
Esquema del patrón de diseño Master-Worker para la carga de escenarios

Tras concluir toda esta fase de cambios, volví a programar otra reunión con el tutor para enseñarle los avances. ¡Esta vez sí que le gustaron! Ya me podía centrar tanto en los modos de juego como en el multijugador. Parecía que poco a poco llegaba a Roma. A continuación, os muestro unas capturas de algunos de los menús que componen la interfaz de Multi Race Driving.

Antes de comenzar con el desarrollo de los modos de juego y con el modo multijugador, diseñé el logotipo de la plataforma, así como las pantallas de créditos. Eran tareas muy simples que hacían que la arquitectura quedara mucho mejor presentada. Además, decidí hacerlo con tiempo, por si acaso en el momento de la entrega pudiera tener algún problema legal con el material utilizado (imágenes de fondos, efectos de sonido, licencia, bandas sonoras, sprites). Por si alguno se lo está preguntando… ¡no tuve ningún problema! Así las cosas, esa vertiente también quedó bien cubierta.

Tras concluir con los puntos anteriores, me puse con el modo de juego del Out Run. Realmente, fue un modo de juego bastante simple de incorporar, puesto que ya habíamos hecho una versión propia para la asignatura de Videojuegos. El modo de juego del Out Run para Multi Race Driving lo terminé aproximadamente el 5 de julio. Es más, aprovecho para recordar que la primera versión de mi Out Run la había finalizado aproximadamente dos meses atrás. Por tanto, fue muy fácil incorporarlo al TFG. ¡Me encanta como se entrelazan ambas historias! Ahora podéis entender bien cuando os decía en el post anterior que ambos relatos eran muy intrínsecos.

Fotograma del modo de juego Out Run para Multi Race Driving
Fotograma del modo de juego Out Run para Multi Race Driving

El siguiente paso fue añadir el modo de juego del World Tour. Esta modalidad también fue bastante simple de incorporar, puesto que solamente contaba con cuatro escenarios. Fue necesario realizar las animaciones de comienzo y fin de carrera, así como las transiciones entre unos niveles y otros. Este modo de juego contenía tanto rivales como tráfico. Para simplificar las pruebas, se realizó una primera versión solo con los coches del tráfico, y más adelante, se terminó de programar la IA de los contrincantes. En la siguiente captura se pueden ver ambos tipos de coches, pero el diseño fue particionado.

Fotograma del modo de juego World Tour para Multi Race Driving
Fotograma del modo de juego World Tour para Multi Race Driving

El siguiente modelo a diseñar fue el Pole Position. Este juego sí que fue bastante complicado de realizar por varias razones. En primer lugar, tuve que hacer un menú que permitiera al jugador seleccionar el circuito en el que correr, cuántas vueltas dar y contra cuántos rivales competir. Seguidamente, tuve que hacer las animaciones de salida, así como las transiciones entre las distintas vueltas.

Finalmente, incorporé coches de fórmula 1 al motor gráfico. Así las cosas, los vehículos jugables eran una moto, un deportivo, un todoterreno, un camión y un coche de fórmula 1. ¡Casi nada! Aprovecho para puntualizar que todavía quedaba otro coche por añadir, un policía, pero ya hablaremos más adelante sobre él.

Fotograma del modo de juego Pole Position para Multi Race Driving
Fotograma del modo de juego Pole Position para Multi Race Driving

En definitiva, fue un proceso que se extendió alrededor de cinco días, ya no lo recuerdo muy bien. No obstante, quedó incompleto porque aún faltaba implementar la IA de los rivales, la cual, iba a ser idéntica a la del World Tour.

En relación a lo anterior, el siguiente paso fue, precisamente, programar la IA de los contricantes tanto en el modo World Tour como en el Pole Position. Esta parte fue más difícil de probar que de programar, principalmente porque regular la dificultad y comportamiento de una IA es algo tanto complejo como tedioso. En este sentido, toda esta cantidad de cosas, incluida la implementación de la IA, se terminaron para el día 24 de julio. Teniendo en cuenta que el día 7 fueron las presentaciones de la primera convocatoria… ¡no estaba nada mal! Me acuerdo con total nitidez de ese momento porque al día siguiente me fui de vacaciones a Peñiscola. ¡La cosa empezaba a ponerse interesante!

Durante las vacaciones me dediqué a añadir diversos detalles estéticos a los modos de juego. Para cada uno de los vehículos jugables, hice una paleta de ocho colores distintos para que el jugador pudiera elegir el que más quisiera. Además, hasta ese momento los vehículos rivales eran clones del coche seleccionado por el jugador. Sin embargo, tras incorporar las paletas de colores, fueron reemplazados por estas. Por consiguiente, se consiguió una mayor visibilidad estética. A continuación, os muestro algunos ejemplos de sprite sheets que diseñé.

Por último, y no menos importante, programé un menú que permitiría al jugador seleccionar de entre todos los bólidos disponibles, tanto el tipo como el color que más le gustase. Fue uno de los menús que más me costó hacer, puesto que había que controlar con todo detalle que tipo de información se iba a mostrar y en qué posiciones. Además, encontrar una fórmula de menú que se adecuará al estilo de conducción arcade retro propia de los modos de juego creados no fue una tarea fácil.

Menú de selección de coches en Multi Race Driving
Menú de selección de coches en Multi Race Driving

Fue con la creación de este menú, cuando añadí el coche de la policía que he comentado brevemente antes. Tras concluir las vacaciones, estuve como, de tres a cinco días, probando y verificando que todo funcionaba sin errores. Al haber avanzado tanto, programé otra reunión con el tutor para chequear que todo le parecía bien y que ambos estábamos satisfechos. La reunión tuvo lugar el día 5 de agosto, y por suerte, el tutor estaba muy contento con los avances. De hecho, se quedó muy sorprendido porque no se lo esperaba. ¡Al fin, el trabajo salía!

El siguiente paso fue el diseño e implementación tanto del modo de juego Driving Fury como del Demarrage. Los hice al unísono porque eran bastante parecidos, con la diferencia de que en uno tenías que golpear al rival hasta destruirlo y en el otro adelantarlo una cierta distancia. Tardé, relativamente, muy poco en desarrollar ambos tipos de juego. Fueron más agobiantes las pruebas por todas las variables que había que tener en cuenta.

Fotograma del modo de juego Driving Fury para Multi Race Driving
Fotograma del modo de juego Driving Fury para Multi Race Driving

En lo referente al Driving Fury, lo que más costó fue mostrar los indicadores del rival, como por ejemplo la flechita amarilla que se visualiza en la imagen, así como la barrita de salud del bólido o el fuego cuando le empezaba a quedar muy poca vida. Fue un proceso bastante complicado, pero como ya de todos es sabido: ¡de todo se sale!

Fotograma del modo de juego Demarrage para Multi Race Driving
Fotograma del modo de juego Demarrage para Multi Race Driving

Tras probar todos los modos de juego al dedillo, ya tenía todas las modalidades para un solor jugador integradas y funcionando. Siendo sincero, ¡no me lo podía creer! Tuve otra charla con el tutor para que viera como habían quedado. Le mandé incluso vídeos, los cuales, he estado buscando sin éxito. ¡Menuda pena que se hayan perdido! Aunque al tutor le parecieron bien las modalidades, me hizo hacer un cambio muy reseñable respecto a ellos que me parece interesante comentar.

En vistas a conservar parcialmente el espíritu de los videojuegos de conducción arcade en los que se inspiraron estas modalidades, como es el caso del Super Hang-On o del Pole Position 2, me dijo que cada uno de estos modos tuviera como vehículo por defecto el original de estos juegos. Así las cosas, los modos de juego World Tour y Pole Position se pueden jugar de tres maneras distintas, que son las siguientes:

  • Classic mode: en esta submodalidad los rivales conducen el tipo de vehículo propio del videojuego original en el que el World Tour o el Pole Position están inspirados. Si se juega al World Tour, dado que está basado en el juego Super Hang-On, y que en dicho videojuego es la moto el único vehículo jugable, todos los rivales conducen motos. En cambio, si se juega al Pole Position, como está basado en el juego Pole Position 2, todos los rivales conducen coches de fórmula 1.
  • User mode: en esta submodalidad los coches conducidos por los competidores son del mismo tipo que el vehículo escogido por el jugador.
  • Random mode: en esta modalidad el tipo de vehículo que conducen los oponentes es totalmente aleatorio, por lo que los bólidos son de distintos tipos.

Para poder hacer esta funcionalidad operativa, se diseñó un menú adicional que le permitiera al jugador realizar los ajustes pertinentes. Dicho menú, obviamente, solo aparece cuando se juega al World Tour o al Pole Position. Fue un cambio muy simple, pero que le dio un alto aporte de extensión a la plataforma. ¡Fijaos la cantidad de cosas que se pueden configurar!

Menú de configuración de tipo de rivales en Multi Race Driving
Menú de configuración de tipo de rivales en Multi Race Driving

Un gran abismo en el camino

Llegados a este punto, todas las modalidades de juego para un solo jugador ya estaban completadas y probadas. Ahora quedaba la parte más difícil del trabajo, el modo multijugador en red. ¡Agarraos que vienen curvas de las buenas!

Dado que era un tema bastante importante, antes de lanzarme a la piscina y empezar a desarrollar, pacté una nueva reunión con el tutor para planificar cómo lo íbamos a hacer. Recuerdo a la perfección esa reunión, debido a que tuvimos una tensa discusión. El tutor quería que el modo multijugador estuviera disponible para todos los modos de juego que había desarrollado, mientras que yo sostenía que si hacíamos eso, el espíritu de conducción arcade de modalidades como el Out Run o el Driving Fury desaparecían. Por consiguiente, me opuse a ese planteamiento.

Tras un largo debate, se acordó que solamente se iba a aplicar el modo multijugador tanto al Wolrd Tour como al Pole Position. De esta manera, teniendo clara la metodología, comencé con el desarrollo. ¡A tope!

El primer paso fue encontrar un servicio de cloud computing que me permitiera tener un servidor donde poder alojar el sistema de control del modo multijugador. En honor a la verdad, no me llevó mucho tiempo, ya que le pedí ayuda a un buen amigo que conocí en la carrera, el cual, está muy familiarizado en el trabajo con estas tecnologías. Escogí AWS (Amazon Web Services) como plataforma de alojamiento, ya que las características que poseían los packs gratuitos se ajustaban muy bien a mis necesidades. ¡Primer paso completado!

Tras tener totalmente configurado el servidor, que estaba en el norte de Virginia (EEUU), el siguiente paso fue determinar cómo iba a funcionar el protocolo de comunicación. Tras mucho pensar, decidí utilizar un tipo de comunicación basada en Linda.

Linda es un sistema de coordinación muy útil en los sistemas distribuidos. Fue diseñado por David Gelernter en 1985. El funcionamiento se basa en la existencia de un espacio lógico de memoria compartida (espacio de tuplas), usado por los procesos para comunicarse. Los procesos se comunican dejando tuplas en el espacio, consultando la existencia de tuplas en el espacio o retirando de forma selectiva tuplas del espacio.

Las tuplas son definidas como listas de datos planas. Permiten representar secuencias de valores concretos como por ejemplo [“Juan”,”45″,”34″,”88″], y al mismo tiempo patrones, es decir, tuplas en las que pueden aparecer variables. El espacio de tuplas detecta las tuplas pedidas por los procesos recurriendo al uso de un algoritmo de pattern matching o búsqueda de patrones.

El algoritmo compara la dimensión de la tupla pedida con cada una de las tuplas del espacio. Si son iguales en tamaño, se comparan las componentes que tomen valores concretos para determinar la coincidencia. Aquellas componentes que codifican patrones son ignoradas. De este modo, se chequean la dimensión y componentes fijas de las tuplas, y las que son variables, se sustituyen.

Esquema de funcionamiento de Linda
Esquema de funcionamiento de Linda

La utilización del framework Linda como mecanismo de sincronización y comunicación en el modo multijugador fue una decisión fácil de tomar. Sin embargo, no tenía muy claro, si programar una versión de cero para Multi Race Driving o recurrir a una implementación externa. Tras un minucioso análisis de los pros y los contras de ambos puntos de vista, decidí proseguir por el segundo camino.

Existían diversas versiones candidatas a emplear, siendo Boreas, la finalmente seleccionada. La principal razón por la que usé esta implementación fue que yo, el autor de Multi Race Driving , también fui uno de los desarrolladores que participó en la creación de este software. Por si tenéis curiosidad, el material relativo a la aplicación de Boreas lo podéis encontrar aquí.

En este sentido, aspectos como la arquitectura central del sistema, el almacenamiento interno de la información o la gestión de la concurrencia eran ya conocidos. Aparte, el almacenamiento de los datos es distribuido y está muy optimizado ya que toda la información se guarda en memoria, por lo que la lectura y escritura de las tuplas es muy rápida. Por último, Boreas es un sistema muy robusto y eficiente, pues fueron muchas las pruebas a las que se sometió para poder garantizarlo.

Una de ellas fue, haciendo uso de un algoritmo de fuerza bruta, cargar el espacio de tuplas con el fin de acotar superiormente el límite de almacenamiento del sistema. Los resultados de esta prueba fueron muy alentadores, ya que la experiencia duró 2h y 15 minutos, y fue capaz de guardar un total de 30.000.000 de tuplas aproximadamente. ¡Cifras estratosféricas! Es más, de ahí viene el nombre, ya que Boreas en griego significa “devorador”. En definitiva, utilicé dentro de mi TFG un trabajo personal de otro asignatura. ¡Eso de cara al tribunal fue un auténtico puntazo!

Tras tener operativo el software de Boreas en el servidor externo, activé el servicio de logging para poder tener un control perfecto de toda la actividad que se registraba: peticiones recibidas, información enviada, tiempos de cómputo, así como posibles errores en el funcionamiento de la aplicación. Ahora llegaba la parte interesante, ¡la elaboración del modo multijugador!

El diseño del modo multijugador consistió en dos partes: la formación de grupos y el transcurso de partida. De hecho, ese fue el orden cronológico que seguí para abordar el problema. La verdad es que no lo recuerdo con exactitud, pero diría que empecé con el modo multijugador, más o menos, en torno al 11 de agosto. ¡En un mes ya estaba la segunda convocatoria! Siendo más precisos, el 26 de septiembre era la fecha de depósito y el 20 de octubre la fecha de la presentación. Quedaos con estas fechas que son bastante claves para los hechos que vienen en un futuro.

La formación de los equipos fue bastante tediosa, pero no excesivamente complicada. Fue necesario diseñar diversos menús para monitorizar la asignación de nicknames a los jugadores, así como la coordinación de selección de vehículos o de modo de juego. En realidad, fue más una cuestión de burocracia que otra cosa. A continuación, os pongo unas capturas de los distintos menús de la formación de grupos y selección de modalidades de juego del modo multijugador.

La formación de grupos está inspirada en otros videojuegos como el Mario Kart. Dicha gestión se realiza por medio de salas. Los jugadores se identifican por un alias, y posteriormente, pueden crear o unirse a una sala que tiene como máximo hasta cuatro jugadores. Como podéis observar, la naturaleza del procedimiento era bastante simple. La elaboración de todo este tinglado se postergó en torno a dos semanas. El día 2 de septiembre, creo que fue por ahí, toda esta parte ya estaba perfectamente testada. A priori, parecía que iba a ir todo bien. Sin embargo, pronto los problemas comenzaron a acechar.

Cuando me adentré en el diseño del transcurso de la partida, que consistía en monitorizar continuamente las posiciones de los distintos jugadores, de tal manera que cada participante mandaba su posición y recibía la de los demás, caí en la cuenta de un detalle crucial: ¡era excesivamente lento! No me malinterpretéis, teniendo el servidor al otro lado del Atlántico sabía que generaba latencia, lo que no sabía es que había tanta: en torno a los 100 ms. ¡Jugar a eso era infumable!

Madre mía que angustia pasé. Recuerdo que tuve pensamientos del palo: “¿ahora qué hago?”, “¿qué le digo al tutor?”, “no puedo dejarlo sin hacer porque está en la propuesta”, etcétera. ¡Mal, mal, muy mal! Tras meditarlo concienzudamente, hice una pequeña “ñapa burocrática” que consistió en hacer un test de velocidad a los jugadores antes de que jugarán. De esta forma, antes de introducir los nicknames y entrar en la fase de grupos, ya sabían en qué condiciones iban a jugar. La verdad es que como plan de emergencia no está nada mal, y no me llevó más de un día incorporar esta funcionalidad.

La selección de vehículos tampoco fue excesivamente difícil de realizar. Sencillamente, porque era el mismo menú de vehículos propio de los modos de un solo jugador, con la diferencia de que había que incorporar el código que hacía posible la comunicación entre los jugadores. Damas y caballeros, ahora llega la parte dura: ¡la carrera!

Esta fue sin duda alguna la parte más enrevesada. Lo pasé bastante mal porque eran muchas variables a tener en cuenta. Tenía que probar la plataforma en todos sus aspectos, puesto que no podía fallar nada. ¡El día de la presentación tenía que ser perfecto! En otros términos, todo el tiempo que se invirtiese en probar y depurar era poco. Aún recuerdo cuando probaba una carrera con cuatro instancias de Multi Race Driving abiertas (una por jugador) y movía los vehículos de todos ellos como podía. ¡Qué recuerdos más nostálgicos!

No paraba de realizar pruebas. ¡Venga a probar y venga a probar! Cuantas más pruebas hacía, más errores encontraba y más nervioso me ponía. Recuerdo que, en ocasiones, sucedía un error que hacía que se colgara todo, y lo peor de todo, es que no había forma humana de saber por qué. Finalmente, vi la raíz del problema. Era una condición de carrera bastante complicada de detectar. ¡Menos mal! ¿Os imagináis la plataforma petando en mitad de la presentación? ¡Yo sí! Solo de pensarlo me entraban taquicardias. ¡Fijaos si hice pruebas que hasta lo jugué en la TV!

Multi Race Driving probado en pantalla grande (TV)
Multi Race Driving probado en “pantalla grande”

Oficialmente, terminé todas las pruebas el día 20 de septiembre, seis días antes de la fecha de depósito. Ahora quedaba la última pieza del puzle: ¡la memoria! Multi Race Driving estaba ya completado. Quedaba por plasmar en un documento todo el trabajo realizado en siete meses, y después, reunirme con el tutor y que me diera el visto bueno. ¡Había que ir a fuego!

Recuerdo levantarme todos los días a las 8:00 de la mañana. Es más, lo recuerdo porque yo y la puntualidad no somos buenos amigos. Que llegue pronto es tan frecuente como ver al cometa Halley, ocurre una vez cada 76 años. Había veces que no sabía expresar bien lo que quería poner, por lo que tenía que borrar los párrafos y volverlos a empezar de nuevo. También ocurría que le daba a la misma idea mil vueltas, y me atascaba tontamente. En resumen, ¡tuve que hacer frente a bastantes trasiegos!

Una estocada estratégica

Finalmente, llegó el 24 de septiembre, día en el que me volví a reunir con el tutor para enseñarle la memoria. Ese día era o todo o nada, ya que según la cantidad de cosas que tuviera que cambiar no llegaba. Pensaba que estaba casi todo bien. ¡Menudo iluso! Prácticamente, tuve que retocar todos los apartados, hasta el punto que algunos los tuve que rehacer enteros porque no le gustaron.

La noche del día 24 al 25, que por cierto, es mi cumpleaños, no dormí nada. Me tiré toda la noche trabajando. Deseaba quitármelo de encima y quedarme libre. El 25 de septiembre del 2020 ha sido el cumpleaños más negro de mi vida. Ese día parecía que no tenía 24 horas, el tiempo pasaba súper rápido, y la privación de sueño me hacía cada vez más efecto. Multi Race Driving, más que un TFG, era una tortura china.

Finalmente, llegó el día 26 de septiembre. Me volví a reunir con el tutor para ver que todo estaba correcto. Lamentablemente, no fue así. Me dijo que había que cambiar cosas, no muchas, pero que había que modificarlas. Así las cosas, no me permitió entregarlo esa convocatoria tampoco. ¡Madre mía! Me sentí fatal. Todo el trabajo y el sobreesfuerzo humano que había hecho no me sirvieron. ¡Qué pena más grande tenía! Llegados a este punto, matizo algo importante, la hora límite para mandarlo era las 00:00. No obstante, tenía que ser con consentimiento del tutor, que era precisamente lo que no tenía. Y por supuesto, no lo iba a mandar a sus espaldas. ¡Hay que ser sinceros y honrados!

Parecía que el final no llegaba nunca. Se me atascaba la obtención del título. Estaba a las puertas de la gloria, pero no podía alcanzarla. ¡Muy frustrante! Descansé dos o tres días, ya no lo recuerdo, y retomé la faena. Volví a probar toda la plataforma, de arriba a abajo, y corregí todo lo que me dijo el tutor. El día 7 de octubre me volví a juntar con él. Todo estaba por fin en orden. ¡Fijaos por qué poco!

Las semanas siguientes estuve haciendo la presentación que iba a efectuar el día de la exposición. Además, hice un tráiler del trabajo para que quedara mucho más profesional todo el material entregado. La verdad es que si lo pienso detenidamente, el hecho de no llegar a esa convocatoria me permitió perfeccionarlo muchísimo, ya que tenía tiempo para ultimar todos los detalles, factor que más adelante me fue recompensado. Aprovecho para dejaros por aquí, tanto el vídeo en cuestión como el enlace al repositorio de Zaguan de la Universidad de Zaragoza, donde se encuentra la memoria del trabajo. ¡Espero que los disfrutéis!

La llegada del ansiado triunfo

Tras concluir el trabajo, y dejar todo zanjado para presentar, transcurrieron los días hasta que la convocatoria fue anunciada. El día 16 de noviembre se anunció la fecha para depositar, y un mes después, el 16 de diciembre sería la exposición. Cuando llegó el día de enviar el proyecto, lo revisé una docena de veces en busca de fallos. ¡Todo tenía que salir bien! Me quería ir por todo lo grande. Entregué todo el material y me acuerdo que pensé: “la suerte está echada”.

Tranquilos, ya llegamos al final. Por fin llegó el día de la presentación. Estaba muy nervioso, pero mi intuición me decía que todo me iba a salir bien. Mi tutor no pudo asistir a la exposición porque tenía clase. ¡Manda cojones! Me tocó enfrentarme al tribunal en solitario. El único hecho que me dejó con un sabor agridulce fue que la exposición fue telemática, no presencial. En pantalla grande hubiera causado una mejor impresión.

Al comienzo de la exposición estaba un poco nervioso, pero conforme iba entrando en materia, la intranquilidad fue desapareciendo. Por tanto, puedo decir que en líneas generales estuve muy cómodo. Cuando terminé, los miembros del tribunal me felicitaron por el trabajo. Recuerdo que mi look para la exposición fue un tanto peculiar. Llevaba una camisa, y además, iba sin afeitar y sin peinar. ¡Un pelo por aquí y otro por allá! Tenía una poca barba, que me daba un toque de empresario, o de presidiario, según se mire. Estaba tan nervioso que ni caí en ese momento.

Al concluir la presentación, hubo ronda de preguntas, pero salí de ellas muy airoso. Tras concluir la exposición, solo quedaba la deliberación del tribunal y la entrega del resultado. ¡Tan cerca, pero tan lejos! La tarde de ese mismo día me dieron la nota, y me quedé helado. Me pusieron un 9.7 de calificación (matrícula de honor). ¡Increíble!

Nota con el acta de la presentación del TFG de Multi Race Driving
Nota del acta oficial del proyecto

Dos meses después del final de la presentación, en febrero de 2021, se llevó a cabo la primera edición de un concurso de TFG’s organizado por la Universidad de Zaragoza. Había que hacer un póster que reflejara las ideas básicas del trabajo. Además, había que enviar también la memoria del proyecto, junto con todo el material auxiliar pertinente. Yo hice el póster que tenéis abajo. Quedé finalista del concurso, pero no gané. ¿Os imagináis que también lo llego a ganar? ¡Hubiese sido de locos!

Póster del TFG de Multi Race Driving para la presentación del concurso
Póster del TFG de Multi Race Driving para la presentación del concurso

Conclusión

A lo largo de este post ha quedado reflejado que Multi Race Driving fue una gran aventura. De hecho, puede que haya sido la travesía más dura que he pasado hasta la fecha. Fijaos que el primer día de trabajo comenzó el 17 de febrero y la presentación tuvo lugar el 16 de diciembre. ¡Casi diez meses de trabajo! Se dice pronto como pasa el tiempo de rápido.

Me siento muy feliz cuando recuerdo el día que me dieron la nota. Sin embargo, lo que más me fascina no es eso, sino el hecho de que con tesón y esfuerzo pude sacar el trabajo adecuadamente. Creedme si os digo que a lo largo del desarrollo hubo momentos muy buenos y momentos muy malos.

El año 2020 fue, en general, un año muy trágico para todos. Recuerdo muy bien aquellos días en los que acaba estresado de todo el trabajo, y por las restricciones del coronavirus, no podía salir a la calle para poder desahogarme y respirar otra atmósfera que no fuera la de la habitación de mi casa. Por ello, fueron muchas las veces que me sentí atrapado. Supongo que a vosotros también os pasó. No obstante, a pesar de todos los males, nunca me vine abajo. Luché en todo momento, aunque hubo ocasiones en las que quise dejarlo.

A día de hoy, tengo 24 años, y pese a que soy bastante joven todavía, he visto muchas cosas y me he dado cuenta de algunas verdades. En este mundo, por cada persona buena que te encuentras, te salen diez que no valen la pena. Por ello, me he acostumbrado a no esperar nada de nadie. La única persona de la que sé que puedo esperar todo es de mí mismo, y es por esa razón que, cuando defraudo a la gente que ha depositado su confianza en mí, me enfado mucho conmigo mismo por no haber estado a la altura de las circunstancias.

En relación a lo anterior, este es un motivo por el que me cabreaba cuando el tutor no me daba su aprobación. Podría limitarme a decir que era un cabrón y que me quería fastidiar. De hecho, esa era mi perspectiva en aquel entonces. Sin embargo, analizando la situación con perspectiva, me he dado cuenta de que lo único que hacía era “motivarme” a sacar mi potencial.

Puede que no sea así, pero quiero creerlo. Después de todo, pesé a que me puteó algunas veces, desde el minuto cero creyó en mí y en el proyecto que yo había pensado. ¿Por qué no iba a ser esa su verdadera intención? Después de todo, como me dijo mi padre muchas veces de niño:quien bien te quiere te hará llorar”. Me arrepiento mucho de algunas cosas que le dije. La razón estriba en que, parte de que al final acabara sacando matrícula de honor, fue gracias a su exigencia y afán de perfeccionismo. Por ello, no le guardo ningún rencor por ninguna discusión que tuvimos. ¡Quiero creer que lo hizo por mi bien!

También he estado reflexionando sobre el profesor que me rechazó la primera propuesta. Cuando me di el golpe me supo fatal. Aun así, me gustó que fuera sincero conmigo. Si GoldenEye hubiera salido adelante, ni Out Run ni Multi Race Driving habrían sido implementados nunca, es decir, no hubieran salido ninguno de los dos proyectos personales que, actualmente, me llena de orgullo y felicidad haberlos sacado adelante. Bendito sea ese hombre por haberme rechazado. No obstante, muchas veces me he preguntado que hubiera sucedido si ese proyecto hubiese seguido adelante. La curiosidad inherente en la naturaleza humana es lo que tiene. Siempre hace que me pregunte: “¿qué hubiera pasado si…?”

Una gran verdad que aprendí de este proyecto es que con constancia y esfuerzo se consigue todo. Además, si crees en algo, no importa cuanto tiempo tienes que invertir para que algo salga bien, o lo que es lo mismo, nunca es tarde si la dicha es buena. Fueron muchas las dificultades a las que tuve que hacer frente: “cómo hago esto”, “cómo hago lo otro”, “esto mejor hacerlo así porque sino pasa esto otro”, etcétera.

Puedo parecer egocéntrico, me da igual, pero puedo decir que todo lo que me he propuesto conseguir, y que estaba a la altura de mis posibilidades, sin coaccionar a terceros, lo he conseguido. Por consiguiente, estoy muy orgulloso de ello. ¡Es vital creer en uno mismo si se quiere llegar lejos!

Si me preguntarais: “¿cuál es el mejor momento de tu aventura con tu TFG?”. Sinceramente, respondería que todos. Si la historia hubiese sido diferente, el desenlace hubiese sido diferente, las reflexiones que ahora estoy escribiendo serían distintas. ¡Todo sería distinto! Me he sentido muy reconfortado contando esta gran anécdota.

No cambiaría nada de ella, y es por eso que todos, fueron buenos momentos. Lo que más me gusta es que este tipo de vivencias no las tengo yo, sino todo el mundo. Esto a su vez, guarda relación con algo que dije en el post que iba sobre el amor y las dos mujeres de mi vida, que por cierto, gustó y gusta mucho. ¿Recordáis lo que dije? Mis palabras fueron: “lo más bonito de las personas es su historia.” ¡Todos tenemos cosas que contar, sin excepciones! En nuestras manos está el querer descubrirlas. ¿A qué es fascinante?

Ahora os estaréis preguntando: “¿cuál es el peor momento que viviste?” Honestamente, diría que el peor fue cuando no pude presentarlo en la convocatoria de septiembre. Me sentí muy mal conmigo mismo porque no logré conseguir el objetivo, pero eso no fue lo que más me disgustó. Recuerdo a mis padres, preocupados, entrando en la habitación cada cierto tiempo, y preguntarme cómo iba, si me iba a dar tiempo.

Obviamente, yo ya sabía que no, porque me lo había dicho el tutor. Es más lo que deseaba en esos momentos era no hacer nada por lo enfadado que estaba, pero aun así, yo seguía trabajando y disimulando el cabreo. Pues bien, cada vez que me preguntaban yo tenía que mentir para que no se decepcionaran. ¡Eso fue lo más devastador para mí!

No hay nada peor que ver decepción y pena en los ojos de alguien que confía en ti. ¡Cadena perpetua! Si eres una persona, como yo, que odia mentir y que le mientan, es algo muy duro. Por un lado piensas, estoy mintiendo para intentar evitar algo que al final va a ocurrir, que es la decepción por no llegar a tiempo. ¿Para que coño miento entonces, para lograr que la decepción sea inferior a la que experimentarían si me hubieran visto gritando como un verdulero? Esa fue la razón por la que lo hice, para disminuir el disgusto. Sin embargo, ¡eso no hacía que me sintiera mejor!

Imaginaos que sois padres y tenéis hijos, ocurre algo muy desagradable, algo que desencadena miedo e inquietud en vuestros retoños. Así las cosas, os preguntan si todo va a salir bien, y vosotros, solo para que se sientan mejor les decís que sí, aunque probablemente no sea así. Yo no soy padre. No obstante, es el mejor ejemplo que ahora mismo me viene a la mente para poder explicarlo. El hecho de mentir a alguien a los ojos puede conmigo. ¡Esta fue la peor parte de esta aventura! Al recibir la matrícula hubo alegría y el jolgorio, pero la realidad es que, aunque esa euforia no me la puede quitar nadie, el pesar que yo sentía en aquel momento tampoco.

Y ya para terminar, anteriormente he dicho que me quedó un recuerdo agridulce de la presentación, puesto que fue telemática y no presencial. Eso no es del todo cierto. Me molestó que fuera por videollamada porque no sorprende de igual forma que si lo ves en un proyector. La comunicación y esencia, tanto del evento como de la gente que interviene en él, se difumina. No obstante, tengo algo que otros compañeros no tienen. ¡Tengo la presentación grabada!

En las presentaciones presenciales no se pueden hacer fotos ni vídeos. Por ello, cuando el evento concluye, la única forma de poder recordarlo es indagando en la memoria. La persona que mejor va a recordar la emoción del momento eres tú mismo, que estás presentando. El resto de los asistentes, probablemente se olvidaran, y si no lo hacen, jamás le van a poder dar el mismo valor que le das tú, simplemente porque no estaban en tus carnes en ese momento. ¿Me explico?

Si con el paso del tiempo sufres una enfermedad degenerativa o algo similar, la memoria desaparecerá y tus recuerdos con ella. Este momento tan bonito podría perderse, y nunca habría pruebas de que existió. ¿Os dais cuenta? Mi presentación fue en vídeo, que es más frío, pero está grabada. ¡Está inmortalizada para la posteridad! Ese recuerdo queda exento del paso del tiempo. Es muy interesante porque, no solo puedo verlo cuando quiera, sino que lo puedo compartir con todos vosotros y con mis allegados. Lo mejor de todo es que cuando haya fallecido, el recuerdo de que yo, Rubén Rodríguez, el día 16 de diciembre del 2020, presenté mi TFG, seguirá vigente. ¡Nunca va a desaparecer!

He estado pensando mucho sobre esto último, y he decidido compartir con vosotros uno de los momentos más bonitos de mi vida. Un día que si tengo suerte, espero no olvidar nunca. Así que, siguiendo con el espíritu de transparencia y verdad que tanto os gusta, y que define a Momentum of solace¡os dejo la presentación de mi TFG! Para aquellos que decidáis verla, ¡espero que os guste!

¡Hasta la próxima aventura!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *