Кодировка файла export_descr_ancillaries.txt (создание свиты) (Medieval 2: Total War)

Кодировка файла export_descr_ancillaries.txt (создание «свиты»)

 

Привет народ.

Я не видел обучающей статьи об этом разделе моддинга, но я собираюсь показать вам, как добавить новый список «свиты» в игре, с соответствующими механизмами, триггерами и т.д.

Нам потребуются: программы Notepad (желательно Notepad++ – прим. переводчика) и справочный файл с портала twcenter – Docudemons 4.0 (можно конечно и без него, но тогда вам придется искать значение большинства важных переменных и условий вручную).

Создание «свиты»

Шаг 1 – установка

Распакуйте мод, который вы хотите установить, или кампанию Medieval 2: Total War.

Файлы, которые нужно будет править

  • export_descr_ancillaries.txt в папке data вашего мода,
  • export_ancillaries.txt в папке  data/text
  • и картинку для отображения анча в игре в папке data/ui/ancillaries

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

Шаг 2 – из чего состоит сам анч

Для примера возьмем типичную схему, из чего состоит анч. Состоит он из двух частей, таким же образом построен сам файл export_descr_ancillaries.txt.

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

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

 

Ancillary ancillary_name (обязательное поле)
    Type ancillary_type
    Transferable 0/1
    Image ancillary_image.tga (обязательное поле)
    Unique
    ExcludedAncillaries ancillary_name(s)
    ExcludeCultures excluded_culture(s)
    Description ancillary_description (обязательное поле)
    EffectsDescription ancillary_effects_description (обязательное поле)
    Effect Attribute Attribute_points (обязательное поле)

 

Последовательность полей должна быть именно такой. Необязательные поля писать необязательно, но если они есть, то их последовательность нужно соблюдать.

Первым делом, мы должны изучить, что означает каждая строка:

 

Ancillary ancillary_name – собственно название анча, по которому движок игры распознает каждый конкретный анч. Название пишется всегда со строчной, т.е. Biographer будет неправильно (по крайней мере все анчи, что встречались мне в модах пишутся со строчной).

Type ancillary_type – тип анча, важный параметр, с помощью которого можно писать скрипты и значительно разнообразить ход игры. Тип анча назначается для группы похожих по какому-то признаку анчей. Могут быть любые типы - Security (защита) – телохранители, цепной пес, придворный шпион и т.д., Heraldry  (геральдика)– во многих модах есть возможность давать генералу поселение в собственность, и для каждого поселения создается отдельный анч с гербом, Military (военный) – военные советники, стратеги, ветераны, вестовые и т.д. Ванильные типы такие Academic, Entertain, Sex, Health, Court, Pet, Money, Magic, Religion, Family, Military, Diplomacy, Naval, Politics, Relic.

Тип анча задается игроком произвольно, название любое. Насколько известно, ограничения на количество типов анчей в игре нет. Пишется как со строчной, так и с прописной.

Зачем вообще нужно вводить тип анча? Движок игры распознает каждый конкретный анч у персонажа только в нескольких случаях

  • при смерти генерала (скриптовое условие GeneralWithAncKilled),
  • может проверить наличие анча у конкретной фракции или в мире в целом (скриптовое условие FactionwideAncillaryExists либо I_WorldwideAncillaryExists )
  • может проверить был ли конкретный анч у отца персонажа (условие FatherAnc)

Во всех остальных случаях игра проверяет только тип анча (условие HasAncType)

То есть к примеру если речь идет об обычном генерале, которого нет в семейном древе фракции, вы не можете узнать есть ли у него конкретный анч, пока он жив (только вскрытие покажет, ха ха). В некоторых скриптах это бывает нужно, если речь идет о сюжетно важных предметах/личностях (Кольцо Всевластья например и т.д.) Решение простое – задаете анч, присваиваете ему тип, в котором он будет единственным анчем – и вам доступна возможность узнавать у движка сведения об этом конкретном анче. Например:

Ancillary megaring

Type ring (или какое угодно название вообще)

Условие HasAncType можно широко использовать при присвоении трейтов, в сюжетных скриптах и т.д.

Transferable 0 – эта строчка отвечает за возможность передачи анча между персонажами

если стоит 0, то анч нельзя передать, если 1 то можно.

Image ancillary_image.tga – значение, отвечающее за игровую картинку в свите персонажа. Картинка должна отвечать заданным параметрам (откройте любую существующую картинку анча и смотрите их)

Unique – с этим параметорм анч будет уникальным, появляется в кампании один раз.

ExcludedAncillaries – если хотите, чтобы два анча были противопоставлены друг другу. Нужно обязательно ввести это поле для обоих выбранных анчей. То есть персонаж, имеющий один анч уже не сможет иметь «противопоставленный». Пример: priestesse и whore. Если в свите есть монашка, то шлюха туда не попадает, если указать этим анчам друг друга в поле ExcludedAncillaries.

ExcludeCultures  – культуры, которые не могут получить этот анч, если хотите чтобы анч не был доступен фракции с определенной культурой

Description ancillary_description – текстовое описание анча, полностью на вашу фантазию.

EffectsDescription ancillary_effects_desc – текстовое описание эффектов анча.

Effect Authority 1 – эффект, который приобретает носитель анча.

 

Шаг 3 – создание нового анча

Откройте export_descr_ancillaries.txt.

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

Например, мы создаем анч great_chief

;This file is generated from the Spreadsheet VnV,txt

;Please modify the spreadsheet and re-export the data, rather than editing this file directly

;===============================================================

;== ANCILLARY DATA STARTS HERE ==

;===============================================================

;------------------------------------------

Ancillary great_chief

Type Court

Transferable 0

Image great_chief.tga

ExcludeCultures mesoamerican

Description great_chief_desc

EffectsDescription great_chief_effects_desc

Effect Authority 1

 

Пояснение по пунктам.

Ancillary greatchief либо great_chief (без символов такого типа «_» операторы недопустимы)

Type Court – любой тип на ваше усмотрение

Transferable 0 передаваемый или нет 0 – нельзя передавать, 1 - можно

Image great_chief.tga – меняете файл на great_chief tga (название полностью должно совпадать с названием анча)

ExcludeCultures mesoamerican – если хотите чтобы анч не был доступен фракции с определенной культурой, то правьте. Если без разницы, то можно убрать это поле вообще.

Description biographer_desc – меняете на great_chief_desc, соответственно, тоже совпадает с названием анча. Создаете соответствующий пункт в export_ancillaries.txt , текст описания произвольно придумываете сами.

EffectsDescription biographer_effects_desc см. предыдущий пункт.

Effect Authority 1 – вписываете эффекты, которые связаны с анчем. Максимально не более 8 на один анч.

Возможные эффекты перечислены в этой статье в разделе Possible effects

http://www.twcenter.net/wiki/Export_descr_ancillaries.txt_-_M2TW

 

Шаг 4 Внедрение анча в игру.

Существует как минимум три способа присвоения персонажу нового члена свиты.

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

 

character   Ryone Allyrion, named character, male, age 38, x 100, y 20

traits  GoodCommander 1 , LoyaltyStarter 1 , GoodTrader 1 ,

ancillaries godsgrace

army

unit        ME Bodyguard                       exp 1 armour 0 weapon_lvl 0

 

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

Способ второй, если нужно присвоить анч персонажу, появляющемуся в ходе кампании, например, в результате скрипта восстания или нашествия. По причине, которая остается загадкой для меня, при прописи появления такого персонажа и спауне его армии, указывать анчи для него нельзя. Трейты можно, а вот анчи нельзя. Но есть специальная консольная команда, которая позволяет делать это. Загвоздка в том, что для присвоения анча с ее помощью требуется знать имя персонажа, или на худой конец его label. То есть такой скрипт не позволит вам дать анч случайному персонажу, а это может сделать игру слишком жестко привязанной к одному сценарию развития событий и оттого менее интересной (когда знаешь наперед кто, где и на каком ходу). Вот пример спауна персонажа в ходе игры и присвоения ему трех анчей.

monitor_event FactionTurnStart FactionType denmark

and I_TurnNumber = 5

spawn_army

faction denmark

character Davos Seaworth, named character, age 48, x 97, y 243

traits  LoyaltyStarter 1 , Brave 3 , Loyal 3 , GoodCommander 1 ,

unit        NE Bodyguard            exp 7 armour 0 weapon_lvl 0

end

console_command give_ancillary "Davos Seaworth" hand_of_king2

console_command give_ancillary "Davos Seaworth" smuggler

console_command give_ancillary "Davos Seaworth" veteran_sailor

end_monitor

Способ третий, и основной для анчей – с использованием триггеров. Для одного анча может быть от одного тригера и больше. Напоминаю, что анч может не иметь триггеров совсем и быть полностью рабочим, но его появление придется всегда прописывать вручную. Триггер – это точка проверки совпадения заданных условий. Если условия совпали – триггер срабатывает и производит заданный эффект. Применительно к Медивелу надо добавить, что помимо совпадения сочетания условий вы можете задать и вероятность действия триггера. То есть для анчей это значит – при определенных условиях присвоение персонажу анча может быть с шансом от 100% (обязательное во всех случаях) до 1% (1 раз на 100 совпадений нужных условий).

Из чего состоит триггер?

 

Trigger Trigger_Name
WhenToTest Event_Name
Condition Condition_1
      and Condition_2
 
AcquireAncillary ancillary_name Chance Percentage
 Trigger Trigger_Name – имя вашего триггера, совершенно произвольно задаете, без пробелов, если нужно, используйте_нижнее_почеркивание; названия триггеров не должны повторяться, иначе CTD. 
 WhenToTest Event_Name – задаете игровое событие, при котором игра будет тестировать триггер. Список возможных событий для этого поля содержится в справочном файле Docudemons, в разделе Events. Примеры – CharacterTurnEnd (персонаж завершил свой ход), PostBattle (после окончания битвы), FactionTurnStart (начало хода фракции), GeneralCaptureSettlement (генерал захватил поселение) и т.д.
Condition Condition_1 – условие, при котором срабатывает триггер; триггер может содержать от 1 до 8 условий. Список возможных условий для этого поля содержится в справочном файле Docudemons, в разделе Conditions. Примеры – IsGeneral (персонаж является генералом), EndedInSettlement (персонаж завершил ход в поселении), SettlementHasPlague (в поселении чума), I_IsFactionAIControlled (фракцией управляет компьютер), PercentageBodyguardKilled (количество телохранителей генерала убито в битве), IsSettlementGarrisoned (есть ли в поселении гарнизон). Игра учитывает множество параметров, благодаря чему можно писать очень изощренные триггеры.
AcquireAncillary ancillary_name Chance Percentage – здесь все понятно, вводите имя анча, который присваивается персонажу при выполнении условий триггера, и вероятность – от 1 до 100, где 100 это присвоение анча во всех случаях совпадения условий, 1 – в 1 случае из 100 совпадений, вероятность игра генерирует случайно. 

 

Примеры триггеров

 

Trigger biographer_vnv_trigger

 

WhenToTest CharacterTurnEnd

Condition EndedInSettlement

and RemainingMPPercentage = 100

and TimeInRegion > 3

and Attribute Command >= 5

and IsGeneral

 

AcquireAncillary biographer chance 5

 

Объяснение – если на момент окончания своего хода генерал с уровнем атрибута Командование находится в поселении, не использовав очков движения (т.е. находился в поселении весь ход), и провел в этом регионе больше 3 ходов, то с вероятностью 5% он получит персонального биографа.

 

Trigger merchant

WhenToTest CharacterTurnEnd

Condition IsGeneral

and EndedInSettlement

and RemainingMPPercentage = 100

and FactionType moors

and SettlementBuildingExists >= great_market

and not IsFactionHeir

 

AcquireAncillary merchant chance 5

 

Объяснение – если на момент окончания своего хода генерал, не являющийся наследником фракции мавров (moors), находится в поселении, не использовав очков движения, и в поселении есть строение уровня «great_market» или лучше, то с вероятностью 5% он получит купца.

 

Trigger valyriansword_father_anc_trigger

WhenToTest FatherDiesNatural

Condition FatherAnc valyriansword

and IsGeneral

and not HasAncType Sword

 

AcquireAncillary valyriansword chance 90

 

Объяснение – если отец персонажа умер естественной смертью, и имел при жизни анч «валирийский меч», то его сын-генерал, не имеющий в своей свите анч типа Меч (Type Sword) с вероятностью 90% получит валирийский меч в свиту.

 

Безусловно, невозможно привести здесь примеры всех возможных триггеров, вы можете изучить самостоятельно любой мод на наличие подобных триггеров. На личном опыте могу сказать, что со временем вы быстро научитесь читать условия и начнете получать удовольствие от составления собственных хитроумных условий для присвоения анчей. Потому что в особо злостных случаях триггеры анчей могут пересекаться с различными счетчиками в campain_script.txt и вызывать эффекты в export_descr_buildings.txt ;-)

 

Шаг 5 Текстовое описание анча.

Эта часть расскажет, как добавлять описание к анчу, выводя его на экран в игре.

Откройте файл export_ancillaries.txt в папке data/text вашего мода.

Скопируйте любую строку (к примеру, нижеуказанные):

 

{zealous_disciple}Zealous Disciple

{zealous_disciple_desc}I will not leave the Prophet's side, nor let anyone harm him

{zealous_disciple_effects_desc}+1 Management, +1 to personal security (improves the chances of detecting and foiling assassination attempts)

Сотрите описание после символа «}» и идентификатор в скобках «{X}»:

 

{X }

{X_desc}

{X_effects_desc}

X – имя вашего нового анча, которое вы берете из export_descr_ancillaries.

 

Теперь нужно только произвести правильные изменения. Если вы еще помните, мы брали для примера анч great_chief

{great_chief}Great Chief – символ «_» используется только между скобок

{great_chief_desc}This man is a Great Chief, of his people, and country – вы сможете прочитать описание в игре, когда наведете курсор мыши на иконку, соответствующую анчу

{great_chief_effects_desc} – это описание эффектов, если оператор свиты изменяет показатель атрибуты персонажа (командование, рыцарство, здоровье, очки перемещения и т.д.)

Примечание: export_descr_enums это только статистика, вы не нуждаетесь в таком файле, чтобы добавить свиту в игру.

 

Автор: Swagger

Перевод: Shadamer

Недостаточно прав для комментирования