Мутаторы и UnrealScript

Как компилировать и декомпилировать мутаторы Killing Floor

Эта инструкция описывает процесс компиляции и декомпиляции мутаторов для Killing Floor.

Браузер Actor Classes в KF Editor Браузер Actor Classes в KF Editor показывает UnrealScript-классы из загруженных пакетов.

Компиляция мутаторов

Компиляция мутаторов позволяет преобразовать исходный код UnrealScript (.uc файлы) в исполняемые файлы (.u файлы), которые могут быть использованы на сервере.

Необходимые инструменты

Для компиляции мутаторов вам понадобятся:

  • UnrealScript компилятор (обычно входит в состав Unreal Engine SDK)
  • Исходные файлы мутатора (.uc файлы)
  • Правильно настроенная структура папок

Процесс компиляции

  1. Подготовьте исходные файлы мутатора (.uc файлы) в правильной структуре папок
  2. Убедитесь, что все зависимости и импорты правильно указаны
  3. Запустите компилятор с правильными параметрами
  4. Проверьте результат компиляции на наличие ошибок

Декомпиляция мутаторов

Декомпиляция мутаторов позволяет извлечь исходный код из скомпилированных файлов (.u файлы).

Необходимые инструменты

Для декомпиляции мутаторов используются специальные утилиты:

  • UnrealScript декомпиляторы
  • Hex-редакторы (для частичной декомпиляции)

Процесс декомпиляции

  1. Используйте специализированный декомпилятор для UnrealScript
  2. Учтите, что декомпилированный код может отличаться от оригинального
  3. Некоторые части кода могут быть утеряны или искажены при декомпиляции

Разбор и сборка через UCC (мануал)

По теме «[Мануал] Компилируем/Декомпилируем мутатор» (kok-s, форум killingfloor.ru, 2013). Нужен UCC.exe в папке System (входит в Killing Floor SDK). Само программирование здесь не рассматривается, только разбор и сборка пакета. Пример — мутатор ClotsDay из двух файлов ClotsDay.u и ClotsDay.ucl в папке System.

Декомпиляция классов

Создайте в System bat-файл, например «Декомпилирование мутаторов»:

UCC.exe BatchExport ClotsDay Class uc ..\ClotsDay\Classes
del steam_appid.txt
pause

Вместо ClotsDay подставьте имя нужного пакета (например, ServerPerksP). Строка del steam_appid.txt нужна, если вы собираете или разбираете на том же клиенте, на котором играете: иначе после компиляции или декомпиляции вы не сможете зайти ни на один сервер. После запуска в корне игры появится папка ClotsDay\Classes с файлами классов, которые можно править, например, в Notepad++.

Если вы разбираете код оружия или мутанта, сначала разложите нужные ресурсы по папкам (текстуры в Textures и т.д.): код ссылается на ресурсы, и без них компилятор его не декомпилирует.

Русский клиент: True/False в исходниках

На русском клиенте в декомпилированных исходниках вместо True и False могут оказаться «Истина» и «Ложь». Можно поменять в killingfloor.ini Language=rus на Language=int, но надёжнее исправить файл System\Core.rus: замените содержимое секции [General] на

[General]
Product="Unreal"
Engine="Unreal Engine"
Copyright="Copyright 2004 Epic Games, Inc."
True="True"
False="False"
None="None"
Yes="Yes"
No="No"

Подробнее про эту правку: Вернуть русский язык.

Извлечение текстур и звуков из пакета

Текстуры, вшитые в пакет мутатора:

ucc batchexport ClotsDay.u Texture dds ..\ClotsDay\Textures

Звуки в формате wav:

UCC.exe BatchExport ClotsDay Sound wav ..\ClotsDay\Sounds

Формат может отличаться, укажите нужный. Тем же способом Flame в теме «Мануал, как вытащить звуки из KF» предлагал выгружать все звуки звукового пакета .uax целиком (UCC.exe BatchExport НазваниеПакета Sound wav ..\НазваниеПакета\Sounds). Замечания из той темы:

  • В пути не должно быть русских символов и пробелов: если папка игры называется Killing Floor, переименуйте её, например, в KillingFloor.
  • Если на выходе файлы по 0 КБ, скорее всего, вы экспортируете SoundGroup, а не звук.
  • Один звук можно вытащить и без командной строки: в SDK откройте View → Sound Browser, нажмите Open package, выберите пакет, выделите звук и выполните File → Export (имена папок в пути должны быть английскими). Импорт — обратно: Sound → Import, выберите WAV и укажите пакет и группу.
  • По словам Flame, сторонние распаковщики пакетов Unreal без правки не открывают пакеты KF: у KF немного другая сигнатура, чем у стандартного Unreal, и перед открытием нужно заменить первый символ файла пакета.
  • Отдельно извлечь «вложенные» .utx/.uax из .u нельзя: по словам 3xzet, .utx, .uax, .u, .usx и .ukx — один и тот же формат пакета, и .u можно открыть в браузере текстур редактора, выбрав в диалоге все типы файлов.

Сборка

  1. Удалите из System старые ClotsDay.u и ClotsDay.ucl.
  2. В killingfloor.ini в разделе [Editor.EditorEngine] допишите EditPackages=ClotsDay.
  3. Создайте в System bat-файл «Компилирование мутаторов»:
ucc.exe make
del steam_appid.txt
pause

Компилятор соберёт всё, что прописано в строках EditPackages=. При успехе в System снова появятся ClotsDay.u и ClotsDay.ucl; при ошибке компилятор укажет класс, строку и текст ошибки.

Порядок EditPackages

Пакет может зависеть от классов другого пакета, поэтому порядок строк важен. Для ServerPerks 7.10:

EditPackages=ServerPerks
EditPackages=ServerPerksP
EditPackages=ServerPerksMut

Если кастомное оружие привязано к ServerPerks, его EditPackages= должен стоять выше. Ошибки часто возникают из-за старого killingfloor.ini, в который при патчах не добавлены новые стандартные пакеты. Порядок стандартных пакетов на момент написания мануала:

EditPackages=Core
EditPackages=Engine
EditPackages=Fire
EditPackages=Editor
EditPackages=UnrealEd
EditPackages=IpDrv
EditPackages=UWeb
EditPackages=GamePlay
EditPackages=UnrealGame
EditPackages=XGame
EditPackages=XInterface
EditPackages=XAdmin
EditPackages=XWebAdmin
EditPackages=GUI2K4
EditPackages=xVoting
EditPackages=UTV2004c
EditPackages=UTV2004s
EditPackages=ROEffects
EditPackages=ROEngine
EditPackages=ROInterface
EditPackages=Old2k4
EditPackages=KFMod
EditPackages=KFChar
EditPackages=KFGui
EditPackages=GoodKarma
EditPackages=KFMutators
EditPackages=KFStoryGame
EditPackages=KFStoryUI
EditPackages=SideShowScript

Чтобы вшить текстуру в .u, пропишите её в коде и положите файл в папку Textures рядом с Classes (пример — ServerPerks 7.10); со звуками аналогично.

Смотрите также: Компиляция через ucc make, Декомпиляция UnrealScript.

Дополнения

Пересборка стандартных .u из исходников 1060

В теме «Исходники KF версии 1060» Dr_Killjoy выложил компилируемые исходники всех .u-файлов, которые идут с KF версии 1060. Порядок такой:

  1. Откройте архив и найдите в нём .bat-файл.
  2. В строке Set Dir2= укажите адрес своей папки с KF (в батнике по умолчанию Set Dir2="C:\KillingFloor").
  3. Запустите батник: он сохраняет стандартные .u (Core.u, Engine.u, KFMod.u, KFChar.u, KFGui.u и остальные) в папку BackupSystem, удаляет их из System и готовит всё к компиляции.
  4. Запустите компиляцию. Если появляются запросы с требованием нажать Y или N, жмите N.

Зачем это нужно: так можно компилировать исходники «с хаком», как сделано, в частности, в мутаторе KillMessages, то есть снимать со стандартных переменных спецификаторы const и protected, убирать с функций final. В KillMessages, судя по всему, менялся и размер статического массива; Dr_Killjoy подозревал, что его можно «растянуть» до 256 элементов, но не проверял. 3xzet использовал хак коллизий, чтобы изменить высоту скина, и написал, что всё работает.

Важные замечания

  • Декомпиляция может нарушать авторские права, если мутатор защищен
  • Всегда используйте легальные инструменты и уважайте права авторов
  • При компиляции убедитесь, что все зависимости доступны
  • Тестируйте скомпилированные мутаторы перед использованием на сервере