Contexte de l'expérience
En 2012, Jordan Mechner a publié le code source original de Prince of Persia pour Apple II, écrit en assembleur 6502, sur GitHub. L’auteur du blog a confié ce dépôt à plusieurs modèles d’IA, sans aucune intervention humaine, afin d’obtenir un port fonctionnel en C# console. Chaque modèle a reçu uniquement des invites textuelles et a été évalué en jouant le résultat et en notant les écarts de comportement.
Analyse des modèles IA
Le premier tour, Claude Opus 4.6 (février 2026), a généré un programme C# capable de lire les fichiers de niveaux Apple II et d’afficher une scène graphique via Raylib. Malgré une lecture correcte des tuiles, le mouvement du prince était limité à un déplacement d’une case par fois, alors que le jeu original utilise des animations fluides à plusieurs pixels par image. Les invites suivantes (« char coming but movement everything wrong », « arrow keys doesn’t move ») illustrent l’incapacité du modèle à identifier le besoin d’un moteur d’animation basé sur des séquences d’images.
OpenAI Codex (mars 2026) a corrigé des aspects visuels : filtrage des pixels, transparence des sprites et passage des portes. Cependant, le problème d’architecture sous‑jacente est resté, le prince continuant à se placer dans des cellules erronées. Les améliorations se sont limitées à la couche de rendu, sans modification du moteur de déplacement.
Claude Opus 5 (septembre 2026) a introduit deux compétences « Code » capables de piloter DOSBox et de capturer des captures d’écran. En comparant le comportement du port C# avec le jeu DOS original, le modèle a détecté le défaut architectural (moteur à grille vs moteur à trames) et a reconstruit le moteur autour du design d’origine. Il a également extrait les tables d’animation du fichier PRINCE.EXE en recherchant des motifs d’octets présents dans le code Apple II, puis les a validées contre une seconde valeur connue avant de les intégrer.
Réconstruction de l'architecture du moteur
Opus 5 a résolu le bug de détection des rebords en réutilisant la routine d’assemblage originale, puis a ajusté les positions des briques et des portes en les alignant pixel par pixel avec les captures du jeu réel. Malgré ces progrès, les décors restaient légèrement décalés, car le modèle remplissait les zones inconnues par conjecture.
Claude Opus 5.5 a changé de stratégie. En s’appuyant sur le port open‑source SDLPoP (documenté par Dávid Nagy), il a importé la fonction DosRoomDrawer.cs, une traduction directe du fichier C seg008.c. Cette routine a révélé que le motif de briques « aléatoire » est en fait déterministe, généré à partir du numéro de salle, de la ligne et de la colonne. Le modèle a également découvert que PRINCE.EXE est compressé avec Microsoft EXEPACK, a écrit un décompresseur et a lu les tables de dessin directement dans l’exécutable. Le comptage des pixels différents entre le port et le jeu DOS est passé de 8 429 à 2, démontrant une correspondance quasi parfaite.
Évaluation des résultats et limites
Les itérations successives montrent que les modèles plus récents combinent analyse de code binaire, comparaison visuelle et réutilisation de projets communautaires pour combler les lacunes du code généré. Néanmoins, des problèmes subsistent : le sprite du prince s’enfonce légèrement lorsqu’il fait face à l’opposé, et certaines hypothèses de couleur restent approximatives. L’expérience souligne que la génération automatique de code peut atteindre une fidélité fonctionnelle élevée, mais dépend fortement de la capacité du modèle à interpréter des formats propriétaires, à gérer la compression et à valider les résultats à l’échelle pixel.