Comment puis-je implémenter un système de «sauvegarde» basé sur un mot de passe de style rétro?

20

Comment créer un système de mot de passe pour un jeu solo comme ceux utilisés dans les anciens jeux sur console?

Par exemple, Mega Man X enregistre le travail en vous donnant une série de chiffres que vous pourrez saisir plus tard pour charger votre sauvegarde.

Accumulateur
la source
3
Ne faites pas ce que Donkey Kong (NES) a fait - ce qui vous permet de sauvegarder dans la cartouche mais PAS DE PRÉSERVER LE NOMBRE DE VIES - donc vous auriez des tonnes de vies du premier niveau (comme 24) enregistrer, aller au lit, WAKE UP WITH 3 - Je détestais ça
Alec Teal
10
Remarque pédante: un système de mot de passe ne sauvegarde pas un état de jeu, il en charge un prédéfini .
Lilienthal
5
@Lilienthal pas nécessairement. C'est peut-être juste une sorte de "vidage" de l'état de certaines variables, mélangé avec un algorithme bidirectionnel déterministe.
o0 '.
2
@Lohoris Oui, si vous avez suffisamment d'entropie dans votre mot de passe, vous pouvez le considérer comme une sorte d'état enregistré suffisamment proche pour ressembler aux sauvegardes actuelles. Après tout, les deux nécessitent un moyen d'exporter et d'importer l'état du jeu. Cependant, l'entropie requise pour tout ce qui ressemble à une véritable sauvegarde (emplacement / point de contrôle exact, vies, ennemis tués, nombre de munitions, ...) nécessiterait à la fois un mot de passe très long et un algorithme très complexe. Dans les cas où la décision d'utiliser des mots de passe sur des sauvegardes est logique (s'il y en a même), la maxime doit rester vraie.
Lilienthal
3
@AlecTeal Qu'est-ce qui serait exactement "stupide"? J'évalue un mot de passe par rapport à la quantité de données stockées dans les jeux contemporains, où ils sont clairement inappropriés pour la grande majorité.
Lilienthal

Réponses:

32

Tout d'abord, décomposez votre état de jeu (ou plutôt, les aspects de l'état que vous souhaitez enregistrer). Dans le cas d'un jeu de style Mega Man, vous pouvez suivre lequel des boss de niveau final que vous avez tués, le nombre de bonus de type réservoir d'énergie que vous avez, etc.

Emballez toutes ces données dans un champ de bits, c'est-à-dire affectez un nombre approprié de bits à chaque valeur:

  • Patron tué 1 (un bit)
  • Boss tué 2 (un bit)
  • Boss tué 3 (un bit)
  • Patron tué 4 (un bit)
  • Réservoirs d'énergie ( x sur 5 au total) (3 bits)
  • Débloqué une réalisation (un bit)

Notre exemple a un total de 8 bits, ce qui signifie qu'un seul caractère peut représenter un mot de passe. En pratique, votre jeu est susceptible d'avoir plus d'état et donc de nécessiter plus de bits au total et donc plus de caractères. Comme indiqué dans les commentaires ici et ailleurs dans cette question, cette approche fonctionne pour les jeux "rétro" ou d'autres jeux où la taille de l'état de jeu capturé est raisonnable. Au-delà d'un certain point, vous découvrirez peut-être que la complexité des mots de passe nécessaires pour encoder votre état est trop importante.

Pour diminuer la probabilité d'une observation occasionnelle de fissuration du mot de passe, vous pouvez transformer la disposition des bits afin d'introduire des bits fictifs (qui n'ont aucun effet sur l'état du jeu mais qui rendent le mot de passe différent lorsque vous interprétez tous les bits en tant que caractères) ou exécutez à travers une opération de hachage réversible pour brouiller les bits afin que tous les bits de la "boîte X tuée " ne soient pas côte à côte, ce qui rend les mots de passe à état séquentiel correspondants très différents ou introduisent des valeurs de somme de contrôle.

Si vous fouillez, il y a pas mal d'informations sur les systèmes utilisés pour certains des jeux avec mot de passe les plus populaires:

Vous pouvez les lire pour plus d'inspiration.


la source
4
N'oubliez pas de vous assurer que le mot de passe «enregistrer l'état» est facilement saisissable et, de préférence, sans ambiguïté (par exemple, utilisez «0» ou «O» mais pas les deux).
minnmass
4
@minnmass bonus si vous convertissez implicitement des caractères similaires à votre standard, de sorte que taper «O» au lieu de «0» se traduit toujours par «0».
8
@ NPSF3000 Parce que dans ce cas, le "mot de passe" n'est pas une mesure d'authentification; le "mot de passe" est le support de stockage lui-même.
Schilcote
6
@ NPSF3000 si vous ne comprenez pas clairement la question, vous devez relire la question ou apprendre la documentation de base.
hobbs
2
@ NPSF3000 OP dit clairement "Retro Style" et fait référence à Megaman pour confirmer, ce qui n'est pas ambigu. Renseignez-vous sur le sujet, comprenez que cela n'est pas lié à la sécurité, et veuillez cesser d'essayer de défendre ce qui a commencé comme une ignorance honnête et pardonnable.
MickLH
3

Ces jeux n'ont sauvé qu'un état, je crois. Le mot de passe fait simplement référence à un niveau à charger. Utilisez simplement un dictionnaire pour quelque chose comme ça.

Si c'est un peu plus complexe, comme avoir une certaine arme ou un booster, vous pouvez crypter l'état en un code de hachage court (mais assez long).

Mais je vous conseille fortement de ne pas l'utiliser. Le mot de passe se répandra rapidement sur Internet et bientôt tout le monde aura gagné votre partie.

Madmenyo
la source
9
Les mots de passe diffusés sur Internet peuvent être bons. La tricherie peut être amusante, et dans un jeu à un seul joueur, les joueurs ne se trompent que eux-mêmes.
Anko
@Anko Ouais, je n'aime pas tricher et je l'ai à peine fait, donc je suis partial. Mais d'après ma propre expérience, mes jeux accumulaient de la poussière beaucoup plus rapidement et plus tôt lorsque je me trompais.
Madmenyo
"... fait simplement référence à un niveau à charger." Pas vrai dans tous les cas de loin. Certains mots de passe font également référence à des boss, tués, des bonus gagnés, etc. Deuxièmement, informer que le mot de passe peut être diffusé est une chose - un problème dans notre monde hyper-connecté. Dire que les options de triche devraient être supprimées parce que VOUS n'aimez pas la triche en est une autre. Ce que vous aimez n'est pas exactement ce que les autres aiment. Ce n'est pas ce que vous aimez, c'est le consommateur . La tricherie / les raccourcis sont une option importante - en particulier pour les jeux solo.
WernerCD du
@WernerCD tout d'abord je parle de systèmes plus complexes, je commence simplement par un système de mot de passe simple. Je ne réclame rien. Deuxièmement, je ne dis rien sur la tricherie dans la réponse. Je ne fais que donner ma RÉPONSE BIENFAISANTE sur un commentaire et même dire que je suis partial et conscient de votre point de vue que ce n'est pas ce que j'aime. Mais si personne ne dit ce qu'il aime ou n'aime pas, comment sauriez-vous ce que les autres aiment? Je pense toujours qu'un tel système arrive à point nommé et que la tricherie au 21e siècle se réalise différemment. La prochaine fois, vous devriez lire plus attentivement avant d'écrire un commentaire comme ça à mon humble avis.
Madmenyo
Si vous avez des sauvegardes, les gens partageront également des sauvegardes.
Dewi Morgan
1

Eh bien, vous pouvez le faire de cette façon:

Boss tués = 7

Nombre de pièces = 36

Possède une épée = 0 (non)

Possède un cœur = 1 (Oui)

Niveau actuel = 6

Monde actuel = 9

Santé = 100

Code = 7V36R0A1T6O9A100

Fondamentalement, chaque lettre sépare les types

aanda tv
la source
-3

Bien que des solutions comme le système de personnage à état de Josh Petrie présentent des avantages (petite taille d'enregistrement, fonctionne sur toutes les copies du jeu), elles associent la conception des jeux et le système d'état pour être intrinsèquement au système de mot de passe. Toute modification du mot de passe, de l'état ou de la conception et de l'ensemble du système s'effondre.

Une solution beaucoup plus simple serait de construire votre système de sauvegarde comme d'habitude, et d'ajouter simplement un système de mot de passe par-dessus. Cela peut être aussi simple que d'enregistrer le mot de passe dans la sauvegarde (éventuellement doubler en tant que nom de fichier) et de le valider à la charge, ou aussi complexe que d'utiliser l'une des nombreuses bibliothèques de chiffrement (ce qui est assez trivial).


Il semble y avoir une certaine confusion autour de cette réponse.

1) L'op a simplement demandé un mot de passe qui leur permet de charger une sauvegarde ... il n'y a aucune exigence que le mot de passe soit la sauvegarde.

2) De nombreux jeux nécessitent aujourd'hui un stockage important, nous venons de construire un système de sauvegarde / chargement rapide en interne qui produisait des fichiers de 10 Mo ... pour un jeu de quiz! Le système de sauvegarde de Josh Petrie , bien que valide, est très limité - dès que le système de magasin devient non trivial, les mots de passe doivent être d'une longueur énorme pour conserver toutes les données pertinentes.

Par exemple, que se passe-t-il s'il y a 30 patrons? 20 réalisations? Sommes-nous à mi-chemin d'une réalisation? À quel niveau est-il? Combien de bits mettons-nous de côté pour la santé, la vie, les pièces, xp? Et si l'instantané n'est pas d'état entre les niveaux ... mais à mi-chemin d'un niveau - les positions du joueur, des ennemis, des projectiles, du terrain détruit / altéré ajoutent soudainement à beaucoup d'état qui doit être stocké.

Pour la perspective, en supposant un alphabet de 30 caractères et un mot de passe de dix lettres, nous avons environ 50 bits d'informations à stocker. Il n'est pas rare de voir un jeu / moteur utiliser jusqu'à 320 bits uniquement pour stocker la position, la rotation et la mise à l'échelle d'un seul objet. Bien sûr, vous pouvez faire toutes sortes de trucs d'optimisation pour en faire plus avec moins ... mais en fin de compte, vous utilisez le temps consacré à rendre le jeu amusant - l'une des pires optimisations que vous puissiez faire.

NPSF3000
la source
3
Je pense que le problème ici, et avec votre commentaire ci-dessus, est que la sécurité cryptographique n'est pas le but de sauvegarder l'état du jeu sous forme de bits dans un mot de passe. Les mots de passe composés dans une telle manière sont facilement réversibles , mais difficile à deviner hash , et rien de plus. Et pour cette même raison, cela ne provoque pas de couplage indu dans la façon dont vous l'imaginez; si l'état du jeu devient plus ou moins compliqué, le hachage aussi (qui invalide les hachages précédents), mais le système fonctionne aussi bien avant et après.
Seth Battin
@Seth Battin "cela ne provoque pas de couplage indu dans la façon dont vous imaginez" Oh cool! Donc, un jeu sur lequel je travaille en ce moment avait un fichier de sauvegarde mesuré en mégaoctets ... tout ce que je dois faire est de faire de l'obfuscation de base et de l'afficher sur un écran et le tour est joué! Nous avons maintenant un bon système de mot de passe?
NPSF3000 du
3
Il semble que votre jeu ne soit pas approprié pour cette méthode.
Seth Battin du
@ NPSF3000 Quel est l'intérêt des mots de passe dans ce cas? Si c'est pour empêcher d'autres personnes utilisant la même machine d'utiliser leurs sauvegardes sans autorisation, pourquoi ne pas simplement avoir une connexion une fois par jeu avec un nom d'utilisateur / passe? Si c'est pour spécifier quelle sauvegarde ils veulent, c'est un "identifiant de sauvegarde", pas un mot de passe, et devrait probablement être rendu plus convivial. En l'état, si je vous comprends bien, vous avez besoin d'un mot de passe différent, non spécifié par l'utilisateur chaque fois qu'il charge une nouvelle sauvegarde? POURQUOI? Quel avantage utile cela donne-t-il à quiconque?
Dewi Morgan
1
@DewiMorgan Je ne demande rien, je réponds simplement à la question d'op: "Comment créer un système de mot de passe pour un jeu solo? Par exemple, Mega Man X économise du travail en vous donnant une série de chiffres que vous pourrez saisir ultérieurement pour charger votre sauvegarde. " Ma solution fait cela, sans coupler le système de sauvegarde et le système de mot de passe. La réponse la plus votée a les mêmes inconvénients que la mienne, avec l'ajout qu'elle nécessite que l'ensemble du jeu soit conçu pour s'adapter à la méthode.
NPSF3000