| Разработка и ромхакинг > Редакторы для консольных игр |
| [NES] Chip ’n Dale Rescue Rangers (CaD Editor) |
| << < (2/4) > >> |
| evgeny:
--- Цитата: spiiin ---а вот это как получается? 16 байт заголовка + самый старший байт просто копируется, так? --- Конец цитаты --- Заголовок - да, остольное нет. Там система переключаемых банков, в зависимости от банка по разному может быть. Долго все объяснять, но в данном случае адрес C000-FFFF фиксирован и при размере PRG части в 128 кб эти адреса соответствуют адресам в роме 1С010-20010. --- Цитата: spiiin ---я ща думаю вот над чем - раньше я порядок экранов в игре точно знал и по нему сортировал появление объектов. а теперь не совсем уже ясно будет по раскладке, в каком порядке в игре это будет проходиться. --- Конец цитаты --- Ну раньше порядок экранов знал, а теперь из рома этот порядок можно прочитать, какая разница? |
| spiiin:
--- Цитата ---Ну раньше порядок экранов знал, а теперь из рома этот порядок можно прочитать, какая разница? --- Конец цитаты --- порядок экранов нигде не хранится. есть только карта экранов и карта скроллов. а список объектов разработчики видимо вручную сортировали в порядке прохождения уровня. я то этот порядок не буду знать заранее, если разрешу в редакторе его настраивать. так что надо либо пользователей заставить следить, чтобы все объекты на уровне по порядку появления экранов шли, либо автоматически этот порядок считать, что я хочу сделать Добавлено позже: так, начал чуть разбирать формат дверей. они общие на всю игру, а не только на уровень. это круто :) |
| evgeny:
Ну есть еще таблицы указателей на адреса каких-то данных, может там что есть. 1E2B5-младший байт адреса 1E2C4 -старший байт адреса Еще есть данные по адресам: 1E201 1E210 1E23D 1E34C 1E26A 1E288 1E25B |
| Lomax:
1e26a - номер трека, играемого на уровне 1e25b - используемый набор палитр 1e201 - используемая архитектура уровня 1e210 - указатель на начальный экран 1e23d - начало спрайтов врагов Добавлено позже: Roket, графика к первой части уровня полностью готова к использованию) будем ждать новой версии редактора, где можно будет ставить выходы, и, возможно, менять карту уровня) |
| spiiin:
со скроллом так: в каждом байте старшие 3 бита кодируют возможность пройти в разных направлениях, а младшие 5 указывают на то, куда телепортирует игрока дверь, если она есть на этом экране. Описания дверей по адресу 1E673, формат есть на acmlm. --- Цитата ---1e23d - начало спрайтов врагов --- Конец цитаты --- тогда уже так точнее :) : 1E23D graphics set for enemies/objects (8x=enemy gfx, 9x=tile gfx) 1E24C graphics set for level tiles (8x=enemy gfx, 9x=tile gfx) Добавлено позже: Lomax, я делаю пока что только форму уровня, двери может быть тока через версию :) хочу сделать автоматическую расстановку экранов по порядку, только завтык в том, что когда разрешен скролл в обе сторону невозможно определить, надо ли сортировать объекты слева направо или справа налево. Будет всегда справа налево, тока с таким раскладом идемпотентность нарушается - на оригинальном роме одно место на первом подъеме неправильно отсортируется, так что я сразу поправленный ром выложу в архиве. |
| Lomax:
--- Цитата: spiiin от 31 Март 2012, 22:16:42 ---Добавлено позже: Lomax, я делаю пока что только форму уровня, двери может быть тока через версию :) --- Конец цитаты --- ок) мы не торопимся - лучше день потерять, зато потом за 5 минут долететь))) пока врагов порисую Добавлено позже: --- Цитата: spiiin от 31 Март 2012, 22:16:42 ---на оригинальном роме одно место на первом подъеме неправильно отсортируется, так что я сразу поправленный ром выложу в архиве. --- Конец цитаты --- не есть гуд, я уже в своем роме много чего сделал)) Может лучше патч, чтобы поставить на любой хак? |
| spiiin:
Lomax, там в одном месте только такая штука на всю игру. Думаю, те кто начал делать хак, смогут вручную это место поправить. Это нехорошо конечно, но самое простое решение :) Ща на скринах объясню в чем проблема. Карта уровня 0. слева - поправленная версия. Я по стрелочкам могу алгоритмом однозначно определить, в каком порядке будут проходиться все экраны, считая, что двунаправленная стрелка означает направление вправо. справа - версия из игры. однозначно сказать в каком порядке будут проходиться экраны нельзя :( Почему разработчики поставили там такую стрелку - хз. Добавлено позже: Вторая беда в том, что если делать, как просит evgeny, считывая все из ROM, иногда случаются поломки. Например, ошибка разработчиков в уровне D, там случайно перекрываются на 1 байт массив координат объектов и массив самих объектов. Там это прошло незаметно, но если дать возможность в редакторе вписать последний объект, то получится, что он пропадет. Чтобы избежать таких багов, придется выбирать, либо поддерживать все костыли оригинального рома, либо убрать из него проблемные места, зато дать удобные возможности для редактирования (пока что я хочу вырезать из оригинала вот тот портящий все поворот и убрать сыр в конце первой зоны, потому что там сортировка объектов нарушена разработчиками умышленно, с правильной босс не появляется %)). Я за второй вариант, так как редактор в основном используется для глобальных переделок, а не для мелких правок оригинальной игры. Добавлено позже: мда, доделал редактор раскладок, но теперь надо переделать вообще все остальные части (редактор экранов, так как теперь точно нельзя сказать, какой экран какому уровню принадлежит, редактор тайлов, так как тайлы зависят не от моих условных "подуровней", а от уровня (12 штук) или двери (32 штуки), редактор врагов, так как теперь экраны можно переставлять, и их координаты меняются, редактор дверей). Стока всего быстро сделать не выйдет. Так что лучше не ждать новых версий и делать хаки в последней версии (0.4). пока всё. |
| spiiin:
"двери", если что, объект типа 5. ставить можно и нужно на тех экранах, где они в игре были, либо править карту скроллов в хекс-редакторе (там три байта на скролл, пять байт на номер двери) |
| spiiin:
Так, помимо скролла бека уровня разобрал способ скроллинга игровых объектов. За списком объектов в уровне лежат n байт, которые определяют для каждой линии высоты уровня, в какую сторону сортируются объекты (00 - слева направо, 03 - справа налево, другие значения не используются). Причем эти байты втиснуты вплотную в описания объектов, так что увеличить высоту уровня тоже не выйдет (тока если передислоцировать их куда-то). Добавлено позже: Зато отсюда следует, что сортировку врагов все-таки можно сделать :) |
| spiiin:
Roket, по количеству врагов ограничение есть, ага :( вообще враги описываются по всему уровню, но на момент начала написания редактора я мог сделать только так, разделив их по частям на подуровни. В след. версии я это уберу, но я ее сделаю, тока примерно когда вы к уровню 5-6 подберетесь, не раньше. пока придется либо довольствоваться этим, либо править список врагов руками в хекс-редакторе %) список начал кодов объектов [ПЕРЕД списком лежит еще 4 массива с описаниями координат X и Y] 0:0x10388 A:0x10456 B:0x105A1 C:0x106D1 D:0x10890 E:0x10A1D F:0x10B0E G:0x10C88 H:0x10DB3 I:0x10EA1 J:0x10FED Добавлено позже: Да, заодно, собрал в кучу исправленное описание дверей и уровней Описание дверей (25 записей) 1E673 - индекс экрана в раскладке. 1E68B - Y экрана. 1E6A3 - X экрана. 1E6BB - номер блока графики для фона. 1E6D3 - номер блока графики для объектов. 1E6EB - номер используемой палитры. 1E703 - номер второй палитры (влияет на объекты типа Вжика и Рокки и и используется для блинка). 1E71B - побитовое описание блинка цветов (из первой и второй палитры). 1E734 - позиция появления игроков Y. 1E74C - позиция появления игроков X. Описание уровней (15 записей). 101B2, 101A3 - указатели на старшие байты координаты X объектов (номера экранов). 101D0, 101C1 - указатели на младшие байты координаты X объектов (позиция на экране). 101EE, 101DF - указатели на старшие байты координаты Y объектов (номера экранов). 1020C, 101FD - указатели на младшие байты координаты Y объектов (позиция на экране). 1022A, 1021B - указатели на тип объектов. 10248, 10239 - указатели на данные о направлении скролла для каждой линии высоты уровня. 1E201 - индекс в описании больших блоков уровня (совпадают для пар уровней). 1E26A - номер трека на уровне. 1E2A6, 1E297 - указатели на раскладку (форма уровня). 1E2C4, 1E2B5 - указатели на описание (направление скролла + номер двери). 1E210 - номер в раскладке стартовой комнаты. 1E23D - номер блока графики для объектов (8x=enemy gfx, 9x=tile gfx). 1E24C - номер блока графики для фона (8x=enemy gfx, 9x=tile gfx). 1E25B - номер палитры, используемой на уровне. 1E279 - номер второй палитры, используемой на уровне. 1E288 - побитовое описание блинка цветов (из первой и второй палитры). 1E22E - размер по высоте раскладки уровня. 1E21F - размер по ширине раскладки уровня. |
| spiiin:
evgeny, быстро посмотрел, как устроен выбор фона под тайлом, который можно собрать или взять. это явно указать нельзя, зависит от младших четырех бит номера объекта. они являются указателем в массиве из 16 номеров (вроде бы уникальный для каждого уровня, для первого хранится по адресу 1E909). Действительно, сложно подобрать под объект подходящий фон, пожелание принимается :) Добавлено позже: Rocket вон в своем левеле это грамотно обошел, и не заметно проблемы :) |
| spiiin:
Доделываю новую версию по чуть-чуть. основное сделал, надо тока всяких защит от ошибок навешать, чтобы редактор не вис, если бесконечный уровень собрать захочется с зацикленными дверями :) может к следующим выходным выложу. Пока тестил, пофиксил хак evgeny с уровнем из черного плаща, чтобы там скроллинг как надо работал. |
| evgeny:
--- Цитата: spiiin --- зависит от младших четырех бит номера объекта. они являются указателем в массиве из 16 номеров (вроде бы уникальный для каждого уровня, для первого хранится по адресу 1E909). --- Конец цитаты --- Вот этот массив хотябы править и видеть как-нибудь какому блоку какой будет соответствовать. |
| feos:
--- Цитата: spiiin от 11 Апрель 2012, 00:10:21 ---feos, я не разбирал формат C&D 2, шарик случайно обнаружился :) --- Конец цитаты --- А вот если я хочу сделать скрипт, который будет показывать характеристики блоков, чтобы найти этот шар в других местах, и притом я не знаю асма, чо мне делать? Могу только собственно писать скрипты и искать в РАМ методом больше-меньше. И вообще, как этот шар там есть, если его не видно? Что за фокус? |
| spiiin:
Вообще без знания асма сложно раскодировать тип объектов, разве что очень сильно повезет. С дизассемблером общая методология такая - нужно найти в памяти список объектов. По найденному в памяти известному значению (например, кол-во цветков легко ищется или позиция на экране), надо доковыряться до кода цветка. Если будешь знать коды хотя бы двух предметов - этого вполне достаточно, чтобы найти все остальные - тупо открываешь ROM в шестнадцатеричном редакторе и вбиваешь известную последовательность. Теоретически, есть другой подход, который не требует дизассемблирования, но потребует знания какого-нибудь языка программирования и немного математики, чтобы составить скрипт перебора вариантов. На практике я его пока не проверял :) Выписываем список всех объектов, которые встречаются на уровне по порядку (важно не пропустить скрытые). Например, "цветок, цветок, пчела, цветок, мышь". Дальше надо написать программу, которая будет искать в памяти цепочку байт XXYXZ, где X,Y и Z могут быть любым значением от 0 до 255. Основная сложность в том, что такая программа может работать очень долго - даже для трех типов объектов потребуется перебрать 256*255*254 = 16581120 вариантов. И первый, и второй способ сработают, только если объекты в памяти последовательно лежат (для первого чипа и дейла это так, а, например, для охотников за привидениями – нет). Ну а вот чтобы просто скрыть объект, фокуса нет - для каждого типа разработчики пишут свои программы поведения, они любыми могут быть :) |
| feos:
Ты имеешь в виду надо найти в РАМ список адресов, хранящих ID загруженных в данный момент объектов? А в первой части это какие адреса? |
| spiiin:
ага, в RAM, а потом тот же список в ROM. Для первой части, начала описаний объектов в ROM: уровень 0 - 10388-103D3 уровень А - 10456 уровень B - 105A1 уровень C - 106D1-10709 уровень D - 10890-108F0 уровень E - 10A1D-10A66 уровень F - 10B0E-10B36 уровень G - 10C88-10СDA уровень H - 10DB3-10DE7 уровень I - 10EA1-10ECD уровень J - 10FED-11033 Добавлено позже: не загруженных в настоящий момент, а вообще всех на уровне |
| spiiin:
Про беки описывал чуть, как устроено. можно объекты попереставлять просто местами на 16 соседних позициях - там 16 вариантов бека будет доступно разных. Можно попробовать подобрать такие 2 позиции, чтобы подходили, если повезет :) |
| Lomax:
--- Цитата: spiiin от 11 Апрель 2012, 23:07:07 ---Про беки описывал чуть, как устроено. можно объекты попереставлять просто местами на 16 соседних позициях - там 16 вариантов бека будет доступно разных. Можно попробовать подобрать такие 2 позиции, чтобы подходили, если повезет :) --- Конец цитаты --- ну менять бэк я умею, но на всем уровне все равно же будет под ними один и тот же бэк? Не получится же сделать что под одними будет желтый, а под соседними - синий? Оп, есть идея, щас проверю... |
| spiiin:
получится. можно сделать до 16 объектов ящиков и у каждого свой бек будет. какой именно из 16 - зависит от 4х младших бит номера объекта |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |