Mon Pokémon unique au monde
juillet 2026
Aperçu
En pleine partie, dans une fenêtre à l'intérieur du jeu lui-même, le joueur tape quelques mots. Le jeu toujours en marche, une IA les transforme en une espèce de Pokémon entièrement nouvelle — illustration, nom, type, statistiques de base et capacités — et l'enregistre comme une espèce à part entière. On la rencontre dans les hautes herbes, on la capture, on lui donne un surnom, on l'élève comme n'importe quelle autre.
Rien n'est écrit à l'avance. L'espèce qui finit dans la sauvegarde n'a jamais existé auparavant et n'existe nulle part ailleurs.
Une part de ce que les jeux ont toujours offert, c'est de fabriquer quelque chose qui soit à soi. En pratique, cela a voulu dire choisir dans un ensemble fixe. Ce projet existe pour éprouver si l'IA générative rend à soi littéralement vrai — et, surtout, si quelque chose de littéralement à soi est quelque chose auquel un joueur s'attache réellement.
Déroulé
Tout commence en parlant à une vieille dame dans le Bois de Clémenti-Ville. On décrit la créature qu'on a en tête ; ces mots sont transformés en espèce pendant qu'on continue de jouer ; et quelques minutes plus tard elle attend dans les hautes herbes — à rencontrer, à capturer, et à utiliser ensuite exactement comme n'importe quoi d'autre dans le jeu. Tout est fabriqué sur place : le nom, le type, les statistiques de base, la liste des capacités, les deux sprites de combat et l'icône d'équipe.
Une partie complète, de bout en bout, est enregistrée ici : My Own Pokémon Generation — demo02.
Pourquoi ceci, et non un générateur de créatures
Le problème intéressant n'est pas de savoir si une IA peut inventer un Pokémon. C'est de savoir si elle peut en inventer un que le jeu puisse absorber sans se défaire. Livré à lui-même, un générateur produit soit quelque chose d'inutilisable — un monstre à 900 points de statistiques qui rend le jeu trivial — soit quelque chose de déplaisant : un sprite difforme qui cesse de se lire comme une créature.
Le travail de design, ici, n'est donc pas la créature. C'est l'espace à l'intérieur duquel elle est générée : les fourchettes de statistiques, les règles de légalité des capacités, les silhouettes qui survivent à un sprite de 64×64, le vocabulaire avec lequel le joueur a seulement le droit de décrire. Le modèle explore cet espace. Il n'a pas à le définir.
Ce projet est l'endroit où ma philosophie de design cesse d'être un argument et se voit mise à l'épreuve : définir les objectifs, les valeurs, les contraintes et les limites qui donnent forme à un espace de conception, laisser la génération s'y produire, et découvrir si le résultat tient.
Le cadre est la recherche
Le LLM n'écrit jamais librement. Il remplit des cases d'un schéma fixe, et chaque sortie est revérifiée par un validateur. Les infractions repartent en régénération accompagnées de la règle précise qui a été enfreinte.
Les contraintes d'équilibre gardent le jeu jouable. Le total des statistiques de base est maintenu dans une fourchette fixe — de 280 à 360, à peu près le niveau d'un starter — avec des plages par statistique, et toute spécification hors fourchette est rejetée d'emblée. Les capacités sont extraites automatiquement du code de pokeemerald, puis filtrées au type propre de l'espèce ou à Normal, en retirant les capacités de K.O. immédiat, les effets d'autodestruction et les dégâts fixes ou démesurés. L'ensemble obtenu est vérifié quant à sa solidité : assez de capacités offensives, au moins une attaque du même type, au plus une capacité de forte puissance. L'attribution des niveaux est faite de façon déterministe par le cadre, non par le modèle. Tout le reste est figé — un talent par type, taux de capture, courbe d'expérience, ratio de genres, compatibilité CT — de sorte que la variation individuelle reste confinée aux cases du schéma et que les exécutions restent comparables.
Les contraintes d'apparence empêchent la sortie de se déliter. Les plans corporels proviennent d'une liste blanche de silhouettes qui survivent à un sprite de 64×64 : quadrupède, rongeur, oiseau, lézard. La couleur est choisie dans une liste blanche nommée, et la couleur corporelle du Pokédex en est dérivée mécaniquement. Les traits sont limités à une à trois formules courtes préétablies, avec une liste de blocage qui rejette les traits humains, le sang, les armes et le texte. Le cadre compose lui-même l'instruction finale et y ajoute un épilogue fixe : une seule créature, corps entier, anatomie cohérente, pas de membres en trop, expression calme.
Cela fonctionne, et on peut le voir fonctionner. Lors d'une exécution enregistrée, le modèle a proposé un total de statistiques de base de 380 ; le validateur l'a repoussé trois fois — 380, 360, 340 — jusqu'à ce que la spécification atterrisse dans la fourchette, à 320.
Comment cela tourne
Le jeu lui-même ne génère rien. Le travail est fait par un processus Python résident sur le PC, et les deux moitiés se parlent par une boîte aux lettres de fichiers qu'un script Lua dans mGBA consulte à chaque image.
- Texte. Un modèle local (
qwen3:8b) transforme les mots en une fiche d'espèce validée. - Image. Un modèle d'image dessine une illustration de référence, puis trois vues cohérentes entre elles : le sprite de combat de face, celui de dos et l'icône d'équipe.
- Conversion. Le dessin est quantifié sur une palette commune de 15 couleurs et converti au format de sprites de pokeemerald.
- Encodage. Les sprites deviennent des binaires GBA : tuiles 4bpp et 1bpp, palettes
gbapal, compression LZ77 compatible BIOS. - Injection. Les binaires sont écrits dans une zone réservée de la ROM.
Écrire dans la cartouche à l'exécution signifie que l'instance en cours récupère la nouvelle espèce sans redémarrage, et que la même séquence d'octets part sur le disque, de sorte que le changement survit à un rechargement.
Ce qui apparaît est durable et irréversible. Il rôde : qu'on fuie ou qu'on perde, il reste dans le monde. Qu'on le mette K.O., et il est perdu pour de bon.
Implémentation
Le générateur, le cadre de contraintes, les encodeurs GBA et le correctif côté jeu sont publiés intégralement : github.com/takafumihoriuchi/my-own-pokemon-generation.
Post-scriptum — sur l'attachement
Le prototype tranche une question technique. Derrière elle se tient celle qui m'importe vraiment : un Pokémon généré pour vous, qui n'existe nulle part ailleurs, finit-il par compter davantage qu'un autre livré avec le jeu ?
D'avoir joué à ma propre version — un échantillon d'un seul, et il ne faut pas y lire davantage — deux conditions semblent gouverner la réponse.
- Ce que vous y avez mis de vous. Saisir six mots, c'est participer, mais d'une manière mince : ce qui revient donne l'impression d'être livré plutôt que fabriqué. Ce qui semble compter n'est pas le volume de l'apport mais sa nature — effort, itération, marge de reprise, et une part de responsabilité dans le résultat.
- La qualité. L'attachement semble exiger que la chose générée franchisse un seuil. En dessous, le fait qu'elle soit unique et à vous ne porte pas le sentiment à lui seul.
Un cas venu de l'extérieur du jeu parle des deux. En travaillant à la main avec ChatGPT, en faisant des allers-retours jusqu'à être satisfait, j'ai conçu une espèce à moi — Hanagitsune. J'y suis attaché. Je l'avais fabriquée plutôt que commandée, et ce qui en est sorti passait la barre de la qualité.
Les deux conditions sont à portée. Un processus de fabrication plus profond — choisir, reprendre, écarter — déplace la première ; de meilleurs modèles et un cadre d'instructions conçu avec plus de soin déplacent la seconde. C'est là que cela continue.
Le résultat du prototype n'est donc pas un verdict sur la question. C'est la question rendue mesurable : deux variables que l'on peut désormais déplacer à dessein et observer.
Construit sur la décompilation pret/pokeemerald à titre de recherche personnelle. Aucune ROM, aucun correctif de ROM ni aucune ressource du jeu n'est distribué, et tous les sprites présentés ici sont des créations originales générées par IA. Pokémon est une marque de Nintendo, Creatures Inc. et GAME FREAK Inc. ; ce projet n'est ni affilié à ces sociétés ni approuvé par elles.