Разработка и ромхакинг > Ромхакинг и программирование
[NES] Хаки F-1 Race. Зацикленная версия + версия с износом шин
(1/1)
JAM:
Давно у меня была идейка сделать эту непроходимую игру из детства проходимой. Сейчас появилась возможность. Выкладываю своё творение. Уже не один байт изменён, а куда больше.

Список отличий от оригинальной игры:
1. На пятой и последующих трассах количество кругов не бесконечно, а равно двум.
2. Игру можно "пройти". Также, как и игру Road Fighter, например. После десятой трассы загружается первая трасса, но уже на следующем уровне сложности. При этом, после пройгрыша рекорд сохраняется на том уровне сложности, с которого вы начинали. Кроме того, сам уровень сложности на заставке не переключается на тот, до которого вы дошли.
3. Игра на любом уровне сложности начинается с первой трассы.
4. Изменена нумерация трасс на экране "CIRCUIT No.". Каждая трасса имеет номер в виде цифры от 0 до 9. (Сделано неумышленно, но так даже лучше, чем править "A" на десятку. Кроме того, сама первая трасса есть ничто иное, как ноль, повёрнутый на π/2 =) )

Уровни сложности отличаются между собой лишь типом резины, как и в оригинальной игре.
1 уровень -- на плавных поворотах заносит, начиная со скорости 367 км/ч (мягкая резина).
2 уровень -- на плавных поворотах заносит, начиная со скорости 352 км/ч, а также на максимальной скорости при прогретой машине (средняя резина).
3 уровень -- на плавных поворотах заносит, начиная со скорости ~330 км/ч и на скорости ~450 км/ч на прогретой машине (жёсткая резина).

На трассах 0-4 на всех уровнях сложности можно врезаться несколько раз.
На трассах 5-6 -- 1 раз.
На трассах 7-9 -- ни разу.
На прогретой машине -- от 3 раз на каждой трассе.


Версия с износом шин
В архиве 4 РОМа (разные уровни сложности) и патч на время (пункты 7 и 8) для выпущенной ранее версии.

Список отличий от оригинальной игры:

1. Игру можно "пройти". Также, как и игру Road Fighter, например. После десятой трассы загружается первая трасса, но уже на следующем уровне сложности. При этом, после пройгрыша рекорд сохраняется на том уровне сложности, с которого вы начинали. Кроме того, сам уровень сложности на заставке не переключается на тот, до которого вы дошли.
2. Игра на любом уровне сложности начинается с первой трассы.
3. Изменена нумерация трасс на экране "CIRCUIT No.". Каждая трасса имеет номер в виде цифры от 0 до 9. (Сделано неумышленно, но так даже лучше, чем править "A" на десятку. Кроме того, сама первая трасса есть ничто иное, как ноль, повёрнутый на π/2 =) )
4. Количество кругов зависит от уровня сложности. 2 круга на первом, 3 круга на втором, 4 круга на третьем.
5. Добавлена эмуляция износа шин. Первые 2 круга на любом уровне сложности машина ведёт себя одинаково, как на уровне сложности 1 в оригинальной игре. На третьем круге машина себя ведёт, как на уровне сложности 2, а на четвёртом круге -- как на уровне сложности 3.
6. Начиная с третьего круга добавляется бонусное время (кроме режима Expert). Таким образом, после 2 кругов машину заносит больше, но и времени прибавляют тоже больше. Поскольку повороты придётся проходить на меньшей скорости, время прохождения круга увеличится. Более подробно -- ниже.
7. На финише оставшееся время трансформируется в очки, как только машина достигнет горизонта. За каждую секунду добавляют 100 очков. Опять-таки, по примеру игры Road Fighter. Быстрее прошли трассу -- получили больше очков.
8. Устранён глюк при наборе миллиона очков (а вы и не знали о таком?). В оригинальной игре после этого трасса исчезает, а остаётся одна трава, по которой надо ехать вслепую, не видя повороты. Теперь очки считаются с нуля по достижению миллиона, а в рекорд записывается 999990 очков.

Уровень заноса на поворотах, как и в оригинальной игре.
1-й и 2-й круги -- на плавных поворотах заносит, начиная со скорости 367 км/ч (свежая резина).
3-й круг -- на плавных поворотах заносит, начиная со скорости 352 км/ч, а также на максимальной скорости при прогретой машине (разрушающаяся резина).
4-й круг -- на плавных поворотах заносит, начиная со скорости ~330 км/ч и на скорости ~450 км/ч на прогретой машине (убитая резина).

И ещё одна заметка.
В оригинальной игре после первого же круга на 5-й трассе начинает действовать подлая подпрограмма, которая ворует у вас 4 секунды с каждого следующего круга. Таким образом, времени прибавляется всё меньше и меньше. Раньше я просто отключал эту подпрограмму, а теперь решил вернуть вам похищенное время. =)

Режим Easy:
Бонус +4 секунды к началу 3-го круга.
Бонус +8 секунд к началу 4-го круга.

Режим Normal:
Бонус +2 секунды к началу 3-го круга.
Бонус +4 секунды к началу 4-го круга.

Режим Hard:
Бонус +1 секунда к началу 3-го круга.
Бонус +2 секунды к началу 4-го круга.

Режим Expert:
Никаких бонусов >:-D
Просто отключил программу.

В режиме Expert игра проходима. Проверял на последней трассе (а если голова пролезет, то всё пролезет =)). Оставалась целая 1 секунда (правда с сохранками)! Это много, на самом деле. =) Даже при окончании времени можно по инерции доехать до черты и получить ещё 45 секунд.

Скриншоты:


Всем приятной игры. Против изменения и модификации не возражаю совершенно, если что =)
Guyver(X.B.M.):
Крутяк! Вот это работа проделана!!! Респект!

Добавлено позже:
По скринам видно, что играли на гадком эмуляторе, который при изменении кода в роме перестаёт узнавать ром (так как понимает ром по контрольной сумме) и в итоге картинка трассы, особенно на поворотах, получается "рваная". Эх... Неужели под этот всем известный ром разработчики нормально свои эмуляторы не могут заточить...
3DSchumacher:
Мне всегда казалось, что так себя ведут все эмуляторы... И не только в этой игре.
Guyver(X.B.M.):
Увы и ах... Далеко не все. Это зависит от создателя эмулятора...

Например, я знаю один ром! Это ВООБЩЕ ПРИКОЛ. Создатель одного известного эмулятора заставил эмулятор определять ром по НАЗВАНИЮ (!!!). Т.е. тупо меняешь название рома - и он не работает! Я был в шоке от этого открытия, но это факт...
JAM:

--- Цитата: Guyver(X.B.M.) от 12 Февраль 2014, 10:52:00 ---Крутяк! Вот это работа проделана!!! Респект!

--- Конец цитаты ---
Спасибо. =)
На самом деле, изменено около 100 байт, но эти 100 байт надо было ещё написать.
6 часов работы вместе с тестами и прохождением примерно.


--- Цитата: Guyver(X.B.M.) от 12 Февраль 2014, 10:52:00 ---По скринам видно, что играли на гадком эмуляторе, который при изменении кода в роме перестаёт узнавать ром (так как понимает ром по контрольной сумме) и в итоге картинка трассы, особенно на поворотах, получается "рваная". Эх... Неужели под этот всем известный ром разработчики нормально свои эмуляторы не могут заточить...

--- Конец цитаты ---
Да, кстати, заметил, что оригинальную игру он не рвёт. Но что поделать, на NES нет хороших эмуляторов. Скажем так, эмуляторов, обладающих набором нескольких функций, которые бы меня устраивали, но В ОДНОМ ЭМУЛЯТОРЕ.
Guyver(X.B.M.):
Самый прикол в том, что более слабые эмуляторы справляются лучше хороших...



Я тоже делал хак на эту игру. Но как посмотрел потом, что большинство вменяемых эмуляторов её криво эмулируют - и бросил...
3DSchumacher:

--- Цитата: Guyver(X.B.M.) ---и бросил...
--- Конец цитаты ---
ну теперь, когда у людей есть флешкарики или просто возможность изготавливать самодельные карики, смысл опять появился ;)
The GR:

--- Цитата ---6 часов работы вместе с тестами и прохождением примерно.
--- Конец цитаты ---

И в итоге чуть ли не самый интересный и качественный хак десятилетия  :thumbup:
JAM:

--- Цитата: Guyver(X.B.M.) от 15 Февраль 2014, 10:08:50 ---Я тоже делал хак на эту игру. Но как посмотрел потом, что большинство вменяемых эмуляторов её криво эмулируют - и бросил...

--- Конец цитаты ---
Ну и зря... Это ж не твоя проблема. Кому надо, скачают определённый эмуль. Вот хак Кабала один единственный эмулятор переваривает (точнее даже, его хакнутая версия), и ничего. Что изменял-то?

И да, Шумахер прав. Сейчас ведь есть флеш-картриджи. Хоть и они далеко не всё понимают, но РОМ в 24 килобайта поймут точно.



Добавлено позже:

--- Цитата: The GR от 17 Февраль 2014, 23:13:01 ---И в итоге чуть ли не самый интересный и качественный хак десятилетия  :thumbup:

--- Конец цитаты ---
Кончай прикалываться =)


По теме. Сделал вторую версию этого хака. Сейчас только протестировать осталось. Не на работоспособность, а на проходимость (ужо всё работает). В общем, суть в том, что по-прежнему будут 3 уровня сложности, по-прежнему, начало с первой трассы. Разница в том, что надо будет проехать разное количество кругов в зависимости от уровня сложности по формуле "уровень сложности + 1". При этом, первые 2 круга машина едет условно на мягких шинах на всех уровнях сложности. А дальше, шины начинают "проседать", и в поворот можно вписаться на всё меньших скоростях. Т.е. заносы на круге 3, как на уровне сложности 2, а на круге 4 -- как на уровне сложности 3. "Смена шин" чётко на финишной черте происходит. В общем, я попытался эмулировать износ шин, как в более продвинутых гонках.
3DSchumacher:

--- Цитата: JAM ---В общем, я попытался эмулировать износ шин, как в более продвинутых гонках.
--- Конец цитаты ---
люто доставил! Ждем, очень ждем :thumbup:
The GR:

--- Цитата ---Кончай прикалываться
--- Конец цитаты ---

Серьёзно.
Хак класса "доработанный и избавленный от глюков оригинал" большая редкость для ретрогеймерства.
JAM:
Поздравляю с нашим общим праздником, мужики!


--- Цитата: The GR от 19 Февраль 2014, 11:38:29 ---Серьёзно.
Хак класса "доработанный и избавленный от глюков оригинал" большая редкость для ретрогеймерства.

--- Конец цитаты ---
Тогда спасибо =)
Я всегда стараюсь избавлять игры, за которые берусь, от глюков. Если это мне по зубам, конечно. Из-за этого однажды ромхакером и стал, когда ДОСТАЛО. Примерно так: "Ну неужели разработчики не знали про этот глюк. Бесит уже. Когда-нибудь сам его исправлю".
sinicum:

--- Цитата: JAM ---Если это мне по зубам, конечно.

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

JAM,  с праздником...
..если не секрет - расскажи..  :ohmy:в ЧЁМ работал (как дебажил ) ,  ну завидую я,  :blush:ну невежда.. (?). Ну ТЫ даёшшь..  "Синтаксис" чё-ли наМОЗГлял..!..? Браво..
JAM:
sinicum
Спасибо, и тебя тоже =)
Да нет тут никакого секрета. Для поиска нужных адресов памяти использовал эмулятор NESten 0.6 F, для редактирования -- Hex-редактор Hiew 6.11.

Как я всё это делал.
1. Искал определённые адреса памяти, в которых хранятся нужные значения. Использовал упомянутый эмулятор. Доисторический, но с удобный функцией поиска чит-кодов. Этим и занимался. Нашёл адреса, отвечающие за очки, за время, за номер уровня, за сложность и т.п.

2. Ознакомился со списком комманд ассемблера NES (6502). Всегда держал список комманд открытым в блокноте.

3. Когда я примерно понял, что именно искать в РОМе, начал искать. К примеру, найти код, переключающий уровни, было проще всего. Зная адрес ячейки, отвечающей за уровень, я искал комманду INC level в 16-ричных кодах, где level -- название ячейки.

4. Найдя нужное место, где исполняется именно тот кусок кода, что мне нужен, писал подрограмму в свободном месте и делал вызов из места в пункте номер 3.

5. Всё это проверял на эмуляторе.
sinicum:
JAM,  значит дебаг "на коленке", как всегда делали наши "Кулибины". Вспомнился анекдот, там в конце: "...А чё, так можно было, что ли?":) уважух, сам такой. А этот эмуль был, наверное,  самым первым с "дебаггером", и я тоже крутил .nes'ки..
У тебя как, "асм" осиливается? Хотя, там же голый код, просто нужен опыт.. так что удачи! :hi:
JAM:

--- Цитата: sinicum от 28 Февраль 2014, 21:25:31 ---JAM,  значит дебаг "на коленке", как всегда делали наши "Кулибины". Вспомнился анекдот, там в конце: "...А чё, так можно было, что ли?":) уважух, сам такой.

--- Конец цитаты ---
Спасибо =)
Ну да, можно и без ручек. :lol:
Одно дело -- код писать, тут уж всё ручками надо, а другое -- уровни делать. Здесь и правда лучше редактором.


--- Цитата: sinicum от 28 Февраль 2014, 21:25:31 ---У тебя как, "асм" осиливается? Хотя, там же голый код, просто нужен опыт.. так что удачи! :hi:

--- Конец цитаты ---
Спасибо.
Осиливаю потихоньку, визуально уже различаю через Hex-редактор, где код, а где таблица какая-нибудь. Три дня работы над хаком и уже появилиась такая читалка. В Матрице говорили правду -- сначала видишь просто символы, а потом уже -- блондинку, брюнетку. Например, A5 17 0A 85 19 -- это явно код, а 17 18 19 1B 1C 1F -- таблица, музыка или что-то ещё.

Кстати, что меня поразило, в 6502 нет оператора короткого безусловного перехода а-ля BRA из 65c816. Все безусловные переходы -- только через JMP, а это 3 байта вместо двух. Даже если надо прыгнуть всего байт на 20-30. И это на NES, где часто каждый байт экономят...
Навигация
Главная страница сообщений

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