Постороение формаций ИИ. Моддинг MEDIEVAL 2: TOTAL WAR

Итак, тут будем рассматривать схемы построяния формаций для ИИ на примере нижеприведенной формации, которая входит в патч формаций для ОиМ. На примере этой формации мы постараемся объяснить использование блоков и операторов.

 begin_formation ai_nomadic_line

 ;;; purpose flags; can use this for anything

march

ai_priority3.0

supported_factionssarmatians

 

;; the support cavalry (ready to charge where is needed)

begin_block 0

min_units2

max_units4

not_general

unit_typeheavy cavalry1.0

unit_typespearmen cavalry1.0

;unit_formationsquare

block_formationline

block_relative_pos0 0.0 -20.0

inter_unit_spacing10.0

priority1.0

end_block

 

begin_dummy_block 1

spacer 50.0 50.0 50 50

end_dummy_block

 

;; The center will consist infantry in mixed formations

begin_block 2

not_general

unit_typemissile_infantry1.0

unit_typeranged_missile_infantry1.0

unit_typeinfantry0.2

unit_formationshield_wall

block_formationline

block_relative_pos1 0.0 -6.0

inter_unit_spacing0.2

priority1.0

end_block

 

 

;; general at the center

begin_block 3

min_units1

max_units1

unit_typegeneral_unit1.0

;unit_formationshield_wall

;unit_densityclose

block_formationline

block_relative_pos2 0.0 -7.0

inter_unit_spacing10.0

priority1.0

end_block

 

begin_block 4

not_general

unit_typehandler1.0

unit_typesiege3.0

unit_typechanting_screeching3.0

;unit_formationsquare

block_formationline

block_relative_pos3 5.0 0.0

inter_unit_spacing3.0

priority1.0

end_block

 

begin_dummy_block 5

spans 2 3 4

end_dummy_block

 

;; The center will consist infantry in mixed formations (2)

begin_block 6

not_general

unit_typespearmen infantry0.8

unit_typeheavy infantry1.0

unit_typeinfantry0.6

unit_typeany0.01

unit_formationshield_wall

block_formationline

block_relative_pos5 0.0 -3.0

inter_unit_spacing0.2

priority1.0

end_block

 

;; Cavalry ambush left

begin_block 7

not_general

unit_typeskirmish cavalry1.0

unit_typemissile cavalry1.0

unit_typecavalry0.1

;unit_formationsquare

block_formationline

block_relative_pos1 -25.0 0.0

inter_unit_spacing6.0

priority0.5

end_block

 

;; support cavalry behind

begin_block 8

not_general

unit_typeheavy cavalry1.0

unit_typespearmen cavalry1.0

unit_typecavalry0.1

;unit_formationsquare

block_formationline

block_relative_pos7 0.0 -3.0

inter_unit_spacing6.0

priority0.5

end_block

 

;; Cavalry ambush right

begin_block 9

not_general

unit_typeskirmish cavalry1.0

unit_typemissile cavalry1.0

unit_typecavalry0.1

;unit_formationsquare

block_formationline

block_relative_pos1 25.0 0.0

inter_unit_spacing6.0

priority0.5

end_block

 

;; support cavalry behind

begin_block 10

not_general

unit_typeheavy cavalry1.0

unit_typespearmen cavalry1.0

unit_typecavalry0.1

;unit_formationsquare

block_formationline

block_relative_pos9 0.0 -3.0

inter_unit_spacing6.0

priority0.5

end_block

 

begin_dummy_block 11

spans0 1 2 3 4 5 6 7 8 9 10

end_dummy_block

 

 

begin_block 12

;not_general

unit_typechariots3.0

unit_typeelephants3.0

unit_typegeneral_unit1.5

;unit_formationwedge

;default_melee_stateskirmish

;min_unit_width80

;max_unit_width160

block_formationline

block_relative_pos11 0.0 -5.0

inter_unit_spacing5.0

priority1.0

end_block

 

Название формации - begin_formation

Самая первая строка – это название формации ( в данном случае ai_nomadic_line)

 

Вам необходимо присвоить произвольное название формации, чтобы по нему компьютер находил ее и определял, возможно ли при некоторых условиях использовать ее. В серии TW любой предмет носит какое-то название, будь то юнит, здание и т. д. Так и формация носит свое собственное название. Хочу отметить, что если вы один раз присвоили название и уже с ним запускали игру, то его стоит таким и оставить – в случае его изменения могут возникнуть проблемы с выбором формаций в тактических битвах. Названия формации можно брать как из оригинального файла формаций, так и выдумывать свои. Лучше не допускать повторения названий – могут возникнуть наложения одной формации на другую.

 

Цель формации - purpose flags

Цель формации – это оператор, с помощью которого компьютер определяет, при каких именно условиях возможно использование определенной формации. Существуют следующие цели формаций:

-attack

-defend

-march

-pursue

-standard_ambush_defender_deployment

Соответственно при первом значении армия будет развернута в формацию, когда атакует, при втором, когда защищается, при третьем во время передвижения по полю битвы при четвертом во время преследования и при пятом во время нахождения в засаде. Для формации лучше всего указывать две цели одновременно – attack и defend. Именно при таком подходе компьютер практически всегда безошибочно выбирает нужную формацию. Цель march также используется для армий, задействованных с качестве подкрепления. Цель pursue не всегда корректно работает, часто армии не разворачиваются в формации с этой целью. При использовании 5 цели нужно быть уверенным, что армия действительно сможет развернуться в засадной зоне – поэтому лучше делать формации с этой целью компактными и сильно не растягивать их по фронту.

 

Приоритет формации - ai_priority

Приоритет формации – это некое значение, которое позволяет ИИ выбрать формацию. Наряду с поддерживаемыми фракциями этот оператор – один из инструментов воздействия на компьютер при выборе формации.Лучше всего указывать число с десятичными дробями через точку (например 3.75). При отсутствии десятичных дробей надо использовать ноль (3.0). Данный оператор позволяет выстроить достаточно гибкую систему формаций. В том случае, если конкретная формация не удовлетворяет условиям (например, составу войск), будет выбрана другая формация с более низким приоритетом. Чем больше приоритет, тем компьютер охотнее выбирает формацию. Используйте высокий приоритет для самых лучших и важных формаций.

 

 

Поддерживаемые фракции - supported_factions.

Этот оператор отвечает за то, какими именно фракциями может использоваться данная формация. Фракции указываются через запятую и пробел. Если не использовать данный оператор, тогда формация будет доступна для всех фракций.

 

 

 

После всего вышесказанного мы имеем следующее

 

begin_formation ai_nomadic_line

 

;;; purpose flags; can use this for anything

march

ai_priority3.0

supported_factionssarmatians

Это была как бы вводная часть формации, теперь переходим к основному компоненту формаций – блокам.

 

Любая формация состоит из блоков. Существуют два вида блоков – основные блоки и ложные блоки (dummy block)ю Начну со второго вида блоков.

 

Ложные блоки (dummy block).

Данный вид блоков является вспомогательным и служит для коррекции основных блоков. он может состоять всего из двух компонентов:

 

-spacer

 

-spans

 

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

Вот пример такого оператора:

begin_dummy_block 0

spacer0.0 0.0 60 30

end_dummy_block

spans нужны для объединения нескольких блоков в один. Это необходимо в том том случае, когда нужно развернуть, допустим, кавалерию на фланге не относительно какого-то блока, а целой группировки войск. То же самое можно сказать и относительно артиллерии и любого другого вида войск. Это позволяет достичь более точного расположения войск на тактической карте. Пример спанов:

begin_dummy_block 2

spans0 1 2 3 4

end_dummy_block

Обратите внимание, что нумерация любых блоков начинается с нуля. Номера спанов нужно указывать через пробел безо всяких запятых.

 

Теперь перейду к обычных блокам – основному компоненту любой формации.

;; the support cavalry (ready to charge where is needed)

begin_block 0

min_units2

max_units4

not_general

unit_typeheavy cavalry1.0

unit_typespearmen cavalry1.0

;unit_formationsquare

block_formationline

block_relative_pos0 0.0 -20.0

inter_unit_spacing10.0

priority1.0

end_block

Команды в блоке делятся на обязательные и необязательные. Необязательные команды я буду отмечать курсивом.

 

Название блока – вы можете как-то пометить блок по своему усмотрению только для удобства в работе и чтобы не запутаться. Название может быть абсолютно любым и никак не влияет на работоспособность блока.

 

Номер блока begin_block 0

Этот оператор отвечает за нумерацию блоков. Она начинается с нуля. Ложные и основные блоки имеют общую нумерацию. Это самая первая команда блока.

 

Ограничение числа юнитов

min_units 2

max_units 4

Это первая необязательная команда. Вы можете ограничить число юнитов в блоке используя эту команду, соответственно указав минимальное и максимальное количество юнитов. Можно указать в обоих операторах одинаковое число, тогда в блоке будет строго определенное количество юнитов. Блоки можно использовать по отдельности, указывая или только минимальное, или только максимальное количество юнитов. Но надо помнить, что иногда в формации может не оказаться нужного числа юнитов, тогда она не будет работать.

 

not_general

Этот оператор указывает на то, что в блоке не должно быть генерала. Его можно использовать почти в каждом блоке, если у вас в типах юнитов прописано general_unit (об этом ниже). В противном случае могут возникнуть некоторые осложнения, и генерал будет ставится не там, где надо. Лучше проявлять осторожность в использовании этой команды, но я все же почти всегда ее использую в большом количестве блоков.

 

unit_type any 0.1

Этот оператор показывает, какие именно типы юнитов могут использоваться в данном блоке. Справа от названия указывается приоритет, т. е. некое число, которое указывает, какой именно юнит будет заполнять этот блок в первую очередь. Например, в блоке стоит тяжелая пехота в приоритетом 2.0 и лучники в приоритетом 1.0. В этом случае компьютер будет стараться в первую очередь расположить именно тяжелую пехоту в блоке, а в случае ее нехватки обратится к легкой пехоте. Но если у вас легкой пехоты значительно больше, тогда она будет более интенсивно использоваться при заполнении блока.

Список доступных типов юнитов:

any

infantry

light infantry

heavy infantry

pilum_infantry

light_pilum_infantry

heavy_pilum_infantry

spearmen

spearmen infantry

non_phalanx_spear

phalanx

missile infantry

skirmish infantry

ranged_missile_infantry

cavalry

spearmen cavalry

heavy cavalry

light cavalry

missile cavalry

skirmish cavalry

elephants

heavy_chariots

handler

siege

general_unit

chanting_screeching

swimming

carrying_siege_engine ram

carrying_siege_engine ladder

carrying_siege_engine tower

 

default_melee_state fire_at_will_and_defend_and_skirmish

Позволяет эффективно настроить поведение юнитов в битве(максиму 3 значения).

 

Когда армии развернуты, большинство юнитов получают свои установки на бой, например, лучники начинают бой с активированными кнопками «огонь по желанию» и «перестрелка». Когда вы используйте оператор default_melee_state в пределах блока, в котором хотите настроить эти состояния юнитов, имейте в виду, что если вы задали лучникам fire_at_will, они больше не перестреливаются, пропишите им defend, и они болше не ведут огонь по желанию и не перестреливаются. Итак, чтобы заставить лучников выполнять все 3 эти действия, вам нужно прописать fire_at_will_and_defend_and_skirmish. Отмечаю, что в данном случае команда еще и активирует специальные виды боеприпасов, если они есть у юнита. Однако, следует еще помнить, что игра в процессе битвы может на время переделать эти настройки: вам, наверняка, приходилось видеть в начале игры лучников, стреляющих обычными стрелами, а потом заменяющих их огненными.

 

Также, можно отключить все эти настройки, если использовать специальные команды, как показано здесь. В данном случае лучники не стреляют и держат позицию.

default_melee_state dummy

Эта команда делает то же самое, что и:

default_melee_state anyone_homeetc etc ...

При использовании оператора defend юниты не атакуют активно противника на поле боя. Полезно данную настройку поставить генералу, тогда его удаётся сохранить длительное время живым. Настройка attack заставляет юнитов активно нападать на противника. В общем, default_melee_state следует почти всегда использовать, поскольку он очень училивает ИИ на поле битвы.

 

unit_formation square

unit_formation phalanx

unit_formation wedge

Это весьма полезная команда. Она позволяет все время битвы юниту сохранять заданное построение. Например, по умолчанию фалангисты становятся в фалангу, но во время битвы могут перейти в обычное построение. Использование данной команды позволять предотвратить это нежелательное событие. Команда testudo работает некорректно, поэтому ее использовать не следует.

 

unit_density close

unit_density loose

Это команда отвечает за плотность отряда. Во время оборонительного боя это команда вполне нормально работает, но в время наступления ИИ по собственному усмотрению меняет заданную плотность отряда.

 

min_unit_width 20

max_unit_width 20

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

 

 

block_formation line

block_formation column

block_formation square

Это команда позволяет блоку построится в линию, колонную, либо в каре. Последнее часто не работает правильно, поэтому его лучше всего не использовать в формациях. Построение в линию используется чаще всего, так как оно наиболее эффективно.

 

- Определение позиции блока

Эта очень важная команда, от нее во многом зависит успешная работа формации.

 

Когда вы хотите расположить свою армию в битве, у вас есть два способа это сделать:

 

block_relative_pos 0 0.0 0.0

или комбинация команд:

 

normalised_pos 0.0 0.0

normalised_rot 0.0

Первый способ гораздо легче и более распространен, второй гораздо труднее и не всегда адекватно работает.

 

Вам следует помнить, что следует выбирать на всю формацию только один метод построения. Иначе в том случае, если в одном блоке вы используйте 1 метод, во втором 2, то игра вылетит.

Минимальные значения команд таковы:

normalised_pos 0.0 0.0

normalised_rot 0.0t

Максимальные значения:

 

normalised_pos 1.0 1.0

 

normalised_rot 360.0

 

 

 

 

Я сам никогда не использую второй способ в формациях, поскольку от него возникает много проблем. Теперь поясню каждую команду по порядку.

 

block_relative_pos 0 0.0 0.0

 

Первая цифра в команде обозначает, относительно какого блока будет вестись ориентирование блока, то есть относительно которого он будет располагаться. Вторая пара цифр обозначает перемещение влево или вправо относительно блока. Для перемещения вправо нужно поставить знак -. Вторая пара обозначает перемещение назад и вперед. Для перемещения назад нужно поставить знак-.

 

block_relative_pos 2 -4.0 5.0

 

В данном случае наш блок будет располагаться относительно 2 блока на 4 метра вправо и на 5 вперед.

 

 

 

normalised_pos 1.0 1.0

 

Данная команда позволяет установить развертывания блока относительно центра развертывания (примерно условный центр формации) на определенное количество единиц.

normalised_rot 360.0

Эта команда производить вращение блока относительно центра развертывания. Не работает в BI. Я не советую использовать второй способ вообще.

 

 

 

inter_unit_spacing 2.0

 

Эта команда устанавливает расстояние между юнитами в одной блоке. Например, войска развернуты в линию, и в этой случае расстояние между юнитами будет два метра.

 

 

 

priority 1.0

 

Это последняя команда, без которой не может обойтись ни один блок. Она позволяет установить приоритет для каждого блока внутри формации.

 

Ну и завершает любой блок команда end_block

 

Формации для игрока

Здесь я постараюсь объяснить некоторые отличия между ИИ формациями и формациями для игрока.

 

 

 

В первую очередь, нельзя добавлять в формации для игрока неограниченное количество формаций, всего существует восемь 8 формаций (столько же и кнопок формаций) и одна дополнительная формация.

 

 

 

-Названия формации

 

Насколько я понимаю, каждая формация связана с кнопками на интерфейсе посредством следующих доступных в файле названий формаций:

 

 simple_line

 ordered_single_line

 simple_double_line

 ordered_double_line

 ordered_triple_line_1

 ordered_triple_line_2

 ordered_triple_line_3

 column

 

- Выборюнита

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

 

 -Цель и приоритет

 

Цель и приоритет не используются формациях для игрока, поскольку вы сами выбираете себе формацию.

 
 

-default_melee_state

 

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

 

-Несколько примечаний по использованию формаций для игрока.

 Когда вы будете делать выборочные формации для игрока, вы можете использовать команды, такие как min_units и max_units. И количество юнитов не будет соответствовать этому условию в формации, то игра может сама собой вставить «лишние» юниты в блок. Например, вы создали блок для пехоты с максимумом в 3 юнита, а выбрали больше 3. Тогда игра может сама вставить эти юниты в блок.
 Также нужно помнить, в формациях для игрока не следует изменять название формации, это может привести к вылету.
 Напоследок предоставлю список «назначения» формаций, которые также не следует менять. Он находится сразу после названия формации.
 

general_order Group_Formation_Single_Line

 general_order Group_Formation_Sorted_Line

 general_order Group_Formation_Sorted_Double_Line

 general_order Group_Formation_Sorted_Double_Line

 general_order Group_Formation_Missile_First_3_lines

 general_order Group_Formation_Infantry_First_3_Lines

 general_order Group_Formation_Cavalry_First_3_Lines

 general_order Group_Formation_Column

 

Настройка export_descr_unit.

Также я недавно узнал, что определнные настройки в этом файле позволяют эффективно настроить поведение ИИ в битве. Это stat_charge_dist и stat_fire_delay.

 

Первая команда – это расстояние, с которого можно начинать атаку. Вторая – это средняя частота между использованием стрелкового и холодного оружия.

 Для мода ОиМ я устанавливал следующие значения:
 

для стрелковой пехоты

 stat_charge_dist 200
 stat_fire_delay 5000
 

В первой команде я брал радиус стрельбы и примерно умножал его на 2. Это позволяет добиться эффективного использования стрелков на поле битвы. Вторую команду для всей пехоты я указывал одинаковую – это позволяет добиться того, что юниты не разбредаются и даже такие сложные формации, как терции, держат строй.

 

Для рукопашной пехоты я устанавливал различные значения stat_charge_dist в зависимости от силы в рукопашном бою. Для артиллерии первый параметр следует устанавливать равным радиусу обстрела. а второй =0. Для стрелковой кавалерии первый параметр по такой же схеме, как у стрелковой пехоты, в второй -20000 и больше – это позволяет достичь исключительной маневренности данного вида войск. Для фаланги первый параметр надо устанавливать 200. У генерала можно также добиться исключительной маневренности с помощью второго параметра, но я это делать не стал из-за особенностей ОиМа. Продолжаю работу по изучению этих параметров и сообщу о ней позже.

Добавить комментарий

Ссылки в комментариях не работают. Надоела капча - зарегистрируйся.

Защитный код
Обновить