31 мая 2006
Обновлено 17.05.2023

Современные войска средневековья. Age of Empires III

Современные войска средневековья. Age of Empires III - изображение обложка

Крепость русских под обстрелом французской артиллерии. Вокруг клубится густой дым. С треском рушатся стены; в образовавшиеся проемы врываются французские войска. Впереди копейщики, они расчищают путь мушкетерам, которые добивают защитников крепости и дают залп по мирным жителям.

Кажется, что русским пора поднимать белый флаг. Но тут из небольшого здания вырывается десяток невиданных ранее юнитов… вооруженных автоматами! Французские мушкетеры валятся замертво, а к их артиллерии, оставшейся без прикрытия, пробирается русский подрывник в сопровождении нескольких копейщиков и закладывает взрывчатку. Три, два, один… Пушки противника с грохотом взлетают на воздух.

Не поймете, что это за война? Да всего лишь сцена из мода для Age of Empires III , который мы сегодня и сделаем.

Тяготы подготовки

Вскрытие мы начнем с изучения основных каталогов. Беглого взгляда достаточно для того, чтобы понять — разработчики не стали глубоко прятать игровые ресурсы (запакована только графика). Так что долго возиться с подготовкой данных к модификации не придется. Весь наш рабочий материал составляют файлы (преимущественно текстовые), рассортированные по подкаталогам главной игровой директории.

Нам интересны только несколько папок. А именно:

\avi — содержит используемые в игре ролики в формате BIK (для их просмотра понадобится набор утилит RAD Video Tools );

\Ai — несет в себе файлы с характеристиками AI;

\Campaign — здесь вы найдете файлы с параметрами игровых кампаний;

\data — файлы с игровыми настройками;

\Fonts — файлы с атрибутами игровых шрифтов;

\Sound — звуковые эффекты и музыка;

\Chats — реплики персонажей.

Папки Ai , Campaign и data заполнены файлами формата XML , которые можно править в стандартном «Блокноте». XML-файлы устроены аналогично данным формата HTML. Большинство файлов с игровыми скриптами состоит из разделов (блоков), которые выглядят следующим образом: __

< X …>

< /X>

Верхняя строка обозначает начало раздела, нижняя — завершение, X — название. Вместо первого многоточия могут стоять дополнительные характеристики (к ним мы еще вернемся, когда будем разбирать конкретные файлы), относящиеся к данному разделу. Они помогают отличить один блок от другого, ведь в пределах файла все заглавные строки разделов, как правило, несут в себе одни и те же значения X (например, слово Unit ). На месте второго многоточия обычно стоят разного рода параметры, реже — подразделы или перечни атрибутов, которые при этом обязательно объединены каким-то общим признаком.

Отдельные параметры и подразделы оформляются так же, как главные блоки. Единственное отличие: рядом с атрибутами (на месте второго троеточия) обычно стоят их значения, плюс — вся информация пишется в одной строке (например, так: < LOS>0, где LOS — название характеристики, а 0 — ее значение). Сегодня мы займемся созданием новых юнитов, изменяя характеристики файла proto.xml из каталога data.

Разберем подробнее его структуру. Каждый блок в proto.xml содержит характеристики определенного объекта. Не только построек и юнитов, но и снарядов, которыми они стреляют. Также в файле имеются блоки, описывающие природные ресурсы и другие элементы, встречающиеся на карте. Каждому из объектов соответствует свой раздел.

Каждому юниту или другому боевому элементу соответствует несколько блоков UnitType. Если в значении одной из настроек с названием UnitType стоит слово Projectile , значит, в нем содержатся параметры снаряда, если слово Unit , значит, там параметры юнита, если Building — параметры строения, Unattackable — параметры объекта на карте, который вы не в состоянии атаковать (например, флаг), Nature — параметры природного ресурса. Название объекта всегда прописано в начальной строке раздела, следом за словом name и знаком равенства.

Режем по живому

Рассмотрим характеристики юнитов и строений, которые понадобятся нам при создании модификации. Сначала ознакомимся с «универсальными» атрибутами — теми, что встречаются как у юнитов, так и у зданий.

DisplayNameID — идентификационный номер строки с названием объекта. Чтобы понять, какое слово содержит данная строчка, обратимся к файлу stringtable.xml из директории data. С помощью функции Поиск найдете идентификационный номер. В строке с этим числом вы увидите реальное название объекта.

ShortRolloverTextID — идентификационный номер строчки с подсказкой (содержит краткую информацию о юните), которую вы видите в игре при наведении курсора на воина. В файле stringtable.xml эта строка обычно стоит перед названием боевой единицы. Обратите внимание на то, что игра поддерживает кириллицу, значит, ее можно без труда русифицировать (хотя проще, конечно, дождаться официальной локализации).

PopulationCount — параметр, определяющий, сколько слотов занимает юнит в вашем поселении.

InitialHitpoints — начальное число hit points («жизней») юнита/строения.

MaxHitpoints — максимальное число hit points.

LOS — видимость. Чем выше значение параметра, тем дальше от юнита отступает туман войны.

Cost — стоимость производства юнита/строения. Описывается этот параметр следующим образом: < Cost resourcetype =‘X’>N. X — название затрачиваемого ресурса ( Wood — дерево, Food — пища, Gold — золото), а N — его количество. Поскольку для создания боевой единицы нередко требуется несколько разных ресурсов, характеристика может повторяться (каждый раз с новым значением X).

AllowedAge — эпоха, начиная с которой вы можете производить данную боевую единицу. Возможные значения: 0 — с первой эпохи, 1 — со второй, 2 — с третьей, 3 — с четвертой.

Armor — броня. Если этот параметр отсутствует, значит, брони у объекта нет. Показатель задается следующим образом: < Armor type =X’ value =‘N’>, где X — тип брони, а N — ее крепость. Броня бывает следующих типов (X): Ranged — защищает от выстрелов, Siege — снижает урон от осадной техники (актуально в первую очередь для зданий), Hand — уменьшает потери от ударов холодным оружием.

BuildBounty — опыт за производство данного юнита/строения.

Bounty — опыт, начисляемый игроку, когда данный юнит погибает.

ProjectileProtoUnit — снаряд, которым стреляет данный юнит или строение. Этот параметр представляет собой название раздела, где прописаны параметры снаряда.

UnitAIType — поведение юнита. Основные значения: Passive (пассивное), Civilian (мирное), HandCombative (ближний бой), RangedCombative (дальний бой). Последние два варианта определяют агрессивную модель поведения. В случае с HandCombative боец будет стремиться сблизиться со своими противниками, дабы атаковать их холодным оружием. Если же прописать RangedCombative, то солдат, наоборот, постарается держаться от врагов подальше. При активированном параметре HandCombative поселенцы начинают нападать на врага.

Разберем самые важные параметры юнитов:

MaxVelocity — максимальная скорость ходьбы.

MaxRunVelocity — максимальная скорость бега.

TurnRate — быстрота поворота.

Для зданий же основные характеристики следующие:

BuilderLimit — максимальное количество зданий данного типа, доступных для постройки. Увеличивая значение этого показателя в разделе House , можно повысить население городов и деревень.

GathererLimit — число поселенцев, которых вы можете отправить на сбор ресурсов в данном сооружении.

Подрывник

Добавим в игру новые боевые единицы. Первым новобранцем станет подрывник. Создавать его с нуля — дело чрезвычайно хлопотное. Поэтомусделаем подрывника из гренадера, изменив всего несколько характеристик.

Первым делом отыщем в файле proto.xml раздел с начальной строкой < Unit id =‘241’ name =‘Grenadier’>, он соответствует гренадеру. Начнем с изменения настроек MaxVelocity , MaxRunVelocity и TurnRate. Их значения надо исправить на 2 , 4 и 14 соответственно. В результате подрывник будет бегать медленней гренадера (это логично — все-таки он тащит на себе мощную взрывчатку). Чтобы подрывник приносил вам больше очков опыта, повысьте значения параметров Bounty и BuildBounty до 25.

Настройке AllowedAge присвоим значение 3 — юнит можно будет нанимать только в индустриальной эпохе (слишком уж он силен для ранних веков). Ослабим немного здоровье воина, прописав в параметрах InitialHitpoints и MaxHitpoints значение 180. Чтобы повысить стоимость юнита, найдите две строчки, начинающиеся со слова Cost , и пропишите в них значения 150 и 90.

Снарядим подрывника взрывчаткой. Атакующие способности юнита прописаны в последних подразделах блока (они начинаются с параметра ProtoAction ). Каждая из них описывает только один вид атаки. Нас интересуют подразделы, в которых значения показателя Name выглядят как BuildingAttack , DefendRangedAttack , StaggerRangedAttack , VolleyRangedAttack. Данные блоки соответствуют дальнобойным видам атаки.

Первым делом изменим значение характеристики Damage на 324 (для первого из четырех показателей) и 96 (в трех остальных случаях). Урон от взрыва гранаты возрастет в 6 раз. Параметру DamageArea следует прописать значение 15 , в результате радиус взрыва увеличится в 5 раз.

Частота, с которой юнит может бросать гранату, определяется показателем ROF. Обратите внимание на то, что чем выше значение атрибута, тем больше временной промежуток (задается в секундах) между бросками. Поскольку наш солдатик вооружен мощнейшим оружием, зададим этому атрибуту значение 25 : установка взрывчатки будет занимать почти полминуты.

Сведем до минимума максимальную дальность броска взрывчатки (она ведь немало весит). Установить ее можно будет только рядом с самим юнитом: значение атрибута MaxRange нужно уменьшить до 2.

Добавим бомбе таймер. Временной интервал между запуском и взрывом снаряда можно изменить в разделе со следующей начальной строкой: < Unit id =‘6’ name =‘Grenade’>. Поскольку гранатами в игре вооружен один лишь гренадер, вы можете свободно править содержимое этого блока без боязни нарушить игровой баланс. В данном случае нас интересует настройка Lifespan. Определим ей значение 10 , дабы дать возможность юниту успеть отбежать от места взрыва.

Наконец, переименуем воина. В этом вам поможет файл stringtable.xml из папки data. Ищем в нем строку < String _locID =‘22958’>Grenadier и вместо слова Grenadier указываем « Подрывник ». Чтобы исправить текст подсказки, всплывающей при наведении курсора на юнита, обратимся к предыдущей строчке файла stringtable.xml. В ней можно прописать что-нибудь вроде « Закладывает мощные взрывчатки, уничтожающие вражеские сооружения и войска ».

Новый юнит готов. Нанимать его можно только в индустриальной эпохе, стоит вояка недешево, зато вооружен мощнейшим оружием и приносит много опыта.

Автоматчик

Второй юнит, которого мы вставим в игру, — автоматчик. Найдем в файле proto.xml блок, начинающийся со строки < Unit id =‘214’ name =‘Musketeer’>. В оригинале этот раздел посвящен мушкетеру, на место которого мы и поместим автоматчика. Снизим скорость юнита, уменьшив значения атрибутов MaxVelocity , MaxRunVelocity и TurnRate до 3 , 5 и 16. Стоимость обучения доведем до 100 единиц пищи и 75 монет. В верхней строке с параметром Cost указываем число 120 , в нижней — 75.

Ослабим немного зрение бойца, чтобы он не был слишком уж сильным. В этом нам поможет показатель LOS (ставим значение 14 ). Броню лучше укрепить, для этого в строке < Armor type =‘Hand’ value =‘0.2000’> число 0.2000 заменим на 0.25. Исправим значение атрибута AllowedAge на 3 , чтобы юнит можно было нанимать только в последней эпохе. Показателям Bounty и BuildBounty присвоим значение 30 — автоматчик даст больше опыта.

Настало время научить солдата стрелять очередями. Для этого найдите подраздел ProtoAction и параметры Name : DefendRangedAttack , StaggerRangedAttack и VolleyRangedAttack. Все эти блоки соответствуют огнестрельным атакам. В каждом из них значение характеристики ROF (определяет скорострельность оружия юнита) нужно исправить на 0.25. А вот урон ( Damage ) во всех трех случаях желательно снизить до 20. Не помешает немного уменьшить дальность стрельбы, изменив значение атрибута MaxRange на 10.

Что касается умения юнита вести рукопашный бой, то его лучше ослабить, дабы автоматчик не был эдаким универсалом, которому все по плечу. Атакам холодным оружием посвящены подразделы со значениями характеристики Name : VolleyHandAttack : DefendHandAttack , MeleeHandAttack , StaggerHandAttack и VolleyHandAttack. Показателю Damage в каждом из них присвойте значение 10 , а ROF1.6.

Осталось только переименовать юнита. Отыщем в файле stringtable.xml следующую строчку:

< String _locID =‘22805’>Musketeer

Слово Musketeer заменим в ней на « Автоматчик ».

Теперь нас интересует параметр с подсказкой, соответствующей данному юниту:

< String _locID =‘25669’>Heavy ranged infantry

Исправьте значение характеристики, например, на « Очень сильный юнит. Вооружен автоматом, стреляет очередями».

Автоматчик к бою готов. Это полезный, но дорогой юнит. Он не слишком быстр, однако этот недостаток с лихвой компенсируется потрясающей скорострельностью его оружия. Автоматчик способен в одиночку расстрелять несколько противников, экипированных оружием ближнего боя. Тем не менее старайтесь не подпускать к нему врагов и держите поблизости отряды юнитов, владеющих холодным оружием.

* * *

Мы добавили в игру две боевые единицы — подрывника и автоматчика. У каждого из них свой набор характеристик. Оба юнита хоть чуть-чуть, но все же приближают действие игры к современной эпохе. Однако не стоит останавливаться на достигнутом. Два юнита — не предел. За пару часов можно создать два десятка новых бойцов, а это уже — большая модификация. Только не забывайте о балансе и следите, чтобы новые юниты не давали преимущества какой-либо из сторон.

Комментарии
Чтобы оставить комментарий, Войдите или Зарегистрируйтесь