Разработка и ромхакинг > Ромхакинг и программирование
Prince of Persia (NES) генератор паролей
(1/1)
angrylion:
Наваял генератор паролей для Prince of Persia(NES). Вроде, такого ранее в инете не появлялось. Встроен также анализатор существующих паролей: он расскажет, какому уровню и количеству минут соответствует пароль.
Комментируем.
Также нуждаюсь в вашем тестировании на предмет багов.
Также можете мне задавать вопросы о системе паролей в Prince of Persia(NES), ибо я кое-что об этом знаю.
Spirit:
Ну круто... че то вроде там генерирует... только зачем это все ? я в эту игру на приставке играл тока, а на эмуляторе даже рома нету, зачем... как то прошло уже
angrylion:
Не знаю, что сказать. Писал я, конечно, ради удовольствия, а не для того, чтобы узнать пароли к уровням :)
Стыжусь признаться в этом пороке :blush: , но нахожу в программировании некую дозу fun'а :).
Mefistotel:
angrylion, Молодец! Так держать! И не слушай никаго!

--- Цитата ---Ну круто... че то вроде там генерирует... только зачем это все ? я в эту игру на приставке играл тока, а на эмуляторе даже рома нету, зачем... как то прошло уже
--- Конец цитаты ---
Зачем тебе вообще нужна эмуляция??? Скачай ром и вспомни былое.
Йобан Матич:

--- Цитата: angrylion ---Также можете мне задавать вопросы о системе паролей в Prince of Persia(NES)
--- Конец цитаты ---
Объясни как работает. =)
CaH4e3:
Ну ты намудрил. ;) Скопировать кусок асма в сях каждый сможет. ;) А вот расчет то пароля там совсем простенький на самом деле.


--- Код: ---    pass2 = random()
    pass5 = random()
    pass1 = ((level & 3) + pass2) % 10
    pass7 = ((level >> 2) + pass5) % 10
    pass0 = ((time % 10) + pass2) % 10
    pass3 = ((time / 10) + pass5) % 10
    sum = pass0 + pass1 + pass2 + pass3
    sum += (sum % 10)  + pass5
    sum += (sum / 10)  + pass7
    pass4 = sum % 10
    pass6 = sum / 10
--- Конец кода ---

Если генерировать случайные числа в диапазоне от 0 до 7, а значение уровня в диапазоне от 0 до 13 (время, соответственно от 0 до 99), получим все возможные варианты паролей идентичных генерируемым игрой.
Пароли с random() значениями 8 и 9 будут работать точно также, но игра таких никогда сгенерировать не сможет.
Пароль не проверяет максимальное значение уровня, так что 14 и 15 будут вести в никуда, в несуществующие уровни.
Еще несколько уникальных паролей можно выжать, если для pass1 использовать диапазон значений от 0..9, это тоже будут пароли, которых оригинальный код генерировать не умеет.
goukiX:
удерживаем вниз+влево+старт на экране newgame и password и получаем 90 мин вместо 60.
CaH4e3:
Это, кстати, не намеренный "чит", а глюк. Когда вбегаешь в комнату с зажатым вниз и старт, еще до того, как персонаж остановится перед бутылкой, происходит набор одного символа в пароле на девятку и сразу его проверка. Первый разряд пароля как раз отвечает за десятки минут, и хотя такой пароль неверный, но... Процедура проверки пароля пересчитывает контрольную сумму и кладет ее точно на то место в памяти, где она должна быть, правильную. Сравнив с изначально неправильной, которая там была (нули), она отбрыкивает пароль как неверный, но... Принц то еще не добежал, и флаг верности или неверности пароля просто не проверяется, смерти не происходит. В итоге получается, что при вбегании в комнату пароль с одной девяткой был скорректирован на правильный (90009010). Как только принц останавливается, повторное срабатывание проверки пароля дает уже положительный результат и соответственно 90 минут вместо 60. Собственно, финт может работать даже если после вбегания в комнату с зажатыми вышеназванными кнопками их отпустить до того, как принц остановится, а потом просто неспеша нажать старт, эффект будет такой же.
angrylion:
Да, у тебя гораздо кошернее. Только не

--- Код: ---pass0 = ((time % 10) + pass2) % 10
pass3 = ((time / 10) + pass5) % 10
--- Конец кода ---
, а

--- Код: ---pass0 = ((time / 10) + pass2) % 10
pass3 = ((time % 10) + pass5) % 10
--- Конец кода ---

CaH4e3:
Ага, в жавовском пасгене уже исправил, а тут забил. ;)
Zephyr:
Молодца!  :)
Crash Nicker:
Что ж, даже если ген писался "для галочки", то он получился очень даже неплохой. Молодцы (если ещё и Санчеза следует иметь в виду... :))
Spirit:

--- Цитата: Mefistotel от 25 Июль 2008, 07:40:33 ---angrylion, Молодец! Так держать! И не слушай никаго!Зачем тебе вообще нужна эмуляция??? Скачай ром и вспомни былое.

--- Конец цитаты ---

Я не говорю что эта вещь плоха, просто именно эта игра... ну как сказать... там со старта все нормально проходиться, нету ничего интересного, и пароли не дают ничего интересного, я скачаю ром поиграю, вспомню ) просто не вижу жуткой необходимости в генерации паролей, лучше сделай генератор паролей на метал геар, вот это будет очень интересно и полный руль
angrylion:
Для Metal Gear есть два онлайн-генератора:
http://www.math.purdue.edu/~dbabcock/personal/vg/metal-gear.php
http://unoriginal.org/people/cybern/metal_gear.html

Также есть текстовое описание того, как работает пароль:
http://www.math.purdue.edu/~dbabcock/personal/vg/mg-passwords.txt
Навигация
Главная страница сообщений

Перейти к полной версии