Descompilando juegos clásicos de CPC

Hola a todos.

Se me ocurrió probar algo.

Subí una captura (snapshot) de un famoso juego isométrico a Claude y le pedí (con algunos criterios muy específicos) que descompilara el juego a partir de ella y lo reescribiera por completo en BlitzMax, con la intención de que todo (menús, jugabilidad, sonidos, etc.) funcionara exactamente igual que en el juego original.

Madre mía. En poco más de una hora ya estaba listo, y el resultado es asombroso.

El código resultante de BlitzMax es fácil de seguir y está comentado.

Por si a alguien le interesa, este fue mi prompt (usando la configuración «Low» de Claude Opus 5.5):

hola.
descompila esto.

me gustaría portarlo a blitzmaxNG 0.165.3.61.

Porta TODO el programa a blitzmax.
Código muy simple, limpio, fácil de seguir y totalmente sin optimizar.
Intenta crear un sonido equivalente para cada sonido del programa.
Haz que se ejecute en una ventana de 1280x800, donde la pantalla del cpc esté escalada x 4.

sin optimización.
sin florituras.
solo un port directo 1:1.

nada de cosas raras de memoria para recorrer los datos, solo arrays simples donde sea posible.
la regla de oro es mantener el código de blitzmax LO MÁS SIMPLE POSIBLE, y lo más legible y fácil de seguir que se pueda.

en serio, ¡nada de florituras ni cosas «sofisticadas» para nada!

5 Me gusta

… ¿Y el resultado?

Recuerdo BlitzBasic y mis primeros intentos de hacer un remake de Asphalt :slight_smile:

¿Alguna imagen para mostrar?

Aquí tienes algunas imágenes.

[EDIT] ¡Vaya, dejé el puntero del ratón sobre la ventana al capturar las imágenes!

1 me gusta

Básicamente el mismo juego, los remakes serán más fáciles de crear.

He probado con el código fuente de mi juego Bitume a migrarlo a mi framework de C++ con Direct2d (una actualización del framework de Direct3d que utilicé para el remake de Hurlements para Windows). Y funciona, por supuesto.

1 me gusta

De nuevo, otro tipo de juego que intentaba recrear a mano en un proyecto (creando una especie de framework isométrico para CPC)… Tratando de aprender sobre la marcha (incluso conseguí un artículo de Jon Ritman al respecto para leer). Y la IA puede simplemente darme el código si quiero.

Pero no pasa nada, es solo «una implementación» entre muchas… Puedo seguir avanzando despacio (en lugar de a base de chapuzas de IA).

¿Tenías pensado editarlo y usarlo como base para otro juego? ¿O es simplemente por el placer de portarlo?

Siempre me ha interesado saber cómo se hacían los juegos isométricos, sobre todo teniendo en cuenta las limitaciones del hardware. Además, el código de BlitzMax es muy fácil de seguir y resultará sencillísimo aprender de él. La IA me ha dado la oportunidad de analizar y comprender de verdad cómo funciona.

Y tengo que decir que Jon Ritman es un genio absoluto. La relación de causa y efecto entre los objetos del juego, las interacciones entre personajes y objetos, personajes y superficies, y entre personajes entre sí, es extraordinariamente profunda y llena de matices. Nunca llegué a apreciar del todo lo ingenioso que es en realidad Head Over Heels. No es solo una obra maestra de la jugabilidad, sino también de la programación.

Head Over Heels es mi juego de CPC favorito de todos los tiempos, así que poder asomarme tras bambalinas es algo muy especial para mí. Estoy pensando en pedirle a Clause que porte Rasputin a continuación…

1 me gusta

No conozco el juego Rasputin; en juegos isométricos, Fairlight me impresionó muchísimo.

Mmm. Fairlight es una opción interesante…

Rasputin.

Esto se hizo con GTP 6.1 Sol.

No estoy seguro de si la energía del escudo y de la espada se muestran correctamente. Da igual.

Probaré con Fairlight a continuación.

1 me gusta

¿Cómo se compara GTP 6.1 con Claude.AI?

Claude da la sensación de ir un poco mejor para este tipo de cosas, pero voy a hacer Fairlight tanto con Claude como con GPT.

Luego se podrá comparar el código BlitzMax de cada uno.

Primer intento de Claude (pero ahora tengo que esperar a que se restablezca mi límite de uso en 2 días).

Desafortunadamente, el personaje del jugador es un revoltijo de píxeles y ninguna tecla de control hace que se mueva.
En cuanto se restablezca mi límite de uso, continuaré con ello.

El renderizado de la habitación ya está bien y no hay problemas de rendimiento en este tipo de conversión.

1 me gusta

La versión de GPT.

Parece funcionar bastante bien.

Y la velocidad del juego se puede cambiar con una simple CONST.

3 Me gusta

Es una buena idea usar un sistema de juegos orientado a BASIC; el código debería ser más legible que convertido a C++ y mantener solo la lógica del juego.

1 me gusta

Rasputin está arreglado.

1 me gusta

El código BlitzMax resultante de los 3 juegos es, de hecho, muy fácil de entender y seguir. Todavía no sé qué pensar al respecto desde el punto de vista ético, pero como herramienta de aprendizaje es tremendo.

Ya existía un problema similar con los juegos desensamblados, pero eso aún requería una buena dosis de habilidad técnica en el contexto del desarrollo para CPC.

Es un muy buen punto… sin embargo, en este caso no me «gané» el derecho a examinar cómo funcionan los juegos. Simplemente, de repente (y de forma muy fácil), tengo la capacidad de entender los algoritmos utilizados en estos juegos de código cerrado.

Por supuesto, el código fuente original no está disponible y esto es una reconstrucción. Pero, en cuanto a los algoritmos, es probable que sea una representación muy válida de lo que crearon los desarrolladores originales. Se siente como hacer trampa.