Як я можу реалізувати систему “savegame” на основі ретро-стилю?


20

Як би я створив систему паролів для однокористувацької гри, як для тих, що використовуються в старих консольних іграх?

Наприклад, Mega Man X економить роботу, надаючи вам ряд номерів, які ви можете ввести пізніше, щоб завантажити своє збереження.


3
Не робіть того, що зробив Donkey Kong (NES) - це дозволяє вам зберегти в картриджі, але НЕ ЗАБЕЗПЕЧУЙТЕ ЖИТТЯ КОЛІКУ - так що вам доведеться навантажувати життя першого рівня (наприклад, 24), крім того, лягайте спати. Вгору З 3 - Я ненавидів це
Алек Тіл

10
Педантична примітка: система паролів не зберігає ігровий стан, вона завантажує попередньо визначений .
Ліліенталь

5
@Lilienthal не обов'язково. Можливо, це просто якесь «скидання» якогось стану змінних, перетасованого детермінованим двостороннім алгоритмом.
o0 '.

2
@Lohoris Так, якщо у вас є достатня ентропія у вашому паролі, ви можете вважати це свого роду збереженим станом, який досить близький, щоб нагадувати поточні ігрові ігри. Зрештою, обом потрібен спосіб експорту та імпорту стану гри. Однак для ентропії, необхідної для будь-якого схожого на справжнє збереження (точне місце розташування / контрольний пункт, життя, забиті вороги, підрахунки боєприпасів, ....), знадобиться як дуже довгий пароль, так і дуже складний алгоритм. У випадках, коли рішення про використання паролів над збереженими іграми має сенс (якщо вони навіть є), максимум має бути правдивим.
Ліліенталь

3
@AlecTeal Що саме може бути "дурним"? Я оцінюю пароль проти кількості даних, що зберігаються в сучасних іграх, де вони явно непридатні для переважної більшості.
Ліліенталь

Відповіді:


32

По-перше, розбийте свій ігровий стан (вірніше, аспекти стану, який ви хочете зберегти). У випадку з грою в стилі Mega Man ви можете відстежити, кого з босів кінцевого рівня ви вбили, кількість підсилювачів енергетичних резервуарів тощо.

Упакуйте всі ці дані в бітове поле, тобто призначте кожне значення відповідної кількості бітів:

  • Загинув босс 1 (один біт)
  • Загинув босс 2 (один біт)
  • Загинув бос 3 (один біт)
  • Загинув бос 4 (один біт)
  • Енергетичні баки ( х із 5) (3 біти)
  • Розблоковано деяке досягнення (один біт)

У нашому прикладі всього 8 біт, що означає, що один символ може представляти пароль. На практиці ваша гра, швидше за все, матиме більше стану і, таким чином, вимагатиме більше загальних бітів і, отже, більше символів. Як зазначається в коментарях тут і в інших місцях цього питання, такий підхід працює для "ретро" ігор або інших ігор, де розмір захопленого стану гри є розумним. Поза певним моментом ви можете виявити, що складність паролів, необхідних для кодування вашого стану, занадто велика.

Щоб зменшити ймовірність випадкового спостереження зламати пароль, ви можете перетворити макет бітів таким чином, щоб ви вводили фіктивні біти (які не впливають на стан гри, але завдяки чому пароль виглядає інакше, коли ви інтерпретуєте всі біти як символи) або запускаєте за допомогою деяких оборотних хеш-операцій зіскоблювати біти навколо, щоб усі біти "вбитого поля X " знаходилися не поруч з іншим, завдяки чому відповідні паролі послідовного стану виглядають дуже по-різному, або вводяться значення контрольної суми.

Якщо ви копаєтеся, там є досить багато інформації про системи, які використовуються для деяких найпопулярніших ігор з паролем:

Ви можете прочитати про них для додаткового натхнення.


4
Не забудьте переконатися, що пароль "стану збереження" можна легко набрати і, бажано, однозначно (наприклад, використовувати "0" або "O", але не обидва).
minnmass

4
@minnmass бонусні бали, якщо ви неявно перетворюєте подібні символи у ваш стандарт, так що введення "O" замість "0" все ще означає "0".

8
@ NPSF3000 Оскільки в цьому випадку "пароль" не є мірою аутентифікації; "пароль" є самим носієм зберігання.
Schilcote

6
@ NPSF3000, якщо вам не зрозуміло питання, вам потрібно перечитати питання або вивчити довідковий матеріал.
варення

2
@ NPSF3000 OP чітко пише "Стиль ретро" і посилається на Мегаман для підтвердження, що неоднозначно. Дізнайтеся про предмет, зрозумійте, що це не пов’язано із безпекою, і, будь ласка, припиніть намагатися захищати те, що почалося, як чесне і прощальне незнання.
MickLH

3

Ці ігри врятували лише стан, в який я вірю. Пароль просто посилається на рівень для завантаження. Просто використовуйте словник для чогось подібного.

Якщо це трохи складніше, наприклад, мати певну зброю або бустер, ви можете зашифрувати стан на короткий (але досить довгий) хеш-код.

Але я настійно раджу вам не користуватися цим. Пароль швидко пошириться в Інтернеті, і незабаром всі виграли вашу гру.


9
Паролі, що поширюються в Інтернеті, можуть бути хорошими. Обман може бути цікавим, і в одиночній грі гравці лише обманюють себе.
Анко

@Anko Так, мені не подобається обман і ледь зробив це, тому я упереджений. Але з власного досвіду мої ігри набагато швидше і швидше збиратимуть пил, коли я обманюю собі шлях.
Мадменйо

"... просто посилається на рівень для завантаження." Неправда у всіх випадках далеко. Деякі паролі також посилаються на босів, вбитих, отриманих бонусів тощо. По-друге, порадити, що пароль можна поширювати - це одне - проблема в нашому гіперпов'язаному світі. Скажімо, що варіанти обману повинні бути видалені, оскільки вам не подобається обман - це інше. Те, що тобі подобається, зовсім не те, що подобається іншим. Справа не в тому, що вам подобається, це в споживачі . Обман / ярлики - важливий варіант - особливо для одиночних ігор.
WernerCD

@WernerCD, по-перше, я говорю про більш складні системи, які я починаю простою парольною системою. Я НЕ НЕ що претендую. По-друге, я нічого не кажу про обман у відповіді. Я просто даю свою відповідь BIASED на коментар і навіть кажу, що я упереджений і знаю вашу думку, що це не те, що мені подобається. Але якщо ніхто не каже, що йому подобається чи не подобається, як би ви знали, що люблять інші? Я все ще думаю, що така система, яка є своєчасно, і обман 21 століття досягається по-різному. Наступного разу слід прочитати уважніше, перш ніж писати коментар на зразок ІМХО.
Мадменьо

Якщо у вас є Savegames, люди також поділяться ігровими іграми.
Деві Морган

1

Ну, ви в основному можете це зробити так:

Боси вбиті = 7

Кількість монет = 36

Володіє мечем = 0 (Ні)

Володіє серцем = 1 (Так)

Поточний рівень = 6

Поточний світ = 9

Здоров’я = 100

Код = 7V36R0A1T6O9A100

В основному кожна літера окремі типи


-3

Хоча такі рішення, як система персонажів Джоша Петрі, мають переваги (невеликий розмір збереження, працює на всіх примірниках гри), вони з'єднують дизайн ігор та державну систему, щоб бути невід'ємною для парольної системи. Будь-яка зміна пароля, штату чи дизайну, і вся система розпадається.

Набагато простішим рішенням було б скласти свою систему збереження відповідно до норми та просто додати систему паролів у верхній частині. Це може бути таким же простим, як збереження пароля в збереженні (можливо, подвоєння як ім'я файлу) та перевірка його при завантаженні, або настільки ж складне, як використання однієї з багатьох бібліотек шифрування навколо (що досить тривіально).


Здається, існує певна плутанина навколо цієї відповіді.

1) Оператор просто попросив пароль, який дозволить їм завантажити збереження ... немає вимоги, щоб пароль був збереженням.

2) У багатьох іграх сьогодні є значна потреба в збереженні, ми просто створили внутрішню систему швидкого збереження / завантаження, яка виробляла файли розміром 10 Мб ... для вікторини! Система збереження Джоша Петрі , хоча термін дії дуже обмежений - як тільки система магазину стає нетривіальною, паролі повинні мати величезну довжину, щоб зберігати всі відповідні дані.

Наприклад, що станеться, якщо є 30 начальників? 20 досягнень? Ми на півдорозі досягнення? На якому рівні він знаходиться? Скільки біт ми відкладемо за здоров'я, життя, монети, xp? Що робити, якщо знімок не є станом між рівнями ..., але на півдорозі через рівень - позиції гравця, вороги, снаряди, зруйновані / змінені місцевості раптом складають багато стану, який потрібно зберігати.

В перспективі, маючи на увазі алфавіт з 30 символами та паролем з десятьма літерами, ми маємо приблизно 50 біт, які варто зберігати. Не рідкість бачити, як гра / движок використовує до 320 біт лише для зберігання положення одного об'єкта, обертання та масштабування. Звичайно, ви можете робити всілякі оптимізаційні трюки, щоб зробити більше з меншим ... але в кінцевому підсумку ви витрачаєте час, присвячений для того, щоб зробити гру веселою - одна з найгірших оптимізацій, яку ви можете зробити.


3
Я думаю, що тут проблема, і з вашим коментарем вище, полягає в тому, що криптографічна безпека не є метою збереження стану гри у вигляді бітів під паролем. Палі, складені таким чином, легко повертаються, але важко відгадати хеши , і більше того. І з цієї ж причини це не викликає неправомірної зв’язки у тому, як ви уявляєте; якщо стан гри стає більш-менш складним, це робить і хеш (що робить недійсним попередні хеші), але система працює однаково добре до і після.
Сет Беттін

@Seth Battin "це не спричиняє надмірних зв'язків так, як ви уявляєте" О, здорово! Отже, в грі, над якою я зараз працюю, було збережено файл збереження, виміряний у мегабайтах ... все, що мені потрібно зробити, - це зробити кілька основних обфускуацій та відобразити її на екрані та вуалі! Зараз у нас ідеально гарна система паролів?
NPSF3000

3
Здається, ваша гра не підходить для цього методу.
Сет Беттін

@ NPSF3000 Який сенс паролів у цьому випадку? Якщо це забороняє іншим, хто використовує цю ж машину, використовувати свої збережені ігри без дозволу, то чому б просто не мати вхід один раз за гру з іменем користувача / пропуском? Якщо потрібно вказати, яку економію вони хочуть, це "ідентифікатор ігор збереження", а не пароль, і, швидше за все, це стане дружнішим. Оскільки це, якщо я вас правильно прочитав, вам потрібен інший пароль, не вказаний користувачем, кожен раз, коли він завантажує нове збереження? ЧОМУ? Яку корисну перевагу це дає комусь?
Деві Морган

1
@DewiMorgan Я нічого не вимагаю, я суто даю відповідь на запитання ОП: "Як би я створив систему паролів для гри для одного гравця? Наприклад, Mega Man X зберігає роботу, даючи вам ряд номерів що ви можете ввести пізніше, щоб завантажити своє збереження. " Моє рішення це робить, не зв'язуючи систему збереження та систему паролів разом. Відповідь, що голосує вгорі, має ті ж недоліки, що і моя, з тим, що вона вимагає, щоб вся гра була розроблена відповідно до методу.
NPSF3000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.