Разработка и ромхакинг > Ромхакинг и программирование
[NES] Super Mario Bros 2. Level editor
(1/1)
ALXR:
Еще один редактор от меня, который, впрочем, был написан за год до nesprinced. И nesprinced, кстати, был написан в каком-то смысле на базе этого.
Естественно мне известно об уже существующем, но, при всем уважению к автору того редактора, он чрезвычайно неудобен и полноценно им пользоваться невозможно, так как обилие внутрекухонных объектов (типа Skip, Start page и т.д.) вводит пользователя в заблуждение, да и при сохранении файла на выходе получается зачастую совсем не то, что ожидалось.

Так вот о моем редакторе. Структура и формат данных брались из открытых источников и, частично, из исходников означенного существующего редактора (которые читать невозможно). Не сказать, что я его довел до ума, остановившись на версии 0.1beta, но все же, на мой взгляд, работать с ним приятнее, чем с первым.
Перечислю известные проблемы с моим редактором:
* В вертикальных комнатах объекты, которые находятся в самом низу, иногда перемещаются на одну позицию вверх;
* Структуры данных врагов иногда перехлестываются между комнатами и часть врагов из следующей комнаты может оказаться в предыдущей;
* Нет возможности полноценно редактировать комнаты с бонусами: они имеют несколько отличную структуру от других комнат (пример: уровень 1-2, комната, где находится гриб 1up в "кувшине"), поэтому (как и в исходном редакторе) в таких комнатах не отображаются враги;
* Иногда возникают проблемы при редактировании фона (стены, водопады и т.д.): не удается добавить объект или один фон "нахлестывается" на другой;
* Нет возможности "разблокировать" линки комнат, но это не мешает, если не хочется стереть все и построить всю игру с нуля;
* Неправильно рисуются лианы (можно увидеть в комнате 1-1, upwards part);
* Не отображаются некоторые объекты: пирамиды в пустыне, большие порталы и некоторые элементы замка в 7-2.

Перечисленные проблемы, которые возникают при сохранении файла, возникают достаточно редко. Остальные не сильно мешают.


Теперь об особенностях движка:
* В вертикальных комнатах двери можно ставить не на всех страницах. Если поставить дверь не в том месте "нужной" страницы или на "неправильной" странице, то в самом верху или в самом низу движок впадет в dead-lock, так как неправильно отработает прокрутка страниц;
* Двери, соединенные друг с другом,можно размещать только в определенных местах: если первая дверь стоит на позиции N (по оси X) от начала страницы, то ответная дверь должна располагаться в позиции 15-N от начала своей страницы. Например: первая дверь располагается в позиции 5 (начиная с 0), то ответная должна стоять на позиции 15-5 = 10 (начиная с 0) на своей странице. Аналогично и с лианами и прочими штуками, которые позволяют перемещаться;
* Переход в другую комнату через голову Hawkmouth не откроет игру в рулетку, если этот переход в подуровне N-3;
* В вертикальных уровнях использовать Potion нельзя;
* Birdo, в зависимость от позиции, будет иметь свой цвет (будет либо розовый, либо красный, либо серый. Причем, всего одна позиция отвечает за розового, одна позиция за красного, все остальные - отображают серого).

И о возможностях редактора:
* Свободного места в банке с данными уровней и врагов места достаточно, но не бесконечное количество. Т.е. можно довольно свободно добавлять объекты в больших количествах, но без должного энтузиазма (проверки в редакторе на переполнение банка, к сожалению, нет по причине того, что подразумевалось при нехватке отведенного места переносить объекты в свободное место в этом же банке, коего достаточно много);
* Редактор позволяет редактировать не только состав фона (например, кирпичи, из которых строятся стены, можно поменять на любой тайл, доступный в игре), но и их конфигурацию;
* Линейные объекты также можно редактировать, меняя тайлы, из которых они состоят (например, тайлы лестницы можно заменить на опять же любой доступный в игре тайл);
* Изменять палитру уровней. Причем палитры уровней перемешаны с палитрами врагов, так что... возможны сюрпризы :);
* Изменять интерьер уровней, но с некоторыми ограничениями. Часть объектов (спрайтов) жестко привязаны в коде к номеру уровня, поэтому при смене интерьера уровень придется "допиливать напильником";
* Все основные функции находятся в контекстном меню, вызываемым правой кнопкой в поле редактирования.

Редактор остановился в развитии, потому что в процессе его написания стало вылезать столько подводных камней, что мне, дойдя до определенной логической точки, стало уже тяжко пилить его дальше. Впрочем, если кто хочет помочь в развитии, то я готов выслать исходники и продолжить проект.
Если кто решится, то отвечу сразу: Исходники на чистом C++ и чистом WinAPI, т.е. никаких фреймворков не используется. Ну и сам код, конечно, не идеальный. :)

Прикладываю сам редактор и видео одного из модов, который я было начал делать (вроде как продолжение оригинальной игры). Прохождение его не идеально, да и показан всего один путь прохождения из двух, но по видео можно судить, как существенно можно отредактировать игру. Сам РОМ я куда-то посеял, но если найду, то тоже прикреплю.
opr:
вот молодец зацен... затестим  :)

Добавлено позже:
Если честно, после принца, работать в данном едиторе трудновато. Я так понял, в редакторе саму структуру уровня (положение его комнат) нельзя менять, только вставлять / убирать объекты из заданного пространства?
В детстве эта игра мне показалась слишком уж огромной и долгой, я ее так и не прошел, так как тупо времени не хватило, карик был не мой и надо было отдавать))
ALXR:

--- Цитата: opr от 01 Март 2014, 00:02:15 ---вот молодец зацен... затестим  :)

Добавлено позже:
Если честно, после принца, работать в данном едиторе трудновато. Я так понял, в редакторе саму структуру уровня (положение его комнат) нельзя менять, только вставлять / убирать объекты из заданного пространства?

--- Конец цитаты ---
Мм.. Нет, тут так нельзя. Если в принце каждая комната - сама по себе, то здесь уровень - одно целое.


--- Цитата: opr от 01 Март 2014, 00:02:15 ---В детстве эта игра мне показалась слишком уж огромной и долгой, я ее так и не прошел, так как тупо времени не хватило, карик был не мой и надо было отдавать))

--- Конец цитаты ---
Да, мне тоже эта игрушка понравилась на чужом картридже. Но прошел я ее тогда, когда купил уже свой. :)
ALXR:
Ну вот, нашел начатый мод. Буду потихоньку продолжать.
AjaxVS:
выглядит достойно, за c++ winapi :drinks:

хотел глянуть на сам редактор, но smb2.exe сразу при запуске вываливается со стандартной ошибкой:
Сигнатура проблемы:
  Имя события проблемы:   APPCRASH
  Имя приложения:   smb2.exe
  Версия приложения:   0.0.0.0
  Отметка времени приложения:   52dc5aed
  Имя модуля с ошибкой:   smb2.exe
  Версия модуля с ошибкой:   0.0.0.0
  Отметка времени модуля с ошибкой:   52dc5aed
  Код исключения:   c0000005
  Смещение исключения:   0000fe6d
  Версия ОС:   6.1.7601.2.1.0.256.1
  Код языка:   1049
  Дополнительные сведения 1:   0a9e
  Дополнительные сведения 2:   0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:   0a9e
  Дополнительные сведения 4:   0a9e372d3b4ad19135b953a78882e789win7 x32.
что еще юзал?
ALXR:

--- Цитата: AjaxVS от 04 Май 2014, 04:00:33 ---выглядит достойно, за c++ winapi :drinks:

хотел глянуть на сам редактор, но smb2.exe сразу при запуске вываливается со стандартной ошибкой:
Сигнатура проблемы:
  Имя события проблемы:   APPCRASH
  Имя приложения:   smb2.exe
  Версия приложения:   0.0.0.0
  Отметка времени приложения:   52dc5aed
  Имя модуля с ошибкой:   smb2.exe
  Версия модуля с ошибкой:   0.0.0.0
  Отметка времени модуля с ошибкой:   52dc5aed
  Код исключения:   c0000005
  Смещение исключения:   0000fe6d
  Версия ОС:   6.1.7601.2.1.0.256.1
  Код языка:   1049
  Дополнительные сведения 1:   0a9e
  Дополнительные сведения 2:   0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:   0a9e
  Дополнительные сведения 4:   0a9e372d3b4ad19135b953a78882e789win7 x32.
что еще юзал?

--- Конец цитаты ---
Мда, ошибка странная... Поправил, выложил. Запускается, вроде бы, без ошибок.
ALXR:
Некоторые багофиксы

Очередное обновление.
ALXR:
Надеюсь, не надоел со своим редактором второго марио :)

Вобщем, волею случая засел за него вновь и существенно переработал/доработал.
Редактор вышел в некоторых местах слегка замудреный. Но попытаюсь описать, что он умеет теперь:
* Редактировать конфигурацию бэкграундов (было и раньше);
* Редактировать конфигурацию некоторых типов объектов (было и раньше);
* Редактировать внешний вид уровней (было и раньше, но отрисовка некоторых объектов была неверной);

Исправления и дополнения:
* Переделан движок отрисовки уровней. Теперь рисуется быстрее и нативно (средствами GDI);
* Поправлена отрисовка пальм. Теперь они рисуются более-менее похоже на то, что будет в игре;


* В Advanced добавлена вкладка "World warps", позволяющая редактировать переходы между уровнями;


* Добавлен диалог редактирования количества подуровней в уровнях (по аналогии с редактором 2002г);


* Добавлен диалог редактирования линков уровней и врагов. По сути, это позволяет создавать новые комнаты в уровнях к уже имеющимся в том количестве, в котором это позволяет свободная память, выделенная под данные;


* Упрощена возможность создавать комнаты типа 'Jar'. Во всех подуровнях 5-я по счету комната является комнатой типа 'Jar', куда попадает марио при входе в вазу (которая обозначена как 'not the same as #06'). И теперь туда можно добавлять врагов (раньше они были не видны в этих уровнях и, соответственно, не было возможности их редактировать);


* При добавлении дверей теперь можно добавлять слинкованную с создаваемой дверь. То же самое и в отношении указателей (Pointers);


* При сохранении игры, теперь измененные уровни автоматически сохраняются (раньше приходилось нажимать 'Apply changes' везде, где были произведены изменения);
* Некоторые объекты теперь можно редактировать не входя в меню редактирования (кнопками +/-. В случае с бэкграундом при зажатом Shift будет меняться тип бэкграунда);
* Используется все доступное свободное пространство, выделенное под данные в ROM, для сохранения уровней;
* Немного переделан внешний вид.

Из НЕпоправленного:
* Все еще неправильно отрисовываются слои объектов. Там где должно рисоваться одно поверх второго - рисуется наоборот: второе поверх первого (например, в 3-1 за водопадом не видно Green platform);
* Враги рисуется не оригинальной палитрой.


В качестве небольшого туториала приведу создание комнаты типа 'Jar' для первого уровня:
1. Идем в Tools -> Advanced -> Advanced worlds sets... -> Levels sets
2. Выберем неиспользуемую комнату 1-1 Unused(1), которая в оригинальной игре указывает на комнату 1-1 Boss area:

3. Переносим линк на 5 по счету комнату 1-1 undeground (bottom) - это bucket #5:

4. То же самое делаем с enemies:

5. Нажимаем OK, и теперь на правой панели для комнаты 1-1 undeground (bottom) появится панелька 'Enemies link':

6. Т.к. комната перенесена в 1-1 unused(1), то меняем указатели и указатели дверей на эту комнату:
* Первый:
* Второй:
7. Возвращаемся в комнату 1-1 undeground (bottom), нажимаем на панельке 'Enemies link' кнопку 'Create new...', чтобы под эту комнату выделить новое место в ROMе:

8.  Затем щелкаем правой кнопкой и выбираем Make level as jar и комната примет такой вид:

9. Накидаем объектов и врагов туда (последних через меню Insert jar enemy):

10. Добавим вазочку (которая not the same as #06) куда-нибудь в 1-1 main part (например):

11. Сохраняем, запускаем.


Теперь, добавляя эту вазочку в любом месте (кроме вертикальных комнат) уровня 1-1, мы будем попадать в эту созданную.

По подобному принципу можно добавлять новые комнаты за счет неиспользуемых (обозначенных в редакторе как Unused).

Прошу потестировать и сообщить о каких-либо проблемах.
Навигация
Главная страница сообщений

Перейти к полной версии