Створення паролів для серії ігор Prince of Persia

Доброго дня, шановні користувачі.


Сьогодні я хотів би розповісти про одну чудову серію ігор. Багато хто познайомився з нею, завдяки версії на NES, деякі бачили перського принца на DOS, хтось грав у Принц Персії на Sega Genesis і... начебто все, але ні! Перша частина була портована на велику кількість різних ігрових платформ. А скільки систем паролів було придумано з цього приводу? А скільки портів було у другої частини? А які паролі були там?

Про це я і хотів би Вам розповісти.

Prince of Persia (Sega Master System/Sega Game Gear)

Теорія

Пароль складається з 6 позицій. Ці позиції зберігають дані ігрові параметри:

  • рівень (1-14)
  • час (0-99)
  • життя (0-7)
  • рандом (0-25)

Створення

1 позиція = ((рівень -1) + рандом) mod26

2 позиція = ((час div10) + рандом) mod26

3 позиція = ((час mod10) + рандом) mod26

4 позиція = (життя + рандом) mod26

5 позиція = рандом

6 позиція = ((сума позицій з 1 по 5) + 10) mod26

Кодування

Символи у позиціях приймають значення «ABCDEFGHIJKLMNOPQRSTUVWXYZ», де A = 0, B = 1... Y=24, Z=25.

Приклад створення пароля

Створіть пароль, який зберігає дані параметри:

  • рівень (12)
  • життя (6)
  • час (59)
  • рандом (18)

Обчислюємо:

1)

1 позиція = ((12 -1) + 18) mod26

2 позиція = ((59 div10) + 18) mod26

3 позиція = ((59 mod10) + 18) mod26

4 позиція = (6 + 18) mod26

5 позиція = 18

6 позиція = 10

2)

1 позиція = 3

2 позиція = 23

3 позиція = 1

4 позиція = 24

5 позиція = 18

6 позиція = (3 + 23 + 1 + 24 + 18 + 10) mod26 = 1

Тепер кодуємо отримані значення:

DXBYSB

Цікавий

У грі є порожня, за допомогою якої можна отримати безсмертя. Але перед поясненням, я хотів би обговорити архітектуру рівнів. Умовно розділимо екран на 3 поверхи.

Поверхи

Якщо у принца життя від 1 до 7, то при падінні з 2 поверху на 1, життя не витрачаються. А при падінні з 3 поверху на 1, витрачається 1 життя. Якщо життів 0, то відбувається все навпаки. При падінні з 2 поверху на 1, принц помирає, а при падінні з 3 поверху на 1, відбувається: гра дасть принцу 8 життів (не забуваємо, що максимум дорівнює семи).

8 життів

Після виконаної операції, принц зможе зістрибувати з 3 і 2 поверху, не завдаючи собі шкоди (якщо взяти 4 поверх, то принц помре). Також принц буде невразливим для ворожих атак (якщо зброя буде в руках). Після проходження рівня, що зникає і у принца знову стане 0 життів. А якщо з нулем життів напасти на стражника, то він Вас просто проігнорує і вбити його стане неможливо.

Принц-привид

Ось так ось.

  

Prince of Persia (Game Boy/Game Boy Color)

Теорія

Пароль складається з 8 позицій. Ці позиції зберігають дані ігрові параметри:

  • рівень (2-14)
  • час (1-59)
  • життя (3-9)

Примітка: на 7 рівень не можна створити пароль.

Створення

1 позиція = (4 позиція + 7 позиція + 8 позиція) mod10

2 позиція = (5 позиція + 6 позиція) mod10

3 позиція = (7 позиція + 8 позиція) mod10

4 позиція = життя

5 позиція = час mod10

6 позиція = час div10

7 позиція = рівень mod10

8 позиція = рівень div10

Кодування

До всіх позицій застосовується операція: XOR 5. Якщо після виконання цієї операції вийшло двозначне число, то треба відняти 4.

Приклад створення пароля

Створіть пароль, який зберігає дані параметри:

  • рівень (9)
  • життя (7)
  • час (35)

Обчислюємо:

1)

1 позиція = 0

2 позиція = 0

3 позиція = 0

4 позиція = 7

5 позиція = 35 mod10

6 позиція = 35 div10

7 позиція = 9 mod10

8 позиція = 9 div10

2)

1 позиція = (7 + 9 + 0) mod10 = 6

2 позиція = (5 + 3) mod10 = 8

3 позиція = (9 + 0) mod10 = 9

4 позиція = 7

5 позиція = 5

6 позиція = 3

7 позиція = 9

8 позиція = 0

Тепер кодуємо отримані значення:

6 XOR 5 = 3

8 XOR 5 = 13-4 = 9

9 XOR 5 = 12-4 = 8

7 XOR 5 = 2

5 XOR 5 = 0

3 XOR 5 = 6

9 XOR 5 = 12-4 = 8

0 XOR 5 = 5

Готовий пароль: 39820685

  

  

Prince of Persia (Sega Genesis)

Теорія

Пароль складається з 6 позицій. Ці позиції зберігають дані ігрові параметри:

US version:

  • рівень (1-13)
  • час (0-60)
  • життя (1-8)

EU version:

  • рівень (1-13)
  • час (0-60)
  • життя (0-8)

Якщо будете грати в цю гру, то краще вибирайте EU версію, так як:

  • в EU версії додали 4 додаткових рівня
  • в EU версії є музичний супровід на рівнях
  • в EU версії є лід-безсмертя

Створення

Умовно розділимо пароль на дві частини (кожна частина складається з трьох позицій).

Перша частина зберігає час:

(10545 * час) mod 17576

Отримане число з 10 CC переводиться в 26 СС (СС - система обчислення).

Потім отримане значення потрібно дзеркально відобразити. Якщо довжина отриманого «пароля» менша за 3 символи, справа дописується необхідне число нулів.

Друга частина зберігає час, кількість життів і рівень:

((10545 * час) + (14157 * (рівень-1)) + (5145 * життя)) mod 17576

Отримане число з 10 CC переводиться в 26 СС. Потім отримане значення потрібно дзеркально відобразити. Якщо довжина отриманого «пароля» менша за 3 символи, справа дописується необхідне число нулів.

Кодування

Символи у позиціях приймають значення «ABCDEFGHIJKLMNOPQRSTUVWXYZ», де A = 0, B = 1... Y=24, Z=25.

Приклад створення пароля

Створіть пароль, який зберігає дані параметри:

  • рівень (12)
  • життя (6)
  • час (39)

Обчислюємо:

Перша частина пароля:

(10545*39)mod 17576 = 411255 mod 17576 = 7007

7007 (10 СС) = 10,9,13 (26 СС)

Дзеркально відображаємо отримане значення:

10,9,13 =13,9,10

Друга частина пароля:

((10545*39) + (14157*(12-1)) + (5145*6))mod 17576 = (411255+155727+30870)mod 17576 = 268

268 (10 СС) = 10,8 (26 СС)

Дзеркально відображаємо отримане значення:

10,8 = 8,10

Дописуємо праворуч нуль:

8,10,0

Тепер кодуємо отримані значення:

13,9,10,8,10,0 = NJKIKA

Цікавий

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

Prince of Persia (SNES)

Ось і настав час поговорити про найкращу реалізацію першого перського принца (на мою скромну думку).

Порівняно з усіма попередніми версіями, для SNES зробили більш барвисті локації, поліпшили парирування, частково змінили початкові рівні і додали багато нових стадій (разом 20). А щоб гравець не мучився, час збільшили до 120 хвилин (грай скільки влізе).

Теорія

Пароль складається з 7 позицій, кожна позиція складається з 5 бітів, разом 7 * 5 = 35 бітів. Ці біти зберігають дані ігрові параметри:

  • рівень (1-20)
  • витрачений на гру час (0-7200) (в секундах)
  • життя (0-15)

Тепер подивимося з чого складається сирий пароль:

(?(0),S(0),L(3),T(0),T(7)) (C1(0),S(1),L(2),T(1),T(6))   (C2(0),S(2),L(1),T(2),T(5))   (C3(0),S(3),L(0),T(3),T(4))

(C4(0),S(4),U(0),T(8),T(9))   (C4(1),T(10),T(11),T(12),T(13))  (C4(2),C4(3),C4(4),T(14),T(15))

* у дужках вказано номер біта.

Позначення

S - номер рівня ((1-20) -1) у двійковій C.C.

L - кількість життів (0-15) у двійковій C.C.

U - невикористані біти.

- завжди дорівнює нулю.

T - витрачений на гру час (0-7200).

Час записується в паролі, відповідно до спеціальної формули:

(час * 7) + (5, якщо час mod60 ^ 0) + (5 * ((час div60) -1)) + рандом (0-6 + ((5, якщо час mod60 = 0) або (14534, якщо час div 7200 = 1)))

C1 = S(1) XOR S(4) XOR L(0) XOR L(1) XOR T(0) XOR T(1) XOR T(2) XOR T(5) XOR T(7) XOR T(8) XOR T(10) XOR T(13) XOR T(15) XOR U(0) XOR 1

C2 = S(1) XOR S(2) XOR S(3) XOR L(0) XOR L(2) XOR L(3) XOR T(1) XOR T(4) XOR T(5) XOR T(8) XOR T(9) XOR T(10) XOR T(12) XOR T(14) XOR T(15)

C3 = S(0) XOR S(1) XOR S(3) XOR L(2) XOR T(2) XOR T(3) XOR T(5) XOR T(6) XOR T(7) XOR T(8) XOR T(9) XOR T(11) XOR T(14) XOR U(0)

C4 = S(0),L(3),T(0),T(7)

+ S(1),L(2),T(1),T(6)

+ S(2),L(1),T(2),T(5)

+ S(3),L(0),T(3),T(4)

+ S(4),U(0),T(8),T(9)

+T(10),T(11),T(12),T(13)

+      0,      0,T(14),T(15)

Кодування

US/EU: «BTL3GY7Q9CVM4HZ8R+DWN5J12S!FXP6K».

JP: «AIQYEMU34BJRZFNVW5CKS1GOPX6DLT2H».

Приклад створення пароля

Створіть пароль, який зберігає дані параметри:

  • рівень (15)
  • життя (13)
  • час (95.00) або (5700 секунд)
  • невикористовуваний біт активовано

Переводимо значення в двійкову систему обчислення:

Рівень = 15-1 = 14 = 01110

Життя = 13 = 1101

Обчислюємо час:

Час = 7200-5700 = 1500

(1500 * 7) + (0, т. к. 1500 mod 60 = 0) + (5 * (25-1)) + рандом (т. к. 1500 mod 60 = 0, то рандом = 0-6 + 5 = 0-11. Я вибираю рандом = 11.)

10500 + 120 + 11 = 10631 = 0010100110000111

Обчислюємо контрольні суми:

C1 = 1 XOR 0 XOR 1 XOR 0 XOR 1 XOR 1 XOR 1 XOR 0 XOR 1 XOR 1 XOR 0 XOR 1 XOR 0 XOR 1 XOR 1 = 0

C2 = 1 XOR 1 XOR 1 XOR 1 XOR 1 XOR 1 XOR 1 XOR 0 XOR 0 XOR 1 XOR 0 XOR 0 XOR 0 XOR 0 XOR 0 = 0

C3 = 0 XOR 1 XOR 1 XOR 1 XOR 1 XOR 0 XOR 0 XOR 0 XOR 1 XOR 1 XOR 0 XOR 1 XOR 0 XOR 1 = 0

C4 = 0111 + 1110 + 1010 + 1100 + 0110 +0101 + 0000 = 110110

Записуємо отриманий пароль у двійковій С.С.:

(00111) (01110) (01010) (01100) (00110) (10101) (10100)

Записуємо отриманий пароль у десятковій С.С.:

(7) (14) (10) (12) (6) (21) (20)

Тепер кодуємо отримані значення:

US/EU: QZV475N

JP: 3NJZU1S

  

  

Prince of Persia 2: The Shadow & The Flame

Перша частина знайшла величезну популярність. Вихід сиквела був лише питанням часу. І через чотири роки з'явилося продовження. Але нова частина не знайшла бурхливих оплесків, якими нагородили першу частину. І портували її на невелику кількість ігрових платформ. А шкода! Я вважаю, що друга частина вийшла краще першої. Тепер принц подорожує не по одноманітних темних локаціях, а по цілій Персії. Але досить лірики, пора переходити до справи.

Гра обзавелася двома портами, які зберігають ігровий процес за допомогою паролів. Ці порти жахливі (краще грайте в DOS версію). SNES версія вийшла кострубата: музика дребезька, звуки супротивні, геймплей убитий і до всього цього, в грі вирізаний 14 рівень, в якому повинна відбутися битва з Джаффаром.

Версія для Sega Genesis не краща. Так як цю гру офіційно не випустили, то я її зміг побачити тільки за допомогою піратського картриджа на Сегу. І яке виявилося моє розчарування, коли я дійшов до 9 рівня і дізнався, що через бага зі статуєю коня, цей рівень непрохідний. Гру можна пройти, але для цього потрібен пароль на 10 рівень... а в книзі паролів, цієї гри не було.

  

Prince of Persia 2: The Shadow & The Flame (SNES)

Теорія

Пароль складається з 6 позицій, кожна позиція складається з 4 бітів, разом 6 * 4 = 24 біта. Ці біти зберігають дані ігрові параметри:

US/EU versions:

  • рівень (1-13)
  • час (0-164)
  • життя (1-15)

Тепер подивимося з чого складається сирий пароль:

(S(3),S(2),S(1),S(0))   (L(3),L(2),L(1),L(0))   (T1(3),T1(2),T1(1),T1(0))   (T2(3),T2(2),T2(1),T2(0))

(C1(3),C1(2),C1(1),C1(0))   (C2(3),C2(2),C2(1),C2(0))

Позначення

S - (рівень - 1) у двійковій С.С.

L - кількість життів (1-15) у двійковій С.С.

T1 - 1 значення (0-15) у двійковій С.С.

T2 - 2 значення (0-15) у двійковій С.С.

1 значення - кількість одиниць часу (число десятків з 1 значення переходить у 2 значення).

2 значення - кількість десятків часу (число десятків з 2 значення переходить до кількості сотень).

C1 = (сума позицій з 1 по 3) mod16

C2 = ((сума позицій з 1 по 3) div16) + 4 позиція

Кодування

Символи в позиціях приймають значення «BCDFGHJKLMNPRTVW», де B = 0... W=15.

Особливості збереження часу і працездатності пароля:

Якщо подумати, то все просто - одна позиція відповідає за час mod10, а інша за час div10 і максимальна кількість часу дорівнює 99. Але не все так просто. У паролі не перевіряється максимальне значення одиниць і десятків. Що це означає? У паролі можна встановити кількість десятків і одиниць від 0 до 15. Якщо я створю пароль, де кількість одиниць дорівнює 15, то одиниць буде 5, а 1 перейде в кількість десятків, анологічно, якщо я створю пароль, де кількість десятків дорівнює 15, то десятків буде 5, а 1 перейде в кількість сотень.

Виходить, максимальна кількість часу дорівнює:

150

+015

=

165

Але вище, я вже описав, що максимальне значення = 164. А чому? Це відбувається через контрольну суму. Якщо С2-16, пароль не працюватиме. Цей аспект я поясню трохи пізніше, а зараз перейдемо до генерації пароля (щоб зрозуміти подальшу оповідь, я раджу прочитати приклад генерації пароля).

Приклад створення пароля

Створіть пароль, який зберігає дані параметри:

  • рівень (2)
  • життя (1)
  • час (163)

Переводимо значення в двійкову систему обчислення:

Рівень = 2-1 = 1 = 0001

Життя = 1 = 0001

Обчислюємо час:

163= 150+13

1 значення = 13 = 1101

2 значення = 15 = 1111

Записуємо сирий пароль і обчислюємо 2 контрольні суми:

(0001) (0001) (1101) (1111) (****) (****)

C1 = 0001+0001+1101 = 1111

C2 = (0001+0001+1101)mod16 + 1111 = 0000 + 1111 = 1111

(0001) (0001) (1101) (1111) (1111) (1111)

Записуємо отриманий пароль у десятковій С.С.:

(1) (1) (13) (15) (15) (15)

Тепер кодуємо отримані значення:

CCTWWW

Підсумок

Я створив пароль CCTWWW. Якщо збільшити рівень на 1, пароль не буде працювати, оскільки C2 стане рівною 16. Непрацюючий пароль матиме вигляд: DCTWBB. А тепер перевіримо гру «на вошивість». Другий рівень дуже короткий, тому його можна пройти без втрати часу. Якщо я пройду рівень, який пароль видасть мені гра?

Раптом у системі паролів є секрет, який я не розкрив? А що як...

Пароль

… ось зараза. У грі не тільки геймплей жахливий, але і система паролів недороблена.

   

  

Prince of Persia 2: The Shadow & The Flame (Sega Genesis)

Теорія

Пароль складається з 5 позицій. Ці позиції зберігають дані ігрові параметри:

  • рівень (1-14)
  • час (0-99)
  • життя (1-12)

Створення

1 позиція = (рівень) або (рівень (1-7) + 15)

2 позиція = (час mod10) або (час mod10 + 10) або (час mod10 (0-2) + 20)

3 позиція = (1 позиція + 2 позиція + 4 позиція + 5 позиція) mod23

4 позиція = (час div10) або (час div10 + 10) або (час div10 (0-2) + 20)

5 позиція = (життя -1) або (життя (1-11) + 11)

Кодування

Символи в позиціях приймають значення «HFMGRANBPWTEIZVQDLYSKCX», де H = 0, F = 1... C=21, X=22.

Приклад створення пароля

Створіть пароль, який зберігає дані параметри:

  • рівень (11)
  • життя (10)
  • час (92)

Обчислюємо:

Перший крок:

1 позиція = рівень зберігається за однією з двох формул. Оскільки рівень більше 7, то зберегти дані можна тільки за першою формулою (11).

2 позиція = час зберігається за однією з трьох формул. 92 mod10 = 2. Це значення можна закодувати за будь-якою формулою і я вибираю третю (2 + 20 = 22)

3 позиція = 0

4 позиція = час зберігається за однією з трьох формул. 92 div10 = 9. Це значення можна закодувати тільки за першою і другою формулою, і я вибираю другу (9 + 10 = 19)

5 позиція = життя зберігаються за однією з двох формул. Це значення можна закодувати за будь-якою формулою і я вибираю другу (10 + 11 = 21).

Другий крок:

1 позиція = 11

2 позиція = 22

3 позиція = (11 + 22 + 19 + 21) mod 23 = 4

4 позиція = 19

5 позиція = 21

Тепер кодуємо отримані значення:

EXRSC

  

Ув'язнення

Ось і підійшов список ігор до кінця. Ну що ж, удачі, спасибі за прочитання.