Решил разобрать последний из оставшихся крупных игровых элементов игр Capcom
Формат игровых объектов#
После предыдущего разбора у меня были адреса хранения номеров загружаемых объектов в памяти - 05A4 - 05AF.
Точка остановки на запись по этому диапазону адресов показывает место, откуда загружаются характеристики объектов:
нашлись 2 массива из 4х байтных структур, в одном из которых хранится количество жизней объектов и 3 пустых поля, а в другом характеристики объектов:
номер функции поведения объекта попадает в память по адресу 4E0-4EF.
Остановка на чтение по этому адресу показывает массив хранения адресов функции поведения каждого игрового объекта.
(массив состоит из двух частей, в разных банках памяти) 825F , 82A7 - набор из указателей на поведение (72 штук)
1:8837 , 1:88B6 - набор из еще 128 штук указателей на поведение (первые 72 занулены).
Функции поведения позволяют детально изучить поведения врагов, но на их дизассемблирование нужно много времени, поэтому я ограничился разбором объектов только первого уровня, чтобы понять маппинг параметров в оперативную память.
Так, у всех врагов обычно есть:
Дальше интерес представляет разворачивание номера анимации, для чего надо остановиться на считывание номера по адресам 420-42F.
Этот номер является индексом в массиве адресов 5:B4F0/B429 (адреса анимаций, первый массив младшие байты адресов, второй - старшие).
Формат анимации#
дальше по таймеру отлавливается загрузка следующего кадра:
кадр - индекс в массиве 5:9B0B/9C45 (если положительный, или если отрицательный, то 5:9C0B/9D45)
формат кадра:
Описание координат массив 5:AE53-AF23 (из пар байт X и Y).
данные о тайлах и координатах считываются на страницу памяти 200-2FF и передаются контролеру SpriteDMA.
Для чипа и дейла всё аналогично, адреса:
Утилита для просмотра анимаций и редактирования кадров:
cad_enemy_editor_v2.zip