Текст игры почти никогда не лежит в открытом виде — локализатору сначала нужно найти, в каком файле или архиве он упакован, и только потом извлечь его в редактируемом формате. Первое действие при такой задаче — открыть папку с установленной игрой и изучить структуру каталогов: имена вроде localization, lang, strings, text или data обычно указывают на нужное место.
Дальнейший план зависит от того, как разработчик хранит ресурсы. Одни игры держат диалоги в обычных текстовых файлах, другие упаковывают всё в проприетарные архивы, третьи зашивают строки прямо в исполняемый файл. Ниже разберём все основные сценарии — от простого поиска до распаковки движковых контейнеров.
Шаг 1: Определяем движок и формат хранения текста
Прежде чем что-то распаковывать, полезно понять, на каком движке сделана игра. От этого зависит выбор инструментов. Признаки видны прямо в папке: наличие файлов .pak часто указывает на Unreal Engine, каталог *_Data с файлами .assets и resources.assets — на Unity, файлы .rpa — на Ren'Py, а .xp3 — на KiriKiri.
Если явных признаков нет, помогает поиск по содержимому. Откройте папку игры в продвинутом текстовом редакторе или файловом менеджере с поиском по содержимому файлов и поищите известную фразу из игры — например, строку из главного меню. Файл, где она найдётся, и есть цель.
- 🔍 Найдите в папке игры подкаталоги с названиями вроде
lang,text,strings - 📦 Обратите внимание на крупные файлы-архивы:
.pak,.dat,.bundle,.assets - 🧩 Определите движок по характерным файлам — от этого зависит выбор распаковщика
- 💬 Поищите известную фразу из игры по содержимому файлов
Шаг 2: Текст в открытом виде — самый простой случай
Часть игр, особенно инди-проекты и тайтлы с поддержкой модов, хранит строки в обычных файлах: .txt, .csv, .xml, .json, .po или .ini. Их можно открыть любым редактором вроде Notepad++ и сразу приступать к переводу. Перед правкой обязательно сделайте резервную копию оригинального файла.
Обратите внимание на кодировку. Многие игры используют UTF-8 или UTF-16, и при сохранении в неправильной кодировке текст в игре превратится в «кракозябры» или игра вовсе перестанет запускаться. В Notepad++ текущая кодировка отображается в строке состояния — сохраняйте файл в той же, что была изначально.
Шаг 3: Распаковка архивов и контейнеров
Когда текст упакован в архив, понадобится специализированный распаковщик. Универсального решения не существует: формат контейнера зависит от движка и студии. Для популярных движков сообщество давно написало готовые инструменты.
| Движок / тип игры | Типичные файлы | Инструмент для извлечения |
|---|---|---|
| Unity | .assets, .bundle, resources.assets | AssetStudio, AssetRipper |
| Unreal Engine | .pak, .uasset | umodel (UE Viewer), UnrealPak |
| Ren'Py | .rpa, .rpyc | rpatool, unrpyc |
| RPG Maker | .rgss3a, Data/*.rvdata2 | RPG Maker Decrypter |
| KiriKiri | .xp3 | XP3 Viewer, KrkrExtract |
Для малоизвестных движков есть универсальные сканеры — например, QuickBMS с готовыми скриптами под сотни форматов архивов. Его запуск выглядит так: выбираете скрипт под конкретную игру, указываете архив и папку для распаковки. Скрипты ищутся на профильных форумах по названию игры или движка.
⚠️ Внимание: скачивайте распаковщики только с официальных страниц проектов (GitHub, сайты разработчиков). Архиваторы ресурсов с файлообменников нередко содержат вредоносный код, а антивирусы и без того часто реагируют на такие утилиты ложными срабатываниями.
☑️ Проверка перед распаковкой
Шаг 4: Извлечение строк из исполняемых файлов
Иногда строки зашиты прямо в .exe или библиотеки .dll. Достать их оттуда можно, но редактировать сложнее: длина новой строки в бинарнике обычно ограничена размером исходной, и длинный русский перевод может просто не поместиться в отведённое место.
Для анализа исполняемых файлов используют hex-редакторы (HxD, 010 Editor) и утилиты извлечения строк. Поиск по известной фразе покажет, где лежит текст и есть ли рядом таблица смещений. Если строки в Unicode, включите соответствующий режим поиска — иначе фраза не найдётся.
Отдельный случай — зашифрованные или сжатые данные. Если содержимое файла выглядит как бессмысленный набор байтов, вероятно, применено шифрование или компрессия. В такой ситуации без готового инструмента от сообщества моддеров разобраться сложно: ищите тему по конкретной игре на профильных форумах.
Что такое таблица указателей и почему она важна
В бинарных файлах строки часто хранятся отдельно, а их адреса — в таблице указателей. Если вы замените строку более длинной, она «наедет» на следующую. Поэтому переводчики либо укладываются в исходную длину, либо переносят строки в свободное место файла и правят указатели. Это требует аккуратности и hex-редактора.
Шаг 5: Особенности перевода и обратной сборки
Извлечь текст — половина дела. Дальше его нужно перевести и вернуть в игру так, чтобы она его прочитала. Типичные проблемы на этом этапе: игра не поддерживает кириллицу в шрифте, строки обрезаются из-за лимита длины, ломаются скриптовые вставки вроде {player_name}.
Если шрифт игры не содержит русских глифов, переведённый текст отобразится квадратами или пустотой. Решение зависит от движка: иногда достаточно подменить файл шрифта, иногда требуется патч. Перед массовым переводом сначала проверьте отображение кириллицы на одной короткой строке — это сэкономит часы работы.
- 🔤 Проверьте поддержку кириллицы в шрифтах игры на тестовой строке
- 📏 Следите за длиной строк — интерфейсные надписи часто ограничены по ширине
- 🧷 Не переводите переменные и теги:
%s,{0},[color=...]должны остаться нетронутыми - 🧪 Тестируйте перевод небольшими порциями, а не всем файлом сразу
Правовые и технические ограничения
Стоит учитывать, что лицензионные соглашения многих игр запрещают модификацию файлов. Для личного использования фанатского перевода это обычно не создаёт проблем, но распространение модифицированных файлов игры может нарушать условия. Безопасный вариант — распространять перевод в виде патча или инструкции, а не изменённых ресурсов целиком.
Также помните про защиту от модификаций: онлайн-игры с античитом могут заблокировать аккаунт за изменённые файлы, а DRM-системы вроде Denuvo усложняют доступ к ресурсам. Для онлайн-проектов извлечение текста лучше не предпринимать вовсе.
⚠️ Внимание: никогда не распаковывайте и не изменяйте файлы многопользовательских игр с активным античитом (например, с системами уровня VAC, Easy Anti-Cheat, BattlEye) — это может привести к перманентной блокировке аккаунта.
Частые вопросы
Как узнать, в каком файле лежит текст, если файлов сотни?
Используйте поиск по содержимому файлов (например, через Total Commander или grep-утилиты) по точной фразе из игры. Если поиск не дал результатов, текст, вероятно, упакован в архив или зашифрован — тогда определяйте движок и ищите распаковщик под него.
Игра не видит переведённый файл — что делать?
Проверьте три вещи: кодировку файла (должна совпадать с исходной), имя и расположение файла (структура папок не должна меняться) и целостность структуры — не сломаны ли ключи, кавычки, теги. Если игра использует архив, файл нужно не просто положить рядом, а упаковать обратно тем же инструментом.
Можно ли вытащить текст из мобильной игры?
Для Android-игр ресурсы часто находятся внутри APK-файла, который представляет собой ZIP-архив. Файлы локализации могут лежать в ресурсах или в данных движка внутри пакета. Однако модификация и подпись изменённого APK — отдельная тема со своими ограничениями, и для игр с проверкой целостности этот путь может не сработать.
Текст извлёкся, но в нём много служебных символов — это нормально?
Да. Движки вставляют управляющие коды: переносы строк, цвета, переменные, переключатели портретов персонажей. Переводить нужно только читаемые фразы, а все служебные конструкции оставлять байт-в-байт как в оригинале.
Чем переводить большие объёмы текста?
Для массовой работы удобны CAT-инструменты и таблицы: извлечённые строки импортируют в OmegaT, Poedit (для .po-файлов) или даже в обычный редактор таблиц, если формат CSV. Это позволяет отслеживать прогресс, использовать глоссарий и не потерять непереведённые строки.