Предисловие

Нам понадобится следующий набор программ:

Для успешного портирования карты на Source 2 будем использовать инструменты в Steam Half-Life: Alyx, или SteamVR, таким образом мы сможем попасть в новый Hammer. В гайде я буду описывать процесс портирования с использованием SteamVR. Инструментарий HLA и SteamVR не имеет критических различий, поэтому вполне сойдёт для практики.

Начало работы с Source 2 инструментами.

Создаем свой addon

SteamVR можно (и нужно) скачать в Steam. Сделать это можно в библиотеке Steam, поставив в фильтрах поиска галочку на пункте "Инструменты" и вписав в строку поиска "SteamVR".

Скачав SteamVR, запускаем его. В открывшемся окне кликаем слева сверху.

Прежде всего нужно создать аддон, который будет содержать вашу карту. Выбираем Мастерская > Создать/изменить среду исполнения.

Нажимаем снизу кнопку "Create New Addon From Selected" и даём название своему аддону.

Всё, вы создали аддон, можно закрывать SteamVR и этот гайд, вы теперь знаете всё то, что знаю я. Шучу, но SteamVR всё равно закройте, предварительно запомнив имя своего аддона.

Чтобы иметь быстрый доступ к инструментам Source 2, полезем в локальные файлы и найдем файл "steamtours.exe".

Файл "steamtours.exe" у меня расположился по такому адресу "D:\Steam\steamapps\common\SteamVR\tools\steamvr_environments\game\bin\win64". У себя вы его также сможете найти в своей Steam директории.

Создаём ярлык от этого .exe файла себе на рабочий стол и в свойствах ярлыка дописываем в графу «Объект» -tools -addon [Имя вашего аддона]. Поздравляю, теперь вы можете открыть инструменты Source 2.

Начинаем портировать карту

Теперь мы займемся портированием файла карты. По сути, после этого процесса у нас будет "скелет" карты без "кожи", т.е. без текстур и моделек. Запускаем инструменты с помощью созданного ярлыка. В Asset Browser’е слева сверху первая кнопка открывает Hammer editor.

Можете поиграться в новом редакторе, настроить всё под себя, если случайно закрыли панель инструментов, то её можно вернуть через меню "View">"Toolbars".

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

Теперь открываем Новый Hammer, слева сверху открываем .vmf файл карты, выставив в проводнике справа снизу не .vmap, а .vmf – иначе вы просто не увидите файл карты.

При открытии вы его сохраняете по адресу D:\Steam\steamapps\common\SteamVR\tools\steamvr_environments\content\steamtours_addons\[Имя вашего аддона]\maps. Всё, теперь вы, надеюсь, успешно портировали карту, остаётся только возня со старыми entity, материалами и со своей прокрастинацией.

Та часть, где мы занимаемся рутиной

Начинается самый скучный и длинный этап портирования карты. По сути, если бы был нормальный инструмент конвертирования из .vmt в .vmat, то дело продвигалось бы быстрее, но пока ешь, что дают.

Если вы не являетесь автором карты, то, скорее всего, у вас не будет её материалов. Их можно получить с помощью архиватора 7-Zip. Вам нужно будет скачать и установить его. После установки нажимаем правой кнопкой мыши по .bsp файлу (который, по сути, является просто архивом). Выбираем 7-Zip > Открыть архив > #

В открытом архиве вы сможете найти использующиеся в карте пользовательские материалы.

Чтобы посмотреть список использующихся в карте материалов, нужно открыть BSPInfo, который скачивается совместно с BSPSource, потом нажать на "file" и выбрать .bsp вашей карты. Нажимаем на вкладку "Dependencies", и, если вы сделали всё правильно, то вы увидите список использующихся в карте материалов.

Может оказаться так, что в архиве карты нет необходимых материалов, но BSPInfo показывает, что они используются, а это значит, что, скорее всего, в карте используются материалы Counter-Strike: Source. Тогда вам придётся скачать ещё одну программу - GCFScape. С её помощью мы сможем извлечь контент из CSS.

Открываем GCFScape, нажимаем File и находим в папке с игрой Counter-Strike: Source файл cstrike_pak_dir.vpk. Теперь вы можете достать необходимые вам материалы из папки materials.

Скопируйте все материалы карты в одну папку. Назовите папку materials и переместите её в ваш аддон. У меня путь получился такой "D:\Steam\steamapps\common\SteamVR\tools\steamvr_environments\content\steamtours_addons\[Имя вашего аддона]"

Теперь сконвертируем материалы под нужный формат для нового Hammmer'а.

Открываем программу VTFEdit, во вкладке Tools выбираем Convert Folder.

На Input Folder ставите папку materials карты, на Output тоже. Выбираем пункт To tga. Галочка должна стоять только на Recursive. Так мы переводим материалы карты в читаемый новым Hammer'ом формат .tga.

Нажимаем Convert. С помощью source2utils конвертируем текстуры в котируемые новым Source. Эта программа ещё сырая, пропускает текстуры без видимой причины, а также не конвертирует в нужный нам шейдер vr_standard, поэтому придётся поработать ручками, либо воспользоваться программой типа ReNamer, чтобы облегчить себе задачу. Можно также написать файл материала самостоятельно, это не займёт много времени. Ниже будет описано, как это сделать.

Если мы используем SteamVR, то у нас не поддерживаются шейдеры vr_complex, а именно этот шейдер будет вписан в файл материала, если вы используете source2utils, поэтому нужно сделать так, чтобы в каждом файле материала (.vmat) был написан шейдер vr_standard, который поддерживается SteamVR.

Вот что произойдёт, если использовать неверные шейдеры.

Как пример синтаксиса возьмём текстуру стекла:

Layer0
{
shader "vr_standard.vfx"
TextureColor "materials\minecraft\glass_color.tga" //Основная текстура
F_TRANSLUCENT 1
TextureTranslucency "materials\minecraft\glass_trans.tga" //Альфа-текстура
}

Основная текстура имеет приписку _color, у текстуры прозрачности приписка _trans.

После всего этого текстуры хоть и появятся, но у них будет неправильное значение scale, поэтому следует открыть asset browser (Сверху справа у каждого Вьюпорта можно настроить вид, тут выбираем asset browser), нажать правой кнопкой мыши по текстуре и выбрать Select Faces Using Material. В Tool Properties напротив Fit нажимаем на первую кнопку, но это не универсальный вариант, возможно некоторые текстуры вам понадобится настраивать вручную.

Исправляем Skybox

С новыми инструментами стало гораздо проще делать собственный скайбокс. Вам потребуется 6 изображений разных сторон скайбокса (front, back, right, left, up, down). Если вы портируете карту с пользовательским скайбоксом, то в архиве карты вы обнаружите нужные изображения сторон скайбокса, они будут уже подписаны, вам остаётся только объединить их. В фотошопе, на чёрном фоне располагаете их в виде развёрнутого куба или христианского креста, наклоненного влево, тут кому как нравится 😄.

Если же в папке нет изображений скайбокса, то, возможно, в карте используются скайбоксы из CSS, а, значит, вам снова придётся лезть в материалы CSS с помощью GCFScape и доставать тот скайбокс, указанный в использующихся материалах, которые можно посмотреть с помощью BSPInfo.

Сохраняем в формате .png, переносим в папку с материалами карты. Заходим в Material Editor через Asset Browser, правее иконки Hammer Editor. Создаём новый материал и сохраняем, чтобы иметь возможность редактировать. Нажимаем на кнопку «Shaders…», выбираем Sky. В пункте Sky texture выбираем свою развертку скайбокса.

Чтобы установить свой скайбокс, нужно на своей карте поставить entity env_sky. Сделать это можно, выбрав Entity Tool (Панель инструментов слева или Shift+E), а после кликнув на любую часть карты в 3D Viewport. Снова выбираете Selection Tool (Панель инструментов слева или Shift+S), двойным кликом в 3D Viewport по новосозданной entity, открываете свойства энтити и в её класс вписываете env_sky, а в графу Sky Material устанавливаем свою текстуру неба.

Небольшие замечания

  • Портированная карта может содержать энтити, которые работают неправильно, к примеру func_clip_vphysics, не влияющая ранее на игрока, теперь создаёт препятствие. Можете попробовать исправить неправильно работающие энтити, но лучше их просто удалить.
  • Хаммер перестаёт откликаться на нажатия клавиатуры, потому что нужно поставить английскую раскладку.
  • При запуске скомпилированной карты вы не сможете двигаться. Если не помог пункт выше, то необходимо открыть консоль (~ по умолчанию) и вписать туда bind n noclip. При запуске карты дважды нажимайте n, чтобы вылезти из пола.
  • Управление в SteamVR происходит на wasd и стрелки влево/вправо для поворота камеры.

Итоги

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