jueves, 26 de septiembre de 2024

Haciendo un remake de un clásico de MS-DOS


Han pasado cuatro años desde la última entrada (madre mía!) pero me apetecía compartir este pequeño proyecto que he estado haciendo en mis ratos libres y quizás, si acabas por aquí de casualidad, podría parecerte interesante.

El tema de hoy es que acabo de publicar un juego en html5 por lo que es jugable directamente desde el navegador. En realidad no es un título original sino una recreación de un clásico de Apogee de 1991 llamado Crystal Caves.




Mi intención era intentar empezar y acabar un proyecto pequeño que pudiera manejar así que esto es tan solo un nivel del juego en el que vi que había muchas mecánicas clásicas que recrear para un juego de plataformas. El objetivo era no solo replicarlo sino darle un lavado de cara y añadirle un poco más de gamefeel (o juiciness) y mejoras de usabilidad o como se conoce en anglosajón como QoL (quality of life improvements).

Crystal Caves +  en Itch.io

Te dejo el juego en el mismo post TRAS EL SALTO así como algunos detalles extra del desarrollo. 👇👇👇


El juego

Antes de nada el juego a un click. Te advierto que es un juego de 1991 por lo que ya te aviso que es durillo de primeras pero una vez comprendes todo es un momento.




SOLO CON TECLADO * (click en el juego para que funcione el teclado)

↑                    Saltar
← , →            Mover
Ctrl                Disparar



Eligiendo el motor


Después de dar muchos tumbos en la eterna pelea de qué motor utilizar, llegué a la conclusión de que Construct era lo que encajaba conmigo. Este eterno debate interior se debe a que hay un sentimiento general del que no se habla directamente en el que algunos motores parecen ser la opción correcta, para los desarrolladores de verdad que saben programar y otros, como este Construct, son juguetes y se les resta mérito.

En los últimos años he probado casi todos, desde Game Maker hasta Unity pero siempre acababa en el mismo punto en el que no sabía como seguir. Tras varios tutoriales me daba cuenta de que cuando intentaba ponerme por mi cuenta no sabía nada y me bloqueaba de manera irremediable. 




Llevo ya unos cuantos años trabajando de manera profesional como artista y unos pocos trabajando con Unity pero la programación es algo que se me atraganta y que no consigo resolver simplemente con tutoriales así que volví a Construct después de varios años, me puse con un objetivo claro y cuando me di cuenta la cosa marchaba y esto es lo más lejos que he llegado nunca creando algo por mi cuenta.

La frase que hizo que me convenciera fue que si quiero hacer algo grande necesitaré a más gente, por lo tanto el motor podrá ser cualquiera que venga bien (especialmente a los programadores) pero si lo tengo que hacer todo yo, prefiero algo que me permita acabarlo aunque no sea la opción más óptima o elegante.


Por qué Crystal Caves?

Pensé que la mejor manera de aprender es intentar replicar mecánicas de algún juego sencillo antes de intentar crear tu propio juego ya que inevitablemente a la primera barrera intentaría simplificar las cosas o al contrario, sería fácil venirse arriba. Así que para este proyecto prefería sacar el papel del diseñador fuera de la ecuación (que por otra parte en realidad es lo que más me llama la atención).

No quería elegir los clásicos como hacer un Snake, un Pacman, Un Asteroids o incluso un Mario así que recordé este juego de la época del Shareware que contenía muchas mecánicas muy clásicas en el género de los plataformas; plataformas móviles, plataformas jump-thru, enemigos con una patrulla, llaves que abren cofres, palancas que abren puertas...

 




Como la prioridad era aprender a utilizar la herramienta y entender la parte de programar (luego hablo sobre esto), decidí hacer solo un nivel ya que estaba seguro de que no iba a saber montar esto de manera escalable mientras iba aprendiendo a la vez. Efectivamente no me equivocaba. La organización del proyecto es un auténtico despropósito pero lo importante es que todo funciona.

En realidad, el juego tiene un remake oficial que puedes encontrar en Steam, pero me parecía que aunque cumplía, era casi un reskin del juego original ya que se sentía igual de tosco. Ese pasito extra de hacerlo sentir un poco más actual con algunas partículas, animaciones más cuidadas y demás, era lo que me motivaba a intentarlo.

Pero como digo, lo importante era superar la barrera de la programación.


Pero en Construct no se programa!

Esto estarás harto de oírlo pero es mentira. Lo que no vas a hacer (al menos de primeras) es escribir código pero tienes que aprender la lógica de programar y de eso no te libras. No solo eso, hay una gran cantidad de conceptos que debes conocer para resolver las situaciones que te encuentres como por ejemplo saber lo que es un trigger o un raycast por decir un par.

Oye, hacer un videojuego es muy complicado y quien diga lo contrario miente como un bellaco. Quieres hacer que un muñequito se mueva saltando por un nivel plataformeando y matando algunos enemigos al saltar encima? Lo vas a tener hecho en media hora, quizás menos, pero ahora haz que el salto se sienta bien, quizás le añades el coyote time para que se sienta más agradable, añade una escalera y verás la de problemas que te encuentras. Ahora haz que se agache tu personaje y suelta del cursor cuando te encuentres con una colisión encima de tu cabeza.... Pronto te das cuenta de que cada paso que das entra en conflicto con algo que habías hecho o no funciona por alguna razón que no comprendes.




La parte difícil de un proyecto es acabarlo. He oído esto mil veces pero es que no podría estar más de acuerdo. El último 10% es lo complicado de verdad. Arreglar ese bug al que no estabas echando mucha cuenta, averiguar como hacer para que cuando cojas dos monedas seguidas el sonido no se acople, toda la parte de UI....

Lo que quiero decir es que aunque uses un programa tan visual como Construct vas a aprender a programar, quizás con ruedines, pero programarás porque los problemas son los mismos que si escribes código. 

Me ha costado entender esto y viendo a la gente yéndose a tropel a Godot me hacía pensar que yo debería hacer lo mismo pero si quieres un consejo pasa de todo eso. Elije lo que quieras, lo importante es que empieces y consigas acabar algo, no importa si has dibujado con Paint, has programado con Scratch o has hecho la música con un Casiotone (bueno, esto último en realidad molaría bastante). Simplemente hazlo.


Qué cambia respecto al original?


Lo primero era redibujar algunas cosas. Este paso fue divertido y me servía para reposar la cabeza de vez en cuando y no quemarme. Intenté respetar al máximo el estilo del original.




Todos los assets estaban en una cuadrícula de 16 x 16 y aunque he respetado todo lo posible, al final me he saltado algunas reglas en pos de que quedara más chulo.

Aunque tenía de referencia el remake oficial del juego, lo cierto es que no me ha servido demasiado ya que era un repintado muy literal y decidí hacer algunos cambios.



Pero quizás a lo que más ganas tenía de meterle mano era al personaje ya que la animación de caminar era rarísima y se mantuvo en el remake. He intentado mantenerme fiel al sprite original pero he cambiado todas las animaciones para que estuviera a mi gusto.




Respecto al tileset, empecé con la idea de hacer algo realmente nuevo con varias capas de parallax para que pareciera una cueva alienígena y aunque la verdad es que pintaba bien, el proyecto se me estaba alargando y quería acabarlo para poder pasar a otra cosa. Por lo tanto, recorte al canto.

Dejé el suelo bastante saturado porque por alguna razón me parecía que recordaba a la paleta CGA en la que todo es muy estridente. Quizás la podría haber desaturado un poco más pero así se quedó.




Finalmente añadí una pantalla para el inicio aunque la verdad es que la rematé rápido, especialmente el terreno, porque como decía ya se me estaba alargando demasiado así que le dejé el detalle justo para que fuera agradable y un buen acompañamiento como pantalla de inicio.




Respecto al gameplay, están todos los elementos del original. He cambiado un par de tiles en la topografía del nivel para que fuera más fácil navegar, alguna plataforma extra y he procurado jugar con los colores para que no se vea tanto follón en pantalla ya que en el original cuesta mucho entender que es interactuable y qué no (de hecho en mi versión también pasa p
ero créeme que menos).


Conclusión

Ha llevado más faena de la que pensaba pero estoy muy contento de haber llegado hasta el final. Hacer algo completamente solo es una experiencia interesante pero gratificante. Después de esto he ido haciendo más pruebas que quizás algún día enseñe (o no) pero la verdad que espero que la motivación nunca desaparezca del todo ya que en el proceso he aprendido mucho.

Llevo ya unos años trabajando en videojuegos de forma profesional pero esto es una experiencia totalmente distinta aunque se trate de algo tan chiquito como este proyecto. El salir de tu zona para tomar decisiones de otras áreas es algo que pienso que puede ayudar a la hora de enfrentarte a un desarrollo más grande en el que quizás puedes valorar mejor cuanto cuesta hacer algo, especialmente a la hora de pedirlo a otro departamento. 

Yo no soy nadie excepcional y si he podido hacer esto cualquiera puede. Suena a tópico pero te aseguro que lo pienso honestamente. Lo complicado es mantener el ánimo cuando te das una y otra vez contra la pared. Lo importante es hacer un poquito cada día, por poco que sea, da igual. Cuando te des cuenta tendrás algo que empieza a parecer un juego.

Mi consejo si quieres aprender es que hagas lo mismo. Coge un juego clásico que te guste y que creas que es relativamente sencillo (no elijas un Sonic para empezar, por favor!) e intenta replicarlo. La cantidad de cosas a resolver será mucho más grande de lo que esperas pero el quitarte la parte creativa de diseño te va a permitir centrarte en aprender lo importante. Ya habrá tiempo de crear tu obra maestra, no te preocupes.

Espero que haya sido de interés. Hasta la próxima!


No hay comentarios:

Publicar un comentario

Gracias por comentar!

Quizás también te interese...