Маппинг для DOOM: Часть 4 - Год кота

Делаем небольшую зимнюю карту, на которой будут новые текстуры и музыка. Их мы научимся добавлять с помощью нового редактора - SLADE.

Маппинг для DOOM: Часть 4 - Год кота

Предыдущие статьи были посвящены редактору уровней GZDoom Builder:

Часть 1 - установка GZDB, простейшая геометрия

Часть 2 - освещение, триггеры, выравнивание текстур, открытые пространства

Часть 3 - двери с ключами, секретки, монстры, зоны слышимости, телепорты, выход с уровня

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

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

Готовьтесь: в статье будет много скучных скринов интерфейсов, технических подробностей и кринжевых шуток, так что вот вам советская фарфоровая рысь. Пусть её вид успокоит вас и придаст сил.

Маппинг для DOOM: Часть 4 - Год кота

А теперь начнем, что ли.

Where's all the data?

Для начала раздобудем редактор SLADE. Например, на официальном сайте проекта.

Качаем, ставим, видим:

Маппинг для DOOM: Часть 4 - Год кота

Интерфейс не перегруженный и не лапидарный, как раз самое то.

Так как работать мы будем с вадником из предыдущих выпусков, идём в File - Open и открываем его (в прошлый раз он назывался DTF_v1.wad):

Маппинг для DOOM: Часть 4 - Год кота

Так, что тут у нас? В прошлый раз мы занимались только картой, и потому все, что мы видим, относится только к ней. Первый элемент - MAP01 - это маркер карты, остальные - служебные таблицы, в которых содержится её содержимое. Всё это называется лампами (lump).

Настало время технической матчасти
Настало время технической матчасти

Ламп ("кучка") - суть набор данных в ваднике. Они бывают самых разных видов - таблицы, изображения в думовских форматах, двоичные данные, текст, и т.д. Лампы карт лучше руками не трогать - можно сломать наш уровень напрочь. А вот с лампами других типов можно делать все, что душе угодно.

Перед тем, как начать напихивать в наш вадник ништяки, необходимо настроить базовый ресурсник. Идём в Edit - Set Base Resource Archive, и указываем путь к doom2.wad:

Маппинг для DOOM: Часть 4 - Год кота

Жмём Apply и Ok. Теперь можно начинать.

Белый снег, серый лёд

Первое, что мы сегодня сделаем - добавим в наш вадник несколько текстурок, отвечающих за полы/потолки (flats). Как уже говорилось, в DOOM для стен и полов с потолками используются различные наборы текстур - это связано с тем, что они рендерятся по-разному и хранятся в разных форматах. Флэт должен быть разрешением строго 64х64 и иметь формат Graphic (Flat).

Брать наши полы мы будем из другого вадника, Mogor's Winter. Открываем его, находим флэт HFSNOW01:

Маппинг для DOOM: Часть 4 - Год кота

Копируем его с помощью CTRL + C, переходим на вкладку с нашим вадником, устанавливаем курсор на последний ламп карты (BLOCKMAP), жмакаем CTRL + V:

Маппинг для DOOM: Часть 4 - Год кота

Текстурка снега скопировалась и сразу же распозналась, как флэт. Это потому, что мы скопировали не просто графику, а ламп целиком, со всей сопутствующей информацией.

Еще она загорелась зелёным - это означает, что ламп не присутствует в сохраненной копии. Идём в File - Save As и сохраняем наш вад - например, как DTF_v2. После этого флэт запишется в вадник и тоже станет чёрным.

Скопируем в наш вад еще несколько флэтов - например, приятные деревянные полы HFWOD02, HFWOD03 и HFWOD06. При просмотре флэта можно изменять масштаб просмотра, а если чекнуть галку Tile, то можно посмотреть, как текстура будет выглядеть на стыках (и не нужно ли её допиливать лобзиком):

Маппинг для DOOM: Часть 4 - Год кота

Самое время открыть редактор уровней GZDoom Builder и посмотреть, как наши флэты выглядят в игре. Но перед этим необходимо сделать еще одну вещь: окружить наши полы специальными маркерами. Если этого не сделать, то полы просто не будут доступны в редакторе.

Наводимся на ламп, предшествующий первому флэту (BLOCKMAP), и жмём на командной панели кнопку New Entry:

Маппинг для DOOM: Часть 4 - Год кота

После чего вводим имя FF_START. Получаем:

Маппинг для DOOM: Часть 4 - Год кота

Этот маркер подскажет редактору и игровому движку, откуда начинать грузить флэты. Точно так же наводимся на последний флэт, и создаём маркер FF_END:

Маппинг для DOOM: Часть 4 - Год кота

Сохраняем... Но перед этим еще перекидываем текстуру льда HFSNOW02.

Теперь вадник можно закрыть - а если мы планируем открывать его в GZDoom Builder, то закрыть его необходимо, иначе возможны всякие ошибки ввода-вывода и прочие гадости. Для этого идем в File - Close, жмём CTRL + W, ну или просто закрываем вкладку с вадником.

Чтобы поглядеть на новые флэты, запускаем билдер и создаём новую карту в формате Doom: Doom 2 (Doom format). На этот раз называем её MAP02:

Маппинг для DOOM: Часть 4 - Год кота

...и сразу же идём в File - Save Map Into, и выбираем наш DTF_v2.wad. После того, как карта сохранится в наш вадник, в редактор подгрузятся новые флэты, и их можно будет выбирать в диалоге текстур. При этом флэты из нового вадника будут отображаться отдельно:

Маппинг для DOOM: Часть 4 - Год кота

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

Заплата на заплате

Текстурки стен мы будем брать оттуда же, откуда и флэты - из mwinter.wad. От флэтов они отличаются тем, что подписаны Graphic (Doom), а еще они как правило длиннее. Открываем наш вад и mwinter, ищем в последнем текстурки H_WOD01...07, выделяем, и копируем в наш вад, установив курсор на FF_END:

Маппинг для DOOM: Часть 4 - Год кота

Теперь два момента. Во-первых, лампы второй карты закинулись после лампов текстур, так что первая и вторая карты теперь идут вразнобой. Это не страшно, но если внутренний перфекционист требует это исправить, можно выделить все лампы второй карты, и начать одновременно сдвигать их вверх - для этого используется синяя стрелка вверх или CTRL + U. Должно получиться так:

Маппинг для DOOM: Часть 4 - Год кота

Во-вторых, теперь по логике нужно оградить текстуры стен маркерами, как мы это сделали с флэтами. В mwinter.wad это сделано маркерами PP_START и PP_END. Но это излишне - что PrBoom, что GZDoom не требуют маркеров для текстурок стен, и те служат скорее для удобства/как дань традиции. И даже если мы эти маркеры поставим, в редакторе текстуры видны не будут.

Почему так? Дело в том, что то, что мы только что загрузили - еще даже не текстуры, а составные части текстур, патчи (patch), "заплатки". Текстуры собираются из них в специальных лампах, которые мы сейчас создадим. Выделяем текстуры стен, жмём правой кнопкой, и выбираем Graphics - Add to TEXTUREx. Реактор отметит, что в ваднике нет TEXTURE1 - отвечаем "Да".

В следующем диалоге в поле Source выбираем Import from Base Resource Archive (вот он и пригодился):

Маппинг для DOOM: Часть 4 - Год кота

После этого в нашем архиве появляются еще два лампа - TEXTURE1 и PNAMES. Что они такое?

  • PNAMES присваивает каждому патчесу уникальный номер
  • TEXTURE1 составляет из патчесов текстуры, которые используются потом в игре. При этом в одной текстуре может быть задействовано много патчей

Как это работает? Выбираем TEXTURE1, в правой части экрана жмём на кнопку Edit textures. Откроется новая вкладка, где будет список текстур, причем не только из нашего вадника, но и из DOOM2.wad.

Найдем там, например, текстуру SLADSKUL:

Маппинг для DOOM: Часть 4 - Год кота

В правой части видно, что она сделана из двух частей - зеленая стенка WLA128_1 и черепок SW2_2, причем для последнего указано смещение по вертикали и горизонтали.

Все эти стандартные патчесы не добавились в наш вадник - в Texture Editor они видны потому, что мы указали для Слейда стандартный ресурсник. Но структура лампа TEXTURE1 из DOOM2.wad перенеслась в наш вад целиком - это необходимо для того, чтобы все текстуры отображались корректно.

Что же касается наших текстур, то они разместились в конце списка:

Маппинг для DOOM: Часть 4 - Год кота

Здесь их можно переименовать, хотя если текстура состоит из одного патчеса, то смысла в этом нет.

Сохраняем, закрываем Слейд, снова запускаем Билдер:

Маппинг для DOOM: Часть 4 - Год кота

Как видим, в список текстур нашего вадника набилось всё подряд - и наши текстуры, и текстуры из doom2.wad. Сделать с этим ничего особо нельзя, так что остается воспользоваться поиском по наименованию, ну и чекнуть галку Used Textures at the Top - тогда сначала будут отображаться текстуры, уже используемые на уровне.

Система компоновки текстур из составных частей позволяла сэкономить место - особенно это выручало при создании текстур с рубильниками. В модах её тоже иногда используют, причем для ZDOOM, GZDOOM и т.д. разработали новый формат с расширенным функционалом.

Теперь можно изменить вид неба над головой.

В Думе - в ванильном, по крайней мере - вид неба захардкожен и зависит от игры. Например, в DOOM2 первые 11 уровней используют небо SKY1, 12-20 - SKY2, а 21-32 - адское SKY3. В навороченных портах вроде GZDoom это можно гибко настраивать, но так как мы маппим под ваниль (т.е. считай под PrBoom), мы просто заменим текстуру SKY1 на другую.

Новое небо мы возьмем из другого вадника - на сей раз это будет 1000 Lines 3: Community Project. Скачиваем, открываем, ищем патчесы E1SKY1...E1SKY4:

Маппинг для DOOM: Часть 4 - Год кота

Копируем в наш вад к другим патчесам. Теперь открываем TEXTURE1, ищем текстуру SKY1. Как видим, сейчас она состоит из одного патча RSKY1 и имеет размер 256x128. Т.е. в теории мы могли бы просто завести у себя в ваднике новый патч RSKY1, и небо бы поменялось.

Но мы пойдем дальше - сделаем красивое, детальное небо из 4-х кусков. А значит:

  • Выделяем E3SKY1...E3SKY4 и делаем Graphics - Add to TEXTUREx
  • Заходим в TEXTURE1, ищем SKY1, в правой части окна отыскиваем пиктограмму с минусом и убираем патч RSKY1 со стоковым бурым небом
  • В нижней части экрана находим размер, меняем 256 на 1024 - чтобы получилось 1024 х 128
  • В правой части щелкаем на пиктограмму с плюсом, и добавляем наши 4 куска неба, каждому указывая смещение (256, 512, 768)

Должно получиться так:

Маппинг для DOOM: Часть 4 - Год кота

Теперь жмём на иконку дискеты (напротив Format: Doom TEXTUREx), закрываем окно, и потом еще раз сохраняем вадник, чтобы горящие синим измененные TEXTURE1 и PNAMES записались и стали чёрными.

Запускаем игру и идём на MAP02:

Прелесть же, ну!

Итак, еще раз:

  • ФЛЭТ - текстура пола/потолка, размер 64x64
  • ПАТЧ - графика, используемая для текстур стен. Может быть любого размера
  • ТЕКСТУРА - текстура стены, элемент таблицы TEXTURE1. Составляется из одного или нескольких патчей. Размер потенциально любой, но в теории ширина должна быть степенью двойки (16, 32, 64, 128...)

Думеры говорят на своем, необычном языке. Как впрочем и любая другая уважающая себя секта.

Собственно, Кот

Так, а если мы хотим добавить текстуру не из чужих вадников, а какую-нибудь свою? Откуда-то ведь все эти текстуры должны были взяться, в конце-то концов. Что ж, не будем тянуть известно кого за хвост. Итак, наш герой:

Маппинг для DOOM: Часть 4 - Год кота

Перед тем, как грузить его в Slade, потребуется произвести ряд манипуляций. Во-первых, так как у нас тут не обычная текстурка, а фотокарточка, мы должны ужать её в 1.2 раза по вертикали, чтобы в Думе морду не растянуло по высоте.

Пиксели в DOOM не квадратные, а прямоугольные, вытянутые по вертикали. Когда игру разрабатывали, планировалось, что она будет работать в соотношении сторон 4:3, но в разрешении 320x200. Соотношение сторон этого разрешения - 8:5, или 4:2.5. Старые CRT-мониторы растягивали картинку, и пиксели становились на 20% выше.

Нынешние мониторы работают иначе, так что современные порты растягивают картинку искусственно. В GZDoom'е этим можно управлять, задавая текстурам разную степень растяжения.

Сплюснутый карликот, 83.3% от нормальной высоты:

Маппинг для DOOM: Часть 4 - Год кота

Во-вторых, обрезаем и уменьшаем текстуру. Пусть она у нас будет размером 256х192:

Маппинг для DOOM: Часть 4 - Год кота

А вот теперь уже можно грузить. В Слейде идём в Archive - Import Files. В ваднике он встаёт как Graphic (JPEG):

Маппинг для DOOM: Часть 4 - Год кота

PrBoom не умеет работать с таким форматом - что уж говорить о ванили! А значит, нам надо сконвертировать нашу текстуру в думовский формат. Выделяем ламп кота, идём в Graphic - Convert To:

Маппинг для DOOM: Часть 4 - Год кота

Огромное количество цветов - до 16 миллионов - мы преобразуем в 256-цветную думовскую палитру. При этом, конечно, будут потери - сильнее всего это заметно на шее кота. Чтобы избежать подобного, можно заранее провести цветокоррекцию. Вот, кстати, как выглядит думовская палитра:

Палитру тоже можно поменять. Для этого нужно создать ламп PLAYPAL (Archive - New - PLAYPAL) - в SLADE есть даже встроенный редактор палитры.
Палитру тоже можно поменять. Для этого нужно создать ламп PLAYPAL (Archive - New - PLAYPAL) - в SLADE есть даже встроенный редактор палитры.

Здесь хватает оттенков для грязи и крови, а вот скажем небесно-голубого тут не встретишь. При цветокоррекции все это стоит учитывать, т.к. чем дальше цвет от думовского аналога, тем выше шанс получить артефакты.

После того, как мы конвертировали кота, надо сохранить измененный ламп - и его формат сменится на Graphic (Doom). Можно добавлять его в TEXTURE1 и тестить на карте.

Большой токсик следит за тобой
Большой токсик следит за тобой

Как и планировалось, кот растянулся, и встал, как надо. Ура!

🎸🥁🎵🎶

С текстурами закончили, теперь самое время поменять музыку. На первой карте у нас играла тема с первого уровня оригинала, и вполне неплохо туда вписывалась. А вот со второй картой такое уже не прокатит - на MAP02 кампании DOOM 2 на фоне звучит нечто очень расслабленное и какое-то даже латиноамериканское. В атмосферу зимних праздников это вписывается примерно никак, и потому давайте поставим что-нибудь другое.

Музыка в Думе представлена великим и могучим форматом MIDI, а еще форматом MUS (что по сути является тем же MIDI, но с минимальными допилками, суть которых мне неведома). Оба формата хранят только информацию о нотах, а сами инструменты довешиваются отдельно, в так называемом soundfont'е. Из-за этого одна и та же композиция может по-разному звучать в разных портах.

В портах добавили поддержку для OGG, MP3, трекерной музыки и т.д. Но в подавляющем большинстве модов всё равно используется MIDI - иногда для больших проектов даже пишутся отдельные саундтреки в этом формате.

Какая же музыка подойдет для зимней карты? Новый год вроде как уже позади, значит, не обязательно ставить что-то совсем уж праздничное. Не мудрствуя лукаво, я отыскал старенький вад для коопа, Drown In Blood, и взял оттуда трек с первого уровня - в меру лиричную MIDI-версию весьма известной в определенных кругах песни.

Как и многое другое в ванили, музыка в DOOM 2 захардкожена - так что если мы хотим заменить музыку на карте, мы должны сначала понять, какой трек ей соответствует. Полный список названий треков можно посмотреть, к пример, тут.

В нашем случае мы хотим заменить трек с MAP02 (D_STALKS) на музыку из другого вадника, где она играет на карте MAP01 (D_RUNNIN). Так что открываем dib20b.wad, отыскиваем D_RUNNIN, копируем в наш вадник после всех прочих лампов, и переименовываем в D_STALKS.

Готово!

Если выбрать какой-нибудь трек, в правой части интерфейса появится нечто вроде аудиоплеера. Он справляется с OGG и трекерами, а вот MIDI из коробки не играет - нужно или указать саундфонт для fluidsynth'а (у меня не работает), или настроить Timidity - но эта древняя утилита требует отдельных плясок с бубном и к тому же коверкает музыку. Так что этот момент я разбирать не буду.

Что же касается звуков, то тут все проще - ваниль поддерживает звуки в формате .wav, конвертировать в который умеют многие программы и сервисы - взять тот же AIMP Audio Converter, идущий в комплекте с аудиоплеером. Определяемся со звуком, который хотим заменять, даем новому звуку такое же название, грузим в наш вад. Всё.

Замена спрайтов и прочей графики

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

Качаем вот этот вадник. В отличие от других вадов из этого материала, этот не имеет геймплейной ценности и предназначен сугубо для моддеров. Поэтому в архиве так мало всего:

Маппинг для DOOM: Часть 4 - Год кота

Кроме интересующих нас спрайтов вадник содержит код, который позволяет использовать эту декорацию как новый объект, без замены существующих. Но этого мы пока касаться не будем - мы делаем карту для PrBoom, а добавлять новые объекты можно только в ZDoom, GZDoom и иже с ними. Так что копируем спрайты в наш вад:

Маппинг для DOOM: Часть 4 - Год кота

Переименовываем, заменяя первые 4 буквы с HBBQ на FCAN (тут удобна функция Rename Each). И, подобно флэтам, окружаем спрайты специальными маркерами - теперь это SS_START и SS_END:

Маппинг для DOOM: Часть 4 - Год кота

Осталось только конвертировать их из PNG в думовский формат - Doom GFX (Paletted). В этот раз никаких графических артефактов не будет, ведь спрайты изначально рисовались в думовской палитре.

Вот, как теперь выглядит бочка в игре:

Что же касается прочей графики - заглавного экрана, то здесь все, как с патчесами - грузим, конвертируем в Doom GFX (Paletted), разве что в TEXTURE1 не добавляем.

Вот к примеру заглавный экран. Наш вадник называется DTF_v2.wad, а значит требуется подобрать что-то, имеющее прямую связь с ресурсом и его аудиторией. Долго искать не пришлось:

Любимые игроблогеры портала DTF по данным многочисленных комментариев
Любимые игроблогеры портала DTF по данным многочисленных комментариев

Процесс нам уже хорошо знаком: берем интересующую нас картинку, сжимаем до нужного размера, грузим, конвертируем, переименовываем в соответствии с тем, какой элемент планируем заменять. В нашем случае заставку сжали до 320x200 и переименовали в TITLEPIC, а заголовок главного меню игры - до 125x60 и назвали M_DOOM. Если открыть в редакторе doom2.wad, то можно легко найти названия нужных спрайтов/графических элементов. Главное при этом сам iwad нечаянно не похерить.

Вот и сказочке конец

А кто слушал - теперь может использовать свои и чужие текстурки, музыку, спрайты, элементы интерфейса и т.д. Демку я записывать не стал (там нечего записывать), а саму карту можно скачать вот здесь - попасть на неё можно с помощью чита idclev02. Делать там особо нечего, но зато можно полюбоваться красивым звездным небом и ликом токсичного кота.

В следующей статье мы вернемся к маппингу и начнём осваивать новый формат - Boom. Этот формат похож на ванильный, но имеет несколько интересных фишек, а еще поддерживает пользовательские анимации.

Всем спасибо за внимание!

3737 показов
3.1K3.1K открытий
10 комментариев

(что по сути является тем же MIDI, но с минимальными допилками, суть которых мне неведома)Допиленный MIDI, учитывающий реалии того времени. Максимальный размер файла - 64кб (размер MIDI - де-юре не ограничен), максимальное число каналов - 9, где последний - канал ударных (в стандартном General MIDI их 16, где за ударные отвечает 10ый канал). Это сделано для совместимости со звуковыми карточками AdLib, где FM-синтезатор Yamaha OPL2 имел именно 9 каналов. +MUS отличается тем, что для громкости инструментов доступно больше, чем 127 значений, поэтому конвертация обратно может сбоить на некоторых оригинальных мелодиях.

Также следует учитывать, что MIDI - это не музыкальный формат, а протокол передачи данных для цифровых музыкальных инструментов. Соответственно в формате .MID/.MIDI может быть не только музыка (а точнее инструкции для её воспроизведения), но, например, настройки для какого нибудь MIDI-контроллера (к примеру драм-пэда) или даже инструкции для сценического оборудования (да, в MIDI есть подстандарт и для такого). То, что обычно подразумевается под "MIDI-музыкой" - это расширение MIDI-протокола под названием General MIDI, стандартизирующее инструкции и спецификации для воспроизведения музыки на различных синтезаторных модулях и самоиграйках. У General MIDI есть множество своих расширений с разными редакциями, которые друг с другом зачастую несовместимы. Конкретно музыка для Doom писалась под первую редакцию стандарта General Sound - расширение General MIDI, введённое компанией Roland с выходом MIDI-модуля Roland SC-55. Этой же спецификации соответствует большинство звуковых карточек с поддержкой MIDI, а также вшитый в винду Microsoft GS Wavetable Synth, однако все эти дешёвые эрзацы поддерживают его не полностью, в частности почти ни один из них не поддерживает блоки эффектов и синтеза (в первую очередь дилей, хорус и фильтры), которые этим стандартом также регламентируются. Поэтому в первую очередь при подборе мелодий надо обращать на мелодии, написанные именно под Microsoft GS Wavetable Synth и им подобные + под классический General MIDI (но он хуже, ибо там, например, нет других наборов ударных, кроме стандартного) и с небольшой осторожностью под первую редакцию General Sound (т.е. под Roland SC-55, эти мидишки также скорее всего будут звучать нормально, пусть и не в полную силу). И ни в коем случае не под какие другие, как то например расширения XG или General MIDI 2, потому что у 99.9% юзеров правильно они всё равно не воспроизведутся.

И отдельно отмечу, что современные порты, а также Doom начиная с версии 1.5 умеют воспроизводить музыку в формате .MIDI, однако Heretic и HeXeN, а также более ранние версии Doom'а этого не умеют и ограничиваются исключительно форматом .MUS. Это тоже стоит учитывать, если вы собираетесь делать вадник под ванильный Heretic или HeXeN.

Ответить

Бонусом скажу, что возможно имеет также смысл присмотреться к трекерной музыке, если вы делаете вадник не под ванильные Doom или Boom. Её умеют воспроизводить почти все хоть сколь современные порты, включая даже такие, как PrBoom+ и Doom Retro. Но опять же, надо к этому подходить со вкусом и в случае с трекерной музыкой это ещё более значимо.

Ответить

Спасибо за подробную матчасть)

Ответить

Вообще было бы неплохо модифицировать Doom под жизнь на DTF)

Ответить

Я советую использовать для цветокоррекции специальную паллитру, которую можно наложить в фотошопе, на форуме ZDoom есть про нее тред https://forum.zdoom.org/viewtopic.php?f=37&t=49796

Она помогает заранее проверить, что текстура не сильно зашакаливается при конвертации

Ответить

Спасибо, много полезной инфы узнал. Как раз завтра выставлю статью про свой проект)

Ответить

Realm667 вообще очень хорошая библиотека для начинающего моддера в думе. Особенно на примере местных пушек и Мобов можно посмотреть работу этого вашего декорейта на практике =^-^=

Ответить