Форум Dwarf Fortress

Модификации => Русификация игры => Тема начата: insolor от 08 Сентября 2013, 01:53:40

Название: SDL_ttf.dll
Отправлено: insolor от 08 Сентября 2013, 01:53:40
Наконец-то добрался до SDL_ttf.dll. К сожалению не разобрался, как его компилировать из исходников. Посмотрел версию mialax'а, так он вообще скомпилировал ее как Microsoft.Net Assembly :)

В общем, выбрал обходной путь, и написал Fake_ttf.dll - библиотеку-переходничёк на ассемблере 8-) Исходная библиотека SDL_ttf не меняется, просто между DF и ею добавляется "прослойка", в которую в свою очередь можно добавлять свой функционал.

Библиотеку ChangeText тоже посмотрел, и заставить ее работать в паре с моей Fake_ttf. Единственно, сделал буферный массив outText в функции ChangeText() статическим, потому как возвращать адрес нестатической локальной переменной - это айайай. Позже постараюсь добавить возможность писать скипты на питоне.

Во вложении:
Название: Re: SDL_ttf.dll
Отправлено: insolor от 08 Сентября 2013, 02:16:14
По поводу обрезания текста. Жаб, к сожалению, не знает, для чего в SDL_ttf функция TTF_SizeUNICODE, поэтому определяет размеры выводимого текста, взяв "самую широкую" букву - латинскую букву M, и умножив ее ширину на количество выводимых символов. В результате, если попытаться через SDL_ttf переводить "Quit" как "Выход", то получится "Выхо" и маленький кусочек буквы д.

Отсюда вывод: использовать перевод через SDL_ttf как самостоятельное решение не получится, а только вместе с имеющимся патчем-переводчиком, с целью устранения нестыковок грамматики, например, и перевода где-то глубоко закопаных строк (например, текста, появляющегося при переходе к созданию мира).
Название: Re: SDL_ttf.dll
Отправлено: Jesus от 08 Сентября 2013, 09:40:48
По поводу обрезания текста. Жаб, к сожалению, не знает, для чего в SDL_ttf функция TTF_SizeUNICODE, поэтому определяет размеры выводимого текста, взяв "самую широкую" букву - латинскую букву M, и умножив ее ширину на количество выводимых символов. В результате, если попытаться через SDL_ttf переводить "Quit" как "Выход", то получится "Выхо" и маленький кусочек буквы д.

Отсюда вывод: использовать перевод через SDL_ttf как самостоятельное решение не получится, а только вместе с имеющимся патчем-переводчиком, с целью устранения нестыковок грамматики, например, и перевода где-то глубоко закопаных строк (например, текста, появляющегося при переходе к созданию мира).
А размер буквы M он получает через библиотеку? один раз ?
Название: Re: SDL_ttf.dll
Отправлено: iKlim от 08 Сентября 2013, 13:43:20
Сколько же ещё в коде таких неожиданно-смелых решений от Жаба.   ???
Название: Re: SDL_ttf.dll
Отправлено: Jesus от 08 Сентября 2013, 13:57:57
Сколько же ещё в коде таких неожиданно-смелых решений от Жаба.   ???
Это обычные решения :) чаще всего именно так на практике некоторые вещи и решаются....
а на другой стороне есть теоретики от программирования которые всегда знаю как должно быть :) но почему-то редко они являются программистами :)
Название: Re: SDL_ttf.dll
Отправлено: insolor от 08 Сентября 2013, 14:16:36
А размер буквы M он получает через библиотеку? один раз ?
Один раз, тогда же, когда инициализируется шрифт.
А вот вру я. Да, ширину буквы M он зачем-то определяет, при инициализации шрифта. Но вызовы TTF SizeUNICODE() идут для каждой строки, по крайней мере на "титульном" экране (проверял в отладчике). Почему вчера я не заметил импортирования этой процедуры в DF - хз. Так что, не все так печально. Сейчас подправлю Fake_ttf.dll, чтобы она перехватывала и эти вызовы. И в будущем нужно добавить в ChangeText() кэширование результатов перевода.

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

Прикладываю вид переведенного титульного экрана и пример файлика words.txt
Название: Re: SDL_ttf.dll
Отправлено: Lens от 08 Сентября 2013, 16:49:59
Ээ.. теперь перевод будет расово верный?
Название: Re: SDL_ttf.dll
Отправлено: Andys от 08 Сентября 2013, 17:20:57
Ээ.. теперь перевод будет расово верный?
Расшифруй может понятие 'расово верного'?
Название: Re: SDL_ttf.dll
Отправлено: insolor от 08 Сентября 2013, 18:12:10
Ээ.. теперь перевод будет расово верный?
Отдельные расовые дварфоводы считают, что сам по себе перевод DF - ересь, и Армок нас всех покарает, так что про "расовую верность" я пожалуй промолчу ;)

Если ты имеешь в виду строение предложений согласно правилам русского языка, то тут все возможно.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 08 Сентября 2013, 22:27:35
Обновил файлы в первом посте.
Спойлер
Библиотека ChangeText.dll теперь экспортирует функции как extern "C" и, соответственно, Fake_ttf.dll ожидает от нее этого :)
[свернуть]
Название: Re: SDL_ttf.dll
Отправлено: insolor от 09 Сентября 2013, 19:35:04
В общем, привязка к Python на компах без установленного Python 3.3 пока не работает. Буду разбираться, чего ему еще надо кроме Python33.dll.
Название: Re: SDL_ttf.dll
Отправлено: Andys от 09 Сентября 2013, 20:08:14
Как предположения:
1. через Process Monitor посмотреть, к каким файлам из питоновой диры обращается (читает) при подгрузке длл
2. посмотреть что кроме питон.длл входит в файлы, создаваемые py2exe (правда это скорее всего придется делать со второй версией питона)
Название: Re: SDL_ttf.dll
Отправлено: insolor от 09 Сентября 2013, 21:32:19
Как предположения:
1. через Process Monitor посмотреть, к каким файлам из питоновой диры обращается (читает) при подгрузке длл
2. посмотреть что кроме питон.длл входит в файлы, создаваемые py2exe (правда это скорее всего придется делать со второй версией питона)
Идея здравая. Я попробовал, доступ идет к нескольким подпапкам в папке python33. Попробовал попереименовывать папки, оказалось что перестает работать, если переименовать папку Lib. Скопировал папку Lib целиком в папку DF, а папку Python33 переименовал - работает, но таскать с собой папку размером 25 Мб - не вариант. В общем, осталось посмотреть, что оттуда можно безболезненно удалить.

...

Результат - папка размером 1.7 Мб.
Название: Re: SDL_ttf.dll
Отправлено: Andys от 09 Сентября 2013, 22:31:06
таскать с собой папку размером 25 Мб - не вариант. В общем, осталось посмотреть, что оттуда можно безболезненно удалить.
гы :) у меня папка либ - 180мб... Это с левыми библиотеками, конечно
Название: Re: SDL_ttf.dll
Отправлено: insolor от 09 Сентября 2013, 23:54:16
таскать с собой папку размером 25 Мб - не вариант. В общем, осталось посмотреть, что оттуда можно безболезненно удалить.
гы :) у меня папка либ - 180мб... Это с левыми библиотеками, конечно
Я вообще думал, что достаточно будет хостовой проги (библиотеки ChangeText в нашем случае), Python33.dll и вызываемого скрипта. А тут оказывается такая запара с модулями.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 10 Сентября 2013, 00:45:11
Как обычно, залил bitbucket.org:
Название: Re: SDL_ttf.dll
Отправлено: insolor от 13 Сентября 2013, 00:10:50
Так, ChangeTextPy более-менее отлажен. Даже удалось решить проблему с Cook - теперь повар это повар, а готовить - это готовить (точнее "Готов" и кусочек буквы "и", но уже не "Пова").

Оказалось, что сделать перевод только на основе ChangeText не получится - кое-где текст начинает обрезаться.

Мои идеи по поводу применения:

- Быливолков и прочих эпических существ можно превратить в верволков, верзебр, и т.д.

- Когда патч убирает артикли the и a, остается пробел, отделявший артикль и следующие за ним слова. Особенно это заметно, когда артикль the стоит перед названием, взятым в кавычки - было "The что-то-там", стало " что-то-там". Теперь артикли по идее можно удалять вместе с пробелами.

- Для правильного согласования текста в скрипт как-то нужно внести информацию о числах/родах/падежах и прочем. Пока что не сильно понятно, как это сделать, но это основное направление, куда нужно двигаться.

- Поиск в менеджере - можно попробовать перенести перевод предметов из trans.txt в скрипт, тогда можно будет искать по английскому названию, а находить будет на русском - к примеру ввели BAD - нашлась КРОВАТЬ. Еще может быть такой побочный эффект, как перевод вводимого текста, хотя если он выводится по буквам, то такого не будет.

Как это работает:

В игра большую часть текста отрисовывается через библиотеку SDL_ttf.dll. Мы этот текст перехватываем, передаем в скрипт на Python, он его переводит, возвращает, мы его передаем в библиотеку, а она уже отрисовывает наш текст.

Что пока не получится:

- Перевести напуственный текст (там где в конце говорится "Strike the earth!"). Выводится не через SDL_ttf.dll.

- Улучшить перевод мыслей и предпочтений и некоторых других экранов. Причина та же.

Если у кого-то есть какие-нибудь идеи по поводу всего этого, предлагайте.
Название: Re: SDL_ttf.dll
Отправлено: Arex от 13 Сентября 2013, 23:22:26
Так, ChangeTextPy более-менее отлажен. Даже удалось решить проблему с Cook - теперь повар это повар, а готовить - это готовить (точнее "Готов" и кусочек буквы "и", но уже не "Пова").

Оказалось, что сделать перевод только на основе ChangeText не получится - кое-где текст начинает обрезаться.
Честно говоря, в коде пока не ковырялся, но не пойму, с чем связано подобное ограничение.

Насколько помню, в версии от mialax'а таких проблем не было. Там алгоритм был примерно такой:
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 14 Сентября 2013, 01:27:39
http://shot.qip.ru/00b0A8-3VVx8ewmV/ (http://shot.qip.ru/00b0A8-3VVx8ewmV/)
вот что пока удалось.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 14 Сентября 2013, 01:38:06
Так, ChangeTextPy более-менее отлажен. Даже удалось решить проблему с Cook - теперь повар это повар, а готовить - это готовить (точнее "Готов" и кусочек буквы "и", но уже не "Пова").

Оказалось, что сделать перевод только на основе ChangeText не получится - кое-где текст начинает обрезаться.
Честно говоря, в коде пока не ковырялся, но не пойму, с чем связано подобное ограничение.

Насколько помню, в версии от mialax'а таких проблем не было. Там алгоритм был примерно такой:
  • Считывался весь текст со страницы.
  • В считанном тексте проводились замены по словарю
  • При необходимости текст форматировался (надо было допиливать)
  • Весь текст выводился в окне DF.
1. Исходников модифицированной библиотеки SDL_ttf от mialax'а у меня нет, но могу с 99% уверенностью сказать, что по поводу алгоритма ты ошибаешься.
2. Попробуй с помощью его либы заменить "Пова" на "Готовить" и зайти в z -> кухня. Это не связано с алгоритмом работы, а связано с определением ширины "плашки" (SDL_Surface), на которую выводится текст. Кстати, эту версию нужно будет проверить в дизассемблере, т.к. в SDL я уже потихоньку начинаю разбираться.

...

Исходник я нашел. Под спойлером выдержки из него. Правда, я убрал закомментированный код перевода через онлайн-переводчик.
Спойлер
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool Render = false;
int Cur = 0;
int Cur1 = 0;
Uint16 texts[200][80];
HWND df=NULL;
HRGN rgn = CreateRectRgn(0,0,0,0);
bool KeyNum = false;
bool oldKeyNum = false;

RECT rect;

Uint16 cash_eng[65536][80];
Uint16 cash_rus[65536][80];

#define HESH(t)   (((byte)(t[0]))+((Uint16)((byte)(t[1])))*256)

Uint16* TranslRus(Uint16* text, char From)
{
KeyNum = 1;//Control::IsKeyLocked( Keys::NumLock);
if (KeyNum)
{
int leng = wcslen((wchar_t*)text);

bool Small = true;
if (leng > 2)
{
Small = false;
if ( ((text[0])==(70))&&((text[1])==(80))&&((text[2])==(83)))
Small = true;
}
if (!Small)
{
if ((From==0)&&(!Render))
{
////////////////////////////////
int h = HESH(text);
if (memcmp(text, cash_eng[h],leng*2)==0)
{
memcpy(rez, cash_rus[h],sizeof(rez));
text = rez;
}
else
{
////////////////////////////////
memcpy(rez, ChangeText((wchar_t*)text),sizeof(rez));
memcpy(cash_eng[h],text,sizeof(rez));
text = rez;
memcpy(cash_rus[h],rez,sizeof(rez));
}
//////////////////////////////////////
memcpy(texts[Cur],rez,sizeof(rez));
Cur++;
Cur1=0;

}


if ((From==1)&&(!Render))
{
text = texts[Cur1];
}
if ((From==0)&&(Render))
{
text = texts[Cur1];
Cur1++;
Cur = 0;
}

Render = (From == 1);
}
}

return text;
}

int TTF_SizeUNICODE(TTF_Font *font,const Uint16 *text, int *w, int *h)
{
int status;
const Uint16 *ch;
int swapped;
int x, z;
int minx, maxx;
int miny, maxy;
c_glyph *glyph;
FT_Error error;
FT_Long use_kerning;
FT_UInt prev_index = 0;
int outline_delta = 0;
/////////////////////////////////////////////////////////////////////
text = TranslRus((Uint16 *)text, 0);
/////////////////////////////////////////////////////////////////////
...
}

...

SDL_Surface *TTF_RenderUNICODE_Blended(TTF_Font *font,
/* const*/ Uint16 *text, SDL_Color fg)
{
int xstart;
int width, height;
SDL_Surface *textbuf;
Uint32 alpha;
Uint32 pixel;
const Uint16 *ch;
Uint8 *src;
Uint32 *dst;
Uint32 *dst_check;
int swapped;
int row, col;
c_glyph *glyph;
FT_Error error;
FT_Long use_kerning;
FT_UInt prev_index = 0;
////////////////////////////////////mialax
text = TranslRus((Uint16 *)text, 1);
////////////////////////////////////////////
...
}
[свернуть]

Смысл такой:

1. DF собирается вывести какой-то текст. Для начала, он обращается к библиотеке SDL_ttf, чтобы узнать какого размера получится текст на экране. Это делается через функцию TTF_SizeUNICODE. Модифицированная библиотека этот текст на входе подменяет, обратившись к функции TranslRus, которая в свою очередь обращается ко внешней функции ChangeText из библиотеки ChangeText.dll. ChangeText при первом вызове грузит словарь из файла, и ищет перевод по нему. Дальше перевод возвращается в функцию TranslRus, которая его сохраняет в хэш-таблицу, чтобы в следуюущий раз при запросе того же текста уже не обращаться в ChangeText (т.н. кэширование (https://ru.wikipedia.org/wiki/%CA%FD%F8#.D0.9A.D1.8D.D1.88.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.80.D0.B5.D0.B7.D1.83.D0.BB.D1.8C.D1.82.D0.B0.D1.82.D0.BE.D0.B2_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B)). И дальше уже переведенный текст возвращается в TTF_SizeUNICODE, которая уже возвращает DF размеры переведенного (а не исходного) текста.
2. DF нужно преобразовать нужный текст в изображение. Он обращается к функции TTF_RenderUNICODE_Blended библиотеки SDL_ttf. Модифицированная библиотека его опять же подменяет и в картинку превращается уже не исходный текст, а переведенный. DF как ни в чем ни бывало выводит эту картинку на экран.

Логика моей Fake_ttf примерно та же (подмена выводимого текста), только она служит простым переходником между DF и настоящим SDL_ttf, кроме того передавая текст в ChangeText.dll и из него. Кэширование перевода можно организовать внутри ChangeText.dll. Получилось довольно просто и надежно, и не нужно заморачиваться с компиляцией SDL_ttf.dll.
Название: Re: SDL_ttf.dll
Отправлено: keepmind от 21 Октября 2013, 23:44:42
insolor, можно ли как то текущим скриптом нормально подцепить строки из trans.txt?
PS: Я раскоментировал ваши строки в скрипте где подцепляется trans.txt - часть текста в игре перевелась, а другая нет.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 22 Октября 2013, 07:56:58
insolor, можно ли как то текущим скриптом нормально подцепить строки из trans.txt?
PS: Я раскоментировал ваши строки в скрипте где подцепляется trans.txt - часть текста в игре перевелась, а другая нет.
В trans.txt лежат "заготовки" строк, патч работает именно с такими заготовками (причем по точному совпадению текста). А скрипт получает готовые строки - где-то сшитые, где-то наоборот порезанные (например режутся начальные двоеточия и пробелы в управляющих меню). Плюс еще здесь более сильные ограничения по длине, чем при переводе патчем.
Название: Re: SDL_ttf.dll
Отправлено: keepmind от 22 Октября 2013, 14:26:38
insolor,
1. некоторые переведенные строки в игре оказываются обрезанными, можешь исправить?
2. И еще в DF есть строки с содержанием апострофа(') вот такие например:
"Dyer's Shop"
"Soap Maker's Workshop"
в changetext.py  такие не внесешь.
3. И еще можно ли с помощью changetext.py перевести мысли дварфов, описание тварей(там где текст пишется не буквами а состоит из тайлов)?


Написал небольшую программу для облегчения гугло-перевода)

Краткая инструкция:
1. Перевести changetext.log в отдельный файл, например в translated.log
2. Передать программе эти два файла в параметры(например bat файлом) программе так:
trans_.exe changetext.log translated.log **минимальная длинна строки(чтобы игнорировались строки типа "a","1"...)**
3. В папке с программой появится готовый файл trans_.txt

Сама программа (http://yadi.sk/d/h1OL3y_FBP5LG)

PS: В архиве еще немного подправленный скрипт changetext.py insolor'a для подхвата полученного файла.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 22 Октября 2013, 15:46:15
insolor,
1. некоторые переведенные строки в игре оказываются обрезанными, можешь исправить?
2. И еще в DF есть строки с содержанием апострофа(') вот такие например:
"Dyer's Shop"
"Soap Maker's Workshop"
в changetext.py  такие не внесешь.
3. И еще можно ли с помощью changetext.py перевести мысли дварфов, описание тварей(там где текст пишется не буквами а состоит из тайлов)?


Написал небольшую программу для облегчения гугло-перевода)

Краткая инструкция:
1. Перевести changetext.log в отдельный файл, например в translated.log
2. Передать программе эти два файла в параметры(например bat файлом) программе так:
trans_.exe changetext.log translated.log **минимальная длинна строки(чтобы игнорировались строки типа "a","1"...)**
3. В папке с программой появится готовый файл trans_.txt

Сама программа (http://yadi.sk/d/h1OL3y_FBP5LG)

PS: В архиве еще немного подправленный скрипт changetext.py insolor'a для подхвата полученного файла.
1. На данный момент нет. Именно поэтому мы пока не можем отказаться от использования патча.
2. Питон поддерживает строки и в одинарных и в двойных кавычках, есть еще способ записи многострочных строк, не помню только какой
3. Нет

Программу посмотрю, возможно сегодня вечером, если будет возможность.
Название: Re: SDL_ttf.dll
Отправлено: keepmind от 22 Октября 2013, 16:06:38
1. ясно
2. эта проблема решается внешним файлом trans.txt
3. жаль
Название: Re: SDL_ttf.dll
Отправлено: insolor от 22 Октября 2013, 16:29:16
1. ясно
2. эта проблема решается внешним файлом trans.txt
3. жаль
2. Это не проблема вообще, я имею в виду что на питоне можно прямо так и написать в двойных кавычках "Dyer's Shop"
Название: Re: SDL_ttf.dll
Отправлено: keepmind от 22 Октября 2013, 16:38:05
я понял, просто когда скрипт отдельно, а перевод отдельно так эстетичнее :)
Название: Re: SDL_ttf.dll
Отправлено: insolor от 26 Октября 2013, 15:15:01
Себе на заметку, как можно будет прикрутить ChangeTextPy к линуксовой версии DF:
http://habrahabr.ru/post/199090/
При желании кто-нибудь может попробовать сделать русификацию линуксовой версии прямо сейчас, не дожидаясь, пока у меня дойдут руки до спецификации формата ELF.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 25 Ноября 2013, 16:04:30
Если кому интересно, девелоперская версия скрипта changetext.py: https://bitbucket.org/dfint/changetextpy_script/src
Большая часть написана Skin36 (http://forum.dfwk.ru/index.php?action=profile;u=958), я в данный момент занимаюсь причесыванием этого скрипта.
Название: Re: SDL_ttf.dll
Отправлено: SnaKe от 05 Декабря 2013, 21:53:24
Если кому интересно, девелоперская версия скрипта changetext.py: https://bitbucket.org/dfint/changetextpy_script/src
Большая часть написана Skin36 (http://forum.dfwk.ru/index.php?action=profile;u=958), я в данный момент занимаюсь причесыванием этого скрипта.
разработка еще ведется?)  :)
Название: Re: SDL_ttf.dll
Отправлено: insolor от 06 Декабря 2013, 08:16:26
Если кому интересно, девелоперская версия скрипта changetext.py: https://bitbucket.org/dfint/changetextpy_script/src
Большая часть написана Skin36 (http://forum.dfwk.ru/index.php?action=profile;u=958), я в данный момент занимаюсь причесыванием этого скрипта.
разработка еще ведется?)  :)
Ведется. А почему "еще"? с момента моего сообщения чуть больше недели прошло.
Название: Re: SDL_ttf.dll
Отправлено: SnaKe от 06 Января 2014, 12:00:50
ребят, а нету инструкции как использовать эту вещь?
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 06 Января 2014, 13:52:19
ребят, а нету инструкции как использовать эту вещь?

Пока еще не готово к использованию :)
Название: Re: SDL_ttf.dll
Отправлено: SnaKe от 06 Января 2014, 14:07:36
ребят, а нету инструкции как использовать эту вещь?

Пока еще не готово к использованию :)

вот балин))) а то смотрю - штука то просто афигенная)
Название: Re: SDL_ttf.dll
Отправлено: insolor от 06 Января 2014, 21:00:36
ребят, а нету инструкции как использовать эту вещь?
Почему бы и нет. Скачать архив отсюда https://bitbucket.org/dfint/changetextpy/downloads
распаковать в папку с DF. Запустить install_fake_ttf.bat.
Дальше можно сохранить файлик https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py
и заменить им соответствующий файл в папке DF.
Название: Re: SDL_ttf.dll
Отправлено: SnaKe от 07 Января 2014, 12:38:56
ребят, а нету инструкции как использовать эту вещь?
Почему бы и нет. Скачать архив отсюда https://bitbucket.org/dfint/changetextpy/downloads
распаковать в папку с DF. Запустить install_fake_ttf.bat.
Дальше можно сохранить файлик https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py
и заменить им соответствующий файл в папке DF.
Когда скачиваю архив и запускаю файл install_fake_ttf.bat, с переводом changetext.py который в архиве, перевод накатывается, когда заливаю файлик https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py, запускаю install_fake_ttf.bat, пишет установка прошла успешно, но при этом перевод не накатывается ... пока не нашел с чем связано.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 07 Января 2014, 14:57:14
Когда скачиваю архив и запускаю файл install_fake_ttf.bat, с переводом changetext.py который в архиве, перевод накатывается, когда заливаю файлик https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py, запускаю install_fake_ttf.bat, пишет установка прошла успешно, но при этом перевод не накатывается ... пока не нашел с чем связано.
Вообще поверх русифицированной версии ставится. Скрипт русификацию просто "улучшает".
Название: Re: SDL_ttf.dll
Отправлено: SnaKe от 07 Января 2014, 15:01:37
Когда скачиваю архив и запускаю файл install_fake_ttf.bat, с переводом changetext.py который в архиве, перевод накатывается, когда заливаю файлик https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py, запускаю install_fake_ttf.bat, пишет установка прошла успешно, но при этом перевод не накатывается ... пока не нашел с чем связано.
Вообще поверх русифицированной версии ставится. Скрипт русификацию просто "улучшает".

это само собой. Поверх руссифицированной версии ставлю...мне кажется в https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py какая-то ошибка, вручную скопировал кусок перевода из него, и вставил в файл который в архиве есть, переход накатился. Но когда пытаюсь использовать оригинальный файл скачанный с https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py, то по какой-то причине перевод не накатывается, как будто ошибка какая-то в коде ... не знаю как посмотреть лог ошибок при использовании install_fake_ttf.bat
Название: Re: SDL_ttf.dll
Отправлено: insolor от 07 Января 2014, 15:10:07
Вообще поверх русифицированной версии ставится. Скрипт русификацию просто "улучшает".

это само собой. Поверх руссифицированной версии ставлю...мне кажется в https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py какая-то ошибка, вручную скопировал кусок перевода из него, и вставил в файл который в архиве есть, переход накатился. Но когда пытаюсь использовать оригинальный файл скачанный с https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py, то по какой-то причине перевод не накатывается, как будто ошибка какая-то в коде ... не знаю как посмотреть лог ошибок при использовании install_fake_ttf.bat
Последняя версия скрипта похоже сыровата. Попробуй вот эту https://bitbucket.org/dfint/changetextpy_script/raw/c42f160db6e0ad3705b1bfe9249c62d425141b5e/changetext.py
Самая новая на данный момент версия работает: https://bitbucket.org/dfint/changetextpy_script/raw/371a2a4a0b73114dac0d797d011cea1e29895cf6/changetext.py
Название: Re: SDL_ttf.dll
Отправлено: SnaKe от 07 Января 2014, 15:27:35
Вообще поверх русифицированной версии ставится. Скрипт русификацию просто "улучшает".

это само собой. Поверх руссифицированной версии ставлю...мне кажется в https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py какая-то ошибка, вручную скопировал кусок перевода из него, и вставил в файл который в архиве есть, переход накатился. Но когда пытаюсь использовать оригинальный файл скачанный с https://bitbucket.org/dfint/changetextpy_script/raw/tip/changetext.py, то по какой-то причине перевод не накатывается, как будто ошибка какая-то в коде ... не знаю как посмотреть лог ошибок при использовании install_fake_ttf.bat

Последняя версия скрипта похоже сыровата. Попробуй вот эту https://bitbucket.org/dfint/changetextpy_script/raw/c42f160db6e0ad3705b1bfe9249c62d425141b5e/changetext.py

с этим файлом русификация накатилась. спасибо.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 31 Января 2014, 12:34:30
Оставлю здесь, чтобы не забыть где нашел
Хабр: Создание zip-модулей в python (http://habrahabr.ru/company/acronis/blog/208378/)
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 18 Марта 2014, 20:54:07
скрипт практически готов к использованию. Осталось протестировать.
Скачать можно тут
https://bitbucket.org/dfint/changetextpy_script/downloads#download-330282 (https://bitbucket.org/dfint/changetextpy_script/downloads#download-330282)
Название: Re: SDL_ttf.dll
Отправлено: firefighter от 18 Марта 2014, 21:29:54
Осталось протестировать.

Протестировать на что? На стабильность или правильность перевода? Или на то и другое?
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 18 Марта 2014, 21:47:24
Осталось протестировать.

Протестировать на что? На стабильность или правильность перевода? Или на то и другое?

Надо найти места где еще не переведено. Проще говоря поиграть и выслать мне лог файл-я сам найду несоответствия.
Ссылка на игру с настроенным переводчиком.
https://bitbucket.org/dfint/changetextpy_script/downloads (https://bitbucket.org/dfint/changetextpy_script/downloads)
Название: Re: SDL_ttf.dll
Отправлено: mialax от 21 Марта 2014, 16:55:13
"Древесина сосна брёвна"
"Гигантский пещерный паук из шёлка штаны"
Ещё при пролистывании списка иногда пропадают названия горячих кнопок.

Вообще довольно круто получилось. Отличная работа. Спасибо
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 21 Марта 2014, 18:52:58
"Древесина сосна брёвна"
"Гигантский пещерный паук из шёлка штаны"
Ещё при пролистывании списка иногда пропадают названия горячих кнопок.

Вообще довольно круто получилось. Отличная работа. Спасибо

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

В любом случае лучше выслать мне лог, чтобы точно определить входную строку.
Название: Re: SDL_ttf.dll
Отправлено: mialax от 21 Марта 2014, 19:33:37
Не нашёл как прикреплять файлы в личных сообщениях, так что мусорю в общей теме.
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 21 Марта 2014, 19:44:46
Не нашёл как прикреплять файлы в личных сообщениях, так что мусорю в общей теме.

Skin36000@yandex.ru
можно сюда.
и еще... чтобы все корректно работало надо скачать равки отсюда
https://bitbucket.org/dfint/dfrus-raws/
т к в них много исправлений.

Ну да, все правильно-практически весь неправильный перевод в этом логе-из за старых равок.
Название: Re: SDL_ttf.dll
Отправлено: mialax от 21 Марта 2014, 21:01:30
Ссылка на игру с настроенным переводчиком.
https://bitbucket.org/dfint/changetextpy_script/downloads (https://bitbucket.org/dfint/changetextpy_script/downloads)

Скачивал по этой ссылке. Видно там старые равки. Попробую с новыми.
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 22 Марта 2014, 21:17:04
Ссылка на игру с настроенным переводчиком.
https://bitbucket.org/dfint/changetextpy_script/downloads (https://bitbucket.org/dfint/changetextpy_script/downloads)

Скачивал по этой ссылке. Видно там старые равки. Попробую с новыми.

да, это я накосячил ;)
выкладываю с исправленными равками
Название: Re: SDL_ttf.dll
Отправлено: Chaos66 от 04 Апреля 2014, 19:32:13
Выложите еще раз русифицированную игру.
по ссылке несмог скачать, 404 ошибка
Название: Re: SDL_ttf.dll
Отправлено: insolor от 04 Апреля 2014, 20:44:06
Выложите еще раз русифицированную игру.
по ссылке несмог скачать, 404 ошибка
Поправил ссылку
Название: Re: SDL_ttf.dll
Отправлено: Chaos66 от 05 Апреля 2014, 17:13:16
Скажите, как избавиться от букв на экране, в частности "ч" на реке/ручье, разных других букв на изображении? Стоит стандартный графиксет phoebus
Название: Re: SDL_ttf.dll
Отправлено: insolor от 05 Апреля 2014, 17:26:11
Скажите, как избавиться от букв на экране, в частности "ч" на реке/ручье, разных других букв на изображении? Стоит стандартный графиксет phoebus
Левый ctrl и крутить колесиком
Название: Re: SDL_ttf.dll
Отправлено: Chaos66 от 05 Апреля 2014, 17:51:25
работает ли ДФхак в русской версии?
Название: Re: SDL_ttf.dll
Отправлено: insolor от 05 Апреля 2014, 19:09:25
работает ли ДФхак в русской версии?
По идее должен. Проверьте.
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 05 Апреля 2014, 20:36:36
Для "включения" поддержки DFhack нужно переименовать модифицированный SDL.dll в realSDL (или SDLreal) и заменить им соответствующий файл DFhack.
Название: Re: SDL_ttf.dll
Отправлено: Lens от 06 Апреля 2014, 09:06:22
Ээ.. бом бом что новый сдл делает? можно пару скринов.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 06 Апреля 2014, 20:20:41
Ээ.. бом бом что новый сдл делает? можно пару скринов.
Если зареган в контакте, можно посмотреть в этом альбоме: http://vk.com/album-50714193_192497904
Название: Re: SDL_ttf.dll
Отправлено: insolor от 15 Мая 2014, 08:19:18
Пофикшена библиотека Fake_ttf.dll: добавлена совместимость с Win8
https://bitbucket.org/dfint/fake_ttf.dll/downloads
Тестовая сборка будет обновлена позже.
Так и не понял что со старой библиотекой было не так. Раньше работало через асмовые макросы, теперь написал скрипт, генерирующий код на асме. По идее должно быть одинаково что так, что так, однако почему-то старая версия под Win8 не работала, а новая работает.
Все оказалось намного проще. Нужно было всего лишь сделать, чтобы секция .reloc библиотеки имела флаг readable.
Название: Re: SDL_ttf.dll
Отправлено: Maller от 30 Мая 2014, 14:52:37
В соседней теме я как бы мимолётом упомянул интересный баг/фичу. Если в файлике colors.txt не прописать для BLACK 0 0 0, то мысли и описания будут всё также выводится набором картинок, а не текстом. Хоть крути ты мышь, хоть не крути и жмакай контрл до посинения.

Это к слову не так чтоб критично, но всё же.

И чтобы 2 раза не вставать спрошу.
Есть возможность библиотеки для работы changetext.py скомпилировать для Linux? Реально охренительная штука и принцип её постобработки вообще зашибись.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 30 Мая 2014, 14:57:24
В соседней теме я как бы мимолётом упомянул интересный баг/фичу. Если в файлике colors.txt не прописать для BLACK 0 0 0, то мысли и описания будут всё также выводится набором картинок, а не текстом. Хоть крути ты мышь, хоть не крути и жмакай контрл до посинения.

Это к слову не так чтоб критично, но всё же.

И чтобы 2 раза не вставать спрошу.
Есть возможность библиотеки для работы changetext.py скомпилировать для Linux? Реально охренительная штука и принцип её постобработки вообще зашибись.
Первая часть не про SDL_ttf.dll, а про SDL.dll, пока не могу ничем помочь.
По поводу второго - можно сделать что-то подобное по тому же принципу, однако у меня пока нет опыта в программировании под Linux. Возможно позже дойду до этого. Вообще это по идее будет сделать проще, чем писать патчер еще и для линуксовых исполняемых файлов.
Название: Re: SDL_ttf.dll
Отправлено: insolor от 13 Июля 2014, 22:16:56
В скрипте окончательно пофикшены werebeasts (быливолки и прочие былизебры):
https://bitbucket.org/dfint/changetextpy_script/commits/e7120a5fb035f330f17497d34110f4facd2e12c7
Название: Re: SDL_ttf.dll
Отправлено: insolor от 13 Июля 2014, 23:55:50
Обновил архив Fake_ttf_ChangeTextPy.7z (https://bitbucket.org/dfint/changetextpy/downloads/Fake_ttf_ChangeTextPy.7z).
Из изменений: переход на Python 3.4, совместимость Fake_ttf.dll с Win8, косметические изменения в changetext.dll, куча изменений в changetext.py
Можно ознакомиться со списком тестов, которые успешно проходит скрипт: https://bitbucket.org/dfint/changetextpy_script/src/tip/tests.py
Внутри фигурных скобок идут пары "как есть":"как должно быть", т.е. на вход скрипту подается "как есть" а выходное значение сравнивается с "как должно быть". Если результат совпадает, то тест пройден. Все что не закомментировано (символ # в начале строки), то успешно проходится.
Название: Re: SDL_ttf.dll
Отправлено: Skin36 от 17 Ноября 2014, 11:54:08
Я думаю обрезание TTF текста кроется где то тут.
файл df_40_16_linux\df_linux\g_src\ttf_manager.ttf
Спойлер
bool ttf_managerst::init(int ceiling, int tile_width) {
  // Reset to a known state, clear everything
  if ((!TTF_WasInit()) && (TTF_Init() == -1)) {
    MessageBox(NULL, TTF_GetError(), "TTF error", MB_OK);
    return false;
  }
  if (font) TTF_CloseFont(font);
  handles.clear();
  for (auto it = textures.cbegin(); it != textures.cend(); ++it)
    SDL_FreeSurface(it->second);
  textures.clear();
  this->tile_width = tile_width;
  this->ceiling = ceiling;
  // Try progressively smaller point sizes until we find one that fits
  for (int sz=20; sz > 0; sz--) {
    font = TTF_OpenFont("data/art/font.ttf", sz);
    if (!font) continue;
    if (TTF_FontHeight(font) <= ceiling) {
#ifdef DEBUG
      cout << "Picked font at " << sz << " points for ceiling " << ceiling << endl;
      // get the glyph metric for the letter 'M' in a loaded font
      cout << "TTF_FontHeight " << TTF_FontHeight(font) << endl;
      cout << "TTF_FontAscent " << TTF_FontAscent(font) << endl;
      cout << "TTF_FontDescent " << TTF_FontDescent(font) << endl;
      cout << "TTF_FontLineSkip " << TTF_FontLineSkip(font) << endl;
#endif
      int minx,maxx,miny,maxy,advance;
      if (TTF_GlyphMetrics(font, 'M', &minx, &maxx, &miny, &maxy, &advance) == -1)
        puts(TTF_GetError());
      else {
        em_width = maxx;
#ifdef DEBUG
        printf("minx    : %d\n",minx);
        printf("maxx    : %d\n",maxx);
        printf("miny    : %d\n",miny);
        printf("maxy    : %d\n",maxy);
        printf("advance : %d\n",advance);
#endif
      }
      return true;
    }
    TTF_CloseFont(font);
  }
  // ..fine.
  cout << "No font found!" << endl;
  font = NULL;
  return false;
[свернуть]
Название: Re: SDL_ttf.dll
Отправлено: insolor от 17 Ноября 2014, 14:37:07
Я думаю обрезание TTF текста кроется где то тут.
файл df_40_16_linux\df_linux\g_src\ttf_manager.ttf
Спойлер
bool ttf_managerst::init(int ceiling, int tile_width) {
  // Reset to a known state, clear everything
  if ((!TTF_WasInit()) && (TTF_Init() == -1)) {
    MessageBox(NULL, TTF_GetError(), "TTF error", MB_OK);
    return false;
  }
  if (font) TTF_CloseFont(font);
  handles.clear();
  for (auto it = textures.cbegin(); it != textures.cend(); ++it)
    SDL_FreeSurface(it->second);
  textures.clear();
  this->tile_width = tile_width;
  this->ceiling = ceiling;
  // Try progressively smaller point sizes until we find one that fits
  for (int sz=20; sz > 0; sz--) {
    font = TTF_OpenFont("data/art/font.ttf", sz);
    if (!font) continue;
    if (TTF_FontHeight(font) <= ceiling) {
#ifdef DEBUG
      cout << "Picked font at " << sz << " points for ceiling " << ceiling << endl;
      // get the glyph metric for the letter 'M' in a loaded font
      cout << "TTF_FontHeight " << TTF_FontHeight(font) << endl;
      cout << "TTF_FontAscent " << TTF_FontAscent(font) << endl;
      cout << "TTF_FontDescent " << TTF_FontDescent(font) << endl;
      cout << "TTF_FontLineSkip " << TTF_FontLineSkip(font) << endl;
#endif
      int minx,maxx,miny,maxy,advance;
      if (TTF_GlyphMetrics(font, 'M', &minx, &maxx, &miny, &maxy, &advance) == -1)
        puts(TTF_GetError());
      else {
        em_width = maxx;
#ifdef DEBUG
        printf("minx    : %d\n",minx);
        printf("maxx    : %d\n",maxx);
        printf("miny    : %d\n",miny);
        printf("maxy    : %d\n",maxy);
        printf("advance : %d\n",advance);
#endif
      }
      return true;
    }
    TTF_CloseFont(font);
  }
  // ..fine.
  cout << "No font found!" << endl;
  font = NULL;
  return false;
[свернуть]

(Резюмирую переписку в аське) Может не совсем оно, но уже более-менее понятно, в каком направлении копать.