Skip to content

nourlie/GlyphCore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GlyphCore

Русский · English

Локализация Guild Wars 2 — отрисовка шрифтов (кириллица, корейский) + перевод текста

Локализация Guild Wars 2 на любой язык: игра начинает рисовать буквы, которые штатно показывает пустыми квадратами (кириллица, корейский/хангыль и др.), плюс перевод игрового текста — без изменения Gw2.dat. Guild Wars 2 localization (Russian / Korean / …).

image

Прокси-DLL ранней загрузки, которая заставляет Guild Wars 2 рисовать буквы, которые штатный клиент показывает пустыми квадратами (кириллица, корейский и др.), и переводит игровой текст на ваш язык. Подстановка языко-нейтральна — в словарь можно положить перевод на любой язык. Это проект для доступности / локализации: он учит живой движок шрифтов рисовать нужные глифы и подменяет текст в памяти, без изменения файла Gw2.dat на диске, поэтому проверки целостности архива ArenaNet проходят и игра не запускает «починку».

Статус: ✅ Нелатинский текст (кириллица, корейский хангыль) рендерится без краша. ✅ Перевод текста, включая ранее нечитаемые зашифрованные (RC4) строки (~70 % текста). ✅ Внутриигровой оверлей (клавиша Insert): редактор словаря, сбор строк и настройки прямо в игре — с переключателем языка интерфейса (Русский / English).

⬇️ Готовые файлы — на странице Releases. Собирать из исходников не нужно — просто скачайте и положите в папку игры.

⚠️ Готовый перевод в комплект не входит. Релиз содержит version.dll (рендеринг кириллицы + оверлей), gw2-cyrillic-gui.exe (редактор словаря) и cyrillic-string-dump-tool.exe (дамп текста). Словарь cyrillic_strings.csv вы наполняете сами — извлеките английский текст dump-tool'ом и переведите (или копите строки прямо в игре). Без заполненного словаря кириллица рисуется, но текст остаётся английским.


📦 Установка

  1. Скачайте version.dll из последнего релиза.
  2. Положите его в папку Guild Wars 2 — рядом с Gw2-64.exe.
  3. Запустите игру. Кириллица отрисуется. Готово.
Guild Wars 2\
├─ Gw2-64.exe
└─ version.dll      ← скачанный файл

Настоящие экспорты version.dll форвардятся в подлинную системную version.dll из System32 автоматически — отдельная копия version_orig.dll не нужна.

🔄 Автообновление. При запуске version.dll проверяет GitHub-релизы и, если есть новее, тихо обновляет себя к следующему запуску (фоном, при наличии сети).

Откатить: удалить version.dll из папки игры.


🪟 Внутриигровой оверлей (клавиша Insert)

version.dll встраивает в игру полноценный оверлей — открывается клавишей Insert. Это основной способ работать с локализацией, не выходя из игры. Вертикальные вкладки, тёмная тема, язык интерфейса переключается (Русский / English) во вкладке «Интерфейс»:

  • Перевод — статус и общее управление.
  • Найденные слова — строки, собранные по ходу игры, с разбивкой по файлам.
  • Редактор словарей — правка любых dict_*.csv / pn_*.csv, основного cyrillic_strings.csv и собранных строк прямо в игре: редактирование по клику, фильтры (все / переведённые / непереведённые), поиск, индикатор прогресса, быстрый переход «К непереведённой». Изменения применяются вживую сразу после сохранения — без перезапуска и переоткрытия панелей.
  • Интерфейсязык интерфейса оверлея (Русский / English), позиция и размер HUD-иконки, масштаб шрифта оверлея, выбор шрифта игровых глифов и его размера (применяется на лету).
  • Журнал — диагностический лог.

В редакторе работают вставка/копирование (Ctrl+V / Ctrl+C), а корейский ввод/текст отображается глифами (через системный шрифт), а не «квадратами».

Сбор строк (autocollect / seed_decode) можно включать и выключать прямо в оверлее — без перезапуска игры.


📝 Перевод текста игры

Помимо отрисовки недостающих букв, version.dll переводит игровой текст. Перевод берётся из словаря cyrillic\cyrillic_strings.csv (колонки english,translate — перевод на любой язык; редактируется в любой таблице, в GUI или в оверлее). Английская строка заменяется переводом в памяти, после проверок целостности — .dat не трогается. Длина перевода не ограничена. Переводятся в том числе зашифрованные (RC4) строки — это ~70 % всего текста игры.

Подстановка языко-нейтральна: в колонку translate можно положить русский, корейский или любой другой язык. По умолчанию игра остаётся на оригинальном английском, если язык системы не русский (translate включается автоматически только на русских системах; в остальных — включите его в оверлее или в config.ini).

Guild Wars 2\
├─ version.dll
├─ cyrillic-string-dump-tool.exe   ← инструмент дампа словаря (из релиза)
└─ cyrillic\
   ├─ cyrillic_strings.csv         ← основной словарь (english,translate) — заполняете перевод
   ├─ dict_*.csv                   ← словари по источникам (вики/API) — тоже подхватываются
   ├─ discovered_strings.csv       ← авто-собираемые новые строки (временный)
   ├─ cyrillic.ttf                 ← свой шрифт (опционально)
   ├─ config.ini                   ← настройки
   └─ version_proxy_log.txt        ← лог

Получить базовый словарь — cyrillic-string-dump-tool.exe

Незашифрованные строки (имена предметов и часть UI — это меньшая часть текста) можно извлечь из Gw2.dat офлайн инструментом cyrillic-string-dump-tool.exe (скачивается из того же релиза):

  1. Полностью закройте игру (и лаунчер — ему нужен эксклюзивный доступ к архиву).
  2. Положите cyrillic-string-dump-tool.exe в папку Guild Wars 2 (рядом с Gw2.dat) и запустите (двойной клик).
  3. Он сканирует архив (несколько минут) и дописывает найденные английские строки в cyrillic\cyrillic_strings.csv (merge — существующие строки и ваши переводы сохраняются).

Затем заполняйте колонку translate (перевод на ваш язык).

ℹ️ Зашифрованные (RC4) строки — ~70 % текста — этим инструментом офлайн НЕ извлекаются (для них нужны рантайм-ключи игры). Они попадают в словарь по мере игры через сбор строк (см. ниже): version.dll декодирует их на лету и записывает. Итог: полный словарь = базовый офлайн-дамп (raw) + сбор RC4 в игре.

Больше источников текста — официальная вики и GW2 API

cyrillic-string-dump-tool.exe извлекает английский текст не только из Gw2.dat, но и из официальной вики и GW2 API — это то, что в .dat лежит зашифрованным или приходит с сервера (диалоги, реплики). Запустите инструмент без аргументов — откроется меню (стрелки / пробел / Enter) с выбором источников:

  • Вики: сюжетные диалоги (по дополнениям), реплики сердец возрождения, события, зонные (ambient) диалоги, реплики боссов, NPC-диалоги (окно разговора).
  • GW2 API: достижения, предметы, умения, черты, скины, названия на карте мира (зоны / точки интереса / вейпоинты) и пакет коротких списков (звания, валюты, краски, маунты, миниатюры, гильдия, WvW и др.).

Каждый источник пишется в свой файл dict_<источник>.csv (формат english,translate, merge — ваши переводы сохраняются). version.dll сама подхватывает все dict_*.csv из папки cyrillic\ вместе с cyrillic_strings.csv, так что держать переводы в отдельных файлах удобно и ничего не ломает (ручной перевод в cyrillic_strings.csv имеет приоритет).

Долгие выгрузки (события, диалоги, NPC — тысячи страниц) пишутся по ходу и поддерживают возобновление: если прервать, повторный запуск продолжит с того места, а не качает всё заново.

Сбор строк по мере игры

version.dll декодирует строки, которые показывает игра (включая зашифрованные), и дописывает их в cyrillic\discovered_strings.csv. При следующем запуске новые строки автоматически сворачиваются в cyrillic_strings.csv. Так словарь дополняется тем, что вы реально видите в игре. Два режима (включаются в оверлее или в config.ini):

  • autocollect — собирает строки по мере их появления на экране.
  • seed_decode — расшифровывает все строки, присланные сервером (намного больше показанных на экране, ~18× охвата).

Склонения по числу — [одна|две|пять]

Русские существительные склоняются по количеству (1 снежинка, 3 снежинки, 5 снежинок), а английское [s] это выразить не может. Поэтому в переводе поставьте три формы через | в квадратных скобках — version.dll сама выберет нужную по числу, которое подставляет игра:

[форма_для_1 | форма_для_2-4 | форма_для_5+]
Когда Какое число Берётся форма
одна 1, 21, 31, 101 … (но не 11) [форма1`
две 2–4, 22–24 … (но не 12–14) `[…
пять 5–20, 0, 25–30 … `[…

Пример. Английская строка-счётчик %num1% Snowflake[s] → в колонке russian. Общую основу слова удобно вынести за скобки, а в скобках оставить только различающиеся окончания:

english,translate
%num1% Snowflake[s],%num1% снежин[ка|ки|ок]

В игре отрисуется: 1 снежинка, 3 снежинки, 7 снежинок. (Можно и полными словами — [снежинка|снежинки|снежинок], обе записи равнозначны.)

Ещё пара отметок:

  • две формы [ый|ые] — прилагательное/суффикс: форма для 1, иначе — вторая (напр. золот[ой|ые] [ключ|ключа|ключей]);
  • одиночная [ы]/[и] без | отдаёт только единственное число (движок не умеет менять основу слова) — для счётчиков всегда используйте три формы.

Склонения применяются и при загрузке словаря, и вживую при сохранении правки в редакторе оверлея.


🅰️ Шрифт глифов

По умолчанию игровые глифы рисуются зашитым шрифтом Tahoma (содержит латиницу и кириллицу). Для корейского (хангыль) version.dll дополнительно использует глифы хангыля, уже вшитые в саму игру, поэтому корейский рисуется во всём интерфейсе без подключения отдельного шрифта. Чтобы рисовать кириллицу своим шрифтом — два пути:

  • В оверлее: вкладка Интерфейс → выбрать .ttf и размер. Применяется на лету (при следующей загрузке шрифтового ассета — смене зоны/карты), без перезапуска.
  • Drop-in: положить файл cyrillic.ttf в подпапку cyrillic\ рядом с version.dll.
Guild Wars 2\
├─ Gw2-64.exe
├─ version.dll
└─ cyrillic\
   └─ cyrillic.ttf   ← ваш шрифт

Если положить cyrillic.ttf / cyrillic_strings.csv прямо в папку игры, при следующем запуске version.dll сама перенесёт их в cyrillic\.

Important

Шрифт обязан содержать кириллические глифы. Если в .ttf нет кириллицы, version.dll отклонит его и откатится на встроенный шрифт — без вылета. Проверить можно в логе cyrillic\version_proxy_log.txt.

Warning

Не доверяйте окну предпросмотра шрифта в Windows — оно показывает русский даже у шрифтов без кириллицы (системный font fallback), а в самом файле букв нет. Берите шрифты с реальным покрытием кириллицы: Roboto, Open Sans, PT Sans, Noto Sans.


⚙️ Настройки — cyrillic\config.ini

Настройки можно менять в оверлее (вкладка Интерфейс) или вручную в cyrillic\config.ini (создаётся при первом запуске). Основные параметры:

# Автообновление version.dll с GitHub-релизов.
autoupdate=true
# Применять перевод из cyrillic_strings.csv (показывать перевод в игре).
# По умолчанию on только на русской системе, иначе оригинальный английский.
translate=true
# Язык интерфейса оверлея: ru | en (по умолчанию en, если система не русская).
ui_lang=ru
# Автосбор показанных строк в discovered_strings.csv.
autocollect=false
# Полный сбор: расшифровывать ВСЕ присланные сервером строки (~18× охвата).
seed_decode=false
# Переводить имена персонажей и названия локаций (слой pn_*.csv).
translate_proper_nouns=false
Параметр По умолчанию Что делает
autoupdate true проверяет и ставит обновления version.dll с GitHub
translate по локали подтягивает словарь и показывает перевод в игре (on на русской системе, иначе off)
ui_lang по локали язык интерфейса оверлея: ru / en (en, если система не русская)
autocollect false собирает показанные строки в discovered_strings.csv
seed_decode false расшифровывает все серверные строки (полный сбор)
translate_proper_nouns false переводит имена/локации из слоя pn_*.csv

Сбор строк (autocollect / seed_decode) и большинство настроек применяются на лету при изменении в оверлее — перезапуск не нужен.


🖥️ GUI — редактор словаря, настройки и статус

Кроме внутриигрового оверлея, в релизе есть gw2-cyrillic-gui.exe — отдельная графическая программа для работы со словарём вне игры. Положите её рядом с version.dll (в папке игры) или запустите откуда угодно и укажите папку GW2 — она найдёт cyrillic\ автоматически (в т.ч. через поиск по Steam-библиотекам).

Guild Wars 2\
├─ version.dll
├─ gw2-cyrillic-gui.exe   ← графический редактор (из релиза)
└─ cyrillic\
   └─ cyrillic_strings.csv

Вкладки:

  • Словарь — таблица English / Русский поверх cyrillic_strings.csv: поиск, фильтры (все / переведённые / непереведённые / со сломанной разметкой), подсветка непереведённых и строк с битыми плейсхолдерами, выделение строк чекбоксами и массовые операции, отмена правок (Ctrl+Z), прогресс перевода и переход к следующей непереведённой строке. Изменения сохраняются в тот же CSV.
  • Настройки — правка cyrillic\config.ini в пару кликов, плюс тема оформления (тёмная/светлая, акцент).
  • Статус — разбор cyrillic\version_proxy_log.txt: что загрузилось, нашлись ли сигнатуры, виден ли словарь — удобно для диагностики.

GUI ничего не ломает в игре: он лишь редактирует словарь и config.ini и читает лог. Перевод по-прежнему применяет version.dll.


🔧 Для продвинутых — gw2-dat-tool (опционально)

В репозитории есть CLI gw2-dat-tool/ для работы со своим Gw2.dat: экспорт словаря строк, просмотр AFNT-чанков шрифтов, генерация кириллических атласов. Большинству он не нужен — хватает version.dll + cyrillic-string-dump-tool.exe. Подробности — в gw2-dat-tool/README.md.

# экспорт всего словаря строк в CSV (игра закрыта):
cargo run --release -- --dat "C:\путь\к\Guild Wars 2\Gw2.dat" strs-export-all --out dict.csv

Как это работает (кратко)

Guild Wars 2 хранит шрифты и текст внутри архива Gw2.dat. Прямые подходы не работают: править Gw2.dat нельзя (клиент проверяет CRC и удаляет изменённые файлы → перекачка), а обычный аддон грузится уже после того, как игра прочитала данные.

version.dll обходит оба ограничения: GW2 импортирует её статически, поэтому она грузится до движка; игра читает и проверяет подлинные данные, а затем DLL подменяет распакованные байты шрифта и строк в ОЗУ — после всех проверок целостности, но до парсера. Файл Gw2.dat на диске при этом не изменяется. Оверлей рисуется поверх игры через хук Direct3D.

Исходный код инжектируемой version.dll закрыт; в релизах публикуется готовый бинарь.


⚠️ Правовая часть / игровые данные

Репозиторий содержит инструмент gw2-dat-tool и кириллические данные. В нём нет данных, извлечённых из Gw2.dat — это собственность ArenaNet; готовые файлы вы получаете из своей легально установленной копии игры (через dump-tool) либо из релизов.

Guild Wars 2 — торговая марка ArenaNet, LLC. Это неофициальный некоммерческий фанатский проект, не связанный с ArenaNet и не одобренный ей.

Лицензия

MIT для кода в этом репозитории.

About

Локализация Guild Wars 2 — кириллический шрифт и перевод текста (русская локализация GW2). Cyrillic font rendering + text translation for Guild Wars 2.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages