Просмотр полной версии : Системный шрифт PSP
Ну наконец то праздники закончились.
Ждемс.....
Спс. Тут ещё такая идея возникла, можно ли запилить не плагин, а модуль, чтобы его в образ класть вместо eboot.pbp, и сначала он грузился, а затем родной eboot?
Заморочился вопросом. В общем, взял самый обычный usermode eboot.pbp, который грузит kernelmode prx. Перегнал его через eboot2iso, а также через pbp2iso. Оба варианта работают. То есть можно спокойно написать самую обычную программу, а затем просто DATA.PSP из неё использовать как EBOOT.BIN. Если всё правильно сделано, то оно без проблем заработает.
aloneunix
27.10.2013, 22:55
Хочу также заменить шрифт в Planetarian, но вот незадача.
libfont.prx декриптовал успешно, но prxtool наотрез отказывается его дизассемблировать
http://puu.sh/5194J.png
Кто знает, в чём может быть проблема?
Ниже прикреплю оригинальную и декриптованную либу.
9542
P.S.: причина замены шрифта — судя по дампу памяти в эмуляторе, в игре используется шрифт jpn0.pgf, при вставке в скрипт русского текста на выхлопе у кириллицы получается моноширинный шрифт, что не есть хорошо.
aloneunix,
забирай. И решай проблемы с компом - текст ошибки на скриншоте.
aloneunix
30.10.2013, 19:58
Yoti, благодарю.
Решил разобраться, что было не так. Ошибка, что указана на скриншоте мало о чём говорит, т.к. заплатки стояли.
У меня всего-навсего оказался старый/нерабочий дистрибутив prxtool. Прекрасно с модулем справился билд, выложенный в этой (http://www.pspx.ru/forum/showthread.php?t=83903) теме.
riku.kh3
28.04.2014, 01:38
Научите как перенаправить шрифт, думаю многим было бы интересно. :blush:
Хочу перенаправить из flash0:/font/jpn0.pgf в disc0:/PSP_GAME/USRDIR/X9DULE/jpn0.pgf
libfont.prx (http://rghost.net/54687831)
frostegater
28.04.2014, 16:50
riku.kh3, Zero VSH Patcher попробуй
COOLERbyPSP
28.04.2014, 16:53
Zero VSH Patcher немного не из той оперы, он же просто берёт из папки на флешке, вместо того, чтобы брать из flash0
riku.kh3
04.05.2014, 12:39
Да, через плагин конечно будет работать.. но немного попрактичней хотелось бы.. готовый проект страдает:
http://s52.radikal.ru/i135/1404/17/603cf8c982bf.png
Да и в патч это как бы тоже не добавишь, а форсировать ради одной игры устанавливать плагин всех подряд точно никто не будет.
UPD:
Нашел какой-то самопальный PRX, написанный китайцами. Ложится вместо libfont.prx, и в свою очередь грузит оригинальный файл переименованный в oldfont.prx и функцией fontfuck подменяет путь к шрифту)) Шрифт только там другой - zh_gb.pgf
http://rghost.net/54917474
ErikPshat
05.05.2014, 19:13
Научите как перенаправить шрифт, думаю многим было бы интересно. :blush:
Хочу перенаправить из flash0:/font/jpn0.pgf в disc0:/PSP_GAME/USRDIR/X9DULE/jpn0.pgf
libfont.prx (http://rghost.net/54687831)Эмм, так вроде об этом шла речь на предыдущей странице: http://www.pspx.ru/forum/showthread.php?p=1059948#post1059948
Думаю тут ситуация 1:1.
riku.kh3
05.05.2014, 19:24
ErikPshat, так да, я потому сюда и написал. Сам просто не могу переварить информацию в ее текущем виде с предыдущей страницы. :scratch_one-s_head:
ErikPshat
05.05.2014, 19:38
riku.kh3, ты там скачай готовые шрифты и либфонты, там ниже в сообщениях я выложил готовый пак. Сравни их и обнаружишь то место, где я менял пути. Да, файлы обратно зашифрованы, поэтому их нужно декриптовать.
Сейчас вспомнить трудно, но по-моему пути в оригинале отображаются в неявном виде, т.е. они как-то хитро завуалированы. Я эти смещения угадал, когда сдампил через дампер памяти этот модуль libfont.prx. В памяти он складывает путь в файле.
Короче, запускаешь игру, чтобы отображался шрифт в игре в нужном месте, например в меню настроек игры или в диалогах. И в этот момент дампишь память. Я вроде использовал дампер memdump от эмм... нашего разработчика, от фузы, плин памяти совсем нет )) Он лежит на форуме в какой-то теме.
Сейчас я уезжаю и инета не будет наверное, так что, если сам не справишься, то смогу помочь только спустя неопределённое время. Но думаю, если почитаешь диалоги на предыдущей странице, то сам поймёшь.
ErikPshat
05.05.2014, 19:47
libfont.prx (http://rghost.net/54687831)
Скачал, глянул. Файл нужно сначала декриптовать.
Перед этим нужно удалить заголовок ~SCE (0x40 байт) до заголовка ~PSP. После этого можно декриптовать через PRXdecrypter на PSP или на Vita.
Ну и в декриптованном ELF можно уже искать путь. Он будет находиться ровно в том же месте, где находится путь в сдампленном этом же модуле из памяти.
Чтобы зашифровать обратно, нужно:
Из зашифрованного файлв ~PSP сдампить KIRK (спроси у Yoti).
Этим же кирком зашифровать обратно - есть тема по нашему PRX Encrypter Mod с исходниками.
Потом в начало файла обратно вернуть заголовок ~SCE
riku.kh3
05.05.2014, 19:50
Вот досада, реальной PSP нет, декриптовать сравнить не могу. :(
А RAM дамп давно снял:
https://www.firedrive.com/file/EA7DD2E7373EA413
ErikPshat
05.05.2014, 20:07
А RAM дамп давно снял:Это не тот вид дампа. Там вижу только ссылки на модули, например так: disc0:/PSP_GAME/USRDIR/X9DULE/libfont.prx
Но вот самого модуля libfont.prx я в дампе не вижу.
Ищи дампер от Andy_maN. Он дампит все загруженные модули по-отдельности.
Вот досада, реальной PSP нет, декриптовать сравнить не могу.Ну можно на Вите сделать или кого-нибудь попросить, например у Кулера есть PSP, у vash есть и много у кого есть ;) :)
А дампер вспомнил: moDumper plugin by Andy_maN (http://www.pspx.ru/forum/showpost.php?p=1039724)
riku.kh3
05.05.2014, 20:27
Эх, значит и RAM дамп нормальный не снять без PSP. :( Вита у меня на последней офф прошивке, там без вариантов - ничего не запустить.
UPD:
Нашел немного информации по по libfont.
http://translate.googleusercontent.com/translate_c?depth=1&hl=ja&rurl=translate.google.co.jp&sl=zh-CN&tl=en&u=http://blog.sina.com.cn/s/blog_4e57a4710100h8q8.html&usg=ALkJrhg04Rf0lThyvKkYM1z5EDSpxdsCmg
ErikPshat
08.05.2014, 15:35
Хочу перенаправить из flash0:/font/jpn0.pgf в disc0:/PSP_GAME/USRDIR/X9DULE/jpn0.pgfСобсно забирай во вложении и проверяй. Little Busters! Converted Edition (JAP) (http://www.nyaa.se/?page=view&tid=175881&showfiles=1)
Если понадобится, то позже зашифрую файл обратно, как в оригинале.
P.S. Не забудь в образе перед заменой снять LBA позиции, а затем их вернуть обратно.
riku.kh3
08.05.2014, 15:55
ErikPshat, спасибо. Подписать его - и вообще будет идеально. Собираюсь отправить его автору английского порта, мы с ним уже общались.
По поводу самого шрифта еще что говорил.. Так выглядят русские буковки в родном jpn0.pgf:
http://i021.radikal.ru/1405/13/d36239f5d746.png
Но при попытке сохранится, игра крэшится.. скорее всего из-за ASCII пробелов ($20), которые движок игры принимает за скриптовые команды.. С shiftjis пробелами все работает нормально, но выглядит так:
http://s020.radikal.ru/i720/1405/da/b2e49c67773a.png
Я пробовал играться с TTF шрифтом, и там свободно получается изменить ширину любой буквы и нужного пробела... но после конвертации в через ttf_pgf.exe, в самой игре ширина уже не становится.. то есть, думаю, либо она прописана в самом pgf и ttf_pgf при конвертации всегда вставляет ее статичное значение.. либо игра вставляет этот интервал после самой буквы. Как-то так. :scratch_one-s_head:
Перевод PC-версии на русский кстати ведется тут:
http://notabenoid.com/book/47139/
Если с техническими проблемами разобраться можно было бы организовать PSP версию.
ErikPshat
08.05.2014, 16:31
riku.kh3, в архиве я положил свой jpn0.pgf - это не родной. Ты его пробовал?
TTF2PGF ты использовал мою сборку (http://www.pspx.ru/forum/showthread.php?t=86308)?
И кстати, на английском порте тоже видно, что идёт 2-ой пробел:
http://s52.radikal.ru/i135/1404/17/603cf8c982bf.png
игра крэшится.. скорее всего из-за ASCII пробелов ($20)А что если пробелы 0x20 подменить на другой код, например подглядеть в Shift-JIS?
Ну собственно получается та же история, как в предыдущем переводе с Лунаром. Там так же использовались служебные символы в русской кодировке. Эти символы можно все вычислить по коду переводимого файла и просто не использовать их, делать подмену из другого диапазона, либо в самом шрифте переместить буквы в другую область.
riku.kh3
08.05.2014, 16:48
riku.kh3, в архиве я положил свой jpn0.pgf - это не родной. Ты его пробовал?
TTF2PGF ты использовал мою сборку (http://www.pspx.ru/forum/showthread.php?t=86308)?
Да, с ним (программа тоже оттуда), и с другим заведомо правильно собранными jpn0.pgf (у меня есть красивенький курсивчиком, там сразу же разницу видно). Да и по логам эмулятора видно что он грузится из flash0:/fonts/jpn0.pgf. Но если на реальном железе как положено работает, то не суть важно.
И кстати, на английском порте тоже видно, что идёт 2-ой пробел:
Ага, английские буквы тоже в двухбайтовом shiftjis'е.
А что если пробелы 0x20 подменить на другой код, например подглядеть в Shift-JIS?
С этой кодировкой я очень хорошо знаком, там просто нету других пробелов.. коды неиспользуемых символов тоже как надо не отображаются.
Ну собственно получается та же история, как в предыдущем переводе с Лунаром. Там так же использовались служебные символы в русской кодировке. Эти символы можно все вычислить по коду переводимого файла и просто не использовать их, делать подмену из другого диапазона, либо в самом шрифте переместить буквы в другую область.
Как вариант конечно, но там в окошке сохранения фраза на которой сейв делается отображается системными шрифтами, биллиберда будет несовсем эстетичная, конечно, но как вариант.
ErikPshat
08.05.2014, 17:24
riku.kh3, ну вообщем вот подписанный тем же родным кирком ~SCE и ~PSP либфонт, надеюсь не напортачил и должен работать...
По заголовку и размеру он ничем не отличается от оригинала. Тело же конечно уже другое 0x150 + 0x40, но подписано этим же родным кирком и заголовком.
Ах да, мой шрифт, который я выкладывал в предыдущем архиве, ловит кириллицу в юникоде и в однобайте. Так что можно использовать как двубайтную кодировку юникода, так и однобайтную win-1251 0xC0 = А.
А ты точно уверен, что шрифт именно jpn0.pgf? А то вдруг там какой-нибудь ltn12.pgf... как в Лунаре.
В общем шрифт должен подхватываться из папки disc0:/PSP_GAME/USRDIR/X9DULE/. Название самого шрифта не указывается в пути, его даже не видно при дампе памяти, он как-то странно там отбирается по непонятному механизму, но в дампе sceFont_Library виден шрифт kr0.pgf
AsiaNHH(512Johab).tin...........................................kr0.pgf.f
riku.kh3
08.05.2014, 17:47
riku.kh3, ну вообщем вот подписанный тем же родным кирком ~SCE и ~PSP либфонт, надеюсь не напортачил и должен работать...
По заголовку и размеру он ничем не отличается от оригинала. Тело же конечно уже другое 0x150 + 0x40, но подписано этим же родным кирком и заголовком.
Ах да, мой шрифт, который я выкладывал в предыдущем архиве, ловит кириллицу в юникоде и в однобайте. Так что можно использовать как двубайтную кодировку юникода, так и однобайтную win-1251 0xC0 = А.
А ты точно уверен, что шрифт именно jpn0.pgf? А то вдруг там какой-нибудь ltn12.pgf... как в Лунаре.
В общем шрифт должен подхватываться из папки disc0:/PSP_GAME/USRDIR/X9DULE/. Название самого шрифта не указывается в пути, его даже не видно при дампе памяти, он как-то странно там отбирается по непонятному механизму, но в дампе sceFont_Library виден шрифт kr0.pgf
AsiaNHH(512Johab).tin...........................................kr0.pgf.f
В эмуляторе flash0 папочка с программой лежит и там шрифты, которые на PSP используются хранятся. Если в ней подменить jpn0.pgf, то соответственно всё тут же меняется.. да и как он по-другому может называться просто не представляю :scratch_one-s_head: kr0.pgf это что-то корейское, смею предположить.
ErikPshat, тебя не затруднит всё-таки проверить на реальной PSP модифицированный libfont? Неужели железу PSP пофиг, что путь к disc0:/ в мод. библе записан прямо тупо так в открытом виде, а не как до этого? :scratch_one-s_head:
ErikPshat
08.05.2014, 18:37
ErikPshat, тебя не затруднит всё-таки проверить на реальной PSP модифицированный libfont? Неужели железу PSP пофиг, что путь к disc0:/ в мод. библе записан прямо тупо так в открытом виде, а не как до этого? :scratch_one-s_head:Щас попробую всё-таки запилить в образ мод.либфонт и проверить.
Ну а путь складывается по тому адресу в памяти flash0:/font/. В оригинале то место забито нулями специально для этих нужд. А т.к. по тому адресу я уже прописал новый путь, то он уже не затирается. Это можно проверить сдампив память с модифицированным либфонтом.
riku.kh3
08.05.2014, 19:02
ErikPshat, тогда это объясняет, почему на эмуляторе путь переписывается назад на flash0, и все это китайское мамбо джамбо с написанием своего модуля :D
ErikPshat
08.05.2014, 19:46
riku.kh3, ну собсно проверил, всё работает. Подписанный и зашифрованный кастомный модуль отлично отрабатывает на PSP.
Только я шрифт туда подкинул свой Times New Roman сконверченный в ltn0.pgf - переименованный в jpn0.pgf.
Соответственно игра у меня японская и вместо шрифта я вижу прочерки, отображаются только английские слова и спец-символы типа - !?"
10017 10018
Снял дамп памяти, там то же всё чётко. Путь в памяти отображается в нужном месте и не затирается:
Дамп памяти оригинального libfont:
10019
Дамп памяти модифицированного libfont:
10020
Ну и во вложении доказательства дампа памяти.
ErikPshat
08.05.2014, 20:02
ErikPshat, тогда это объясняет, почему на эмуляторе путь переписывается назад на flash0, и все это китайское мамбо джамбо с написанием своего модуля :D
Кстати, я не понял, почему вдруг эмулятор использует шрифты из flash0, но так не должно быть. На эмуле так же должен либфонт отрабатывать и так же должен брать шрифт из образа.
Попробуй убрать из эмуля шрифт jpn0.pgf из папки совсем.
А может ты новый модуль не сохранил в образе игры? Или может шрифт туда забыл подкинуть?
riku.kh3
08.05.2014, 20:49
Кстати, я не понял, почему вдруг эмулятор использует шрифты из flash0, но так не должно быть. На эмуле так же должен либфонт отрабатывать и так же должен брать шрифт из образа.
Попробуй убрать из эмуля шрифт jpn0.pgf из папки совсем.
А может ты новый модуль не сохранил в образе игры? Или может шрифт туда забыл подкинуть?
Нет, собрал я всё правильно (несколько раз пробовал, ошибки быть не может). Видимо, эмулятор по-другому немного работает, и ему пофиг что там уже записано в памяти - поверх затирает.
Подписанный:http://s020.radikal.ru/i722/1405/29/979d7b5580bd.pngНеподписанный:http://i078.radikal.ru/1405/6b/5d15e8e41b6f.pngЧто странно, китайское мамбо джамбо работает на одном из эмуляторов (ppsspp):
http://i069.radikal.ru/1405/aa/122f7fa16c70.pngНо не работает на втором (jpcsp). Как на реальной PSP - тоже не знаю. :scratch_one-s_head:
ErikPshat
08.05.2014, 21:03
riku.kh3, эмм, это китайское мамбо действительно чудо из чудес :D
Как они так умудрились сконвертировать такую библу, там я вижу после концовки файла идёт ещё куча мусора, больше, чем сам продуктивный код.
Выбрось эту шнягу подальше.
И не понятно, что это у тебя на первых скринах и всех остальных пытается грузиться flash0:/font/zh_gb.pgf
Этого шрифта нет ни в игре, нигде. Либо ты сам где-то подмешал это китайское чудо с моим модулем вперемешку.
riku.kh3
08.05.2014, 21:09
ErikPshat, не, это эмулятор для своих системных нужд пытается и несуществующий шрифт добавить (там эмитация окошек для сейвов/загрузок где этот шрифт может использоваться, ввода текста и т.п.). Он вообще все существующие шрифты пытается грузить во всех играх.. :scratch_one-s_head: В образе там все чистенько - только твой libfont.prx заменен и jpn0.pgf рядышком с ним.
ErikPshat
08.05.2014, 21:28
riku.kh3, я вижу у китайцев такой хитрый путь: ms0:/iso/open_ms0 :xDD:
Они наверное подумали, что путь сработает и откроется ms0 :D
Ага, и откуда они догадались такую строчку воткнуть ms0:/ISO/zh_gb.pgf
oldfont.prx - это вообще либа не от этой игры. То есть, как я понял, либа libfont.prx компилится только для одной игры, под которую она предназначена, на другой игре по идее она работать не должна. Это потому, что в самой либе прописано название игры, зашифрованное в заголовке ~SCE. В этом oldfont прописан заголовок от другой игры: \yr=`c`0~{tx...22222GIDD/
А у твоей игры заголовок: \yr=`c`0~{tx...22222JFDD/
Просто введи в поиске декриптованного модуля значение 22222JFDD и ты выйдешь на этот код.
ErikPshat
08.05.2014, 21:36
Вот он ~SCE заголовок зашифрованного файла и он же прописан внутри самого файла, если его декриптовать.
10023
Но у китайцев внутри файлов я вижу другой заголовок от какой-то другой игры. По идее такой файл не должен работать на чужой игре.
riku.kh3
08.05.2014, 21:49
Все, понятно почему на эмуляторах с правильным libfont.prx шрифт не грузится откуда положено. :) Они попросту не используют libfont.prx вообще, вместо него там в самом эмуляторе грузится рутина. Попробовал заменить libfont.prx на пустышку забитую мусором, и оба эмулятора как ни в чем не бывало запустили игру:
http://s020.radikal.ru/i721/1405/f5/b5362842ee44.png
Тут же и ответ на оба поста выше.
ErikPshat
08.05.2014, 21:56
riku.kh3, ну на первых скринах я вижу, что вроде бы грузится disc0:/PSP_GAME/USRDIR/X9DULE/libfont.prx
Там кругом видно, что путь отрабатывает.
И шрифт должен браться оттуда же disc0:/PSP_GAME/USRDIR/X9DULE/jpn0.pgf
Ты посмотри внимательнее в логах, может наряду с другими шрифтами он грузится где-то в конце?
riku.kh3
08.05.2014, 22:13
ErikPshat, на первых то скринах да, видно что 'вроде бы' грузится, но на самом деле эмуль определяет "что" это такое пытается грузится и скипает, перенаправляя на свой код рутины по работе со шрифтами. Логи я внимательно все пересмотрел - disc0:/PSP_GAME/USRDIR/X9DULE/jpn0.pgf не грузится 100%. Да и говорю, пустым файлом заменил libfont.prx в игре, а она все так же как ни в чем не бывало работает и шрифт все так же отображается.
То есть грубо говоря даже если libfont.prx и грузится, эмулятор его поверх своим кодом все-равно перезаписывает. Как то так, в общем. :scratch_one-s_head:
ErikPshat
08.05.2014, 22:17
riku.kh3, ну ладно, тогда значит понятно, что нифига не понятно, почему эмуляторы подсовывают свои шрифты :D
В общем думаю проблему мы решили, ведь игру планируется запускать на PSP. И в общем всё на ней работает, как положено.
Ну а проблемы со шрифтами при сохранении - это уже из другой оперы.
riku.kh3
08.05.2014, 22:25
riku.kh3, ну ладно, тогда значит понятно, что нифига не понятно, почему эмуляторы подсовывают свои шрифты :D
В общем думаю проблему мы решили, ведь игру планируется запускать на PSP. И в общем всё на ней работает, как положено.
Да, тут все отлично.
Ну а проблемы со шрифтами при сохранении - это уже из другой оперы.
Проблем со шрифтами при сохранении не будет, если суметь существующие буковки по ширине уменьшать научиться. Для этого надо скорее всего сам pgf ковырять. :scratch_one-s_head: А так да, если колхозным путем пойти и перерисовать буквы перекидав их местами и вместо одной из них сделать пробел, то при сохранении будет каша отображаться.. ну и бонусом перенос слов, скорее всего, перестанет работать.
ErikPshat
08.05.2014, 22:51
riku.kh3, вот посмотри, мне так кажется, что английский шрифт нормально отображается по ширине и не заметно двойных пробелов:
http://www.pspx.ru/forum/attachment.php?attachmentid=10018
А у тебя почему-то диалоги отображаются широкими с большим пробелом:
http://s52.radikal.ru/i135/1404/17/603cf8c982bf.png
riku.kh3
08.05.2014, 23:02
ErikPshat, надпись 'Converted Edition' у тебя на скрине в обычной ascii кодировке с нормальным $20 пробелом, текст для таких системных сообщений берется из самого EBOOT.BIN.
А на втором скрине текст и пробелы в shiftjis 2-байтовой кодировке:
Vot takaya vot kodirovka
В самой игре если использовать в диалогах ascii с обычными $20 пробелами то игра будет крэшится при попытке сохраниться. То есть в идеале бы сократить ширину shiftjis буковок и пробела, чтобы они выглядели как обычно. :scratch_one-s_head:
ErikPshat
08.05.2014, 23:09
riku.kh3, а, ну да, тупанул я мальца.
Получается нужно как-то Shift-JIS сконвертировать из TTF.
А в TTF можно подкорректировать пробел покороче с помощью редактора шрифтов, дома на компе валяется такой.
Это у Японцев в этой кодировке всегда расстояния такие, чтобы иероглифы не сливались, ну и другие символы языков так же отрисованы.
riku.kh3
08.05.2014, 23:20
ErikPshat, с самим TTF я как только не игрался.. ширину уменьшать пробовал, в самой windows и любыми программами где этот шрифт используется как положено буковки уже становятся и shiftjis пробел в два раза меньше как надо.. но после конвертирования в pgf в самой игре совсем все не так.. Пробел как большим был так большим и остается, из ascii буквы если все глифы удалить - интервала вообще она перестает создавать.. а если из shiftjis символа все глифы удалить - в точности все до наоборот.. :unknw:
riku.kh3 добавил 08.05.2014 в 23:20
Это у Японцев в этой кодировке всегда расстояния такие, чтобы иероглифы не сливались, ну и другие символы языков так же отрисованы.
Скрины которые я выкладывал с русским текстом все в том же shiftjis'е и там никаких интервалов нет. То есть не статическая эта ширина, и должна быть где-то таблица ширины для каждого символа.
http://www.seiai.ed.jp/sys/text/java/shiftjis_table.html
Я, когда над переводом ff3 работали, с этими шрифтами намаялся. Правка ttf по ширине ничего не даст. Ttf2pgf штука не идеальная, но это лучшая софтина из тех, что я нашёл. В самом pgf хранится битмап символов и таблица ширин, пожато это всё rle алгоритмом. К сожалению ни одной программы, которая бы умела напрямую править pgf, мне найти не удалось.
Можно попробовать такой костыль: использовать вместо ascii пробела что-то вроде • предварительно исправив этот символ в ttf.
ErikPshat
09.05.2014, 13:33
Можно попробовать такой костыль: использовать вместо ascii пробела что-то вроде • предварительно исправив этот символ в ttf.
Да, согласен. В переводе можно вместо пробела использовать любой международный символ, например знаки препинания беруться из общего набора международных шрифтов, такие как !?";:*#() и т.п.. Можно взять любой узкий малоиспользуемый знак и через редактор шрифтов TTF зачистить этот символ, либо перекопировать на его место пробел. Затем сконвертировать в PGF.
Но чую я, что там не только пробел используется в качестве служебного символа, могут попасть и любые другие буквы алфавита.
Про Лунар я уже писал ранее (http://www.pspx.ru/forum/showpost.php?p=1059610&postcount=37), какие буквы используются в качестве служебных.
riku.kh3
09.05.2014, 14:04
lupus, в комплекте с pfgtool помимо основной ttf_pgf.exe, есть еще dump_pgf.exe. Она умеет полную информацию по каждому символу в pgf выводить, в том числе и информацию о длине/ширине. Знающий человек посмотрев исходники dump_pgf, по идее, сможет понять где все это хранится и как изменить.
ErikPshat, как уже говорил: международные символы (ascii) править в TTF не поможет. ascii символы после конвертирования в pgf на экране занимают ровно столько места, сколько сами глифы. Если стереть все глифы, то символ абсолютно 0 пикселей интервала будет занимать и просто пропадет.
riku.kh3 добавил 09.05.2014 в 14:04
Но чую я, что там не только пробел используется в качестве служебного символа, могут попасть и любые другие буквы алфавита.
Про Лунар я уже писал ранее (http://www.pspx.ru/forum/showpost.php?p=1059610&postcount=37), какие буквы используются в качестве служебных.
В этом плане тут все еще даже хуже, игра понимает скриптовые комманды в тексте и различные сочетания ascii буковок могут стать триггером комманд.
ErikPshat
09.05.2014, 14:22
ErikPshat, как уже говорил: международные символы (ascii) править в TTF не поможет. ascii символы после конвертирования в pgf на экране занимают ровно столько места, сколько сами глифы. Если стереть все глифы, то символ абсолютно 0 пикселей интервала будет занимать и просто пропадет.
Ну вот возьмём shift-jis пробелы:
http://s020.radikal.ru/i720/1405/da/b2e49c67773a.png
Возьмём для примера кавычки " с которых начинается предложение.
Как видно, после кавычек пробела нет и они занимают маленькое расстояние.
Если мы эти кавычки затрём, чтобы на экране вместо них отображалось пустое место, то получится вполне компактный пробел.
То есть, в переводе нужно писать в кодировке shift-jis, но вместо пробелов ставить кавычки. Либо, если уже перевод осуществлён, через поиск замену можно тупо массово заменить пробелы на кавычки, хоть в тексте хоть в хексе.
Тогда, как видно на скрине - расстояние между буквами нас устраивает и так же будет устраивать пробел (пустые кавычки). А PSP будет думать, что мы ставим кавычки и не будет добавлять 2-ой пробел.
Другое вопрос в том, сможем ли мы, исправив TTF, сконвертировать шрифт в PGF, чтобы он потом мог отображать писанину, сохранённую в shift-jis ?
riku.kh3
09.05.2014, 14:41
Как видно, после кавычек пробела нет и они занимают маленькое расстояние.
Если мы эти кавычки затрём, чтобы на экране вместо них отображалось пустое место, то получится вполне компактный пробел.
Пробела как раз таки и не получается, символ и занимаемое им место пропадут. И даже если получится это реализовать, бонусам перестанет работать перенос слов (с shiftjis пробелом он работает) и в сохранениях будут крокозябры. То есть идеальным решением все-таки было бы уменьшить существующий shiftjis пробел вдвое.
Другое вопрос в том, сможем ли мы, исправив TTF, сконвертировать шрифт в PGF, чтобы он потом мог отображать писанину, сохранённую в shift-jis ?
С этим проблем нет:
http://s52.radikal.ru/i137/1405/8d/ab57e5aab45f.png
(скрин не самый удачный, т.к. пробелы на нем по прежнему проблемные - $20)
ErikPshat
09.05.2014, 15:23
Пробела как раз таки и не получается, символ и занимаемое им место пропадут. И даже если получится это реализовать, бонусам перестанет работать перенос слов (с shiftjis пробелом он работает) и в сохранениях будут крокозябры. То есть идеальным решением все-таки было бы уменьшить существующий shiftjis пробел вдвое.Не понимаю, как может пропасть занимаемое символом место. Система будет всё равно думать, что символ на том месте есть и никуда он не пропадёт. Ведь код символа останется тем же, но не такой код пробела 0x20, а уже тот самый родной код символа, кавычек например.
И с чего перестанет работать перенос? Неужели для переноса ты используешь символ пробела?
Скинь плиз уже готовые ресурсы перевода, с самого начала игры, чтобы я мог потестить, а не переводить всё с начала...куда-нибудь в личку к примеру.
riku.kh3
09.05.2014, 15:51
Не понимаю, как может пропасть занимаемое символом место. Система будет всё равно думать, что символ на том месте есть и никуда он не пропадёт. Ведь код символа останется тем же, но не такой код пробела 0x20, а уже тот самый родной код символа, кавычек например.
При конвертации из TTF в PGF это, по видимому, происходит. По сути, он никуда не пропадает, просто занимает 0 пикселей и визуально его не видно.
И с чего перестанет работать перенос? Неужели для переноса ты используешь символ пробела?
Я не о ручном переносе слов говорю (это было бы кошмаром, учитывая объемы текста), а об автоматической, которая в игре реализована.
ErikPshat
10.05.2014, 04:18
просто занимает 0 пикселейНет, ты не правильно трактуешь правила написания. Символ, даже если он стёрт, занимает ровно столько, сколько для него предназначено в глифе. Тут нужен грамотный подход, но не просто обнуление символа, его нужно просто затереть, а не обнулить - это разные вещи.
ErikPshat
13.05.2014, 05:01
(с shiftjis пробелом он работает) и в сохранениях будут крокозябры. То есть идеальным решением все-таки было бы уменьшить существующий shiftjis пробел вдвое.Такс, по-моему ты мне вводишь в заблуждение мои мозги :)
О каком таком пробеле shiftjis идёт речь? Ты мне уже всю тему про эти пробелы твердишь.
Вот сейчас проверил код пробела в обычной windows-1251 и в shiftjis - символ пробела один и тот же 0x20.
Так что тут пробел абсолютно не при чём. Крашится игра при сохранении не из-за пробела, а из-за управляющих символов, попавших в кириллический диапазон win-1251.
Думаю можно сохранять в другой кодировке, например UTF-8 или UTF-16LE(BE), либо в чём-нибудь другом, где возможно не используются служебные символы от игры.
riku.kh3
13.05.2014, 11:14
ErikPshat, да там просто все замороченне некуда - $20 пробелы не в 100% случаев вызывают крэши при сохранении. Но, опять же, во многих случаях если во фразе, на которой происходит крэш, зменить $20 пробел на shiftjis пробел ($8140), то сейв происходит нормально.
ErikPshat
13.05.2014, 14:16
зменить $20 пробел на shiftjis пробел ($8140)Опять же говорю, что Shift-JIS пробел всегда имеет код 0x20.
Вот для примера я сохранил один и тот же текст "Привет Кёске, как дела?" в разных кодировках:
(название текстовика видно в заголовках программ, а кодировка текстовика видна в нижней части программы)
10028 10029
И вот что я вижу в хексе, какие коды символов использует та или иная кодировка:
Windows-1251
10030
Shift-JIS
10031
Ну может быть PSP действительно берёт не тот код пробела, а по своему, из другой области 0x8140.
Но непонятно тогда, ведь когда ты сохраняешь текст в Shift-JIS на компьютере, то код пробела должен быть 0x20.
riku.kh3
13.05.2014, 14:49
ErikPshat, в японском языке пробелы по-сути вообще не нужны, и редко когда используются. Как и все остальные ascii символы вроде: .,"'()[] ... т.к. там есть свои: 。、゛’「」『』…
Но не в этом суть. То, что я называю shiftjis пробелом - это стандартный, как и все остальные shiftjis символы, двухбайтовый пробел. Вдаваться в смысл как конвертеры кодировок работают не стоит, достаточно просто знать, что ascii пробел (однобайтовый, 0x20), как и остальные ascii символы (.,"'()[] и т.п.) он переносит как есть.. т.к. shiftjis кодировка включает себя саму ascii (хоть она на практике практически и не используется) и по мнению конвертера и фактически оно всегда будет отображаться как надо.
И еще уточню по поводу русских буковок в shiftjis: по стандарту, они часть японской кодировки (как греческие буквы и т.п.), и восприниматься, по сути, должны как и остальные иероглифы... но похоже, что конкретно с этой игрой все гораздо сложнее.. хоть и сам русский текст в игре в чистом shiftjis'е, судя по всему, происходит вмешательство libfont (или другого?) psp модуля, и конвертирование текста в юникод (насколько я понял, pgf формат шрифтов в юникоде) и это вызывает рэндомные крэши вообще независимо от пробелов. :scratch_one-s_head:
ErikPshat
13.05.2014, 15:49
riku.kh3, ну вот ты сохрани любой текст в любом текстовом редакторе в кодировке shift-jis.
Потом проверь в хексе, какие коды в этом shift-jis сохранились. Ты сам убедишься, что пробел там 0x20.
Собственно сдампил из памяти PSP один диалог с твоего перевода. Там действительно вместо обычного пробела подставляется "длинный пробел" 2 байта = 0x8140.
Эти пробелы так же используются в программировании, для отступов исходного кода. "Длинные пробелы" так же бывают 4-байтными и 8-байтными. Ну ты сам наверное встречался с такими, когда в исходниках хочешь удалить или выделить один пробел, а на самом деле удаляется или выделяется длинная полоса.
Мне кажется, что в конвертере допущена ошибка, когда он сам вместо пробела вставляет служебный символ.
Короче, вот кусок дампа памяти: 10032
Там ELF-код лишний почистил, оставил только выводимый текст и инфу по шрифту (FTT-NewRodin Pro DB), которые оказались в дампе.
Причём в памяти коды символов букв не совпадают с кодом в прилагаемом тобой шрифте (HGRSGU002.TTF). То есть, в твоём TTF-шрифте идёт сдвиг кодов.
И да, в дампе памяти используется служебный "длинный пробел" 0x8140.
Я думаю, что его подставляет конвертер изначально, а не PSP его так подменяет.
Кстати, есть идея сдампить оригинальный японский диалог и подсмотреть, какой символ пробела там подставляется.
ErikPshat
13.05.2014, 15:58
Короче, текст нужно писать, чтобы не было багов, в Shift-JIS кодировке.
Но пробел должен быть стандартный 0x20, как и положено в Sift-JIS, а не 0x8140.
riku.kh3
13.05.2014, 16:08
ErikPshat, давай проссуммируем что мы имеем:
1) Никто нам не запрещает использовать стандартный ascii пробел (0x20) и он прекрасно отображается в тексте, но это одна из причин, по которой игра рэндомно крэшится на сейве.
2) Тулза для вставки текста в SCRIPT.PAK дает использовать 0x20 пробел, но я специально их все заменил на $8140 пробел чтобы выявить закономерность крэшей.
3) Использование русских буковок в shiftjis (8440-8460, 8470-8491) еще одна из причин рэндомных крэшей (что-то связано с юникодом pgf шрифта?)
4) Двухбайтовые shiftjis символы, хоть и выглядят все одинаковой длины, не моноширинные. Доказательство тому символ $814B:
゜
5) Изменить ширину shiftjis символов играясь с TTF не представляется возможным, после конвертирования в PGF ширина у каждого символа всё та же как и была.
ErikPshat
13.05.2014, 16:20
1) Ты говорил, что с Shift-JIS кодировкой всё в порядке. А вот с однобайтовой 1251 вкупе с пробелом 0х20 - происходят креши. Поэтому я так и понял, что в кириллице именно 1251 используются служебные символы.
2) По видимому ты сам значит выставил такой длинный пробел, вместо короткого )))
3) Тогда это причина перейти на другую кодировку, например UTF-8, там символы в диапазоне 0401 - 0451. И возможно игра не использует из этого диапазона служебные коды.
4) Ну и русский 2-байтный шрифт так же в Shift-JIS выводится, как однобайтный, вернее нормальной ширины. Так что не в этом проблема.
2 байта на символ - это всего-лишь порядковый номер символа в таблице шрифтов и это совсем не значит, что символ выводится 2-мя байтами.
5) Я уже посмотрел таблицу шрифтов - там даже нету в таблице этого кода пробела 0х8140. Поэтому этот код пробела берётся не из таблицы шрифтов TTF или PGF, а оно уже заложено в либах.
И поэтому я предлагаю:
Либо сменить кодировку.
Либо вместо пробела использовать другой неиспользуемый символ и заменить его стандартным пробелом, т.е. вместо того символа скопировать/вставить пробел. Затем в конвертере пакетно заменить код 0х20 на код того символа, точно так же, как ты заменил на 0х8140.
ErikPshat
13.05.2014, 16:33
Выложу сюда скриншоты, чтобы мне было легче ориентироваться по кодам...
Почему у тебя ошибки в переводе? ))
Он указал на Кёске, который спал как будто пьяный. ругом, было то, что Кёске вернулся.
10033
10034
riku.kh3
13.05.2014, 16:46
1) Ты говорил, что с Shift-JIS кодировкой всё в порядке. А вот с однобайтовой 1251 вкупе с пробелом 0х20 - происходят креши. Поэтому я так и понял, что в кириллице именно 1251 используются служебные символы.
ShiftJIS кодировка - это единственная в которой я разбираюсь и знаю как устроена. Каким образом игра вообще может знать о существовании русской 1251 не представляю. :scratch_one-s_head:
2) По видимому ты сам значит выставил такой длинный пробел, вместо короткого )))
Да, специально, крэшей стало намного меньше, но они по прежнему есть.
3) Тогда это причина перейти на другую кодировку, например UTF-8, там символы в диапазоне 0401 - 0451. И возможно игра не использует из этого диапазона служебные коды.
Опять же, понятия не имею как это все устроить, и как модуль шрифтов это все обрабатывает.
4) Ну и русский 2-байтный шрифт так же в Shift-JIS выводится, как однобайтный, вернее нормальной ширины. Так что не в этом проблема.
2 байта на символ - это всего-лишь порядковый номер символа в таблице шрифтов и это совсем не значит, что символ выводится 2-мя байтами.
Пардон, я думал 1251 кодировка тоже однобайтная, с ней не приходилось просто никогда работать. Никогда не видел чтобы с shiftjis кодировкой такое срабатывало.
5) Я уже посмотрел таблицу шрифтов - там даже нету в таблице этого кода пробела 0х8140. Поэтому этот код пробела берётся не из таблицы шрифтов TTF или PGF, а оно уже заложено в либах.
TTF, насколько я понимаю, в юникоде и там у него код другой. PGF вроде как тоже в юникоде. :scratch_one-s_head:
Ссылку я уже давал, тут коды всех символов в shiftjis:
http://www.seiai.ed.jp/sys/text/java/shiftjis_table.html
Сначала идет "половинчатая", однобайтная область, затем "полная", основная, двухбайтная.
Либо вместо пробела использовать другой неиспользуемый символ и заменить его стандартным пробелом, т.е. вместо того символа скопировать/вставить пробел. Затем в конвертере пакетно заменить код 0х20 на код того символа, точно так же, как ты заменил на 0х8140.
Да, я уже это делал, частично проблему крэшей это решает.. Но по причине №3 не полностью.
riku.kh3 добавил 13.05.2014 в 16:46
Выложу сюда скриншоты, чтобы мне было легче ориентироваться по кодам...
Почему у тебя ошибки в переводе? ))
Он указал на Кёске, который спал как будто пьяный. ругом, было то, что Кёске вернулся.
10033
10034
Это не ошибка, это куски разных фраз слепленные в одну. Тулзу, которую я давал, через AppLocale если запустить из японской среды, то можно нормально каждую фразу на русском смотреть и редактировать.
ErikPshat
13.05.2014, 17:25
Каким образом игра вообще может знать о существовании русской 1251 не представляю.
Опять же, понятия не имею как это все устроить, и как модуль шрифтов это все обрабатывает.
Пардон, я думал 1251 кодировка тоже однобайтная, с ней не приходилось просто никогда работать. Никогда не видел чтобы с shiftjis кодировкой такое срабатывало.Эмм, по-моему ты совсем в этом ничего не понимаешь :D
Или, скорее всего, ты себе сам всё усложняешь тогда, когда всё на самом деле очень просто.
Кодировка - это всего-лишь набор символов и всё! Просто в каждой кодировке все буквы пронумерованы по разному. Взять чисто однобайтную кодировку, то там количество кодов не превышает 0xFF, что получается, если перевести в десятиметричную систему 256 символов.
А как же добавить 257-ой символ?
Вооот! Тут-то 0xFG уже не проканает, потому что в 16-ричной системе максимальное число F и уже нету G ))) ну ты сам знаешь.
Поэтому, чтобы поместить в таблицу 257-ой символ, приходится считать дальше по правилам: 256 = 0xFF, 257 = 0x0100, а 65535 = 0xFFFF.
Вот тебе и всё правило кодировок 1-байтных или 2-байтных.
Поэтому секрет 2-байтных кодировок в том, что в ней присутствует и 1-байтная кодировка :D потому что элементарно подсчёт символов в любой кодировке начинается с нуля, а не с центра вселенной.
Ты же яйца в корзине, если их там 100 штук, начинаешь считать всё равно с 1 единицы, а не с 50-ти )))
Кодировки между собой отличаются только количеством символов и соответственно их порядковым номером в 16-ричной системе.
Если ты хочешь писать в UTF-8, то и символы русского алфавита нужно подсунуть в её диапазон в шрифте.
Кстати, в Shift-JIS я вижу, что русские символы как раз дублируются в диапазоне UTF-8 (0401 - 0451). Таким образом, можно тупо сохранять текст в UTF-8 и шрифт Shift-JIS будет его отображать.
riku.kh3
13.05.2014, 17:52
ErikPshat, по прежнему не объясняет почему игра должна понимать UTF-8. Под shiftjis выделена четкая область и границы начиная с $8140 (ну + ascii еще 00-FF), на все что ниже ей просто параллельно и она не будет это отображать.
ErikPshat
13.05.2014, 19:00
riku.kh3, нет, Shift-JIS шрифт очень большой. Он содержит символы английские, русские, греческие, японские катана и фиг поймёшь что там у них. И все национальные символы имеют свой уникальный код, как задумано в Shift-JIS. Некоторые коды совпадают с UTF-8, но это так же зависит от разработчика шрифта. Разработчик мог бы добавить поддержку UTF-8, как и однобайтный 1251 русский. Английский-то по-любому почти всегда идёт первым в однобайтной области. И разработчик шрифта может сам переставлять шрифты туда, куда ему это выгодно, например, если в игре не используется русский алфавит, то он может туда забить китайские символы, либо просто использовать эти коды в качестве управляющих символов.
Почему мы видим крякозяблики вместо нормального текста?
Потому что в той кодировке, в которой мы сохраняем текст, вместо необходимых букв находятся сторонние символы, например элементарно досовские символы всяких кирпичиков и уголков, либо китайских или японских иероглифов. Либо вообще там нет ничего, пустое место или совсем нет матрицы шрифтов.
Взять однобайтный win1251 на PSP...
Win-1251 начинается с 0xC0 по 0xFF. Вот скрин, где коды символов можно увидеть слева и сверху, как в шахматах.
"А" - 0xC0 или 0x00С0
"Б" - 0xC1 или 0x00С1
"В" - 0xC2 или 0x00С2
"я" - 0xFF или 0x00FF
Спереди парные нули не учитываются.
http://s53.radikal.ru/i140/0904/d9/e670bbab2c58.png
Ранее на том самом месте, где русский алфавит, были как раз досовские символы.
А вот так мы видим пронумерованные символы в шрифте TTF. Нумерация символов так же идёт по стандарту. В данном случае виден русский алфавит в кодировке UTF-8 = 0x0401 (буква Ё) до 0451 (маленькая ё - её здесь нет).
(картинка кликабельна, читаем там внимательно мой пост по установке)
10035 (http://nnm-club.me/forum/viewtopic.php?t=654709)
Листаем тот же шрифт к самому низу и видим там ещё один алфавит Windows-1251 = 0x00C0 (буква А) до 0x00FF (маленькая я). Это уже я сам копирнул алфавит в эту область. Поэтому теперь получается, что этот шрифт поддерживает писанину в UTF-8 и Windows-1251:
10036
То есть, можно в текстовом редакторе написать текст и сохранить его в UTF-8 и он будет отображать русскую писанину, как положено. Так же, можно сохранить текст через текстовой редактор в Windows-1251 и так же, этот текст будет прекрасно выводится, как положено.
Но если посмотреть на текстовые файлы, одного содержания, но в разных кодировках через хекс-редактор, то мы увидим коды символов отличающиеся. В данном случае UTF-8 будет иметь 2-байтные символы на букву, например буква "А" = 0410, то в кодировке 1251 мы увидим код символа "А" = С0 одним байтом.
И один и тот же шрифт будет прекрасно отображать обе кодировки.
riku.kh3
13.05.2014, 20:16
Ну так в итоге и получается, что если разработчик игры не стал заморачиваться и добавлять поддержку кучи кодировок (а из двухбайтных тут помимо shiftjis, есть еще и jis, и euc, и utf-16), а только стандартную область shiftjis - то тут и облом. :scratch_one-s_head:
Я имею в виду, тот факт что shiftjis не противоречит другим двухбайтовым кодировкам, не делает ее частью юникода или utf-16. Это отдельный принятый самостоятельный от юникода стандарт.
Я даже не знаю как это и проверить вообще.. имеющееся тулза у меня только с shiftjis-текстом работает.
ErikPshat
13.05.2014, 20:21
Тэкс, снял дамп памяти оригинального японского диалога.
10037
В дампе всё лишнее удалил, оставил только в 1-ой строке чисто диалог, во 2-ой строке указание на шрифт. Получился такой вот текстовик:
10038
И коды символов в хексе:
10039
Что получается, какие символы использует PSP при выводе японского алфавита?...
「 - A2 = A2
部 - 9594 = 9594
活 - 8A88 = 8A88
ニ - C6 = 82C9
モ - D3 = 82E0
入 - 93FC = 93FC
ラ - D7 = 82E7
ず - 82B8 = 82B8
無 - 96B3 = 96B3
駄 - 91CA = 91CA
ニ - C6 = 82C9
鍛 - 9262 = 9262
エ - B4 = 82A6
上 - 8FE3 = 8FE3
げ - 82B0 = 82B0
ラ - D7 = 82E7
レ - DA = 82EA
タ - C0 = 82BD
筋 - 8BD8 = 8BD8
肉 - 93F7 = 93F7
ヲ - A6 = 82F0
コ - BA = 82B1
コ - BA = 82B1
ぞ - 82BC = 82BC
ト - C4 = 82C6
ば - 82CE = 82CE
カ - B6 = 82A9
リ - D8 = 82E8
ニ - C6 = 82C9
見 - 8CA9 = 8CA9
セ - BE = 82B9
ツ - C2 = 82C2
ケ - B9 = 82AF
テ - C3 = 82C4
ヤ - D4 = 82E2
が - 82AA = 82AA
ル - D9 = 82E9
… - 81(63) = 81(63) [прим. 63 служебный перед завершением?]
」 - A3 = A3
39 символов - 55 байтов.
ErikPshat
13.05.2014, 20:30
у так в итоге и получается, что если разработчик игры не стал заморачиваться и добавлять поддержку кучи кодировок (а из двухбайтных тут помимо shiftjis, есть еще и jis, и euc, и utf-16), а только стандартную область shiftjis - то тут и облом.Нет, ты не правильно понял. Разработчик шрифта - ты сам. В оригинале да, шрифт неизвестно кто и как сделал, вернее известно - это Sony подсунула его в папку flash0:/FONT/JPN0.PGF :D
Но в данном случае ты сам можешь перекидывать символы куда угодно и создать свой кастомный шрифт. Ты сам можешь сделать поддержку всех тысячи кодировок в мире и скомпилировать свой JPN0.PGF.
Чем больше ты сделаешь TTF - тем больше будет размер PGF. Если твой TTF будет весить 2 Мб, то и PGF так же потяжелеет. Если ты вырежешь из шрифта TTF неиспользуемые символы, все греческие, японские и китайские, то и PGF твой будет весить копейки.
Это ты сам можешь проверить.
Поэтому поддержка кодировок зависит теперь только от тебя, потому что ты можешь ложить свой шрифт в образ игры или вместо оригинала в эмуляторе.
P.S. Кстати, в Real Life Engine PAK editor (http://sourceforge.net/projects/rlpaktool/) я заметил, что можно делать переназначение шрифтов, делать сдвиг смещения.
riku.kh3
13.05.2014, 20:32
ErikPshat, я думаю у тебя сейчас вообще голова кругом пойдет. :D Часть текста записывается однобайтной ascii кодировкой (A1-DD) и движок игры 'конвертирует' эти символы на лету в двухбайтные:
ア=あ
イ=い
ウ=う
エ=え
オ=お
カ=か
キ=き
ク=く
ケ=け
コ=こ
サ=さ
シ=し
ス=す
セ=せ
ソ=そ
タ=た
チ=ち
ツ=つ
テ=て
ト=と
ナ=な
ニ=に
ヌ=ぬ
ネ=ね
ノ=の
ハ=は
ヒ=ひ
フ=ふ
ヘ=へ
ホ=ほ
マ=ま
ミ=み
ム=む
メ=め
モ=も
ヤ=や
ユ=ゆ
ヨ=よ
ラ=ら
リ=り
ル=る
レ=れ
ロ=ろ
ワ=わ
ヲ=を
ン=ん
ァ=ぁ
ィ=ぃ
ゥ=ぅ
ェ=ぇ
ォ=ぉ
ャ=ゃ
ュ=ゅ
ョ=ょ
ッ=っ
ErikPshat
13.05.2014, 20:49
riku.kh3, а если поточнее разложить по байтам? (скриншот хекса навиду)
и движок игры 'конвертирует' эти символы на лету в двухбайтные:Не совсем так. То, что движок игры конвертирует, мы как раз наглядно видим в хексе из дампа памяти.
riku.kh3
13.05.2014, 20:50
Это:
「部活ニモ入ラず無駄ニ鍛エ上げラレタ筋肉ヲここぞトばカリニ見セツケテヤがル…」
「 = A2
部 = 9594
ニ = C6
モ = D3
入 = 93FC
ラ = D7
ず = 82B8
無 = 96B3
駄 = 91CA
ニ = C6
Движок игры превращает и выводит на экран в это:
「部活にも入らず無駄に鍛え上げられた筋肉をここぞとばかりに見せつけてやがる…」
Это, по-сути, ненужная рутина, цель которой уменьшить размер каждой фразы в байтах. Я над ней особо не задумывался. Хотя может именно из-за нее и происходят крэши. :scratch_one-s_head:
ErikPshat
13.05.2014, 20:54
Хотя может именно из-за нее и происходят крэши.Вот это я и хочу выяснить...
Кстати, текст из конвертера можно сохранять в текстовые файлы Shift-JIS и потом проверить в хексе?
У меня просто конвертер не запускается, там что-то с 4-ой версией фреймворка у меня не так.
riku.kh3
13.05.2014, 21:04
Если ты про RLPAKTOOL, то там уже встроена эта рутина по конвертированию необходимых ascii символов в то, что на psp фактически выводится на экран. Тут экспортировал текст в shiftjis, правда там мусора много.
ErikPshat
13.05.2014, 21:46
riku.kh3, вообщем вывел я все коды символов. Догнал, что текстовой редактор показывает количество байт на символ. По этой функции и определил все коды в хексе.
В твоём текстовике нашёл ту же фразу и сосчитал так же все коды букв. Дописал их в тот же пост: http://www.pspx.ru/forum/showpost.php?p=1086940&postcount=163
Кроче, видно что во что конвертируется.
По ходу конвертер все символы пишет исключительно в 2-байтовой кодировке. А вот PSP в память складывает узкие символы из 1-байтовой кодировки, а широкие символы оставляет те же 2-байтные.
riku.kh3
13.05.2014, 22:08
ErikPshat, да все так. Суть всей этой кутерьмы в том, что часть наиболее часто используемых символов слоговой азбуки в игровом скрипте заменили на однобайтовые, причем реализовано это на движке игры (в ps2 и ps3 версии этой игры все так же, и сам шрифт там другой) и они выводятся на экран в другом виде. Это помогает сэкономить несколько байт на каждой фразе (там кстати физический лимит поинтера 255 байт на каждую фразу). Если проводить аналогию на привычных вещах, то автоконвертер транслита на русский.. что-то в подобном духе.
Но я все-таки не уверен что это причина крэшей, т.к. русский текст все-таки отображается на экране как положено.. проблема только при попытке сейва происходит.
По сути, можно взять и нарисовать русские буковки на другое безопасное место shiftjis'а вместо ненужных символов.. но, опять же, все сводится к ковырянию PGF формата в попытаках найти таблицу длины и ширины каждого символа в пикселях.
ErikPshat
13.05.2014, 22:42
riku.kh3, я думаю, что можно перевод сохранить в Win-1251 и шрифт использовать обычный свой или переименовать ltn0.pgf в jpn0.pgf. И должно всё выводится.
Думаю крэш в сохранении происходит не из-за шрифтов, т.к. скорее всего в перед и после текстовых диалогов должен стоять поинтер на то, что это именно текстовая секция. Поэтому не должна быть мешанина со служебным кодом.
Скорее всего присутствует баг в самом конвертере. Ведь программный код и текст находятся в одном файле. Если делать перевод и пытаться сохранить текст вместе с программным кодом в какой-либо кодировке, то конечно программный код тоже перекодируется в другую кодировку. Поэтому можно только конвертировать текстовую секцию, но программный код трогать нельзя.
А я чую, что там в тексте как раз присутствуют программные коды, например видел скобки {}, доллары $, буквы S, прямо посреди текста.
Дело в том, что даже если ты видишь на экране те же символы, то даже при перекодировке из shiftjis в тот же самый shiftjis, ты будешь на экране видеть всё те же символы. А на самом деле, в хексе, ты увидишь уже вместо программного кода уже другие цифры, хотя в текстовике для твоих глаз будут отображаться всё те же скобки {}, доллары $, буквы S.
Так что нужно проконтролировать этот момент.
По сути, можно взять и нарисовать русские буковки на другое безопасное место shiftjis'а вместо ненужных символов.. но, опять же, все сводится к ковырянию PGF формата в попытаках найти таблицу длины и ширины каждого символа в пикселях.Нет, длина и ширина находятся как раз в самом шрифте. Можно просто копирнуть весь русский алфавит вместо японского, который используется в игре по номерам 82A8 (Ё) по 82FF - этого диапазона хватит выше крыши для кириллицы. А я видел, что японский алфавит вообще уходит за пределы 9600.
И вообще можно удалить все остальные шрифты, тогда твой PGF будет весить всего 128 байт )))
А сейчас я смотрю твой шрифт, так он весит почти мегабайт, зачем столько всего в нём.
RLPAKTOOLВ исходниках видел файл kanaconv.txt, так вот там и прописывается перенаправление шрифтов.
riku.kh3
13.05.2014, 22:51
ErikPshat, RLPAKTOOL очень продуманно устроен. Этот нюанс с конвертированием японских ascii символов, во-первых, там внедрен исключительно только для отображения: чтобы было удобно читать когда переводишь (то есть в одну сторону), и, во-вторых, только для определенных символов, а не на все подряд. То есть он никак не может тут вредить.
Или может ты посмотрел исходники и увидел там код конвертирования в shiftjis? Он там нужен был автору только для конвертирования своего английского текста.. да, он затрагивает сервисные комманды в тексте и может создавать проблемы... НО! эта фича полностью отключается одной галочкой, и я ей попросту никогда не пользовался. Я просто сразу ввожу нужный мне текст в shiftjis без помощи каких-либо конвертеров.
То есть проблема крэшей все-равно так и не раскрыта.
riku.kh3 добавил 13.05.2014 в 22:51
Нет, длина и ширина находятся как раз в самом шрифте. Можно просто копирнуть весь русский алфавит вместо японского, который используется в игре по номерам 82A8 (Ё) по 82FF - этого диапазона хватит выше крыши для кириллицы. А я видел, что японский алфавит вообще уходит за пределы 9600.
Просто попробуй. Возьми тот скрин выше что ты выкладывал, и попробуй перерисовать хоть один символ так, чтобы он занимал меньше по ширине. Да, в TTF это будет работать, но после конвертирования в PGF - гарантирую, места он будет занимать ровно столько же сколько и оригинальный символ. Причем shiftjis иероглифы не моноширинные (то есть они не все одинаковой фиксированной ширины в пикселях).
ErikPshat
13.05.2014, 23:10
Просто попробуй. Возьми тот скрин выше что ты выкладывал, и попробуй перерисовать хоть один символ так, чтобы он занимал меньше по ширине.Я просто буквы скопирую вместе с их родными данными в позицию 82А8.
Обрати внимание на скрин выше, там на скрине видно окошечко под названием Gliph Properties и в этом окошечке задаются все параметры шрифта. Так же, у шрифта не может быть строго закреплённой ширины и высоты, там указывается от и до. Всё аналогично, как в любом другом шрифте, пусть это shift-jis, пусть utf-8, от названия суть не меняется.
Другое дело, как ты будешь портировать буквы в тексте, менять их код? В программе для этого есть какие-то кнопочки?
Хорошо, если в проге можно только видеть текст наглядно, но на самом деле, чтобы буквы имели другой, необходимый тебе код.
Никак не пойму, почему прога у меня на XP SP3 не запускается.
riku.kh3
13.05.2014, 23:23
Я просто буквы скопирую вместе с их родными данными в позицию 82А8.
Обрати внимание на скрин выше, там на скрине видно окошечко под названием Gliph Properties и в этом окошечке задаются все параметры шрифта. Так же, у шрифта не может быть строго закреплённой ширины и высоты, там указывается от и до. Всё аналогично, как в любом другом шрифте, пусть это shift-jis, пусть utf-8, от названия суть не меняется.
Для TTF - все именно так, все работает и у меня это получалось, конечно же. В TTF свободно играться шириной буковок не проблема. После конвертирования в PGF - происходит совершенно другая история.
Другое дело, как ты будешь портировать буквы в тексте, менять их код? В программе для этого есть какие-то кнопочки?
Хорошо, если в проге можно только видеть текст наглядно, но на самом деле, чтобы буквы имели другой, необходимый тебе код.
Там в коде есть функция похожая по конвертированию английских ascii буковок, только если подправить в исходниках эту функцию под себя.
Приложил модифицированный скрипт, там только самая первая фраза заменена на ту, что в 100% вызывает крэш. Если есть желание сдампить память и поизучать что же с ней не так - пожалуйста.
ErikPshat
13.05.2014, 23:24
Кстати, дай мне нормальный шрифт TTF, который ты собираешься использовать. А то тот, что у тебя в архиве, какой-то по-моему кривой. Или его использовать?
И это, есть возможность вытащить расжатый скриптпак?
riku.kh3
13.05.2014, 23:38
Кстати, дай мне нормальный шрифт TTF, который ты собираешься использовать. А то тот, что у тебя в архиве, какой-то по-моему кривой. Или его использовать?
Да нету у меня нормального, там во всех русские буковки такие небрежные. Только если из русского шрифта перетащить.
И это, есть возможность вытащить расжатый скриптпак?
Нет.
ErikPshat
14.05.2014, 00:36
riku.kh3, ладно, нужно переварить все раскопки и размышления, и ещё поужинать ))). Сегодня ночью думаю потренируюсь со шрифтами и может что-нибудь полезного получится...
Ага, насчёт ширины букв в TTF я соврал. Их же конвертер регулирует TTF2PGF. И кстати, когда я конвертировал свой шрифт обычный Times New Roman, то на PSP в диалогах он выглядел маленьким, наклонным и узким. Скрин на предыдущих страницах, правда без русского и японского алфавита.
Приложил модифицированный скрипт, там только самая первая фраза заменена на ту, что в 100% вызывает крэш. Если есть желание сдампить память и поизучать что же с ней не так - пожалуйста.Ну нифига себе только одна фраза :D
Да там всё заменено и повырезано (Replased, Inserted and Deleted) начиная сразу с 4-го программного байта...
Сравнение с оригиналом
http://i61.fastpic.ru/big/2014/0514/46/795d2486c6f238451a3d43080e0d3646.pngТы хотя бы одну букву измени, чтобы не было смещения символов и сохрани, тогда можно будет и сравнивать )))
riku.kh3
14.05.2014, 00:48
Ну нифига себе только одна фраза :D
Да там всё заменено и повырезано (Replased, Inserted and Deleted) начиная сразу с 4-го программного байта...
Так да, перепаковывает тулза весь скрипт, поинтеры переставляет и т.п.
Одну букву так просто не изменить, т.к. там некий хитрый binary invert применяется к тексту.
Более наглядный пример для сравнения сделал. Здесь два скрипта: в обоих изменена только первая фраза, один скрипт крэшится на сейве, другой нет. Длина в байтах у фраз одинаковая.
ErikPshat
14.05.2014, 01:50
Приложил модифицированный скрипт, там только самая первая фраза заменена на ту, что в 100% вызывает крэш.
Снял дампы памяти с первого диалога у оригинала и крэша, различий тоже много в конце файла, причём не только в диалоге, но и вокруг. Разбираться замучаешься. Ну хоть основная масса файла в начале и дальше середины полностью совпадают.
Кстати крэша при сохранении не заметил.
Щас потестю эти 2 дампа...
ErikPshat
14.05.2014, 02:13
Более наглядный пример для сравнения сделал. Здесь два скрипта: в обоих изменена только первая фраза, один скрипт крэшится на сейве, другой нет. Длина в байтах у фраз одинаковая.Ну сдампил оба теста, так же самая история, различий в конце файлов многовато, копаться тяжко.
Размеры всех 4-ёх дампов одинаковы.
Если открыть файлы в текстовом редакторе в кодировке shift-jis, то строка текста читабельна и находится почти в самом конце файлов.
Прикладываю тесты всех 4 дампов, включая японский оригинал.
riku.kh3
14.05.2014, 02:33
Кстати крэша при сохранении не заметил.
У меня оба эмулятора стабильно крэшатся на этой фразе про мышцы, один из них вот что даже в логе выдает:
http://s006.radikal.ru/i213/1405/d1/d12ab4f35bb5.png
:scratch_one-s_head:
ErikPshat
14.05.2014, 02:38
riku.kh3, ну так это может так только на эмуляторе. У меня оба эмуля вообще крашатся при попытке запуска любой игры )))
На PSP-1004 у меня не крашатся. Я правда может не так сохраняю, по японски там непонимать.
На этой первой фразе нажимаю :triangle: потом спускаюсь на 2-ой пункт и нажимаю :circle:, там отображается слот сейва и сохраняю на :circle:.
Потом на карте памяти появляются в сейвдата 2 папки секьюре и систем.
riku.kh3
14.05.2014, 02:45
На этой первой фразе нажимаю :triangle: потом спускаюсь на 2-ой пункт и нажимаю :circle:, там отображается слот сейва и сохраняю на :circle:.
Потом на карте памяти появляются в сейвдата 2 папки секьюре и систем.
Да, все правильно. Тут, когда крэшится, дело до появления окошка со слотом не доходит даже.
Автор порта англофикации просто жаловался на крэши.. и он с реальной PSP точно работал. Говорил что несколько раз с нуля пришлось проект переделывать и вообще от ascii отказаться и особенно 0x20 пробелов. Я был все-таки уверен что мои крэши на эмуляторе это то же самое. :scratch_one-s_head:http://s018.radikal.ru/i508/1405/68/e813a7415b8a.pngПриложил текст с обычными 0x20 пробелами.
ErikPshat
14.05.2014, 04:24
riku.kh3, вот сейчас да, на этом скрине при сохранении игра потемнела и потом PSP выключилась. Но перед этим я сохранялся разок с таким же пробелом.
Собсно нормально сохранялось раз 5 в диалогах с коротким пробелом.
Заметил, что крашится на длинных диалогах, где заняты все 3 строчки.
http://i62.fastpic.ru/big/2014/0514/79/f6fac1389c863b8f946954f5618ec879.png
http://i62.fastpic.ru/big/2014/0514/07/c6fd834a9f2b6a5aaa3f8e481ccac307.png http://i62.fastpic.ru/big/2014/0514/f2/2d058bf6cf9f80e06ab0057692a174f2.png
P.S. В шрифтах Shift-JIS не удаётся поместить алфавит в 1-байтную кодировку C0-FF. Там жёстко закреплены 2 символа на буквах Ч и ч - символы "Умножить" и "Разделить". Ну алфавит-то перенёсся, за исключением 2-ух букв.
UPDATE Хотя не, 2 символа удалось заменить, так что всё хоккей с однобайтом, ну мало ли, может пригодится.
Попробуй этот шрифт, взял отсюда: http://monafont.sourceforge.net/
Только не пойму, в игре японские символы пропали, хотя они вроде есть ))) но главное проверить пробел Shift-JIS.
Замени пробелы 8140 на 82B0, там я туда перенёс пробел.
Хе-хе, я перекинул все ресурсы из папки ms0:/PSP/SAVEDATA/ULJM05789PAK в образ диска. Теперь карта памяти освободилась, а образ весит 1,958 Гб - это больше, чем UMD-диск :D
Игра прекрасно работает, правда понадобилось конечно подправить пару путей в EBOOT.BIN и я его уже подписал (во вложении). Болше половины файла ничем не отличается от оригинала, так что никто даже не догадается )))
Содержимое папки ULJM05789PAK нужно закинуть в disc0:/PSP_GAME/USRDIR/X8ULJM/
Думаю так будет удобнее распространять, т.к. отпадает необходимость в 1-ом установочном диске или отдельно со 2-ым диском таскать папку ULJM05789PAK и писать инструкцию, куда её класть.
riku.kh3
14.05.2014, 11:24
ErikPshat, заменил пробелы на 82B0 (げ), закинул шрифт, выглядит так:
http://s019.radikal.ru/i624/1405/5e/900381ec188f.png
Прикрепил два скрипта с замененными пробелами, один тот с 82B0 (げ). Другой с 814B (゜) - он по ширине как обычный пробел.
ErikPshat
14.05.2014, 23:46
один тот с 82B0 (げ)Хмм, странно, я просто скопировал знак пробела 0х20 вместо буквы 0х82B0. По-видимому в нём есть какая-то инфа, что вместо буквы пробел всё-таки опознаётся и добавляется ещё один пробел автоматом.
Сдампил память - там вместо пробела только код 0x82B0, как и полагалось, но дополнительного пробела нет.
Другой с 814B (゜) - он по ширине как обычный пробелНу вот твой код не определяется, как пробел, буквы идут с прочерком вместо иероглифа. Я думаю, это всего-лишь из-за того, что в скомпилированном шрифте jpn0.pgf почему-то японские символы куда-то пропадают, поэтому вместо них отображается всякая ерунда.
http://i61.fastpic.ru/big/2014/0514/56/6c3df6f7b067151d6ab53962410be756.png
В общем нужно научится компилировать шрифт TTF грамотно и сам PGF. Попробую ещё как-нить зачистить пробел...
А, да, с переносом всё нормально ))) Буквы переносятся и без пробела, хотя посередине слова.
Я уже замучился каждый раз пересобирать образ, чтобы просто поменять в нём шрифт jpn0.pgf и из-за большого размера VOICE.PAK. Этот войспак, если обнулить, то дальше первого диалога игра не идёт.
В общем, чисто для удобства тестов, я вынес VOICE.PAK на карту памяти в папку LITBUS, а потом решил вывести и шрифт jpn0.pgf. Там в либфонте сменил путь на шрифт и в ибуте сменил путь на войспак. Путь к сейвдата оставил на своём месте, чтобы удобно было менять скриптпак. Короче, пути выглядят так:
ms0:/PSP/GAME/LITBUS/VOICE.PAK
ms0:/PSP/GAME/LITBUS/jpn0.pgf
ms0:/PSP/SAVEDATA/ULJM05789PAK/ - ресурсы по стандарту
Собсно после выведения шрифта на карту, необходимость вывода войспака отпала, т.к. после этого пересобирать образ не требовалось каждый раз, но я не стал переделывать ибут, да и вдруг это пригодится в будущем, чтобы тяжелый образ было легче пересобирать.
У меня всё работает, не знаю как будет подхватываться шрифт через эмулятор.
Образ лайт во вложении, если что...
riku.kh3
15.05.2014, 00:17
ErikPshat, попробуй с этим шрифтом. Я там в 814B (゜) потер глифы.
ErikPshat
15.05.2014, 00:58
ErikPshat, попробуй с этим шрифтом. Я там в 814B (゜) потер глифы.
Ну замечательно, пробел короткий и прекрасно смотрится! Как и предполагал, нужно не копировать пробел, а просто затереть глиф. Так и хотел поступить, но решил протестить для начала тупо копирование.
10053
Кстати, отлично скомпилировался у тебя PGF, японские символы не пропали, отображаются в системных сообщениях. У меня после компиляции почему-то они пропадали и были одни прочерки.
Чем компилировал?
При сохранении на этом скрине игра повисла. Так что тут проблема не из-за пробела 814B. Я склонен предполагать, что это из-за длины текста, ведь на японском в таком тексте количество символов меньше наверное.
riku.kh3
15.05.2014, 01:23
ErikPshat, tpunix-pgftool.rar из твоей темы. Обычной командой 'ttf_pgf font.ttf jpn.pgf' он у меня таким и создается.
Я заменил каждую русскую букву в этой фразе (ascii кавычки, зяпятые и точки оставил), размер в байтах такой же, и вместо пробела все тот же $814B.
http://s019.radikal.ru/i625/1405/59/3d49edd67703.png
Игра у меня после замены сохраняется нормально без крэша. :scratch_one-s_head:
ErikPshat
15.05.2014, 01:37
riku.kh3, может переместить глифы русского алфавита в японскую кодировку и попросить в конвертере сделать автоподстановку отображаемых символов?
riku.kh3
15.05.2014, 01:43
ErikPshat, если имеешь в виду перерисовать их в другую, безопасную, зону то тут старая проблема о которой я на двух страницах ранее писал.. Ширину никак не изменить! С TTF играться бесполезно (для псевдо-пробела я просто нашел один подходящей ширины). То есть это будут либо огромные широкие буквы, либо нормальные с большими интервалами между ними.. и в обоих случаях их влезать будет в окошко слишком мало.
То есть, опять же говорю, надо разбираться в PGF.. где там эти значения длины/ширины для каждого символа хранятся. :scratch_one-s_head:
ErikPshat
15.05.2014, 01:49
riku.kh3, попробуй вытащить распакованный скриптпак. Он не может висеть просто в воздухе. В обычном виде он запакован и нельзя его редактировать или просматривать текст в текстовом редакторе.
Понаблюдай в папке TEMP, он должен туда распаковываться.
riku.kh3
15.05.2014, 02:01
ErikPshat, сам он никуда не распаковывается, все в оперативке держит. Да и не запакован он по-сути, байты текста инвертированы каким-то образом (в проге галочкой Enable invert binary в читаемый вид превращается). Там есть опция извлечь все по отдельности, но по той же самой причине выше, не думаю что там есть на что смотреть.
ErikPshat
15.05.2014, 02:27
riku.kh3, и как угадать, в каком файле тот диалог?
riku.kh3
15.05.2014, 02:42
ErikPshat, May 13 по логике S051300.script. По оффсету 22EA эта фраза начинается (если без имени говорящего, то 22FD).
ErikPshat
15.05.2014, 02:56
riku.kh3, и это ты называешь в распакованном виде ))) Ну ваще, он же не читается не в текстовике, никак )))
Каким образом можно отредактировать в текстовом редакторе диалог, чтобы сохранить его в другой кодировке или хотя бы похексить коды символов?
riku.kh3
15.05.2014, 03:11
riku.kh3, и это ты называешь в распакованном виде ))) Ну ваще, он же не читается не в текстовике, никак )))
Каким образом можно отредактировать в текстовом редакторе диалог, чтобы сохранить его в другой кодировке или хотя бы похексить коды символов?
Никак. Я же говорю что там не на что смотреть. RLPAKTOOL то чего не работает вообще? Обновлений фреймворка ему не хватает?
А, понял чего надо. Текст экспортированный типа того что я ранее выкладывал? Хз конечно тоже на что там смотреть, но вот:
ErikPshat
15.05.2014, 03:33
riku.kh3, ну ты до этого давал файлик с чистым текстом, он же наверное прогой как-то извлекается, а значит наверное можно его обратно накатить. RLPAKTOOL никак не запускается. Фреймворк 4-ый установил всё-таки вчера с горем пополам, там в систребованиях его требуют. Но никак.
Просто комп я сюда привёз не мой. Я одному знакомому собрал новый крутой комп, а этот он хотел отремонтировать, а потом отдал мне, он полуживой P4 селерон одноядерный 2004-го где-то года выпуска. Памяти 2 по 512 стоит, но этого мало, чтобы открыть больше 3-ёх вкладок в браузере. И если что ему не нравится, так вываливается в синий экран, там память что-то глючит. Короче я с ним замучался, открывает папки по полчаса. Нажимаю "Мой компьютер" и иду заваривать кофе.
В общем твой шрифт довольно кароший, вот однобайтная кодировка японская Shift-JIS, на которую конвертятся узкие шрифты A1-DF, которые на той странице вычислили. Думаю с ней можно что-то придумать полезного...
10058
「 - A2 = A2
」 - A3 = A3
ヲ - A6 = 82F0
エ - B4 = 82A6
カ - B6 = 82A9
ケ - B9 = 82AF
コ - BA = 82B1
セ - BE = 82B9
タ - C0 = 82BD
ツ - C2 = 82C2
テ - C3 = 82C4
ト - C4 = 82C6
ニ - C6 = 82C9
モ - D3 = 82E0
ヤ - D4 = 82E2
ラ - D7 = 82E7
リ - D8 = 82E8
ル - D9 = 82E9
レ - DA = 82EA
Это таблица символов с предыдущей страницы (http://www.pspx.ru/forum/showpost.php?p=1086940&postcount=163). Остальные символы можно восстановить логически или подампив память.
Причём там кириллический диапазон попадает Windows-1251 = C0-FF
1-ый столбик - визуально отображаемые символы из дампа памяти.
2-ой столбик - то, во что конвертирует PSP в памяти.
3-ий столбик - то, что записано было в скриптпаке.
ErikPshat
15.05.2014, 10:37
Можешь портировать обратно и выложить готовый скриптпак?... файл во вложении.
Там только одна строчка в UTF-8, которая крашит на скринах выше. Если ты откроешь в UTF-8, то сможешь прочитать её, если откроешь в Shift-JIS, то она превратится в японскую абракадабру, зато остальные строчки читабельны.
Я заметил, что в шрифте есть кодировка UTF-8 русская и она должна по идее отобразиться.
tpunix-pgftool.rar из твоей темы. Обычной командой 'ttf_pgf font.ttf jpn.pgf' он у меня таким и создается.Хмм, странно, а мне он показался сначала каким-то узконастраиваемым. Я как раз пользовался 2-ым тулзом из той же темы, т.к. я его сам собирал и в батнике весь хелп по командам прописал, там можно выставлять и ширину и высоту и очень гибко настраивать. Правда она делает вроде только ltn0.pgf, поэтому у меня символы Shift-JIS туда по-видимому не добавлялись.
А кстати, ты умеешь пользоваться tpunix-pgftool? :)
Там можно в PGF добавлять только те символы, которые тебе нужны, т.е. можно чисто отсекать все ascii символы, чтобы облегчить вес файла.
FAQ tpunix-pgftool
Сначала создаёшь из TTF полный файл jpn0.pgf обычной командой: ttf_pgf font.ttf jpn0.pgf
Затем дампишь из него список символов следующей прилагающейся тулзой: dump_pgf -c jpn0.pgf > unicode_list.txt
То есть, командой -c ты из файла jpn0.pgf дампишь в текстовик unicode_list.txt список всех символов в 2-байтном виде.
Там первые 2 нуля не считаются в однобайтовой кодировке, удаляешь ненужные строки символов и подсовываешь нужный список для изготовления из TTF только нужного тебе PGF.
А нужный компактный PGF из TTF получаешь следующей командой: ttf_pgf *.ttf jpn0.pgf unicode_list.txt
То есть, помимо стандартной команды, подсовываешь ему отредактированный список символов, которые необходимо включить в сборку.
vBulletin® v3.8.7, Copyright ©2000-2025, vBulletin Solutions, Inc. Перевод: zCarot