Breeding di Palworld tampak sederhana ketika Anda hanya memasangkan dua Pal ke dalam Breeding Farm. Dari sudut pandang pemrograman, mekanik itu justru jebakan pemodelan data yang menarik. Airball Nick, penulis artikel sumber di DEV Community, membangun dan memelihara Palworld Breeding Calculator gratis untuk Palworld 1.0. Alat itu memungkinkan pemain memilih dua induk dan melihat telur yang dihasilkan, memilih target dan menemukan induk yang valid, merencanakan pohon breeding multi-generasi, serta memeriksa data di baliknya. Proyek ini milik Airball Nick, bukan Zennovan; kalkulatornya tersedia di palworldonline.net. Kalkulator ini gratis digunakan, tidak memerlukan akun, dan tidak berafiliasi dengan Pocketpair maupun Garena. Tulisan ini adalah kisah pembangunannya: bagaimana kalkulator akhirnya berbentuk aplikasi Next.js statis yang ditenagai data game terbundel, bukan API runtime.
Formula Deterministik CombiRank Palworld
Mekanik intinya bersifat deterministik. Batasan pertama yang berguna: breeding Palworld tidak kabur. Untuk pasangan biasa, setiap Pal memiliki nilai tersembunyi yang biasa disebut CombiRank. Game merata-ratakan rank kedua induk, membulatkan ke atas, lalu mengembalikan Pal terdekat di dalam kolam breeding biasa. Secara konsep: `function calculateTargetRank(firstRank, secondRank) { return Math.floor((firstRank + secondRank + 1) / 2); }` Kalkulator kemudian mencari Pal terdekat terhadap target rank tersebut hanya di kolam biasa. Masalahnya, formula biasa tidak menutupi semuanya. Palworld 1.0 memiliki 299 entri Pal dalam dataset breeding, 183 entri dalam pool formula biasa, 164 baris combo khusus yang menimpa formula, dan 297 Pal yang benar-benar bisa masuk Breeding Farm. Jadi algoritmanya bukan sekadar 'merata-ratakan dua angka': periksa apakah pasangan induk punya combo khusus, jika ada kembalikan anak tetap, jika tidak hitung target CombiRank, cari hanya di pool formula biasa, lalu terapkan aturan tie dataset secara konsisten.
Arsitektur Modul Breeding Bersama
Modul breeding bersama menjadi jantung aplikasi. Aplikasi memiliki pustaka breeding bersama yang memuat data JSON lokal dan mengekspos primitif yang sama di mana pun: `calculateOffspring(first, second)`, `buildReverseBreedingMap()`, `rankedParentPairs(target)`, pencarian Pal berdasarkan nama dan slug, kelayakan farm beserta flag unbreedable, serta pembantu tampilan untuk tanggal data dan kondisi gender. Primitif tersebut membuat halaman-halaman ini saling sepakat: kalkulator pasangan di beranda, perencana reverse, pohon breeding, setiap panduan per-Pal yang dihasilkan, dan endpoint dataset terbuka. Ini penting karena kalkulator breeding mudah mengalami drift. Jika beranda, perencana pohon, dan ekspor data masing-masing membawa salinan formula mereka sendiri, salah satunya pada akhirnya pasti keliru. Dengan satu modul terpusat, koreksi atau perubahan formula cukup diterapkan sekali dan langsung berlaku untuk seluruh rute, termasuk halaman statis dan keluaran data publik.
Halaman statis dianggap sebagai fitur, bukan keterbatasan. Penulis ingin situs bekerja lebih seperti referensi daripada kerangka aplikasi. Halaman-halaman penting seharusnya bisa diindeks, ditautkan, dan cepat tanpa menunggu data runtime. Situs saat ini adalah proyek Next.js App Router dengan: beranda berorientasi kalkulator, grafik All Pals di `/breeding`, panduan breeding per-Pal yang dihasilkan otomatis di `/breeding/[pal]`, perencana berorientasi target di `/reverse-planner`, pohon breeding visual di `/breeding-tree`, peluang pewarisan pasif di `/breeding/passives`, dan data terbuka di `/data`. Data breeding dan artwork Pal dibundel secara lokal, sehingga kalkulator inti tidak bergantung pada CDN gambar pihak ketiga atau permintaan basis data saat runtime. Untuk jenis alat ini, statis generation cocok: dataset berubah mengikuti versi game, bukan per pengguna; setiap halaman Pal bisa dibangun sejak awal; mesin pencari bisa merayapi konten nyata alih-alih aplikasi klien yang kosong; kalkulator tetap hydrate di titik-titik yang membutuhkan interaktivitas. Hasilnya lebih dekat ke referensi game dengan alat terpasang, bukan kalkulator single-page.
Optimasi Pengalaman Pengguna Lewat Reverse Lookup
Reverse lookup mengubah pengalaman pengguna. Sebagian besar pemain tidak bertanya, 'Apa hasil pasangan ini?' Mereka bertanya, 'Bagaimana cara mendapatkan Anubis?' atau 'Apa yang bisa saya breed dari Pal yang sudah saya punya?' Karena itu aplikasi membangun peta reverse dengan menyeluruh melewati semua induk yang layak farm dan menyimpan setiap hasil anak: `for (let i = 0; i < parents.length; i += 1) { for (let j = i; j < parents.length; j += 1) { const first = parents[i]; const second = parents[j]; const result = calculateOffspring(first, second); // store [first, second] under result.child } }` Indeks reverse itu menghidupkan perencana berorientasi target dan halaman per-Pal. Halaman target dapat menampilkan pasangan induk yang menghasilkannya, sementara pohon breeding bisa terus memperluas rute induk mundur per generasi. Pola UI yang berguna: pilih Pal target, bandingkan pasangan induk, utamakan pasangan yang induk paling langkanya paling mudah didapat, lalu perluas induk yang lebih sulit satu generasi lagi bila perlu. Alur itu jauh lebih dekat dengan cara pemain sebenarnya melakukan breeding.
Menangani Kasus Khusus dan Gender Spesifik
Model datanya punya beberapa titik tajam. Bagian paling menarik dari proyek ini bukan UI, melainkan koreksinya. Jebakan pertama: Katress + Wixen. Sebagian besar combo breeding tak berurutan; induk A dan induk B bisa ditukar dan anaknya tetap sama. Katress + Wixen adalah pengecualian: anaknya bergantung spesies mana yang betina. Katress betina bersama Wixen jantan menghasilkan Katress Ignis; Katress jantan bersama Wixen betina menghasilkan Wixen Noct. Jika peta combo khusus memakai kunci pasangan terurut seperti `Katress|Wixen`, baris kedua menimpa baris pertama dan satu anak hilang diam-diam. Perbaikannya: simpan semua hasil untuk satu pasangan, lalu tampilkan alternatif beserta kondisi gender. Jebakan kedua: baris file game tidak selalu cukup untuk menentukan apakah Pal bisa breed di game. Panthalus dan Astralym punya baris self-pair dalam data, tetapi keduanya tidak bisa masuk Breeding Farm; Panthalus tidak bisa memakai fasilitas base, dan Astralym tidak bisa diperoleh. Aturan itu tidak bisa disimpulkan dengan aman dari `special_combos`, sehingga dataset kini punya blok `breeding_exclusions` eksplisit berisi sumber dan tanggal verifikasi. Jebakan ketiga adalah bug penulis sendiri: awalnya setiap baris X + X -> X dianggap 'catch-only', terlalu luas. Relaxaurus Lux dan Mossanda Lux punya baris self-pair, tetapi juga punya combo lintas spesies sungguhan. Aturan yang benar: Pal hanya catch-only jika semua combo terdaftarnya adalah self-pair. Kesalahan semacam itulah alasan situs kini memiliki log koreksi publik.
Dataset dipublikasikan dengan sengaja. Kalkulator mengekspos data yang sama persis yang ia gunakan: All Pals JSON, All Pals CSV, Special combos JSON, Special combos CSV, serta dokumentasi data dan koreksi. Endpoint-nya berupa file statis atau keluaran rute statis dengan CORS terbuka, sehingga alat berbasis browser lain bisa mengambilnya langsung. Contohnya: `const data = await fetch("https://www.palworldonline.net/api/pals.json").then((response) => response.json()); const anubis = data.pals.find((pal) => pal.name === "Anubis"); console.log(anubis.parent_pair_count);` Datanya memuat field yang mudah salah jika setiap alat menurunkannya ulang sendiri: `breedable`, `breeding_farm_eligible`, `special_only`, `parent_pair_count`, elemen, `male_percent`, dan field gender untuk combo khusus. Penulis lebih suka alat lain memakai data yang sudah dikoreksi daripada mengulang bug yang sama. Keputusan mempublikasikan data juga membuat kesalahan lebih cepat terdeteksi: ketika sebuah hasil terlihat aneh, pengembang lain dapat memeriksa baris data yang mendasarinya, membandingkan dengan file game, lalu melaporkan perbaikan beserta buktinya melalui log koreksi publik, alih-alih menebak-nebak isi hitam kalkulator.
Pelajaran Utama dari Pengembangan Proyek
- Tiga keputusan terbukti memberi hasil. Pertama, sentralisasi formula. Setiap rute dan ekspor memanggil logika kalkulator yang sama. Kedua, jadikan koreksi sebagai data eksplisit. Jika sesuatu tidak bisa disimpulkan dari baris combo file game, ia layak mendapat field sendiri. Ketiga, publikasikan datanya. Alat dengan log koreksi terlihat lebih mudah dipercaya daripada kotak hitam yang hanya menampilkan jawaban akhir. Jika Anda bermain Palworld, kalkulator tersedia di https://www.palworldonline.net/ ; jika Anda membangun alat, dataset tersedia di https://www.palworldonline.net/data ; dan jika Anda menemukan hasil breeding yang tampak salah, penulis ingin mengetahuinya. Data game terus berubah, dan kalkulator yang hanya berguna adalah kalkulator yang bisa dikoreksi.