Избавляемся от бессмертия Дона и Кейси

Здесь выкладываются различные хаки и дополнения к Tournament Fighters
Shredder
Сообщения: 105
Зарегистрирован: 18.04.14 09:42

Избавляемся от бессмертия Дона и Кейси

Сообщение Shredder »

Как многие наверное знают, в оригинальной игре есть возможность получить "неуязвимость", играя за Дона и Кейси. В моём хаке все баги изначально пофиксены, но для тех, кто не хочет играть в хак, я решил сделать патч и к оригинальной игре, который устраняет все известные баги, в результате которых Дон или Кейси могут получить неуязвимость. Для применения достаточно распаковать архив, запустить exe-файл и указать путь к американскому (!) рому, после этого жмём Patch и всё готово.
invuln_fix_v3.zip
(3.18 КБ) 18944 скачивания
Для тех, кому интересно, немного "теории":
Бессмертие Дона - это побочный эффект от разрешения ему пускать в прыжке шар. Прыжок - это состояние 01 по адресу 0520 в оперативке игры. В оригинальном роме разработчики добавили проверку-запрет на пускание шара только если Дон был перекинут или взят Шреддером в "мясорубку" (состояния 0A и 0B в 0520 соответственно), но при этом почему-то забыли об остальных ситуациях игры с кодами от 02 до 09, в которых тоже положено было запретить пускать шар. В итоге Дон может получить бессмертие, если перебрасывает кого-то сам (09) и в это время выпустит шар, либо выпустив шар во время суперудара (08), либо находясь в состоянии "получил удар" (03) - это "отшатывание" после обычных ударов и момент сразу после выкидывания Шреддером из своей мясорубки, а также нахождение под вихрем Кейси, пока он ещё крутится. Этот вихрь я, кстати, называю песком) Бессмертие получается как побочный эффект от преждевременного прерывания любых специфических состояний игры, в которых персонажу на время прописывается неуязвимость (03, 09 и т.п.): при нормальном положении дел эта неуязвимость снимается сразу после завершения такого состояния, но при прерывании этого состояния пусканием шара байт бессмертия в ячейке памяти не обнуляется и мы получаем баги. Примерно то же самое происходит и в случае с Кейси, только там не отфильтровали состояние нокаута (04), оставив возможность сделать во время него суперудар. Добавив небольшую подпрограмму в РОМ, эти баги легко устранить.

Доку по программированию Денди, если кому интересно, можно взять здесь:
http://tv-games.narod.ru/library/nes.htm
Там она самая первая в списке, под названием "Архитектура и программирование Dendy."

Список номеров состояний игрока, записываемых в ячейку 0520 в TMNT TF:

Код прыжка – 01
Код взятия шара – 02
Код при попадании по персу (отдаление или лежание) – 03
Код нокдауна или после осыпания песком Кейси, когда песок заканчивает крутиться и перс остаётся шататься – 04
Код пускания шара – 05
Код поворота в другую сторону – 06
Код приседа – 07
Код выполнения суперудара – 08
Код броска, когда бросаешь ты сам – 09
Код бросания тебя противником – 0A
Код взятия тебя Шреддером – 0B
Код победной стойки – 0C

Выявить эти состояния просто: открываем эмулятор fceuxdsp, ставим break на 0520 и смотрим, что туда записывается.
Ответить