статья
Все цвета Far Cry, часть 2
В первой статье цикла, опубликованной в предыдущем номере “Игромании”, мы переозвучили игру, перерисовали интерфейс, научились заменять оригинальную музыку любыми композициями. Уже этого достаточно, чтобы создать небольшой мод. Но чтобы сделать совершенно новую игру, надо двигаться дальше. Сегодня мы полностью переделаем оружие, подправим характеристики различных игровых объектов (и даже создадим новые) и научим различные виды оружия стрелять так, как они никогда не стреляли...

    Ценные вещи
    Еще одна нужная нам папка архива Scripts.pak — \Scripts\Default\Entities\Pickups — несет в себе lua-файлы с характеристиками “призов”. Все находящиеся в этом каталоге файлы можно разделить на следующие категории. Файлы с именем AmmoX.lua соответствуют комплектам патронов к оружию, имя которого прописано вместо X: файлы KeyCardX.lua, где X — число от 0 до 2, соответствуют ключам-картам: файлы же с именем PickupY.lua — различным видам вооружения и снаряжения (PickupBinoculars.lua — бинокль, PickupCompass.lua — компас, PickupExplo.lua — взрывчатка, PickupFlashlight.lua — фонарь, PickupHeatVisionGoggles.lua — очки ночного виденья), названия которых указываются вместо Y.
    Кроме того, в директории \Pickups имеются файлы Armor.lua (отводится под параметры брони) и health.lua (аптечка), а также базовый файл BasePickup.lua, содержащий ряд общих для всех “призов” атрибутов (все они помещены в раздел Properties). К ним и обратимся.
    RespawnTime — время, отсчитываемое после того, как вы подобрали любой “приз”, и через которое вещичка вновь появляется на том же месте, откуда вы взяли ее ранее.
    FadeTime — время, через которое “приз” исчезает с лица земли. В финальной версии игры значения этого и предыдущего атрибута равны нулю, поэтому эти настройки никак не задействованы. Но вы можете это легко исправить, установив для них положительные числа.
    bPlayerOnly — характеристика указывает на то, могут ли ваши противники подбирать “призы”. 1 — да, 0 — нет. Рекомендую поставить сюда единицу — так будет справедливее и реалистичнее. Теперь ваши враги, “наступив” на полезную вещицу, смогут немного поправить свое положение. Но, к сожалению, делать это умышленно они не обучены разработчиками.
    bShowFloatingIcon — появление (при значении 1) на экране соответствующего значка при подборе той или иной вещи.
    Теперь перейдем к разбору файлов из трех обозначенных выше категорий. Все главные параметры “приза” сосредоточены в блоке local params. Представляю их вашему вниманию.
    model — модель “приза”.
    default_amount — количественная характеристика “приза”, или, иными словами, число единиц, которое прибавляется к вашему здоровью, броне или боеприпасам, когда вы подбираете этот предмет.
    Availability — доступность вещи. 0 — наличие “приза” при игре на всех уровнях сложности, 1 — только на легком (Easy), 2 — на легком и среднем (Medium), 3 — легком, среднем и сложном (Challenging), 4 — на всех, кроме самого сложного (Realistic). В финальном релизе игры все “призы” имеют здесь в качестве значения ноль, но вы можете усложнить игру, ставя сюда некоторым менее важным видам снаряжения (например, броне) числа от 1 до 4.
    sound — звук, который раздается при подборе вами этой вещички. Здесь, а также при обращении к любому другому звуковому файлу (он должен иметь формат wav) вы должны указать его путь внутри архива Sounds.pak.
    floating_icon — значок, который отображается на экране при подборе вами этого “приза” (только при значении 1 у параметра bShowFloatingIcon). В значении атрибута требуется указать путь картинки, которая при этом должна лежать в архиве Objects.pak.
    Увеличение или уменьшение значений атрибутов Availability и default_amount (особенно у аптечки, брони и коробок с патронами) — способ повлиять на сложность игры. Причем вы можете как упростить игровой процесс, так и усложнить его. В поднятии планки сложности на новый уровень вам также поможет придание настройке bPlayerOnly значения 1 и увеличение числа, соответствующего показателю FadeTime. Если вы начинающий игрок, то логично сделать игру немного легче — достаточно придать характеристике RespawnTime положительное значение (но не слишком маленькое, а то играть будет очень уж легко).

    Лодки и машины
    В архиве Scripts.pak вы также найдете каталог \Scripts\Default\Entities\Vehicles, посвященный транспортным средствам, которыми может управлять Джек. В папке лежит четыре полезных нам файла: boat.lua (соответствует катеру), boatpatrol.lua (патрульный катер), fwdvehicle.lua (джип Hummer), Buggy.lua (джип типа багги). Многие из здешних параметров позаимствованы из файлов cargochopper.lua, gunship.lua и HeliCommon.lua, о которых говорилось выше — такие характеристики мы опустим. А вот что нового могут предложить местные lua-файлы.
    fileModelDead — модель взорванного транспортного средства.
    ammoMG — начальное количество патронов для пулемета, установленного на данное средство передвижения.
    ammoRL — начальное число ракет.
    fOnCollideGroundDamage — урон, наносимый данному транспортному средству, когда оно врезается на скорости в землю (у джипов это происходит, как правило, при падении с большой высоты) или возвышенность.
    fOnCollideVehicleDamage — повреждение, которое получает данный вид транспорта при столкновении на скорости с другим средством передвижения. На мой взгляд, значения этой и предыдущей характеристик следует немного повысить, а то слишком уж невелик ущерб лодке или машине от разного рода столкновений, что, понятное дело, идет не на пользу реалистичности.
    У катеров имеется подраздел boat_params, набитый параметрами, присущими только им. Вот эти характеристики.
    Speedv — максимальная скорость, которую может развивать лодка.
    Turn — максимальная скорость при повороте катера.
    TurnMin — минимальная скорость при повороте.
    fMass — масса катера. Влияет на прыгучесть и в меньшей степени на скорость транспортного средства.
    Gravity — гравитация прыжка лодки.
    CameraDist — расстояние от камеры до катера при виде от третьего лица. Меняя значение атрибута, вы можете установить камеру так, как нравится вам. Лично мне показалось разумным немного отдалить ее от лодки, чтобы удобнее было стрелять (см. рис. 10).
    Для машин предусмотрены свои уникальные показатели. К ним относятся следующие настройки.
    waterDepth — максимальная глубина, на которой может находиться и ездить в воде джип. Поставьте сюда число побольше (в районе 1000), и вы сможете свободно колесить по морскому дну (см. рис. 11)!
    Подраздел CarDef насыщен у машин следующими показателями.
    engine_power — мощность двигателя джипа.
    engine_minRPM — максимальное количество оборотов в минуту, которое совершает двигатель машины.
    engine_maxrpm — максимальное количество оборотов в минуту двигателя. От значения этого и двух предыдущих показателей зависит скорость, которую способен разогнать джип.
    max_braking_friction — быстрота торможения машины с помощью обычного тормоза.
    handbraking_value — то же самое для ручного тормоза.
    Все эти параметры окажут вам неоценимую помощь в глобальном изменении транспортных средств. Лично я добавил быстроты и прыгучести всем вида транспорта. Какой русский не любит быстрой езды!

    Гранаты, пули, два ствола
    Теперь переходим к самой интересной части нашего сегодняшнего “вскрытия” — изменению оригинального оружия и созданию нового. Причем редактированию поддается не только вооружение игрока, но и пушки его противников. Как показало исследование игровой директории, оружейные файлы (а также те, что содержат параметры снаряжения вашего персонажа) расположились в директории \Scripts\Default\Entities\Weapons архива Scripts.pak. Все их можно распределить по четырем группам в зависимости от назначения и структуры: файлы с атрибутами непосредственно самих стволов, файлы с параметрами снарядов, которыми стреляет тот или иной вид вооружения, файлы с характеристиками снаряжения и файлы общего характера, содержащие параметры оружия определенного класса. К первой группе относятся файлы с именем вида N.lua, где N — сокращенное название оружия. Наименования большинства орудий убийства вы уже знаете по значению параметра equipEquipment из lua-файлов, лежащих в каталоге \Scripts\Default\Entities\Ai. Дабы не повторяться, приведу лишь имена файлов, соответствующих тем видам вооружения и снаряжения, которые мы еще не затрагивали: Machete.lua — мачете, Mortar.lua — мортира,
MG.lua — пулемет, Wrench.lua — разводной ключ при использовании его в качестве оружия. Кроме того, сюда же можно отнести файлы, имена которых начинаются со слов Mounted (эти файлы соответствуют стационарному оружию) и VehicleMounted (оружие, установленное на различные транспортные средства).
    Вторая категория файлов представлена следующими образцами: Grenade.lua — обычная граната, HandGrenade.lua — ручная граната, FlashbangGrenade — ослепительная граната, SmokeGrenade.lua — дымовая граната (все остальные файлы, которые имеют в концовке имени слово Grenade, также соответствуют различным типам гранат), Rocket.lua — ракета, SniperBullet.lua — пуля для снайперской винтовки, MortarShell.lua — ядро для мортиры, а также файлы с названием, начинающимся с сокращения Proj.
    Говоря о файлах с характеристиками снаряжения, необходимо назвать следующие из них: Binoculars.lua — бинокль, EngineerTool.lua — разводной ключ, MedicTool.lua — переносная аптечка, ScoutTool.lua — рация.
    Наконец, базовые оружейные файлы имеют следующее представительство: AIWeapons.lua — краткие характеристики вооружения ваших врагов, BasicWeapon.lua — общие для всех видов оружия параметры, WeaponsParams.lua — основные атрибуты различных орудий убийства, FTBSniping.lua — параметры прицельной стрельбы (только для оружия со снайперским прицелом).
    Первым делом заглянем в файл BasicWeapon.lua. В главном блоке файла имеется подраздел DefaultFireParms, несущий в себе следующие параметры.
    shoot_underwater — возможность стрелять под водой (1 — имеется, 0 — нет). По замыслу авторов, ни один вид вооружения ею не наделен, но вы легко можете это исправить, поставив сюда единицу.
    allow_hold_breath — возможность задерживать дыхание при прицельной стрельбе из любого оружия (1 — имеется, 0 — нет). Это используется для уменьшения тряски прицела.
    sprint_penalty — понижение меткости в случае, когда стрельба из оружия совершается на бегу. Заданное здесь число умножается на меткость непосредственно самого оружия, отчего она, понятное дело, корректируется.
    accuracy_modifier_prone — прибавка к точности стрельбы из данного оружия при ведении стрельбы лежа.
    accuracy_modifier_crouch — бонус к меткости при стрельбе сидя.
    recoil_modifier_standing — умножитель силы отдачи при стрельбе стоя.
    recoil_modifier_crouch — умножитель силы отдачи при стрельбе сидя.
    recoil_modifier_prone — при стрельбе лежа.

    Пуля-дура
    Далее изучим файлы с характеристиками снарядов. В основном разделе таких файлов можно найти лишь несколько занятных настроек. Они перед вами.
    meters_per_second — скорость полета снаряда.
    ExplosionTimer — время, через которое снаряд взрывается после вылета из ствола.
    explodeOnContact — взрыв снаряда при соприкосновении с какой-либо поверхностью (1 — присутствует, 0 — нет).
    bPhysicalized — действие физических законов на снаряд (1 — имеется, nil — нет). Обратите внимание на то, что у всех видов вооружения здесь стоит “nil”, что явно не добавляет игре реалистичности. Правда, это легко исправить, определив значение атрибута как “1”. Но имейте в виду, что теперь при стрельбе вам придется учитывать различные физические законы (что практически нереально), так что не удивляйтесь, если пуля пойдет по несколько непривычной траектории. Впрочем, думаю, вы привыкнете к этому со временем.
    У разрывных снарядов наличествует также подраздел ExplosionParams, набитый следующими атрибутами.
    damage — повреждение от взрыва.
    rmin — минимальный радиус взрыва.
    rmax — максимальный радиус.
    radius — обычный радиус.
    DeafnessRadius — радиус зоны вокруг взрыва, на которую накладывается эффект оглушения находящихся в ней субъектов.
    DeafnessTime — продолжительность эффекта оглушения. Повысив значения этого и остальных параметров взрывов, вы сделаете последние куда более эффектными и зрелищными. Но не переусердствуйте, иначе взрывы будут слишком уж неестественными!
    deform_terrain — этот показатель определяет, остается ли след на земле в результате взрыва снаряда (1 — да, 0 — нет).

    Оружие в характеристиках
    Итак, настал черед самых важных файлов директории \Weapons — тех, что соответствуют какому-то одному орудию убийства. В основном блоке таких файлов вы обнаружите следующие параметры.
    name — название оружия.
    object — модель оружия, которую вы видите на экране, когда ствол лежит без дела.
    character — модель ствола, использующаяся, когда вы держите его в руках.
    no_zoom — возможность прицеливания для данного орудия убийства. 0 — есть, 1 — нет.
    ZoomActive — использование режима прицельной стрельбы при переключении на данное орудие убийства. Если вы поставите сюда единицу, ствол будет сразу же находиться в этом режиме всякий раз, когда вы на него переключаетесь. Если вам это не нужно, ставьте ноль.
    MaxZoomSteps — количество шагов по увеличению изображения (зумированию) в прицеле. Здесь следует пояснить, что прицелы некоторых видов вооружения (в частности, снайперской винтовки и ракетницы) увеличивают изображение по шагам (у таких видов оружия здесь стоят значения больше 1), то есть с каждым нажатием вами соответствующей клавиши приближение растет в определенное число раз (оно определяется следующим показателем).
    ZoomSteps — число раз, в которое каждый шаг увеличивает изображение в прицеле. Значение атрибута должно выглядеть следующим образом: { X1, X2, X3, ... }, где X1, X2, X3 и т.д. — число раз, в которое соответствующий шаг приближает цель. Таким образом, число шагов будет равно количеству указанных здесь чисел. Например, сочетание { 2, 4, 6 } означает, что при первом шаге увеличение будет происходить в два раза, при втором — в четыре раза и при третьем — в шесть. Повышая значения этого и предыдущего показателя у большинства огнестрельных видов вооружения, вы можете сделать своеобразный снайперский мод, в котором каждый ствол имеет прицел с неплохим зумом, а игроки должны действовать максимально осторожно.
    ZoomSound — звук, сопровождающий процесс зумирования.
    ZoomNoSway — покачивания прицела (при прицельной стрельбе). 0 — имеются, 1 — нет. Если значение равно нулю или параметр вообще отсутствует, у оружия наличествует следующая характеристика.
    Sway — сила покачиваний прицела.
    PlayerSlowDown — понижение скорости передвижения игрока, происходящее, когда тот держит в руках данный вид вооружения. Точнее сказать, замедление имеет место быть только при значении, меньшем единицы, которым и наделены практически все игровые виды оружия. Работает же параметр следующим образом. На указанное здесь число умножается обычная скорость передвижения игрока, отчего последняя и меняется. Очевидно, что при единице скорость игрока остается неизменной.
    ActivateSound — звуковой эффект, который вы слышите при выборе этого орудия убийства.
    HasCrosshair — наличие у оружия обычного прицела в форме крестика (1 — имеется, 0 — нет).
    draw_thirdperson — использование вида от третьего лица в случае, когда игрок вооружен данным оружием (1 — применяется, 0 — нет). Этот параметр предоставляет вам великолепную возможность поиграть с видом сзади, которой грех не воспользоваться!
    switch_on_empty_ammo — смена этого вида вооружения на следующее, когда у первого заканчиваются патроны (1 — используется, 0 — нет).
    Самый же содержательный подраздел файла именуется FireParams и характеризует процесс стрельбы из указанного ствола. При этом содержимое этого блока в ряде файлов — тех, что соответствуют оружию с несколькими режимами стрельбы (сюда можно отнести винтовки M4, AG36, OICW и несколько других подобных орудий убийства) — распадается на два основных безымянных блока, первый из которых начинается сразу после открытия подраздела FireParams, а второй — после окончания первого. В этом случае каждый такой блок соответствует определенному виду атаки. Перед всеми разделами, кроме первого, имеется комментарий с названием режима стрельбы (например, если над параметрами красуется надпись SINGLE FIRE, то это означает, что они характеризуют режим одиночной стрельбы у автомата). Набор параметров во всех блоках, соответствующих тому или иному режиму стрельбы, практически идентичен и выглядит следующим образом.
    AmmoType — тип патронов, используемый данным оружием. Таких типов практически столько же, сколько и самих видов вооружения.
    projectile_class — снаряд, которым стреляет ствол. Во всех случаях значения этого и предыдущего параметров совпадают.
    reload_time — время, уходящее на перезарядку ствола.
    fire_rate — временной промежуток между двумя совершенными подряд выстрелами (или очередями, если это автомат или пулемет), или, проще говоря, скорострельность.
    distance — максимальное расстояние, которое может пролететь снаряд этого оружия, или попросту дальнобойность последнего.
    damage — урон, наносимый снарядом данного оружия.
    damage_drop_per_meter — уменьшение повреждения с каждым метром, который пролетает снаряд, пущенный из этого ствола.
    bullet_per_shot — число патронов, которое вылетает из ствола оружия при одном выстреле.
    bullets_per_clip — максимальное количество патронов, которое может поместиться в обойму ствола.
    FModeActivationTime — время, которое требуется для перехода в указанный режим стрельбы.
    iImpactForceMul — отклонение от первоначальной траектории полета снаряда.
    iImpactForceMulFinal — финальное отклонение от первоначальной траектории полета снаряда.
    Помимо вышеперечисленных параметров, блок, относящийся к тому или иному типу атаки, включает в себя несколько подразделов, в том числе FireSoundsStereo и FireSounds, в первом из которых прописаны звуки стрельбы из ствола (а точнее, их пути внутри архива Sounds.pak) в stereo-формате, а во втором — в mono.
    После же закрытия основного раздела файла следует небольшая часть файла, посвященная анимации и открывающаяся комментарием “ANIMTABLE”. За ним идет пустой
блок SniperRifle.anim_table, который нас нисколько не интересует, а еще ниже — разделы с именами SniperRifle.anim_table[X], задающие анимацию для режима стрельбы, номер которого указывается вместо X (при этом каждый блок анимации альтернативного вида атаки сопровождается комментарием с названием последнего). В любом таком блоке имеется ряд подразделов, в каждом из которых перечисляются файлы с анимацией для того или иного действия персонажа, вооруженного данным оружием. Точнее сказать, здесь размещаются краткие имена файлов (полные аналоги вы найдете в cal-файле, расположенном в архиве Objects.pak по адресу: \Objects\Weapons\<Каталог оружия>), взятые в кавычки. Приведу названия местных подразделов: idle — анимация для состояния бездействия персонажа, activate — выбор данного орудия убийства, reload — перезарядка, fire — стрельба, fidget — тряска оружия на бегу, swim — плавание с этим стволом в руке.

    Огонь!
    Следующий этап в изменении оружия — редактирование файла WeaponsParams.lua. Открывает файл раздел MaxAmmo, параметры в котором определяют максимальное число патронов к тому или иному стволу. Далее следует гигантский блок под названием WeaponsParams, каждый подраздел которого содержит атрибуты определенного оружия и именуется так же, как и последнее. Если у ствола имеется несколько режимов стрельбы, то все они имеют свои блоки (такие блоки никак не озаглавлены, зато над ними красуются именующие их комментарии) внутри таких подразделов (подобная структура используется и в разобранных выше lua-файлах, соответствующих какому-то одному виду оружия), следующие один за другим.
    Перед тем как перейти непосредственно к изменению разместившихся в файле настроек, следует сказать, что часть параметров из lua-файлов, соответствующих определенному виду оружия, есть и здесь. На таких параметрах мы останавливаться не будем, но учтите, что если один и тот же показатель встречается и здесь, и там, то первоочередное значение будет иметь характеристика из индивидуального оружейного файла. Итак, вот что может нам предложить каждый блок файла, отводящийся под характеристики определенного вида стрельбы того или иного орудия убийства.
    fire_mode_type — тип режима атаки. FireMode_Instant — стрельба пулями, FireMode_Projectile — стрельба разрывными снарядами, FireMode_Melee — удар.
    damage_type — тип урона, наносимого данным видом вооружения.
    aim_recoil_modifier — умножитель силы отдачи от стрельбы из данного оружия. Значение этого параметра умножается на число, заключенное между значениями атрибутов min_recoil и max_recoil (о них — чуть позже), из чего и складывается реальная отдача.
    aim_improvement — умножитель точности стрельбы из этого ствола (изменяет начальную меткость, которая задается настройками min_accuracy и
max_accuracy).
    min_accuracy — минимальная точность стрельбы из данного типа оружия. Значения этого и следующего атрибута должны принадлежать интервалу от 0 до 1.
    max_accuracy — максимальная точность стрельбы.
    min_recoil — минимальная отдача от стрельбы из этого ствола.
    max_recoil — максимальная отдача. Думаю, вы уже заметили, что отдача от стрельбы из игровых средств уничтожения практически не ощущается. Посему лично мне кажется правильным слегка увеличить у всех их (а в особенности — у тяжелого оружия) значения этого и предыдущего показателей.
    hud_icon — значок, изображающийся в правой нижней части экрана героя при использовании данного режима стрельбы. Возможны следующие варианты (значение параметра должно быть заключено в кавычки): auto — автоматический режим, single — одиночный, rocket — стрельба ракетами, grenade — гранатами, melee — использование ствола в рукопашном бою. В финальном релизе игры последняя функция не реализована ни у одного орудия убийства, но, вероятно, в ранних версиях она использовалась для удара прикладом пистолета. Чуть позже мы поговорим о том, как вернуть пистолету этот немаловажный вид атаки, а также снабдить им и другие стволы.
    Также у некоторых орудий убийства вы можете встретить здесь знакомые нам по файлу BasicWeapon.lua параметры: accuracy_modifier_prone, accuracy_modifier_crouch, recoil_modifier_standing, allow_hold_breath, accuracy_decay_on_run (этот атрибут именуется в файле BasicWeapon.lua как sprint_penalty).

    Новые режимы стрельбы
    Думаю, вы заметили, что лишь очень немногие орудия убийства в игре имеют два режима стрельбы (а большее число видов атаки вообще не закреплено ни за одной пушкой). Правда, исправить это совсем не сложно. Чтобы добавить любому виду вооружения новый вид атаки, нужно проделать следующее.
    Сначала определитесь, каким именно типом стрельбы вы хотите наделить оружие. В зависимости от этого найдите у другого ствола режим, наиболее похожий на тот, что вы хотите добавить в игру. В нашем случае мы присвоим пистолету (напомню, что ему соответствует файл Falcon.lua) возможность нанесения удара прикладом.
    Из lua-файла с интересующим вас видом атаки (мы будем использовать файл мачете — Machete.lua) полностью скопируйте подраздел, соответствующий подходящему режиму стрельбы (в файле Machete.lua прописан лишь один тип атаки, так что копируйте весь блок FireParams, за исключением строки с его именем и закрывающих его скобки с запятой). Будьте внимательны при копировании: первым делом посмотрите, где начало и конец блока (напомню, что начинается он с символа “{” и заканчивается знаком “}” и следующей за ним запятой), а уж потом копируйте в буфер последний со всеми его внутренними
подразделами. Затем сделайте вставку из буфера в подраздел FireParams файла ствола, который вы наделяете новым типом атаки (Falcon.lua), в то место, где заканчивается блок одного из режимов стрельбы (сразу после символа “}” и запятой). В новоиспеченном блоке подправьте значения параметров таким образом, чтобы новый вид атаки по своим характеристикам максимально полно реализовывал вашу задумку. В случае с ударом прикладом пистолета стоит уменьшить наносимый оружием урон (параметр Damage), а также скорость нанесения удара (fire_rate). Кроме того, если вы наделяете ствол нетипичным для него типом атаки, неплохо бы также заменить звуки стрельбы, указывая пути новых эффектов в подразделах FireSounds и FireSoundsStereo создаваемого режима стрельбы.
    Теперь проделайте подобную операцию с файлом WeaponsParams.lua: скопируйте весь раздел (в том числе и завершающее его сочетание символов “},”), содержащий параметры интересующего вас режима стрельбы какого-либо оружия (в нашем случае это оружие — мачете, которому соответствует раздел Machete и которое имеет в нем лишь один подраздел с комментарием SINGLE FIRE), в блок ствола, который вы апгрейдите (Falcon). Вставку подраздела производите сразу после любого блока, соответствующего тому или иному режиму стрельбы. Наконец, подправьте значения атрибутов во вставленном блоке так же, как вы делали это чуть ранее при работе с индивидуальными оружейными lua-файлами. Желательно также присвоить новому виду атаки соответствующий значок, для чего вам нужно подкорректировать значение атрибута hud_icon (если параметр отсутствует, добавьте строку с ним вручную, не забыв про запятую на конце) на наиболее подходящее (в случае с добавлением функции оружия ближнего боя это — melee).
    Если к создаваемому вами типу стрельбы вы хотите “привязать” новую анимацию, обратитесь к директории \Objects\Weapons архива Objects.pak. Там отыщите подкаталог, относящийся к стволу (лучше всего, чтобы это было оружие, у которого вы заимствовали режим стрельбы), анимацией которого вы хотели бы наделить определенное орудие убийства. Обратите внимание на то, что папки, соответствующие одним и тем же стволам, могут по-разному называться в архивах Objects.pak и Scripts.pak — чтобы выявить соответствие, обращайтесь к значению параметра object из индивидуального файла оружия. Скопируйте caf-файл (их может быть и несколько, если вы не желаете ограничиваться лишь изменением анимации стрельбы) с нужной вам анимацией (если вам нужна анимация стрельбы, копируйте файл с именем N_FireX.caf, где N — название оружия, а X — номер анимации) из найденного каталога в папку, соответствующую улучшаемому вами оружию. В ней же найдите cal-файл и прямо над первой его строкой, в начале которой не стоит знака доллара, напишите следующее: Y = Z, где Y — название анимации (его вы должны придумать сами, но при этом посмотрите, чтобы оно не повторяло ни одно из наименований уже имеющихся видов анимации ствола), а Z — имя файла, который вы только что копировали.
    Затем откройте еще раз lua-файл оружия, у которого вы заимствуете вид атаки, и обратитесь к части файла, посвященной анимации. Сразу после окончания последнего анимационного блока (если на конце завершающей его строки имеется символ “;”, удалите его) вставьте раздел (можете просто скопировать блок анимации основного вида атаки оружия, чтобы затем лишь подправить содержимое нужных подразделов) с именем N.anim_table[X]. N в данном случае — название (возьмите его из другого анимационного блока этого же файла) оружия, а X — номер режима стрельбы (он должен быть на единичку выше номера
последнего из уже имеющихся типов атаки). Если у орудия убийства один режим атаки, на месте X будет стоять 2, если два — 3 и т.д. Укажите в подразделах новоявленного блока все добавляемые вами виды анимации (если вы меняете только анимацию стрельбы, пропишите в подразделе fire наименование анимации, которое мы условно обозначили за Y при работе с cal-файлом).
    Если вы не желаете снабжать добавляемый вариант атаки новой анимацией, вам вообще не нужно обращаться к архиву Objects.pak. В этом случае при добавлении нового анимационного раздела в lua-файл оружия ограничьтесь вставкой следующей строки: N.anim_table[X]=N.anim_table[1];, где N — наименование ствола, а X — номер данного вида атаки.
    Что же касается добавления пистолету возможности использования его в качестве оружия ближнего боя, то в этом случае с анимацией все значительно проще. Только учтите, что описанный ниже способ относится только к пистолету, для добавления удара прикладом другим видам вооружения пользуйтесь общей схемой, изложенной выше. Никаких файлов анимации копировать в папку пистолета не нужно, так как этот режим атаки уже встроен в игру — необходимо только активизировать его. Для этого вы должны прописать в файле Falcon.lua подходящую анимацию, сняв копию с блока Falcon.anim_table[1] и вставив ее сразу после окончания последнего. Полученный раздел переименуйте в Falcon.anim_table[2], а в его подразделе fire удалите наличествующие там строки, поставив на их место надпись “Melee”. Бейте прикладом на здоровье.
    Пользуясь изложенной выше схемой, вы можете снабжать любые виды вооружения новыми видами атаки. Так, с ее помощью вы сможете легко возродить для пистолета такой режим атаки, как удар прикладом (о чем уже писалось) — см. рис. 6, а также наделить им и другие стволы. В последнем случае вам также придется обращаться к файлу Machete.lua и блоку параметров мачете в файле WeaponsParams.lua. Что же касается анимации удара, то ее файл лучше всего позаимствовать у пистолета (речь идет о файле DE_Melee.caf из каталога \De). Добавьте каждому стволу возможность использования его в качестве оружия ближнего боя, и у вас больше не будет необходимости постоянно таскать с собой мачете на случай, если закончились патроны или если нужно резко атаковать врага, когда тот находится прямо перед игроком. Ведь теперь вы можете как следует огреть противника прикладом.
    На этом возможности использования этой схемы далеко не исчерпаны. Ваш покорный слуга, в частности, задействовал ее при модернизации ракетницы. Последнюю я наделил функцией стрельбы сразу тремя ракетами (см. рис. 5), взяв при этом для новоиспеченного режима стрельбы параметры основного типа атаки и лишь заменив значение показателя bullet_per_shot на 3. Что-то подобное, если помните, было в Unreal Tournament 2003 и 2004 с той лишь разницей, что в нашем случае снаряды вылетают из ствола не одновременно, а один за другим. Результат этого — утроенной силы и продолжительности взрыв.
    Кроме того, как показали исследования архива Objects.pak, в игре скрывается еще один вид оружия — кулаки Джека (см. рис. 16). Чтобы обучить главного героя игры драться руками, достаточно проделать следующее (сразу оговорюсь, что мы поставим кулаки на место мачете). Исправьте в файле Machete.lua архива Scripts.pak значение атрибута character на “objects/weapons/hands/hands.cgf” (чтобы вернуть мачете на свое законное место, просто присвойте параметру исходное значение). Кроме того, будет нелишним подкорректировать должным образом параметры атаки у нового оружия (в частности, уменьшить урон). После этого Джек Карвер будет в совершенстве владеть искусством рукопашного боя и сможет нокаутировать оппонента мощным ударом.
    И еще кое-что интересное. Оказывается, и мачете можно орудовать по-разному. В распоряжении вашего персонажа может находиться сразу три
различных вида атаки (помимо оригинального) с помощью мачете (правда, в одном из них мачете задействовано лишь косвенно): апперкот, удар кулаком свободной (левой) руки и удар справа (изображены соответственно на рис. 8, 9 и 10). Чтобы вставить их в игру, добавьте мачете три новых способа атаки, используя приведенную выше схему. Кроме того, в архиве Objects.pak скопируйте из директории \Objects\Weapons\hands файлы hands_leftjab.caf (соответствует удару кулаком), hands_rightjab.caf (удар справа) и hands_uppercut.caf (апперкот) в подкаталог \machete. Используйте каждый из этих трех файлов анимации для альтернативных режимов атаки (не забудьте прописать эти анимации в файл machete.cal архива Objects.pak и в файл Machete.lua архива Scripts.pak). Для параметров каждого из новых типов атаки подберите наиболее подходящие значения, так чтобы эти режимы хоть немного отличались друг от друга (в особенности нужно разграничить удар рукой и атаку посредством мачете). Таким образом, все это поможет вам внести разнообразие в атаку с помощью мачете и расширить возможности этого не слишком полезного в оригинальной игре оружия.
    В завершение разговора об оружии, хотелось бы заметить, что, если вы не желаете ограничиваться простым изменением имеющихся в игре средств уничтожения, вы вправе создать новые образцы. Лично я сделал из снайперской винтовки настоящий rail-gun, на порядок ускорив скорость полета снаряда (за это отвечает параметр meters_per_second из файла SniperBullet.lua архива Scripts.pak), немного подняв меткость оружия (в этом мне помогли атрибуты min_accuracy и max_accuracy из файла WeaponsParams.lua), увеличив урон (параметр damage из файла SniperRifle.lua) и дальность стрельбы (атрибут distance), но существенно уменьшив скорострельность (fire_rate) и сократив число патронов в обойме (bullets_per_clip) до 2. В финальной стадии подготовки ствола ваш покорный слуга должным образом подправил скин винтовки, а также окрасил в красный цвет пулю (ей соответствует файл snipershell.dds из каталога \Objects\Weapons\shells архива Objects.pak, так чтобы она напоминала собой лазерный луч), которой она стреляет. Все, rail-gun готов к применению. Получите и распишитесь.

    * * *
    Пришло время “собирать” модификации к игре. Включайте фантазию и воплощайте в жизнь самые смелые идеи. В этом вам поможет изменение звукового оформления, музыкального сопровождения, корректировка поведения игровых персонажей (желательно в сторону повышения AI), введение в игру новых видов вооружения (в том числе кулаков) и обеспечение оригинальных невиданными ранее режимами атаки (не забудьте наделить мачете тремя новыми видами удара, а стволам добавить возможность совершения удара прикладом), а также добавление новоиспеченных транспортных средств и, конечно, редактирование базовых игровых параметров, влияющих на геймплей (сюда можно, в частности, отнести “перекройку” системы повреждений).
    Естественно, что повышение разумности ваших врагов повлечет за собой значительное повышение сложности игры. Если вы хотите сохранить баланс, то обязательно дополните арсенал новыми мощными пушками (например, упомянутым в статье рейлганом) и повысьте количественную характеристику “призов”.


«Статья "Все цвета Far Cry"

публикуется с разрешения редакции журнала «Игромания». Автор: Андрей Верещагин».