Il y a des projets qu'on ne lance jamais parce qu'ils paraissent absurdes. Faire tourner un jeu web moderne sur une console portable de 2007, par exemple. Pas de navigateur, pas de JavaScript, quelques dizaines de mégaoctets de mémoire.
C'est pourtant le défi de cette vidéo. Le jeu, c'est PLOONK : un platformer coopératif écrit en TypeScript, avec 16 000 lignes de code, du multijoueur et un éditeur de niveaux. La cible, une PSP de 2007. Le plan : tout réécrire en C, en bare metal. En une soirée, avec Claude Code.

Le problème de départ est simple : il n'y a pas de JavaScript sur une PSP. Aucun moyen d'emporter le code existant tel quel. Il faut repartir d'une page blanche dans un autre langage, avec d'autres contraintes : pas de ramasse-miettes, pas de DOM, pas de canvas, un processeur et une mémoire sans commune mesure avec un PC.
Autrement dit, ce n'est pas une compilation, c'est une traduction. Et c'est là que Claude Code devient intéressant : il sait lire 16 000 lignes de TypeScript, en comprendre l'intention, et réécrire l'essentiel dans un langage et un environnement complètement différents.
Pour développer sur PSP, la communauté homebrew maintient le PSPSDK, un ensemble d'outils pour compiler du C vers la console. Première étape de la soirée : installer la toolchain et obtenir un premier build qui compile.
Pour tester sans risquer la console, il existe aussi PPSSPP, un émulateur PSP open source, cité dans les ressources de la vidéo. C'est un bon terrain d'essai si tu veux te lancer : on compile, on lance dans l'émulateur, on corrige, avant de passer sur le vrai matériel.
Une PSP d'origine refuse d'exécuter du code non signé par Sony. Pour lancer un homebrew, il faut un custom firmware (CFW). Coup de chance : la PSP de la vidéo avait déjà été hackée en 2010.
La vidéo passe par ARK-4, un custom firmware moderne, avec son lot d'imprévus, dont un message de « données endommagées » à contourner. Puis vient le moment clé : le premier boot sur la vraie PSP.
Le cœur d'un platformer, c'est sa physique : gravité, vitesse de saut, accélération, friction, collisions. C'est ce qui fait qu'un jeu « se sent bien » en main, ce que les développeurs appellent le game feel. Un saut un peu trop lourd ou un peu trop flottant, et le jeu n'a plus la même saveur.
Le portage se fait donc constante par constante. Chaque valeur du moteur TypeScript est reprise à l'identique en C, chaque formule est traduite fidèlement. L'objectif n'est pas de refaire un jeu qui ressemble à PLOONK, mais de retrouver exactement les mêmes sensations.
C'est un travail où Claude Code excelle : relever méticuleusement toutes les valeurs, repérer les dépendances cachées entre elles, et les transposer sans rien oublier. Un humain s'ennuie vite sur ce genre de tâche. Le modèle, non.
Évidemment, tout ne marche pas du premier coup. Le bug marquant de la soirée : le double saut. Un comportement qui fonctionnait dans la version web se retrouve cassé dans le port.
La correction tient finalement en une ligne. C'est souvent comme ça avec les bugs de portage : l'essentiel du temps passe à trouver où la traduction a légèrement dévié de l'original, pas à écrire la correction. Avoir l'original sous la main, et un assistant capable de comparer les deux versions ligne à ligne, accélère énormément cette recherche.
Première version jouable : moche mais vivante. Le jeu tourne, la physique est juste, mais visuellement, ce sont des formes brutes.
Vient alors l'upgrade visuel. L'inspiration : LocoRoco, le jeu culte de la PSP, avec ses personnages ronds et mous. Pour obtenir ce rendu organique sans exploser le budget de calcul, la vidéo s'appuie sur l'interpolation de vertex du GPU de la PSP : c'est la puce graphique qui fait le travail de lissage, pas le processeur.
Au passage, quelques bugs comiques, comme on en a toujours quand on touche au rendu. Puis le moment le plus satisfaisant de la vidéo : la première lumière, le climax de la soirée.
Le bilan chiffré est impressionnant :
| Version web | Version PSP |
|---|
| Langage | TypeScript | C |
| Taille du code | 16 000 lignes | 2 000 lignes |
| Poids | | 177 Ko |
| Game feel | référence | identique |
2 000 lignes de C et 177 Ko, pour un jeu qui se joue comme l'original.
La partie la plus intéressante est peut-être la réflexion de fin de vidéo. Passer de 16 000 à 2 000 lignes, ce n'est pas seulement une question de langage. C'est l'effet d'un portage qui enlève tout sauf l'essentiel.
Ce qui reste, c'est le cœur du jeu : sa physique et son rendu. Et le fait que ces 2 000 lignes suffisent à retrouver le même plaisir de jeu dit quelque chose sur ce qui compte vraiment dans un projet.
C'est un exercice qu'on peut transposer à n'importe quelle application : si tu devais la réécrire en ne gardant que l'essentiel, que resterait-il ?
Au-delà de la performance, quelques leçons applicables ailleurs :
- Claude Code est un excellent traducteur de code entre langages et environnements, à condition de lui donner l'original comme référence.
- Portez par couches : d'abord ce qui compile, puis ce qui tourne, puis ce qui est juste, puis ce qui est beau.
- Un émulateur comme PPSSPP permet des boucles de retour rapides avant le vrai matériel.
- Gardez les constantes intactes quand vous portez un comportement sensible comme une physique de jeu.
- Osez les projets absurdes : c'est souvent là qu'on apprend le plus.
- PLOONK, un platformer coop TypeScript de 16 000 lignes, a été porté en C sur une PSP de 2007.
- La soirée passe par le PSPSDK, le custom firmware ARK-4 et un premier boot sur la vraie console.
- La physique est traduite constante par constante, le bug du double saut se corrige en une ligne, et le rendu s'inspire de LocoRoco grâce au GPU.
- Résultat : 2 000 lignes de C, 177 Ko, et le même game feel.
Tu peux jouer à la version web de PLOONK sur https://ploonk.pullpu.sh, et suivre toute la soirée dans la vidéo.