XCOM 2
Not enough ratings
Модификация шрифтов интерфейса
By Eric Kotato
В этом гайде объясняется, как делать модфицикации для шрифтов интерфейса в XCOM 2 и XCOM 2 War of the Chosen. Здесь описаны только детали, важные для создания шрифтовых модов, а не общая информация по модификации.
   
Award
Favorite
Favorited
Unfavorite
Английская версия/English version
Требования
Ищем оригинальные шрифты
Шрифты интерфейса используют механизм fontlib: упаковка всех шрифтов в один flash-файл. Для XCOM 2 WotC и не-азиатских языков это следующий файл:
XCOM 2 War of the Chosen SDK\XComGame\Content\XCOM_2\Packages\GFx\gfxCommon.upk

Азиатские языки используют следующие файлы шрифтов:
XCOM 2 War of the Chosen SDK\XComGame\Content\XCOM_2\Packages\GFx\gfxfonts_chn.upk XCOM 2 War of the Chosen SDK\XComGame\Content\XCOM_2\Packages\GFx\gfxfonts_cht.upk XCOM 2 War of the Chosen SDK\XComGame\Content\XCOM_2\Packages\GFx\gfxfonts_jpn.upk XCOM 2 War of the Chosen SDK\XComGame\Content\XCOM_2\Packages\GFx\gfxfonts_kor.upk

Имейте в виду: для vanilla-версии игры путь будет не через XCOM 2 War of the Chosen SDK, а через XCOM 2 SDK. Это, возможно, очевидно, но на всякий уточняю, чтобы не было вопросов.

Предупреждение: настоятельно советую вам сделать резервную копию файла, с которым вы будете работать, на случай, если что-то пойдёт не так. Само собой, вы можете перепроверить целостность файлов, но это будет долго.
Извлекаем шрифты
Весьма простой шаг. Вам нужно извлечь файл пакета шрифтов с помощью Gildor's Unreal Package Extractor.

После скачивания и распаковки Gildor's Unreal Package Extractor, откройте командную строку в папке с программой и выполните следующее:
extract.exe -extract "путь\к\вашему\пакету.upk"

Будет создана папка с извлечёнными файлами. Вам нужен из неё файл с расширением .SwfMovie.

Для примера, для не-азиатских языков это будет следующее:
gfxCommon\gfxfontlib.SwfMovie
Очищаем извлечённый файл
Перед открытием извлечённого файла .SwfMovie в FFDec, нужно выполнить ещё один дополнительный шаг: очистить первые байты, которые относятся к внутреннему типу ресурса, а не к типу файла.

Откройте извлечённый файл .SwfMovie в вашем hex-редакторе и удалите все байты до символов "GFX".



После удаления байтов сохраните файл с расширением .gfx. Несмотря на то, что FFDec откроет этот файл вне зависимости от расширения, смена расширения служит для двух целей:
  1. У вас будет резервная копия оригинального извлечённого файла на случай, если что-то пойдёт не так.
  2. Оно используется при переимпорте файла.

После сохранения вы сможете открыть этот файл .gfx через FFDec.
Заменяем шрифт
Если вы хотите добавить новый шрифт вместо замены, перейдите к следующему разделу.

В Вид > Ресурсы (должно быть открыто по умолчанию), в папке "шрифты" найдите и выберите шрифт, который вы хотите заменить. Например, Alpha (должен быть показан как "DefineFont3 (3: Alpha)").



Чтобы заменить символы, нажмите кнопку "Встроить...". Должно открыться окно "Встраивание шрифтов".



Выберите установленный шрифт или файл шрифта, который вам нужен.

Имейте в виду: несмотря на то, что написано "TTF файл", шрифты в формате OTF тоже прекрасно работают (возможно, и ещё какие-то другие форматы тоже, не тестировал). Просто выберите "Все файлы" в списке "Тип файлов" и выберите ваш файл .otf.

После этого у вас есть следующие варианты:
  • Выбрать диапазоны символов, которые вам нужны (или выбрать "Все символы" если вы хотите импортировать весь шрифт).
  • Ввести отдельные символы, которые вы хотите встроить.

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

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

В Вид > Ресурсы (должно быть открыто по умолчанию), кликните правой кнопкой по папке "Шрифты", затем выберите Добавить тэг > DefineFont3Tag. Должен добавиться новый шрифт.



Нажмите на него правой кнопкой мыши в списке и выберите "Редактировать байты". Должно быть показано дерево с параметрами.



Нажмите "Редактировать" и включите флаг fontFlagsHasLayout. Это важно, потому что без него не будут работать метрики шрифта. После включения и переключения на другой параметр (или сохранения) добавятся шесть новых параметров.



Также можно изменить имя в строке fontName.

Для азиатских языков, вам может понадобиться включить fontFlagsShiftJIS, fontFlagsWideOffsets и fontFlagsWideCodes, но это не тестировано. Буду рад услышать ваши отзывы на этот счёт.

Вы также должны указать метрики fontAscent и fontDescent чтобы получить правильную высоту строки. Не заморачивайтесь с опцией fontLeading, потому что в игре она ни на что не влияет.

Вы можете взять значения fontAscent и fontDescent из других шрифтов, или можете посчитать самостоятельно, умножив значение из шрифта на 20 (для ascent) или на -20 (для descent).

Пример:
У Roboto Condensed Regular значение WinAscent равно 1946, а значение WinDescent равно -512. Поэтому вы должны задать fontAscent как 38920 (1946 * 20), а fontDescent как 10240 (-512 * -20). Значения WinAscent и WinDescent можно получить из любого редактора шрифтов.

После задания и сохранения, нажмите кнопку "Встроить...". Должно открыться окно "Встраивание шрифтов".



Выберите установленный шрифт или файл шрифта, который вам нужен.

Имейте в виду: несмотря на то, что написано "TTF файл", шрифты в формате OTF тоже прекрасно работают (возможно, и ещё какие-то другие форматы тоже, не тестировал). Просто выберите "Все файлы" в списке "Тип файлов" и выберите ваш файл .otf.

После этого у вас есть следующие варианты:
  • Выбрать диапазоны символов, которые вам нужны (или выбрать "Все символы" если вы хотите импортировать весь шрифт).
  • Ввести отдельные символы, которые вы хотите встроить.

Нажмите OK для встраивания выбранных символов, и всё почти готово. Осталась только одна маленькая деталь.

Кликните правой кнопкой мыши по папке "остальные", затем выберите Добавить тэг > ExportAssetsTag.



Нажмите "Редактировать", кликните правой кнопкой мыши по параметру "assets", а затем выберите "Вставить asset в начало".

Задайте ID шрифта в tag[0] и укажите имя переменной, которое вы хотите (латиницей, без пробелов, начиная с $) в name[0].

Упаковываем шрифты
После добавления и/или замены и сохранения файла .gfx вам нужно переимпортировать его или создать новый пакет с ним.

Переимпортирование шрифтов
Скопируйте ваш gfxCommon.upk или gfxfonts_*.upk и переименуйте его. Важно, чтобы имя модифицированного пакета отличалось от оригинального.

Откройте редактор XCOM 2, затем откройте переименованный пакет в Content Browser, кликните правой кнопкой мыши по ресурсу SwfMovie из это пакета (для gfxCommon он называется gfxfontlib) и выберите "Reimport". Вам будет предложено выбрать файл. В будущем будет произведена попытка переимпортировать файл из той же папки, что и ранее.

После этого сохраните пакет и переместите/скопируйте в папку Content вашего мода Content.

Создание нового пакета
Откройте редактор XCOM 2, нажмите "Import" в Content Browser, затем выберите ваш файл .gfx. После этого будут открыты начальные настройки.

Задайте имя пакета ("Package Name", латиницей без пробелов) и имя ресурса ("Name", латиницей без пробелов) какое вам угодно, но важно, чтобы имя модифицированного пакета отличалось от оригинального.

Вам также надо изменить Texture Rescale на FlashTextureScale_High.

После этого сохраните пакет и переместите/скопируйте в папку Content вашего мода Content.
Заставляем шрифты работать
Наконец, чтобы заставить это всё заработать, вам нужно изменить GFxUI.int (или ваш локализованный файл GFxUI, например GFxUI.jpn). Скопируйте его в вашу папку Localization. Если у вас нет файла под ваш язык, просто скопируйте GFxUI.int и измените его расширение под ваш язык (например, GFxUI.rus).

В разделе [Fontlib] замените значение параметра Fontlib на ВашеИмяПакета.вашеИмяРесурса. Если вы добавляли шрифты, вы должны их указать разделе [Fonts] по имени переменной экспортера (без $) и имени шрифта. К примеру, если вы добавили шрифт под названием Roboto Condensed в тэге DefineFont3 и ссылаетесь на него в тэге ExportAssets как $MyRobotoFont, тогда вы должны указать его так:

MyRobotoFont=Roboto Condensed,Normal
Послесловие
Я надеюсь, этот гайд даст вам хотя бы хорошую основу для создания своих шрифтовых модов.

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

Я сделал шаблон для модов шрифтов фотокабинки. В ReadMe.txt в папке с этим модом вы найдёте инструкцию, как их использовать, в том числе и на русском.
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2625345994
Нужны примеры модов? Загляните в мои моды.
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2123679298 https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2129974349
10 Comments
bigforeverhearinguy 23 Jun, 2023 @ 4:29am 
@Eric Kotato Спасибо тебе но я не могу до сих пор разобраться с
Unreal Package Extractor когда открываю программу через cmd и пишу эту команду со своим файлом, ничего не получается, пишет программным файлом не исполняется а консоль с тем файлом не лежит
Eric Kotato  [author] 30 May, 2023 @ 2:28pm 
@курицаспешун
Ну PCGW говорит, что движок у него такой же (Unreal Engine 3), но я понятия не имею, так же запакованы там шрифты или нет. В SteamDB нашёл BmGame/CookedPCConsole/fonts_en.upk, попробуйте через Gildor's Unreal Package extractor извлечь. Единственная загвоздка, что там файлы, прошедшие процесс "готовки", что может усложнить задачу. Да и с перепаковкой могут быть трудности.

Плюс ко всему, гайд предназначен для шрифтов, сделанных через Flash, а там может быть вместо него обычный bitmap-шрифт, что будет ещё сложнее генерировать.
bigforeverhearinguy 30 May, 2023 @ 11:51am 
Если честно хотел поменять шрифты в Batman arkham knight но не получилось остановился на извлекаем шрифты не работает штука( Ну и понятно гайд то не про эту игру
Droblen 2 Mar, 2023 @ 2:53am 
У меня 3440х1440 и текст вообще не читабелен, только при 2560х1080 становится более менее. Вот я и поражаюсь, куча народа не может нормально в высоком разрешении поиграть и ищут именно возможность исправить субтитры, а им кидают ссылки на темы с интерфейсом, да и еще с претензией мол фигли вы тут темы плодите.
Eric Kotato  [author] 1 Mar, 2023 @ 11:53pm 
@Droblen
Это гайд для тех, кто занимается модификацией. Готовые моды на интерфейс тоже есть.

Если вы про мои два комментария, то я копал эту тему, но лишь поверхностно. Сделать сам мод на субтитры роликов не сильно проблема, вся загвоздка в том, как его проверить. У меня монитор 1600x900 20'', и поэтому тест на таком мониторе адекватных результатов не даст, к сожалению.
Droblen 1 Mar, 2023 @ 1:39pm 
Да бомбанул я знатно, субтитры в роликах меня убили так как с десяток ресрусов посетил и не нашел решения, и везде выдает замену интерфейса и шеф на командер с какими-то минимальными правками в тексте, нафига только я хз. Но вот опять же вопрос зачем было расписывать весь этот ад через который Вы прошли? Почему нельзя просто выложить готовые файлы и закинуть их в папку?
Eric Kotato  [author] 1 Mar, 2023 @ 8:44am 
С субтитрами в игре всё в разы сложнее. Они используют Flash (точнее, Scaleform), и чтобы вообще его можно было изменить, надо редактировать собранную флешку, что весьма проблемно. Велика вероятность, что саму флешку нужно будет менять в размере, что породит ещё больше проблем.

У субтитров в игре есть ещё одна проблема: они иногда прокручиваются медленнее, чем нужно, из-за чего кусок фразы попросту пропадает.

Если же вы ищете лёгкий способ поменять размер шрифта, то его, к сожалению, нет.
Eric Kotato  [author] 1 Mar, 2023 @ 8:44am 
@Droblen
Потому что гайд вообще не про шрифты субтитров и не про их размер.

Про "шрифты субтитров" здесь требуется уточнение: субтитры в роликах или субтитры в игре?

Субтитры в роликах используются bitmap-шрифты, которые меняются через редактор из SDK. Они создаются только под определённый размер, но, условно, ничто не мешает взять какой-нибудь системный шрифт, и увеличить на десяток-два размер в пунктах.
Droblen 28 Feb, 2023 @ 9:56pm 
да блять что за ебаный пиздец с вами ебаные люди долбаебы? какого хуя невозможно найти нормально описанный адеквватно работающщий способ увеличеть шрифты в субтитрах? нахуя блять вообще менять шрифты интерфейса? изза вас ебланов долбаебов в этой помойке вообще хуй разберешься. горите в аду мрази!
JonnyMSB 7 Jan, 2021 @ 2:29pm 
Спасибо за гайд! Познавательно!