Décompiler des jeux CPC classiques

Salut tout le monde.

Je me suis dit que j’allais tenter une expérience.

J’ai téléversé une capture d’écran d’un célèbre jeu isométrique dans Claude, puis je lui ai demandé (avec des critères très précis) de décompiler le jeu à partir de cette capture et de le réécrire entièrement en BlitzMax, avec pour objectif que tout (les menus, le jeu en lui-même, les bruitages, etc.) fonctionne exactement comme dans la version originale.

La vache. En un peu plus d’une heure, c’était plié, et le résultat est tout simplement bluffant.

Le code BlitzMax obtenu est facile à comprendre et bien commenté.

Pour ceux que ça intéresse, voici le prompt que j’ai utilisé (avec le réglage « Low » de Claude Opus 5.5) :

bonjour.
décompile ceci.

j’aimerais que ce soit porté vers blitzmaxNG 0.165.3.61.

Porte TOUT le programme en blitzmax.
Un code très simple, propre, facile à suivre et totalement non optimisé.
Essaie de créer un son équivalent pour chaque son du programme.
Fais-le tourner dans une fenêtre de 1280x800, où l’affichage du CPC est agrandi x 4.

pas d’optimisation.
pas de trucs sophistiqués.
juste un portage direct 1:1.

pas de bidouilles de mémoire bizarres pour parcourir les données, juste des tableaux simples là où c’est possible.
la règle d’or est de garder le code blitzmax LE PLUS SIMPLE POSSIBLE, et aussi lisible et facile à suivre que possible.

sérieusement, aucun truc fantaisiste ou « sophistiqué », rien du tout !

3 « J'aime »

… Et le résultat ?

Je me souviens de BlitzBasic et de mes premières tentatives pour créer un remake d’Asphalt :slight_smile:

Des images à montrer ?

Voici quelques images.

[MODIF] Oups, j’ai laissé le curseur de la souris au-dessus de la fenêtre lors de la capture d’écran !

1 « J'aime »

C’est effectivement le même jeu, les remakes seront plus faciles à créer.

J’ai essayé, avec les sources de mon jeu Bitume, de migrer vers mon framework C++ avec Direct2D (une mise à jour du framework Direct3D que j’avais utilisé pour le remake d’Hurlements pour Windows). Et bien sûr, ça fonctionne.

1 « J'aime »

Encore un autre genre de jeu que j’essayais de reproduire à la main dans un projet (en créant une sorte de framework isométrique pour CPC)… En essayant d’apprendre sur le tas (j’ai même dégoté un article de Jon Ritman à lire là-dessus). Et l’IA peut simplement me fournir le code si je le souhaite.

Mais c’est pas grave, ce n’est qu’« une implémentation » parmi d’autres… Je peux continuer à avancer doucement (sans faire de bouillie générée par IA).

Tu prévois de le modifier et de t’en servir comme base pour un autre jeu ? Ou c’est juste pour la beauté du portage ?

J’ai toujours été intéressé par la façon dont les jeux en 3D isométrique étaient conçus, en particulier compte tenu des limites matérielles de l’époque. Et le code en BlitzMax est vraiment facile à suivre et sera très simple à assimiler. L’IA vient tout juste de me donner un moyen d’étudier et de comprendre concrètement son fonctionnement.

Et je dois dire que Jon Ritman est un génie absolu ! La relation de cause à effet entre les objets du jeu, les interactions entre les personnages et les objets, les personnages et les surfaces, ou encore entre les personnages eux-mêmes, est remarquablement profonde et tout en nuances. Je n’avais jamais mesuré à quel point « Head Over Heels » est véritablement brillant. Ce n’est pas seulement un chef-d’œuvre de gameplay, mais aussi une prouesse de programmation.

« Head Over Heels » est mon jeu CPC préféré de tous les temps, alors jeter un œil dans les coulisses est quelque chose de très spécial pour moi. Je songe à demander à Clause de porter « Rasputin » la prochaine fois…

1 « J'aime »

Je ne connais pas le jeu Rasputin ; dans le genre jeu en 3D isométrique, Fairlight m’a beaucoup marqué.

Hmmm. Fairlight est un choix intéressant…

Raspoutine.

Fait avec GTP 6.1 Sol.

Je ne sais pas si l’énergie du Bouclier et de l’Épée s’affiche correctement. Peu importe.

J’essaierai Fairlight ensuite.

1 « J'aime »

Comment se compare GTP 6.1 par rapport à Claude.AI ?

Claude semble un peu mieux adapté pour ce genre de choses, mais je vais faire Fairlight à la fois avec Claude et GPT.

On pourra ensuite comparer le code BlitzMax produit par chacun d’eux.

Premier essai par Claude (mais maintenant je dois attendre que mon quota se réinitialise dans 2 jours).

Malheureusement, le personnage du joueur est une bouillie de pixels, et aucune touche de contrôle ne le fait bouger.
Une fois mon quota réinitialisé, je continuerai là-dessus.

Le rendu de la pièce est déjà correct, et il n’y a pas de problème de performance avec ce type de conversion.

1 « J'aime »

La version de GPT.

Ça a l’air de bien fonctionner.

Et la vitesse du jeu peut être modifiée grâce à une simple CONST.

3 « J'aime »

C’est une bonne idée d’utiliser un langage orienté Basic pour les jeux vidéo ; le code devrait être plus lisible qu’une fois converti en C++ et ne conserver que la logique du jeu.

1 « J'aime »

Raspoutine est corrigé.

1 « J'aime »

Le code BlitzMax résultant des 3 jeux est en effet très facile à comprendre et à suivre. Je ne sais pas encore ce que j’en pense sur le plan éthique, mais en tant qu’outil d’apprentissage, c’est formidable.

Il y avait déjà eu un problème similaire avec le désassemblage de jeux, mais cela demandait tout de même un niveau non négligeable de compétences techniques dans le cadre du développement CPC.

C’est un très bon point… mais dans ce cas, je n’ai pas « mérité » le droit d’examiner le fonctionnement de ces jeux. J’ai simplement (et facilement) la possibilité, tout d’un coup, de comprendre les algorithmes utilisés dans ces jeux propriétaires.

Bien sûr, le code source original n’est pas disponible, et il s’agit d’une reconstruction. Mais sur le plan algorithmique, c’est très probablement une représentation fidèle de ce que les développeurs d’origine avaient créé. J’ai un peu l’impression de tricher.