Перевод модов (часть 3)
LazyElfiyko
Оглавление
Перевод файлов plo
Файлы *.plo – это такой триггер (механизм запуска) для скриптов. Чтобы скрипты запускались в игре в определённый момент и/или один раз, в файлах *.plo существуют специальные флаги (проверки). Как только скрипт выполнит своё дело в игре, он отключит флаг, чтобы тот больше не заставлял скрипт срабатывать бесконечное количество раз. Но это если говорить о правильном создании связки скрипт + *.plo, потому что все мы знаем о модах, добавляющих предметы в инвентарь раз за разом при каждой загрузке игры, б-р-р-р.
Очень многие флаги в файлах *.plo существуют без текста, то есть без того текста, который бы нуждался в переводе. Вместо него тег флага и всё. Однако сюжетные события часто добавляют записи в журнал или кодекс. Например, если посадить на трон Белена, то добавится одна запись в журнал, если – Харроумонта, то другая. Обе записи находятся в одном файле *.plo, но привязаны к разным флагам.
Чтобы понять, есть ли текст в файле *.plo, можно изучить страницу мода. Обычно авторы пишут, что, к примеру, мод добавляет в игру новое оружие, а также страницу кодекса. Если такой информации вы не нашли, то, увы, придётся проверять каждый файл *.plo из мода.
Открывать и редактировать файлы *.plo умеет только Тулсет Запустите DragonAgeToolset.exe или GffEditor.exe. В моде, на котором я разбираю процесс перевода, есть один файл *.plo под названием «plt_kytx_ewarmor_givenflag.plo». Давайте откроем его через Тулсет и посмотрим, есть ли там текст для перевода. После открытия файла появится следующее:

Как только вы раскроете строку PLOT_PLOTS, вы увидите строку под цифрой 0. Это стандартный вид файла, и большего количества строк здесь быть не может. А вот в строке 0 прячутся все остальные строки:

У каждого файла *.plo, помимо флагов, есть ещё и внутреннее название, за которое отвечает строка PLOT_NAME. Если файл *.plo связан с квестом, то в этой строке после ID и двоеточия будет прописано название квеста, а именно в правой колонке Value. В моём случае, как и положено, в строке PLOT_NAME есть ID (648640836), двоеточие, а также название (kytx_ewarmor_givenflag). Но это название не выглядит пригодным для перевода, верно? Значит, его не трогаем, это технический тег, необходимый для фонового срабатывания скрипта.
Теперь проверим текст флагов. За флаги в файле *.plo отвечает строка, которая так и называется – PLOT_FLAGS. Каждому флагу автоматически присваивается порядковый номер. В моём случае есть только один флаг под цифрой 0.

После раскрытия флага вы увидите следующие строки:

Самые интересные здесь – это PLOT_FLAG_NAME (имя флага, не отображается в игре, нужно только скрипту) и PLOT_FLAG_JOURNAL (текст, добавляющийся в журнал). В строке PLOT_FLAG_JOURNAL есть только ID и двоеточие, значит, что в *.tlk переносить нечего. Можно закрыть файл в программе.
Примечание.
Ещё раз напоминаю, что любые технические теги, вроде kytx_ewarmor_givenflag, переводить НЕЛЬЗЯ. В игре вы их всё равно не увидите, но стопроцентно сломаете и файл, и мод целиком. Понять, что перед вами тег, поможет нижнее подчёркивание между словами. Либо слова будут написаны слитно.
Хорошо. А теперь для примера возьмём *.plo с текстом внутри. Стандартно открываем его в Тулсете и раскрываем строки PLOT_PLOTS – 0. Первое, что бросается в глаза – нормальный текст в строке PLOT_NAME.

В правой колонке Value расположились ID и текст – 2126754350:A mysterious stone. Однако не спешите переносить строку в *.tlk, сейчас нужно понять, как это сделать правильно. В файлах GFF мы вырезали текст, оставляя только ID. Здесь же между ID и текстом стоит двоеточие. Двоеточие в подобных файлах выступает в роли разделителя между ID и текстом. Если вы сотрёте текст, оставив только ID, нужен ли будет разделитель? Нет, потому что отделять будет нечего. Значит, текст вырезаем, переносим в файл *.tlk вместе со скопированным ID, двоеточие стираем, а ID в файле оставляем. Получиться должно так:

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

Раскрыв первый флаг под цифрой 0, необходимо дважды щёлкнуть по тексту в строке PLOT_FLAG_JOURNAL, там же справа появится кнопка с тремя точками, нажав на которую вы вызовете окно с полноценным редактированием текста:

Как и в файле *.cif (кто-то ещё помнит про него?), текст в файле *.plo может быть очень длинным и подразделяться на несколько абзацев, поэтому я настоятельно рекомендую пользоваться полноценным редактором, чтобы увидеть его полностью. В любом случае текст и ID переносятся в файл *.tlk обычным способом.

В окне редактора должен остаться только ID. После нажмите ОК.
Также проверьте другие флаги, если текст есть в одном, в остальных он, скорее всего, тоже будет. Да, и не забудьте после сохранения файла удалить его резервную копию, которую создал Тулсет.
Перевод файлов cut
Поговорим о переводе кат-сцен. Кат-сцены представляют из себя, в общем-то, сцены с чётко прописанным сюжетом. Вы можете только пропустить их клавишей Esc. Каждая кат-сцена состоит из двух файлов: *.cut и *.cub. В файле *.cub есть информация только об анимациях, значит, текста для перевода стопроцентно не будет. Другое дело файл *.cut, содержащий остальную информацию кат-сцены, включая персонажей и предметы, которым может быть прописан текст.
Если к моду на кат-сцену автор не приложил видео, то быстро понять, есть ли в файлах текст, не получится, так как он запрятан глубоко. Поэтому я рекомендую сначала перевести остальные файлы мода, а если во время тестирования кат-сцены вы обнаружите текст на английском, то уже тогда искать его в файле (файлах) *.cut. Для примера я возьму файл кат-сцены из мода Alistair Romance – Eavesdropping. Данный тип файлов открывается через Тулсет.

Из всех строк нужно раскрыть самую последнюю – CUTSCENE_ACTORS. В ней вы увидите кучу строк под порядковым номером. Каждая строка в строке CUTSCENE_ACTORS отвечает за один предмет, находящийся в кат-сцене, включая камеру (камеры), которая показывает происходящее в кат-сцене. Теперь нужно заняться поиском персонажа или предмета, к которому привязан текст.
Для этого опуститесь в конец списка предметов и начните проверять с последнего, у меня это строка под номером 36. Если её раскрыть, то увидим следующее:

В строке NAME прописан тег предмета или существа. По этому тегу можно быстро понять, нужно ли дальше изучать строку, которую мы раскрыли, или нет. В моём случае тег имеет название fxm_waterpool_p, внутри которого заметно слово waterpool (water pool), что означает некий водоём. Если в моде присутствует говорящее озеро, тогда необходимо исследовать и эту строку, но пока что продолжим поиски более одушевлённых предметов.
Наконец, в строке 32 я нахожу тег gen00fl_dog, это тег нашего мабари. Посмотрим, выражает ли он свои эмоции в этой кат-сцене. За действия предмета/персонажа/существа отвечает строка CUTSCENE_ACTOR_ACTION_QUEUE, поэтому её необходимо раскрыть.

Действий у пса в кат-сцене всего лишь два. При таком количестве строк вряд ли у него есть какой-либо текст, но проверка не будет лишней. Полностью раскроем эти две строки.

Текста нет, только координаты места, где должен стоять пёс. Пса пропускаем, ищем следующего персонажа. Я не буду тянуть резину и сразу перейду к тому персонажу, у которого есть текст.
В моём случае это Лелиана (gen00fl_leliana) в строке 17. Список её действий выглядит довольно внушительно. Целых 27 строк.

Раскрываю последнюю, 26 строку:

Бинго! Текст нашёлся. Он переносится по точно такому же принципу, по какому мы переносили текст из файла *.plo: в строке оставляем ID, двоеточие стираем, а текст вырезаем и вставляем вместе с ID в *.tlk. Но есть ещё кое-что.
Очень часто текст, который вы можете обнаружить в файлах *.cut, уже находится в файлах *.dlg (диалогах). Другими словами, он просто дублируется в файлах *.dlg, поэтому обязательно проверьте, есть ли в вашем *.tlk строка с таким же ID и текстом, прежде чем переносить всё это из файла *.cut. Ведь все мы помним, что ID не должны повторяться, это же касается и содержания файлов *.tlk.
Перевод файлов dlg
Для примера возьму один файл диалога из мода Innodils Pocket Plane.
Важное примечание!
Перед началом работы скопируйте оригинальные файлы диалогов в отдельную папку. К примеру, в рабочей папке можно создать подпапку «Original DLGs» и поместить копии файлов туда. В конце я объясню, зачем это нужно.
Файлы *.dlg также открываются с помощью Тулсета (DragonAgeToolset.exe или GffEditor.exe). Разницы в выборе программы нет, единственное, что стоит уточнить – DragonAgeToolset.exe не сможет открыть файл весом больше 1 МБ. Однако выход есть: пропатчить DragonAgeToolset.exe с помощью LAA-патча, либо запускать GffEditor.exe.
Открываем диалог:

Строка CONVERSATION_LINE_LIST содержит все фразы диалога, как Стража, так и других персонажей. Раскрыв эту строку, можно снова увидеть множество строк под порядком номером. По сути, ничего необычного, но на данном этапе я хочу обратить ваше внимание на правую колонку Value, содержащую весьма неплохую подсказку:

Таинственные буквы обозначают следующее:
• NTRY – указывает на то, что фразу произносит второстепенный персонаж. То есть НЕ Страж.
• RPLY – указывает на то, что фраза принадлежит Стражу. То есть его один вариант ответа.
Эту информацию важно знать потому, что все фразы, кроме тех, которые принадлежат Стражу, в файле диалога дублируются! Да ещё и запрятаны очень глубоко. Ещё нужно добавить, что фразы второстепенных персонажей (сократим до NPC, это не совсем правильное слово, но зато оно короче) не всегда дублируются в файле. Так, если диалог в игре приходится продвигать клавишей Esc, либо персонажам не прописана лицевая анимация, то их фразы в диалоге не дублируются.
Итак, раскрываем строку под цифрой 0 с первой фразой. Обычно в этой строке текста нет, есть только ID и двоеточие (например, 123456: ). Подобные строки не трогаем, они нужны для правильного функционирования диалога. Если вы сотрёте двоеточие, то все фразы NPC в игре пропустятся и сразу же появятся ответы Стража.
Однако в моей строке под цифрой 0 находится текст, и выглядит он следующим образом:

Текст вместе с ID и двоеточием всегда находится в строке CONVERSATION_LINE_TEXT. Однако не расслабляйтесь, вполне возможно, что дубликат фразы где-то затаился, чуть позже мы поищем его. Сейчас нажмите дважды ЛКМ по тексту в строке CONVERSATION_LINE_TEXT, затем на появившуюся справа кнопку с тремя точками, вызвав таким образом полноценный редактор текста.

Переносить строку в файл *.tlk по-прежнему просто: ID оставляем, двоеточие стираем, текст вырезаем и вставляем вместе с копией ID в *.tlk. Но вас может смутить наличие в тексте специальных тегов, в данном случае <act></act>. Данные теги нужны для форматирования текста в игре. Переводить теги НЕЛЬЗЯ, поэтому перевод пишите строго там, где был оригинальный текст.
Было:
<act>On the first page, someone scribbled a rough index of the ancient texts, you can browse the most useful chapters</act>
Стало:
<act>На первой странице кто-то набросал приблизительный указатель древних текстов, вы можете просмотреть наиболее полезные главы</act>
Игровые теги бывают разные, это и <desc></desc>, и <bodytitle></bodytitle>, и <summary> </summary>, и прочие, но всех их легко вычислить по угловым скобкам.
Теперь научимся искать фразы-дубликаты. Перейдём к строке CONVERSATION_LINE_SPEAKER и посмотрим на её значение в колонке Value.

В моём случае фразу произносит существо или предмет под тегом OWNER. Запоминаем тег, ведь по нему мы будем искать дубликат. Если в диалоге несколько действующих лиц, тогда вместо OWNER может быть указан другой тег, например, gen00fl_alistair или den200cr_isabela. Просто запомните тег в строке CONVERSATION_LINE_SPEAKER. Теперь раскройте строку CONVERSATION_LINE_CUTSCENE.

Опуститесь ниже, до строки CUTSCENE_ACTORS, которую тоже нужно раскрыть:

По классике нас встречают строки с цифрами в названии. Каждая строка отвечает за объект/существо, который задействуется в пределах одной фразы. Сначала раскройте строку под цифрой 0:

Смотрим на значение в строке NAME. В ней должен быть прописан тег, который мы запоминали ранее. В моём случае там прописан тег MASTER. Значит, эту строку я пропускаю, потому в ней не будет дубликата фразы. Раскрываем следующую строку под цифрой 1. В строке NAME снова прописано не то, что нужно, там прописано Primary Camera. В строке под цифрой 2 будет прописано значение PLAYER, а вот в последней строке под цифрой 3 найдём заветное OWNER. Теперь ищем текст в ней.
Раскройте строку CUTSCENE_ACTOR_ACTION_QUEUE, которая находится чуть ниже строки NAME:

Ох, снова куча строк с цифрами, но сейчас я вас обрадую, потому что дубликат фразы ВСЕГДА находится в последней строке списка, у меня это строка под цифрой 6.

Вуаля! Вот и наш затаившийся дубликат. Так как вы уже перенесли ID и текст этой фразы в *.tlk, то с дубликатом нужно поступить следующим образом: оставить только ID, а двоеточие и текст стереть.
Немного практики, и вы быстро научитесь искать дубликаты в файле. А ещё лучше воспользоваться автоматической утилитой для вычистки текста. Подведём итог по файлам *.dlg.
Был и была
Думаю, именно при переводе диалогов вы столкнётесь с тем, что не все фразы возможно обезличить. Особенно это касается глаголов в прошедшем времени. Подробно разберём этот случай.
Дано:
Фраза Стража в диалоге на английском «1234567:I've never been here before.».
Решение:
- В этом случае всё же можно выкрутиться обезличиванием и, к примеру, перевести фразу как «Мне никогда не приходилось бывать здесь раньше».
- Есть и другой путь. Создать дополнительный файл *.tlk и занести в него фразы только/для девушки-Стража. К примеру, я создала основной файл kytx_ewarmor_c_ru-ru.tlk. К нему создам файл под названием kytx_ewarmor_c_ru-ru_f.tlk. В него будут заносить все фразы (для) девушки-Стража, которые при переводе обезличить не удалось. Получиться должно так (просто пример):
kytx_ewarmor_c_ru-ru.tlk
TALK_STRING_ID 1234567
TALK_STRING Я никогда не был здесь раньше.
kytx_ewarmor_c_ru-ru_f.tlk
TALK_STRING_ID 1234567
TALK_STRING Я никогда не была здесь раньше.
Именно приписка _f (female) в конце названия файла даёт понять, что в *.tlk находятся фразы (для) Стража-женщины. Да, раньше я писала, что ID должен быть уникальным во всех файлах, но это не относится к файлам *.tlk на разных языках и к дополнительному файлу для Стража-женщины.
Смотрим на контекст
Переводить диалоги ужасно сложно из-за того, что без контекста то или иное слово можно перевести совершенно по-разному. Более того, всегда хочется, чтобы ответы Стража подходили сказанной последней фразе NPC и наоборот. Немного прояснить контекст поможет программа DAOTlkEdit и те оригинальные файлы диалогов, которые вы скопировали (я надеюсь) в отдельную папку перед переносом из них текста в *.tlk.
Итак, что потребуется:
- Программа DAOTlkEdit.
- Оригинальные файлы диалогов из мода.
- Ваш файл *.tlk, в который вы перенесли текст из диалогов.
DAOTlkEdit позволяет увидеть дерево диалога целиком, но, к сожалению, не может работать с вычищенными файлами *.dlg, именно по этой причине я просила вас сделать копии оригинальных диалогов.
Отлично. Запустите DAOTlkEdit.exe. Теперь нужно решить, какой файл *.tlk в ней открыть. Если вы уже перевели текст на русский в своём файле *_ru-ru.tlk, то откройте в программе именно его. Если вы ещё не переводили текст, тогда создайте копию файла *_en-us.tlk, переименуйте её в *_ru-ru.tlk и откройте переименованную копию в DAOTlkEdit.
Открыть файлы в программе можно двумя способами: просто перетащить *.tlk в окно программы, либо через меню File – Open… Когда файл откроется, обратите внимание на пустую строку в правой части программы, выделенную на скриншоте ниже. Нажмите на неё и выберите в выпавшем списке пункт Conversations (DLG).

Если вы выбрали этот пункт впервые, то придётся немного подождать, пока программа не просканирует и не добавит все файлы *.dlg из папок игры. На данный момент оригинальные диалоги нас не интересуют, нам нужно добавить свои из мода. Для этого выделите слово Custom, расположенное в окне ниже, кликните по нему ПКМ и в выпавшем меню выберите пункт Add custom resource files.

В появившемся окне укажите путь до файлов *.dlg, которые вы хотите добавить в программу, и загрузите их. Кстати, открыть в этом окне можно несколько файлов одновременно. Разверните папку Files в папке Custom, а затем первый диалог. Я загрузила в программу один *.dlg, и вот как это выглядит:

Развернув диалог в этом окне, вы увидите все его фразы в виде списка. Строка = фраза. Если нажать на строку ЛКМ, то программа автоматически найдёт по ID эту фразу в файле *.tlk. Понять, кому принадлежит фраза (NPC или Стражу), тоже легко. Напротив фразы NPC вы увидите пометку (OWNER – PLAYER), это значит, что эту фразу кто-то адресовал Стражу. Напротив фраз Стража будет пометка (PLAYER).

В программе существует целых два дерева диалога. Первым выступает список фраз, который мы только что развернули. Если вы развернёте строку NPC, то увидите ответ(ы) Стража и наоборот.

Не забывайте, что в диалогах также присутствуют строки-пустышки. Если вы нажмёте на них в этом окне, то программа сообщит, что совпадений в *.tlk не было обнаружено. Чаще всего строки-пустышки встречаются среди фраз Стража, они нужны для того, чтобы несколько фраз NPC, идущих подряд, автоматически переключались на следующие.
Второе дерево диалогов находится в одноименной вкладке программы под названием Dialog-Tree:

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

Восстановление ID
Моим первым модом, который я выбрала для перевода, был Grey Wardens of Ferelden. Увы, перевести его мне не удалось потому, что в файлах *.utc присутствовали битые ID, а в обучающей статье по переводу, которая на тот момент была одна, подобный случай не описывался. Что значит «битые ID»? Это когда вместо привычных цифр (1234567890) мы видим -1. Да, всего лишь -1. Такое значение в *.tlk не перенести, потому что работать оно не будет. В этом случае придётся немного попотеть и восстановить ID вручную.
Чаще всего битые ID встречаются в файлах GFF, и появляются они там после сохранения в Тулсете. Никогда этого не делайте! Тулсет не отображает ID в файлах GFF, поэтому после сохранения ломает их. Пользуйтесь daoGFF или подобными программами.
Прежде чем начать восстановление ID, нужно понять, является ли битый файл из мода копией оригинального игрового файла или же создан с нуля. Конечно, новичку-локализатору будет сложно отличить один файл от другого, поэтому обратимся к описанию мода. Там точно должно быть указано, что делает мод, каких персонажей переодевает, какие предметы/броню изменяет и так далее. И если описание гласит, что мод переодевает, например, Давета из Остагара в другие/новые доспехи, то мы понимаем, что это игровой персонаж, и его файл нужно искать в ресурсах игры. Давет – персонаж оригинальной кампании, поэтому идём по пути: корневая_папка_игры \modules\single player\data.
В папке находится множество ресурсов игры, запакованных в архивы *.erf. Так как речь идёт о персонаже, то нужен архив с файлами *.utc под названием designercreatures.erf (где creatures – существа). Открываем архив с помощью ErfEditor.exe и ищем файл по названию. Кстати, если позволяет место на диске, можете распаковать все или некоторые игровые ресурсы, чтобы файлы было удобнее искать через проводник.
У меня битый файл называется pre100cr_daveth.utc, в архиве я ищу такой же:

Вытащить файл из архива можно либо перетаскиванием его из окна программы, либо нажатием по нему ПКМ и выбором пункта Extract Resource…. Так как у файлов одинаковые названия, то вытащенный из архива оригинал нужно положить в другую папку.
Запустите две копии программы daoGFF. В одной копии откройте битый файл, а в другой – оригинал. Давайте сравним их:


В оригинальном файле текст отсутствует, так как он был удалён локализаторами игры, но нам нужны только ID. Скопируйте их в битый файл, заменив значение -1. ID из LocName в LocName, ID из Description в Description. Получится так:

После чего удалите строку или строки с английским текстом в восстановленном файле. Текст в *.tlk мода переносить не нужно, он уже находится в корневом файле *.tlk. Сохраните файл и замените им копию из мода.
Это было восстановление оригинального файла, однако авторские файлы GFF восстанавливаются по точно такой же схеме. Только ID вы должны придумать самостоятельно. Чтобы уменьшить вероятность конфликтов с другими модами, я рекомендую использовать диапазон ID от 1900000000 до 2147483647. Это максимальное значение, которое принимает Тулсет, однако через программу daoGFF вы можете задать максимальное значение аж до 4294967294 включительно. Игра будет работать с ним, несмотря на ограничения Тулсета.
Запаковка мода
Вернёмся к моду Armor of the Elven Warden, который я брала в качестве примера для данной статьи. Текст из файлов мода был перенесён в файл *.tlk и кажется, что можно приступать к запаковке, но не тут-то было. К сожалению, автор допустил ещё одну ошибку. Её допускают многие, поэтому прочтите следующую информацию очень внимательно.
Подробно про структуру dazip-архивов здесь. Но если вкратце, то любой мод (*.dazip) поделён на две части: часть core и часть module. Если положить любые файлы в часть core, то они будут работать (использоваться) во всех кампаниях, включая пользовательские. Если файлы положить в часть module, то они будут работать только в определённой кампании, UID которой прописан в manifest.xml. Как правило, работать в любых кампаниях должны моды на броню, оружие и прочие полезные вещицы. А вот квесты, локации и компаньоны должны находиться в пределах одной кампании, потому что простым копированием файлов в часть core вы не заставите эти моды работать везде. Так вот, если файлы брони/оружия лежат в части module, то при импорте вашего героя в другую кампанию, вы обнаружите его голым.
Посмотрим, как автор мода расположил файлы. Проверим сначала папку core. Отсортируем файлы в проводнике по типу:

Здесь присутствуют только модели, текстуры и файлы *.gda, в которых прописаны новые модели брони. Но этого явно недостаточно, чтобы броня очутилась в игровом инвентаре. Переходим в папку module по пути:
*рабочая папка*\Contents\addins\UID мода\module\data

В этой папке как раз всё недостающее: файлы предметов инвентаря (*.uti). Так как эти файлы находятся в части module, а в manifest.xml UID кампании указан Single Player, то броня дальше оригинальной кампании работать не будет.
Итак, выберите в папке все файлы *.uti, скопируйте их сочетанием клавиш Ctrl + С, а затем вставьте сочетанием клавиш Ctrl + V по пути:
*рабочая папка*\Contents\addins\UID мода\core\data
Готово! Почему мы копируем файлы, а не вырезаем их? Потому что копии должны остаться в архиве *_module.erf, так как среди файлов есть скрипт, добавляющий предметы в инвентарь при загрузке сохранения. Этот скрипт запускает файл *.cif, если скрипт на добавление предметов перенести в папку core, то файл *.cif не сможет его оттуда запустить.
Что касается файлов *.tlk, то их не нужно дублировать в папку module\data, достаточно создать по одной копии *_c_en-us.tlk и *_c_ru-ru.tlk и поместить их по пути: *рабочая папка*\Contents\addins\UID мода\core\data\talktables. Это сработает, потому что все файлы мода теперь находятся в папке core\data. Помните, что это касается только модов на броню/оружие/предметы. Если вы переводите мод на кампанию/компаньона/квест, то расположение файлов *.tlk будет зависеть от расположения прочих файлов мода. Иными словами, если файл *.utc нового компаньона находится в папке module\data, его нельзя переносить в папку core\data, а это значит, что текст из него придётся занести в файлы *_en-us.tlk и *_ru-ru.tlk. В этом случае в названии файлов _c_ недопустима, а сами файлы также должны быть расположены в папке module\data.
Теперь точно переходим к запаковке. Можно воспользоваться автоматическим способом запаковки, описанным здесь в конце статьи. Но если файлов немного, их можно запаковать вручную. Для этого откройте нужный архив *.erf с помощью ErfEditor.exe, нажмите на любой файл в нём ПКМ и выберите в выпавшем меню пункт Insert resource…. В открывшемся окне укажите путь до файлов, которые хотите запаковать, и выберите до 6 файлов включительно (больше нельзя, файлы добавятся с ошибкой). Подтвердите замену, добавьте следующие файлы в *.erf и/или сохраните его. После сохранения не забудьте удалить резервную копию в формате *.bak.
Когда отредактированные файлы будут запакованы в архивы *.erf, удалите их из папок core\data и module\data. У меня получится следующее:
- По пути: *рабочая_папка*\Contents\addins\kytx_ewarmor\core\data папка talktables с файлами *.tlk и архив kytx_ewarmor_modcore.erf со всеми файлами мода, включая перенесённые и отредактированные файлы GFF.
- По пути: *рабочая_папка*\Contents\addins\kytx_ewarmor\module переведённый файл kytx_ewarmor.cif.
- По пути: *рабочая_папка*\Contents\addins\kytx_ewarmor\module\data архив kytx_ewarmor_module.erf с отредактированными файлами GFF.
- Рядом с папкой Contents переведённый файл manifest.xml.
Теперь перейдите в рабочую папку, выделите папку Contents и файл manifest.xml и нажмите по ним ПКМ. В выпавшем меню выберите пункты 7-zip – Добавить к архиву… Поля в появившемся окне вы должны заполнить следующим образом:
- Архив: EWArmor0.1.dazip. (Название как у оригинального *.dazip, либо EWArmor0.1_en_ru.dazip, либо т.п.).
- Формат архива: zip
- Уровень сжатия: ультра
- Метод сжатия: Deflate

Нажмите ОК и архиватор запакует ваш переведённый *.dazip, который останется только установить и проверить в игре. Подробно о запаковке *.dazip написано в конце этой статьи.
УРААААА!!!!!!!
У вас получилось! Это круто! Да, поначалу перевод модов может пугать, но немного практики – и вы будете расправляться с модами одной левой. Удачи вам в переводах, моддинге и самой игре!!!