Перейти к содержимому
Zone of Games Forum
Tericonio

Руководство по русификации игр от Adventure Game Studio

Рекомендованные сообщения

Программы для работы с файлами

agsutils, Любой HEX-редактор, Photoshop, Notepad++

 

Скрытый текст

 

Поддержка версии Adventure Game Studio (2.0 + /3.0 +)

Для распаковки исполняемого файла нам понадобится agsutils

Скачиваем с репозитория и извлекаем архив в удобное место к примеру на диск D:\

Переносим в папку agutils —  исполняемый файл с которым будем работать и запускаем из этой директории CMD

Команда распаковки исполняемого файла: agstract file.exe folder1

Команда распаковки AGS файла: agstract file.ags folder1

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

Скрытый текст

acsprset.spr // Спрайты игры

*.wfn //Информация о шрифте

*.ttf //Шрифт

agspack.exestub // Игровой Player или исполняемый файл самого движка

agspack.info //Информация о распакованных файлах

*.ogg //Внутренние файлы диалогов персонажей или комментариев разработчиков либо ещё музыка может быть

*.dta //Информация с текстами на кнопки, расположение текста и т.д.

*.pcx //Загрузочный экран — открывается в Photoshop

room*.crm //Комнаты в которых тоже присутствует текст и часть скриптов за их вывод

sprindex.dat // Всякие данные о спрайтах

 

 

Скрытый текст

 

agscriptxtract -oblf folder1 folder2

Редактирование *.s скриптов в folder2

Открываем в Notepad++ и находим через поиск li ax, "

В строке li ax, " — Будет текст диалогов

Ниже строк __NEWSCRIPTSTART — операнды диалогов из li ax 

Всё что ниже __NEWSCRIPTSTART  вырезаем в другой файл и сохраняем чтобы не мешало, пока переводим, а когда переведёте, верните назад в файл

Текст замещаем только в li ax, ",  а также смотрим на регулярки внимательно : \? & \’  \”

Пример 1: What…\? — Что\?.. = Что?..  ← Итог

Пример 2: &What… — &Что... = Что...  ← Итог

Пример 3: \’ What\’ … — \’ Что\’... = ‘Что’... ←  Итог

Теперь преобразовываем в кодировку ANSI и сохраняем

 

Скрытый текст

agssemble folder2/script.s

 

Скрытый текст

 

К примеру, мы распаковали игру и у нас вышли такие *.s скрипты

dialogscript.s / gamescript0.s /gamescript1.s /globalscript.s /room1.s /room2.s

Упаковка будет такая:

agsinject 0 RU_s/globalscript.o RU/game*.dta   //(0 — первый скрипт на упаковку в *.dta) (Первый глобальный)
agsinject 1 RU_s/dialogscript.o RU/game*.dta  //(1 — второй скрипт на упаковку в *.dta) (Второй диалоговый)
agsinject 2 RU_s/gamescript0.o RU/game*.dta  //(2 — третий скрипт на упаковку в *.dta) (Третий внутриигровой)
agsinject 3 RU_s/gamescript1.o RU/game*.dta  //(3 — четвёртый скрипт на упаковку в *.dta) (Четвёртый внутриигровой)

и т.д. если gamescript2 то уже будет после:  agsinject 4

Для комнат всегда будет 0
agsinject 0 RU_s/room1.o RU/room1.crm  //(0 — первый скрипт на упаковку в *.crm поскольку скрипт в комнате всегда будет один)
agsinject 0 RU_s/room2.o RU/room2.crm  //(0 — первый скрипт на упаковку в *.crm поскольку скрипт в комнате всегда будет один)

 

Поскольку текст не весь распаковывается из скриптов то часть остаётся ещё в *.crm и *.dta

 

Скрытый текст

После того как уже перевели в скриптах диалоги и вставили обратно в *.crm

Открываем в HEX-редакторе *.crm поэтапно

Первые 3 байта заголовок комнаты 21 00 01

2-3 байта размер секции или смещение (будем править после перевода до секции SCOMS/SCOMZ — самого скрипта)

с 5/6 байт по 0a — 0 байты

Со смещения 0x0b начинается первый отрезок комнаты и будет начало первого отрезка указанное в смещении 0x03

Теперь переходим к смещению 0x101, если первый текст объекта No hotspot или Hotspot*, то такие не переводим, а ищем между ними или же бывает объекты начинаются для перевода со смещения 0x101 (сам текст) а размер на смещении 0xFD

Включаем режим вставки, чтобы текст не замещался а вставлялся в кодировке ANSI (А  — С0) и перед объектом-текста за минусом 4 байта длина текста

Пример: 04 00 00 00 54 65 78 74 00 00 00 00 (04 — размер  3 байта нулевых поскольку предложение даже не превышает значение ff  и дальше пошёл текст 54 65 78 74 — Text)

Когда всё перевели между No hotspot и Hotspot* и заменили размер байтов перед текстом, ищем Начало следующей части комнаты, а именно SCOMZ или SCOMS,  и слева от SCOM через -9 байт будет начало первого нашего отрезка, сразу же после разделителя 07 (ID Скрипта) — И теперь выделяем с этой части и до 0x0b и будет наш размер или смещение на первую часть, и вписываем в смещение с 0x03 в перевёрнутом виде : 1с20 = 201с или 10020 = 200001

 

Как только заменили первый участок, ищем следующий через текст юКпѕ — сразу после него будет разделитель комнаты — 1 байт, а после будет уже размер отрезка — начало отсчёта 8 байт (количество объектов) после смещения и будет отрезок до следующего разделителя, и переводим так же как и в начале *.crm файла и после перевода и исправления размера перед текстом правим размер этого отрезка и сохраняем и так проделываем со всеми скриптами *.crm

 

Скрытый текст

После того как упаковали все скрипты обратно в *.dta 

Открываем в HEX-редакторе в 3 частях файла

 

Первая часть

После смещения 1800 будет первый текст на объекты или предметы, который надо переводить

Здесь не включаем Режим вставки, а просто замещаем текст 

Размер общего блока под объект/предмет 44 байта, под текст где-то 16 байт 

Править смещения не надо или размер общего файла

 

Вторая часть

Теперь переходи к последнему скрипту SCOM по поиску через юКпѕ

И после этих строк до btn или lbl находим имена персонажей, оставшиеся диалоги выбора или какой либо ещё текст

Для имён персонажей 24 байта для вариантов ответов или вопросов или диалогов 94 байта

Так же вставляем текст как и в первой части

 

Третья часть

Это оставшаяся часть с редактированием текста в btn  или lbl, и сам размер перед текстом  -4 байт и с включённым режимом вставки

В этом же месте можно изменить расположение текста и кнопок по осям X и Y (позднее напишу)

 

Скрытый текст

agspack -e folder1/ file.exe

Под обновление

Изменено пользователем Tericonio
  • Спасибо (+1) 2

Поделиться сообщением


Ссылка на сообщение

@Amigaser формат trs файла следующий:

// комментарий
<текст оригинала>
<текст перевода>
<...>

Первой идет строка оригинального текста, под ней идет строка с переводом и дальше они чередуются до конца файла. Строки с комментариями игнорируются. Более развёрнуто это выглядит так:

// комментарий (целая строка игнорируется)
Оригинальная строка 1
Перевод оригинальной строки 1
Строка 2
Перевод строки 2
Строка 3

Строка 4
Перевод строки 4

Здесь “Оригинальная строка 1” заменяется на “Перевод оригинальной строки 1”, “Строка 2” на “Перевод строки 2” и “Строка 4” на “Перевод строки 4”. В данном примере “Строка 3” остается без перевода, т.к. за ней следует пустая строка.

Грубо говоря, игра когда использует перевод смотрит на оригинальный текст и ищет его в этом файле, если находит, то берет текст со строки ниже. В случае с кнопками меню в Rosewater для немецкого языка игра ищет в этом файле не английский вариант, а немецкий, а т.к. в German.trs нет нужной строки с оригинальным текстом (на немецком) перевод не подхватывается (его там просто нет).

Для удобства лучше добавить недостающие строчки в конец файла примерно в таком виде:

<...>
Neues Spiel+

Neues Spiel

Spiel laden

Einstellungen

Spiel fortsetzen

Spiel beenden

Spiel sichern

<...>

Предвидя вопрос как узнать каких строчек не хватает сразу скажу, что лучше воспользоваться сгенерированым trs файлом по кнопке “Generate TRS from Assets”. В таком случае все необходимые строки уже будут добавлены (плюс всякие строчки которые не отображаются в игре, но используются в скриптах, их переводить не нужно).

  • +1 1

Поделиться сообщением


Ссылка на сообщение

@adm-244 к сожалению, у меня ничего не получается. Что только не делаю, но текст на кнопке в начальном меню Neues Spiel не меняется. :( Не знаю что ещё можно сделать. Вот мой файл trs, который компилирую в tra, запускаю игру, и текст на кнопке Neues Spiel как был так и остался. Что я не так делаю?

//#GameId=1087995093
//#GameName=Rosewater
//#Encoding=UTF-8
Neues Spiel+
TEST+
Neues Spiel
TEST

 

Поделиться сообщением


Ссылка на сообщение

@Amigaser 

За место 

Neues Spiel+ — Новая игра+

Первая строка это оригинал текста, вторая строка это перевод и т.д.

Называешь файл Russian.trs и через программу загрузки этих файлов загружаешь этот файл

Или же в той же папке где игра должны быть настройки, и в ней же можно прописать, какой файл *.trs будет загружаться

//#GameId=1087995093
//#GameName=Rosewater
//#Encoding=UTF-8
New Game+
Новая игра+
New Game
Новая игра
Изменено пользователем Tericonio

Поделиться сообщением


Ссылка на сообщение

@Amigaser следует убедиться, что:

  1. trs файл сохранен в кодировке UTF-8
  2. German.tra собран из правильного trs файла
  3. В игре язык переключен на немецкий

Для предложеного trs файла игра считывает перевод и заменяет кнопки меню успешно:

pl7VuE4.jpeg

Ссылка на тестовые trs и tra файлы: MediaFile

29 minutes ago, Tericonio said:

Называешь файл Russian.trs и через программу загрузки этих файлов загружаешь этот файл

В случае с Rosewater это не будет работать. Игра при старте проверяет выбраный язык и если это не “German”, игнорирует tra файл.

Поделиться сообщением


Ссылка на сообщение

@Amigaser 

Декодируешь файл с помощью AGSUnpacker.exe

Вписываешь кодировку в поле Encoding=Utf-8

И переводишь строки с помощью AGS_TranslationEditor

Open — Выбираешь *.trs файл и в правой колонке Translation выбираешь текст который хочешь перевести

В самом низу Translation: 

Втсавляешь перевод

Поделиться сообщением


Ссылка на сообщение
31 минуту назад, Tericonio сказал:

Называешь файл Russian.trs и через программу загрузки этих файлов загружаешь этот файл

Что за программа загрузки? Я компилирую в tra утилитой AGSUnpacker. Но “Новая игра” на кнопке не появляется, по-прежнему New Game. Также и для немецкого языка.

33 минуты назад, Tericonio сказал:

Или же в той же папке где игра должны быть настройки, и в ней же можно прописать, какой файл *.trs будет загружаться

Что за настройки? В папке игры нет никакого файла настроек. Есть winsetup.exe, там действительно можно указать какой языковой файл будет использоваться по умолчанию. Но это не помогает.

Поделиться сообщением


Ссылка на сообщение

@adm-244 

В acsetup.cfg

[language]
translation=Russian.tra

Всё

Что сложного?

@Amigaser 

Потому-что файлы не только текст но и текстуры

Поделиться сообщением


Ссылка на сообщение
6 minutes ago, Tericonio said:

В acsetup.cfg

[language]
translation=Russian.tra

Всё

Что сложного?

function game_start() {
    <...>
    if (Language != "German") {
        Game.ChangeTranslation("");
    }
    <...>
}

 

  • Лайк (+1) 1

Поделиться сообщением


Ссылка на сообщение

@adm-244 

А вообще весь текст хранится в AGS

Поделиться сообщением


Ссылка на сообщение

@adm-244 всё делаю так, как вы написали. Ваши файлы не отличаются от тех, что я сделал. Но у меня по-прежнему нет текста “Тест+” на кнопке в меню.
https://disk.yandex.ru/i/4X3w6wAYBxtS2w
Как будто где-то что-то “закэшировалось”… Может у нас разные версии игры?

Изменено пользователем Amigaser

Поделиться сообщением


Ссылка на сообщение
7 minutes ago, Amigaser said:

Ваши файлы не отличаются от тех, что я сделал

Возможно у нас отличаются версии игры, тут нужно разбираться. У меня пока других идей в чем может быть дело нет :scratch_one-s_head:

Поделиться сообщением


Ссылка на сообщение

@adm-244 @Amigaser 

Весь текст в *.ags

Удали tra и trs и увидишь что текст загружается всё равно

Скачал версию GOG по адресу 021a42b3 идёт начало  __NEWSCRIPTSTART__BuiltInScriptHeader.ash

А ниже идёт текст, тут только по моему способу будет работать, файл trs и tra не будут подгружаться поскольку весь текст в комнатах

Шрифтов — 24 штуки o_O

Изменено пользователем Tericonio

Поделиться сообщением


Ссылка на сообщение

@Tericonio так это понятно, что все ассеты в ресурсах игры. Идея же сделать перевод не копаясь в ресурсах (у меня с правками в ресурсах так ничего путного не получилось, я написал выше). А использовать механизм движка, в котором задумано подхватывать скомпилированные файлы перевода из файла tra . В игре же есть German.tra, и он работает. Выше даже кусок кода привели. Самое простое — заменить в этом файле немецкие тексты на русские. Непонятно почему у меня это не работает. А у adm-244 работает. У него простейший tra из двух строк подхватывается, а у меня нет. Возможно, действительно, разные версии игры. Я свою скачал с рутреккера (1.00.1 (80959 по GOG)). :( И ещё, непонятно почему вот такие “нумерные” строки переводятся, а “не нумерные” — нет. Видимо, тоже какие-то грабли в коде.

&1 Miss. And I'm here about a job.
&1 Fräulein! Und ich bin wegen einer Anstellung hier.

 

Изменено пользователем Amigaser

Поделиться сообщением


Ссылка на сообщение

@Amigaser

В этой как раз и не будет работать

По номерным строкам, так устроен движок AGS

Номерные строки будут работать, и часть текста тоже, но всё меню — Нет

Также нет смысла менять язык English или German на другой, поскольку отдельно он не подгружается

Я сейчас протестировал туже версию, что и у тебя, текст — English или German имеет лишь данные для загрузки строк и отдельно он не фигурирует как Слово

Я заменил во всём *.ags файле с English на Anglish если где-то одна строка не будет переведена, то игра не загрузится

Изменено пользователем Tericonio

Поделиться сообщением


Ссылка на сообщение
17 минут назад, Tericonio сказал:

файл trs и tra не будут подгружаться поскольку весь текст в комнатах

Однако ж это работает. Если менять там текст в диалогах игры, то он меняется. Не работает только в меню и настройках, тут вы правы. Именно в этой версии. Вероятно у adm-244 другая версия.

19 минут назад, Tericonio сказал:

Шрифтов — 24 штуки

А реально нужны только первые два. Если в корне выложить русские agsfnt0.ttf и agsfnt1.ttf, то русские буквы подхватываются. 

А вообще, тупой движок. Как будто в прошлый век вернулся и по графике и по геймплею. Лучше бы автор игры сделал её на Unity. Видимо, закончу на этом свои изыскания... За помощь — спасибо.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас популярно

  • Продвигаемые темы

  • Последние сообщения

    • как новые собственники всех полученных активов и данных Лесты, смогут снова поднять серваки  Мира Танков, если лицензия на игры до сих пор находится у Варгейминга, они же не будут заключать с ним договора на пользование лицензии, их рабочих инструментов и работ, как это делала  Леста?
    • Можно и дверь на ключ не закрывать, что называется до первого случая.
    • на вкус и цвет…. по отзывам многим не заходит, я вообще только узнал о ней ), нужно будет глянуть
    • К летней распродаже обновил SteamDB - Sales; Ultimate Enhancer.

      Обновил скриншоты с примерами разных случаев применения. Из самого последнего — добавил возможность посчитать, сколько вам будет стоить закупка всех игр из списка желаемого по полной цене и по самым низким известным ценам.

      Также добавил возможность фильтровать игры по минимуму не только в абсолютных числах, но и в процентах, т.к. оригинально в SteamDB этот момент упущен. Там показываются только абсолютные исторические минимумы.   Объясняю, почему это важно, на примере гипотетической игры "Звездный Странник": Изначальная ситуация (до корректировки региональных цен): Базовая цена игры "Звездный Странник" составляла 500 рублей. Разработчик устраивал распродажу со скидкой 75%. Таким образом, исторический минимум цены игры составлял 125 рублей (500 - 75% = 125). Этот минимум был зафиксирован в SteamDB. Корректировка региональных цен Valve: Произошла корректировка региональных цен, и базовая стоимость многих игр была пересмотрена в сторону увеличения. Новая базовая цена "Звездного Странника" теперь составляет 1800 рублей. Текущая распродажа (после корректировки цен): Разработчик решает сделать очень щедрую распродажу и устанавливает скидку в 90% на "Звездного Странника". Новая цена со скидкой составляет 180 рублей (1800 - 90% = 180). Проблема старого подхода (только абсолютный минимум): Если ориентироваться только на абсолютный исторический минимум из SteamDB (который был 125 рублей), то текущая цена в 180 рублей не будет отображаться как самая выгодная, потому что она выше прежнего абсолютного минимума. SteamDB покажет, что игра когда-то стоила дешевле. Но данный исторический минимум исходил из другой базовой цены, которой уже не существует. Преимущество нового подхода (учет скидки в процентах и текущей базовой цены): Новый инструмент, который позволяет фильтровать по процентам от текущей базовой цены, покажет, что скидка в 90% - это чрезвычайно выгодное предложение в текущих реалиях. Несмотря на то, что 180 рублей > 125 рублей (если бы мы сравнивали с нерелевантным старым абсолютным минимумом), скидка в 90% от новой базовой цены (1800 рублей) является гораздо более значимой и выгодной, чем, например, если бы сейчас была скидка 75% от 1800 рублей (что составило бы 450 рублей).
    • Игру сделал финский разработчик Джесси Макконен, на счету которого отличная дилогия Distraint. Забавно, что до 2022 года все его игры переводились на русский язык официально одной хорошо известной вам студией. Некий (или некая) Jade смастерила русификатор для визуальной новеллы Without a Dawn. Игру сделал финский разработчик Джесси Макконен, на счету которого отличная дилогия Distraint. Забавно, что до 2022 года все его игры переводились на русский язык официально одной хорошо известной вам студией.
    • SteamDB - Sales; Ultimate Enhancer был обновлён. Версия 1.3 Автоматический выбор "All entries": Скрипт теперь автоматически выбирает "All (slow)" в выпадающем списке количества записей на странице и ожидает загрузки перед началом обработки. Больше не нужно делать это вручную. Появится таймер обратного отсчета, информирующий о процессе. Калькулятор желаемого: Добавлена новая кнопка "Высчитать" в панели скрипта, когда активен фильтр "Your wishlist" в "Filter by type" на SteamDB. Эта функция собирает данные о ценах (текущая, исторический минимум, минимум за 2 года) для игр из вашего списка желаемого и отображает их в таблице в модальном окне. Таблица включает: AppID, Название, Текущую скидку, Текущую цену, ~Полную цену (расчетную), All-time Low, 2-year Low и Цену для расчета (лучшую из доступных). Поддерживается сортировка по любому столбцу. Также отображаются итоговые суммы: если купить все по ~полным ценам и если купить все по лучшим доступным ценам. Расширенные фильтры по скидкам (заменяют стандартные фильтры SteamDB):   Визуализация процента скидки ATL: Текст вида "at -X%" в дополнительной информации под названием игры (где указан All-Time Low) теперь подсвечивается цветом в зависимости от того, как текущий процент скидки соотносится с этим историческим процентом скидки: Синий:Текущий % скидки > Исторического % ATL (выгоднее). Зеленый: Текущий % скидки = Историческому % ATL. Фиолетовый: Текущий % скидки < Исторического % ATL (менее выгодно по % скидки). Обновлен интерфейс панели управления скрипта: Улучшено расположение элементов. Обновлены тексты статусов и кнопок для лучшего информирования пользователя. Изменение цветовой схемы для индикатора РРЦ: = РРЦ (соответствует) теперь зеленый (ранее был синий). < РРЦ (дешевле) теперь синий (ранее был зеленый). > РРЦ (дороже) остался красным.  
    • Учитывая что Леста, как только почувствовали что их начинает “прижимать” Прокуратура, сразу же выпустила открытое обращение к геймерам: “помогите нас не за что грабят” и судя по всему, стали “покупать” популярных российских блогеров, слишком уж они дружно “взвыли” и стали озвучивать одну методичку, чтобы они подняли большой шум в сети  и тем самым попытались надавить на следствие и суд и возможно что думали что уйдут от ответственности. так что может и по этому поводу тоже, заседание суда было закрытым…  А оплаченные митинги “поддержки” около суда и в зале суда во время заседаний, довольно популярный способ давления на суд и поднятия шумихи и хайпа...
  • Изменения статусов

    • Дмитрий Соснов  »  Tirniel

      Привет! ты разбираешься в компьютерном железе, сможешь помочь с советом по апгрейду старого компа?
      · 1 ответ
    • SHAMAH

      Куда вход на сайт убрали и ЗАЧЕМ? Хотел файл скачать, там только медленная загрузка и “зарегистрируйтесь”. Все. Пришлось вручную страницу входа прописывать.
      · 0 ответов
    • Nosferatu  »  behar

      Добрый вечер.
      Подскажите пожалуйста, у вас не осталось случайно исходников для фикса на широкоформатные мониторы для игры Vampire The Masquerade Redemption?
      Если да, то не могли бы вы ими поделиться, а если нет, то прошу прощенья что побеспокоил.
      Заранее спасибо.
      · 0 ответов
    • AlcoKolyic  »  makc_ar

      Здраствуйте! Извините, а можно попросить ссылку на место где можно взять перевод (патч или образ игры с переводом) El Shaddai: Ascension of the Metatron для ps3, пожалуйста? А то в теме к этой игре у меня не получилось найти работающие ссылки… Первая ведет в группу в которой удалены большинство постов, а пост с этой игрой ведет на сайт https://psnext.ru который сейчас не имеет отношения к видеоиграм. 
      · 0 ответов
    • oleg72  »  Boor

      https://www.skidrowcodex.net/fate-reawakened-goldberg/
      · 0 ответов
  • Лучшие авторы


Zone of Games © 2003–2025 | Реклама на сайте.

×