| Разработка и ромхакинг > Ромхакинг и программирование |
| Хак TMNT TF (nes). Кто-нибудь может помочь? |
| (1/2) > >> |
| BalinDMK:
Ради развлечения взялся я недавно хакать TMNT Tournament Fighters на NES. Целью ставил попробовать добавить еще одного персонажа. Переписал довольно много кода, добавил несколько chr банков, чтобы содержать дополнительную графику, в общем, привел меню выбора игрока, уровня, версус экран, в удобоваримый вид (см. скриншот) . Однако, несколько часов поиска не дали ответа на один вопрос: Где хранятся комбинации спецприемов для персонажей? Например, вниз, назад, А, в случае Леонардо. Насколько я понял, $608 содержит переменную, которая увеличивается при последовательном наборе кнопок из комбинации. Т.е. нажимаешь вниз - $608 присваивается 1, назад - 2. Но, где хранится переменная и адрес, по которому проверяется какие именно кнопки должны быть нажаты, я не нашел. Буду очень благодарен, если кто-нибудь сможет мне помочь с этим. |
| iddqd:
Можно сюда: http://www.ninjaturtles.ru/phpBB2/viewtopic.php?f=7&t=1278 |
| BalinDMK:
Так как в данный момент я занят в других проектах, которые отнимают много сил и времени, я вряд ли буду продолжать в одиночку заниматься черепахами. В связи с этим выкладываю ips патч до рабоче-тестовой версии, возможно кому-нибудь будет интересно. Внимание. Патч ставится на (U) [!] версию. Нормальная игра за нового персонажа (Slash) невозможна. Отсутствуют таблицы анимаций, урона, не изменена практически вся графика персонажа в бою. Патч выкладывается исключительно для интересующихся. P.S. Я приверженец тезиса - "Информация должна быть свободной", поэтому вы можете использовать мои наработки в любых целях, кроме коммерческих, если возможно - со ссылкой на автора. Если кто-то готов заняться отыскиванием всех таблиц урона и проч., то можно довести хак до рабочего состояния вместе. P.P.S. В правилах не нашел указаний относительно некропостинга, поэтому, если я что-то нарушил, то категорически извиняюсь. |
| Ti_:
$5390 - таблицы анимаций $6770 - таблицы урона |
| BalinDMK:
Выкладываю апдейт-багфикс к хаку. Ставится на чистую игру. Исправил серьезный баг в новом коде, который калечил графику персонажей в бою и крашил Шреддера. Также увеличил количество программных банков для хранения новых таблиц данных. Ti_, 5391h или 9381d - таблицы дистанций, с которых удар рукой превращается в ближний удар рукой. 6770h еще не проверил. |
| Ti_:
--- Цитата: BalinDMK от 08 Август 2010, 07:34:53 ---Ti_, 5391h или 9381d - таблицы дистанций, с которых удар рукой превращается в ближний удар рукой. --- Конец цитаты --- Т.е. их там много? Тогда надо написать какие найденные/какие нужно найти и т.д. Вот вроде как таблица кадров при движении назад: $5724 |
| BalinDMK:
Ti_, Я неверно выразился. Не нахождение таблиц, а, скорее, нахождение тех мест в коде, где выводится число для загрузки по таблице. Так просто и не объяснишь. Вот, например: $612 - номер удара. 00 для простого удара рукой Лео, 07 для простого удара ногой и т.п. В случае со Слешем, при ударе рукой в $612 неверно заносится вместо 00 - 02. Из-за этого проигрывается не та анимация. В $612 пишется так: --- Код: ---8332 - ldy $12 lda 9388, y sta $612, x --- Конец кода --- То есть проблема в $12. А вот где в $12 заносится неверное значение, я найти не могу. Глаз замылился. Добавлено позже: Этот хак не пошел на Nestopia, а значит не пошел бы и на настоящей NES. Начал с нуля, удвоил количество банков, пошагово переписываю код для возможности добавления новых персонажей. Но, так как в последнее время был занят в другой области, то работа движется очень медленно. Добавлено еще позже: Нашел кое-какие интересные данные, которыми хочу поделиться: $4C0 - Порядковый номер мелодии в прослушивании BGM в опциях. $829D от $4C0 - Настоящий номер мелодии. (Например, если $4C0 = 0 - "BGM 01", то $829D = 2E) $9E - номер уровня $E3CB - загрузка данных о параллаксе на уровне $E3DF - загрузка данных о графике уровня $E928, $E927 - данные о палитре $E3F9 - загрузка структуры уровня $E920 (1E930h) - ссылки на структуру уровней story по порядку $E46D - загрузка музыки уровней далее $9025-$8F80 - продолжается загрузка музыки $A0DC (20ECh); $A03F; $A1A4; $A1EE - четыре канала мелодии уровня "Pirate Ship". Добавлено позже: Столкнулся с серьезной проблемой. Разбирающиеся ромхакеры, помогите, пожалуйста. Суть проблемы: Пытаюсь вынести процедуру, которая загружает номера банков для графики персонажей в бою, в другой Prg-банк. Для этого копирую из 0x027152 (оригинальная процедура) 39 байт в 0x002070 (свой банк). В 0x027152 вписываю следующий код: --- Код: ---lda #60 sta $d5 lda #80 sta $d6 jsr fec0 jsr fed0 rts --- Конец кода --- Этот код заносит в $d5 и $d6 оффсет для перехода. Прыжки fec0 и fed0 - мой код смены банков туда и обратно. Результат: при входе в бой ром крашится через несколько секунд. Подозреваю, что это может быть связано с прерываниями, но как исправить не разумею. Прилагаю ips патч, в котором можно посмотреть на проблему. Буду очень благодарен за помощь. |
| evgeny:
я не пойму в каком адресном пространстве ($8000-$FFFF) эта процедура? --- Код: ---lda #60 sta $d5 lda #80 sta $d6 jsr fec0 jsr fed0 rts --- Конец кода --- Если в диапазоне переключаемых страниц ($8000-$BFFF), то вполне очевидно почему не работает, потому как после переключения страниц идет возрат к этому коду, а его уже нет, так как страница переключилась. Следовательно код должен быть продублирован на всех сраницах, которые будут замещать какое-то время оригинальную, либо написан в диапазоне непереключаемых страниц ($С000-$FFFF). |
| BalinDMK:
В диапазоне переключаемых страниц. По $B142. В $B142 заношу оффсет в $D5 и $D6. Перехожу к $FEC0, где меняю нулевую переключаемую страницу ($8000-$9FFF) на свой банк. Перехожу к $8060, где расположен дубль процедуры загрузки номеров банков. После загрузки идет RTS к $B14D, которая меняет нулевую переключаемую страницу обратно, и возврат к оригинальному коду. Добавлено позже: Нашел проблему. Нулевая страница не меняется обратно. Банк я меняю так: --- Код: ---FEC0 (смена на мой банк) : lda #06 sta $8000 lda #01 sta $8001 jmp ($00d5) FED0 (смена обратно): lda #06 sta $8000 lda #01 sta $8001 rts --- Конец кода --- Вот вторая часть, $FED0, почему-то не меняет банк обратно. |
| evgeny:
На самом деле банк обратно у тебя не меняется, у тебя в обоих случаях присваевается банк под номером 1, а во втором случае следовало брать номер последнего банка. причем я так понимаю это должна быть переменная, в которой сохранен номер предыдущего банка. |
| BalinDMK:
Я так понимаю, никакого простого способа определить, какой именно банк находится в нулевой странице, нет? Пробую учитывать все записи 06 в $8000 и сохранять номера банков в $D7, а при возврате грузить из $D7, но все равно крашится. Правда уже по-другому. Причем, создается ощущение, что неверный банк записывается в первую страницу ($A000-BFFF). Чуть не забыл, искреннее спасибо за помощь, evgeny! |
| evgeny:
Обычно перед переключением банка сохраняют значение и в переменной, так что, возможно такая переменная уже есть. Бывает еще в самих банках в определенных местах пишут номера, т.е. допустим ,по адресу $9FFF.И в каждом банке свой номер, потом просто считывается $9FFF и узнается какой банк. Но мне непонятно зачем переключать этот банк на 2(1) страницу? Как там может быть твой банк, если 0-6 должны быть оригинальные банки, новые добавляются ведь после них, перед последней страницей $C000-$FFFF. К тому же вполне возможно что там (в нулевом банке) переключаются даные DMC семплов, а это значит, что если банк во время проигрывания будет не на своем месте, то будут сбои в семлах. |
| BalinDMK:
Нет, похоже, что переменной нет. Насчет нумерования банков я уже и сам думал, пока представляется лучшей идеей. Дело в том, что я пытаюсь сделать romhacker friendly код, чтобы после добавления одного персонажа можно было добавить и других. Для этого увеличил количество банков вдвое. Ром использует вторую часть банков, поэтому первая свободна под мой код и данные. Я дублирую каждую важную процедуру и данные, скажем загрузку палитр иконок, в свой банк, а на то место, где она была, устанавливаю джамп на смену банка, выполняю процедуру, возвращаюсь в оригинальный код. Это позволяет располагать загружаемые данные как угодно, оставляя место под одного или более дополнительных игроков. Насчет семплов, да, но после выполнения каждой процедуры я меняю банк обратно (по крайней мере думал, что меняю), поэтому все данные располагаются там где и должны. Прошу прощения за косноязычие, я в последнее время совсем разучился внятно излагать мысли. |
| evgeny:
Семплы тут скорее всего не процессор проигрывает, DMA там, так что, может работать параллельно с процессором и считывать данные невзирая на то, что банки переключаются. Считывание не будет останавливаться и ждать пока страница переключится обратно. Вобще с DMA есть всякие ньюансы, побочные действия бывают. Подробностей не знаю, но вроде бы идет влияние на mid-screen эффекты и прерывания, так, что с семлами осторожность надо проявлять. |
| BalinDMK:
Проблему решил загрузкой того же банка не в нулевую страницу, а в первую. Спасибо! |
| Dragon:
BalinDMK, молодец! Я вот тоже хотел бы свой хак этой шедевральной игры сделать. В частности хотелось бы сделать немного сильнее Майка (уж больно он слабый), упростить ряд суперприемов (огонь у Шредера и суперудар Лео), ну и кое-какие баги еще исправить. Хотелось бы еще добавить нового персонажа - Сплинтера, причем в качестве секретного) Подскажи, пожалуйста, какими прогами пользуешься для работы :) |
| Shredder:
BalinDMK, отличные новости, молодец! Приятно знать, что кто-то занимается этой игрой. Тебе удалось как-нибудь решить вот эту проблему? http://www.emu-land.net/forum/index.php/topic,27498.msg395115.html#msg395115 И как насчёт того, чтобы использовать сразу мой хак, и в него уже пробовать добавлять персонажей? Именно по той причине, что я сделал там нормальную скорость ударов игрокам вместо "замедленного кино" и убрал множество неприятных багов. А силовые показатели персонажей легко можно изменить, если кому-то по-своему нравится, это не суть. |
| BalinDMK:
--- Цитата: Dragon от 18 Ноябрь 2010, 17:02:34 ---Подскажи, пожалуйста, какими прогами пользуешься для работы :) --- Конец цитаты --- Дебаггерами в трех версиях Fceu, TileLayerPro для замены графики, Tiny Hexer для работы с кодом. --- Цитата: Shredder от 19 Ноябрь 2010, 23:59:13 ---Тебе удалось как-нибудь решить вот эту проблему? --- Конец цитаты --- Да, проблему решить удалось. Я переписываю код, чтобы данные грузились из другого места и не были "вплотную" как в оригинале. --- Цитата: Shredder от 19 Ноябрь 2010, 23:59:13 ---И как насчёт того, чтобы использовать сразу мой хак, и в него уже пробовать добавлять персонажей? --- Конец цитаты --- Нет смысла, так как я смещаю положение таблиц, и твой хак все равно пришлось бы переписывать заново. P.S: Вот скриншот из последней версии хака: |
| Shredder:
В общем, как я там и говорил, ты взялся переписывать весь ром... Т.к. это единственный путь. Ну тогда удачи. Ждём первую альфа/бета версию хака) |
| BalinDMK:
--- Цитата: Shredder от 21 Ноябрь 2010, 06:49:13 ---В общем, как я там и говорил, ты взялся переписывать весь ром... Т.к. это единственный путь. Ну тогда удачи. Ждём первую альфа/бета версию хака) --- Конец цитаты --- Ну да, по сути, да. Спасибо. Все, что отвечает за графику, я почти доделал. На очереди коллизии. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |