lafoxxx [B0S] - Captain -
 | | 2180 |
 Doom Rate: 1.4 Posts quality: +1000 |
Отправлено: 07.01.26 07:33:42 | |
|
Если кому интересно, делюсь опытом (кто знает лучшие подходы, сообщите):
Как переносить уровни из DOOM в формат Unreal 1 на примере UT
=== ========== ====== == ==== = ====== ====== = == ======= ==
0. Иметь общее представление о работе в Unreal Editor (знать. что такое актёр, кисть, поверхность, Mover, триггер, Add, Subtract, Deintersect, как подвинуть камеру/объект/вертекс(ы)...)
1. В Ultimate Doom Builder поднять все двери/давилки/прочие поднимающиеся полы (кроме ещё не построенных лестниц) в крайнее положение (обычно это самый высокий смежный потолок).
Опустить все лифты и прочие опускающиеся полы.
Убрать/удалить все прозрачные текстуры/невидимые стены.
(желательно) Сейчас или в пункте 6 задать текстуру ближайшего пола или потолка (чтоб выглядело, как если двери/лифты просто сняли), а выключателям – «включённую» версию, или вариант текстуры вообще без рубильника (если будете добавлять свои модели рубильников).
Если хотите, чтобы в воде можно было плавать, «слейте» её с уровня тоже и придайте смежным текстурам (стены и дно) желаемый вид.
2. Выбрать Export selection to OBJ. Галочки снять, Scale оставить 1.
3. В UnrealED открыть (или если нет – создать) пакет текстур из DOOM, содержащий текстуры (не патчи, а именно текстуры, из TEXTURE1.LMP!) и поверхности (Flat'ы) с теми же именами, что и на уровне (или всеми текстурами из DOOM, для удобства).
Если ранее работали с таким пакетом, и в новом уровне есть другие текстуры – переоткрыть пакет, чтобы добавились все текстуры.
4. Выбрать Brush - Export... полученного .OBJ-файла. Выбрать Solid mesh (no holes), Merge surfaces (желательно, далее будет сказано, почему)
5. Щёлкнуть по кисти и повернуть её на 180 градусов (необязательно), затем правой кнопкой по ней – Polygons – Flip normals (обязательно, иначе уровень будет наизнанку)
Tools - Scale map... - оставить Scale brushes, масштаб задать 1.5 (оптимальный вариант, без потери привязки вертексов к сетке, и наиболее близкий к DOOM).
Замомните это число, если потом захотите выравнивать текстуры!
6. Наконец, Subtract, Build geometry.
Облететь уровень визуально на предмет ошибок. Если у какой-то текстуры не тот оффсет, найти плоскость с той же текстурой, которой она параллельна, затем Polygons - Separate surfaces, опять Build geometry и сбросить оффсет на 0.
Пощёлкать по полам и потолкам. Если не все полигоны попали в выделение, нажать Shift+E, чтобы выбрать всю поверхность с этой текстурой, затем Polygons - Merge surfaces. Это необходимо, чтобы не выделялись неосвещённые части, когда будут добавлены и обсчитаны источники света.
Если в пункте 4 не выбрано Merge surfaces, стены будут в порядке, но треугольники полов будет надо объединять вообще все. В противном случае полы процентов на 80 объединены (включая и из разных комнат!), но могут быть сбиты оффсеты. Решайте сами
Если уровень имеет большую поверхность, залитую одной текстурой, лучше разбить её на комнаты поменьше, чтобы избежать проблем вроде пропадающих источников света.
Что-то плохо добавилось/забыли сделать? Не беда. Просто удалите «кривой» уровень, исправьте его в WAD'е и передобавьте. Все остальные вещи останутся.
7. Добавить Mover brush'ы для каждой двери/лифта/подвижного пола/потолка, того же размера, что и на карте. Для прямоугольников можно исопльзовать простой куб, для прочих форм – 2D shape editor (т.к. там есть сетка, и нет проблем с передвижением вертексов по сетке редактора уровней, как у форм, отличных от куба и плоскостей)
Дверь – обычный Mover из двух ключей: закрыт-открыт. Открытое положение в DOOM обычно на 4 единицы ниже ближайшего потолка.
Звуки добавляются в MoverSound.
Скорость (точнее – время!) открытия всех Mover'ов выставляется так, чтобы было примерно как в DOOM, в зависимости от высоты пролёта и типа Mover'а.
Быстрая дверь имеет вдвое большую скорость и другие MoverSounds. Через звуки можно сэмулировать баг «двойного» звука закрытия, как в старых DOOM, выставив в MoverSounds звук на начало и конец закрытия.
Лифты лучше тоже не опускать до самого конца, иначе будет «мерцать» слияние поверхностей.
Однократно опускаемый пол/поднимаемый потолок лучше чтобы двигался за пределы уровня (тоже около 4 ед.), иначе это место останется неосвещённым.
Тип объекта – Bump open timed (для типичных Open-wait-close-дверей, с обеими сторонами активации, и простых многоразовых рубильников), или же Trigger open timed (для всех остальных дверей и объектов кроме давилок и постоянно поднимающихся и опускающихся туда-сюда полов). У всех Mover'ов типа «Trigger...» должен быть выставлен тэг, который потом будет указан в событии соответствующих триггеров/Mover'ов/предметов и т.д., призванных активировать этот Mover.
Если объект активируется лишь однажды, он должен быть Trigger toggle, а в свойствах триггера должно быть выставлено Trigger Once Only.
Рубильники добавляются, как простой Mover в виде куба с текстурой «неактивного» варианта, уезжающего в стену, и покрывающего рубильник в текстуре целиком, или желаемые его части (например, только зелёная кнопка). Рубильник должен выпирать из стены как минимум на 1 единицу расстояния, чтобы не мерцать.
Если рубильник вмонтирован в лифт, он должен уезжать под пол шахты лифта или в другое место, чтобы его было не видно, пока лифт не вернётся. При необходимости выставить время так, чтобы рубильник возвращался обратно уже после возврата лифта (иначе он «вылетит» в воздух, не дожидаясь лифта, и это будет выглядеть странно).
Если добавляете собственные рубильники, не забудьте заменить текстуру на ту же или похожую, но без рубильника.
У всех Mover'ов, кроме давилок, должно быть выставлено Ignore when encroach, иначе все лифты, двери, и даже кнопки будут плохо работать, застревать при контакте с вами или монстрами, или же представлять опасность для игрока
После каждого редактирования ключевых позиций Mover'ов, их надо перестроить, нажав Rebuild movers.
Чтобы создать кислоту, лаву и прочие повреждающие полы, нужно очертить сектор примитивом так, чтобы он виднелся только в верхней кромке «воды», высотой от 8 (можно и меньше, но вы будете с большим трудом засовывать туда Zone info) и выше единиц (в случае, если вы хотите плавать в этой воде, а не просто по ней бегать, а также для поднимающейся воды, даже если хотите по ней бегать).
Затем нажать Deintersect, чтобы кисть приняла форму желаемого сектора (и ничего кроме него).
После этого добавить Special brush - Zone portal (обязательно Invisible, если это не «глубокая вода»!), и в добавленном Actor - Info - Zone info выставить тип Killing field, указать желаемый урон игроку.
Анимировать текстуру, как в DOOM, можно в пакете текстур, указав текстуре в Properties - Animation желаемую скорость (стандартная думовская примерно 3.5) и следующий кадр для всех её соответствующих вариантов.
В свойствах поверхностей можете повыставлять флаги Modulated/Masked/Mirror/U/V Pan и т.д., чтоб было красиво
Прозрачные/простреливаемые стены добавляются через кисть в форме «Sheet», в свойствах поверхности выставляется Solid или Non-solid по желанию.
Телепорты добавляются через Actor - Navigation point - Teleporter. В исходной точке ставится URL, совпадающий с тэгом назначения.
8. Добавить свет можно через Add light here, на те места текстур, из которых по логике должен исходить свет.
Яркость задаётся равная яркости данного сектора в DOOM, радиус – чтобы лучше выглядело.
Чтобы задать минимальный свет на уровне, поместите ZoneInfo в любую его точку, и выставьте нужное значение в ZoneLight - AmbientBrightness.
Имитировать секторное освещение (а также цветные сектора, как в PSX) можно, добавив в уровень ZonePortal'ы той же формы, что и желаемое пространство, и выставив ZoneInfo в них.
Значения Hue/Saturation желаемого цвета можно получить, нажав по кнопке «Color...» в LightColor любого объекта, и вставив туда значения RGB от 0 до 255.
Чтобы добавить источники света (и/или секторы) на уровень, нажмите Build light (или Build All).
Также можно добавить эхо (Reverb) в желаемую зону через ZoneInfo, главное – её отсечь.
9. Монстров и предметы расставлять по желанию. Если знаете что-то круче DoomPawns.u от Officer D, дайте знать! Они кривые.
Для декораций в целом подходят «родные» модели Unreal/UT, которым можно менять Display - Scale, Fatness, Mesh/сочетать с другими/менять текстуру в MultiSkins, делать её зеркальной (MeshEnviroMap) и т.д.
Ключи, похоже, можно сделать только через триггеры (дверь будет открываться сразу после подбора ключа).
Выход с уровня в UT можно добавить, используя пакет «MonsterHunt» (скачивается отдельно). Он находится в Actors - Triggers - MonsterEnd.
Разумеется, в Level Properties - LevelInfo нужно выставить DefaultGameType «GameInfo - TournamentGameInfo - DeathMatchPlus - TeamGamePlus - MonsterHunt».
Там же можно выставить музыку для уровня и прочую информацию.
10. Небо добавляется посредством скайбокса с актёром «Info - SkyZoneInfo» в центре, и выставления свойства «Fake backdrop» поверхностей с полом F_SKY1 (выбрать все такие поверхности можно через Shift+T).
11. Не забудьте про NavigationPoint – PlayerStart
В результате получится уровень, технически представляющий собой одну кисть, за исключением Mover'ов.
Если вам это не нравится, скоро выйдет версия 469F, в которой можно будет применить иной, менее кривой подход к таким уровням. |
Рейтинг сообщения: +1, отметил(и): camper |
|