Нашествие строггов
Десантник Мэттью Кейн медленно идет по длинному темному коридору. Вдали мерцает слабая лампочка. Кейн замечает чью-то тень, бежит вперед — там строгг. Огромный монстр вскидывает оружие, делает несколько выстрелов и прячется за угол. Солдат следует за ним и оказывается в опасной близости от противника. Строгг со всего маху бьет человека своей когтистой лапой, но Кейн уже готов к такому повороту событий. В невероятном прыжке он уворачивается от удара и точным выстрелом из дробовика разносит на куски голову монстра. Тем временем помещение заполняют все новые и новые строгги…
Примерно так будут вести себя враги в новой модификации для Quake 4 , которую мы с вами сегодня создадим. Ведь один из главных недостатков Q4 — это крайне слабый AI. Туповатые и трусоватые монстры не способны составить серьезной конкуренции хорошему игроку. Разве что на высоких уровнях сложности — но в этом случае они берут не умением, а числом. В нашем моде сила и интеллект врагов будут весьма близки к F.E.A.R.. Кроме того, боевые навыки главного героя будут прокачаны так, чтобы он мог на равных драться с поумневшими тварями.
Матчасть
Отправной пункт — архив pak001.pk4 , находящийся по адресу < каталог игры>\q4base. Это самый обычный ZIP -файл с множеством подкаталогов. Больше всего нас интересует директория \def\ai. Здесь лежат файлы с алгоритмами поведения NPC и монстров (см. файлы с приставками char и monster ).
Тут же размещено несколько файлов общего характера с описанием поведения тех или иных групп персонажей. Файл actor.def содержит общие правила поведения NPC, monster_default.def — характеристики монстров, а attack_base.def — параметры атаки и монстров, и NPC.
Обратите внимание на то, что многие характеристики из actor.def, monster_default.def и attack_base.def вы найдете также в других файлах этой папки, там они заменяют исходные показатели отдельно взятых врагов.
Внимательный осмотр
Для начала изучим характеристики файлов actor.def и monster_default.def. Многие из них дублируются в файлах, посвященных тому или иному монстру. Если вы захотите изменить значение одного из этих параметров для определенного оппонента, сразу обращайтесь к файлу, который соответствует данному монстру. Переходим к разбору основных параметров:
fov — поле зрения противника.
remove_on_death — этот параметр определяет, исчезает ли тело героя сразу после его смерти ( 1 — да, 0 — нет).
burnaway — продолжительность «жизни» трупа (в секундах). Этой характеристикой наделены только те NPC и монстры, в файле которых предыдущего параметра нет вообще (в этом случае игра обращается к исходному значению атрибута в файле actor.def ) или его значение равно нулю. Рекомендуется увеличить значение этой характеристики до 30 — 50. Эту операцию можно (и нужно) проделать с файлами actor.def , monster_harvester_combat.def , monster_makron.def , monster_network_guardian.def , monster_strogg_hover.def и monster_strogg_marine.def. Тогда тела монстров перестанут исчезать непонятно куда. Но учтите, если у вас не очень мощный компьютер, то при значении, близком к 50 , игра может подтормаживать.
attackRange — радиус атаки.
actionTimer_rangedAttack_rate — скорость проведения персонажем дальнобойной атаки.
action_jumpBack_maxRange — максимальное расстояние, которое герой может преодолеть с помощью прыжка назад.
action_meleeAttack_minRange — минимальная дальность атаки при использовании оружия ближнего боя.
action_meleeAttack_maxRange — максимальная дальность атаки оружием ближнего боя.
action_rangedAttack_minRange — минимальная дистанция, которую может покрыть дальнобойная атака.
action_rangedAttack_maxRange — максимальная дистанция, которую может покрыть дальнобойная атака.
action_leapAttack_rate — быстрота нанесения монстром удара в прыжке.
action_crouch_rate — скорость передвижения героя при передвижении на карачках.
fly_offset — максимальная высота полета. Эта и следующая настройки воздействуют только на летающих тварей.
fly_speed — скорость полета.
Промывка мозгов
После редактирования указанных значений враги станут заметно умнее. Проделать описанные далее операции желательно со всеми файлами каталога \def\ai , относящимися к монстрам (напомню, что в имени таких файлов присутствует приставка monster ), в том числе и с базовыми файлами (actor.def и monster_default.def). Всего в игре 33 файла с описанием монстров (но нужные атрибуты есть не во всех).
Давайте внесем следующие изменения. Повысьте в полтора раза значения характеристик attackRange и action_rangedAttack_maxRange. Враги уподобятся снайперам и смогут отстреливать вас с дальней дистанции. Помимо того, многие из них во время атаки больше не будут бездумно бежать на игрока. Увеличьте в 1,2 раза значения показателя action_meleeAttack_maxRange. Противники начнут стрелять эффективнее не только на дальних дистанциях, но и в ближнем бою.
В полтора раза повысьте значения параметров fly_speed , action_jumpBack_maxRange , action_crouch_rate и action_leapAttack_rate. Монстры будут носиться как угорелые (а некоторые даже летать) и благодаря корректировке последней настройки станут наносить удары с молниеносной быстротой. Внезапность нападения — вот главный козырь строггов нового поколения.
Пересадка органов
Теперь обратимся к другому, не менее важному файлу — attack_base.def. В нем задаются атрибуты оружия. Если персонаж или монстр наделен каким-то уникальным видом атаки, ее свойства прописываются в файле, который относится непосредственно к этому субъекту. Каждому оружию соответствует определенный раздел (напомню, что содержимое разделов заключается в фигурные скобки). Например, второй блок ( entityDef damage_railgun_base ) задает урон от рэйлгана, третий ( entityDef damage_bullet_base ) — от стрелкового оружия, четвертый ( entityDef melee_monster_base ) — от ударов конечностями. Начальный раздел файла ( entityDef damage_monster_base ) содержит общие параметры атаки.
В отдельную группу блоков вынесены характеристики снарядов, которыми стреляет оружие ваших врагов. Это разделы entityDef projectile_base (несет в себе общие параметры всех снарядов), entityDef projectile_bullet_base (пуля), entityDef projectile_nail_base (гвоздь), entityDef projectile_blaster_base (бластер), entityDef projectile_grenade_base (граната), entityDef projectile_rocket_base (ракета). По составу эти блоки во многом напоминают перечисленные выше разделы, но есть и уникальные характеристики.
Атака
Вернемся к первой группе разделов файла, которые определяют повреждения от различных видов атаки. Во всех этих блоках вы обнаружите следующие показатели:
damage — ущерб от данного вида атаки.
deathPushMin — минимальное расстояние, на которое может отлететь убитый из этого оружия герой.
deathPushMax — максимальное расстояние.
Что касается второй категории блоков (содержащих, напомню, параметры снарядов), то здесь имеются следующие атрибуты:
velocity (иногда настройка именуется как speed ) — скорость полета снаряда (задается по трем осям координат: X, Y, Z).
angular_velocity — угловая скорость. Данная характеристика есть только у гранат и идентичных им снарядов.
gravity — гравитация полета снаряда.
Повысьте значения показателя damage и velocity, соответственно, в 1,2 и 1,5 раза. В результате огнестрельные атаки врагов станут куда более опасными, чем в оригинале.
В файлах, посвященным конкретным врагам, есть показатели, которых нет в базовом файле. А именно:
health — здоровье персонажа.
minshots — минимальное количество выстрелов, которое противник производит в течение одной атаки. Потом наступает небольшая передышка, чтобы игрок смог убить его.
maxshots — максимальное количество выстрелов.
maxLostVisTime — максимальное время, на которое теряющий бдительность враг может потерять из вида игрока, даже если тот особо не прячется.
look_max — максимальное расстояние, на котором персонаж может разглядеть свою жертву. Или попросту зоркость персонажа (определяется в системе координат X, Y и Z).
shieldDelay — время, которое уходит у монстра на то, чтобы активизировать щит.
Тактические изыски
Четыре приведенных далее атрибута определяют тактику боя разных монстров. Каждая из настроек принимает только два значения: 0 и 1. При нуле монстры этой тактикой не пользуются, при единичке, наоборот, пользуются.
tactical_ranged — тактика обстрела жертвы издали.
tactical_rush — постоянная погоня за обнаруженной целью. При этом монстр старается атаковать в ближнем бою.
tactical_cover — при этой тактике монстр всячески старается прикрывать своих товарищей, если они находятся поблизости.
tactical_hide — монстр прячется.
awareRange — дистанция между вами и монстром, при которой тот начинает чувствовать ваше приближение и готовится к отражению атак или нападению (зависит от того, каким тактическим действиям вы его обучили). Стоит отметить, что это важное качество есть только у нескольких ваших неприятелей.
Уникальные движения
Каждый монстр в Quake 4 имеет несколько параметров атаки. Некоторые из них есть в файле monster_default.def (например, action_meleeAttack_minRange или action_meleeAttack_maxRange ). У многих монстров есть также какие-то свои уникальные движения (в том числе и атакующего характера). Каждое из этих движений описывается несколькими параметрами:
action_X — наличие движения X (в файлах вместо X указывается название движения) в арсенале персонажа.
action_X_minRange — минимальная дистанция, которую «покрывает» движение. Если это какой-то вид атаки (как в большинстве случаев), то здесь определяется ее дальность.
action_X_maxRange — максимальная дистанция.
action_X_rate — быстрота движения.
X_accuracy — меткость данного типа атаки.
Усиление строггов
Приступим к изменению значений — как в файле attack_base.def , так и в тех, что соответствуют определенным монстрам. Во-первых, сделайте врагов более живучими, умножив на 1,2 значения атрибута health у всех строггов. Во-вторых, крайне желательно увеличить на столько же характеристики maxshots , дабы монстры могли атаковать вас более интенсивно. В-третьих, понизьте на единицу значение параметра maxLostVisTime (тварей с этим параметром всего четыре), дабы противники стали более бдительными. В-четвертых, не помешает сделать супостатов более «тактичными». Большинство врагов желательно обучить минимум трем тактическим установкам. Для этого тройке параметров с названиями, начинающимися со слова tactical , поставьте в значение единицу. Пусть это будут различные вариации для разных тварей: у одних задействуйте первые три тактики, у других — последние три (можно использовать и другие комбинации). Тогда у ваших соперников появится свобода выбора поведения. Понятно, что какие-то из них будут преобладать в тот или иной момент игры. Возможно, даже монстры не всегда будут выбирать наиболее правильную и подходящую в тот или иной момент тактику. Но чего у новых врагов не отнять — так это непредсказуемости. Вы не будете знать наверняка, что они выкинут в следующий раз.
Кроме того, игрокам высокого класса рекомендуется сделать коронные атаки различных строггов более эффективными, редактируя значения атрибутов с именами, начинающимися со слова action. Многие враги не наделены подобными движениями, соответствующие характеристики у них отсутствуют. У тех монстров, у которых данный параметр присутствует, атрибуты action_X и X_accuracy лучше повысить в 1,2 раза. Данная операция не является обязательной, так как ранее мы уже увеличили радиус стандартных атак монстров.
Настоящие профи могут обратиться и к другим настройкам AI, которые остались без внимания, и подкорректировать их значения, дабы еще усложнить себе жизнь.
Герой-супермен
После правки файлов из папки \def\ai ваши враги стали сильнее. Если вы не относите себя к геймерам экстра-класса, вам понадобится также улучшить боевые навыки главного героя. В этом вам поможет файл player.def (он хранит в себе игровые параметры, касающиеся непосредственно Мэттью Кейна) из каталога \def архива pak001.pk4. Все интересующие нас параметры собраны в блоке entityDef player_marine.
Немного увеличьте высоту прыжка игрока, присвоив показателю pm_jumpheight значение 55. Отныне вам будет значительно легче уворачиваться от атак снизу и спасаться от взрывов, отпрыгивая в сторону. Величину шага ( pm_stepsize ) тоже чуть-чуть поднимем — до отметки 20. Это поможет умелым игрокам избегать выстрелов противников, ведь стрейфиться теперь можно на более далекое расстояние. Развивая тему скорости передвижения игрока, подправим значения характеристик pm_speed (определяет скорость, которую герой развивает на бегу), pm_walkspeed (скорость ходьбы), pm_crouchspeed (быстрота передвижения в приседе) и pm_noclipspeed (скорость бега при отсутствии в руках пушки). В оригинальной игре скорости обычной ходьбы и ходьбы в приседе почему-то равны. Исправим это недоразумение, заодно сделав главгероя более быстрым. Для этого первому атрибуту пропишите значение 180 , второму — 100 , третьему — 90 , четвертому — 275. Корректировка этих параметров, как и в предыдущих двух случаях, придаст главному герою увертливости.
Следующие две наши жертвы — настройки pm_minviewpitch и pm_maxviewpitch , определяющие, соответственно, как высоко Кейн может поднять голову и как низко ее опустить. И здесь мы опять видим странную недоработку со стороны разработчиков. В реальной жизни человек, нагнувшись, может худо-бедно разглядеть, что делается у него за спиной. В игре такой возможности нет… до тех пор, пока вы не замените значения этих параметров на -120 и 120.
Сделаем нашего героя более выносливым, повысив значения характеристик pm_stamina (время, в течение которого игрок может бегать без остановки) и pm_staminarate (скорость восстановления сил), соответственно, до 15 и 0,85.
Наконец, добавим Кейну живучести. В этом вам поможет правка показателей health (стартовое здоровье игрока), maxhealth (максимальное количество жизней) и maxarmor (максимальное количество брони). Первому и второму из них пропишите числа 150 , последнему — 120.
Новому главному герою по плечу даже самые сильные и разумные монстры.
* * *
Что же мы имеем в итоге? Сильные, живучие, ловкие, быстрые, увертливые монстры на фоне более динамичного геймплея. Враги теперь практически ни в чем не уступают игроку. Ко всему прочему у них появилась свобода выбора. Вы никогда не знаете заранее, как атакует вас тот или иной противник в следующий раз. Да, сражаться с такими монстрами очень непросто. Но как, черт возьми, приятно воевать с почти равными себе соперниками!