Retro tarzı şifre tabanlı bir “savegame” sistemini nasıl uygularım?


20

Eski konsol oyunlarında kullanılanlar gibi tek oyunculu bir oyun için nasıl şifre sistemi yapabilirim?

Örneğin, Mega Man X , kaydetmenizi yüklemek için daha sonra girebileceğiniz bir dizi sayı vererek işi kaydeder.


3
Donkey Kong'un (NES) yaptıklarını yapmayın - bu, kartuşa kaydetmenize izin verir, ancak YAŞAM SAYISINI KORUMA DEĞİLDİR - böylece ilk seviyeden (24 gibi) bir sürü canınız olur, yatağa git, WAKE 3'Lİ YUKARI - Bundan nefret ettim
Alec Teal

10
Bilgiçliksel not: bir şifre sistemi bir oyun durumunu kaydetmez, önceden tanımlanmış olanı yükler .
Lilienthal

5
@Lilienthal olmak zorunda değil. Belki de belirleyici bir iki yönlü algoritma ile karıştırılmış, bazı değişkenlerin durumunun bir çeşit "dökümü" dür.
o0 '.

2
@ Looris Evet, şifrenizde yeterli entropi varsa, onu mevcut kayıt oyunlarına benzeyecek kadar yakın bir şekilde kaydedilmiş bir durum olarak düşünebilirsiniz. Sonuçta, her ikisi de oyunun durumunu dışa ve içe aktarmanın bir yolunu gerektirir. Bununla birlikte, gerçek bir kurtarmaya benzeyen her şey için gerekli olan entropi (kesin konum / kontrol noktası, canlar, katledilen düşmanlar, cephane sayıları, ...) hem çok uzun bir şifre hem de çok karmaşık bir algoritma gerektirir. Savegames üzerinde şifre kullanma kararının anlamlı olduğu durumlarda (eğer varsa), maxim doğru olmalıdır.
Lilienthal

3
@AlecTeal Tam olarak kim "aptal" olabilir? Çağdaş oyunlarda saklanan veri miktarına karşı şifreyi değerlendiriyorum, burada büyük çoğunluk için açıkça uygun değiller.
Lilienthal

Yanıtlar:


32

İlk olarak, oyun durumunuzu (ya da daha doğrusu, kaydetmek istediğiniz eyaletin yönlerini) parçalayın. Mega Man tarzı bir oyun söz konusu olduğunda, hangi son seviye patronlardan öldürdüğünüzü, sahip olduğunuz enerji tankı benzeri powerup'ların sayısını takip edebilirsiniz.

Tüm bu verileri bir bit alanına paketleyin, yani her bir değere uygun sayıda bit atayın:

  • Öldürülen patron 1 (bir bit)
  • Öldürülen patron 2 (bir bit)
  • Öldürülen patron 3 (bir bit)
  • Öldürülen patron 4 (bir bit)
  • Enerji tankları ( toplam 5 x ) (3 bit)
  • Bazı başarıların kilidi açıldı (bir bit)

Örneğimizde toplam 8 bit vardır, yani tek bir karakter bir şifreyi temsil edebilir. Pratikte, oyununuz daha fazla devlete sahiptir ve bu nedenle daha fazla toplam bit ve dolayısıyla daha fazla karakter gerektirir. Buradaki ve bu sorunun başka yerlerindeki yorumlarda belirtildiği gibi, bu yaklaşım "retro" oyunlar veya yakalanan oyun durumunun boyutunun makul olduğu diğer oyunlar için geçerlidir. Belirli bir noktanın ötesinde, durumunuzu kodlamak için gereken şifrelerin karmaşıklığının çok büyük olduğunu keşfedebilirsiniz.

Geçici gözlemin şifreyi kırma olasılığını azaltmak için, bit düzenini (oyun durumu üzerinde hiçbir etkisi olmayan, ancak tüm bitleri karakter olarak yorumladığınızda şifrenin farklı görünmesini sağlayan) kukla bitler tanıtacak şekilde dönüştürebilirsiniz. tüm "öldürülmüş kutu X " bitleri birbirinin hemen yanında olmayacak şekilde bitleri karıştırmak için bazı tersine çevrilebilir karma benzeri işlemlerle karşılık gelen sıralı durum şifrelerini çok farklı gösterebilir veya sağlama toplamı değerleri sunabilir.

Etrafta kazarsanız, bazı popüler parola oyunlarında kullanılan sistemler hakkında oldukça fazla bilgi var:

Ek ilham almak için bunları okuyabilirsiniz.


4
"Durum kaydet" şifresinin kolayca yazabildiğinden ve tercihen açık olduğundan emin olun (örn. '0' veya 'O' kullanın, ancak her ikisini birden kullanmayın).
minnmass

4
@minnmass bonus puanlarını benzer karakterleri standardınıza dönüştürürseniz, '0' yerine 'O' yazmanın yine de '0' anlamına gelmesini sağlar.

8
@ NPSF3000 Çünkü bu durumda "şifre" bir kimlik doğrulama önlemi değildir; "şifre" depolama ortamının kendisidir.
Schilcote

6
@ NPSF3000 sorudan size açık değilse, soruyu tekrar okumanız veya arka plan materyalini öğrenmeniz gerekir.
Ocaklar

2
@ NPSF3000 OP açıkça "Retro Style" diyor ve Megaman'a karar vermek için başvuruyor, ki bu belirsiz değil. Konu hakkında bilgi edinin, bunun güvenlikle ilgili olmadığını anlayın ve lütfen dürüst ve affedilebilir bir cehalet olarak başlayanları savunmaya çalışmayın.
MickLH

3

Bu oyunlar sadece inandığım bir durumu kurtardı. Parola sadece yüklenecek bir seviyeye başvuruyor. Sadece böyle bir şey için sözlük kullanın.

Belli bir silah veya güçlendirici gibi biraz daha karmaşıksa, durumu kısa (ancak yeterince uzun) bir karma koduyla şifreleyebilirsiniz.

Ama bunu kullanmamanızı şiddetle tavsiye ederim. Şifre internette hızla yayılacak ve yakında herkes oyununuzu kazanmış olacak.


9
İnternette yayılan şifreler iyi olabilir. Hile yapmak eğlenceli olabilir ve tek oyunculu bir oyunda oyuncular sadece kendilerini kandırırlar.
Anko

@Anko Evet, hile yapmayı sevmem ve zar zor yaptım bu yüzden önyargılıyım. Ama kendi tecrübelerime göre oyunum çok daha hızlı ve daha çabuk toz toplardı.
Madmenyo

“... sadece yüklenecek bir seviyeye başvuruyor.” Her durumda çok doğru değil. Bazı şifreler aynı zamanda patronları, öldürülenleri, kazanılan güçlendirmeleri vb. Referans alır. İkincisi, şifrenin yayılabileceğini tavsiye etmek bir şeydir - hiper bağlantılı dünyamızda bir sorun. Hile seçeneklerinin kaldırılması gerektiğini söylemek, Hile yapmayı sevmediğiniz başka bir şeydir. Sevdiğiniz şey tam olarak başkalarının sevdiği şey değil. Ne sevdiğinizle ilgili değil, tüketici . Hile / kısayollar önemli bir seçenektir - özellikle tek oyunculu oyunlar için.
WernerCD

@WernerCD Önce daha karmaşık sistemler hakkında konuşuyorum, sadece basit bir şifre sistemiyle başlıyorum. Ben hiçbir şey iddia ETMİYORUM. İkincisi, cevapta hile yapmak hakkında bir şey söylemiyorum. Ben sadece bir yoruma BIASED cevabımı veriyorum ve hatta önyargılı olduğumu ve benim sevdiğim şeyin bu olmadığının farkında olduğumu bile söylüyorum. Ama kimse neyi sevdiğini veya sevmediğini söylemezse, başkalarının neyi sevdiğini nasıl bilebilirsin? Hala böyle bir sistemin zamanı geldiğini düşünüyorum ve 21. yüzyılın hile yapması farklı gerçekleşti. Bir dahaki sefere IMHO gibi bir yorum yazmadan önce daha dikkatli okumalısınız.
Madmenyo

Kaydetme oyunlarınız varsa, kullanıcılar kaydetme oyunlarını da paylaşır.
Dewi Morgan

1

Aslında bunu şu şekilde yapabilirsiniz:

Öldürülen patronlar = 7

Bozuk para miktarı = 36

Kılıcın Sahibi = 0 (Hayır)

Kalp Sahibi = 1 (Evet)

Mevcut Seviye = 6

Mevcut Dünya = 9

Sağlık = 100

Kodu = 7V36R0A1T6O9A100

Temelde her harf ayrı Tipler


-3

Josh Petrie'nin karakter-durum sistemi gibi çözümlerin faydaları olsa da (küçük boyutta tasarruf, oyunun tüm kopyalarında çalışır), oyun tasarımını ve durum sistemini özünde şifre sistemine bağlarlar. Parola veya durum veya tasarımda ve tüm sistemde yapılan herhangi bir değişiklik farklıdır.

Çok daha basit bir çözüm, kayıt sisteminizi normal şekilde oluşturmak ve üstte bir şifre sistemi eklemek olacaktır. Bu, parolayı kaydetmeye kaydetmek (muhtemelen dosya adı olarak iki katına çıkarmak) ve yükte doğrulamak kadar basit veya etraftaki birçok şifreleme kitaplığından birini kullanmak kadar karmaşık olabilir (oldukça önemsizdir).


Bu cevap etrafında biraz karışıklık var gibi görünüyor.

1) Operatör, bir kayıt yüklemelerine izin veren bir şifre istedi ... şifrenin kayıt olma zorunluluğu yoktur .

2) Bugün birçok oyun önemli ölçüde depolama depolama gereksinimine sahip, sadece bir quiz oyunu için 10MB dosyaları üreten hızlı bir kaydetme / yükleme sistemi oluşturduk! Josh Petrie'nin kayıt sistemi, çok sınırlı olsa da - mağaza sistemi önemsiz hale gelir gelmez, tüm ilgili verilerin saklanması için parolaların çok uzun olması gerekir.

Örneğin, 30 patron varsa ne olur? 20 başarı? Bir başarının yarısında mıyız? Hangi seviyede? Sağlık, yaşam, madeni para, xp için kaç bit ayırıyoruz? Anlık görüntü seviyeler arasında durum değilse ... ancak bir seviyenin yarısında ise - oyuncunun pozisyonları, düşmanlar, mermiler, yıkılmış / değiştirilmiş arazi aniden depolanması gereken birçok duruma eklenir.

Perspektif olarak, 30 karakterlik bir alfabe ve on harflik bir parola varsayarak, saklamak için yaklaşık 50 bit değerinde bilgiye sahibiz. Bir oyunun / motorun yalnızca tek bir nesnenin konumunu, dönüşünü ve ölçeklendirmesini saklamak için 320 bite kadar kullanıldığını görmek nadir değildir. Tabii, daha azıyla daha fazlasını yapmak için her türlü optimizasyon hilesi yapabilirsiniz ... ama sonuçta oyunu eğlenceli hale getirmek için ayrılmış zamanı kullanıyorsunuz - yapabileceğiniz en kötü optimizasyonlardan biri.


3
Bence buradaki sorun ve yukarıdaki yorumunuzla, kriptografik güvenlik, oyunun durumunu bir şifre içinde bit olarak kaydetmenin amacı değil. Bu şekilde oluşturulan şifreler kolayca geri döndürülebilir, ancak karmaları tahmin etmek zordur ve daha fazlası değildir. Aynı nedenden ötürü, hayal ettiğiniz şekilde aşırı eşleşmeye neden olmaz; oyun durumu az ya da çok karmaşık hale gelirse, karma (önceki karmaları geçersiz kılar), ancak sistem öncesi ve sonrası eşit derecede iyi çalışır.
Seth Battin

@Seth Battin "Hayal ettiğiniz gibi gereksiz kuplajlara neden olmaz" Ah güzel! Şu anda üzerinde çalıştığım bir oyunun megabaytta ölçülen bir kaydetme dosyası vardı ... tek yapmam gereken bazı temel şaşkınlık yapmak ve bir ekranda ve voila'da görüntülemek! Artık mükemmel bir şifre sistemimiz var mı?
NPSF3000

3
Oyununuz bu yöntem için uygun değil gibi görünüyor.
Seth Battin

@ NPSF3000 Bu durumda şifrelerin anlamı nedir? Aynı makineyi kullanan başkalarının kayıt oyunlarını izinsiz kullanmasını önlemek için, neden sadece kullanıcı adı / şifre ile oyun başına bir kez giriş yapmıyorsunuz? Hangi kaydetmeyi istediklerini belirtmek gerekirse, bu bir şifre değil, bir "savegame id" dir ve muhtemelen daha kolay yapılmalıdır. Olduğu gibi, sizi doğru okursam, her yeni kayıt yüklediklerinde kullanıcı tarafından belirtilmeyen farklı bir şifre mi istiyorsunuz? NİYE YA? Bu kimseye ne gibi bir avantaj sağlıyor?
Dewi Morgan

1
@DewiMorgan Hiçbir şey istemiyorum, sadece op'un sorusuna cevap veriyorum: "Tek oyunculu bir oyun için nasıl şifre sistemi yapabilirim? Örneğin, Mega Man X size bir dizi sayı vererek işten tasarruf sağlar kaydetmenizi yüklemek için daha sonra girebilirsiniz. " Benim çözümüm bunu, kayıt sistemini ve şifre sistemini birleştirmeden yapar. En çok oy alan cevap, benimkiyle aynı dezavantajlara sahiptir, ayrıca tüm oyunun yönteme uyacak şekilde tasarlanmasını gerektirir.
NPSF3000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.