Русский · English
GlyphCore заставляет Guild Wars 2 рисовать буквы, которые штатный клиент показывает пустыми квадратами (кириллица, корейский хангыль и др.), и переводит игровой текст на любой язык — без изменения
Gw2.datна диске. Guild Wars 2 localization (Russian / Korean / …).
Это прокси-DLL ранней загрузки. Она учит живой движок шрифтов рисовать нужные глифы
и подменяет строки в памяти — после того как игра прочитала и проверила
подлинные данные, но до их вывода на экран. Файл Gw2.dat не трогается, поэтому
проверки целостности архива ArenaNet проходят и «починка» не запускается. Подстановка
языко-нейтральна: в словарь можно положить перевод на любой язык.
Что уже работает:
- ✅ Нелатинский текст (кириллица, корейский хангыль) рендерится без краша.
- ✅ Перевод текста, включая ранее нечитаемые зашифрованные (RC4) строки — это ~70 % всего текста игры.
- ✅ Внутриигровой оверлей (клавиша Insert): редактор словаря, сбор строк и настройки прямо в игре, с переключателем языка интерфейса (Русский / English / 한국어).
- ✅ Сбор строк и кастомные шрифты глифов переживают обновления игры и не крашат клиент.
⬇️ Готовые файлы — на странице Releases. Собирать из исходников не нужно.
Запустите GlyphCoreInstaller.exe из последнего релиза:
- Укажите папку Guild Wars 2 (установщик проверит, что в ней есть
Gw2.dat). - Отметьте, какие категории перевода включить (можно все).
- Нажмите «Установить» — установщик положит
version.dllиglyphCore\dictionary.bin, создаст или обновитconfig.ini(невыбранные категории отключит черезdisabled_files, остальные ваши настройки не трогает).
Скачайте version.dll из релиза
и положите рядом с Gw2-64.exe. Запустите игру — кириллица отрисуется.
Guild Wars 2\
├─ Gw2-64.exe
└─ version.dll ← скачанный файл
Экспорты
version.dllавтоматически форвардятся в подлинную системнуюversion.dllизSystem32— отдельная копияversion_orig.dllне нужна.
🔄 Автообновление. При запуске
version.dllпроверяет GitHub-релизы и при наличии новой версии тихо обновляется к следующему запуску (фоном, при наличии сети). Откат: удалитьversion.dllиз папки игры.
Основной способ работать с локализацией, не выходя из игры. Открывается клавишей Insert: вертикальные вкладки, тёмная тема, язык интерфейса переключается (Русский / English / 한국어) во вкладке «Интерфейс».
| Вкладка | Что внутри |
|---|---|
| Настройки | статус и общее управление: перевод, автообновление, автосбор, полный сбор по сидам, отправка найденного на сервер |
| Найденные слова | собранные по ходу игры строки с разбивкой по файлам; перетаскивание слова на файл-категорию добавляет его новой строкой |
| Редактор словарей | правка любых dict_*.csv / pn_*.csv, main_strings.csv и категорий dictionary.bin прямо в игре: правка по клику, фильтры (все / переведённые / непереведённые), поиск, прогресс, переход «К непереведённой». Изменения применяются вживую сразу после сохранения — без перезапуска |
| Файлы перевода | вкл/выкл отдельных файлов и категорий словаря, экспорт «bin → CSV» / импорт «CSV → bin», кнопка «Влить найденное» (переносит переведённые найденные строки в словарь), статистика покрытия |
| Интерфейс | язык оверлея (Русский / English / 한국어), позиция и размер HUD-иконки, масштаб шрифта оверлея, выбор шрифта игровых глифов и его размера (на лету) |
| Журнал | диагностический лог |
В редакторе работают Ctrl+V / Ctrl+C; корейский ввод отображается глифами, а не «квадратами».
Сбор строк (
autocollect/seed_decode) включается и выключается прямо в оверлее, без перезапуска. Хуки сбора ищутся по сигнатурам и переживают обновления игры; кастомный шрифт глифов защищён от паник и не может уронить игру.
Перевод берётся из двух источников:
glyphCore\main_strings.csv— основной словарь (колонкиenglish,translate, перевод на любой язык; редактируется в таблице или оверлее);glyphCore\dictionary.bin— скомпилированный бинарный словарь, объединяющий много категорий сразу (собирается кнопкой «CSV → bin» в оверлее или ставится установщиком).
Английская строка заменяется переводом в памяти, после проверок целостности —
.dat не трогается. Длина перевода не ограничена. Переводятся в том числе
зашифрованные (RC4) строки (~70 % текста игры).
Подстановка языко-нейтральна: в
translateможно положить русский, корейский или любой другой язык. По умолчаниюtranslateвключается автоматически только на русских системах; на остальных игра остаётся на оригинальном английском (включить можно в оверлее или вconfig.ini).
Guild Wars 2\
├─ version.dll
└─ glyphCore\
├─ dictionary.bin ← скомпилированный словарь (много категорий разом)
├─ main_strings.csv ← основной словарь (english,translate)
├─ csv\ ← dict_*.csv для офлайн-редактирования / сборки в bin
├─ discovered_strings.csv ← авто-собираемые новые строки (временный)
├─ seed_ids.csv ← id↔строка для сид-сбора (см. «Полный сбор строк»)
├─ cyrillic.ttf ← свой шрифт (опционально)
├─ config.ini ← настройки
└─ version_proxy_log.txt ← лог
Папка и словарь были переименованы (
cyrillic\→glyphCore\,cyrillic_strings.csv→main_strings.csv); при первом запуске новой версииversion.dllсама переносит старые файлы на новые места.
Полный словарь = базовый офлайн-дамп (raw) + сбор RC4 в игре.
- Незашифрованный текст (имена предметов, часть UI, официальная вики, GW2 API)
извлекается офлайн dump-tool'ом в
dict_<источник>.csv(форматenglish,translate, merge — ваши переводы сохраняются).version.dllсама подхватывает всеdict_*.csvизglyphCore\csv\вместе сmain_strings.csv. - Зашифрованные (RC4) строки — ~70 % текста — офлайн НЕ извлекаются (нужны
рантайм-ключи игры). Они попадают в словарь по мере игры через сбор строк:
version.dllдекодирует их на лету и записывает.
version.dll декодирует показанные игрой строки (включая зашифрованные) и дописывает
в glyphCore\discovered_strings.csv; при следующем запуске они сворачиваются в
словарь. Два режима (в оверлее или config.ini):
autocollect— собирает строки по мере появления на экране.seed_decode— расшифровывает все присланные сервером строки (~18× охвата). Декодирование идёт в фоновом потоке и не тормозит игру; хуки резолвятся по сигнатурам и переживают обновления игры.
Отправка найденного (опционально). При первом запуске оверлей предлагает включить отправку непереведённых найденных строк на общий сервер — это помогает собрать материал для перевода сообществом. Включается/выключается в любой момент (
uploadвconfig.ini); отправляется только игровой текст.
Русские существительные склоняются по количеству (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 … | `[… |
Пример. Общую основу удобно вынести за скобки, оставив в них только окончания:
english,translate
%num1% Snowflake[s],%num1% снежин[ка|ки|ок]В игре: 1 снежинка, 3 снежинки, 7 снежинок. (Можно и полными словами —
[снежинка|снежинки|снежинок], равнозначно.)
Ещё пара отметок:
- две формы
[ый|ые]— прилагательное/суффикс: форма для 1, иначе вторая (напр.золот[ой|ые] [ключ|ключа|ключей]);- одиночная
[ы]/[и]без|отдаёт только единственное число — для счётчиков всегда используйте три формы.
Склонения применяются и при загрузке словаря, и вживую при сохранении правки в оверлее.
По умолчанию глифы рисуются зашитым шрифтом Tahoma (латиница + кириллица). Для
корейского version.dll использует глифы хангыля, уже вшитые в саму игру, поэтому
корейский рисуется во всём интерфейсе без отдельного шрифта. Чтобы рисовать кириллицу
своим шрифтом — два пути:
- В оверлее: вкладка Интерфейс → выбрать
.ttfи размер. Применяется на лету (при следующей загрузке шрифтового ассета — смене зоны/карты), без перезапуска. - Drop-in: положить
cyrillic.ttfв подпапкуglyphCore\.
Guild Wars 2\
├─ Gw2-64.exe
├─ version.dll
└─ glyphCore\
└─ cyrillic.ttf ← ваш шрифт
Если положить
cyrillic.ttf(или старыйcyrillic_strings.csv) прямо в папку игры, при следующем запускеversion.dllсама перенесёт файл вglyphCore\.
Important
Шрифт обязан содержать кириллические глифы. Если в .ttf нет кириллицы,
version.dll отклонит его и откатится на встроенный шрифт — без вылета. Растеризация
также защищена от внутренних сбоев библиотеки шрифтов: даже повреждённый .ttf не
уронит игру. Проверить можно в glyphCore\version_proxy_log.txt.
Warning
Не доверяйте окну предпросмотра шрифта в Windows — оно показывает русский даже у шрифтов без кириллицы (системный font fallback), хотя букв в файле нет. Берите шрифты с реальным покрытием кириллицы: Roboto, Open Sans, PT Sans, Noto Sans.
Меняются в оверлее (вкладка Интерфейс) или вручную в файле (создаётся при первом запуске либо установщиком).
| Параметр | По умолчанию | Что делает |
|---|---|---|
autoupdate |
true |
проверяет и ставит обновления version.dll с GitHub |
translate |
по локали | показывает перевод в игре (on на русской системе, иначе off) |
ui_lang |
по локали | язык интерфейса оверлея: ru / en / ko |
autocollect |
false |
собирает показанные строки в discovered_strings.csv |
seed_decode |
false |
расшифровывает все серверные строки (полный сбор), в фоне |
translate_proper_nouns |
false |
переводит имена/локации из слоя pn_*.csv |
upload |
не задан | отправлять найденные строки на общий сервер (спрашивается при первом запуске) |
disabled_files |
пусто | какие файлы/категории словаря не подгружать (через ;) |
autoupdate=true
translate=true # on только на русской системе, иначе оригинальный английский
ui_lang=ru # ru | en | ko (по умолчанию по локали системы)
autocollect=false
seed_decode=false # ~18× охвата к autocollect
translate_proper_nouns=false
upload=false
disabled_files= # список отключённых dict_*.csv / категорий bin, через `;`Сбор строк, выбор шрифта и большинство настроек применяются на лету при изменении в оверлее — перезапуск не нужен.
gw2-cyrillic-gui.exe — отдельная графическая программа для работы со словарём вне
игры (собирается из gw2-cyrillic-gui/). Положите её рядом с
version.dll или запустите откуда угодно и укажите папку GW2 — она найдёт glyphCore\
автоматически (в т.ч. через поиск по Steam-библиотекам).
Вкладки:
- Словарь — таблица
English / Русскийповерхmain_strings.csv: поиск, фильтры (все / переведённые / непереведённые / со сломанной разметкой), подсветка непереведённых и битых плейсхолдеров, чекбоксы и массовые операции, отмена (Ctrl+Z), прогресс и переход к следующей непереведённой строке. - Настройки — правка
config.iniв пару кликов + тема оформления. - Статус — разбор
version_proxy_log.txt: что загрузилось, нашлись ли сигнатуры, виден ли словарь — для диагностики.
GUI ничего не ломает в игре: он лишь редактирует словарь и
config.iniи читает лог. Перевод по-прежнему применяетversion.dll.
CLI gw2-dat-tool/ для работы со своим Gw2.dat: экспорт словаря
строк, просмотр AFNT-чанков шрифтов, генерация кириллических атласов. Большинству он
не нужен — хватает version.dll и оверлея/GUI. Подробности —
в gw2-dat-tool/README.md.
# экспорт всего словаря строк в CSV (игра закрыта):
cargo run --release -- --dat "C:\путь\к\Guild Wars 2\Gw2.dat" strs-export-all --out dict.csvGuild Wars 2 хранит шрифты и текст внутри архива Gw2.dat. Прямые подходы не работают:
править Gw2.dat нельзя (клиент проверяет CRC и удаляет изменённые файлы →
перекачка), а обычный аддон грузится уже после того, как игра прочитала данные.
version.dll обходит оба ограничения. GW2 импортирует её статически, поэтому она
грузится до движка; игра читает и проверяет подлинные данные, а затем DLL
подменяет распакованные байты шрифта и строк в ОЗУ — после всех проверок
целостности, но до парсера. Gw2.dat на диске не изменяется. Оверлей рисуется поверх
игры через хук Direct3D. Ключевые хуки резолвятся по сигнатурам (не по фиксированным
адресам), поэтому мод переживает большинство обновлений игры без правок.
Исходный код инжектируемой version.dll закрыт; в релизах публикуется готовый бинарь.
Репозиторий содержит инструменты для работы со словарём и кириллические данные. В нём
нет данных, извлечённых из Gw2.dat — это собственность ArenaNet; готовые файлы вы
получаете из своей легально установленной копии игры (через dump-tool) либо из релизов.
Guild Wars 2 — торговая марка ArenaNet, LLC. Это неофициальный некоммерческий фанатский проект, не связанный с ArenaNet и не одобренный ей.
MIT для кода в этом репозитории.