Солдаты будущего, часть 1. Новая игра на движке Call of Duty
Сталинградская битва. Кипит ожесточенное сражение. Слышны выстрелы, раздаются мощные взрывы, в воздух поднимаются клубы густого дыма, свист пуль не смолкает ни на секунду… Напряжение нарастает. Постепенно численный перевес переходит на сторону фашистов, и они уже готовятся окружить немногочисленный отряд русских. Когда, казалось бы, исход битвы предрешен, на горизонте начинает вырисовываться танк, а над ним, в небе, еле виден транспортный самолет. На первый взгляд, подкрепление несущественное, особенно если учесть, что у немцев достаточно военной техники. Но вот танк приближается, и причем с молниеносной быстротой, ведь это… танк на воздушной подушке! Одним выстрелом он сносит значительную часть немецкого отряда пехотинцев. Еще один выстрел — и фашистские армейские машины взлетают в воздух. В этот же момент с воздуха высаживается группа советских десантников и медиков. Последние начинают лечить раненых, тогда как первые, вооружившись лазерными винтовками, открывают огонь по фашистам и в считанные минуты добивают противника. Говорите, такого не бывает? В игре, которую мы сегодня создадим на основе Call of Duty, бывает, и еще как!
Рис. 1. Новый вид экрана героя. Теперь при ранении на экране будут появляться пятна крови.
Обработка Call of Duty, как и всякая другая игра на движке Quake III , имеет в корневом каталоге pk3 -файлы (здесь они находятся в подкаталоге \Main ). Они являются обычными zip -архивами, просто переименованными, и содержат все основные файлы с игровыми настройками. Для работы с этими архивами подойдет любая современная программа-архиватор. Познакомимся с каждым из местных архивов. Первый из них — pak0.pk3 — набит под завязку всевозможными конфигурационными файлами (о некоторых из них речь пойдет позже), а также рядом графических файлов. Последние в Call of Duty представлены тремя форматами: jpg , tga и dds. Если с первыми двумя, думаю, все понятно (для работы с ними вполне хватит Photoshop ), то последний тип файлов является более редким. Впрочем, и он нам не в диковинку: многие разработчики игр используют его для хранения графики в своих творениях. Для конвертирования dds -файлов в удобоваримый tga -формат используйте набор утилит DXT Tools (его вы найдете на нашем диске ). Если вы регулярно читаете статьи “Вскрытия”, то уже хорошо знаете, как работать с этой программой. Остальным же скажу, что работа с ней осуществляется через командную строку следующим образом.
Рис. 2. Судя по всему, владелец этой машины тоже был читателем “Мании”…
Чтобы перевести рисунок из 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 (звуковые эффекты,
Рис. 3. Перерисовке поддается практически вся игровая графика, даже загрузочные картинки миссий.
издаваемые транспортными средствами), \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 размещается множество скриптовых файлов. Если вы имеете опыт работы со скриптами или знакомы с основами программирования, можете поковыряться в этих файлах. Немало интересного кроется здесь за многочисленными строками кода.
Рис. 4. Все игровые тексты легко правятся в str-файлах, в том числе — и надписи на экране героя.
Что касается еще одного архива — 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 — немецкой полугусеничной машине,
Рис. 5. В моей модификации танк можно уничтожить не только ракетами, но и гранатами.
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 — уязвимость от ракет.
Рис. 6. Вместимость обоймы винтовки увеличена путем редактирования параметра clipSize.
maxSpeed — максимальная скорость, которую может развивать средство передвижения. Эта характеристика, также как и все другие, связанные со скоростью, измеряется в километрах в секунду. accel — ускорение машины или, иначе говоря, быстрота разгона до максимальных скоростей. rotRate — максимальный угол поворота колес (этот показатель, также как и все остальные настройки, задающие угол расположения чего-либо, измеряется в градусах). rotAccel — ускорение, которое машина получает при повороте. Этот и предыдущий показатели определяют поворотливость транспортного средства. Разработчики поставили сюда нуль всем средствам передвижения. Логичнее будет прописать сюда отрицательное число (не советую ставить число ниже 5) — теперь машина, как и положено, будет слегка терять скорость на поворотах. maxBodyPitch — максимальный угол наклона корпуса машины. maxBodyRoll — максимальный угол вращения корпуса транспортного средства. От значения этой характеристики во многом зависит, насколько сильно машину будет заносить на поворотах. collisionDamage — урон от столкновения средства передвижения с каким-либо массивным объектом. collisionSpeed — минимальная скорость, при которой данный вид транспорта, столкнувшись с другим объектом, “теряет” часть своей брони (эта часть задается предыдущим параметром). suspensionTravel — жесткость подвески машины.
Рис. 7. В нашем моде парочка точных ударов прикладом способна сразить любого врага.
turretWeapon — оружие, которым оборудовано транспортное средство (если таковое отсутствует, здесь вообще ничего не указывается). Сюда прописывается название файла, содержащего параметры этой пушки (все “оружейные” файлы собраны в директории \weapons архива pak0.pk3 — о них мы поговорим чуть позже). Подменяя значение характеристики, вы можете перевооружать средства передвижения и даже оборудовать турелями те из них, которые не имеют никакого оружия. turretHorizSpanLeft — максимальный угол поворота пушки влево (эту и четыре следующих настройки имеет смысл менять, только если у данной машины наличествует какое-либо оружие, то есть задано значение предыдущего атрибута). turretHorizSpanRight — максимальный угол поворота пушки вправо. turretVertSpanUp — максимальный угол подъема турели. turretVertSpanDown — максимальный угол наклона пушки вниз. turretRotRate — скорость поворота турели. Далее следует ряд “звуковых” параметров транспортных средств. В значении всех этих характеристик, кроме последней, вы должны прописывать название нужного вам wav -файла (расширение указывать необязательно) из директории \sound\vehicles архива pak2.pk3. lowEngineSnd — рев мотора машины. highEngineSnd — усиленный рев мотора.
Рис. 8. С помощью добавленной в игру портативной аптечки вы можете в любое время лечить своих напарников.
turretSpinSnd — звук, раздающийся при повороте пушки (только для оборудованного оружием транспорта). engineSndSpeed — быстрота проигрывания звука, соответствующего реву мотора. Чем больше заданное здесь число, тем выше скорость. Умелое редактирование всех вышеперечисленных атрибутов позволит вам переделать имеющиеся в игре транспортные средства на новый лад. Как вы, наверное, уже заметили, изменению поддается буквально все: от скоростных качеств машины до ее вооружения. Правка характеристик средств передвижения поможет вам добавить в игру новые уникальные транспортные средства, поставив их на место оригинальных. Правда, для этого вам также придется подкорректировать внешний вид машин, обращаясь к их скинам (напомню, что все “шкурки” вы найдете в директории \skins архивов pak3.pk3 и pak4.pk3 ). Создавать можно практически любые средства передвижения, благо параметров у нас имеется достаточно. Хотите покататься на гоночных автомобилях, развивающих скорость до 300 километров в час? Легко! Просто увеличьте значения показателей maxSpeed и accel у той же BMW. И не забудьте присвоить новоявленной “тачке” подходящий облик (естественно, это лишь самая простейшая схема создания высокоскоростного средства передвижения, которую вам крайне желательно дополнить самостоятельно). Лично я оборудовал игровые карты машинами будущего, в частности — танками на воздушных подушках, быстрыми и мощными. Для этого достаточно взять один из представленных в игре танков, подработать должным образом его “шкурку”, существенно улучшить скоростные качества (напомню, что за это отвечают атрибуты maxSpeed и accel ), а также усовершенствовать его пушку, редактируя соответствующий ей файл из папки \weapons (об “оружейных” файлах читайте в следующей главе). Работы над футуристическим модом, о котором мы заговорили выше, вступают в финальную стадию. Пушки и стволы Следующая папка из архива pak0.pk3, которая нам пригодится, называется \weapons и хранит в себе файлы с настройками оружия, в том числе и оружия, установленного на транспортные средства (ему соответствуют файлы с окончанием _Turret ). Директория разбита на два подкаталога: \sp и \mp. Первый из них соответствует оружию для одиночного режима игры, второй — мультиплеерным средствам уничтожения. В обоих каталогах представлены файлы, наполненные примерно одинаковым набором параметров, страдающие отсутствием расширения и схожие по структуре с разобранными выше “транспортными” файлами (только здесь файлы начинаются с сочетания *WEAPONFILE* ). Вот основные атрибуты, с которыми вы столкнетесь в файлах из папок \sp и \mp. **
Рис. 9. С таким сильным приближением целиться в неприятелей стало куда проще.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 — максимальный угол наклона ствола по вертикали.
Рис. 10. Вот таким симпатичным прицелом теперь оснащен “кольт”.
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 — наклон вправо при движении в приседе.
Рис. 11. Стрелять из пистолета, держа его сверху, весьма удобно, когда враг прячется от вас за ограждением.
Далее следуют девять параметров, повторяющих последние во всем, кроме начальной части названия. Наши “новые знакомые” обладают именами, начинающимися со слова 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, а также выясним, как доработать систему повреждений и полностью русифицировать игру.