Вложений: 2
riku.kh3, нет, Shift-JIS шрифт очень большой. Он содержит символы английские, русские, греческие, японские катана и фиг поймёшь что там у них. И все национальные символы имеют свой уникальный код, как задумано в Shift-JIS. Некоторые коды совпадают с UTF-8, но это так же зависит от разработчика шрифта. Разработчик мог бы добавить поддержку UTF-8, как и однобайтный 1251 русский. Английский-то по-любому почти всегда идёт первым в однобайтной области. И разработчик шрифта может сам переставлять шрифты туда, куда ему это выгодно, например, если в игре не используется русский алфавит, то он может туда забить китайские символы, либо просто использовать эти коды в качестве управляющих символов.
Почему мы видим крякозяблики вместо нормального текста? Потому что в той кодировке, в которой мы сохраняем текст, вместо необходимых букв находятся сторонние символы, например элементарно досовские символы всяких кирпичиков и уголков, либо китайских или японских иероглифов. Либо вообще там нет ничего, пустое место или совсем нет матрицы шрифтов. Взять однобайтный win1251 на PSP... Win-1251 начинается с 0xC0 по 0xFF. Вот скрин, где коды символов можно увидеть слева и сверху, как в шахматах.
Ранее на том самом месте, где русский алфавит, были как раз досовские символы. А вот так мы видим пронумерованные символы в шрифте TTF. Нумерация символов так же идёт по стандарту. В данном случае виден русский алфавит в кодировке UTF-8 = 0x0401 (буква Ё) до 0451 (маленькая ё - её здесь нет). (картинка кликабельна, читаем там внимательно мой пост по установке) Листаем тот же шрифт к самому низу и видим там ещё один алфавит Windows-1251 = 0x00C0 (буква А) до 0x00FF (маленькая я). Это уже я сам копирнул алфавит в эту область. Поэтому теперь получается, что этот шрифт поддерживает писанину в UTF-8 и Windows-1251: То есть, можно в текстовом редакторе написать текст и сохранить его в UTF-8 и он будет отображать русскую писанину, как положено. Так же, можно сохранить текст через текстовой редактор в Windows-1251 и так же, этот текст будет прекрасно выводится, как положено. Но если посмотреть на текстовые файлы, одного содержания, но в разных кодировках через хекс-редактор, то мы увидим коды символов отличающиеся. В данном случае UTF-8 будет иметь 2-байтные символы на букву, например буква "А" = 0410, то в кодировке 1251 мы увидим код символа "А" = С0 одним байтом. И один и тот же шрифт будет прекрасно отображать обе кодировки. |
Ну так в итоге и получается, что если разработчик игры не стал заморачиваться и добавлять поддержку кучи кодировок (а из двухбайтных тут помимо shiftjis, есть еще и jis, и euc, и utf-16), а только стандартную область shiftjis - то тут и облом. :scratch_one-s_head:
Я имею в виду, тот факт что shiftjis не противоречит другим двухбайтовым кодировкам, не делает ее частью юникода или utf-16. Это отдельный принятый самостоятельный от юникода стандарт. Я даже не знаю как это и проверить вообще.. имеющееся тулза у меня только с shiftjis-текстом работает. |
Вложений: 3
Тэкс, снял дамп памяти оригинального японского диалога.
В дампе всё лишнее удалил, оставил только в 1-ой строке чисто диалог, во 2-ой строке указание на шрифт. Получился такой вот текстовик: Что получается, какие символы использует PSP при выводе японского алфавита?...
|
Цитата:
Но в данном случае ты сам можешь перекидывать символы куда угодно и создать свой кастомный шрифт. Ты сам можешь сделать поддержку всех тысячи кодировок в мире и скомпилировать свой JPN0.PGF. Чем больше ты сделаешь TTF - тем больше будет размер PGF. Если твой TTF будет весить 2 Мб, то и PGF так же потяжелеет. Если ты вырежешь из шрифта TTF неиспользуемые символы, все греческие, японские и китайские, то и PGF твой будет весить копейки. Это ты сам можешь проверить. Поэтому поддержка кодировок зависит теперь только от тебя, потому что ты можешь ложить свой шрифт в образ игры или вместо оригинала в эмуляторе. P.S. Кстати, в Real Life Engine PAK editor я заметил, что можно делать переназначение шрифтов, делать сдвиг смещения. |
ErikPshat, я думаю у тебя сейчас вообще голова кругом пойдет. :D Часть текста записывается однобайтной ascii кодировкой (A1-DD) и движок игры 'конвертирует' эти символы на лету в двухбайтные:
|
riku.kh3, а если поточнее разложить по байтам? (скриншот хекса навиду)
Цитата:
|
Это:
Код:
「部活ニモ入ラず無駄ニ鍛エ上げラレタ筋肉ヲここぞトばカリニ見セツケテヤがル…」 Движок игры превращает и выводит на экран в это: Код:
「部活にも入らず無駄に鍛え上げられた筋肉をここぞとばかりに見せつけてやがる…」 |
Цитата:
Кстати, текст из конвертера можно сохранять в текстовые файлы Shift-JIS и потом проверить в хексе? У меня просто конвертер не запускается, там что-то с 4-ой версией фреймворка у меня не так. |
Вложений: 1
Если ты про RLPAKTOOL, то там уже встроена эта рутина по конвертированию необходимых ascii символов в то, что на psp фактически выводится на экран. Тут экспортировал текст в shiftjis, правда там мусора много.
|
riku.kh3, вообщем вывел я все коды символов. Догнал, что текстовой редактор показывает количество байт на символ. По этой функции и определил все коды в хексе.
В твоём текстовике нашёл ту же фразу и сосчитал так же все коды букв. Дописал их в тот же пост: https://www.pspx.ru/forum/showpost.ph...&postcount=163 Кроче, видно что во что конвертируется. По ходу конвертер все символы пишет исключительно в 2-байтовой кодировке. А вот PSP в память складывает узкие символы из 1-байтовой кодировки, а широкие символы оставляет те же 2-байтные. |
ErikPshat, да все так. Суть всей этой кутерьмы в том, что часть наиболее часто используемых символов слоговой азбуки в игровом скрипте заменили на однобайтовые, причем реализовано это на движке игры (в ps2 и ps3 версии этой игры все так же, и сам шрифт там другой) и они выводятся на экран в другом виде. Это помогает сэкономить несколько байт на каждой фразе (там кстати физический лимит поинтера 255 байт на каждую фразу). Если проводить аналогию на привычных вещах, то автоконвертер транслита на русский.. что-то в подобном духе.
Но я все-таки не уверен что это причина крэшей, т.к. русский текст все-таки отображается на экране как положено.. проблема только при попытке сейва происходит. По сути, можно взять и нарисовать русские буковки на другое безопасное место shiftjis'а вместо ненужных символов.. но, опять же, все сводится к ковырянию PGF формата в попытаках найти таблицу длины и ширины каждого символа в пикселях. |
riku.kh3, я думаю, что можно перевод сохранить в Win-1251 и шрифт использовать обычный свой или переименовать ltn0.pgf в jpn0.pgf. И должно всё выводится.
Думаю крэш в сохранении происходит не из-за шрифтов, т.к. скорее всего в перед и после текстовых диалогов должен стоять поинтер на то, что это именно текстовая секция. Поэтому не должна быть мешанина со служебным кодом. Скорее всего присутствует баг в самом конвертере. Ведь программный код и текст находятся в одном файле. Если делать перевод и пытаться сохранить текст вместе с программным кодом в какой-либо кодировке, то конечно программный код тоже перекодируется в другую кодировку. Поэтому можно только конвертировать текстовую секцию, но программный код трогать нельзя. А я чую, что там в тексте как раз присутствуют программные коды, например видел скобки {}, доллары $, буквы S, прямо посреди текста. Дело в том, что даже если ты видишь на экране те же символы, то даже при перекодировке из shiftjis в тот же самый shiftjis, ты будешь на экране видеть всё те же символы. А на самом деле, в хексе, ты увидишь уже вместо программного кода уже другие цифры, хотя в текстовике для твоих глаз будут отображаться всё те же скобки {}, доллары $, буквы S. Так что нужно проконтролировать этот момент. Цитата:
И вообще можно удалить все остальные шрифты, тогда твой PGF будет весить всего 128 байт ))) А сейчас я смотрю твой шрифт, так он весит почти мегабайт, зачем столько всего в нём. Цитата:
|
ErikPshat, RLPAKTOOL очень продуманно устроен. Этот нюанс с конвертированием японских ascii символов, во-первых, там внедрен исключительно только для отображения: чтобы было удобно читать когда переводишь (то есть в одну сторону), и, во-вторых, только для определенных символов, а не на все подряд. То есть он никак не может тут вредить.
Или может ты посмотрел исходники и увидел там код конвертирования в shiftjis? Он там нужен был автору только для конвертирования своего английского текста.. да, он затрагивает сервисные комманды в тексте и может создавать проблемы... НО! эта фича полностью отключается одной галочкой, и я ей попросту никогда не пользовался. Я просто сразу ввожу нужный мне текст в shiftjis без помощи каких-либо конвертеров. То есть проблема крэшей все-равно так и не раскрыта. riku.kh3 добавил 13.05.2014 в 22:51 Цитата:
|
Цитата:
Обрати внимание на скрин выше, там на скрине видно окошечко под названием Gliph Properties и в этом окошечке задаются все параметры шрифта. Так же, у шрифта не может быть строго закреплённой ширины и высоты, там указывается от и до. Всё аналогично, как в любом другом шрифте, пусть это shift-jis, пусть utf-8, от названия суть не меняется. Другое дело, как ты будешь портировать буквы в тексте, менять их код? В программе для этого есть какие-то кнопочки? Хорошо, если в проге можно только видеть текст наглядно, но на самом деле, чтобы буквы имели другой, необходимый тебе код. Никак не пойму, почему прога у меня на XP SP3 не запускается. |
Цитата:
Цитата:
Приложил модифицированный скрипт, там только самая первая фраза заменена на ту, что в 100% вызывает крэш. Если есть желание сдампить память и поизучать что же с ней не так - пожалуйста. |
Кстати, дай мне нормальный шрифт TTF, который ты собираешься использовать. А то тот, что у тебя в архиве, какой-то по-моему кривой. Или его использовать?
И это, есть возможность вытащить расжатый скриптпак? |
Цитата:
Цитата:
|
riku.kh3, ладно, нужно переварить все раскопки и размышления, и ещё поужинать ))). Сегодня ночью думаю потренируюсь со шрифтами и может что-нибудь полезного получится...
Ага, насчёт ширины букв в TTF я соврал. Их же конвертер регулирует TTF2PGF. И кстати, когда я конвертировал свой шрифт обычный Times New Roman, то на PSP в диалогах он выглядел маленьким, наклонным и узким. Скрин на предыдущих страницах, правда без русского и японского алфавита. Цитата:
Да там всё заменено и повырезано (Replased, Inserted and Deleted) начиная сразу с 4-го программного байта... Скрин |
Вложений: 1
Цитата:
Одну букву так просто не изменить, т.к. там некий хитрый binary invert применяется к тексту. Более наглядный пример для сравнения сделал. Здесь два скрипта: в обоих изменена только первая фраза, один скрипт крэшится на сейве, другой нет. Длина в байтах у фраз одинаковая. |
Цитата:
Кстати крэша при сохранении не заметил. Щас потестю эти 2 дампа... |
Текущее время: 20:36. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.