| Разработка и ромхакинг > Ромхакинг и программирование |
| [SMD] Sonic Classic Heroes (усложнённая версия) |
| (1/1) |
| JAM:
Скачал я тут один замечательный хак -- Sonic Classic Heroes. Что-то вроде серии Sonic Heroes, портированной на Mega Drive с уровнями из первого и второго Соников. Всем меня этот хак устраивает, кроме одного -- сложности. Мочить боссов втроём в конфигурации "1 смертный, 2 бессмертных персонажа" довольно скучно с их обычным количеством жизней. Да и в бонус-уровнях второго Соника количество необходимых колец снижено до стандартного уровня игры в одиночку. Собственно, если что-то тебе не нравится, возьми, да переделай, как говорится. Что я и сделал. Такова психология хакера. Получилось 2 версии: Hard и Expert. Собственно, Hard-версия для того, чтобы веселее было поиграть втроём, а Expert-версия, если собрались поиграть вместе 3 задрота-профи. =) Также, обе версии проходимы и в одиночку. В Hard-версии жизни у боссов увеличены вдвое, требуемое количество колец в бонусах увеличено до стандартных значений Соника 2. Проходишь бонус хорошо -- собираешь иногда даже больше колец, чем в оригинальном Sonic 2 (третий персонаж помогает). Натыкаешься на колючки -- теряешь до 30 колец вместо 20, т.к. ударяются все 3 персонажа. В Expert-версии жизни у боссов увеличены втрое, а требуемое количество колец в бонусе увеличено в расчёте на троих. Так что теперь помимо женщин и Тетриса на 9-й скорости не прощают ошибок и бонусы из Sonic'а 2 в этой версии. :D Матом просьба не ругаться, все бонусы проходимы без сейвов. =) Да, некоторые с 10-й попытки, и иногда (вернее, очень часто) вам не будет хватать всего 1 или 2 колец, но количество Starpost'ов в игре позволяет собрать все изумруды. В некоторых бонусах главная сложность -- попасть в 3-й сегмент (как и в Формуле 1). Keep Trying! Немного технической информации: Над усложнением я работал в общей сложности примерно 24 часа, включая тестирование. Казалось бы, что там такого -- изменить несколько байт, да Соники изрядно документированы и дизассемблированны. Да, только я в ассемблере M68000 вообще не разбираюсь. Да, есть редакторы, где можно изменить количество жизней, но они не расчитаны на хаки, где первая и вторая часть игры слиты в один РОМ с изменением кода. Поэтому, все боссы не по тем адресам расположены, где они должны быть. Благодаря редактору я обнаружил структуру, которую и пришлось потом поискать в изменённом РОМе. Путём проб и ошибок я нашёл всё-таки жизни боссов. Изменить их -- как 2 байта переслать, а вот найти реально непросто было. EDIT: заставил-таки меня этот хак написать коротенький код на ассемблере. Что ж, с почином меня. Немного о себе: С хаками так или иначе работаю 9 лет, но кроме исправленной версии Sonic 2 Omega это первый патч, что я в рунете выкладываю. Авторы оригинального хака: flamewing, ColinC10. Страничка хака: Sonic Classic Heroes Прилагаю скриншот и пачти для последней на данный момент версии (0.07f6). Хак не мой всё-таки, да и зачем постить изменённые РОМы, когда размер обоих патчей 166 байт? Хак можно скачать отсюда, и на него применять один их моих патчей из архива. Патчить любой программой, работающей с IPS. Если вы увидели красный экран в эмуляторе, то поставьте галочку напротив "Auto Fix Checksum" в настройках. Про глюк с боссом Metropolis знаю, но как исправить -- ХЗ (я больше эксперт по SNES). Это и в оригинальной игре так, если жизни подкрутить. Он проходим, если с помощью Тейзла подлететь повыше. EDIT: глюк исправлен. Архив с обновлёнными патчами перезалит. Отдельно выкладываю патч для оригинального Соника 2, позволяющий без проблем установить любое количество ударов для босса зоны Metropolis. По поводу глюков, не касающихся боссов или бонусов -- к авторам хака. Приятной игры! P.S. To creators: if you see this topic guys, you did an awesome job! P.P.S. Надо же, в день рождения Соника выложил патчи... =) С днём рождения тебя, синий ёжик! Побольше тебе удачных игр (вроде 4-й части, если из современных) и красивых хаков! |
| 2nd Channel:
Круто. Спасибо за патч. Но на твоём месте всё-таки прикрепил бы и РОМ, который нужно непосредственно патчить. Написано много, глаза разбегаются, не сразу дошло, что надо патчить этот 0.07f6 со стороннего сайта. |
| JAM:
--- Цитата: 2nd Channel от 24 Июнь 2013, 22:42:32 ---Круто. Спасибо за патч. Но на твоём месте всё-таки прикрепил бы и РОМ, который нужно непосредственно патчить. --- Конец цитаты --- Хорошо, сделаю по просьбам трудящихся. Появилась идея насчёт босса Metropolis. Если поставить ему больше 8 ударов, то потом он будет просто висеть в воздухе, что и получилось. Достать в супер-формах, а также с помощью Тейлза можно, но кривовато как-то. Так вот, идея. Что если вместо увеличения количества ударов, приблизить момент, когда босс будет стрелять лазером (ещё до уничтожения защитных сфер)? В Hard версии после 4 ударов, например, а в Expert -- сразу же. А количество ударов обратно 8 поставить? Тогда в Супер-форме будет халява, с другой стороны. |
| 2nd Channel:
--- Цитата: JAM от 25 Июнь 2013, 09:08:42 ---Так вот, идея. Что если вместо увеличения количества ударов, приблизить момент, когда босс будет стрелять лазером (ещё до уничтожения защитных сфер)? В Hard версии после 4 ударов, например, а в Expert -- сразу же. А количество ударов обратно 8 поставить? --- Конец цитаты --- Я лично за. Всё равно, выходит, что иначе босса никак не усложнить, а --- Цитата ---Тогда в Супер-форме будет халява, с другой стороны --- Конец цитаты --- насчёт этого, думаю, не так страшно. На то она и супер-форма, хотя мне приходилось играть за всё знакомство с Соником лишь единожды "в таком режиме". |
| JAM:
Вот не люблю я тяп-ляп делать. Если уж взялся, то качественно. В общем, покопался я в коде босса MTZ. Путём проб и ошибок нашёл я ту паршивую команду из-за которой босс, стреляющий лазером, если его ударить, когда он вверху экрана, останавливается и висит, как груша. Ну и затёр эту команду. Естественно, что без дизассемблированного кода S2 и списка комманд M68000 я бы не справился... Что ж, первый опыт написания ASM кода для Genenis прошёл успешно :cool: Теперь жизни босса Metropolis ничем не отличаются от других боссов, а после 7 ударов он в обеих версиях начинает лазерные атаки. |
| Segaman:
затирать команды надо $4E71 - это команда nop или "ничего не делать" а вообще вот тебе совет: --- Код: ---org $0 incbin "rom.bin" org $(куда надо) code(какой надо) org $(куда надо) code(какой надо) end --- Конец кода --- таким образом ты добавишь ром, и посреди него будешь вклинивать код. так все делают. главное не забывай о том, что вклиненный код имеет свой размер, и если он перетирает код, нужно это учитывать. лучше всего просто делать ссылку в конец рома, и там писать код. если нужны примеры, я их предоставлю |
| JAM:
--- Цитата: Segaman от 26 Июнь 2013, 19:33:14 ---затирать команды надо $4E71 - это команда nop или "ничего не делать" --- Конец цитаты --- Да, я так и сделал. Изменил move.w на 3 nop'а. Буквально вчера только команды посмотрел и был ошарашен двухбайтовыми опкодами. Даже nop и тот -- 2 байта. Ну и поразило, что одной командой можно записать в такую-то ячейку памяти такое-то значение или сравнить 2 регистра между собой. Ну и big endian, само собой, тоже редкость. Потом я даже понял, что вместо nop'ов можно изменить адрес прыжка с ветки на оператор rts вместо той команды (rts сразу за ней). Всего 1 байт изменений будет вместо 6. Сегодня днём выложу, наверное. Абсолютно никакой разницы в коде, просто патчи меньше весят. И за совет спасибо. Это мой дебют именно в модификации кода на M68000. А так, я ASM 65816 знаю, там принцип такой же со свободным местом, только там куда сложнее его искать -- всё на банки разбито. Для изготовления РОМа больше 8 мегов надо вообще свой собственный способ адресации прописывать. Ну и little endian жизнь осложняет. На 68000 вообще легкотня получается. Прям в hex редакторе легко можно прописать команду с обращением к 123456 байту в РОМе, а на SNES ассемблере иногда желательно, чтобы в тот же банк был прыжок, да ещё и в уме надо высчитывать, что команда AF C0 DE 82 -- обращение к адресу 15EC0 если это LoROM или к 2DEC0, если это HiROM. |
| Ti_:
--- Цитата: JAM от 27 Июнь 2013, 11:01:36 ---И за совет спасибо. Это мой дебют именно в модификации кода на M68000. На 68000 вообще легкотня получается. Прям в hex редакторе легко можно прописать команду с обращением к 123456 байту в РОМе --- Конец цитаты --- Поздравляю. ;) Раз такое дело, может и свой хак надумаешь запилить. (не обязательно соника) |
| JAM:
Выложил оптимизированную версию. Код изменён чуть по-другому. На геймплей не влияет, просто пачти более компактные стали. Теперь и выложить не стыдно. --- Цитата: Ti_ от 30 Июнь 2013, 19:08:18 ---Поздравляю. ;) Раз такое дело, может и свой хак надумаешь запилить. (не обязательно соника) --- Конец цитаты --- Спасибо :) Честно говоря, уже над двумя хаками работаю длительное время. Правда, там я соавтор, генератор идей, кодер и бета-тестер. Если про полностью свой хак говорить, такой тоже есть, но из-за 2 этих хаков времени на него не хватает, да и желания пока нет (очень много переделывать надо). |
| Навигация |
| Главная страница сообщений |