Il mio Pokémon unico al mondo
luglio 2026
Panoramica
A partita in corso, in una finestra dentro il gioco stesso, il giocatore scrive poche parole. Mentre il gioco continua a girare, un'IA le trasforma in una specie di Pokémon del tutto nuova — illustrazione, nome, tipo, statistiche base e mosse — e la registra come specie a tutti gli effetti. La si incontra nell'erba alta, la si cattura, le si dà un soprannome e la si allena come qualsiasi altra.
Niente è scritto in anticipo. La specie che finisce nel salvataggio non è mai esistita prima e non esiste da nessun'altra parte.
Una parte di ciò che i giochi hanno sempre offerto è costruire qualcosa che sia tuo. Nella pratica ha voluto dire scegliere dentro un insieme già dato. Questo progetto serve a verificare se l'IA generativa rende tuo letteralmente vero e, soprattutto, se a qualcosa di letteralmente tuo il giocatore finisce davvero per affezionarsi.
Come si svolge
Tutto parte parlando con un'anziana signora nel Bosco Petalipoli. Descrivi la creatura che hai in mente; quelle parole diventano una specie mentre continui a giocare; e qualche minuto dopo ti aspetta nell'erba alta, pronta a essere incontrata, catturata e usata da lì in poi esattamente come qualsiasi altra cosa nel gioco. Tutto viene fatto sul momento: il nome, il tipo, le statistiche base, l'elenco delle mosse, entrambi gli sprite da lotta e l'icona nella squadra.
Una sessione completa, dall'inizio alla fine, è registrata qui: My Own Pokémon Generation — demo02.
Perché questo, e non un generatore di creature
Il problema interessante non è se un'IA sappia inventare un Pokémon, ma se sappia inventarne uno che il gioco riesca ad assorbire senza sfaldarsi. Lasciato a sé, un generatore produce qualcosa di inutilizzabile — un mostro da 900 punti di statistiche che rende banale il gioco — oppure di sgradevole: uno sprite malformato che smette del tutto di leggersi come una creatura.
Il lavoro di design, qui, non è la creatura: è lo spazio dentro cui la creatura viene generata. Le fasce delle statistiche, le regole che dicono quali mosse sono ammesse, le sagome che reggono uno sprite da 64×64, il vocabolario con cui al giocatore è concesso descrivere. Il modello esplora quello spazio. Non è lui a definirlo.
Questo progetto è il punto in cui la mia filosofia progettuale smette di essere una tesi e viene messa alla prova: definire gli obiettivi, i valori, i vincoli e i confini che danno forma a uno spazio progettuale, lasciare che la generazione avvenga al suo interno e scoprire se il risultato regge.
La struttura è la ricerca
L'LLM non scrive mai liberamente: riempie le caselle di uno schema fisso, e ogni risposta viene ricontrollata da un validatore. Le violazioni tornano indietro per essere rigenerate, insieme alla regola precisa che è stata infranta.
I vincoli di equilibrio tengono il gioco giocabile. Il totale delle statistiche base resta in una fascia fissa — da 280 a 360, all'incirca il livello di un Pokémon iniziale — con un intervallo per ogni singola statistica, e le specifiche fuori fascia vengono respinte senza appello. Le mosse sono estratte automaticamente dal codice di pokeemerald, poi filtrate al tipo della specie stessa o a Normale, togliendo le mosse che mettono KO in un colpo solo, gli effetti di autodistruzione e i danni fissi o smisurati. L'insieme che ne esce viene verificato nella sua solidità: abbastanza mosse offensive, almeno un attacco dello stesso tipo, al massimo una mossa di potenza elevata. I livelli di apprendimento li assegna la struttura in modo deterministico, non il modello. Tutto il resto è fissato — un'abilità per tipo, tasso di cattura, curva di crescita, rapporto tra i sessi, compatibilità con le MT — così la variazione individuale resta confinata alle caselle dello schema e le esecuzioni restano confrontabili.
I vincoli di aspetto impediscono al risultato di sfaldarsi. Gli schemi corporei vengono da una lista chiusa di sagome che reggono uno sprite da 64×64: quadrupede, roditore, uccello, lucertola. Il colore si sceglie da un elenco di nomi ammessi, e da lì il colore corporeo del Pokédex si ricava in modo meccanico. I tratti sono limitati a una o tre formule brevi già pronte, con una lista di esclusione che respinge tratti umani, sangue, armi e testo. Il prompt finale lo compone la struttura stessa, che vi aggiunge in coda una chiusa fissa: una sola creatura, corpo intero, anatomia coerente, niente arti in più, espressione calma.
Funziona, e lo si vede funzionare. In un'esecuzione registrata il modello ha proposto un totale di statistiche base di 380; il validatore l'ha respinto tre volte — 380, 360, 340 — finché la specifica non è rientrata nella fascia, a 320.
Come gira
Il gioco di per sé non genera niente. Il lavoro lo fa un processo Python residente sul PC, e le due metà si parlano attraverso una cassetta postale di file che uno script Lua dentro mGBA controlla a ogni fotogramma.
- Testo. Un modello locale (
qwen3:8b) trasforma le parole in una scheda di specie validata. - Immagine. Un modello di immagini disegna un'illustrazione di riferimento, poi tre viste coerenti tra loro: lo sprite da lotta di fronte, quello di spalle e l'icona nella squadra.
- Conversione. Il disegno viene quantizzato su una tavolozza comune di 15 colori e convertito nel formato sprite di pokeemerald.
- Codifica. Gli sprite diventano binari GBA: tile a 4bpp e 1bpp, tavolozze
gbapal, compressione LZ77 compatibile con il BIOS. - Iniezione. I binari vengono scritti in un'area riservata della ROM.
Scrivere nella cartuccia mentre il gioco è in esecuzione fa sì che l'istanza in corso prenda la nuova specie senza un riavvio, e la stessa identica sequenza di byte finisce su disco, così la modifica sopravvive a un ricaricamento.
Ciò che compare è permanente e irreversibile. Vaga per il mondo di gioco: che tu fugga o che tu perda, resta lì. Se lo metti KO, è perso per sempre.
Implementazione
Il generatore, la struttura di vincoli, i codificatori GBA e la patch lato gioco sono pubblicati per intero: github.com/takafumihoriuchi/my-own-pokemon-generation.
Poscritto — sull'attaccamento
Il prototipo risolve una domanda tecnica. Dietro di essa sta quella che mi interessa davvero: un Pokémon generato per te, che non esiste da nessun'altra parte, arriva a contare più di uno arrivato insieme al gioco?
Dopo aver giocato alla mia build — un campione di uno solo, e non va letto per più di questo — le condizioni che sembrano governare la risposta sono due.
- Quanto di te ci è entrato. Inserire sei parole è una forma di partecipazione, ma sottile: quello che torna indietro sembra consegnato più che fatto. A contare non pare la quantità di ciò che si mette dentro, ma la sua natura — la fatica, l'iterazione, lo spazio per tornare indietro e una parte di responsabilità su com'è venuto.
- La qualità. L'attaccamento sembra richiedere che la cosa generata superi una soglia. Sotto quella soglia, il fatto che sia unica e tua non basta da solo a reggere il sentimento.
Un caso venuto da fuori dal gioco parla di entrambe. Lavorando a mano con ChatGPT, avanti e indietro finché non sono stato soddisfatto, ho progettato una specie tutta mia: Hanagitsune. Ci sono affezionato. L'avevo fatta, non richiesta, e quello che ne è uscito superava l'asticella della qualità.
Su entrambe le condizioni si può intervenire. Un processo di fabbricazione più profondo — scegliere, correggere, scartare — sposta la prima; modelli migliori e una struttura di prompt progettata con più cura spostano la seconda. È lì che il lavoro prosegue.
Il risultato del prototipo non è quindi un verdetto sulla domanda: è la domanda resa misurabile, in due variabili che ora si possono muovere di proposito e osservare.
Costruito sulla decompilazione pret/pokeemerald come ricerca personale. Non viene distribuita alcuna ROM, patch per ROM o risorsa del gioco, e tutti gli sprite mostrati qui sono opere originali generate dall'IA. Pokémon è un marchio di Nintendo, Creatures Inc. e GAME FREAK Inc.; questo progetto non è affiliato a queste società né approvato da loro.