Монстры и боссы

Механика хедшотов в Killing Floor: попадание, множители и обезглавливание

«Цельтесь в голову. Критическим хедшотом можно снести мутанту голову: он лишится особых способностей и будет получать больше урона». — подсказка на экране загрузки Killing Floor

Здесь разобрано, как KF1 решает, что попадание было в голову, и что происходит дальше. Основа — вики разработчиков Tripwire и приведённый там код KFMonster.

Скрейк с отображённой коллизией Скрейк с отладочной отрисовкой коллизии: белый цилиндр — цилиндр коллизии, синяя сфера — область головы для проверки хедшотов. Изображение: Tripwire Interactive Wiki.

Кто применяет множитель

Обычно множитель хедшота применяет сам мутант, когда получает урон. Три класса снарядов делают это сами, до вызова TakeDamage() у цели:

  • CrossbowArrow (арбалет)
  • M99Bullet (M99)
  • CrossbuzzsawBlade (Buzzsaw Bow)

Правила определения при этом одинаковые.

Определение попадания

  1. Проверяются только типы урона с bCheckForHeadShots=true. Остальные наносят обычный урон по телу.
  2. Уже обезглавленный мутант проверку пропускает.
  3. Игра проводит линию от точки попадания на цилиндре коллизии и уравнением пересечения прямой и сферы проверяет, проходит ли она через сферу головы. Угол и место, откуда стреляли, значения не имеют, важно только, пересекает ли линия сферу. Любой выстрел сначала попадает в цилиндр, поэтому эту проверку проходит каждый.
  4. У оружия ближнего боя область головы на 25% больше, поэтому хедшоты ножом, мачете и катаной кажутся такими щедрыми.

Выделенный сервер угадывает, где голова

На выделенном сервере обычные анимации мутанта (ходьба, бег, стрейф) не проигрываются на стороне сервера, поэтому точное положение головы серверу неизвестно. Он приближает его:

  • при падении, ходьбе вприсядку и плавании ставит анимацию на её середину;
  • в остальных случаях сдвигает и масштабирует сферу головы двумя значениями, заданными для каждого мутанта:
// KFMonster.uc, IsHeadShot()
HeadLoc = Location + (OnlineHeadshotOffset >> Rotation);
AdditionalScale *= OnlineHeadshotScale;

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

Что даёт хедшот

  1. Урон умножается на HeadShotDamageMult типа урона, в который уже заложен бонус перка к хедшотам (самый известный — у Снайпера).
  2. Результат вычитается из здоровья мутанта и его отдельного здоровья головы.
  3. Если любое из них падает до нуля или ниже, мутант теряет голову.
  4. При подходящем оружии счётчик хедшотов игрока растёт сразу (он идёт в прогресс перка).

После обезглавливания

Безголовый мутант получает уровень интеллекта BRAINS_Retarded: бродит, шатаясь, теряет особые способности (Сирена не кричит, Хаск не стреляет, Флешпаунд не впадает в ярость) и через заданное время умирает сам. Его можно оставить и переключиться на следующую цель, если только он не стоит в нужном команде проходе.

Для мутаторов: проверить, есть ли у монстра голова, можно флагом KFMonster.bDecapitated — если он true, монстр обезглавлен (ответ Dr_Killjoy в теме «Проверка на присутствие головы» на форуме killingfloor.ru).

Практические выводы

  • Цельтесь в сферу головы, а не в лицо модели: считается именно сфера, а в сети она там, где голову видит сервер.
  • Ближний бой прощает неточность: цель на 25% больше делает обезглавливания Берсерком проще, чем кажется.
  • Обезглавленный Скрейк или Флешпаунд теряет способности и умирает по таймеру, так что опасен куда меньше. Обычно следующие выстрелы лучше потратить на другую цель.
  • Советы игроков из темы «Неполадки с Хэдшотами» (форум killingfloor.ru): когда стрелы из арбалета «в глаз» не срабатывали, советовали целиться в шею или чуть выше, либо в область между ртом и носом. Также отмечали, что на сервере с другим пингом хитбоксы ощущаются смещёнными, поэтому стоит запоминать, куда на самом деле надо стрелять.

Вопросы и ответы

Проще ли делать хедшоты оружием ближнего боя в Killing Floor?
Да. Для ударов ближнего боя проверка попадания в голову идёт с областью головы на 25% больше, чем для огнестрела.
Что происходит, когда мутант теряет голову?
Он получает уровень интеллекта BRAINS_Retarded, бродит, шатаясь, без своих особых способностей и через заданное время умирает сам.