Разобрался тут намедни с паролями в Bomberman на NES.
Структура вполне типовая и простая: алфавит из 16 символов - "AOFKCPGELBHMJDNI", т.е. каждый символ это 4 бита информации. Всего в пароле 20 символов, после каждых 4х информационных символов идёт 1 символ чексуммы, который защищает блок соотвествующих информационных символов от модификации. Самый последний символ защищает не последний 4х символьный блок, а весь пароль, т.е. последний символ это сумма всех предыдущих символов, разумеется все чексуммы берутся по модулю 16.
Посимвольная структура пароля:
1)сотни очков (x00), легальные значения 0-9, если установить 10-15 то в соответствующей позиции будут "сломаные" цифры (другие символы шрифта)
2)наличие детонатора (достаточно любого ненулевого значения)
3)4 младших бита номера этапа (этапы с 0 по 15)
4)сотни миллионов очков (x00000000)
5)чексумма символов 1-4
6)тысячи очков (x000)
7)радиус пламени взрыва, можно устанавливать больше "легального", вплоть до 15, однако не стоит брать power up на увеличение, иначе сбросится до минимального
8)сотни тысяч очков (x00000)
9)защита от пламени взрыва (достаточно любого ненулевого значения)
10)чексумма символов 6-10
11)количество бомб, легальные значения 0-9, реальное количество бомб на 1 больше, т.е. предельно 10шт. если указать значения 10-15, то в начале раунда при установке бомб сначала будет ставиться 1-5 невидимых бомб, которые не взрываются и в которые упираются и противники и герой, только потом будут ставиться нормальные бомбы
12)единицы миллионов очков (x000000)
13)подобраны ролики (достаточно любого ненулевого значения)
14)десятки миллионов очков (x0000000)
15)чексумма символов 11-14
16)десятки тысяч очков (x0000)
17)так называемый сканер - отображает блоки с power up'ом и выходом другим цветом, собственно
вот видео где активирован подобный флаг (достаточно любого ненулевого значения). правда на видео не активированы другие плюшки
18)старшие 4 бита номера этапа, т.е. +1 в данном символе это +16 к номеру этапа. Легальные значения 0-3, однако можно задавать и больше, будем попадать на нелегальные этапы (всего получается 256 этапов от 0 до 255)
19)если выставить в 1 то получим возможность проходить сквозь кирпичные блоки, другие значения эффекта не дадут, т.к. производится XOR с 01 и сравнение на равенство 0. Записывается в ячейку по адресу 76. К сожалению power up на возможность прохождения сквозь бомбы не сохраняется в пароле (это ячейка с адресом 78, тоже должна быть 01).
20)чексумма символов 1-19
После взятия всех значений и расчёта чексумм символы пароля слегка шифруются:
1)инициализируем ключ нулём
2)берём i-й символ пароля
3)вычитаем 7
4)вычитаем ключ
5)берём операцию по модулю 16 (если в ходе вычитаний получили отрицательное число, то прибавляем 16 пока не получим число в диапазоне 0-15)
6)сохраняем полученное значение в качестве нового ключа и переходим к п.2 для обработки следующего символа пароля
Полученные числа (в диапазоне 0-15) используем как индексы (считаем с 0) в строке алфавита "AOFKCPGELBHMJDNI" для генерации пароля
Пример:
Сгенерируем вручную пароль на 1й этап с максимальными плюшками, не мешающими геймплею (т.е. возьмём 9 бомб (реально их будет на 1 больше, т.к. при значении 0 игра даёт 1 бомбу), максимальный радиус пламени 15 и все остальные полезные "плюшки" выставим в 1, очки оставим равными нулю).
Записываем наши числа и считаем чексуммы:
1)0
2)1
3)1
4)0
5)0+1+1+0=2 mod 16 = 2
6)0
7)15
8)0
9)1
10)0+15+0+1=16 mod 16 = 0
11)9
12)0
13)1
14)0
15)9+0+1+0=10 mod 16 = 10
16)0
17)1
18)0
19)1
20)0+1+1+0+2+0+15+0+1+0+9+0+1+0+10+0+1+0+1=42 mod 16 = 10
Теперь шифруем:
1)0-7-0=-7 mod 16 = 9
2)1-7-9=-15 mod 16 = 1
3)1-7-1=-7 mod 16 = 9
4)0-7-9=-16 mod 16 = 0
5)2-7-0=-5 mod 16 = 11
6)0-7-11=-18 mod 16 = 14
7)15-7-14=-6 mod 16 = 10
8)0-7-10=-17 mod 16 = 15
9)1-7-15=-21 mod 16 = 11
10)0-7-11=-18 mod 16 = 14
11)9-7-14=-12 mod 16 = 4
12)0-7-4=-11 mod 16 = 5
13)1-7-5=-11 mod 16 = 5
14)0-7-5=-12 mod 16 = 4
15)10-7-4=-1 mod 16 = 15
16)0-7-15=-22 mod 16 = 10
17)1-7-10=-16 mod 16 = 0
18)0-7-0=-7 mod 16 = 9
19)1-7-9=-15 mod 16 = 1
20)10-7-1=2 mod 16 = 2
Теперь представляем цифры в виде букв, для удобства пронумеруем алфавит от 0 до 15:
111111
0123456789012345
AOFKCPGELBHMJDNI
И получим наш пароль:
BOBAMNHIMNCPPCIHABOF
1й этап, 9 бомб (реально 10), радиус пламени 15 (реально 16), детонатор, защита от пламени, взяты ролики (ускорение), возможность ходить сквозь кирпичи, сканер - видим выход и powerup
Разумеется, тот же результат можно быстрее получить выставив нужные числа в
генераторе з.ы.
Тут пароли вроде с меньшим количеством плюшек, да и
описание структуры хромает. But my english is read only, а жаль...