• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

    Не ленитесь, голосуйте в этой теме за тех форумчан, которые по вашему мнению больше всех проявили себя в этом году
    По желанию, аргументировать свой выбор можете в теме обсуждения голосования.

Gothic ½ Инструмент для переводчиков | zGlossary [Плагин для Union]

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.398
Благодарности
4.738
Баллы
625
  • Первое сообщение
  • #1
Общий смысл инструмента в том, чтобы развязать переводчикам руки.​
Для перевода вам не нужно иметь исходный код мода. Более того, сам мод трогать вообще не надо.​

Файл перевода будем называть словарем.​
Словарь - обычный текстовый файл с кодировкой Unicode LE (UCS-2 LE BOM).​

Синтаксис словаря делит документ на теги:​
Тег ; - это комментарий. За стоящим в начале строки символом можно писать любой произвольный текст.​

Тег Text - строка, следующая за этим тегом, будет определять исходную строку, которую необходимо перевести.​

Языковые теги Rus/Pol/Eng/Ger - текст, следующий за тегом, будет определять один из вариантов перевода строки Text.​

Тег OneMore - этот тег говорит, что если в скриптах существует более одного экземпляра строки Text, то следующий вариант перевода для предшествующего языка будет выбираться поочередно.​

Пример готового словаря:
1579297956683.png

Всё! Больше никаких действий над словарем производить не нужно.​

Теперь разберемся как подключить словарь к игре. Тут все предельно шаблонно. Необходимо создать .patch файл в кодировке ANSI (который всегда запускается автоматически, если виден игрой), в нем вызвать плагин zGlossary и передать имена ваших словарей.​

Пример такого .patch файла:​
1579296727533.png

Можно сделать множество словарей, в один засунуть переводы предметов, в другой переводы писем, в третий диалоги, а затем подключить через .patch​
Union:
#engine
    #patch
        LoadPlugins("zGlossary")
        LoadGlossary("GlossaryItems.gls")
        LoadGlossary("GlossaryLetters.gls")
        LoadGlossary("GlossaryDialogs.gls")
    #/patch
#/engine

Все просто, верно? Но что делать с релизом перевода? Выкладывать кучу текстовиков не самая лучшая идея, поэтому все свои .dll, .patch и .gls спокойно пакуем в .vdf или .mod. Весь функционал сохранится, Union сам найдет документы внутри томов.​

Кстати, о шрифтах. Очевидно, он необходим для правильного отображения теста соответствующих локализаций. Предлагаю интересный фокус. Находите такие шрифты, называете их удобным образом, например в конце имени приписываете тег языка. А потом изменяете имя шрифта в скриптах на тот, который необходим. И вуаля, ваш словарь ещё и шрифт динамически менять умеет!​
1579296987545.png



Теперь разберемся с пользовательскими вопросами. Как словарь определит язык игрока? Он сделает запрос у Union и тот ему ответит, какой целевой язык используется системой. Результат запроса продублируется в Systempack.ini, секцию Glossary, в параметр Language, который всегда можно изменить. Например у меня такой язык определится как Rus.​


Прикладываю тестовый исходник, проверенный на G1 с ModFix от ElderGamer
Внутри .dll, готовый .patch и .gls. А также синтаксисы для Notepad++.​
 

Вложения

  • zGlossaryTest.zip
    50,9 KB · Просмотры: 139
Последнее редактирование модератором:

Skino

Участник форума
Регистрация
1 Янв 2022
Сообщения
13
Благодарности
0
Баллы
60
Skino, да ты пока не заворачивайся, там все равно не совсем в одном месте меняется. Я вроде уже сделал небольшой плагин, буду проходить Золотые ворота 2, проверю его работу.

Если хочешь, могу на тест через пару дней скинуть.

п.с. и что вы все чужой ник тегаете ))
Новый плагин протестить обязательно помогу, только игру проходить не буду, у меня пока на очереди первая часть, да и времени особо нет, надо еще 1 маленький проект на питоне доделать GitHub - Skino1337/GothicHub_Scripts: Scripts for GothicHub
И другой огромный который я не доделаю))) GitHub - Skino1337/GuthicHubTemp

А ты можешь потом свой плагин на гитхаб залить. Я тебе за него задоначу немного.
И кстати GitHub - Patrix9999/union-plugin-template: A template project for creating union plugin for Gothic Games, норм тут хуки работают, ну у меня по крайне мере)
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.836
Благодарности
2.373
Баллы
380
А ты можешь потом свой плагин на гитхаб залить. Я тебе за него задоначу немного.
Насчет исходников на гитхабе врядли, донаты тоже не особо нужны. Если что-то надо будет доработать, потом напишешь, подумаем. Но сначала мод пройду и проверю что все работает как надо ))

норм тут хуки работают, ну у меня по крайне мере)
Я помню что тут Releases · fyryNy/FlyingCreaturesFix были проблемы что из-за хуков в темплейте не работали хуки в старых плагинах что-ли. В итоге там переписали, но в темплейте не знаю обновляли или нет.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.836
Благодарности
2.373
Баллы
380
Gratt, ну дак потом же видно что не того тегнул )) MEG@VOLT, а есть кстати возможность того юзера грохнуть и мне ник нормально прописать? Я так понимаю там вообще изначально мертвый юзер с 0 сообщений, да еще и забаненный.

1766395094789.png
 

Skino

Участник форума
Регистрация
1 Янв 2022
Сообщения
13
Благодарности
0
Баллы
60
Xeдин
Так ладно, раз уж ты уже делаешь плагин, и понимаешь в этом больше меня, я тогда не буду этим заниматься. Но помогу чем смогу:
1766413510556.png

Вот диалог из Готики 2 Аддон, а вот его код:
1766413712632.png
Тут мы видим что пушится аргумент, 0xFEE4 - это индекс в тиблице символов, по этому индексу у нас строка с именем Х46301.

Что в итоге мы имеем:
Нам нужно пропарсить весь псевдо-ассамблер и занести в переменные все аргументы которые пушатся.
Далее когда нам попадается строка нужно глянуть в переменные и посмотреть где это строка пушилась.
Таким образом когда в файле перевода в нас будет строка "Я понял, Гербрандт." то в комментарий к ней можно указать:
DIA_GERBRANDT_HELLO_INFO -> #1 INFO_ADDCHOICE -> #ARG2
 
Последнее редактирование:

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.836
Благодарности
2.373
Баллы
380
Skino, написал тебе в личку, сдается мне что ты немного не в тему этого топика пишешь и хочешь. Давай там пообсуждаем.
 
Сверху Снизу