Дело было вечером, делать было нечего. Здравствуйте, сегодня я хотел бы рассказать про генерацию паролей в играх: Konami Wai Wai World, Wai Wai World 2: SOS!! Paseri Jou, Moai-Kun и Mystical ninja starring Goemon.
Konami Wai Wai World Теория Пароль состоит из 14 позиций, каждая позиция состоит из 5 битов, итого 14*5= 70 битов. Эти биты сохраняют большое количество игровой информации, которую я опишу в битовой структуре.
Сырой пароль 1 позиция: C
0, Vg
0, Vr
0, Tg
0, Tr
0 2 позиция: C
1, P
0, Ar
0, Cl
0, H
0 3 позиция: C
2, Sw
0, Gw
0, Lw
0, Kmw
0 4 позиция: C
3, S
0, G
0, L
0, Km
0 5 позиция: C
4, K
3, K
2, K
1, K
0 6 позиция: C
5, SB
0, FB
0, GK
0, MkK
0 7 позиция: C
6, A
3, A
2, A
1, A
0 8 позиция: C
7, R
1, R
0, C
7, C
6 9 позиция: C
0, U4
0, U3
0, U2
0, U1
0 10 позиция: C
1, KKw
0, Mw
0, Mkw
0, Fw
0 11 позиция: C
2, KK
0, M
0, Mk
0, F
0 12 позиция: C
3, A
9, A
8, ?
0, ?
0 13 позиция: C
4, U5
0, X
0, MB
0, KKB
0 14 позиция: C
5, A
7, A
6, A
5, A
4Обозначения Vg - № патронов (0-1) в двоичной СС у Vic Viper.
№ | Патроны Vic Viper |
0 | Начальные |
1 | Лазер |
Vr - ракеты у Vic Viper.
Tg - № патронов (0-1) в двоичной СС у Twin Bee.
№ | Патроны Twin Bee |
0 | Начальные |
1 | Овальные |
Tr - кулаки у Twin Bee.
P - увеличение силы всех персонажей (бонус из Gradius).
Ar - увеличение стойкости всех персонажей (броня).
Cl - плащ.
H - дополнительная жизнь (онигири).
Km - Конамимен.
L - Конами леди.
G - Гоемон.
S - Саймон.
F - Фума.
Mk - Майки.
M - Моаи.
KK - Кинг Конг.
w - дополнительное оружие.
K - количество ключей (0-10) в двоичной СС.
A - количество боеприпасов (0-1000) в двоичной СС.
GK - собран ключ на локации Гоемона.
SB - убит босс и собран ключ на локации Саймона.
MkK - собран ключ на локации Майки.
FB - убит босс на локации Фумы.
MB - убит босс и собран ключ на локации Моаи.
KKB - убит босс и собран ключ на локации Кинг Конга.
X - убит финальный босс и на локациях нет: бонусов (сердечки, ракеты, зелье), дополнительного оружия, ключей, двигающихся и проваливающихся платформ.
R - random (0-3) в двоичной СС.
U - неиспользуемые биты (хотя, я точно не уверен).
? = 0.
C - контрольная сумма.
Контрольная сумма C = (сумма позиций с 1 по 7) + (сумма позиций с 9 по 14)
Условия работоспособности пароля- Дополнительное оружие можно активировать, если есть соответствующий персонаж
- Улучшения для Twin Bee и Vic Viper можно активировать, если есть все персонажи
- Количество ключей = 2 + SB0 + FB0 + GK0 + MkK0 + KKB0 + MB0 + X0 + U50 - Km0 - L0 - F0 - S0 - G0 - Mk0 - M0 - KK0
Шифрование Шифрование происходит по этой формуле:
x позиция XOR Ch[(x-1) + ((Random XOR 3) *4)], где x = 1-14.
(Ch[(x-1) + ((Random XOR 3) *4)]) - данной операцией мы получаем индекс Ch. На основе индекса, нужно получить значение и подставить его в формулу.
Ch = [0,0,18,17,3,1,0,0,17,0,0,1,1,3,0,17,0,1,3,3,17,0,2,2,1,2]
Потом происходит второй этап шифрования:
Нечётные позиции | Чётные позиции |
+0 | +14 |
КодированиеアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンWai Wai World 2: SOS!! Paseri Jou Теория Пароль представляет собой таблицу, состоящую из 6 столбцов и 4 строк. Столбец условно обозначим как одну позицию, и в итоге, пароль состоит из 6 позиций. Каждая позиция может принимать значения от 0 до 4.
Сырой пароль 1 позиция: 4 - S
2 - S
0 - 1P
1 - 2P
12 позиция: 1P
1, S
33 позиция: 1P
0, S
24 позиция: 2P
1, S
15 позиция: 2P
0, S
06 позиция: 4 - S
3 - S
1 - 1P
0 - 2P
0Обозначения S - № уровня (1-14) в двоичной СС.
№ | Уровень |
1 | 1 |
2 | 2 |
3 | 3-1 |
4 | 3-2 |
5 | 4 |
6 | 5 |
7 | 6-1 |
8 | 6-2 |
9 | 7 |
10 | 8-1 |
11 | 8-2 |
12 | 8-3 |
13 | 9-1 |
14 | 9-2 |
1P и 2P - № дополнительных персонажей (0-3) в двоичной СС для первого и второго игроков соответственно.
№ | Дополнительные персонажи |
0 | Гоемон, Упа, Саймон |
1 | Гоемон, Билл, Фума |
2 | Упа, Фума, Саймон |
3 | Упа, Саймон, Билл |
КодированиеЧисловые значения позиций переводятся в соответствующее количество кубов.
Moai-Kun Теория Пароль состоит из 6 позиций, каждая позиция состоит из 4 битов, итого 6*4= 24 бита. Пароль сохраняет определённые уровни и random.
Сырой пароль 1 позиция: C
5, R1
1, R1
0, L
32 позиция: C
4, R2
1, R2
0, L
23 позиция: C
3, R3
1, R3
0, L
14 позиция: C
2, R4
1, R4
0, L
05 позиция: C
1, R5
1, R5
0, C
66 позиция: C
0, R6
1, R6
0, C
7Обозначения L - № уровня (0-15) в двоичной СС.
Уровень = № уровня * 4 + 1; № уровня>13 даёт глючные уровни.
R(1-6) - random(1-6) (0-3) в двоичной СС.
C - контрольная сумма.
Контрольная сумма C = № уровня * 17
Условие работоспособности пароляСумма всех шести рандомов mod 4 = 0.
Кодирование0123456789ABCDEF
Mystical ninja starring Goemon Теория Пароль состоит из 14 позиций, каждая позиция состоит из 4 битов, итого 14*4= 56 битов. Эти биты сохраняют большое количество игровой информации, которую я опишу в битовой структуре.
Сырой пароль 1 позиция: S
3, S
2, S
1, S
02 позиция: L
7, L
6, L
5, L
43 позиция: U1
0, Sk
0, E
0, G
04 позиция: L
3, L
2, L
1, L
05 позиция: Cs
0, P
0, Bm
0, B
06 позиция: Sh2
3, Sh2
2, Sh2
1, Sh2
07 позиция: U2
0, Skw
0, Ew
0, Gw
08 позиция: M2
3, M2
2, M2
1, M2
09 позиция: M1
3, M1
2, M1
1, M1
010 позиция: M4
3, M4
2, M4
1, M4
011 позиция: M3
3, M3
2, M3
1, M3
012 позиция: Sh1
3, Sh1
2, Sh1
1, Sh1
013 позиция: C2
3, C2
2, C2
1, C2
014 позиция: C1
3, C1
2, C1
1, C1
0Обозначения S - № уровня (0-4) в двоичной СС.
№ | Уровень |
0 | Karakuri castle |
1 | The Demon cave |
2 | The Black Ship Skull |
3 | The Skull, once again |
4 | Skeleton island |
L - жизни (1-255) в двоичной СС.
Если жизней>127, то игра приравняет их количество к 0.
U - неиспользуемые биты.
G - Гоемон.
E - Эбисумару.
Sk - Саскэ.
Примечание:
0 - персонаж есть.
1 - персонажа нет.
w - улучшено оружие персонажа.
B - бамбуковая трубка.
Bm - бомба.
P - пропуск на Black Ship Skull.
Cs - ракушка.
Sh1 - количество единиц сюрикенов (0-15) в двоичной СС.
Sh2 - количество десятков сюрикенов (0-15) в двоичной СС.
M1 - количество десятков денег (0-15) в двоичной СС.
M2 - количество сотен денег (0-15) в двоичной СС.
M3 - количество тысяч денег (0-15) в двоичной СС.
M4 - количество десятков тысяч денег (0-15) в двоичной СС.
C(1-2) - контрольная сумма (1-2).
Контрольная сумма C1 = ((S
3 + S
2+ S
1+ S
0 + L
7 + L
6 + L
5 + L
4) * 6) mod 16
C2 = ((сумма позиций с 1 по 12) + ((сумма чётных позиций) div 16)) mod 16
Условие работоспособности пароляC1 OR C2 ≠ 0
КодированиеУдачи, спасибо за прочтение!