| Разработка и ромхакинг > Ромхакинг и программирование |
| [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). Прошу потестировать и сообщить о каких-либо проблемах. |
| Навигация |
| Главная страница сообщений |