Моддинг KF2 для начинающих: SDK, мутатор и Workshop
Это пошаговое руководство для новичков по созданию кодового мода для Killing Floor 2: установка SDK, простейший игровой режим и мутатор на UnrealScript, компиляция, тест, брюинг и загрузка в Steam Workshop. Основано на руководстве сообщества Steam "KF2 Modding for Dummies". Настройку окружения см. в UnrealScript modding setup и руководстве по SDK для карт.
Что понадобится
ПК с Windows, Steam, интернет и сама Killing Floor 2.
Начало: установка SDK
В библиотеке Steam откройте раздел Tools, найдите "Killing Floor 2 - SDK", нажмите правой кнопкой и выберите Install Game.
Killing Floor 2 - SDK в списке Tools библиотеки Steam.
Автор поставил KF2 на небольшой SSD, а SDK на другой диск, и это вызвало проблемы, решённые копированием папки KF2 поверх папки SDK. Проще ставить оба в одно место по умолчанию. В руководстве три условных пути:
<KF2Userdir>:C:\Users\<UserName>\Documents\My Games\KillingFloor2<KF2Gamedir>:C:\Program Files (x86)\Steam\steamapps\common\killingfloor2<KF2SDKdir>: папка установки SDK; может совпадать с папкой игры.
Если при запуске KFEditor.exe открывается сама игра, а не редактор, в теме «Killing Floor 2 SDK - обсуждение» на форуме killingfloor.ru советовали запускать его с параметрами (например, через ярлык):
Win64\KFEditor.exe editor -NoGADWarning
Создайте папки для исходников: <KF2Userdir>\KFGame\Src\DummyMod\Classes. Затем сообщите редактору о пакете: в файле <KF2Userdir>\KFGame\Config\KFEditor.ini добавьте ModPackages=DummyMod в секцию [ModPackages]. Значение должно совпадать с именем папки мода.
Добавляем игровой режим
Чтобы создать новый режим, расширьте KFGameInfo или его потомка. Создайте файл Dummy_Survival.uc в папке Classes (имя класса любое, но оно должно совпадать с именем файла):
class Dummy_Survival extends KFGameInfo_Survival;
event InitGame( string Options, out string ErrorMessage )
{
Super.InitGame( Options, ErrorMessage );
`log("Dummy game type initialized");
}
Добавляем мутатор
Для мутатора расширяйте KFMutator. Создайте Dummy_Mutator.uc:
class Dummy_Mutator extends KFMutator;
function InitMutator(string Options, out string ErrorMessage)
{
super.InitMutator( Options, ErrorMessage );
`log("Dummy mutator initialized");
}
Компиляция
Компиляция превращает исходники в бинарный код, понятный движку, и повторять её нужно после каждого изменения. Откройте командную строку в <KF2SDKdir>\Binaries\Win64 и выполните:
.\kfeditor make -useunpublished -log
Аргумент -useunpublished для этого примера не обязателен, но позже может понадобиться.
Окно консоли компилятора после успешной сборки.
Скомпилированный файл .u (например, DummyMod.u) появится в <KF2Userdir>\KFGame\Unpublished\BrewedPC\Script.
Вырезание исходников. В теме «Защита файлов от декомпиляции» на форуме killingfloor.ru для KF2 предлагали способ «по старинке» — компиляцию с ключом -stripsource:
KFEditor.exe make -stripsource
Старый пакет нужно удалить и скомпилировать заново, дописав ключ к обычному make. Freddy считал, что от декомпиляции это мало кого защитит, и описывал другой подход: делить код на серверную и клиентскую части, держать всю логику в серверных файлах, которые на клиент не скачиваются, а клиенту отдавать только минимальный набор классов-наследников с описанием свойств. Подробнее о вырезании исходников в KF1 — в статье о защите кода.
Вшить один мутатор в другой. В теме «Вшитие одного мутатора в другой» на форуме killingfloor.ru (вопрос был про мутатор !RTD и Server Extension mod) w.a.l объяснял, что сбор скриптов в один пакет делается так же, как в любом Unreal: сложите все скрипты в одну папку Classes внутри папки, названной по имени вашего мутатора (пакета), и в каждом *.uc замените ссылки на классы на имя вашего пакета: имя_вашего_пакета.нужный_uc. Соответственно переименуйте и секции в конфигах. По его словам, «если грубо, то на этом всё».
Тестирование
Откройте командную строку в <KF2Gamedir>\Binaries\Win64 и запустите одну из команд:
KFGame KF-BurningParis?game=DummyMod.Dummy_Survival -log -useunpublished
KFGame KF-BurningParis?mutator=DummyMod.Dummy_Mutator -log -useunpublished
KFGame KF-BurningParis?game=DummyMod.Dummy_Survival?mutator=DummyMod.Dummy_Mutator -log -useunpublished
Первая проверяет режим, вторая мутатор, третья оба сразу.
Игра, запущенная с тестовым модом, и окно лога.
Брюинг
Брюинг упаковывает мод для выпуска. В папке с бинарниками SDK выполните:
.\kfeditor make brewcontent -platform=PC DummyMod -log
Вывод консоли на шаге брюинга.
Результат появится в <KF2Userdir>\KFGame\Published\BrewedPC, и дальше игру можно запускать как выше без -useunpublished.
Загрузка в Workshop
Нажмите правой кнопкой на Killing Floor 2 - SDK в библиотеке Steam и выберите Workshop Upload Tool. Заполните окно, как на скриншоте, и нажмите Start.
Заполненное окно Workshop Upload Tool.
После успешной загрузки мод появится на вкладке Workshop Items вашей страницы контента.
Загруженный мод на странице предметов Workshop.
Расширенная загрузка
Если моду нужны дополнительные файлы - конфигурация (.ini) и локализация (.int, .deu, .fra, .rus и т. д.), используйте консольный загрузчик WorkshopUserTool.exe. Автор выяснил, что поставлять конфиги так неудобно: копия в steamapps\workshop\content\232090\<workshopId>\Config перезаписывает ваш файл при каждом старте игры. Лучше генерировать конфиги из кода или поставлять пример под другим именем.
Создайте <KF2Userdir>\wsinfo_DummyMod.txt со строками в строго таком порядке и с кавычками:
$Description "This is an example mod."
$Title "DummyMod"
$PreviewFile "C:\Users\<UserName>\Pictures\DummyModPicture.png"
$Tags "Maps,Mutators,Gamemodes,Weapons"
$MicroTxItem "false"
$PackageDirectory "C:\Users\<UserName>\Documents\My Games\KillingFloor2\DummyModUpload"
$Descriptionи$Titleможно потом править в Workshop.$PreviewFile- полный путь к картинке предпросмотра.$Tags- Maps, Mutators, Gamemodes и Weapons; теги в Workshop не меняются, только повторной загрузкой.$MicroTxItemвсегда должен быть false.$PackageDirectory- полный путь к папке загрузки.
Пример структуры папки загрузки: BrewedPC\KF-DummyMap.kfm, BrewedPC\Packages\DummyModPackage.upk, BrewedPC\Packages\ENV_DummyMap\...upk, Script\DummyMod.u, Config\DummyMod.ini, Localization\INT\DummyMod.int. Имена файлов не должны повторяться даже в разных папках. Выполните WorkshopUserTool wsinfo_DummyMod.txt из <KF2SDKdir>\Binaries\. Учтите, что это сбросит описание, поэтому отредактированный текст сначала сохраните.
Если загрузка не удалась, проверьте полные пути и сконвертируйте превью в .jpg для меньшего размера.
Что почитать дальше
Автор ссылается на вики UDK по GameInfo, справку по UnrealScript, открытые моды KF2 на GitHub (Controlled Difficulty, Weaponized Dosh и другие) и страницы вики Tripwire о кодовых модах, своём GameInfo и загрузчике Workshop.