Доброго дня, шановні користувачі.
- Prince of Persia (Sega Master System/Sega Game Gear)
- Теорія
- Створення
- Кодування
- Приклад створення пароля
- Цікавий
- Поверхи
- 8 життів
- Принц-привид
- Prince of Persia (Game Boy/Game Boy Color)
- Теорія
- Створення
- Кодування
- Приклад створення пароля
- Prince of Persia (Sega Genesis)
- Теорія
- Створення
- Кодування
- Приклад створення пароля
- Цікавий
- Prince of Persia (SNES)
- Теорія
- Тепер подивимося з чого складається сирий пароль:
- Позначення
- Кодування
- Приклад створення пароля
- Prince of Persia 2: The Shadow & The Flame
- Prince of Persia 2: The Shadow & The Flame (SNES)
- Теорія
- Тепер подивимося з чого складається сирий пароль:
- Позначення
- Кодування
- Особливості збереження часу і працездатності пароля:
- Приклад створення пароля
- Переводимо значення в двійкову систему обчислення:
- Обчислюємо час:
- Записуємо сирий пароль і обчислюємо 2 контрольні суми:
- Записуємо отриманий пароль у десятковій С.С.:
- Тепер кодуємо отримані значення:
- Підсумок
- Пароль
- Prince of Persia 2: The Shadow & The Flame (Sega Genesis)
- Теорія
- Створення
- Кодування
- Приклад створення пароля
- Ув'язнення
Сьогодні я хотів би розповісти про одну чудову серію ігор. Багато хто познайомився з нею, завдяки версії на 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
Ув'язнення
Ось і підійшов список ігор до кінця. Ну що ж, удачі, спасибі за прочитання.