Решив написать простенький и легковесный редактор для себя что-то увлекся и получилось...Вобщем, выкладываю редактор (на мой взгляд, получившийся весьма продвинутым), который начинал с простой задумки "слегка подредактировать пару мест". Редакторы у
spiiin и
Ti_ прекрасные, но хотелось чуть реже залезать в РОМ и видеть бОльшую часть в редакторе. И, незаметно, вышел редактор, которым можно перекроить всю игру (за некоторыми исключениями, о них ниже).
Основная функциональность заложена в редактирование UOROM (расширенной) версии ROMа, в который можно конвертнуть прямо из редактора, и включает в себя ( ++ - функциональность доступна как в UNROM, так и в UOROM, -- - только в UOROM):
[++] - изменение раскладки уровня;
[++] - изменение блоков уровня;
[++] - редактирование тайлов (точнее "мини" блоков);
[++] - редактирование кода в Египте и загадки Острова (до двух позиций);
[++] - изменение положение моста в первом уровне (в пределах верхнего этажа);
[++] - изменение объектов (без перемещения, добавления и удаления);
[++] - изменение палитры (для некоторых уровней для редактирования доступны только первые два из 4 блоков палитры фона);
[++] - изменение названия уровней;
[++] - изменение звукового сопровождения уровней;
[++] - просмотр текста и диалогов;
[++] - Редактирование выпадающих из врагов призов, а так же изменение вероятности их выпадения;
[++] - Редактирование количества жизней боссов;
[++] - Редактирование стоимости призов;
[--] - полная функциональность в редактировании блоков уровня (добавление новых/удаление ненужных);
[--] - возможность выделить под блоки конкретного уровня отдельное место (иначе редактирование блоков в одном уровне будет отражаться на другом, т.к. уровни имеют общие блоки между собой);
[--] - редактирование текста персонажей на любых уровнях (кроме уровней Underground и Pirates ship);
[--] - создание полноценного ОТДЕЛЬНОГО уровня вместо Pirates ship на базе любого из первых 6 с выделенным отдельным пространством под все ресурсы уровня;
[--] - создание/удаление объектов;
[--] - Добавление/удаление комнат;
[--] - Добавление/удаление люков, открывающихся по нажатии на кнопки (те, которые в Египте, Замке и Подземелье);
[--] - Изменение количества позиций секрета Острова (до 8 позиций);
[--] - Размещение моста на уровне Водопадов в любом месте уровня;
[--] - Объекты любых уровней можно размещать на любых уровнях. Даже на последнем уровне можно разместить, к примеру, крота из Водопадов;
[--] - Редактирование загрузчиков графики (совмещать можно только совместимые в оригинале объекты);
[--] - Для каждого уровня свой набор скрытых люков. Нет необходимости делить их между уровнями;
[--] -
Особая функциональность: переход между этажами можно совершать в любом месте. За это особая благодарность
Ti_, т.к. он позволил использовать его идею и код в редакторе. Кроме того, от него же добавлен патч (пока в неизмененном виде) на ускорение работы со спрайтами.
Теперь ограничения. Основная их часть имеется по причине того, что соблюдался принцип
минимально править код:
- Редактор не проверяет доступное пространство под данные в режиме UOROM. Хоть места и достаточно для того, чтобы забить все и вся, все же лучше быть осторожным и сохранять резервные копии;
- Количество этажей ограничено 6;
- Нет возможности изменить стоимость товаров в магазине
и призов на уровнях; - Нет возможности поменять палитру для объектов;
Нет возможности поменять количество ударов боссам;- Нет возможности редактировать некоторые диалоги в игре (вызвано тем, что они грузятся из отдельного места и списка их как такового нет. Хотя редактор их загружает и сохраняет в незименном виде, но не отображает);
- Количество объектов на этаж ограничено 40 штуками движком. Однако редактор не ограничивает это количество. Соответственно, при превышении этого числа, могут быть коллизии (например, будут пропадать объекты на других этажах);
Нет возможности редактировать графику (доступно только редактирование "мини" блоков и обычных блоков);- Можно редактировать только U локализацию. Русская и японская не поддерживаются. Их поддержка планируется, но модуль патчера потребуется вынести в отдельную единицу от редактора;
- Текстовый редактор не проверяет длину и количество строк в диалогах, поэтому об этом надо заботиться самостоятельно (проверяя в эмуляторе, что текст не "уполз");
- Максимальное количество комнат - 255. Соответственно можно забить полностью почти целиком 5 уровней. Поэтому если хочется сделать полностью все уровни забитыми до отказа, придется использовать некоторые комнаты по нескольку раз для экономии;
- Нельзя управлять появлением/исчезновением племянников на уровнях, а так же спрайт лица, от которого ведется диалог (последнее связано с коллизиями тайлов);
- Нельзя размещать (точнее редактор позволяет, но в игре будет артефакт) скрытые сокровища на уровнях, где они не предусмотрены;
Немного глючит редактор блоков: при добавлении нового блока, если тот должен оказаться на новой строке, он не отображается (хотя создается). И наоборот: при удалении последнего блока в строке, он продолжает отображаться (хотя и удален);- В редакторе реализована функциональность "вертикального" размещения позиций секрета Острова, но пока скрыта до полной отладки GUI редактора;
Многие из этих ограничений, скорее всего, будут сниматься по мере появлений новых версий редактора, но не все.
По "горячим клавишам" редактора (помимо тех, что указаны в меню):
- В режиме редактирования блоков (Tiles layer):
- Ctrl+Space -запомнить блок;
- Space - вставить блок;
- Insert - вставить блок из диалога списка блоков;
- +/-, PgUp/PgDn - изменить номер блока;
- В режиме редактирования комнат (Rooms layer):
- Ctrl+Space - запомнить содержимое комнаты;
- Space - вставить содержимое комнаты в выбранную;
- Insert - выделить место под новую комнату и вставить в выбранное место;
- Delete - удалить выбранную комнату;
- +/-, PgUp/PgDn - изменить номер выбранной комнаты
- В режиме редактирования объектов (Objects layer):
- Ctrl+Space - запомнить и удалить объект;
- Space - вставить удаленный ранее объект;
- Insert - вставить объект из диалога списка объектов;
- Delete - удалить выбранный объект;
- +/-, PgUp/PgDn - изменить номер выбранного объекта
- В режиме редактирования моста в уровне Водопадов (Bridge layer):
- Space - установить мост в выбранную позицию;
- +/-, PgUp/PgDn - изменить длину моста;
- В режиме редактирования позиций Скруджа (Scrooge/Checkpoint/Boss respawn layers):
- Установка курсора перемещает соответствующую позицию Скруджа в выбранное место;
- В режиме редактирования люков (Hidden slots layer):
- Insert - вставить новый люк (или ранее удаленный);
- Delete - удалить выбранный люк;
- В режиме редактирования загадки Острова (Mu secret layer):
- Insert - добавить новую позицию;
- Delete - удалить выбранную позицию;
F5 - запуск эмулятора (если есть ассоциация с файлами *.nes)
С позициями загадки Острова надо быть аккуратнее: плюс/минус пиксель от места попадания объекта (бочки) и ничего не сработает;
В режиме редактирования блоков и тайлов (мини-блоков) также работают кнопки "Ctrl+Space" и "Space", чтобы облегчить копирование редактируемых блоков.
Также в диалоге редактирования блоков и тайлов затенены те, которые не используются в выбранном уровне.
Отдельно расскажу по редактированию секрета Острова, т.к. там неочевидное редактирование.
Во-первых, позиции располагаются всегда на одной линии;
Во-вторых, отображаются только в случае совпадения размещения объекта 0x22 и координат самих позиций. Таким образом, чтобы разместить секрет в другой комнате, надо удалить позиции из имеющейся комнаты, удалить объект 0x22. Затем, добавить объект 0x22 в выбранную комнату, и уже теперь добавлять позиции там же.
Ну и про то, что для каждого набора объектов есть свой набор подгружаемой графики, особо говорить не буду: и так, вроде известно. Т.е. для корректного отображения того или иного объекта нужно разместить "где-то рядом" объект Graphics loader, иначе вместо изображения объекта будет невнятный набор пикселей.
Так как сухим текстом описать все возможности редактора все же сложно, чуть позднее попробую сделать обзорное видео, освещающее все возможности редактора.
Ну и поскольку полностью протестировать все меня не хватило, то возможны какие-нибудь несущественные "глюки" или даже падение программы. Если таковое обнаружится, буду разбираться отдельно.
ps: Редактор рождался почти месяц и имеет почти 100 ревизий в svn...