Автор Тема: [NES] Hudson's Adventure Island I Level Editor  (Прочитано 3887 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« : 22 Февраль 2017, 00:00:09 »
Случилось чудо, друг спас жизнь друга наконец-то можно сделать что-то с этой игрой, об которую у многих, наверняка, сломалось много джойстиков в свое время. :-)

Внутреннее устройство игры весьма необычно, но это легко объяснить тем, что она появилась в середине 80-х, и тогда, видимо, еще не придумали каких-то более-менее стандартных принципов хранения игровых данных (читай: изворачивались как хотели). Тем не менее, не смотря на необычность, движок довольно хорошо продуман и большая часть по максимуму вынесена в конфиги, а не вшита в код, что позволяет весьма широко это использовать.

Итак, игра состоит из 8 уровней по 4 раунда в каждом. Ну и я думаю, что все, кто играл в игру, заметили, что уровни строятся всего на нескольких повторяющихся локациях. Так вот, всего их 11 (на самом деле 12, но последняя 12-я - это обрезок из двух экранов, использующихся в качестве комнаты с боссом). Каждая локация использует 1 из 3 имеющихся CHR-банков (опять же, реально их 4, но 4-й банк используется в комнате босса, титульнике и экране конца игры, так что для построения уровней он подходит чуть более, чем никак).

Технически, конфиг уровня состоит из следующих вещей: номер используемой локации, номер применяемой палитры, номер применяемого модификатора палитры. Скажем, в раунде 1-2 видно, что в начале ГГ бежит по пещере, потом попадает в какие-то ледяные залы, затем бежит опять по пещере. Так вот, модификатор к началу ледяной части уровня меняет палитру, чтобы лед выглядел льдом, а затем меняет опять на цвета пещеры. Т.е., пользуясь модификаторами, можно создавать уровни с весьма широкой цветовой гаммой. Кроме того, конфиг содержит три(!) списка объектов и еще один байт, о котором ниже. Сложно, однако, сказать, зачем для каждого уровня используется три списка объектов. Видно, что разработчики по началу хотели их использовать для усложнения уровней по мере продвижения вперед (т.е. используя списки предыдущих уровней, добавлять к имеющимся объектам новые соседним списком), но в приближении это почти ими самими же и не соблюдается. Впрочем, эта концепция почти строго соблюдается в бонус уровнях.

Далее. Каждая локация содержит в себе описания всех 64 экранов уровня (1 условный экран - это половина реального в ширину и почти 2 в высоту: 44х16 тайлов или 11х4 блока размером 2х2 тайла), номер фоновой музыки, номер используемого CHR и несколько флагов (о которых, опять же, ниже).

Номер CHR-банка является не только номером этого банка, как такового, но и номером набора графики (Graphics Set), который уже в себе содержит графическую составляющую уровня: конфиги блоков и экранов, которые состоят из этих блоков. Этих наборов 3 штуки (хотя банков 4). Комната с боссом использует сет #1, который используется в первом уровне (лес) и во всех уровнях вида X-4 (где в конце босс). Так вот, в уровнях X-4 при достижении "полу"экрана с номером 60, CHR-банк переключается на 4-й и меняется палитра в зависимости от номера уровня. Поэтому, перед входом в комнату с боссом большая пропасть с мостиками, чтобы не было заметно переключения палитры.

Некоторая необычность движка состоит в двух вещах (я не хочу сказать, что это уникальные вещи, которые более нигде не встречаются, но во многих играх все же сделано проще):
Первая необычность в том, что списки объектов и компоненты физики экранов описываются не байтовым массивом, а битовым потоком. Т.е. хекс-редактором их так просто не поправишь. Если компоненты физики (так уж вышло) состоят из трех байт (из которых вытягиваются биты значений каждой компоненты), то со списком объектов все сложнее: там просто из битового потока вытягиваются биты, причем, в зависимости от условий, каждый раз разное количество. Т.е. в списке объектов, пока не пересчитаешь все биты с начала списка, не угадаешь, что может значить определенный байт списка.
Вторая же необычность в том, что графическая составляющая и составляющая "физики" не зависят друг от друга от слова "совсем". Т.е. не смотря на то, что впереди видна прямая поверхность, реально ГГ может свалиться в яму или наоборот упереться в невидимый уступ, как предписано физической компонентой экрана.

Что же касается призов в яйцах, то их содержимое заведомо не определено: оно зависит от наличия оружия, скейта и флагов, определенных в конфиге уровня. Конфиг уровня содержит еще 1 байт, который бьется на 4 части по 2 бита - по 2 бита на каждый чекпоинт.

Ну и наконец в конфиге локаций (Level Set), помимо номера CHR-банка, определены еще: номер конфига спрайтов мостиков, флаг использования альтернативной палитры для объектов (их 2 и отличаются они лишь последним атрибутом, которым рисуются осьминоги в уровнях с водой), ну и флаг, определяющий - будет ли "бултых" при падении в пропасть или нет (Sea Level Flag).

При построении уровня самая интересная - это физическая компонента каждого экрана, которая описана в локациях. Суммарно она составляет 24 бита (3 байта) и содержит в себе:
1. Номер графического конфига экрана из Graphics Set;
2. Изменение траектории камеры (камере двигаться горизонтально, вправо вверх или вправо вниз);
3. Изменение уровня экрана (к примеру: полэкрана будет оставаться на одном уровне с предыдущем, полэкрана приподнятно на 1 блок выше. Или же поднять экран на 2 блока по отношению к предыдущему и т.д.)
4. Изменение уровня поверхности (к примеру: поднять или опустить уровень поверхности на 1 блок, 2 блока по отношению к предыдущему экрану);
5. Характер поверхности: скользкая или обычная;
6. Изменение высоты размещения фруктов (поднимает их на сколько-то тайлов выше)
7. Геометрия поверхности: подъем, склон, яма, ширина ямы и т.д.

Т.е. мало разместить графические экраны по уровню, надо для каждого из них задать физическую компоненту. К слову сказать, конфиги этих параметров вынесены из кода. Таким образом, характеристики уровня поверхности или изменения уровней при отображении экрана можно менять (правда, глобально, для всей игры в целом), задавая соответствующие значения в этих конфигах.

Собственно, для всего этого и был написан редактор. Ну а поскольку конфиги в игре несколько необычны, то и редактор вышел несколько нестандартным. Т.е. в основном окне нельзя сходу менять блоки или разместить объекты там где хочется (во всяком случае по оси ординат - Y). В основном окне можно менять номера экранов и физические компоненты (ну и добавлять, перемещать, редактировать или удалять объекты, конечно). Все остальное можно найти в соответствующих диалоговых окнах редактора.

По порядку:
* Окно свойств объекта позволяет менять различные параметры объекта. Большинство объектов редактируемых параметров не имеют (некоторые из них, правда, приобретают некоторые свойства в зависимости от того, находятся они на четной позиции или нечетной). Такие же объекты, как Pot bonus, жуки и мостики - имеют дополнительные параметры (они все описаны в этом диалоговом окне). Параметр Handler для мостиков определяет их поведение: двигаться вверх, вниз, циклично, нециклично и т.д.
* Менеджер графики. Содержит в себе функции по импорту/экспорту тайловой таблицы, а также графический редактор, который позволяет менять описания экранов и блоков
* Редактор наборов палитр (ну тут нечего добавить);
* Редактор модификаторов палитр. Ну тут тоже объяснять нечего: модификаторы палитр изменяют любую компоненту палитры в зависимости от номера текущего экрана в игре;
* Редактор прочих палитр: первые две - палитры объектов (основная и альтернативная), и третья - палитра титульника и экрана конца игры;
* Редактор параметров локаций (экраны локации редактируются непосредственно в основном окне): позволяет редактировать различные параметры, свойственные им;
* Настройки уровня. Помимо очевидных, содержит ряд полей вида Top of screen, Top of floor для каждого из 4 чекпоинтов. Top of screen определяет положение по высоте камеры по отношению к экрану, с которого начинается уровень (или чекпоинт). Top of floor - высоту поверхности по отношению к 'Top of screen'. Редактор отображает начальное положение камеры и высоты поверхности, отталкиваясь от этих параметров для чекпоинта #1 (начало уровня). Но есть один нюанс: если поменять направление камеры для 2-го экрана, то редактор отобразит некорректно положение камеры и высоту поверхности.
* Game settings. Ну там все параметры говорят сами за себя (SB speed означает скорость на скейтборде);
* Настройки локации бонус уровней. Так вот, если кто не знал, то бонус-уровни - это часть локации уровня 3-1 (точнее аккурат часть его второй половины). Там можно перенести бонус-уровень в локации любого другого уровня и поменять его размер (в оригинале всего 14 экранов, ну т.е. 7 реальных).

В диалоге выбора уровней можно поставить галку "Бонус-уровень" и тогда в основном окне откроется на редактирование выбранный бонус. Вот правда редактировать там можно только объекты. Экраны и физику надо редактировать в оригинальном уровне.

Редактором можно изменить почти все в игре, но некоторые вещи, все же в него не вошли (и вряд ли войдут):
* Редактирование текста (его в игре и нет почти);
* Редактирование конфигов физики (нет смысла редактировать, ибо параметры затрагивают всю игру, и при изменении любого из них, 99% игры превратится в тыкву);
* Редактирование комнаты босса и ее палитры (некоторые вещи там заскриптованы и позволить редактировать ее - означает позволить сломать игру с вероятностью близкой к 1);
* Музыку (ну тут понятно)

Также редактор поддерживает только европейскую версию (E). Но если кому понадобится, то могу собрать версию под (J) и под (U) версии игры.
Кроме того, редактор переводит игру на рельсы маппера MMC3, а также расширяет возможность движка использовать 8 CHR-банков вместо 4 (реально позволяет редактировать 7). Переключение PRG-банков сделано и не очень безопасно для прерываний, но проблем я не выявил, так что проблем возникнуть не должно. Но если где-то игра внезапно повиснет, то прошу выслать мне сейв этого момента.

Тем, кого это все заинтересовало, предлагаю посмотреть небольшой туториал, как за полчаса добавить графику марио, на основе которой за пару минут слепить готовый уровень редактором
 (пример я выкладывал тут)

Ну и сам редактор: * aislanded.7z (243.09 КБ - загружено 218 раз.)
Сам мод из видео (с правильными цветами мостиков) * Hudson's_Adventure_Island_(E)_[!].7z (38.39 КБ - загружено 291 раз.)

Версия для 32-битных ОС: * aislanded_x86.7z (210.24 КБ - загружено 242 раз.)
« Последнее редактирование: 03 Март 2017, 16:12:38 от ALXR »

Оффлайн ПАУК

  • Пользователь
  • Сообщений: 1408
  • Пол: Мужской
  • Ну-ка, от винта!
    • Steam
    • Youtube
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #1 : 22 Февраль 2017, 08:34:03 »
Первый уровень прошёл. Неплохо сделано :thumbup:

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #2 : 22 Февраль 2017, 09:44:48 »
Первый уровень прошёл. Неплохо сделано :thumbup:
Первый уровень тестового примера? :) Ну он там всего один-то и изменен. Хотя, можно наклепать левел сетов и еще пол игры сделать в виде марио. Как показала практика, уровень строится минут за 10: больше времени на обдумывание размещения объектов уходит

Оффлайн Про Игрок

  • Пользователь
  • Сообщений: 1776
  • "wassup s.t.a.r.s.?"
    • ВКонтакте
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #3 : 22 Февраль 2017, 10:43:59 »
ALXR:

Получается можно пробежать по всем уровням из SMB с физикой и врагами из AI?  :cool:

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #4 : 22 Февраль 2017, 10:49:54 »
ALXR:

Получается можно пробежать по всем уровням из SMB с физикой и врагами из AI?  :cool:

Ну если заморочиться и сделать уровни редактором, то да. Правда, физика AI не позволяет сделать потолки или кирпичи висящие, но похожее сделать можно.
А вообще, марио я только для примера взял. Имеющиеся тайлы можно перерисовать как угодно. Помимо имеющихся можно еще 4 банка графики добавить и разнообразить игру, сделав ее менее пресной.

Оффлайн Про Игрок

  • Пользователь
  • Сообщений: 1776
  • "wassup s.t.a.r.s.?"
    • ВКонтакте
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #5 : 22 Февраль 2017, 11:04:34 »
Цитата
Помимо имеющихся можно еще 4 банка графики добавить

Выходит, что можно переделать 1ую часть под 3ю или 4ую в графическом плане?

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #6 : 22 Февраль 2017, 11:15:51 »
Выходит, что можно переделать 1ую часть под 3ю или 4ую в графическом плане?
Конечно. Только в первой части цвет фона всегда черный (это можно исправить, конечно, но движок я не перерабатывал в этом плане), а вот как в 3 или 4 части - я не знаю.

Оффлайн +Kinbeas+

  • Пользователь
  • Сообщений: 1797
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #7 : 22 Февраль 2017, 21:22:40 »
А не логичнее было бы на третью часть?

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #8 : 22 Февраль 2017, 21:28:48 »
А не логичнее было бы на третью часть?

Почему логичнее? В чем логичность?  :)
Ну и третья, вроде бы, блочная, как и большинство других. Там, наверное, можно и CadEditor'ом справиться.

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #9 : 28 Февраль 2017, 01:31:01 »
Исправил несколько досадных багов, плюс добавил картинки объектов в диалоги выбора объектов, плюс некоторые исправления в GUI.

Оффлайн ПАУК

  • Пользователь
  • Сообщений: 1408
  • Пол: Мужской
  • Ну-ка, от винта!
    • Steam
    • Youtube
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #10 : 28 Февраль 2017, 02:09:24 »
А почему он пишет, что aislanded.exe не является приложением Win32?

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #11 : 28 Февраль 2017, 03:07:02 »
А почему он пишет, что aislanded.exe не является приложением Win32?

Потому что он 64-битный :-)

Скомпилировал 32-битную версию (в аттаче), пробуй.

Версия с фиксами для Windows XP (падала при закрытии диалога выбора объектов).
« Последнее редактирование: 02 Март 2017, 23:31:14 от ALXR »

Оффлайн ПАУК

  • Пользователь
  • Сообщений: 1408
  • Пол: Мужской
  • Ну-ка, от винта!
    • Steam
    • Youtube
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #12 : 28 Февраль 2017, 06:01:55 »
Теперь открывается :)

Оффлайн DANGER X

  • Пользователь
  • Сообщений: 222
  • Пол: Мужской
    • Facebook
    • Youtube
    • Просмотр профиля
Re: [NES] Hudson's Adventure Island I Level Editor
« Ответ #13 : 01 Март 2017, 10:21:38 »
I waited so long for this, someone finally made an level editor for this game, I hope some hacks will be released soon.

Оффлайн AuAurora

  • Пользователь
  • Сообщений: 903
  • Всезнайка
    • Youtube
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #14 : 01 Март 2017, 11:12:26 »
При пикапе ангела находясь на скейте - пропадет спрайт

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #15 : 01 Март 2017, 12:06:13 »
При пикапе ангела находясь на скейте - пропадет спрайт

Спрайт пропадает, если в game settings выставить Enable safe mode и взять ангела. От других факторов не зависит

Оффлайн AuAurora

  • Пользователь
  • Сообщений: 903
  • Всезнайка
    • Youtube
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #16 : 01 Март 2017, 18:44:49 »
так эт в прикреплённом роме же

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #17 : 01 Март 2017, 22:04:50 »
так эт в прикреплённом роме же

Ну вот там и включен safe mode. По сути - это неуязвимость, т.е. без ангела этого все враги не страшны.

DANGER X, so may be can you create your own hack? :)
« Последнее редактирование: 01 Март 2017, 22:55:21 от ALXR »

Оффлайн DANGER X

  • Пользователь
  • Сообщений: 222
  • Пол: Мужской
    • Facebook
    • Youtube
    • Просмотр профиля
Re: [NES] Hudson's Adventure Island I Level Editor
« Ответ #18 : 01 Март 2017, 23:20:35 »
Why you ask? Currently I'm on a big project and have a little time to spare http://www.romhacking.net/forum/index.php/topic,23318.0.html but I will try something in the weekend.

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #19 : 03 Март 2017, 16:12:04 »
Выложил корректирующий релиз 1.1.1. Поправил баги (для x86 версии), которые проявляются в WinXP, плюс исправил патч рома, который устраняет артефакты скролла при игре на железе (не проявляется при игре на эмуляторе).

Оффлайн ALXR

  • Пользователь
  • Сообщений: 288
    • Просмотр профиля
[NES] Hudson's Adventure Island I Level Editor
« Ответ #20 : 12 Сентябрь 2017, 12:08:11 »
Релиз 1.1.1.2. Увеличен размер буфера для чтения объектов. Если объектов слишком много, то может возникнуть ошибка 'array bitfield is out of range'.