Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GlyphCore

Русский · English

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

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

image

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

Что уже работает:

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

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


📦 Установка

Вариант A — установщик (рекомендуется)

Запустите GlyphCoreInstaller.exe из последнего релиза:

  1. Укажите папку Guild Wars 2 (установщик проверит, что в ней есть Gw2.dat).
  2. Отметьте, какие категории перевода включить (можно все).
  3. Нажмите «Установить» — установщик положит version.dll и glyphCore\dictionary.bin, создаст или обновит config.ini (невыбранные категории отключит через disabled_files, остальные ваши настройки не трогает).

Вариант B — вручную

Скачайте 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)

Основной способ работать с локализацией, не выходя из игры. Открывается клавишей 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.csvmain_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.


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

Меняются в оверлее (вкладка Интерфейс) или вручную в файле (создаётся при первом запуске либо установщиком).

Параметр По умолчанию Что делает
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, через `;`

Сбор строк, выбор шрифта и большинство настроек применяются на лету при изменении в оверлее — перезапуск не нужен.


🖥️ GUI — редактор словаря вне игры

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.


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

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.csv

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

Guild 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 для кода в этом репозитории.

About

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

Topics

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages