Levelmu akhirnya berarti sesuatu
Sekarang setiap kursi di meja mendapat XP, kenaikan level pertama berharga 60 XP alih-alih dua pekan bermain, dan level memberi pangkat serta kartu koleksi.

Dengan bahasa sederhana
XP dulu hanyalah angka yang tidak melakukan apa-apa. Tidak ada satu pun bagian permainan yang bergantung pada levelmu, dan hanya pemenang partai yang mendapat XP — artinya sekitar dua pertiga orang di setiap meja memainkan satu partai penuh, kalah, melihat "XP partai +0", dan tidak punya alasan untuk merasa angka itu untuk mereka.
Sekarang setiap kursi mendapat bagian. Posisi akhirmu dibayar, monopoli yang kamu pegang saat partai berakhir dibayar, dan bertahan sampai akhir tanpa tersingkir juga dibayar. Kemenangan tetap yang terbesar — satu kemenangan bernilai lebih dari dua kali hasil kekalahan terbaik yang mungkin — tetapi kalah dengan baik tidak lagi bernilai nol.
| Yang kamu lakukan | XP |
|---|---|
| Memenangkan partai | +200 |
| Peringkat kedua | +50 |
| Peringkat ketiga | +30 |
| Peringkat keempat ke bawah | +15 |
| Setiap monopoli yang dipegang di akhir (maksimal 3) | +10 |
| Mencapai akhir tanpa tersingkir | +20 |
Kurvanya dibangun ulang di sekitar itu. Kenaikan level pertama kini berharga 60 XP, yang bisa dicapai satu partai yang lumayan — bahkan partai yang kalah — sementara dulu butuh sekitar sepuluh hari bermain. Level berikutnya menjadi mahal secara bertahap, bukan sekaligus.
Dan level sekarang memberi dua hal. Levelmu membawa pangkat — ada 7, dari Qualifier sampai Master — yang tampil di samping namamu di profil dan di papan peringkat. Lalu melewati level tonggak menjatuhkan satu kartu properti koleksi ke koleksimu: level 3, 5, 7, 10, 13, 16, 20, dan setelah itu setiap 5 level.

Untuk yang ingin tahu teknisnya
Bagian paling menarik dari ini adalah menghapus salinan. Aturan lama — satu level tiap 500 XP — ditulis tangan di lima migrasi basis data dan tiga berkas TypeScript, dan semuanya sudah saling menyimpang: data uji menanam level yang tidak bisa dihasilkan versi aturan mana pun. Kini ada satu kurva, dalam satu berkas, yang dicerminkan persis di basis data:
// packages/game-engine/src/progression.ts — one curve, mirrored exactly in SQL
step(L → L+1) = min(60 + 100·(L−1), 1500)
level 2 3 4 5 10 16 17+
xp 60 220 480 840 4,140 11,400 +1,500 eachAritmetikanya sengaja bilangan bulat saja — tanpa akar kuadrat, tanpa pecahan mengambang — supaya SQL dan TypeScript cocok di setiap batas secara persis, bukan kira-kira, dan sebuah tes yang berjalan di basis data sungguhan membandingkan keduanya nilai demi nilai. Kedua kurva menaik, jadi tidak ada yang menyalip siapa pun di papan peringkat saat penghitungan ulang berjalan.
Pengerjaannya memunculkan tiga bug yang sudah lama tayang dan tak tertangkap satu tes pun: bilah level di layar hasil membaca imbalan partai alih-alih total XP-mu, sehingga semua pemain di semua level melihat bilah yang sama membeku di 40%; memenangkan partai singkat tercatat sebagai kekalahan, jadi kemenangan itu tak pernah memajukan misi kemenangan; dan di mode tim rekan yang menang sama sekali tidak dibayar dan dicatat kalah, karena salah satu dari dua pemenang bukan peringkat pertama menurut nomor baris. Ketiganya sudah diperbaiki, dan masing-masing punya tes yang gagal tanpa perbaikannya.
