Bagaimana cara menerapkan sistem "savegame" berbasis kata sandi bergaya retro?


20

Bagaimana saya membuat sistem kata sandi untuk game pemain tunggal seperti yang digunakan di game konsol yang lebih lama?

Misalnya, Mega Man X menyimpan pekerjaan dengan memberi Anda serangkaian angka yang dapat Anda masukkan nanti untuk memuat penyimpanan Anda.


3
Jangan lakukan apa yang dilakukan Donkey Kong (NES) - yang memungkinkan Anda menyimpan ke dalam kartrid tetapi TIDAK MEMELIHARA HIDUP COUNT - sehingga Anda akan memiliki banyak nyawa dari tingkat pertama (seperti 24) simpan, pergi tidur, BANGUN, BANGUN DENGAN 3 - Saya benci itu
Alec Teal

10
Catatan Pedantic: sistem kata sandi tidak menyimpan status permainan, ia memuat yang sudah ditentukan sebelumnya .
Lilienthal

5
@Lilienthal belum tentu. Mungkin itu hanya semacam "dump" dari beberapa variabel state, diacak dengan aljorythm dua arah deterministik.
o0 '.

2
@ Lohoris Ya, jika Anda memiliki entropi yang cukup di kata sandi Anda, Anda dapat menganggapnya sebagai kondisi tersimpan yang cukup mirip dengan savegames saat ini. Bagaimanapun, keduanya membutuhkan cara untuk mengekspor dan mengimpor kondisi gim. Namun, entropi yang diperlukan untuk apa pun yang menyerupai penyelamatan sejati (lokasi / pos pemeriksaan yang tepat, nyawa, musuh yang terbunuh, jumlah amunisi, ....) akan membutuhkan kata sandi yang sangat panjang dan algoritma yang sangat kompleks. Untuk kasus-kasus di mana keputusan untuk menggunakan kata sandi lebih dari savegames masuk akal (jika ada), pepatah harus benar.
Lilienthal

3
@AlecTeal Apa sebenarnya yang bisa "bodoh"? Saya mengevaluasi kata sandi terhadap jumlah data yang disimpan dalam permainan kontemporer, di mana mereka jelas tidak cocok untuk sebagian besar.
Lilienthal

Jawaban:


32

Pertama, uraikan status permainan Anda (atau lebih tepatnya, aspek status yang ingin Anda simpan). Dalam kasus gim gaya Mega Man, Anda dapat melacak bos level akhir mana yang telah Anda bunuh, jumlah powerup seperti tangki energi yang Anda miliki, dan sebagainya.

Kemas semua data itu ke dalam bidang bit, yaitu, tetapkan jumlah bit yang sesuai untuk setiap nilai:

  • Membunuh bos 1 (satu bit)
  • Membunuh bos 2 (satu bit)
  • Membunuh bos 3 (satu bit)
  • Membunuh bos 4 (satu bit)
  • Tangki energi ( x total 5) (3 bit)
  • Membuka beberapa pencapaian (satu bit)

Contoh kami memiliki total 8 bit, yang berarti satu karakter dapat mewakili kata sandi. Dalam praktiknya, gim Anda cenderung memiliki lebih banyak status dan karenanya membutuhkan lebih banyak bit total dan lebih banyak karakter. Seperti disebutkan dalam komentar di sini dan di tempat lain dalam pertanyaan ini, pendekatan ini berfungsi untuk game "retro" atau game lain di mana ukuran kondisi game yang ditangkap masuk akal. Di luar titik tertentu, Anda mungkin menemukan bahwa kompleksitas kata sandi yang diperlukan untuk menyandikan negara Anda terlalu besar.

Untuk mengurangi kemungkinan pengamatan kasual memecahkan kata sandi, Anda dapat mengubah tata letak bit sehingga Anda memperkenalkan bit dummy (yang tidak memiliki efek pada kondisi permainan tetapi yang membuat kata sandi terlihat berbeda ketika Anda menafsirkan semua bit sebagai karakter) atau menjalankan itu melalui beberapa operasi hash-seperti reversibel untuk mengacak bit di sekitar sehingga semua bit " kotak X dibunuh " tidak tepat di sebelah satu sama lain, membuat kata sandi sekuensial yang sesuai terlihat sangat berbeda, atau memperkenalkan nilai checksum.

Jika Anda menggali, ada sedikit informasi tentang sistem yang digunakan untuk beberapa permainan kata sandi yang lebih populer di luar sana:

Anda dapat membaca tentang itu untuk inspirasi tambahan.


4
Ingatlah untuk memastikan bahwa kata sandi "save state" semuanya mudah diketik dan, lebih disukai, tidak ambigu (mis., Gunakan '0' atau 'O' tetapi tidak keduanya).
minnmass

4
@minnmass poin bonus jika Anda secara implisit mengkonversi karakter yang mirip ke standar Anda, sehingga mengetik 'O' bukannya '0' masih diterjemahkan menjadi '0'.

8
@ NPSF3000 Karena dalam hal ini "kata sandi" bukan ukuran otentikasi; "kata sandi" adalah media penyimpanan itu sendiri.
Schilcote

6
@ NPSF3000 jika tidak jelas bagi Anda dari pertanyaan, maka Anda perlu membaca ulang pertanyaan atau mempelajari materi latar belakang.
hobbs

2
@ NPSF3000 OP dengan jelas mengatakan "Gaya Retro" dan merujuk Megaman untuk mengonfirmasi, yang tidak ambigu. Pelajari tentang masalah ini, pahamilah bahwa ini tidak terkait dengan keamanan, dan tolong berhenti mencoba untuk membela apa yang dimulai sebagai ketidaktahuan yang jujur ​​dan dapat dimaafkan.
MickLH

3

Game-game itu hanya menyelamatkan negara yang saya percayai. Kata sandi hanya merujuk pada level yang akan dimuat. Cukup gunakan kamus untuk hal seperti ini.

Jika sedikit lebih rumit seperti memiliki senjata atau penguat tertentu, Anda dapat mengenkripsi status ke kode hash pendek (tapi cukup panjang).

Tapi saya sangat menyarankan Anda untuk tidak menggunakan ini. Kata sandi akan menyebar dengan cepat di Internet dan segera semua orang telah memenangkan permainan Anda.


9
Penyebaran kata sandi di internet bisa bagus. Menyontek bisa menyenangkan, dan dalam permainan pemain tunggal, pemain hanya menipu diri mereka sendiri.
Anko

@Anko Ya, saya tidak suka selingkuh dan hampir tidak melakukannya, jadi saya bias. Tapi dari pengalaman saya sendiri, permainan saya akan mengumpulkan debu jauh lebih cepat dan lebih cepat ketika saya menipu cara saya.
Madmenyo

"... hanya referensi level untuk dimuat." Sejauh ini tidak benar dalam semua kasus. Beberapa kata sandi juga merujuk bos, terbunuh, powerups diperoleh, dll. Kedua, memberi tahu bahwa kata sandi dapat disebarkan adalah satu hal - masalah di dunia kita yang sangat terhubung. Mengatakan bahwa opsi curang harus dihapus karena ANDA tidak suka curang adalah hal lain. Apa yang Anda sukai tidak persis seperti yang orang lain sukai. Ini bukan tentang apa yang Anda suka, itu konsumen . Kecurangan / cara pintas adalah opsi penting - terutama untuk gim pemain tunggal.
WernerCD

@WernerCD pertama saya berbicara tentang sistem yang lebih kompleks. Saya baru mulai dengan sistem kata sandi yang sederhana. Saya TIDAK mengklaim apa pun. Kedua, saya tidak mengatakan apa pun tentang menyontek dalam jawaban. Saya hanya memberikan balasan BIASED saya pada komentar dan bahkan mengatakan bahwa saya bias dan sadar akan poin Anda bahwa itu bukan yang saya sukai. Tetapi jika tidak ada yang mengatakan apa yang dia suka atau tidak suka, bagaimana Anda tahu apa yang disukai orang lain? Saya masih berpikir sistem seperti itu adalah waktunya dan kecurangan abad 21 dicapai secara berbeda. Lain kali Anda harus membaca lebih cermat sebelum menulis komentar seperti itu IMHO.
Madmenyo

Jika Anda memiliki savegames, orang-orang juga akan membagikan savegames.
Dewi Morgan

1

Yah, pada dasarnya Anda bisa melakukannya dengan cara ini:

Atasan terbunuh = 7

Jumlah koin = 36

Owns Sword = 0 (Tidak)

Owns Heart = 1 (Ya)

Level Saat Ini = 6

Dunia Saat Ini = 9

Kesehatan = 100

Kode = 7V36R0A1T6O9A100

Pada dasarnya setiap huruf memisahkan Jenis


-3

Sementara solusi seperti sistem karakter-ke-negara Josh Petrie memiliki manfaat (ukuran simpan kecil, bekerja pada semua salinan permainan), mereka menggabungkan desain game dan sistem keadaan untuk secara intrinsik ke sistem kata sandi. Setiap perubahan pada kata sandi atau status atau desain dan seluruh sistem berantakan.

Solusi yang jauh lebih sederhana adalah membangun sistem penyimpanan Anda seperti biasa, dan cukup menambahkan sistem kata sandi di atasnya. Ini bisa sesederhana menyimpan kata sandi di save (mungkin dua kali lipat sebagai nama file) dan memvalidasinya saat dimuat, atau serumit menggunakan salah satu dari banyak perpustakaan enkripsi di sekitarnya (yang cukup sepele).


Tampaknya ada beberapa kebingungan di sekitar jawaban ini.

1) Operator hanya meminta kata sandi yang memungkinkan mereka memuat save ... tidak ada persyaratan bahwa kata sandi harus disimpan.

2) Banyak game saat ini memiliki persyaratan penyimpanan yang signifikan, kami baru saja membangun sistem save / load cepat secara internal yang menghasilkan file 10MB ... untuk game kuis! Sistem penyimpanan Josh Petrie , sementara valid sangat terbatas - segera setelah sistem toko menjadi non-sepele, kata sandi harus sangat panjang untuk bertahan semua data terkait.

Misalnya, apa yang terjadi jika ada 30 bos? 20 medali? Apakah kita setengah jalan menuju prestasi? Di level apa dia? Berapa banyak bit yang kita sisihkan untuk kesehatan, kehidupan, koin, xp? Bagaimana jika snapshot bukan dari keadaan di antara level ... tetapi setengah jalan melalui level - posisi pemain, musuh, proyektil, medan yang hancur / berubah tiba-tiba menambah banyak kondisi yang perlu disimpan.

Untuk perspektif, dengan asumsi alfabet 30 karakter dan kata sandi sepuluh huruf, kami memiliki informasi untuk menyimpan sekitar 50 bit. Ini tidak biasa untuk melihat penggunaan game / mesin hingga 320 bit hanya untuk menyimpan posisi, rotasi, dan penskalaan objek tunggal. Tentu, Anda dapat melakukan segala macam trik pengoptimalan untuk melakukan lebih banyak dengan lebih sedikit ... tetapi pada akhirnya Anda menggunakan waktu yang didedikasikan untuk membuat permainan menjadi menyenangkan - salah satu optimasi terburuk yang dapat Anda lakukan.


3
Saya pikir masalahnya di sini, dan dengan komentar Anda di atas, adalah bahwa keamanan kriptografi bukanlah tujuan menyelamatkan keadaan gim sebagai bit dalam kata sandi. Password terdiri dalam cara tersebut mudah reversibel tetapi sulit untuk menebak hash , dan tidak lebih. Dan untuk alasan yang sama, itu tidak menyebabkan penggabungan yang tidak semestinya dengan cara yang Anda bayangkan; jika kondisi permainan menjadi lebih atau kurang rumit, demikian juga hash (yang tidak membatalkan hash sebelumnya), tetapi sistem bekerja sama baiknya sebelum dan sesudah.
Seth Battin

@Seth Battin "itu tidak menyebabkan kopling yang tidak semestinya dengan cara yang Anda bayangkan" Oh keren! Jadi game yang sedang saya kerjakan sekarang memiliki file save yang diukur dalam megabyte ... yang perlu saya lakukan adalah melakukan beberapa kebingungan dasar dan menampilkannya di layar dan voila! Kami sekarang memiliki sistem kata sandi yang sangat bagus?
NPSF3000

3
Sepertinya permainan Anda tidak sesuai untuk metode ini.
Seth Battin

@ NPSF3000 Apa gunanya kata sandi dalam hal ini? Jika itu untuk mencegah orang lain menggunakan mesin yang sama dari menggunakan savegames mereka tanpa izin, mengapa tidak hanya memiliki login sekali permainan dengan nama pengguna / pass? Jika itu untuk menentukan simpanan mana yang mereka inginkan, itu adalah "id savegame", bukan kata sandi, dan seharusnya dibuat lebih ramah. Seperti itu, jika saya membacanya dengan benar, Anda memerlukan kata sandi yang tidak ditentukan pengguna dan berbeda setiap kali memuat kata sandi baru? MENGAPA? Apa manfaat bermanfaat yang diberikan kepada siapa pun?
Dewi Morgan

1
@DewiMorgan Saya tidak memerlukan apa-apa, saya murni memberikan jawaban untuk pertanyaan op: "Bagaimana saya membuat sistem kata sandi untuk permainan pemain tunggal? Misalnya, Mega Man X menghemat pekerjaan dengan memberi Anda serangkaian angka yang bisa Anda masukkan nanti untuk memuat penyimpanan Anda. " Solusi saya melakukannya, tanpa menyatukan sistem simpan dan sistem kata sandi. Jawaban pilihan teratas memiliki kerugian yang sama dengan milik saya, dengan tambahan bahwa itu membutuhkan seluruh permainan yang dirancang sesuai dengan metode.
NPSF3000
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.