Pokémon Milikku Sendiri, Satu-satunya di Dunia
oleh Takafumi Horiuchi
Juli 2026
Ringkasan
Di tengah permainan, pada sebuah jendela di dalam permainan itu sendiri, pemain mengetikkan beberapa kata. Sementara permainan terus berjalan, AI mengubahnya menjadi spesies Pokémon yang benar-benar baru — gambar, nama, tipe, statistik dasar, dan jurus — lalu mendaftarkannya sebagai spesies penuh. Kau menemuinya di rumput tinggi, menangkapnya, memberinya nama panggilan, dan membesarkannya seperti Pokémon lain mana pun.
Tidak ada yang disiapkan sebelumnya. Spesies yang akhirnya tersimpan di berkas simpanan belum pernah ada sebelumnya dan tidak ada di tempat lain mana pun.
Sebagian dari yang selalu ditawarkan permainan video adalah membuat sesuatu yang menjadi milikmu. Dalam praktiknya, itu berarti memilih dari kumpulan yang sudah tetap. Proyek ini ada untuk menguji apakah AI generatif membuat kata milikmu benar secara harfiah — dan, yang lebih penting, apakah sesuatu yang benar-benar milikmu adalah sesuatu yang benar-benar melekat di hati pemain.
Jalannya
Semua dimulai dengan berbicara kepada seorang nenek di Hutan Petalburg. Kau menjelaskan makhluk yang ada di kepalamu; kata-kata itu diubah menjadi spesies sementara kau terus bermain; dan beberapa menit kemudian ia sudah menunggu di rumput tinggi — untuk ditemui, ditangkap, dan sejak itu dipakai persis seperti apa pun yang lain di dalam permainan. Semuanya dibuat di tempat: nama, tipe, statistik dasar, susunan jurus, kedua sprite pertarungan, dan ikon tim.
Satu putaran penuh, dari awal sampai akhir, terekam di sini: My Own Pokémon Generation — demo02.
Mengapa ini, dan bukan generator makhluk
Persoalan yang menarik bukanlah apakah AI bisa menciptakan seekor Pokémon. Persoalannya adalah apakah ia bisa menciptakan satu yang mampu diserap permainan tanpa membuatnya berantakan. Dibiarkan sendiri, sebuah generator menghasilkan sesuatu yang tak terpakai — monster dengan total statistik 900 yang membuat permainan kehilangan tantangan — atau sesuatu yang tak enak dilihat: sprite cacat yang tak lagi terbaca sebagai makhluk.
Jadi pekerjaan desain di sini bukanlah makhluknya. Melainkan ruang tempat makhluk itu dihasilkan: pita nilai statistik, aturan kelayakan jurus, siluet yang sanggup bertahan dalam sprite 64×64, kosakata yang bahkan boleh dipakai pemain untuk menggambarkan. Model menjelajahi ruang itu. Ia tidak ikut menentukannya.
Proyek ini adalah tempat filosofi desain saya berhenti menjadi argumen dan mulai diuji: mendefinisikan tujuan, nilai, batasan, dan batas wilayah yang membentuk sebuah ruang desain, membiarkan penciptaan terjadi di dalamnya, lalu mencari tahu apakah hasilnya bertahan.
Kerangka itulah risetnya
LLM tidak pernah menulis bebas. Ia mengisi bagian-bagian dari skema tetap, dan setiap keluaran diperiksa ulang oleh sebuah validator. Pelanggaran dikembalikan untuk dibuat ulang bersama aturan tepat yang dilanggar.
Batasan keseimbangan menjaga permainan tetap layak dimainkan. Total statistik dasar ditahan pada pita tetap — 280 sampai 360, kira-kira setara Pokémon awal — dengan rentang untuk tiap statistik, dan spesifikasi di luar pita ditolak langsung. Jurus diambil otomatis dari kode sumber pokeemerald, lalu disaring ke tipe milik spesies itu sendiri atau Normal, dengan membuang jurus sekali-pukul-tumbang, efek meledakkan diri, serta kerusakan tetap atau berlebihan. Kumpulan yang tersisa diperiksa kewajarannya: jurus serang cukup, setidaknya satu serangan bertipe sama, paling banyak satu jurus berkekuatan tinggi. Penetapan level dilakukan secara pasti oleh kerangka, bukan oleh model. Selebihnya dipatok — satu kemampuan per tipe, laju tangkap, kurva pertumbuhan, rasio jenis kelamin, kecocokan TM — sehingga keragaman antarindividu tetap terkurung di bagian-bagian skema dan tiap percobaan tetap bisa dibandingkan.
Batasan penampilan menjaga keluaran agar tidak rusak. Rancangan tubuh diambil dari daftar putih siluet yang sanggup bertahan dalam sprite 64×64: berkaki empat, hewan pengerat, burung, kadal. Warna dipilih dari daftar putih bernama, dan warna tubuh untuk Pokédex diturunkan secara mekanis. Ciri dibatasi satu sampai tiga frasa pendek yang sudah tersedia, dengan daftar larangan yang menolak ciri manusia, darah, senjata, dan tulisan. Kerangka menyusun sendiri perintah akhirnya dan menambahkan penutup tetap: satu makhluk, seluruh badan, anatomi yang masuk akal, tanpa anggota tubuh berlebih, air muka tenang.
Ini bekerja, dan bisa dilihat bekerja. Pada satu percobaan yang terekam, model mengusulkan total statistik dasar 380; validator menolaknya tiga kali — 380, 360, 340 — sampai spesifikasinya mendarat di dalam pita, pada 320.
Cara kerjanya
Permainannya sendiri tidak menghasilkan apa pun. Yang bekerja adalah proses Python yang menetap di PC, dan kedua belah pihak berbicara lewat kotak surat berupa berkas yang dijenguk skrip Lua di mGBA pada setiap bingkai.
- Teks. Model lokal (
qwen3:8b) mengubah kata-kata menjadi catatan spesies yang sudah tervalidasi. - Gambar. Model gambar membuat ilustrasi rujukan, lalu tiga tampilan yang konsisten satu sama lain: sprite pertarungan depan, sprite belakang, dan ikon tim.
- Konversi. Gambarnya dikuantisasi ke palet 15 warna bersama dan diubah ke format sprite pokeemerald.
- Pengodean. Sprite menjadi biner GBA: ubin 4bpp dan 1bpp, palet
gbapal, kompresi LZ77 yang cocok dengan BIOS. - Penyisipan. Biner ditulis ke wilayah ROM yang sudah disediakan.
Menulis ke kaset saat permainan berjalan berarti instansi yang sedang jalan menangkap spesies baru itu tanpa perlu diulang dari awal, dan urutan bita yang sama juga masuk ke cakram, sehingga perubahannya bertahan setelah dimuat ulang.
Apa yang muncul bersifat menetap dan tak bisa ditarik kembali. Ia berkeliaran: kalau kau kabur atau kalah, ia tetap ada di dunia. Kalau kau kalahkan, ia hilang untuk selamanya.
Implementasi
Generator, kerangka batasan, pengode GBA, dan tambalan di sisi permainan diterbitkan seluruhnya: github.com/takafumihoriuchi/my-own-pokemon-generation.
Catatan penutup — tentang kelekatan
Prototipe ini menyelesaikan satu persoalan teknis. Di belakangnya duduk persoalan yang sebenarnya saya pedulikan: apakah Pokémon yang diciptakan untukmu, yang tidak ada di tempat lain mana pun, akhirnya berarti lebih daripada yang sudah ada sejak awal di dalam permainan?
Dari memainkan versi buatan saya sendiri — satu sampel, dan tak layak dibaca lebih dari itu — tampak dua syarat yang menentukan jawabannya.
- Seberapa banyak dirimu yang masuk ke dalamnya. Memasukkan enam kata memang keterlibatan, tetapi keterlibatan yang tipis: yang kembali terasa diantarkan, bukan dibuat. Yang tampaknya menentukan bukan banyaknya masukan, melainkan sifatnya — usaha, pengulangan, ruang untuk memperbaiki, dan sedikit tanggung jawab atas bagaimana hasilnya.
- Mutu. Kelekatan tampaknya menuntut agar yang dihasilkan melewati suatu ambang. Di bawah itu, kenyataan bahwa sesuatu unik dan milikmu saja tidak cukup menyangga perasaannya.
Ada satu kasus dari luar permainan yang menyentuh keduanya. Dengan bekerja langsung bersama ChatGPT, bolak-balik sampai saya puas, saya merancang satu spesies sendiri — Hanagitsune. Saya lekat padanya. Saya membuatnya, bukan memesannya, dan yang keluar melewati ambang mutunya.
Kedua syarat itu bisa disentuh. Proses pembuatan yang lebih dalam — memilih, memperbaiki, menolak — menggerakkan yang pertama; model yang lebih baik dan kerangka perintah yang dirancang lebih cermat menggerakkan yang kedua. Ke sanalah ini melangkah.
Jadi hasil prototipe ini bukan vonis atas pertanyaannya. Ia adalah pertanyaan yang dibuat terukur: dua peubah yang kini bisa digerakkan dengan sengaja dan diamati.
Dibangun di atas dekompilasi pret/pokeemerald sebagai riset pribadi. Tidak ada ROM, tambalan ROM, atau aset permainan yang disebarkan, dan setiap sprite di sini adalah karya asli yang dihasilkan AI. Pokémon adalah merek dagang Nintendo, Creatures Inc., dan GAME FREAK Inc.; proyek ini tidak berafiliasi dengan mereka dan tidak mendapat dukungan mereka.