3D Via Virtools
Здравствуйте!Я в первые на форуме,но с zlibом знаком.В не безизвестной серии консольных игр(а именно в
-
Вот чего я не могу понять-используется crc64,а у меня даже не получается получить контрольную сумму оригинального(запакованного) файла именно такую,какая должна быть.Можешь объяснить в какой проге ты crc вычислял?И ещё-я вычислял предварительно вырезав контролку из файла.Сообщение отредактировал DenielX 22 августа 2014 - 01:2822 августа 2014 - 01:28 / #21
-
Короче, поубирал с кода экзешника нафиг все проверки Zlib архивов и их шифрование. Вот сам экзешник и распакованный языковый файл - ссыль
Теперь сам языковый файл будет не запаковван и не зашифрован, а будет в обычном текстовом представлении, только расширение у него будет старое - .nlp. Можно сразу его править и тут же тестировать сам перевод.
Самое прикольное, что для всего этого облегчения понадобилось заNOPить(обнулить) всего 2 байта ...
Но у меня интерфейс проги все равно в кракозябликах, может у тебя нормально будет отображаться. Если нет, то будем решать что делать дальше. Возможно, что нудно где-то сменить кодировку. Ну это уже завтра...22 августа 2014 - 01:47 / #22 -
Круто!Ты и проверку названия убрал?Т.е. теперь прога в папке ищет только по расширению,я переименовал в russian.nlp,а english.nlp убрал,а так же в заголовке вписал Language:Russian и прога поняла этот файл(кракозябры видел).И что самое странное-твой exe"шник понимает оригинальный заксоренный и запакованный в zlib english.nlp или ты алгоритмы дешифровки оставил,а проверку убрал?На счёт кракозябр я тебе уже говорил,что это из-за шрифтов,простой пример:
Видишь-русским символам соответствуют кракозябры-так практически в любой проге или игре.Решение-перерисовать кракозябры на русские символы,либо переназначить английские на русские,а потом перерисовать английские на русские,но при этом в проге не будет поддерживаться английский.Я за первый вариант.Есть ещё вариант,что своих шрифтов у проги нет и она берёт их из винды по ID шрифтов,В таком случае надо найти идентификатор русских шрифтов и вставить ID заместо старого ID"а.Ещё надо найти таблицу ширин шрифтов,её назначение примерно такое:есть изображение шрифтов 512х512,символ "A" храниться с 0 по 32 пиксель по оси X и с 0 по 32 пиксель по оси Y.То бишь вводишь символ,а таблица ширин определяет его координаты в изображении шрифтов.Прилагаю таблицы шрифтов в бинарном виде от неких игр в качестве примера,что бы тебе было легче найти её в exe"шнике.
https://yadi.sk/d/T5Lb4us6aDPcv22 августа 2014 - 12:14 / #23 -
DenielX, вам сюда http://www.angelcode.com/products/bmfont/
или сюда http://www.gamedev.ru/projects/forum/?id=152527
Или в гугль с запросом Bitmap Генератор шрифтаСообщение отредактировал mishem 22 августа 2014 - 13:1222 августа 2014 - 13:06 / #24 -
Создание шрифтов-дело то плёвое.Но сначала надо найти где прога инициализирует шрифты,где они хранятся и где находится таблица ширин-вот самое сложное,а создание уже на втором плане,я рисую шрифты в ручную в GIMP.22 августа 2014 - 13:16 / #25
-
Круто!Ты и проверку названия убрал?Т.е. теперь прога в папке ищет только по расширению,я переименовал в russian.nlp,а english.nlp убрал,а так же в заголовке вписал Language:Russian и прога поняла этот файл(кракозябры видел).И что самое странное-твой exe"шник понимает оригинальный заксоренный и запакованный в zlib english.nlp или ты алгоритмы дешифровки оставил,а проверку убрал?
Программе теперь все равно, зашифрован языковый файл или нет.
На счёт кракозябр я тебе уже говорил,что это из-за шрифтов,
Не нужно путать графические фигурные шрифты с Windows-приложением. Обычному Windows приложению незачем рисовать отдельные шрифты для своих нужд, если можно уже брать готовые системные шифты. Вот туда и нужно рыть, займусь этим на досуге.22 августа 2014 - 19:11 / #26 -
Не важно фигурные-не фигурные,дочитай и поймёшь,что все практически все английские шрифты(включая windows'кие)по русским кодам используют кракозябры,тут именно этот случай(я ж всё подробно в предыдущим посте расписал),но раз ты говоришь что приложение не использует своих шрифтов,значит таблицу ширин и сами шрифты нам искать не надо.Получается надо просто подрубить стандартные русские шрифты windows.Но опять же вытекает вопрос-можно ли к проге подключить и английские и русские шрифты(просто некоторые слова лучше оставить на английском)?22 августа 2014 - 21:25 / #27
-
Не нужно искать никаких шрифтов! Вся проблема опять в экзешнике. Вот пример нормального отображения:
]
Это я изменил значение реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl
lsCodePage с 1252 на 1251.
Если ты переводишь для личного пользования, то достаточно этой манипуляции, чтобы исчезли крякозябли. Ну а если перевод будет выкладываться на паблик, то мне придется опять подправлять экзешник.22 августа 2014 - 22:08 / #28 -
но раз ты говоришь что приложение не использует своих шрифтов,значит таблицу ширин и сами шрифты нам искать не надо.Получается надо просто подрубить стандартные русские шрифты windows.Но опять же вытекает вопрос-можно ли к проге подключить и английские и русские шрифты(просто некоторые слова лучше оставить на английском)?Ну так я про это и говорю,что если прога парсит стандартные шрифты windows,то все что я говорил до этого-можно забыть.И да-русик будит выложен в паблик. Реверс: Nexus.Перевод:DenielX.Но если даже просто надо править реестр,то почему бы не написать .reg файл для изменений в нём и не встроить в русик?Ты изменил кодировку с латиницы на кирилицу,но как осталась латиница?Ты смог объеденить две кодировки в одной проге-как ты это сделал?Ведь в реестре вроде бы 1 параметр?Или можно из реестра несколько подрубать?23 августа 2014 - 00:16 / #29
-
И да-русик будит выложен в паблик
Ну тогда мне придется еще повозиться с программой, но с ходу не удалось найти место в коде, где задается нужная кодовая страница. Скорее всего задержусь на некоторый срок с решением проблемы.
Но если даже просто надо править реестр,то почему бы не написать .reg файл для изменений в нём и не встроить в русик?
Создай файл с расширением .reg и внеси это:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsCodePage] "1252"="c_1251.nls"
Хотя, конечно, это не вариант издеваться над реестром конечного пользователя, но на крайняк это может быть единственное решение.
Ты изменил кодировку с латиницы на кирилицу,но как осталась латиница? Ты смог объеденить две кодировки в одной проге-как ты это сделал?
Да я там перевел всего-то пару строк для примера, остальное осталось на инглише. И ничего я не объединял. Просто программа для интерфейса использует 1252 кодировку, т.е. латинскую, и где-то у себя задает этот параметр. Ну а я в реестре подменяю значение 1252 на 1251, т.е. на кириллицу, потом перезагружаюсь и система подсовывает вместо латинской кодировки кириллическую.23 августа 2014 - 00:42 / #30