Mordhau Guides 1.1.1 уже доступна — руководства стабильны, а исправления всегда приветствуются.

Skip to content

Blueprints ​

Blueprint: это визуальный скриптинг Unreal: класс, который вы собираете в графе, а не пишете на C++. В редакторе Mordhau вы редко создаёте его с нуля. Вы наследуетесь от того, что игра уже поставляет, и меняете нужную часть.

Модель, которую стоит держать в голове, прежде чем что-то открывать:

  • Классы C++: написаны Triternion и скомпилированы в игру. MordhauGameMode, ControlPoint, MordhauPlayerStart, MordhauWeapon. Их нельзя редактировать.
  • Ассеты Blueprint: лежат в /Game/Mordhau/Blueprints/… в Content Browser, и именно их используют официальные карты и режимы. Называются BP_Что-то.
  • Ваши Blueprint: подклассы их классов, лежащие в вашей папке мода. Это всё, что вы создаёте.

Держать свою работу в своей папке, не про аккуратность. Правки в Blueprint игры «на месте» дают мод, который конфликтует с каждым другим модом, поступившим так же.

WARNING

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

Игровой режим: первый Blueprint, к которому вы прикоснётесь ​

Каждый режим, это пара: GameMode, который держит правила и работает на сервере, и GameState, который несёт то, что должны видеть все клиенты: таймер, счёт, состояние целей.

РежимBlueprint, в /Game/Mordhau/Blueprints/GameModes/
DeathmatchBP_DeathmatchGameMode + BP_DeathmatchGameState
Team DeathmatchBP_TeamDeathmatchGameMode + BP_TeamDeathmatchGameState
SkirmishBP_SkirmishGameMode + BP_SkirmishGameState
FrontlineBattle/BP_FrontlineGameMode
HordeHorde/BP_HordeGameMode

Остальные следуют тому же правилу именования BP_<Режим>GameMode / BP_<Режим>GameState, лучше посмотреть папку, чем угадывать.

Это те же классы, которые администратор сервера правит в Game.ini, поэтому строка [/Game/Mordhau/Blueprints/GameModes/BP_DeathmatchGameMode.BP_DeathmatchGameMode_C] покажется знакомой, если вы читали руководство по выделенному серверу. Ключи конфига и свойства Blueprint, это одни и те же свойства.

Что достаётся в наследство от MordhauGameMode ​

Какой бы режим вы ни наследовали, всё это идёт вместе с ним. Это те рычаги, которые пользовательские режимы действительно дёргают:

СвойствоЭффект
PlayerRespawnTime, bPlayersSpawnInWaves, bUsesSlowPlayerSpawningТайминг возрождения и волновое ли оно
SpawnProtectionDurationОкно неуязвимости после появления
DamageFactor, TeamDamageFactor, TeamDamageFlinchГлобальные множители урона, включая дружественный огонь
bDisableDamage, bDisableStaminaОтключение боевых систем — основа большинства небоевых режимов
bPlayersDropAllGearOnDeath, bEquipmentDoesNotDespawn, OverrideEquipmentDespawnTimeПоведение выпадающего снаряжения
KillScoreChange, KillTeamScoreChange, TeamKillScoreChange, AssistScoreFactor, bIsScoringDisabledНачисление очков
AutoKickOnTeamKillAmountНаказание за тимкиллы
HorseRespawnTime, CatapultRespawnTime, BallistaRespawnTimeВозрождение техники и осадных орудий
MapRotation, MapVoteMapsЧто идёт следующим после матча

И функции с событиями, которые стоит знать,, это точки подключения своей логики:

  • IsSpawnpointAllowed(PlayerStart, Controller) и GetSpawnpointPreference(PlayerStart, Controller): выбор точки появления, в паре с событиями MordhauPlayerStart
  • OnAfterLogin, OnBeforeLogout: вход и выход игроков
  • OnMessageBroadcasted, OnRconStringCommand: чат и RCON, полезно, если режим должен реагировать на команды администратора
  • GetNextMap, GetNextMaps, VoteLevel: ротация и голосование

Подуровни: по уровню на режим ​

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

ПрефиксРежим
BR_Battle Royale
FFA_Deathmatch
FL_Frontline
HRD_Horde
INV_Invasion
SG_Sword Game
SKM_Skirmish
TDM_Team Deathmatch

Как это выглядит в редакторе:

  1. Соберите саму карту как обычный уровень, геометрия, освещение, пропы.
  2. Создайте по пустому уровню на режим, префикс первым: SKM_CabbageLand.
  3. Откройте его, откройте окно Levels и переключите метод стриминга постоянного уровня на Always Loaded. Он сбрасывается обратно на Blueprint-only с каждым новым подуровнем, так что делайте это каждый раз.
  4. Add Existing → ваша базовая карта, чтобы подуровень подгружал геометрию под собой.
  5. Дважды щёлкните по постоянному уровню, чтобы он снова стал синим (синий, то, что вы редактируете), и заблокируйте базовый уровень, чтобы не править его случайно.
  6. Разместите игровой режим этого режима, точки появления и цели.

После этого changemap SKM_CabbageLand загрузит его.

Именно из-за этой структуры предупреждение о размещении настолько важно: цели, положенные в базовый уровень вместо подуровня режима, появятся сразу во всех режимах.

TIP

Для режимов вне этого списка префиксов общественный MetaMod расширяет то, что карта может поддерживать. Порядок действий выше сжат из Mordhau Modding Wiki, где есть скриншоты.

Метаданные: как игра узнаёт, что такое ваша карта ​

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

MapMetaData

СвойствоЧто содержит
Name, DescriptionЧто игроки видят в браузере
BaseMapБазовый уровень
GameModeMapsПодуровни режимов, принадлежащие этой карте
Thumbnail, BackgroundImages, ForegroundImagesГрафика меню и экрана загрузки
TipsПодсказки на экране загрузки

GameModeMetadata

СвойствоЧто содержит
PrefixПрефикс подуровня из таблицы выше — именно здесь эта договорённость и задаётся
Name, Description, Thumbnail, TipsОформление режима

Сделать по-настоящему новый режим, значит завести подкласс GameModeMetadata со своим префиксом рядом со своими GameMode и GameState.

Level Blueprint ​

Он есть у каждого уровня, и в Mordhau наследуется от MordhauLevelScriptActor. Это правильное место для скриптинга, который принадлежит только этой карте: дверь, открывающаяся на определённом счёте, мост, рушащийся после падения точки.

Здесь же запускаются системы уровня карты. Например, общественная система случайных точек появления ставится так: контроллер перетаскивается в Level Blueprint и подключается к Event BeginPlay.

Всё, что должно переиспользоваться между картами, лучше делать полноценным классом Blueprint: от Level Blueprint нельзя наследоваться.

Оружие, снаряжение и боты ​

ЧтоС чего начать
ПерсонажиBP_MordhauCharacter, в /Game/Mordhau/Blueprints/Characters/
ОружиеMordhauWeapon и MordhauEquipment, а также MordhauShield, FistsWeapon, KickWeapon
Дальний бойMordhauProjectile и Quiver
Тайминги атакAttackMotion и классы движений — у windup, release, финта, парирования и рипоста есть свои
АнимацияMeleeWeaponAnimationProfile — тот AnimationProfile, на который ссылается оружие
БотыBotProfile и BotBehaviorProfile, а узлы дерева поведения — BTTask_MeleeAttack, BTTask_MeleeDefend, BTTask_RangedAttack и им подобные

Своё оружие после дублирования существующего (во многом упражнение с числами: windup, release, массивы урона по типам брони, расход выносливости, отбрасывание. Страница переменных оружия в Mordhau Modding Wiki) лучший письменный справочник по тому, что делает каждая из них, и её стоит прочитать до того, как трогать хоть одно значение.

Если выучить только пять ​

  1. Ваш Blueprint игрового режима: унаследованный от ближайшего официального режима
  2. MordhauPlayerStart: нет точек появления, нет карты
  3. ControlPoint и его знамёна: весь слой целей Frontline и Invasion
  4. MapMetaData и GameModeMetadata: как карта представляет себя
  5. Level Blueprint: для разовой логики, которая делает карту вашей

Помогите дописать эту страницу ​

Полного руководства по моддингу Mordhau никто так и не написал, и эта страница, карта местности, а не тот пошаговый разбор, которым ей стоило бы быть. Если вы выпускали режим или карту, то, что вы знаете, какие свойства действительно важны, что ломается при упаковке, что делают официальные карты неочевидного, это ровно то, чего не хватает. Откройте issue или скиньте черновые заметки в Discord, оформление за нами.