
Занимаясь проблемами ИИ складывается стойкое впечатление, что у разработчиков был жесткий лимит времени для релиза, и многие созданные параметры и возможности не тестировали и не внедрили, а потом поняли что и так сойдет и не включили в патчи.
Мы неровно относимся к тактическому ИИ. С одной стороны считаем идиотом и пишем скрипт чтобы за ручку водить каждый юнит на поле (хотя судя по всему адекватный и подробный .xml делает это не хуже и с меньшими затратами производительности). С другой стороны переоцениваем его способности, считая, что он сам нормально подберет юниты в бор формации с общим указанием unit_type infantry.
Пример из недавней практики - в блоке с unit_type spearmen очутились кони-люди, потому что в EB2 есть юниты spearmen cavalry.
Вкратце обобщу свой способ обращения с иакиическим ИИ, если кто-то не читал тему про эксперименты с ним: в .xml файле config_ai_battle есть возможность прописать только одно название формации для одного типа боестолкновения. Для открытых битв это ai_triple_missiles_in_front. Эта же формация прописана в kingdoms.exe и вероятнее всего при смене названия в .xml игра все равно будет в спорных ситуациях тяготеть к ней. Приоритет этой формации в запакованных файлах оригинальной игры выставлен 1.3 Для того, чтобы у каждой фракции на поле боя появилась своя уникальная формация нужно дать ей название ai_triple_missiles_in_front и указать в поле supported_factions название вашей фракции. Тогда .xml файл не войдет в противоречие и не будет выстраивать ничего взамен, а выстроит требуемую вам формацию. Приоритет вашей новой формации должен быть не ниже 1.3
Для построения блоков формации используется класс и категория юнита из ЕДУ, как показала практика, комбинации возможны любые - в частности, spearmen cavalry. Также для выбора юнита в блок могут быть использованы специальные построения - фаланга, ёж, стена щитов.
На основе своих мытарств с составлением формаций суммирую опыт -
1. Все параметры в блоке должны идти последовательно как в описании, иначе вылет. Видел много формаций в модах, где ;default_melee_state, т.е. выключен. Убираем ; и ловим вылет. Из-за этого автор такой формации отказывается от этого важнейшего параметра. Я так год назад переносил для из Тевтонца, тогда не разобрался и вернул ; А просто не в том месте было поставлено, надо сразу после unit_type.
2. Видимо, необходимо отказаться от min/max_unit_width, ибо сказано в одном обучающем посте, что параметр должен быть выставлен вообще везде, либо нигде,иначе ИИ начинает искать другую формацию с подходящим параметром. Исходя из моих попыток это похоже на правду.
3. Все юниты последовательно должны быть связаны через dummy_block, а dummy_block затем еще отдельно между собой. Эту методику я увидел в формациях Real Combat. Армия объективно движется более синхронно.
4. Интересно и требует тестов - по каким еще параметрам можно включать юниты в блок. Например horde, wedge - будет ли по аналогии с фалангой? И атрибуты crossbow, pike, gunmen - возможно, они для этого и сделаны, т.к. эффектов у них никаких нет.
5. Одна из причин неправильного построения формаций - сбой block_relative_pos, когда последующий блок ссылается на предыдущий. А в основном так и сделаны формации. Но если для предыдущего блока не нашлось подходящего юнита и блок не построен, как построится следующий? Судя по всему никак и юнит идет в другой блок или вообще в резервный с unit_type any.
Во избежание последней описанной ситуации я решил опробовать систему, когда все блоки будут ссылаться на начальный нулевой блок, который всегда будет присутствовать (вариант сделать его в виде dummy_block spacer, который обозначает пустое место без войск, либо блок с unit_type any и лимитом в 1 юнит).