| Разработка и ромхакинг > Ромхакинг и программирование |
| [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, где часто каждый байт экономят... |
| Навигация |
| Главная страница сообщений |