Перейти к содержимому
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. Видимо, закончу на этом свои изыскания... За помощь — спасибо.

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


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

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

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

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

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

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

Войти

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

Войти сейчас



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

×