Wie implementiere ich ein passwortbasiertes "Savegame" -System im Retro-Stil?


20

Wie würde ich ein Passwortsystem für ein Einzelspieler-Spiel erstellen, wie es in älteren Konsolenspielen verwendet wird?

Beispielsweise spart Mega Man X Arbeit, indem Sie eine Reihe von Zahlen eingeben, die Sie später zum Laden Ihres Speichers eingeben können.


3
Tun Sie nicht das, was Donkey Kong (NES) getan hat - das heißt, Sie können auf der Kassette speichern, aber NICHT DEN LEBENSZAHL BEWAHREN -, damit Sie eine Menge Leben von der ersten Stufe (wie 24) an sparen, ins Bett gehen und aufwachen UP WITH 3 - Ich hasste das
Alec Teal

10
Pedantischer Hinweis: Ein Passwortsystem speichert keinen Spielstatus, sondern lädt einen vordefinierten .
Lilienthal

5
@Lilienthal nicht unbedingt. Vielleicht ist es nur eine Art "Dump" eines Variablenzustands, gemischt mit einem deterministischen Zwei-Wege-Algorithmus.
o0 '.

2
@Lohoris Ja, wenn Sie genügend Entropie in Ihrem Passwort haben, können Sie es als eine Art gespeicherten Zustand betrachten, der nah genug ist, um aktuellen Spielstände zu ähneln. Schließlich benötigen beide eine Möglichkeit, den Status des Spiels zu exportieren und zu importieren. Die Entropie, die für alles erforderlich ist, was einer echten Rettung ähnelt (genauer Ort / Kontrollpunkt, Leben, getötete Feinde, Munitionszählungen, ...), würde jedoch sowohl ein sehr langes Passwort als auch einen sehr komplexen Algorithmus erfordern. In Fällen, in denen die Entscheidung, Passwörter über Spielstände zu verwenden, sinnvoll ist (sofern überhaupt vorhanden), sollte die Maxime zutreffen.
Lilienthal

3
@AlecTeal Was genau wäre "dumm"? Ich bewerte ein Passwort anhand der Datenmenge, die in modernen Spielen gespeichert ist, wo sie für die überwiegende Mehrheit eindeutig ungeeignet sind.
Lilienthal

Antworten:


32

Zerlegen Sie zunächst Ihren Spielstatus (bzw. die Aspekte des Status, den Sie speichern möchten). Bei einem Spiel im Mega-Man-Stil können Sie beispielsweise nachverfolgen, welche End-Level-Bosse Sie getötet haben, wie viele energietankähnliche Powerups Sie haben und so weiter.

Packen Sie all diese Daten in ein Bitfeld, dh weisen Sie jedem Wert eine geeignete Anzahl von Bits zu:

  • Getöteter Boss 1 (ein Bit)
  • Getöteter Boss 2 (ein Bit)
  • Getöteter Boss 3 (ein Bit)
  • Getöteter Boss 4 (ein Bit)
  • Energietanks ( x von insgesamt 5) (3 Bits)
  • Einige Erfolge freigeschaltet (ein bisschen)

Unser Beispiel hat insgesamt 8 Bits, was bedeutet, dass ein einzelnes Zeichen ein Passwort darstellen kann. In der Praxis hat Ihr Spiel wahrscheinlich mehr Status und erfordert daher mehr Gesamtbits und damit mehr Charaktere. Wie in den Kommentaren hier und an anderer Stelle in dieser Frage erwähnt, funktioniert dieser Ansatz für "Retro" -Spiele oder andere Spiele, bei denen die Größe des erfassten Spielzustands angemessen ist. Über einen bestimmten Punkt hinaus stellen Sie möglicherweise fest, dass die Komplexität der Kennwörter, die zum Codieren Ihres Status erforderlich sind, zu groß ist.

Um die Wahrscheinlichkeit zu verringern, dass zufällige Beobachtungen das Passwort knacken, können Sie das Bit-Layout so ändern, dass Sie Dummy-Bits einführen (die keine Auswirkungen auf den Spielstatus haben, das Passwort jedoch anders aussehen lassen, wenn Sie alle Bits als Zeichen interpretieren) oder ausführen Durch eine umkehrbare Hash-artige Operation können die Bits so verwürfelt werden, dass alle "killed box X " -Bits nicht direkt nebeneinander liegen, wodurch die entsprechenden Passwörter mit sequenziellem Status sehr unterschiedlich aussehen oder Prüfsummenwerte eingeführt werden.

Wenn Sie sich umsehen, gibt es einiges an Informationen über die Systeme, die für einige der beliebtesten kennwortgeschützten Spiele verwendet werden:

Sie können diese für zusätzliche Inspiration nachlesen.


4
Denken Sie daran, sicherzustellen, dass das Kennwort für "Status speichern" leicht einzugeben und vorzugsweise eindeutig ist (verwenden Sie z. B. "0" oder "O", aber nicht beides).
Minnmass

4
@minnmass Bonuspunkte, wenn Sie implizit ähnliche Zeichen in Ihren Standard konvertieren, sodass die Eingabe von "O" anstelle von "0" immer noch zu "0" führt.

8
@ NPSF3000 Da in diesem Fall das "Kennwort" keine Authentifizierungsmaßnahme ist. Das "Passwort" ist das Speichermedium selbst.
Schilcote

6
@ NPSF3000 Wenn Ihnen aus der Frage nicht klar ist, müssen Sie die Frage erneut lesen oder das Hintergrundmaterial lernen.
Hobbs

2
@ NPSF3000 OP sagt deutlich "Retro Style" und verweist Megaman zur Bestätigung, was nicht mehrdeutig ist. Erfahren Sie mehr über das Thema, verstehen Sie, dass dies nicht mit Sicherheit zu tun hat, und versuchen Sie nicht länger, das zu verteidigen, was als ehrliche und vergebliche Ignoranz begann.
MickLH

3

Diese Spiele haben nur einen Zustand gerettet, den ich glaube. Das Passwort verweist lediglich auf eine zu ladende Ebene. Verwenden Sie einfach ein Wörterbuch für so etwas.

Wenn es ein bisschen komplexer ist als eine bestimmte Waffe oder einen Booster, können Sie den Status in einen kurzen (aber ausreichend langen) Hash-Code verschlüsseln.

Aber ich rate Ihnen dringend, dies nicht zu verwenden. Das Passwort wird sich schnell im Internet verbreiten und bald hatte jeder Ihr Spiel gewonnen.


9
Passwörter, die sich im Internet verbreiten, können gut sein. Betrügen kann Spaß machen, und in einem Einzelspielerspiel betrügen die Spieler nur sich selbst.
Anko

@Anko Ja, ich mag Betrug nicht und habe es kaum getan, also bin ich voreingenommen. Aber aus eigener Erfahrung würden meine Spiele viel schneller und schneller verstauben, wenn ich mich durch die Gegend schummle.
Madmenyo

"... verweist nur auf einen zu ladenden Level." Bei weitem nicht in allen Fällen wahr. Einige Passwörter beziehen sich auch auf Bosse, getötete, gewonnene Powerups usw. Zweitens ist es eine Sache, darauf hinzuweisen, dass das Passwort verbreitet werden kann - ein Problem in unserer hyper-vernetzten Welt. Zu sagen, dass Betrugsoptionen entfernt werden sollten, weil SIE nicht gerne betrügen, ist eine andere. Was Sie mögen, ist nicht genau das, was andere mögen. Es geht nicht darum, was Sie mögen, es geht um den Verbraucher . Schummeln / Shortcuts sind eine wichtige Option - insbesondere für Einzelspieler-Spiele.
WernerCD

@WernerCD erstens spreche ich über komplexere systeme ich beginne gerade mit einem einfachen kennwortsystem. Ich beanspruche nichts. Zweitens sage ich in der Antwort nichts über Betrug. Ich gebe nur meine VERZÖGERTE Antwort auf einen Kommentar und sage sogar, dass ich voreingenommen bin und mir Ihrer Tatsache bewusst bin, dass es nicht das ist, was ich mag. Aber wenn niemand sagt, was er mag oder nicht mag, wie würden Sie dann wissen, was andere mögen? Ich denke immer noch, ein solches System ist an der Zeit und das Schummeln im 21. Jahrhundert wird anders erreicht. Das nächste Mal solltest du genauer lesen, bevor du einen Kommentar wie diesen schreibst.
Madmenyo

Wenn Sie Spielstände haben, teilen die Benutzer auch Spielstände.
Dewi Morgan

1

Nun, Sie könnten es im Grunde so machen:

Bosse getötet = 7

Anzahl der Münzen = 36

Besitzt Schwert = 0 (Nein)

Besitzt Herz = 1 (Ja)

Aktueller Level = 6

Aktuelle Welt = 9

Gesundheit = 100

Code = 7V36R0A1T6O9A100

Grundsätzlich trennt jeder Buchstabe die Typen


-3

Während Lösungen wie Josh Petries Character-to-State-System Vorteile haben (geringe Speicherkapazität, funktioniert auf allen Kopien des Spiels), koppeln sie das Spieledesign und das State-System so, dass sie untrennbar mit dem Passwortsystem verbunden sind. Jede Änderung des Passworts, des Status oder des Designs und des gesamten Systems fällt auseinander.

Eine weitaus einfachere Lösung wäre, Ihr Speichersystem wie gewohnt aufzubauen und einfach ein Passwortsystem darüber hinzuzufügen. Dies kann so einfach sein wie das Speichern des Kennworts beim Speichern (möglicherweise als Dateiname) und dessen Überprüfung beim Laden oder so komplex wie die Verwendung einer der vielen Verschlüsselungsbibliotheken (was ziemlich trivial ist).


Es scheint einige Verwirrung um diese Antwort zu geben.

1) Der op einfach nach einem Passwort gefragt hat , dass Lassen Sie uns laden sie ein save ... ist es nicht erforderlich , dass das Passwort sein pariert.

2) Viele Spiele haben heutzutage einen erheblichen Speicherbedarf. Wir haben nur intern ein schnelles Speicher- / Ladesystem erstellt, das 10 MB-Dateien produzierte ... für ein Quizspiel! Das Speichersystem von Josh Petrie ist zwar nur in sehr begrenztem Umfang gültig - sobald das Speichersystem nicht mehr so ​​einfach ist, müssten die Kennwörter eine enorme Länge haben, um alle relevanten Daten zu speichern.

Was passiert zum Beispiel, wenn es 30 Chefs gibt? 20 Erfolge? Sind wir auf halbem Weg durch eine Leistung? Auf welchem ​​Niveau ist er? Wie viele Teile legen wir für Gesundheit, Leben, Münzen, XP beiseite? Was ist, wenn der Schnappschuss nicht zwischen den Levels ist ... sondern auf halbem Weg durch ein Level - die Positionen des Spielers, der Feinde, der Projektile, des zerstörten / veränderten Terrains summieren sich plötzlich zu einer Menge Zustand, der gespeichert werden muss.

Für die Perspektive haben wir unter der Annahme eines 30-stelligen Alphabets und eines 10-stelligen Passworts Informationen im Wert von ungefähr 50 Bits zu speichern. Es ist nicht ungewöhnlich, dass ein Spiel / eine Engine bis zu 320 Bit verwendet, um die Position, Drehung und Skalierung eines einzelnen Objekts zu speichern. Sicher, Sie können alle Arten von Optimierungs-Tricks ausführen, um mit weniger mehr zu erreichen ... aber letztendlich verbrauchen Sie die Zeit, um das Spiel unterhaltsam zu gestalten - eine der schlimmsten Optimierungen, die Sie durchführen können.


3
Ich denke, das Problem hier und mit Ihrem Kommentar oben ist, dass die kryptografische Sicherheit nicht das Ziel ist, den Spielstatus als Bits in einem Passwort zu speichern. So zusammengesetzte Passwörter sind leicht umkehrbar, aber schwer zu erratende Hashes und sonst nichts. Und aus dem gleichen Grund verursacht es keine übermäßige Kopplung in der Art, wie Sie es sich vorstellen. Wenn der Spielzustand mehr oder weniger kompliziert wird, funktioniert der Hash (der frühere Hashes ungültig macht), aber das System funktioniert vorher und nachher gleich gut.
Seth Battin

@Seth Battin "es verursacht keine übermäßige Kopplung in der Art, wie Sie es sich vorstellen" Oh cool! Also hatte ein Spiel, an dem ich gerade arbeite, eine Speicherdatei, die in Megabyte gemessen wurde ... Alles, was ich tun muss, ist eine grundlegende Verschleierung vorzunehmen und sie auf einem Bildschirm und Voila anzuzeigen! Wir haben jetzt ein perfektes Passwortsystem?
NPSF3000,

3
Es hört sich so an, als wäre Ihr Spiel für diese Methode nicht geeignet.
Seth Battin

@ NPSF3000 Wozu dienen in diesem Fall Kennwörter? Wenn andere, die denselben Computer verwenden, ihre Spielstände nicht ohne Erlaubnis verwenden möchten, können Sie sich einmal pro Spiel mit Benutzername / Pass anmelden. Wenn angegeben werden soll, welche Speicherung gewünscht wird, handelt es sich um eine "Savegame-ID", kein Kennwort, und sollte wahrscheinlich freundlicher gestaltet werden. Wie ist es, wenn ich Sie richtig lese, benötigen Sie jedes Mal, wenn Sie einen neuen Speicher laden, ein anderes, nicht benutzerspezifisches Passwort? WARUM? Welchen nützlichen Vorteil bringt das jemandem?
Dewi Morgan

1
@DewiMorgan Ich benötige nichts, ich gebe lediglich eine Antwort auf die Frage von op: "Wie würde ich ein Passwortsystem für ein Einzelspieler-Spiel erstellen? Zum Beispiel spart Mega Man X Arbeit, indem Sie eine Reihe von Zahlen eingeben dass Sie später eingeben können, um Ihren Speicher zu laden. " Meine Lösung macht das, ohne das Speichersystem und das Passwortsystem miteinander zu koppeln. Die Antwort mit den meisten Stimmen hat die gleichen Nachteile wie meine, mit dem Zusatz, dass das gesamte Spiel so gestaltet werden muss, dass es der Methode entspricht.
NPSF3000,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.