Pokémon Milikku Sendiri, Satu-satunya di Dunia

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.

Sepasang kakek dan nenek berdiri di Hutan Petalburg. Kotak dialog berbunyi: Katakan… makhluk seperti apa yang kaubayangkan?
Berbicara kepada nenek itu yang memulainya.
Layar masukan sistem obrolan sederhana berjudul «Bayangkan makhluknya:» dengan kata BEAUTIFUL, ATTACK, dan FIRE yang telah dimasukkan.
Kau memberinya enam kata lewat sistem obrolan sederhana bawaan Emerald.
Pemain berdiri di hutan di dekat rumput tinggi. Kotak dialog berbunyi: Rumput tinggi bergoyang… Ada sesuatu di dalamnya!
Penciptaan berjalan beberapa menit di PC. Sebuah lengkingan menandakan ia sudah siap.
Layar pertarungan. Seekor kadal merah dengan api di kepalanya berhadapan dengan pemain. Teksnya: FLAMEREL liar muncul!
FLAMEREL, kadal bertipe api, muncul dari rumput yang bergoyang.
Sebuah Poké Ball dilemparkan ke arah FLAMEREL dalam pertarungan.
Ia bisa ditangkap dengan Poké Ball, seperti spesies mana pun.
Layar yang meminta nama panggilan untuk FLAMEREL, dengan GGG yang dimasukkan.
Ia bisa diberi nama panggilan, seperti spesies mana pun.
Layar tim memperlihatkan spesies hasil penciptaan bersama tiga Pokémon biasa, dengan ikonnya sendiri.
Ia duduk di dalam tim dengan ikonnya sendiri, seperti spesies mana pun.
Layar informasi FLAMEREL: tipe api, kemampuan Blaze, sifat nakal, ditemui pada level 7 di Hutan Petalburg.
Layar ringkasannya berfungsi, seperti spesies mana pun.

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.

  1. Teks. Model lokal (qwen3:8b) mengubah kata-kata menjadi catatan spesies yang sudah tervalidasi.
  2. Gambar. Model gambar membuat ilustrasi rujukan, lalu tiga tampilan yang konsisten satu sama lain: sprite pertarungan depan, sprite belakang, dan ikon tim.
  3. Konversi. Gambarnya dikuantisasi ke palet 15 warna bersama dan diubah ke format sprite pokeemerald.
  4. Pengodean. Sprite menjadi biner GBA: ubin 4bpp dan 1bpp, palet gbapal, kompresi LZ77 yang cocok dengan BIOS.
  5. 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.

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.

Hanagitsune tampak depan: rubah hijau pucat yang ekornya berupa untaian sulur berbunga. Hanagitsune tampak belakang, memperlihatkan seluruh panjang ekor berbunganya.
Hanagitsune — penjaga hutan, dengan ekor yang sedang berbunga. Rumput dan bunga tumbuh di mana pun ia berlari, memanggil kehidupan baru bahkan di tanah tandus. Sosoknya dianggap pertanda bahwa hutan sedang tumbuh menuju masa depannya.

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.