Статья
"СОЛДАТЫ
БУДУЩЕГО"
публикуется с разрешения
редакции журнала
«Игромания».
Автор Андрей
Верещагин.
Я убрал фотографии оригинальной статьи, дабы ускорить
открытие страницы. Отсутствие фотографий не мешает восприятию материала.
От себя хочу заметить, что большинство параметров справедливы и для
Call of Duty
2.
Часть 1
СОЛДАТЫ
БУДУЩЕГО
Новая игра на
движке Call of Duty
Автор:
Андрей
Верещагин
Сталинградская битва. Кипит ожесточенное сражение. Слышны выстрелы,
раздаются мощные взрывы, в воздух поднимаются клубы густого дыма, свист пуль
не смолкает ни на секунду... Напряжение нарастает. Постепенно численный
перевес переходит на сторону фашистов, и они уже готовятся окружить
немногочисленный отряд русских. Когда, казалось бы, исход битвы предрешен,
на горизонте начинает вырисовываться танк, а над ним, в небе, еле виден
транспортный самолет. На первый взгляд, подкрепление несущественное,
особенно если учесть, что у немцев достаточно военной техники. Но вот танк
приближается, и причем с молниеносной быстротой, ведь это... танк на
воздушной подушке! Одним выстрелом он сносит значительную часть немецкого
отряда пехотинцев. Еще один выстрел — и фашистские армейские машины взлетают
в воздух. В этот же момент с воздуха высаживается группа советских
десантников и медиков. Последние начинают лечить раненых, тогда как первые,
вооружившись лазерными винтовками, открывают огонь по фашистам и в считанные
минуты добивают противника. Говорите, такого не бывает? В игре, которую мы
сегодня создадим на основе Call of Duty, бывает, и еще как!
Обработка
Call of
Duty, как и всякая другая игра на движке Quake III, имеет в корневом
каталоге pk3-файлы (здесь они находятся в подкаталоге \Main).
Они являются обычными zip-архивами, просто переименованными, и
содержат все основные файлы с игровыми настройками. Для работы с этими
архивами подойдет любая современная программа-архиватор.
Познакомимся с каждым из местных архивов. Первый из них — pak0.pk3
— набит под завязку всевозможными конфигурационными файлами (о некоторых из
них речь пойдет позже), а также рядом графических файлов. Последние в Call
of Duty представлены тремя форматами: jpg, tga и dds.
Если с первыми двумя, думаю, все понятно (для работы с ними вполне хватит
Photoshop), то последний тип файлов является более редким. Впрочем, и он
нам не в диковинку: многие разработчики игр используют его для хранения
графики в своих творениях. Для конвертирования dds-файлов в
удобоваримый tga-формат используйте набор утилит DXT Tools (его
вы найдете на нашем диске). Если вы регулярно
читаете статьи “Вскрытия”, то уже хорошо знаете, как работать с этой
программой. Остальным же скажу, что работа с ней осуществляется через
командную строку следующим образом.
Чтобы перевести рисунок из dds-формата в tga, зайдите в каталог, куда вы
установили DXT Tools, и запустите файл readdxt.exe с параметром
readdxt <имя dds-файла> (например, readdxt C:\wood@cafe.dds), в
результате чего в программной директории появится файл test.tga с
нужной вам картинкой. Последнюю вы можете перерисовать в любимом графическом
редакторе. Обратное действие, то есть конвертирование tga-файла в формат dds,
осуществляется путем запуска файла nvdxt.exe с параметром nvdxt <имя
tga-файла> (например, nvdxt C:\test.tga). После этого вам
останется только вернуть полученному файлу то имя, которое он имел до
перекодировки в tga-формат, и положить в архив, откуда вы его извлекли.
Вернемся к архивам. Как уже было сказано, архив pak0.pk3 имеет
множество самых разнообразных графических файлов. В частности, в нем вы
найдете директорию \ui\assets, в которой сосредоточились
вспомогательные интерфейсные картинки, и \textures. Последняя несет в
себе некоторые из игровых текстур и состоит из нескольких подкаталогов: \normandy
— текстуры, используемые в миссиях в Нормандии, \ocean — океанические
текстуры, \russia — текстуры для уровней в России, \sfx —
разного рода эффекты (водяные брызги, тени и т.д.), \training —
текстуры для тренировочной карты.
Обратите внимание на то, что большинство используемых в игре графических
файлов имеет имя вида X@Y.Z, где X — название материала, из которого
сделан объект (в редких случаях X называет тип объекта), на который
накладывается текстура, Y — название этого объекта, Z — расширение файла. На
месте X вы можете встретить следующие обозначения (привожу лишь самые
распространенные из них): metal — металл, glass — стекло,
foliage — материал естественного происхождения (например, листва),
wood — дерево, concrete — бетон, brick — кирпич, cloth
— одежда, body — человеческое тело. Знание всего этого поможет вам
легче ориентироваться в том, какого рода картинка скрывается в том или ином
файле.
Продолжая изучение pak-архивов игры, заглянем внутрь файла pak1.pk3.
Что же мы видим? А видим мы три папки: \sound, \soundaliases,
\textures. В первой из них хранятся звуковые эффекты, записанные в
стандартном wav-формате и рассортированные по четырем подкаталогам:
\vehicles (звуковые эффекты,
издаваемые транспортными средствами), \water (всплески, брызги и
прочие звуки, имеющие отношение к воде), \weapons (звуки,
производимые оружием), \whizbys (свист пуль). Что касается папок \soundaliases
и \textures, о которых говорилось чуть выше, то первая из них
содержит лишь файлы-таблицы (они просматриваются в Excel) с
параметрами звуков, тогда как вторая несет в себе разнообразные текстуры,
разложенные по подкаталогам. Приведу список последних: \austria —
текстуры для уровней в Австрии, \battleship — текстуры для военных
кораблей, \belgium — оформление бельгийских карт, \crates —
текстуры для деревянных объектов (ящиков, бочек и т.п.) и поверхностей,
\decals — текстуры для поврежденных предметов, \denmark —
текстуры для датских уровней, \german и \germany — для
немецких, \global_use и \industrial — универсальные текстуры
для поверхностей из различного материала.
Идем дальше. Архив pak2.pk3 является сугубо звуковым и хранит в
себе следующие каталоги: \ambient — звуки, производимые окружающей
средой, \bodyfalls — звуки падения тел, \charge — крики,
\doors — скрип дверей, \explosions — взрывы, \footsteps —
шаги, \glass — звуки, издаваемые при разбитии стекла, \music —
музыкальное сопровождение.
В другом игровом архиве — pak3.pk3 — имеется две директории:
\skins — скины всевозможных объектов и персонажей (напомню, что
последним соответствуют “шкурки” с названием файла, начинающегося с
сочетания body@) — и \sound — ряд звуковых эффектов. Папка
\skins наличествует и в архиве pak4.pk3, но здесь в ней находятся
только скины предметов. Помимо нее в архиве имеются директории \maps
(содержит gsc-файлы со скриптами миссий и откомпилированные карты в
виде файлов формата bsp), \scripts (общие игровые скрипты),
\mp и \mptype (скрипты для мультиплеера). Как видите, в
pak4.pk3 размещается множество скриптовых файлов. Если вы имеете опыт
работы со скриптами или знакомы с основами программирования, можете
поковыряться в этих файлах. Немало интересного кроется здесь за
многочисленными строками кода.
Что касается еще одного архива — pak5.pk3, то он наиболее богат на
подкаталоги. Из последних следует выделить следующие: \animscripts (скрипты
анимации в виде gsc-файлов), \cameras (файлы с настройками
камеры), \character (скриптовые файлы, относящиеся к героям игры),
\env (tga-файлы с текстурами для неба и заднего плана), \fonts
(графические отображения игровых шрифтов), \fx (efx-файлы с
параметрами эффектов: взрывов, дыма, различных повреждений и т.п.), \levelshots
(небольшие скриншоты из уровней, которые вы видите на экране при выборе
автосохранений). Помимо вышеназванных директорий, в архиве pak5.pk3 имеются
и некоторые другие не менее примечательные каталоги. В частности, папка \gfx,
набитая графическими файлами оформительного характера. Директория разбита на
следующие подкаталоги: \effects (разнообразные эффекты), \hud
(рисунки для HUD’а: индикаторы здоровья и боеприпасов, компас и т.д.),
\icons (разного рода иконки и значки), \impact (текстуры
поврежденных поверхностей), \mp_menus (графическое оформление
мультиплеерных менюшек), \sun (изображения солнца).
Теперь, когда вы знаете, где что лежит, пора приступать к редактированию
игровых текстур и звуковых файлов.
Все графические и звуковые файлы игры могут
быть отредактированы или заменены другими. В частности, не составит труда
обернуть игру в новую оболочку, полностью переоформив игровые менюшки и
экран героя.
Если вы создаете серьезную модификацию, не обойтись без хотя бы
минимальной перерисовки игровых текстур и скинов предметов и персонажей. Ваш
покорный слуга, например, перенес действие игры в будущее, существенно
переработав внешний вид большинства текстур. Обширные поля и полуразрушенные
города в моем моде уступили место футуристическим пейзажам. Конечно, в этом
случае очень желательно добавить в игру уровни с новенькими текстурами, для
чего вам необходимо знание редактора Radiant, и подходящие звуковые эффекты
(их вы можете позаимствовать, в частности, из других игр). После этого можно
с уверенностью сказать, что первый — и весьма значительный — шаг на пути
воплощения в жизнь футуристического мода сделан.
Танки на
воздушных подушках
Займемся
редактированием файлов с важнейшими игровыми параметрами. Отправной пункт —
архив pak0.pk3, подкаталог \vehicles. Папка посвящена
средствам передвижения и заполнена файлами с их характеристиками (каждому
транспортному средству отводится отдельный файл, который заимствует у
первого название). Отличительная черта всех файлов директории \vehicles —
отсутствие расширения.
Файл с именем C47 соответствует самолету C47, condor —
истребителю “Кондор”, Flak88 — зенитной пушке Flak-88,
FlakVierling — пушке Flak-Vierling, GermanBMW — армейскому
автомобилю марки BMW, GermanFordTruck — грузовику Ford,
GermanHalfTrack — немецкой полугусеничной машине,
GermanYacht —
немецкой яхте, HorsaGliderInterior — планеру Horsa, PanzerIV —
танку Panzer IV, Peugeot — машине марки Peugeot, RussianBarge
— русской барже, Stuka — бомбардировщику Stuka, T34 — танку
T34, tiger — танку Tiger.
Устроены все файлы довольно сложно. Каждый из них начинается с сочетания
VEHICLEFILE\. За ним следуют параметры и их значения. Неудобство
редактирования этих файлов заключается в том, что значения настроек
отделяются от названий последних символом “\”. В то же время этот же
знак служит границей между значением одного атрибута и именем следующего.
Поэтому вы можете легко запутаться, где название параметра и где значение, в
случае если последнее является текстовым. Так что будьте внимательны при
редактировании файла, тщательно отслеживая, где “заканчивается” одна
настройка и “начинается” следующая. Разобраться со всем этим безобразием вам
также помогут описания местных характеристик, которое я предлагаю вашему
вниманию.
type — тип транспортного средства. Возможны следующие варианты:
plane — самолет, 4 wheel — автомобиль, boat — лодка,
tank — танк, artillery — артиллерийская установка.
bulletDamage — этот параметр определяет, может ли быть броня
этого вида транспорта повреждена пулями. 1 — да, 0 — нет (это
же относится и к двум следующим атрибутам).
grenadeDamage — уязвимость машины от гранат. Предлагаю поставить
сюда единицу в файлах PanzerIV, T34, tiger, а то создатели игры почему-то
решили, что танковую броню невозможно повредить гранатами (см. рис. 5).
projectileDamage — уязвимость от ракет.
maxSpeed — максимальная скорость, которую может развивать средство
передвижения. Эта характеристика, также как и все другие, связанные со
скоростью, измеряется в километрах в секунду.
accel — ускорение машины или, иначе говоря, быстрота разгона до
максимальных скоростей.
rotRate — максимальный угол поворота колес (этот показатель,
также как и все остальные настройки, задающие угол расположения чего-либо,
измеряется в градусах).
rotAccel — ускорение, которое машина получает при повороте. Этот
и предыдущий показатели определяют поворотливость транспортного средства.
Разработчики поставили сюда нуль всем средствам передвижения. Логичнее будет
прописать сюда отрицательное число (не советую ставить число ниже 5) —
теперь машина, как и положено, будет слегка терять скорость на поворотах.
maxBodyPitch — максимальный угол наклона корпуса машины.
maxBodyRoll — максимальный угол вращения корпуса транспортного
средства. От значения этой характеристики во многом зависит, насколько
сильно машину будет заносить на поворотах.
collisionDamage — урон от столкновения средства передвижения с
каким-либо массивным объектом.
collisionSpeed — минимальная скорость, при которой данный вид
транспорта, столкнувшись с другим объектом, “теряет” часть своей брони (эта
часть задается предыдущим параметром).
suspensionTravel — жесткость подвески машины.
turretWeapon — оружие, которым оборудовано транспортное средство (если
таковое отсутствует, здесь вообще ничего не указывается). Сюда прописывается
название файла, содержащего параметры этой пушки (все “оружейные” файлы
собраны в директории \weapons архива pak0.pk3 — о них мы
поговорим чуть позже). Подменяя значение характеристики, вы можете
перевооружать средства передвижения и даже оборудовать турелями те из них,
которые не имеют никакого оружия.
turretHorizSpanLeft — максимальный угол поворота пушки влево (эту
и четыре следующих настройки имеет смысл менять, только если у данной машины
наличествует какое-либо оружие, то есть задано значение предыдущего атрибута).
turretHorizSpanRight — максимальный угол поворота пушки вправо.
turretVertSpanUp — максимальный угол подъема турели.
turretVertSpanDown — максимальный угол наклона пушки вниз.
turretRotRate — скорость поворота турели.
Далее следует ряд “звуковых” параметров транспортных средств. В значении
всех этих характеристик, кроме последней, вы должны прописывать название
нужного вам wav-файла (расширение указывать необязательно) из
директории \sound\vehicles архива pak2.pk3.
lowEngineSnd — рев мотора машины.
highEngineSnd — усиленный рев мотора.
turretSpinSnd — звук, раздающийся при повороте пушки (только для
оборудованного оружием транспорта).
engineSndSpeed — быстрота проигрывания звука, соответствующего
реву мотора. Чем больше заданное здесь число, тем выше скорость.
Умелое редактирование всех вышеперечисленных атрибутов позволит вам
переделать имеющиеся в игре транспортные средства на новый лад. Как вы,
наверное, уже заметили, изменению поддается буквально все: от скоростных
качеств машины до ее вооружения.
Правка характеристик средств передвижения
поможет вам добавить в игру новые уникальные транспортные средства, поставив
их на место оригинальных. Правда, для этого вам также придется
подкорректировать внешний вид машин, обращаясь к их скинам (напомню, что все
“шкурки” вы найдете в директории \skins архивов pak3.pk3 и
pak4.pk3). Создавать можно практически любые средства передвижения,
благо параметров у нас имеется достаточно. Хотите покататься на гоночных
автомобилях, развивающих скорость до 300 километров в час? Легко! Просто
увеличьте значения показателей maxSpeed и accel у той же BMW.
И не забудьте присвоить новоявленной “тачке” подходящий облик (естественно,
это лишь самая простейшая схема создания высокоскоростного средства
передвижения, которую вам крайне желательно дополнить самостоятельно).
Лично я оборудовал игровые карты машинами будущего, в частности —
танками на воздушных подушках, быстрыми и мощными. Для этого достаточно
взять один из представленных в игре танков, подработать должным образом его
“шкурку”, существенно улучшить скоростные качества (напомню, что за это
отвечают атрибуты maxSpeed и accel), а также усовершенствовать
его пушку, редактируя соответствующий ей файл из папки \weapons (об
“оружейных” файлах читайте в следующей главе). Работы над футуристическим
модом, о котором мы заговорили выше, вступают в финальную стадию.
Пушки и
стволы
Следующая
папка из архива pak0.pk3, которая нам пригодится, называется \weapons
и хранит в себе файлы с настройками оружия, в том числе и оружия,
установленного на транспортные средства (ему соответствуют файлы с
окончанием _Turret). Директория разбита на два подкаталога: \sp
и \mp. Первый из них соответствует оружию для одиночного режима игры,
второй — мультиплеерным средствам уничтожения. В обоих каталогах
представлены файлы, наполненные примерно одинаковым набором параметров,
страдающие отсутствием расширения и схожие по структуре с разобранными выше
“транспортными” файлами (только здесь файлы начинаются с сочетания
WEAPONFILE\). Вот основные атрибуты, с которыми вы столкнетесь в файлах
из папок \sp и \mp.
weaponType — тип оружия. Возможные значения: bullet — ствол,
стреляющий пулями, grenade — граната, projectile — оружие,
стреляющее разрывными снарядами.
weaponClass — категория, к которой относится ствол (эта
характеристика уточняет предыдущую):
pistol — пистолет, rocketlauncher — ракетница, grenade
— граната, turret — пушка на машине, rifle — винтовка, smg
— полуавтоматическое оружие, non-player — оружие, используемое
исключительно вашими врагами.
displayName — название оружия в игре. Напишите здесь название
параметра из файла weapon.str (оно указывается в этом файле после
слова REFERENCE), лежащего в каталоге \localizedstrings\english
архива localized_english_pak1.pk3 и содержащего данную запись (она
располагается после слова LANG_ENGLISH под названием соответствующего
параметра). При добавлении в игру нового оружия обязательно пропишите здесь
его настоящее название.
gunModel — модель ствола, используемая, когда ваш персонаж держит
его в руках. Следует отметить, что все файлы моделей упакованы в архив
pak0.pk3, в директорию \xmodel (эта папка наиболее насыщена
моделями), \xmodelsurfs и \xmodelparts. При этом первые два
каталога содержат полноценные модели, тогда как последний — лишь составные
части. Во всех параметрах, задающих модель для какого-либо объекта или
субъекта (эта характеристика — не исключение), вы должны ссылаться на нужный
вам “модельный” файл без расширения, лежащий в одной из двух названных папок
(в данном случае — в директории \xmodel), просто указав его имя. При
значении none модель у ствола отсутствует.
handModel — модель руки, в которой ваш персонаж держит это оружие.
fireAnim — анимация стрельбы из данного оружия. Здесь и в
значениях двух следующих показателей вы должны прописать название нужного
вам “анимационного” файла (у такого рода файлов нет расширения), который
находится в архиве pak0.pk3, в каталоге \xanim.
meleeAnim — анимация удара прикладом.
reloadAnim — анимация перезарядки.
weaponSlot — слот, который занимает это оружие: pistol —
слот для пистолетов, grenade — слот для гранат, primary — для
основного оружия. Значение none предназначено для оружия, которое
нельзя носить с собой.
slotStackable — данным параметром определяется, оставляет ли
данное орудие убийства (когда вы его с собой таскаете) свободным слот для
другого оружия того же вида (1 — да, 0 — нет). Поставив сюда
1, вы уберете ограничение на максимальное число стволов, которое вы можете
одновременно с собой носить. Геймплей в этом случае сблизится с большинством
других экшенов, где ваш герой может нагружать себя неограниченным
количеством оружия.
moveSpeedScale — умножитель скорости передвижения игрока, когда
тот держит в руках данный ствол. Возможны дробные значения. Разработчики
почему-то определили значение этого атрибута для всех видов вооружения как
единицу. Поэтому-то ваша скорость передвижения и не зависит от размеров и
массы вашего оружия, что, на мой взгляд, не совсем реалистично. Между тем
реалистичность в игре про Вторую Мировую очень важна. Посему предлагаю вам
подправить значение характеристики (где-то понижая ее, где-то повышая) для
всех или почти всех орудий убийства в зависимости от примерного веса
последних. Ведь согласитесь, что человек не может одинаково быстро
передвигаться, будучи вооружен легким пистолетом или громоздкой
противотанковой пушкой. Кроме того, если вы поставите сюда число больше 1,
то придадите вашему герою дополнительное ускорение и он будет носиться со
стволом как угорелый. Выглядит забавно.
damage — урон, наносимый снарядом, выпущенным из данного ствола.
Заметно увеличивая повреждение от всех видов вооружения, вы сделаете игру
более реалистичной. Теперь игровые персонажи (и ваш герой в том числе) будут
погибать, как и реальные люди, от двух-трех точных выстрелов.
meleeDamage — повреждение от удара прикладом. Существенно повышая
значение атрибута, вы можете вставить в игру какое-нибудь холодное оружие,
например нож.
fireDelay — задержка перед выстрелом, то есть временной интервал
между нажатием вами на курок и выпуском пули из дула данного оружия. Этот
атрибут, также как и все остальные связанные со временем настройки,
измеряется в секундах.
meleeDelay — задержка перед ударом прикладом.
reloadTime — время, уходящее на перезарядку ствола, когда в нем
еще есть пули.
reloadEmptyTime — время, которое требуется для полной перезарядки
оружия.
fireTime — продолжительность совершения одного выстрела из
данного средства уничтожения. Проще говоря, скорострельность (чем ниже
значение, тем она выше).
meleeTime — длительность совершения удара прикладом.
dropTime — время, которое тратится на выбрасывание оружия.
raiseTime — время, уходящее на подбор данного орудия убийства.
adsZoomFov — зум прицела, то есть увеличение, даваемое последним.
Обратите внимание на то, что, чем ниже значение, тем значительнее увеличение.
adsZoomInFrac — быстрота прицеливания вашим персонажем, то есть
то, как быстро он переходит от обычного режима стрельбы из данного ствола в
прицельный.
adsZoomOutFrac — скорость перехода из режима прицельной стрельбы
в обычный.
adsOverlayShader — рисунок, заполняющий экранную область вокруг
снайперского прицела (только для стволов с оным). Здесь требуется указать
путь этой картинки внутри архива pak0.pk3. Авторы игры используют
здесь рисунок, окрашивающий экран в черный цвет. Если в значении
характеристики вообще ничего не указывать, то на экране не будет ничего,
кроме самого прицела, и целиться будет максимально удобно.
adsOverlayReticle — тип снайперского прицела (если его нет,
значение атрибута пустует). Основной вид — FG42. Для оружия, не
наделенного снайперским прицелом, возможна ликвидация этого недостатка путем
придания показателю указанного значения. После этого даже самый обычный
пистолет Colt станет простенькой снайперской винтовкой (см. рис. 10)!
adsOverlayWidth — ширина снайперского прицела.
adsOverlayHeight — его высота. Правя прописанные здесь и в трех
предыдущих параметрах числа, вы можете здорово менять внешний вид
снайперского прицела.
adsBobFactor — сила покачиваний вашего оружия из стороны в
сторону при передвижении во время ведения прицельной стрельбы.
adsViewBobMult — умножитель покачиваний ствола при передвижении
во время прицельной стрельбы. Прописанное здесь число умножается на значение
предыдущего параметра, отчего тряска оружия либо усиливается, если
умножитель больше 1, либо уменьшается, если меньше.
hipSpreadStandMin — минимальная тряска ствола при стрельбе стоя.
hipSpreadDuckedMin — минимальное дерганье орудия убийства при
стрельбе сидя.
hipSpreadProneMin — минимальная тряска ствола при стрельбе лежа.
hipSpreadMax — максимальная тряска ствола при стрельбе из любого
положения.
adsSpread — общая точность стрельбы для данного вида вооружения
(то есть величина отклонения полета пули от заданной траектории). Чем ниже
значение, тем выше точность.
idleCrouchFactor — повышение точности выстрела при стрельбе сидя
в неподвижном положении.
idleProneFactor — повышение точности выстрела при стрельбе лежа в
неподвижном положении.
gunMaxPitch — максимальный угол наклона ствола по вертикали.
gunMaxYaw — максимальный угол наклона ствола по горизонтали.
adsGunKickPitchMin — минимальная отдача в вертикальном
направлении от стрельбы из данного вида вооружения. При положительном
значении отдача смещает ствол вверх, при отрицательном — вниз.
adsGunKickPitchMax — максимальная отдача по вертикали.
adsGunKickYawMin — минимальная отдача по горизонтали. При
значении, большем нуля, отдача смещает ствол влево, при меньшем — вправо.
adsGunKickYawMax — максимальная горизонтальная отдача.
adsGunKickAccel — ускорение отдачи.
adsGunKickSpeedMax — максимальная продолжительность действия
эффекта от отдачи при стрельбе из данного оружия.
adsGunKickSpeedDecay — минимальная продолжительность действия
отдачи. Если хотите сделать игру более реалистичной, обязательно усильте
отдачу от игровых орудий убийства, слегка повышая значения этого и шести
предыдущих атрибутов.
adsGunKickStaticDecay — уменьшение силы отдачи при стрельбе из
неподвижного положения.
radiantName — название оружия в редакторе карт Radiant.
worldModel — модель оружия, использующаяся, когда оно лежит без
дела. Укажите здесь путь соответствующего файла внутри архива pak0.pk3,
разделяя названия папок прямым слэшем (этим способом отделяются друг от
друга имена каталогов и в значениях других атрибутов, требующих указания
пути файла). К примеру: xmodel/weapon_bar.
hudIcon — схематическое изображение данного вида вооружения,
использующееся для оформления HUD’а — экрана героя. Должно быть представлено
dds-файлом из папки \gfx\icons архива pak0.pk3.
ammoIcon — значок, изображающий патроны к этому стволу.
Упомянутый здесь файл в лице картинки формата tga должен
располагаться в архиве pak0.pk3 в каталоге \gfx\icons.
ammoName — тип патронов, используемый стволом. Практически каждое
средство уничтожения использует свой уникальный тип патронов. Впрочем, вы
можете разработать единый стандарт для всех или нескольких видов вооружения,
поставив им сюда одно и то же значение.
maxAmmo — максимальное число боеприпасов к данному оружию,
которое вы можете таскать с собой.
startAmmo — начальное количество патронов (то есть то, которое вы
получаете в начале миссии или подобрав новенький ствол).
clipName — тип обоймы ствола. Как и в случае с показателем
ammoName, возможных вариантов здесь почти столько же, сколько и средств
уничтожения в игре.
clipSize — максимальное число патронов, вмещающееся в обойму.
dropAmmoMin — минимальное количество заряженных в ствол пуль,
которое вы можете получить, подобрав данное оружие в случае, если оно уже
было кем-то использовано. То есть, если в стволе осталось меньше патронов,
чем указано здесь, их число будет автоматически увеличено до значения
параметра.
dropAmmoMax — максимальное число патронов, которое может
находиться в найденном вами использованном стволе. Советую прописать сюда
число, равное максимальному количеству боеприпасов для оружия (напомню, оно
определяется параметром maxAmmo), а в значение предыдущей
характеристики поставить 0. А то как-то неправдоподобно получается.
Берущиеся из ниоткуда патроны в использованном оружии и с таким же успехом
исчезающие в никуда — все это выглядит, по меньшей мере, странно.
pickupSound — звуковой эффект, который раздается при подборе
солдатом (в том числе — вашим персонажем) данного орудия убийства. Файл, на
который вы ссылаетесь в этом и в четырех следующих параметрах, должен быть
помещен в каталог \sound\weapons архива pak1.pk3.
ammoPickupSound — звук подбора патронов к оружию.
fireSound — звук стрельбы.
reloadSound — звук перезарядки.
putawaySound — звуковой эффект, который вы слышите, когда прячете
данный вид вооружения, заменяя его другим.
twoHanded — этот параметр определяет, является ли оружие
двуручным. Здесь и в двух следующих параметрах возможны только два значения:
1 — да, 0 — нет.
semiAuto — атрибут определяет, является ли ствол
полуавтоматическим.
boltAction — испытывает ли персонаж контузию, будучи поражен
снарядом, выпущенным из данного орудия убийства. Поставьте сюда единичку
всем орудиям убийства, и любое полученное вами ранение будет, как и в
реальной жизни, сопровождаться помутнением в глазах.
aiEffectiveRange — максимальное расстояние между вашим персонажем
и врагом, вооруженным данным оружием, при котором противник будет неизбежно
попадать по вам, если, конечно, вы сами не увернетесь от летящей пули.
aiMissRange — минимальная дистанция между вами и вашим
противником, при которой последний, будучи вооружен этим стволом, не попадет
по вам, если, конечно, вы не сделаете никаких лишних движений. От значений
этой и предыдущей характеристик во многом зависит меткость, а значит и AI
ваших неприятелей, вооруженных указанным стволом. Хорошим игрокам
рекомендуется понизить заданное здесь число и повысить значение предыдущей
настройки для всех видов вооружения.
standMoveF — “выдавание” оружия вперед, происходящее, когда вы
бежите. Чем выше значение параметра, тем дальше от камеры ваш герой держит
ствол.
standMoveR — “прижимание” орудия убийства к левому краю экрана
при движении. При положительных значениях ваш персонаж будет держать пушку в
левой части экрана (чем больше число, тем левее), при отрицательных — в
правой.
standMoveU — подъем ствола вверх при движении стоя.
standRotP — наклон пушки вниз при движении стоя. Чем выше
прописанное здесь число, тем ниже будет наклоняться ствол.
standRotY — наклон ствола влево при движении стоя.
standRotR — наклон вправо при движении стоя.
duckedOfsF — “выдавание” оружия вперед при занятии вами
неподвижного положения в приседе.
duckedOfsR — “прижимание” ствола к левому краю экрана при
неподвижном положении персонажа в приседе.
duckedOfsU — подъем ствола вверх при занятии вами неподвижного
положения сидя.
duckedMoveF — “выдавание” оружия вперед при движении в приседе.
duckedMoveR — “прижимание” ствола к левому краю экрана при
движении в приседе.
duckedMoveU — подъем ствола вверх при движении сидя.
duckedRotP — наклон пушки вниз при движении в приседе.
duckedRotY — наклон ствола влево при движении сидя.
duckedRotR — наклон вправо при движении в приседе.
Далее следуют девять параметров, повторяющих последние во всем, кроме
начальной части названия. Наши “новые знакомые” обладают именами,
начинающимися со слова prone, и несут те же функции, что и предыдущие
характеристики, только для положения лежа. Например, показатель proneRotY,
по аналогии с характеристикой duckedRotY, задает наклон ствола влево при
передвижении ползком.
standMoveMinSpeed — минимальная скорость передвижения в полный
рост для солдата, вооруженного данным стволом.
duckedMoveMinSpeed — минимальная скорость передвижения субъекта в
приседе с этим оружием.
proneMoveMinSpeed — минимальная скорость передвижения персонажа
ползком с этим стволом.
standRotMinSpeed — минимальная скорость поворота солдата стоя,
вооруженного этим стволом.
duckedRotMinSpeed — минимальная скорость поворота персонажа в
приседе с этим оружием.
proneRotMinSpeed — минимальная скорость поворота персонажа в
положении лежа с этим стволом. По сути дела, этот и пять предыдущих
атрибутов определяют поворотливость вашего героя, когда тот вооружен
определенным стволом.
Ниже приведены параметры, имеющиеся только у гранат и стволов,
стреляющих разрывными снарядами, то есть оружия со значением grenade
или projectile у характеристики weaponType.
explosionRadius — радиус взрыва, производимого от снаряда этого
оружия.
explosionInnerDamage — урон от взрыва, наносимый субъектам,
попавшим в его радиус.
explosionOuterDamage — повреждение от взрыва, наносимое солдатам,
находящимся вблизи его радиуса. Значительно подняв значения этого и трех
предыдущих показателей, вы можете превратить обычную гранату в мощную бомбу.
projectileSpeed — скорость полета снаряда, используемого этим
стволом.
projectileSpeedUp — ускорение полета снаряда (параметр
наличествует только у гранат).
projectileModel — модель снаряда.
projExplosionType — тип взрыва (grenade — взрыв гранаты,
rocket — ракетный).
projExplosionSound — звук взрыва.
projExplosionEffect — эффект, который вы видите при взрыве
снаряда. Здесь вы должны сослаться на файл формата efx из каталога
\fx архива pak5.pk3.
projectileRed — доля красного цвета в окраске снаряда данного
оружия. Минимальное значение этого и двух следующих атрибутов — 0,
максимальное — 1.
projectileGreen — доля зеленого цвета в окраске снаряда.
projectileBlue — доля синего.
Копаясь в “оружейных” файлах игры, вы
можете моделировать совершенно новые средства уничтожения. Если же нет
желания производить значительные преобразования, советую просто добавить
игре немного реалистичности, слегка усилив тряску прицела и отдачу при
стрельбе, а также замедлив скорость передвижения игрока с тяжелым оружием в
руках.
Кроме того, при работе с “оружейными” файлами вы в состоянии заменять
орудия убийства полезными вещичками. Можно, например, сделать из любого
ствола что-то вроде реактивного ранца, установив для первого нулевой урон (параметр
damage), убрав с экрана модель оружия, (напомню, что это делается
путем придания показателю gunModel значения none) и подняв
значение характеристики moveSpeedScale от 1.5 до 3. Используя
полученную вещицу, вы сможете носиться по картам с бешеной скоростью, уходя
от погони, когда того требует ситуация.
Другой вариант — переделать одно из орудий убийства в перетаскиваемую
аптечку (см. рис. 8). Рекомендую использовать для этого пистолет
Colt. Характеристике gunModel присвойте значение health_small,
настройке meleeAnim — viewmodel_colt45_fire. Далее обнулите
значение атрибута damage, а параметру meleeDamage припишите
небольшое положительное число (лучше всего — от 5 до 10). С помощью такого
предмета вы сможете понемногу подлечивать своих сослуживцев, подходя к ним и
нажимая клавишу для удара прикладом (по умолчанию — Shift). Советую также
ограничить количество аптечек, которое вы можете таскать с собой, правя
значение показателя maxAmmo (я остановился на десяти). Особенно
эффективна аптечка в мультиплеере, где отныне отдельные игроки смогут
исполнять роль медиков.
Кроме того, ваш покорный слуга вставил в игру подобие электрошока и
лазерную винтовку. Первое вы сможете получить из какого-нибудь небольшого
слабого оружия, типа пистолета, существенно переработав его внешний вид, а
также выставив значение характеристики boltAction на единицу, а
показателя adsSpread — на число в районе 2.5-3. Чтобы получить
лазерное оружие, возьмите за основу какую-нибудь простую винтовку (например
M1 “Гаранд”, которой соответствует файл m1garand) и после необходимой
корректировки скина существенно понизьте значения параметров fireTime
и adsSpread (первого — примерно раза в два-три, последнего — в
четыре-пять), а также посильнее увеличьте урон от оружия (damage).
Особенно уместны оба вида вооружения будут в свете создаваемой нами
футуристической модификации.
* * *
Мы
разобрались, как перерисовывать текстуры, выяснили, как заменять модели
игровых персонажей, изменили характеристики основных средств передвижения (в
частности, сделали летающие танки), а также полностью поменяли арсенал
главного героя. Во второй части статьи мы разберем, как видоизменить врагов
в игре, перенастроить их AI, а также выясним, как доработать систему
повреждений и полностью русифицировать игру.
Часть 2
СОЛДАТЫ
БУДУЩЕГО
Новая игра на
движке Call of Duty
Автор:
Андрей Верещагин
В первой части статьи мы полностью перерисовали текстуры и узнали, как
заменять модели игровых персонажей, научились изменять характеристики
основных средств передвижения в Call of Duty (в частности, делать
летающие танки), а также полностью заменили арсенал главного героя. Сегодня
мы
двинемся дальше по пути создания совершенно новой игры на основе движка CoD
и разберем, как видоизменить врагов в игре, как перенастроить их AI. Плюс к
этому — мы поработаем над системой повреждений и полностью переведем игру на
русский язык.
Воины
Перенесемся в архив pak5.pk3, упомянутый еще первой части статьи. В
нем нам интересен каталог \aitype. В последнем вы найдете множество
файлов с расширением gsc, каждый из которых содержит характеристики
того или иного персонажа или типа персонажей. Файлы с именем, начинающимся с
сочетания ally_, относятся к вашим напарникам. Те же, что имеют в
своем названии приставку axis_, соответствуют врагам. Кроме того,
наименования почти всех местных файлов оканчиваются сочетанием _X,
где X — краткое название оружия, которым вооружен солдат. Все эти файлы
наполнены кучей параметров, которые раскиданы по разделам main,
spawner и precache (в начале файла имеется небольшой блок
комментариев, которые игрой не учитываются). Содержание каждого из них
выделено фигурными скобками. Нам в первую очередь понадобится блок main,
в котором располагаются следующие характеристики персонажа.
self.team — армия, на службе которой состоит солдат: “allies”
— союзники, “axis” — фашисты.
self.accuracy — меткость персонажа.
self.health — здоровье.
self.weapon — основное оружие (значение должно быть взято в
кавычки). Здесь и в значении двух следующих атрибутов следует ссылаться на
файл, соответствующий этому средству уничтожения (о такого рода файлах
писалось чуть выше), находящийся в директории \weapons\sp архива
pak0.pk3. Например, если вы пропишите здесь слово “thompson”, субъект
будет вооружен автоматом Томпсона.
self.secondaryweapon — второе орудие убийства (пистолетное). Если
оно отсутствует, здесь стоят пустые кавычки.
self.grenadeWeapon — гранатное оружие (если есть).
self.grenadeAmmo — число гранат у субъекта. Изменяя значения этого и
трех предыдущих показателей, вы можете полностью перевооружить своих врагов
и союзников. Лично я навесил на каждого неприятеля побольше гранат и выдал
по два мощных ствола, причем один из них — какое-нибудь тяжелое оружие вроде
противотанковой пушки. Сражаться с такими соперниками куда сложнее, чем с
оригинальными, но, вместе с тем, и намного увлекательнее.
self.scariness — страх, который испытывают солдаты из оппозиции,
когда видят данного героя. Чем выше, тем более угрожающе выглядит персонаж.
self.bravery — храбрость. Ставьте 100, и персонаж обретет полное
бесстрашие. Авторы игры используют здесь только два значения: 6 — для ваших
сослуживцев и 50 — для врагов. Советую поэкспериментировать с
редактированием этого атрибута. Это может привести к самым различным и
неожиданным результатам. Например, прописав сюда своим союзникам число
повыше (от 50 до 100), вы существенно увеличите их активность, а
значит — и роль в боевых действиях. В этом случае вам будет намного проще
играть. Хорошие же игроки могут, наоборот, снизить степень участия в войне
солдат из вашей армии, повысив тем самым сложность игры. Поставив же врагам
значение близкое к нулю, вы сделаете их полными трусами, и они всякий раз
будут убегать от вас, как зайцы от волка.
Обратите внимание на то, что при изменении оружейного арсенала героя, вы
должны подправить содержимое раздела precache следующим образом. Если
вы заменили одно оружие другим, укажите название последнего в строке
precacheItem(“X”); вместо X (то же, что вы указали в одном из
“оружейных” параметров персонажа). Если же вы вооружили субъекта новым
стволом, добавьте в этот блок строчку того же вида, указав вместо X название
добавляемого орудия убийства.
Смею предположить, что разработчики
создавали всех врагов (и, кстати, напарников тоже) по единому шаблону,
отчего все они получились до боли похожими друг на друга. Так внесите же
хоть какое-то разнообразие! Для этого придайте игровым персонажам
индивидуальность, подбирая одноименным параметрам разных героев хоть немного
отличные друг от друга значения.
Кроме того, занимаясь правкой атрибутов игровых персонажей, вы можете
ощутимым образом влиять на сложность игры. Идеальным вариантом для опытных
игроков будут вооруженные до зубов неприятели: храбрые как настоящие бойцы,
меткие как снайперы и здоровые как быки — в общем, по-настоящему
достойные соперники, с которыми действительно интересно воевать. Если при
этом вы испытываете большие проблемы при прохождении игры, будет нелишним
также усилить должным образом своих сослуживцев. В этом случае сложность не
особо увеличится по сравнению с тем уровнем, что был до улучшения бойцовских
способностей врагов.
Система
повреждений
Раскроем
теперь папку \info. В ней вы обнаружите всего два файла (у обоих
отсутствует расширение): ai_lochit_dmgtable и mp_lochit_dmgtable.
Первый из них определяет уязвимость различных частей тела (и в некоторых
случаях — деталей снаряжения) ваших противников и сослуживцев, второй — то
же самое для игроков в мультиплеере. Оба файла по структуре напоминают
“оружейные” и “транспортные” файлы, разобранные выше, и построены следующим
образом. Вначале идет сочетание LOCDMGTABLE\none\, за которым следует
цифра 1, обозначающая общую крепость здоровья персонажей. Далее
начинается перечень параметров с названиями частей тела, каждый из которых
определяет болезненность повреждения указанной области (чем выше число,
следующее за именем параметра, тем уязвимее часть тела). Перед вами
обозначения всех частей тела: helmet — верхняя часть головы (область
для головных уборов: касок,
беретов и т.д.), head
— нижняя часть головы, neck — шея, torso_upper — верхняя часть
туловища (большую часть этой области занимает грудь), torso_lower —
нижняя часть туловища (живот), right_arm_upper — правое плечо,
right_arm_lower — правое предплечье, right_hand — кисть правой
руки, left_arm_upper — левое плечо, left_arm_lower — левое
предплечье, left_hand — кисть левой руки, right_leg_upper —
правое бедро, right_leg_lower — правая голень, right_foot —
правая стопа, left_leg_upper — левое бедро, left_leg_lower —
левая голень, left_foot — левая стопа, gun — оружие, которое
персонаж держит в руках.
Файлы из папки \info помогут вам
полностью перекроить игровую систему повреждений. Корректируя значения
имеющихся в этих файлах характеристик, вы можете изменять живучесть
действующих лиц игры (при увеличении значений параметров вы укрепляете
здоровье персонажей, при уменьшении — соответственно, ослабляете), тем самым
существенно влияя на геймплей.
Обратите также внимание на различие в значениях одноименных параметров в
файлах ai_lochit_dmgtable и mp_lochit_dmgtable. Если в
одиночном режиме персонажи обладают повышенной чувствительностью к хедшотам,
то в мультиплеере большей, по сравнению с синглом, уязвимостью обладают ноги.
Сложно сказать, чем это объяснимо, но в любом случае вы можете попробовать
каждый вариант в действии в обоих режимах игры. В частности, рекомендую
“примерить” для многопользовательской игры сингловый тип уязвимости частей
тела, который лично мне видится более логичным.
Великий и могучий
В
директории с игрой, помимо разобранных в статье архивов pak0.pk3,
pak1.pk3, pak2.pk3, pak3.pk3, pak4.pk3 и pak5.pk3, имется еще два
весьма ценных архивных файла — localized_english_pak0.pk3 и
localized_english_pak1.pk3. Первый из них подразделяется на
следующие директории: \textures — текстуры, содержащие
различные надписи, \ui — картинки и скриптовые файлы,
предназначенные для оформления меню одиночной игры, \ui_mp —
многопользовательской игры, \sound — звуковые файлы формата
wav с речью игровых персонажей (все диалоги распределены по
трем подкаталогам: \Us — диалоги из эпизода в Англии, \Uk
— из эпизода в США, \Stalingrad — в России).
Папка \sound имеется и в архиве
localized_english_pak1.pk3 (здесь в ней вы также найдете ряд
речей). Помимо этой директории архив несет в себе следующие каталоги:
\gfx — рисунки с надписями для экрана героя, \levelshots
— загрузочные картинки уровней, \localizedstrings — str-файлы
с игровыми текстами (сами тексты в этих файлах заключены в кавычки),
\skins (скины героев игры и разнообразных объектов,
содержащие какие-либо надписи).
Редактируя и подменяя файлы из обоих архивов, вы можете
полностью русифицировать игру, переводя на родной язык все надписи,
перерисовывая текстуры с текстом и занимаясь переозвучкой персонажей.
|
* * *
Итак, мы
разобрали важнейшие игровые параметры, научились править и подменять
графические и звуковые файлы. Этого вполне достаточно, чтобы сделать
добротный мод. Он может вводить в игру небольшие новшества, а может изменять
ее до неузнаваемости. Второй вариант, конечно, предпочтительней, но в этом
случае работы у вас будет куда больше. Если это не пугает, попробуйте
разработать какую-нибудь глобальную модификацию — например, футуристическую.
Для этого вам понадобится ввести в игру орудия убийства и транспортные
средства будущего, подкорректировать на “футуристический” лад графическую (причем
как текстуры, так и игровой интерфейс) и звуковую составляющие игры (о
каждом из этих преобразований мы уже говорили при изучении соответствующих
файлов, осталось только собрать все вместе).
Если же у вас нет желания досконально модифицировать игру, можете просто
добавить в нее несколько новых видов вооружения, снаряжения и транспорта.
Таким образом вы создадите небольшое игровое дополнение. Можно также придать
игре реалистичности, сделав игровых персонажей более уязвимыми, систему
повреждений — более правдоподобной, а “поведение” всех видов оружия — более
похожим на их реальные аналоги (о том, как все это сделать, уже сообщалось).
Надеюсь, ваш мод получится играбельным и интересным.
|