Перевод и Kirikiri. Часть 2.

Ой, что это?

illust4 Еще бы. Ведь мы пытались запустить игру с русским языком для программ не поддерживающих юникод(Панель управления-Язык и региональные стандарты-Дополнительно).

Для запуска игры после перевода из под русской локали придется сделать несколько манипуляций.

Нажимаем ОК и обращаем внимание на окно ошибки:

illust5

При неудачном запуске нам показывают, на каком файле и в каком месте оборвалось выполнение. Красным выделено название файла mainwindow.tjs, в нижней части окна написан номер строки, где произошла ошибка – 4086.

В данном файле в строке с ошибкой использованы иероглифы, но движок не может их правильно обработать.

Что делать? Можно заменить все иероглифы, стоящие в кавычках в этой строке на латиницу, но это тогда возможно придется менять эти значения и в других файлах, если они повторяются.

Более универсальный способ – перекодировать весь файл MainWindow.tjs в UTF-16LE и сохранить вместе с переведенными скриптами в patch.xp3 .

Естественно, движок просто так не сдастся. Хотя может повезти, и игра запустится со второго раза.

Во избежание проблем, не устанавливайте игру в папку с именем на японском, наберите его латиницей при установке. Еще желательно, чтобы в пути к игре не было пробелов и кириллицы. На всякий случай.

Перевод, перенос, перекрас…

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

Для начала попробуем изменить шрифт, которым написан текст.

Открываем Config.tjs из папки data/system, ищем после заголовка function MessageLayer_config() :

defaultFontSize = 24;

Это размер нашего шрифта.

defaultChColor = 0xFFFFFF;

Цвет шрифта по-умолчанию. Код цвета в шестнадцатеричном виде.

defaultLineSpacing = 4;

Не совсем понятный мне параметр. Видимо, междустрочный интервал.

defaultPitch = 2;

Расстояние между буквами. Если кажется, что буквы слишком слиплись, его можно увеличить.

userFace = "Arial";

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

defaultBold = false;

Полужирный шрифт или обычный.

defaultShadowColor = 0x000000;

Цвет тени шрифта(если она есть).

defaultEdgeColor = 0x000000;

Цвет обводки шрифта(если она есть).

defaultShadow = true;

Включение тени для шрифта по-умолчанию.

defaultEdge = false;

Включение обводки для шрифта по-умолчанию. Отображаться может только что-то одно. Либо тень, либо обводка, но не вместе.

Точно такие же параметры находятся в том же файле в секции function HistoryLayer_config() , но они отвечают за шрифт в окне истории, что не очень важно.

Теперь о переносах. Поскольку в японском отношение к переносам слов несколько иное, то и в движке возможность переноса сделана специфично.

Вот способы устранения проблем с переносами:

Первый, был найден еще insani во время перевода Fate/Stay night.

Подробно описан здесь: http://vnru.wikidot.com/ks

Предлагается задавать такую разметку для слов:

[wrap text="Выпад,"]Выпад, [wrap text="словно"]словно [wrap text="молния."]молния.
[wrap text="Остриё"]Остриё [wrap text="копья"]копья [wrap text="разящее"]разящее
[wrap text="в"]в [wrap text="сердце."]сердце. [wrap text="Увернуться"]Увернуться

По ряду причин многим не подходит.

Второй способ.

Наиболее простой.

Описан здесь: http://honyaku-subs.ru/forums/viewtopic.php?f=17&t=134

Суть в замене строки в файле messagelayer.tjs на:

var wwLeading="\\$([{「‘“(〔[{〈《「『【¥$£АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщэюяъыь.,";

Иногда рекомендуется добавлять в строку после всех букв алфавита точку и запятую.

Способ третий.

Скрипт от nagato.

Можно скачать здесь: http://wks.arai-kibou.ru/blog/files/nagato_kirikiri_wordwrap_r7.7z

UPD:
Спасибо Джефу и Максиму Щепалину, они разобрались со скриптом nagato.
Нужно добавить дополнительные строчки в файл MainWindow.tjs .
На случай, если ссылка на скрипт не будет работать, распишу все здесь.

В MainWindow.tjs ищем строчку

class KAGWindow extends Window

и после неё вставляем:

var wrapNum = 0; // wordwrapping word counter
var wrapPos = 0; // wordwrapping length
var oldLine = void; // wordwrapping comparison line
var splitLine = void; // wordwrapping split text variable
var breakWrap = 0; // wrapping flag during check
var newPage = 0; // wrapping flag for new page

Затем после строчек

origch : function(elm)
{
var acs = actualChSpeed;
if(updateBeforeCh)
{
if(acs) { updateBeforeCh--; return -5; } else { updateBeforeCh--; }
}
var text = elm.text;

вставляем

/*
Wordwrapping code
Nagato (nagato@readyoursicp.com)
Last update: 2009/10/07

Limitations:
- Any special commands that pass text and display from that function (for example, Sharin no Kuni's
double/triple/fourfold commands do not have wrapping since what goes through here is an expression and not text)
Basically, anything that uses [emb] to display text.

Revision log:
r7 - Fixed a problem which caused the r6 fix to create an infinite amount of blank pages
r6 - Fixed a problem which could cause the wrapping to fail
r5 - Fixed problem when starting new line
r4 - Vertical wordwrapping
r3 - Fixed problems that occured when the word trying to be wrapped is wider than the frame
r2 - Rewrote parser, Bug fixes, tested on Sharin no Kuni and G-Senjou no Maou
r1 - Initial release
*/
if(conductor.curLineStr.indexOf(" ")!=-1) // does the line have a ' '? if not, it's probably a japanese line and can't be split so just ignore the code here
{
if(oldLine!=conductor.curLineStr) // check if it's a new line, set/reset variables required for wrapping and parse string if it is
{
var tempStr = void;

oldLine = conductor.curLineStr;
wrapNum = 0;
breakWrap = 0;

for(var i=0,x=0,depth=0; i<oldLine.length; i++) // clean up string before splitting
{
if(oldLine[i]!='[')
{
if(oldLine[i]!='\\') // as silly as this line might appear at first, it's really not silly at all.
{ // the engine does not handle a '\' in the dialog the same way it does '\' outside of the dialog.
tempStr = "%s%c".sprintf(tempStr,oldLine[i]); // the trailing '\' is ignored to increase the accuracy of wrapping
}
}
else
{
for(var depth=0; i<oldLine.length; i++) // this particular piece of code is removing all [] commands from the input line
{ // previously it would fail to parse something like [if exp="kag.fore.messages[0].frameGraphic=='game_frame_avg2'"]
if(oldLine[i]=='[') // because of the [] inside of the command
{
depth++;
}
else if(oldLine[i]==']')
{
depth--;

if(depth<=0) // found what appears to be the end of the command, end search break; } } } } if(tempStr===void || tempStr.indexOf(" ")==-1) // another check is required in case the initial check missed something, also checks if tempStr is still empty breakWrap = 1; // this should only happen if for some reason conductor.curLineStr has a space in it (commands to go with the text for example) else splitLine = tempStr.split(" "); if(!current.vertical) // set the initial value for the position wrapPos = current.x; // for horizontal text else wrapPos = current.y+current.lineLayer.font.getTextWidth(" "); // for vertical text } if(!breakWrap) { if(text==" ") // since the start of a line won't start with a " ", we need to check what word we're on too { wrapNum++; // new word detected splitLine[wrapNum] += " "; // append a space to the word for space checking issues if(!current.vertical) wrapPos = current.x; else wrapPos = current.y+current.lineLayer.font.getTextWidth(" "); } if(wrapPos+current.lineLayer.font.getTextWidth(splitLine[wrapNum])>current.relinexpos)
{
if(current.lineLayer.font.getTextWidth(splitLine[wrapNum])<=current.relinexpos) // if the current line is wider than the frame, don't try wrapping it
{
text = "";

historyLayer.reline(); // break in the history
if(current.processReturn()) // if there is no more room to add lines, go to a new page
{
newPage = 1;
return showPageBreakAndClear();
}
}

if(!current.vertical)
wrapPos = current.x;
else
wrapPos = current.y+current.lineLayer.font.getTextWidth(" ");
}
}
}

if(newPage==1) // if you go on to a new page it will start from the space, which needs to be dropped
{
text = "";
newPage = 0;
}
// end Wordwrapping code

 

Бывает, что несмотря на ваши усилия, текст все равно выводится с большим межбуквенным интервалом:

font

В таком случае, игра явно рассчитывает, что выводимый текст будет в японской кодировке. Подробно эта проблема расписана на форуме Honyaku-subs(http://honyaku-subs.ru/forums/viewtopic.php?f=17&t=134).

Чтобы ее решить, от вас потребуются навыки владения HEX-редактором. Открываем исполнимый файл игры(в данном случае, tundere.exe) в редакторе и ищем шестнадцатеричную строку С64317 . Следующий за ней байт будет указывать на используемую игрой кодировку.

hex_word

Исправляем байт 80 на 01(соответствует DEFAULT_CHARSET) или на CC(RUSSIAN_CHARSET).

У вас есть в меню кракозябы?

Да, сам игровой текст выглядит великолепно, только что творится с главным меню окна? Сплошные кракозябы.

illust6Ищем файл menus.tjs в папке /data/system и перекодируем его в UTF-16LE. Смотрим:

menu.add(this.systemMenu = new KAGMenuItem(this, "システム(&S)", 0, "", false));

Ага, что-то похожее на содержимое нашего меню, не так ли?

Буквы с амперсандом в круглых скобках (&S) обозначают горячие клавиши, их желательно оставить на месте.

А как же заголовок окна и внутриигровые сообщения?

Заголовок окна меняется в файле Config.tjs в строке System.title = "" . Если игра использует текстовые сообщения в дилоговых окнах типа «Вы точно хотите выйти?» или «Вы точно хотите загрузить игру?», надписи находятся в файле YesNoDialog.tjs ( yesButton.caption = "はい"; )

Текст для такого незаметного элемента интерфейса как всплывающие подсказки(hints), лежит в файле systembutton.ks :

obj.hint='Сохранить';

hintsСамые хитрые всплывающие подсказки и описания притаились в HistoryLayer.tjs , потому что режим истории в этой игре тоже имеет элементы экрана с надписями.

Ну и напоследок остается перевести заголовок окна «О программе» в файле about.ks :

@title name "Tsundere na imouto"

Перекодируем все измененные файлы в юникод и добавим их в
patch.xp3 .

CG, виджи и сидоджи.

Долго нам еще терпеть японские символы в игровом меню? — спросите вы. Файлы .png и .bmp , которые содержат графику элементов интерфейса лежат в папках bgimage и gui. Для полного перевода придется изменить файлы, относящиеся к главному внутриигровому меню, панели загрузки, панели сохранения…

Поскольку это процесс не быстрый и требует многократных исправлений, я рекомендую после того, как вы воспользовались вашим любимым Photoshop’ом/Gimp’ом не сохранять работу в bmp или png, а оставить в psd.

Чтобы в дальнейшем быстрее конвертировать файлы из более удобного формата в тот, который требует игра, удобно использовать консольную утилитку nconvert.

Акумакко кроется в деталях.

Допустим, текст переведен и графика тоже. Остались только мелкие детали, которые постоянно попадаются на глаза в процессе тестирования.

Каждая часть сценария может иметь маленький «подзаголовок», видный только при сохранении игры.

illust7Вернемся в файл скрипта и проверим метки в начале файла:

*030|Наблюдение

Да, именно это. Вот только после перевода текст занимает гораздо больше места, чем мы рассчитывали и вылезает за пределы слота сохранения.(На картинке этого не видно, там я уже поправил :))

Более тонкую настройку можно провести в файлах savemode.ks (экран сохранения) и loadmode.ks (экран загрузки).

Ищем:

[current layer=message11 page=back][er]
[font face="Arial" size=18 color=0xffffff bold=false shadow=false]
[locate x=120 y=160]N.[emb exp="'%2d'.sprintf(((10*f.page)+ 1))"]:

Похоже на то, что нам нужно. Тут и размер шрифта и цвет и стиль. А нижняя строчка непосредственно выводимый текст (В даном случае, «N.» и порядковый номер сэйва). « locate x=120 y=160 » – это положение текста на странице, отступы от края экрана в пикселях.

Почему аналогичных строчек десять? Потому что на экране загрузки/сохранения на страницу приходится десять слотов. Если вносить какие-то изменения в координаты x, y одного из них, то нужно править и другие. То же самое относится к тексту.

Ищем дальше:

[font face="Arial" size=18 color=0xffffff bold=false shadow=false]
[locate x=182 y=160][emb exp="kag.getBookMarkDate(((10*f.page)+ 1))"]

Следующая часть надписи в слоте. BookMarkDate подсказывает нам, что это текущие дата и время в формате Год/Месяц/День Часы:Минуты

Принцип тот же самый.

И наконец то, что мы искали:

[font face="Arial" size=18 color=0xffffff bold=false shadow=false]
[locate x=120 y=191][emb exp="kag.getBookMarkPageName(((10*f.page)+ 1))" cond="kag.getBookMarkPageName(((10*f.page)+ 1)) != 'Non Data...'"]

Непосредственно подзаголовок из сценария.
Изменяем размер шрифта(size=18) если нужно и положение заголовка сейва, подправляя значения x и y .
Учтите, что в отведенную строчку потенциально должен умещаться любой «подзаголовок» скрипта (в данном случае, *030|Наблюдение ).
Все изменения повторяем для всех слотов

После всех изменений не забудьте перекодировать файл в UTF-16LE и сделать аналогичные изменения в файле loadmode.ks уже для экрана загрузки.

Последние штрихи

Порой визуалки становятся слишком самостоятельными и стремятся записать сохранения в свою подпапку в /My Documents/ . Если это не так, то сохранения скорее всего хранятся в папке savedata рядом с установленной игрой.

Чтобы развеять сомнения, найдите строчку

saveDataLocation = System.personalPath + "BABEL/Tsundere_na_imouto_rus";

в файле Config.tjs . Название папки после «=» можно менять, но желательно, чтобы путь не содержал японских символов.

Вот и все.

Конечно, с переводом новеллы может возникнуть еще тысяча проблем, которые я здесь описать просто не смогу. Поэтому, ищите решение, спрашивайте, пробуйте и у вас все получится! 😉

Несколько советов напоследок:

  • Повторюсь, не путайте синтаксис файлов. В одних знак комментария точка с запятой (;), в других – двойной слэш (//).
  • Сделайте копию всех файлов новеллы после распаковки архивов. На всякий случай.
  • Чаще пользуйтесь консольными утилитами упаковки/распаковки и конвертации. Очень экономит время и силы. Цепочки команд записывайте в .bat или .sh файлы. Запустив .bat файл двумя кликами можно скопировать исправленные вами куски сценария и запаковать их в patch.xp3 .
  • Для работы с графикой рекомендуется использовать nconvert, как я упоминал выше.

Для написания этой инструкции, я использовал данные из трех новелл:

Tsundere na imouto

Akumakko wa ijippari

Neko hime

Утилиты, полезные ссылки:

http://tlwiki.org Для написания статьи использовалась информация оттуда.

http://wks.arai-kibou.ru/ae.php AnimeEd, наглядный, многофункциональный паковщик/распаковщик ресурсов.

http://wks.arai-kibou.ru/ae.php?p=dl KiriKiri2/KAG3 Embedded EXE Splitter & Merger для извлечения xp3 из exe файлов.

http://tlwiki.org/images/a/af/Xp3tools-20060708.zip Консольные утилиты распаковки/запаковки от insani.

http://tlwiki.org/index.php?title=File:Kikiriki.rar Консольные утилиты для Kirikiri от автора движка.

http://www.xnview.com/en/nconvert/ Консольная утилита nconvert для работы с графикой

https://github.com/vn-tools/tlg2png Преобразование tlg файлов в png.

http://vnru.wikidot.com/tlg Набор утилит krkr, позволяющий преобразовывать tlg в png и обратно.

http://honyaku-subs.ru/forums/ В прошлом достаточно оживленный форум переводчиков новелл на русский. Сейчас хранилище полезной информации.

http://forums.fuwanovel.net/ Англоязычный форум для интересующихся визуальными новеллами. Много переводчиков и редакторов.

Удачи!

Реклама

Перевод и Kirikiri. Часть 2.: 54 комментария

  1. Добрый день. Можете обновить ссылку, или скинуть программу Embedded EXE Splitter & Merger для извлечения xp3 из exe файлов? У вас ссылка дана на AnimeEd. Который вроде не умеет это делать, ну или я не знаю как 😦 С уважением, Джеф.

    Нравится

      1. Большое спасибо. Скачал. К сожалению прога не смогла разделить exe’ник, так что скорее всего я был не прав 😦 Но в любом случае — спасибо.

        Нравится

  2. Я думал об этом. Но смысл, японского то я не знаю 🙂 А автопереводчиками переводить достаточно сложно, у меня одна такая игра в проекте уже есть. Брать на себя больше не хочу.Тем более, что у меня пока есть что переводить.

    Нравится

  3. Добрый день. Вопрос возник немного неожиданный по вопросу с тем же переводом, вдруг знаете ответ. Я понял как делать переносы, и с этим проблем нет. Проблема в том, чтобы ограничить любой текст от преодолении рамки. Непонятно объяснил наверное, но по скринам сейчас будет видно: http://i72.fastpic.ru/big/2015/0814/37/77044b9b2b2a250f4bd9364153471537.jpg

    И проблема не в шрифтах (я сейчас экспериментировал как раз таки с ними, поэтому они такие большие). Сейчас, я избавляюсь от текста за пределами рамки с помощью расставленных в ручную в файле перевода в нужных местах [r]. Но может есть в каком-нибудь файле что-то вроде указанного вами в примере «[locate x=120 y=191]»? То есть файл, где прописано, что любые буквы не могут выходить за определенные координаты. В любом случае, спасибо за внимание, с уважением, Джеф.
    P.S. Давно не было обновлений на сайте, вы планируете ещё что-нибудь переводить, или просто отдыхаете после завершения перевода игры?

    Нравится

    1. Мое почтение.))
      Да, действительно такая проблема есть. Я уже писал об этом в одном из предыдущих постов:
      https://kindkanjistudio.wordpress.com/2015/02/03/kiri-imouto/
      Кардинально, насколько я помню, решить так и не получилось, тем более для разных игр бывает нужен разный размер шрифта.
      Но Chtobi все же написал утилитку, которая позволяет облегчить расстановку тегов [r]
      Правда, она была рассчитана на Tsundere na imouto, и в качестве максимального числа символов в строке там принято 50. Не уверен, что подойдет…
      Вроде как-то можно было это число менять, но надо будет уточнить.
      После авторасстановки кстати, все равно иногда нужно вручную строки подправлять, никуда не деться.

      Писали, что в некоторых версиях Kirikiri в одном из файлов вроде бы есть строка
      scDRAWMAX = 90;
      которая отвечает за максимальное количество символов в строке.
      Вот только у себя я такой строки не нашел.( Так что пришлось пользоваться методом выше.

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

      Нравится

      1. Доброе утро и спасибо за ответ.
        «Писали, что в некоторых версиях Kirikiri в одном из файлов вроде бы есть строка
        scDRAWMAX = 90;»
        Да, у меня тоже нет такой строчки.
        «Но Chtobi все же написал утилитку, которая позволяет облегчить расстановку тегов [r]»
        Я скачивал эту программку, но если честно, у меня даже не получилось её включить 😦 А FAQ к ней не было. В любом случае, спасибо за ответы. P.S. Смена размеров шрифта действительно сильно помогло, осталось в ручную не так много переносов сделать.

        Нравится

        1. >Я скачивал эту программку, но если честно, у меня даже не получилось её включить
          Она работает только через командную строку. Это сделано для удобства пакетной обработки.
          Запуcкается через cmd.exe
          FAQ как такового там нет, но в файле kiri_imo.txt расписаны основные ключи для работы и пример использования.

          Нравится

  4. Добрый вечер. Я всё еще насчёт проблем с переносом в движке кирикири. Мне подсказал Максим Щепалин, с сайта https://vk.com/visualnovel_ru решение данной проблемы.

    Для этого открываем файл MainWindow.tjs и ищем строку:
    class KAGWindow extends Window
    и после неё вставляем:
    var wrapNum = 0; // wordwrapping word counter
    var wrapPos = 0; // wordwrapping length
    var oldLine = void; // wordwrapping comparison line
    var splitLine = void; // wordwrapping split text variable
    var breakWrap = 0; // wrapping flag during check
    var newPage = 0; // wrapping flag for new page

    Далее ищем строки:
    ch : function(elm)
    {
    var acs = actualChSpeed;
    if(updateBeforeCh)
    {
    if(acs) { updateBeforeCh—; return -5; } else { updateBeforeCh—; }
    }
    var text = elm.text;

    И после них вставляем:
    if(conductor.curLineStr.indexOf(» «)!=-1) // does the line have a ‘ ‘? if not, it’s probably a japanese line and can’t be split so just ignore the code here
    {
    if(oldLine!=conductor.curLineStr) // check if it’s a new line, set/reset variables required for wrapping and parse string if it is
    {
    var tempStr = void;

    oldLine = conductor.curLineStr;
    wrapNum = 0;
    breakWrap = 0;

    for(var i=0,x=0,depth=0; i<oldLine.length; i++) // clean up string before splitting
    {
    if(oldLine[i]!='[')
    {
    if(oldLine[i]!='\\') // as silly as this line might appear at first, it's really not silly at all.
    { // the engine does not handle a '\' in the dialog the same way it does '\' outside of the dialog.
    tempStr = "%s%c".sprintf(tempStr,oldLine[i]); // the trailing '\' is ignored to increase the accuracy of wrapping
    }
    }
    else
    {
    for(var depth=0; i<oldLine.length; i++) // this particular piece of code is removing all [] commands from the input line
    { // previously it would fail to parse something like [if exp="kag.fore.messages[0].frameGraphic=='game_frame_avg2'"]
    if(oldLine[i]=='[') // because of the [] inside of the command
    {
    depth++;
    }
    else if(oldLine[i]==']')
    {
    depth—;

    if(depthcurrent.relinexpos)
    {
    if(current.lineLayer.font.getTextWidth(splitLine[wrapNum])<=current.relinexpos) // if the current line is wider than the frame, don't try wrapping it
    {
    text = "";

    historyLayer.reline(); // break in the history
    if(current.processReturn()) // if there is no more room to add lines, go to a new page
    {
    newPage = 1;
    return showPageBreakAndClear();
    }
    }

    if(!current.vertical)
    wrapPos = current.x;
    else
    wrapPos = current.y+current.lineLayer.font.getTextWidth(" ");
    }
    }
    }

    if(newPage==1) // if you go on to a new page it will start from the space, which needs to be dropped
    {
    text = "";
    newPage = 0;
    }
    // end Wordwrapping code

    На всякий случай, если в комментарии разбились строчки (у меня такая проблема была, когда мне написали эти строчки в вконтакте), вот пример этого файла, уже исправленного. Там легко найти строчки по поиску. Я уже проверил этот способ, и в моем случае (Kioku Soushitsu no Okaa-san) он полностью работает. Но требует полного удаления [r]. С уважением, Джеф.
    https://yadi.sk/d/MxAL63hwiahjd

    Нравится

    1. Очень ценно, большое спасибо. Это как раз тот способ «скрипт от nagato», про который я писал. Только так и не собрался его попробовать.
      Теперь появилась ясность.
      Надо будет дополнить статью…

      Нравится

      1. Могу прокомментировать, что мне кажется данный способ подходит к чисто японским версиям (имхо), во всяком случае в Bukkake Ranch! от Mangagamer на английском языке, данный скрипт вызывает зависание игры.

        Нравится

  5. Вопрос по поводу запаковки, в оригинале Mahoutsukai no yoru все файлы XXX.xp3 имеют еще один файл XXX.xp3.sig если изменить хоть немного файл xp3 то игра уже вылетает. Даже файл патча с такой же фишкой, как бороться?

    Нравится

    1. Присоединяюсь к вопросу Sergey, единственное, только, что мне кажется, что .sig всегда там — где архивы зашифрованы (запаролены).

      Нравится

    2. Делали Тайпмуновцы, от них всегда можно ожидать чего-нибудь заковыристое, как с Fate/Stay night. Не в курсе, к сожалению. Подозреваю, что зашифрованный .xp3 .
      Если учесть, что Mahoutsukai no yoru начали переводить на несколько языков, думаю какое-то решение уже найдено.

      Нравится

    3. Долго парил голову и пришел к решению не заниматься расшифровкой а использовать arc_conv.exe 54 версии, там есть множество форматов которые прекрасно распаковываются в общем создаем батники ( в архиве к 54 версии есть синтаксис и настройки под другие игры и форматы formats.txt)
      Примеры(для игры Mahoutsukai no yoru) (как именно писать команды см. formats.txt):
      Распаковка без конвертации(изображения .tlg) :
      mahoyo_extract.bat
      @echo off
      arc_conv.exe —xp3 mahoyo —conv 0

      Распаковка с конвертацией(изображения .tga) :
      conv_mahoyo_extract.bat
      @echo off
      arc_conv.exe —xp3 mahoyo —conv 1
      Запаковка(при запаковке изображения сохранить в формате .tlg, возможно есть способ затолкать .tga напрямую в xp3, но мне пока это не удалось)
      mahoyo_pack.bat
      @echo off
      arc_conv.exe —pack xp3 название.xp3~ название.xp3 mahoyo

      Насчет сигнатуры, проблема решилась частично, после сохранения обработанного файла xp3 в утилитах движка kirikiri 2 есть krkrsign.exe решающий проблему создания файла .xp3.sig
      мне повезло патч к игре не требует его.

      Нравится

      1. Спасибо за дополнение. Я работал с arc_conv, но для распаковки других форматов. Значит, он может вскрывать еще и запакованные xp3.sig .
        Если я правильно понял, созданный к игре патч не обязательно как-то специально запаковывать, подойдет и обычный .xp3 ?

        Нравится

        1. Все проще судя по всему файл .sig идет отдельно от файла, шифрование же происходит на этапе запаковки (arc_conv с использованием синтаксиса запаковки/распаковки именно под нужную игру), у меня пропатченный екзешник(no-cd притом он почти в 2 раза легче оригинала), так что возможно поэтому отсутствует потребность в .sig файле(хотя его легко создать).

          Нравится

  6. Ломаю голову над проблемой, которая описана в гайде:

    «Бывает, что несмотря на ваши усилия, текст все равно выводится с большим межбуквенным интервалом:»

    Японская игра на движке КириКири. Русский текст сильно растягивается и никуда не влезает. Нашел в игре файл Config.tjs, а там строки:

    ;defaultFontSize = 24;
    ;defaultLineSpacing = 6;
    ;defaultPitch = 0;

    Изменение их значений не помогает.

    НЕХ редактор не находит строку С64317, по какой-то причине. Ссылка на подробное описание уже не работает, похоже. Можете посоветовать ещё что-нибудь? Эта проблема убивает смысл делать перевод игры.

    Нравится

    1. С почином, как говорится.)
      О какой игре идет речь?

      Можно exe файл игры куда-нибудь залить, чтобы поглядеть потом ?

      Кстати, у меня в статье ошибка в расширении файла, надо будет поправить.)

      Нравится

  7. Мне уже помогли решить проблему. Оказалось что при первом запуске игра сохраняет шрифты в папку save и после этого изменения шрифта не имеют эффекта.

    Нравится

  8. Dikoy писал,
    НЕХ редактор не находит строку С64317.

    У меня та же проблема.
    Подскажите как её найти.
    Я делаю так — Ctrl+F -> вставляю С64317 -> Enter.
    Пишет: «Последовательность не найдена».

    Нравится

  9. День добрый! Воспользовался одним из советов в ЕХЕ заменил байт, все отлично сработало. Но текст заменился только в основном диалоге, в «истории» отображение старое, как найти необходимый байт?

    Нравится

    1. Так сразу и не скажешь… Возможно дело в шрифте, которым выводиться текст в режиме истории. Можно для начала проверить, изменен ли userFace на кирилический шрифт в разделе function HistoryLayer_config()

      Нравится

      1. Заменен везде 😦 Символы выводимые в диалогах истории остались прежними 「」, в то время как в обычном диалоге при смене кодировки они «пропали».

        Нравится

            1. Хм… А игра большая? Мы бы могли попробовать ее поковырять, но для этого желательно иметь сам экзешник и игровые архивы. Есть возможность ее заархивировать и кинуть куда-нибудь на файлообменник? Кстати, мне можно писать в личку в контакт: https://vk.com/nazonov

              Нравится

  10. Господа.
    Так и не смог воспользоваться утилитой tlg2png (преобразованием tlg файлов в png).
    Можно как-то подробней.

    Нравится

      1. Игра у меня, достаточно, фривольного содержания — это Мэй и Рей (Mai & Rei).

        В принципе, для перевода картинки не нужны, но меня просят рип сделать.
        А делать его с экрана, получится качество не очень хорошее.
        А часть игры, в самом начале, использует картинки.

        А не получается у меня всё — перехожу по ссылке https://github.com/vn-tools/tlg2png на сайт.
        Если я правильно понял, щёлкаю зелёную кнопку «Clone or download».
        В всплывающем окне использую кнопку «Download ZIP».
        Скачиваю. Разархивирую.
        А вот что с этим делать, не пойму.

        P.S. У меня уже есть некоторый опыт перевода игр на движке Kirikiri.
        Это «Шалунья» (えっちな彼女(夏)) —
        и «Потайной домик 2» (えっちな秘密基地2) —
        Но они тоже фривольного содержания.

        Нравится

        1. Здесь https://github.com/vn-tools/tlg2png надпись в описании «To download precompiled Windows binaries, head over to releases.» как бы намекает нам, что нужно перейти по ссылке.)

          Запускать нужно в формате tlg2png имя_tlg_файла имя_png_файла
          По-моему, с tlg из этих игр программа должна работать.

          Извините, ссылки из вашего предыдущего сообщения убрал, а то у меня антиспам с ума сходит.)

          Нравится

          1. Запускаю tlg2png.exe. Появляется и тут же пропадает окно, вроде как эмулятор DOS — не успеваю заметить.
            Запускал и от имени администратора, и в режиме совместимости.
            У меня Windows 10 64 bit — может проблема в этом?

            Нравится

            1. Нет, Windows 10 не проблема. Вам нужно научиться работать с командной строкой cmd.exe , так как tlg2png работает только в таком режиме и запускается только из cmd.

              Нравится

  11. Нужна помощь. Пробовал на нескольких играх. Файлы все вытаскиваются, я их редактирую (какие надо) и создаю архив patch.xp3, запускаю игру и выдаёт ошибку на файл Initialize.tjs.
    Если быть точнее то на вот эту часть в файле Initialize.tjs

    // 追加のパッチ用アーカイブの検索
    for(var i = 2; ; i++)
    {
    // パッチ用アーカイブ patch2.xp3, patch3.xp3 … がある場合はそちらを
    // 優先して読み込むように
    if{Storages.isExistentStorage{System.exePath + «patch» + i + «.xp3»}}
    Storages.addAutoPath{System.exePath + «patch» + i + «.xp3>»};
    else
    break;
    }

    Что я делаю не так?? Что ему не нравится?? Подскажите пожалста.

    Нравится

      1. Игра называется «Prison Battleship English».
        Эта ошибка на один и тот же файл выходит на разных играх, неважно английский перевод или японский. Вытаскиваю файлы, нахожу нужные, перевожу текст/картинки/и т.д., перекодирую файл с переведенным текстом, собираю архив обратно, перетаскиваю обратно в папку с игрой, запускаю и ошибка:

        1) http://i12.pixs.ru/storage/4/6/3/perviyjpg_9406860_26726463.jpg
        2) http://i12.pixs.ru/storage/4/4/5/vtoroyjpg_1641629_26726445.jpg

        Нравится

        1. Движок выдает ошибку, что не может прочитать файл patch.xp3 . Каким инструментом переупаковывали обратно в xp3 ? Или игра использует дополнительное шифрование или другой переупаковщик.

          Нравится

          1. Хм-хм-хм.
            Вот оно что. Тогда буду пробовать другие программки для упаковки переделанных файлов. Спасибо.
            А распаковывал и упаковывал обратно я программой «AE Tools»

            Нравится

  12. ОМГ… порылся на англ форуме и нашёл причину той ошибки. Сейчас всё работает.
    Надо было в программе выбрать в какой формат запаковывать архив (как я понял) (на скриншоте отметил красным)

    1) переведенное меню:

    2) выбрал выделенный формат:

    Нравится

  13. Доброго времени суток, прошу поддержки.
    Решил поиграться с Fate\stay night Realta nua, поставил кириллические шрифты, в итоге в окне истории всё отображается нормально, а вот в обычном окне с текстом символы широкие. HEX-редактором значение поменял, не помогло. В чем может быть дело, где копать? Скрипты могу приложить.

    Нравится

    1. Возможно, игра использует другой шрифт для окна с текстом. Скорее всего, шрифт для него прописан еще где-то в другом месте, не только в userface.
      Вот тут на форуме, где обсуждают английский патч есть что-то про шрифты, я не вникал, но вдруг поможет.
      http://forums.nrvnqsr.com/showthread.php/4745-Fate-Stay-Night-Realta-Nua-PC-version-Mirror-Moon-TL-insertion-project/page533
      http://forums.nrvnqsr.com/showthread.php/4745-Fate-Stay-Night-Realta-Nua-PC-version-Mirror-Moon-TL-insertion-project/page534

      Нравится

  14. Чтобы сделать обратный перевод из png в tlg можно использовать набор «krkr» отсюда — http://vnru.wikidot.com/tlg
    Я опробовал — получилось.
    Может стоит ссылку дать в самой теме, а не только в комментариях?

    Нравится

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s