Вскрытие по-генеральски. Command & Conquer: Generals, часть 1
Command & Conquer: Generals сильно отличается от предыдущих игр серии. Полигональная графика, несколько нестандартный геймплей. Но у игрового движка по-прежнему открытая архитектура, позволяющая создавать самые разнообразные моды с новыми кампаниями, юнитами, строениями и оружием. В двух статьях цикла мы расскажем о том, как создать мод, максимально непохожий на оригинальную игру. Предмет изучения В корневой директории игры находится несколько папок и файлов. Нас интересуют только файлы с расширением .big — это архивы, в которых хранятся игровые ресурсы и текстовые файлы с параметрами игры. Для работы с архивами вам понадобится утилита FinalBIG (дистрибутив программы находится на нашем компакте ). Запустив программу, выберите пункт меню File/Open и укажите путь к архивному файлу, с которым вы хотите работать. В левой части программного окна появится полный список файлов, составляющих архив. Кликните левой кнопкой мыши на название заинтересовавшего вас файла — в правой части окна отобразится содержимое. Чтобы извлечь из архива выбранный файл, воспользуйтесь пунктом меню Edit/Extract , указав затем путь файла для распаковки. Чтобы вытащить из архива сразу все его содержимое, выберите пункт Edit/Extract All. Для удаления файла из архива используйте пункт Delete File , для переименования файла — Rename File , для добавления файла в архив — Add File , для запаковки директории — Add Directory (все эти команды вызываются из меню Edit ). Не забывайте сохранять изменения в архиве (для этого используйте пункт меню File/Save ) всякий раз, когда вы добавляете в него (или удаляете) новые файлы и папки. При работе с игровыми архивами совсем не обязательно перезапаковывать их после внесения изменений во входящие в них файлы. Можно просто распаковать все файлы нужного вам архива и положить их в игровую директорию в те же каталоги, в которых они лежали в архиве. Например, если вы отредактировали файлы из архива INI.big , разместите их по адресу _Каталог игры\Data\INI_. При этом сам архив, файлы которого вы изменяли, следует из директории с игрой удалить. Ресурсы Рассмотрим содержимое основных big-файлов. Архив Maps.big содержит все игровые карты в формате .map. Вы можете открыть и отредактировать их в редакторе карт Command & Conquer Generals World Builder. О том, как работать в редакторе, можно узнать из цикла статей “Сам себе генерал” , который стартовал в пятом номере “Игромании” за этот год. Архивный файл Textures.big содержит текстуры (а также интерфейсные картинки), записанные в формате .dds. Работать с ними нужно с помощью пакета утилит DXT Tools (программа лежит на нашем компакте ). О том, как пользоваться данным набором, мы уже писали в статьях по вскрытию Command & Conquer: Renegade (шестой номер “Игромании” за 2002, смотрите статью на нашем компакте в разделе " ИнфоБлок "). В архивах Audio.big и AudioEnglish.big вы найдете звуковые эффекты, записанные в формате .wav. Архивы Speech.big и SpeechEnglish.big содержат файлы с речью персонажей (тоже в формате .wav ). В файле Music.big располагаются музыкальные композиции в формате .mp3. Архив W3D.big таит в себе модели игровых персонажей и объектов в виде w3d -файлов. Последние могут быть просмотрены и отредактированы с помощью программы GMAX (вы найдете ее на компакте пятого номера “Игромании” за 2002) или в графическом пакете 3DMax. Вы можете редактировать звуковые файлы игры, подставлять новые музыкальные треки, извлекать из игры понравившуюся вам музыку, переделывать на свой вкус имеющиеся в игре карты, перерисовывать текстуры и изменять внешний вид моделей. Броня бывает разной Перейдем к детальному рассмотрению отдельных архивов. Начнем с файла INI.big , который содержит файлы с расширением .ini. Это текстовые файлы, их можно просматривать и редактировать в любом текстовом редакторе. Файлы *.ini содержат разнообразные игровые параметры, редактирование которых позволит существенно преобразовать игровой процесс.
- Теперь пехота может успешно противостоять тяжелой технике
Изучим самые интересные ini-файлы. Armor.ini содержит атрибуты, характеризующие уязвимость того или иного типа брони. Внося изменения в данные параметры, можно в корне модифицировать весь геймплей. Танк, разваливающийся на части после второго попадания в него из простого автомата. Или пехотинец, которого не берет и ракетный залп из БТРа. А ведь подобных эффектов можно добиться, всего лишь переписав пять-шесть строчек кода! Главное — не забывать про игровой баланс. Файл подразделяется на множество разделов, каждый из которых начинается со строки вида Armor X (X — название типа брони) и заканчивается словом End. В начале файла помещается полный список параметров, которые встречаются в тексте (строки в этом списке помечены знаком " ; ". Это обозначает их как комментарии для пользователя; игрой они не учитываются). В каждом разделе файла есть параметры вида Armor = X N% , где X — название типа атаки, N — значение (повреждение брони данного юнита от атаки, заданной параметром X, в процентах). Если N равно нулю, юнит не чувствителен к данному виду атаки. Обратите внимание на то, что в каких-то разделах таких атрибутов будет меньше, в каких-то — больше. Можно переносить параметры из одного блока в другой, создавая для того или иного юнита новые критерии уязвимости. Давайте разберемся, за что какой параметр отвечает. EXPLOSION — взрыв, производимый ракетами при воздушном ударе. CRUSH — повреждение, наносимое броне пешего воина, попавшего под гусеницы танка. Данный атрибут присутствует только в разделах, соответствующих пехотинцам. ARMOR_PIERCING — танковая стрельба. SMALL_ARMS — атака юнитов-сборщиков ресурсов. GATTLING — стрельба, производимая китайским танком Gattling Tank или воином на джипе (юнит Technical) у GLA. RADIATION — действие радиации. FLAME — повреждения, наносимые пожаром. LASER — урон от лазерного оружия. SNIPER — пуля снайперской винтовки. POISON — ядовитые вещества. PARTICLE_BEAM — атака юнита Particle Beam (армия США). KILL_PILOT — атака юнита Jermen Kell (GLA), специализирующегося на уничтожении пилотов машин. MELEE — повреждения в рукопашной схватке. INFANTRY_MISSILE — поражение ракетой, выпущенной из базуки пехотинца. AURORA_BOMB — атака бомбой, брошенной бомбардировщиком Aurora Bomber. LAND_MINE — взрыв мины. JET_MISSILES — повреждения от ракеты, пущенной с самолета. STEALTHJET_MISSILES — атака истребителя “Стелс” (Stealth Jet). MOLOTOV_COCKTAIL — взрыв “коктейля Молотова”. COMANCHE_VULCAN — один выстрел из авиационного пулемета на вертолете “Команч”. Исправляя значения приведенных выше параметров, нетрудно полностью изменить систему повреждений в игре. Вариантов — множество. Мне, например, показалось, что в игре слишком слабая пехота, и я усилил броню пехотинцев (HumanArmor). Кампании Файл Campaign.ini отвечает за игровые кампании. Если создать свои карты в редакторе, то, изменяя параметры данного файла, можно объединить карты в кампании с уникальным сюжетом и озвучкой. Получатся даже не моды, а полноценные аддоны. Кстати, разработчики этого не предусматривали. Campaign.ini включает в себя четыре раздела, каждый из которых содержит параметры, связанные с той или иной кампанией (исключение составляет лишь первый раздел, отвечающий за тренировочную миссию). Название каждого блока выглядит следующим образом: Campaign X , где X — название кампании. Все разделы файла (кроме первого) состоят из семи подразделов, каждый из которых отвечает за определенную миссию кампании и имеет название вида: Mission MissionX , где X — номер миссии. В начале любого подраздела вы встретите следующие атрибуты: CampaignNameLabel CAMPAIGN : — название кампании, отображаемое в игре. FirstMission — начальная миссия кампании. Здесь вы должны указать название подраздела, соответствующего первому заданию. FinalVictoryMovie — победный ролик, завершающий кампанию. Укажите здесь название bik -файла с роликом (без учета расширения), который должен находиться по адресу: Каталог игры\Data\Movies. Кстати, раз уже заговорили о заставках: просматривать их можно с помощью пакета утилит RAD Video Tools (берите его с нашего компакта ). В подразделах файла, соответствующих тем или иным миссиям, находятся следующие параметры: Map — название карты, на которой разворачиваются события данной миссии. Карта должна находиться в архиве Maps.big , расположенном в игровой директории. NextMission — миссия, следующая за текущей. Укажите здесь название раздела нужной вам миссии. IntroMovie —вступительный ролик. BriefingVoice —озвучка брифинга перед миссией. Указанный здесь звуковой файл должен лежать в архиве Audio.big. Обратите внимание на то, что при указании имени файла расширение прописывать не нужно. Далее следуют параметры вида UnitNamesX OBJECT:Y , где Y — название юнита, изображение которого будет показываться в правом верхнем углу экрана при загрузке миссии, а X — число от 0 до 2 , задающее месторасположение юнита (чем больше цифра, тем правее будет находиться картинка с юнитом). VoiceLength — продолжительность “голосового” брифинга (в секундах). Если время брифинга превышает процесс загрузки миссии, игра начинает загружаться только по окончании брифинга. Теперь вы можете приступать к созданию собственных кампаний, заменяя ими оригинальные. Все, что для этого нужно — это сделать несколько подходящих карт, объединенных общим сценарием, переозвучить брифинг и, что называется, слить воедино озвучку и отдельные карты в полноценную кампанию, редактируя описанные выше параметры. Общие настройки Еще один файл, содержащий множество важных игровых параметров, — GameData.ini. Многие из параметров, прописанных в этом файле, могут быть настроены через игровое меню. О них мы говорить не будем. Рассмотрим список характеристик, значения которых изменяются только через файл GameData.ini. Изменяя значения данных параметров, вы сможете преобразовать геймплей игры и визуальный ряд. Можно заставить камеру “смотреть” на поле боя под любым углом. Хотите стратегию в top-down перспективе — не проблема, хотите практически плоский экшен — всегда пожалуйста. Вам не нравится, что ресурсы на какой-либо карте разрешено добывать только около своей базы и не получается своровать руду у противника?! Это поправимо. И вот харвестеры уже несутся в тыл врага, чтобы похитить драгоценный полезный ископаемый. А на вырученные деньги вы сможете построить лишнее здание по производству танков. Правда, это может снизить скорость производства некоторых видов вооружения… Можно даже изменять погоду на картах. Например, как вам перспектива поиграть на карте, где растут пальмы и идет… снег?! UseTrees — данный показатель определяет, будут ли на игровых картах расти деревья. Yes — да, No — нет (эти же значения принимают все параметры файла, предполагающие выбор типа “да/нет”). Поставив значение данного параметра на No и заменив текстуры ландшафта на подходящие текстуры зданий, вы можете перенести действие некоторых миссий в какое-либо помещение (например, на военную базу). UseCloudMap — определяет, будут ли отображаться облака в небе и их тени на земле. Если у вас слабый компьютер, то, поставив значение на No, можно получить заметную прибавку в скорости.
- Посредством редактирования настроек камеры можно сотворить “классическую” RTS с top-down перспективой
ShowObjectHealth — отображение полоски “жизней” у юнитов рядом с их моделями. HideGarrasionFlags — скрывать флаги у строений, указывающие на принадлежность последних к той или иной группировке. Далее следует ряд параметров камеры. CameraPitch — угол наклона камеры. Выставьте 90, и вы будете играть в стратегию с видом сверху (очень похожую на Total Annihilation ). При этом желательно увеличить значение атрибута CameraHeight , отвечающего за высоту расположения камеры над полем боя. CameraYaw — отклонение камеры от основного направления движения. CameraHeight — высота, на которой находится камера, когда вы начинаете игру. MaxCameraHeight — максимальная высота, на которой может находиться камера (высоту расположения камеры можно регулировать, нажимая соответствующие клавиши). Советую поднять значение этого показателя: увеличится поле обзора и, соответственно, удобнее будет командовать войсками. Но сильно повышать значение параметра не стоит: при максимальном отдалении камеры будут плохо видны юниты малых размеров. __ MinCameraHeight — минимальная высота расположения камеры. Уменьшив значение данного параметра, вы сможете в деталях рассмотреть поле боя. Но не злоупотребляйте — модели при сильном приближении выглядят угловато, да и толку от подобного расположения камеры немного. CameraAdjustSpeed — быстрота приближения/отдаления камеры (в условных единицах). Существенно увеличивать данный показатель можно только на достаточно быстрых машинах. HistoricDamageLimit — время (в миллисекундах), в течение которого на земле будут оставаться следы от какого-либо мощного оружия, использованного игроками. Поднимая значение данного параметра, вы делаете игру более правдоподобной и эффектной, но увеличиваете нагрузку на процессор. Так что чрезмерно повышать значение атрибута не стоит — особенно если у вас не слишком мощный компьютер. Gravity — гравитация. Судя по комментариям разработчиков, в ранней версии игры в качестве значения данного параметра использовалось число -32.0, и, как они сами же пишут, это значение является наиболее подходящим для нашей планеты. Почему разработчики в конце концов отказались от него, остается загадкой. TimeOfDay — время суток, когда разворачиваются военные действия. Возможные варианты: MORNING (утро), AFTERNOON (день), EVENING (вечер), NIGHT (ночь). Weather — погода. Возможные значения: NORMAL (без осадков), SNOW (снег). Некоторые карты при различных погодных условиях выглядят совершенно по-разному. BuildSpeed — скорость строительства зданий и производства юнитов (в условных единицах). Меняя значение данной характеристики, вы, по сути, меняете скорость игры. MinDistFromEdgeOfMapForBuild — минимальное расстояние от края карты, на котором вы можете строить здания. Значение данного параметра, как и всех остальных атрибутов, определяющих расстояние от одного объекта до другого (или высоту чего-либо), задается в футах. SupplyBuildBorder — максимально возможное расстояние от источника ресурсов до здания, куда они доставляются. Увеличив данный параметр, вы сделаете из обычной игры настоящую гонку за ресурсами, когда за очередной порцией руды придется отправлять сборщики через всю карту в тыл противнику. AllowedHeightVariationForBuilding — максимальная высота, на которой вы можете строить здания. Подняв значение данного параметра, скажем, до отметки 20, вы разрешите игрокам строить базы в горах. MinLowEnergyProductionSpeed — минимальная скорость строительства зданий и производства войск при малом количестве электроэнергии. MaxLowEnergyProductionSpeed — максимальная скорость строительства сооружений и производства войск при малом количестве энергии. MultipleFactory — увеличение скорости производства определенного рода юнитов, если есть несколько зданий “инкубаторов”. Если установить для данного атрибута значение от 0 до 1 (например, 0.5), то эффект будет противоположным. То есть: чем больше “инкубаторов” построено, тем медленнее в каждом из них производятся юниты. Уж слишком велика выгода от строительства нескольких одинаковых строений: вы получаете не только дополнительные постройки для производства определенного типа юнитов, но и прибавку в скорости их изготовления. Если же сделать так, чтобы скорость производства юнитов при этом не росла, а падала, игрокам будет не столь выгодно строить несколько одинаковых сооружений. В зависимости от ситуации им придется выбирать, что приоритетнее: одновременная сборка нескольких юнитов или же скорость постройки. RefundPercent — процент от цены постройки, который вам возвращается, когда вы продаете здание. Поставив значение 100, вы при демонтаже здания получите в казну полную его стоимость.
- Как видите, модели пехотинцев весьма угловаты. Но авторы умело скрыли это, не позволив нам слишком уж приближать камеру к земле
CommandCenterHealRange — максимальное расстояние от командного центра (Command Center) игрока до поврежденных юнитов, на котором юниты могут “лечиться”. Если значительно увеличить данный параметр, то ваши войска смогут улучшать здоровье даже в тылу вражеской базы. CommandCenterHealAmount — скорость пополнения “жизней” у поврежденного юнита, находящегося в радиусе “лечения” командного центра. Изменяя значение этой и предыдущей характеристик, вы можете регулировать сложность захвата базы соперника. MaxTunnelCapacity — максимальное количество юнитов, которое может одновременно пребывать в туннеле (здание Tunnel Network у GLA). StandardMinefieldDensity — плотность расположения мин на минном поле. Если сильно увеличить значение данного атрибута, то по минному полю не сможет пройти даже один пехотинец. StandardMinefieldDistance — величина минного поля. Чуть ниже в файле располагаются параметры, определяющие бонусы для юнитов при определенных условиях. Большинство параметров имеют вид WeaponBonus = X Y N , где X — условие, при котором юнит получает бонус, Y — характеристика воина, получаемая в прибавку, а N — значение (в процентах), определяющее, насколько этот бонус поднимет уровень указанной характеристики. Приведу список основных атрибутов (для краткости будем опускать WeaponBonus = из названия параметров): HORDE RATE_OF_FIRE — бонус к скорости стрельбы юнитов Red Guard, Tank Hunter и Battlemaster, состоящих в армии. Данный бонус доступен только китайцам. NATIONALISM RATE_OF_FIRE — бонус к скорострельности Red Guard, Tank Hunter и Battlemaster, который они получают, если вы провели апгрейд под названием Nationalism в здании Propaganda Center. ENTHUSIASTIC RATE_OF_FIRE — увеличение скорости стрельбы вышеперечисленных юнитов, находящихся в радиусе действия строения Speaker Tower. SUBLIMINAL RATE_OF_FIRE — прибавка к скорости стрельбы тех же воинов, находящихся в радиусе действия строения Speaker Tower, если вы ранее апгрейдили последнее (речь идет об исследовании Subliminal Messaging в строении Propaganda Center). GARRISONED RANGE — бонус к дальности стрельбы юнитов, находящихся в гарнизоне. GARRISONED DAMAGE — увеличение силы воинов, находящихся в гарнизоне. VETERAN RATE_OF_FIRE — прибавка к скорости стрельбы юнитов-ветеранов. VETERAN DAMAGE — прибавка к силе воинов-ветеранов. ELITE RATE_OF_FIRE — бонус к скорости стрельбы элитных юнитов. ELITE DAMAGE — увеличение силы элитных юнитов. HERO RATE_OF_FIRE — бонус к скорости стрельбы воинов-героев. HERO DAMAGE — прибавка к силе юнитов-героев. HealthBonus_Veteran — бонус к жизням воина-ветерана. HealthBonus_Elite — прибавка к жизням элитного юнита. HealthBonus_Heroic — бонус к жизням воина-героя. Корректируя значение перечисленных выше параметров, вы можете увеличивать или уменьшать скорость апгрейда ваших войск в зависимости от накопленного ими опыта. SOLO_AI_EASY RATE_OF_FIRE , SOLO_AI_NORMAL RATE_OF_FIRE , SOLO_AI_HARD RATE_OF_FIRE — скорость стрельбы юнитов компьютера на различных уровнях сложности. HumanSoloPlayerHealthBonus_Easy , HumanSoloPlayerHealthBonus_Normal , HumanSoloPlayerHealthBonus_Hard — живучесть юнитов компьютера на различных уровнях сложности. Регулируя данные значения, можно изменять сложность игры. DefaultStartingCash — сумма денег, которую игрок получает в начале миссии при игре в режиме Skirmish. FogOfWarOn — наличие “тумана войны”. Средства уничтожения Мы разобрались с базовыми игровыми параметрами. Изучим файл Weapon.ini , который буквально напичкан разнообразными настройками, связанными с оружием. Редактируя эти параметры, вы сможете полностью перевооружить свои войска и войска оппонентов. Обычные автоматы будут стрелять гранатами, базуки станут метать ракеты по прямой, танки — палить по врагу со скоростью “катюш”, а самый простой пехотинец будет вооружен не хуже бронетранспортера. Как и все остальные ini-файлы игры, Weapon.ini разбит на разделы, каждый из которых начинается с маркера Weapon X , где X — название оружия (заканчивается раздел словом End ), и отвечает за тот или иной вид вооружения. Разберем основные атрибуты, изменение которых может сильно преобразить геймплей. PrimaryDamage — урон, наносимый данным оружием (в единицах здоровья). PrimaryDamageRadius — радиус поражения снаряда, которым стреляет это оружие (в футах). ScatterRadiusVsInfantry — максимальная дистанция, на которой из данного оружия можно стопроцентно попасть по врагу. Стоит воякам отойти на большую дистанцию, как они начнут часто мазать. Если выставить большое значение данного параметра, то из простых пехотинцев получатся настоящие снайперы, попадающие по цели на другом краю карты. AttackRange — дальнобойность оружия (в футах). Даже самую примитивную пушку легко заставить бить на дальнюю дистанцию. MinTargetPitch — минимальное расстояние, на которое может стрелять данный вид вооружения. MaxTargetPitch — максимальное расстояние, на которое бьет данное оружие. DamageType — тип снаряда, которым стреляет данное оружие. Вот перечень основных типов зарядов: ARMOR_PIERCING — пуля, пробивающая броню, JET_MISSILES — ракеты, пущенные с самолета, EXPLOSION — взрыв, SMALL_ARMS — обычная пуля, LASER — лазер, FLAME — огонь. Как вам идея сделать танки, стреляющие огнем? Вертолеты, бьющие бронебойными пулями? Или простых пехотинцев, вооруженных лазерами?.. DeathType — данный атрибут определяет, как умрет воин, убитый из данного оружия: NORMAL — обычной смертью, BURNED — сгорит, EXPLODED — взорвется, LASERED — будет испепелен лазером. Изменяя этот параметр, можно добиться весьма забавных эффектов. Например, если для лазерного оружия поставить вид смерти “взрыв”, то в бою это будет выглядеть весьма забавно. WeaponSpeed — скорострельность (в условных единицах). Ракетный танк, палящий со скоростью пулеметного джипа, — мечта любого маньяка-стратегофила. WeaponRecoil — сила отдачи. Выставьте, к примеру, такое значение, чтобы даже отдача от простенького автоматика сбивала пехотинцев с ног. FireSound — звук стрельбы из данного орудия убийства. Нам не удалось изменить данный параметр так, чтобы выстрел из одного оружия хорошо смотрелся со звуком от другого выстрела. Не исключено, что это удастся вам. Экспериментируйте. ClipSize — размер обоймы у данного ствола. У оружия, не использующего обойму, здесь стоит 0. Если хотите сделать оружие с небольшой обоймой скорострельным, то этот параметр надо обязательно увеличить. ClipReloadTime — время (в миллисекундах), отводимое на перезарядку оружия. Редактируя значения всех этих параметров, вы можете изменить до неузнаваемости оригинальные виды вооружения. А можно… Создать совершенно новое оружие! Это нетрудно. Надо сделать копию раздела, соответствующего оружию, наиболее схожего с тем, которое задумали, и вставить ее между двумя любыми разделами файла. Теперь придайте вставленным параметрам подходящие значения, и оружие готово. Осталось только вооружить им какой-либо юнит. Чтобы сделать это, откройте файл FactionUnit.ini и в соответствующем юниту разделе пропишите новое оружие в группе параметров WeaponSet. *** Мы перерисовали интерфейс, научились изменять положение камеры, прописывать новые характеристики для юнитов и создавать новые виды оружия. Этого достаточно, чтобы сделать игровую модификацию. Но это еще не все. В следующем номере “Игромании” мы опубликуем материал о том, как изменять систему рангов юнитов, как настраивать по своему усмотрению апгрейды зданий и — внимание — как сделать доступными скрытые апгрейды, которые разработчики в последний момент исключили из игры.