Repositori ini berisi daftar input yang akan mengalahkan Pokemon Platinum. Dengan menggunakan kombinasi teknik dan simulasi, kemajuan melalui permainan dijamin. Tidak ada manipulasi RNG yang terlibat, tidak diperlukan input frame-perfect, dan urutan input bersifat statis dan tidak berubah terlepas dari kejadian dalam game.
Anda dapat menemukan kode simulator di sini
Inputnya dapat ditemukan di direktori commands
. Setiap file berhubungan dengan bagian permainan yang berbeda, dan masing-masing mengalir satu sama lain dari 1 hingga 9. Ada juga file pembantu untuk mengubah memori permainan untuk pengujian, dan file untuk merekam input saat bermain.
Setiap file perintah berisi daftar perintah dengan format [
, dengan nilai pertama adalah perintah yang harus dilakukan, dan nilai kedua adalah berapa banyak frame untuk menampung perintah tersebut. Dalam kasus di mana perintahnya berupa serangkaian penekanan tombol,
menunjukkan berapa banyak pengulangan perintah yang harus dilakukan.
Perintah dasarnya adalah sebagai berikut:
Memerintah | Keterangan |
---|---|
A | A |
B | B |
kamus | Ke atas |
df | Turun |
jika | Kiri |
rf | Benar |
st | Awal |
X | X |
kamu | Y |
ub | Atas + B |
db | Bawah + B |
pon | Kiri + B |
rb | Kanan + B |
w | Tunggu |
Tombol lain, seperti pilih, L, dan R, tidak digunakan.
Dalam file perintah, perintah tambahan digunakan untuk mewakili serangkaian penekanan tombol dasar ini. Misalnya, untuk menekan A 10 kali, {'press_a', 10}
digunakan sebagai singkatan, bukan 10 perintah berturut-turut untuk menahan tombol A selama 60 frame.
Setiap file juga mendefinisikan hingga 12 perintah khusus yang melakukan berbagai rutinitas seperti menangani surat memori, melakukan tindakan pertempuran standar, atau menavigasi bagian permainan yang harus diulang.
Perhatikan bahwa perintah l
, r
, u
, dan d
adalah singkatan untuk mengambil satu langkah dalam suatu arah, dan lf
, rf
, uf
, dan df
adalah perintah untuk menahan tombol arah untuk sejumlah frame tertentu.
Daripada menulis perintah dengan tangan, jika Anda ingin mengubah urutan atau membuat yang baru, Anda dapat menggunakan file recordInputs
bersama dengan emulator bizhawk untuk mencatat masukan yang Anda buat dan kemudian mengeluarkannya dalam format yang dapat digunakan dalam skrip.
Untuk mencatat masukan Anda, pertama-tama Anda harus menghapus tombol pintas pengontrol, yaitu mencegah emulator menggunakan masukan Anda sebagai perintah secara langsung. Anda dapat melakukan ini melalui Config -> Controllers -> Misc -> Clear
. Anda dapat memuat kembali hotkey nanti dengan Misc -> Load Defaults
di menu yang sama.
Kemudian Anda harus membuka konsol lua melalui Tools -> Lua Console -> Script -> Open Script
, di mana Anda kemudian membuka skrip recordInputs.lua
. Setelah skrip mulai berjalan, skrip akan mencatat masukan Anda.
Tombol pintas tercantum dalam file recordInputs.lua
, namun dua yang paling penting adalah lshift
, yang menampilkan daftar perintah yang diformat setelah Anda selesai merekam, dan rshift
, yang menambahkan perintah waktu tunggu 60 frame. Perekam input TIDAK mencatat waktu idle, artinya jika Anda tidak menambahkan waktu tunggu dengan rshift
, ia hanya akan menjalankan perintah dengan cepat satu demi satu tanpa jeda.
Hal ini menyebabkan daftar keluaran dari masukan, dan apa yang sebenarnya Anda lakukan saat bermain, menjadi berbeda. Sangat mudah untuk lupa menambahkan waktu tunggu, yang akan menyebabkan masalah saat memutar ulang. Namun keuntungannya, tidak ada tekanan untuk mencatat masukan pada pengatur waktu.
Tombol lainnya sesuai dengan default emulator, tombol panah untuk gerakan, x
, z
, s
, a
untuk A
, B
, X
, Y
, dan enter
untuk memulai.
Mungkin ada beberapa volatilitas pada kontrol sentuh, yang merupakan masukan yang diperlukan di awal permainan. Untuk melaju, Anda harus mengetuk bagian tengah layar dan mengenai bagian tengah pokeball. Ini adalah masukan analog non-standar, dan dilambangkan dalam kode sebagai touch_middle
. Ini hanya terjadi sekali.
Ada juga kemungkinan bahwa masukan tersebut tidak memperhitungkan sesuatu yang tidak saya sadari, atau tidak terpikir untuk saya periksa. Kesalahan manusia ini selalu ada, tidak peduli berapa kali saya memeriksa dan memeriksa ulang urutan masalah dan bug.
Pokemon menggunakan Linear Congruent Random Number Generator (LCRNG) untuk menghasilkan sebagian besar angka acaknya. Cara kerjanya adalah dengan membuat rangkaian angka yang tampak cukup acak, lalu menelusuri urutan tersebut satu per satu untuk menghasilkan angka "acak".
Game pokemon generasi 4 berbeda dengan pendahulunya karena tidak menggilir nomor acak, mereka hanya menggunakan nomor acak jika diperlukan.
Misalnya, di Ruby/Sapphire/Emerald, game akan menelusuri urutan angka acak setiap frame lainnya, bahkan jika tidak ada yang terjadi dalam game, dan menghasilkan angka berapa pun yang aktif saat game memintanya.
Di Diamond/Pearl/Platinum, generator angka acak tetap statis hingga permainan meminta nilai. Artinya jika Anda berdiri di area kosong dalam permainan, pembuat nomor acak tidak akan melakukan apa pun.
Jika Anda menyimulasikan semua kemungkinan hasil dari generator angka acak untuk tindakan tertentu, misalnya melempar koin, dalam game Gen 4 hasil ini bersifat deterministik (dengan asumsi Anda berada di area kosong atau "tenang") terlepas dari waktu Anda.
Dalam game Gen 3, hasil ini tidak bersifat deterministik, namun bergantung pada waktu Anda. Artinya jika Anda melempar koin sekarang, hasilnya bisa berbeda dibandingkan jika Anda melemparnya 2 detik kemudian.
Untuk tujuan kami, kualitas game Gen 4 ini membuat meskipun pemain manusia menggunakan daftar input ini untuk memainkan game, daftar tersebut akan tetap berfungsi dengan baik, karena pemain manusia tidak akan melakukan input pada waktu yang tepat, dan baik menekan tombol sedikit lebih awal atau sedikit terlambat. Selama tombol-tombol tersebut tidak ditekan terlalu dini, Anda dapat menundanya untuk jangka waktu yang tidak terbatas, tanpa mempengaruhi hasil permainan (dengan asumsi Anda melakukannya, pada akhirnya, Anda akan menekan tombol-tombol tersebut).
Dengan menggunakan prinsip ini, mensimulasikan semua 4 miliar kemungkinan benih, atau posisi awal, pada urutan nomor acak Pokemon Platinum memungkinkan kita memprediksi apa yang akan terjadi di semua kemungkinan permainan. Misalnya, pelemparan koin 100 kali mempunyai jumlah hasil yang deterministik. Dengan memeriksa semuanya, kita dapat menemukan skenario terburuk/terbaik, yang dalam hal ini adalah pembagian 80/20.
Untuk pelemparan koin, proses ini sangat mirip dengan penggunaan matematika untuk menentukan nilai yang diharapkan menggunakan statistik sederhana. Untuk hal-hal yang lebih rumit, seperti pertarungan Pokemon, menggunakan matematika untuk menentukan hasilnya menjadi jauh lebih sulit. Lebih mudah untuk mensimulasikan semua 4 miliar kemungkinan daripada menghitung probabilitas jika ada peluang crit, miss, damage roll, AI rng, peluang efek sekunder, dll.
Melakukan hal ini memberi kita wawasan tentang strategi mana yang menang di setiap kemungkinan permainan, dan memungkinkan saya mengalahkan pelatih yang berbeda dengan kepastian 100%, bahkan jika secara matematis ada peluang untuk gagal atau kalah.
Hasil akhirnya adalah rangkaian masukan ini, yang seharusnya mengalahkan setiap permainan platinum dari awal hingga akhir tanpa ada kemungkinan gagal, kecuali ada kesalahan masukan atau bug.