Рейтинг темы:
  • Голосов: 0 - Средняя оценка: 0. Если голосов меньше 5 оценка не показывается.
  • 1
  • 2
  • 3
  • 4
  • 5
xStoryPlayer
#1
В общем решил я расковырять эту игру на предмет руссификации. Проблема банальная - шрифт в игре не поддерживает кириллицу.

Сам текст достать элементарно, есть встроенная утилита FileMaker.exe, она и распаковывает и запаковывает обратно. Язык если не ошибаюсь Lua, текст легко опознать, но! вообще нифига не ясно где может лежать файл шрифта (или как навязать свой шрифт).

Если кто захочет помочь, то сейчас пытаюсь ковырять Tentacle_Dreams, первый текст лежит по пути:
Код:
D:\XStoryPlayer 3.5 Christmas Edition with CV1 patch\pack\pack_tentacle_dreams\init\stories\tentacle_dreams\mains\player\brain\code\run\run00_state.dat

Открывается Notepad'ом, но русский не видит.

З,Ы, транслитом перевести не вариант, фу, кака!

 
Ответить
#2
@9ad4b848, шрифты лежат же в pack0.bin — \pack0\gui\fonts
Странно что ты не заметил.

 
Ответить
#3
(04.01.2018, 13:56)d7594d31 писал(а): @9ad4b848, шрифты лежат же в pack0.bin — \pack0\gui\fonts
Странно что ты не заметил.

Да если бы sad В этой папке лежат не шрифты, а лучше - png-картинки шрифтов. Как их заменить на русские?

 
Ответить
#4
@9ad4b848, их надо расширить добавив грифы кириллицы, чтобы понять устройство можно создать картинку размером 1024х1024, оригинал поместить с левый верхний угол, дальше продолжить эти клетки заполнив все остальные куски, каждую клетку пометить цифрами, написать что-то кириллицей в игре и посмотреть какое будет позиционирование и будет ли оно вообще (возможно придётся искать скрипт или код загружающий шрифт и править его логику для поддержки кириллицы, но чаще всего это не нужно). Если там совсем всё плохо, то можно весь английский текст преобразовать в верхний регистр, а нижний регистр использовать под кириллицу, это гемор но будет работать.

 
Ответить
#5
@31e3cf1d, там все через ...! Привязка четко по позициям букв, т.е. в коде можно сколько угодно пихать кириллицу, будет просто пустое место. Можно заменить буквы на кириллицу, но тогда перевод будет делать крайне тяжко.

Например в тексте буква Г - в коде будет D
О - P
Д - E

Итого: ГОД = DPE

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

А где там скрипт на привязку букв к позиции на картинке - это одному богу известно. Я два дня ищу...

 
Ответить
#6
(04.01.2018, 17:03)b45da187 писал(а): Привязка четко по позициям букв, т.е. в коде можно сколько угодно пихать кириллицу, будет просто пустое место
Может быть надо менять только одну сторону, то есть создать 1024х512, где во второй попробовать расположить кириллицу.

(04.01.2018, 17:03)b45da187 писал(а): А где там скрипт на привязку букв к позиции на картинке - это одному богу известно. Я два дня ищу...
Похоже в XStoryPlayer.exe, там по крайней мере прописаны пути к шрифтам этим.

 
Ответить
#7
(04.01.2018, 17:33)d7594d31 писал(а): Похоже в XStoryPlayer.exe, там по крайней мере прописаны пути к шрифтам этим.

Да, засада, туда хрен влезешь.

 
Ответить
#8
Пока придумался только один способ перевода: на png меняем символы на кириллицу, записывая в таблицу эти соответствия.
Потом переводить на русский и преобразовывать с помощью таблицы в англ раскладку и получившуюся строчку пихать в код. Но тогда нужно писать прогу-дешифратор на основе таблицы соответствия. А это ппц геморрой cray

 
Ответить
#9
@9ad4b848, Скрипт для преобразования написать не проблема совсем. Проблема в том что в игре есть подобие консоли где пишем команды на английском, ты эти строки нашёл уже?

Ещё нужно не забывать про управление с подсказками — нужно составить правильную таблицу замен шрифта типа Ф=A Ы=S и т. п. чтобы обозначения клавиш остались рабочими.

 
Ответить
#10
(05.01.2018, 19:42)d7594d31 писал(а): Проблема в том что в игре есть подобие консоли где пишем команды на английском, ты эти строки нашёл уже?
Это останется на английском, тут без вариантов. Там очень сложная логика, каждая фраз строится из отдельных слов, они анализируются, почти ИИ в миниатюре короче

(05.01.2018, 19:42)d7594d31 писал(а): Ещё нужно не забывать про управление с подсказками — нужно составить правильную таблицу замен шрифта типа Ф=A Ы=S и т. п. чтобы обозначения клавиш остались рабочими.
зачем? WASD так и останется, символы заменятся только в репликах

 
Ответить
#11
(05.01.2018, 21:04)b45da187 писал(а): Это останется на английском, тут без вариантов. Там очень сложная логика, каждая фраз строится из отдельных слов, они анализируются, почти ИИ в миниатюре короче
А там шрифт не тот же самый? Если тот же самый то без этого у тебя будет там кириллица в выводе и/или при наборе.

(05.01.2018, 21:04)b45da187 писал(а): зачем? WASD так и останется, символы заменятся только в репликах
Затем что в настройках можно настроить управление, там какой шрифт используется?
В той же помощи по F1 тоже показываются клавиши.

 
Ответить
#12
@31e3cf1d, я не заморачиваюсь, меню можно оставить на инглише, эт не критично, а вот текст там важен. А управление на том же шрифте, что и меню. Если это не трогать, то и прокатит.


@31e3cf1d, А впрочем проблема не в этом - оказалось, что игра берет шрифты откуда-то еще, а не из pack0\gui\fonts, потому что при замене символов на русские игра все равно пишет...английские. Короче это видимо тупо картинки хз для чего, а шрифты зашиты в exe sad

 
Ответить
#13
@9ad4b848, а ты запаковал обратно? там надо раскомментировать второй блок и закомментировать первый.
Но просто так шрифты не поменяешь, оно вылетает с ошибкой:
Цитата:ERROR: Code failed in file '.\xcontext\gui_objects\xc_font.cpp', line 116: CXcFont::BindData: Not a font file
Я открыл картинку в tweakpng и там оказалось что какой-то мусор, посмотрел в 010 editor и да в конце сидят какие-то левые данные.
[Изображение: https://s18.postimg.cc/r5baqaisp/pnghex.png]
Я их скопировал в свой изменённый png и запаковал, теперь просто упало без строчки выше.
Повторил png в принципе той структуры что оригинал, но видимо в этих доп. данных содержатся какие-то данные зависимые от исходного файла, типа например какого-то смещения. Короче эти данные надо разбирать. Возможно какие-то данные ещё зашиты в exe. Бегло поглядев что-то похожее на ожидаемые размеры-смещения не нашёл.
Можешь написать разработчикам спросить как они шрифты пакуют, возможно у них для этого тоже есть спец. прога.


Хотя посмотрел чуть внимательнее, нашёл байт отвечающий за размер-смещение, сейчас поправлю.


Получилось.
Вот как оно работает:
[Изображение: https://s18.postimg.cc/k5x8qry89/pnghex1.png]
С начала до запятой (чуть дальше IEND) это размер самой PNG, оно же смещение для тех данных. Показывается в строке статуса при выделении. Его записываешь куда-нибудь.
У эти посторонних данных это смещение располагается тут:
[Изображение: https://s18.postimg.cc/kvg134r21/pnghex2.png]
(в самом конце перед двумя нулевыми байтами)
Эти два байта относящие к смещению нужно выделить и в инспекторе в Signed Int на значении два раза щёлкнуть и вставить ранее записанное (размер изменённой PNG).
Сохранить и запаковать. После чего игра не падает и работает.
Но просто так ты не отделаешься, надо через TweakPNG приводить к исходному виду (ещё до копирования и правки этих посторонних данных), например нужно точно background color = pallete entry 0, причём его нужно открыть и похоже установить правильный фон (я заметил градиент перевёрнут но хз в этом ли дело), иначе в игре показывается непрозрачный фон вместо прозрачного. Возможно ещё дело в palette, там тоже можно установить фон.
Если не поправить то будет вот так:
[Изображение: https://s18.postimg.cc/lz05f4ea1/image.png]
Шрифт точно меняется см. на букву A в About.

Пока нет времени дальше с этим играться.


(06.01.2018, 17:39)d7594d31 писал(а): там надо раскомментировать второй блок и закомментировать первый
Точнее не всё так просто, вот как у меня:
Свёрнутый текст:
Код:
//////////////////////////////////////////////////////
// Defines
//////////////////////////////////////////////////////


#define RUNTIME  "../"
#define PACKPATH "unpack/pack0/"


//////////////////////////////////////////////////////
// Unpack
//////////////////////////////////////////////////////


// Uncomment this to unpack a pack
/*Pack pack1
{
  unpack = true;

  file    = "[RUNTIME]pack/pack0.bin";
  
  outpath = "[RUNTIME]unpack/";
}
*/

//////////////////////////////////////////////////////
// Pack
//////////////////////////////////////////////////////


// Uncomment this to repack a pack
Pack pack
{
  file     = "[RUNTIME]pack/pack0.bin";

  zip       = true;
  path_full = true;
  
  addpath = "[RUNTIME][PACKPATH]*.*";
}
Извлекаю я в unpack, вверху под это подправлен PACKPATH (откуда брать данные для запаковки):
#define PACKPATH "unpack/pack0/"

 
Ответить
#14
@31e3cf1d, Запаковал конечно, а толку? Игра вообще перестала запускаться. Причем без ошибок, просто появляется черное окно и закрывается

 
Ответить
#15
@9ad4b848, см. выше, я всё написал.

 
Ответить


Переход:


Просматривают эту тему: 1 Гость(ей)