Ковырнул тут на досуге игру. Задался интересным вопросом.
Суть такая. Игра использует системный шрифт ltn3.pgf и ltn5.pgf (точнее две разных игры.)
Есть ли возможность заменить этот шрифт через плагин. (не трогая flash0)?
В общем твой шрифт довольно кароший, вот однобайтная кодировка японская Shift-JIS, на которую конвертятся узкие шрифты A1-DF, которые на той странице вычислили. Думаю с ней можно что-то придумать полезного...
Так смысла нет никакого A1-DF редактировать вообще. Игра же их глифы не ипользует а сразу перенаправляет в шрифте на нужные символы. То есть на месте $C0 (タ) можно что угодно нарисовать, выводить на экран он все-равно вместо него будет $82BD (た). К особенностям шрифта это отношения не имеет, это специфично для конкретно этой игры.
Сообщение от ErikPshat
Можешь портировать обратно и выложить готовый скриптпак?... файл во вложении.
Там только одна строчка в UTF-8, которая крашит на скринах выше. Если ты откроешь в UTF-8, то сможешь прочитать её, если откроешь в Shift-JIS, то она превратится в японскую абракадабру, зато остальные строчки читабельны.
В том то и дело, что функция экспортирования текста в таком виде практической пользы не несет никакой. Так как назад его из такого файла не импортировать. Я вручную конечно перенес эту строку в виде такого же нечитаемого мусора. На экране вот что:
Максимум что можно сделать, это в дампе памяти убедиться что эта каша и есть та же utf8.
Так смысла нет никакого A1-DF редактировать вообще.
В смысле? Вот же на предыдущей странице, в этом посте я дампил память https://www.pspx.ru/forum/showpost.ph...&postcount=163
Там в памяти видно в хексе какие символы выводит на экран PSP. Как раз она выводит символы из этого диапазона.
Тут ситуация наоборот, конвертер пишет в текстовике $82BD, а PSP вместо него выводит символ $C0.
Мы будем писать $82BD, а на экране видеть русскую "А" например. Тем более это будет экономить память однобайтными символами.
Сообщение от riku.kh3
В том то и дело, что функция экспортирования текста в таком виде практической пользы не несет никакой. Так как назад его из такого файла не импортировать. Я вручную конечно перенес эту строку в виде такого же нечитаемого мусора. На экране вот что:
Эмм, я немного попутал. В шрифте Shift-JIS нету UTF-8, поэтому на экране видим не то.
В шрифте Shift-JIS русский алфавит в UTF-16BE - это символы 0401-0451, я тебе не то скормил вот сделал правильно, потести плиз.
Русский алфавит должен вывестись 100%, если конвертер его не запортит.
А UTF-8 = D081-D18F
Эмм, в смысле, как не импортировать? Он что не принимает файл назад? Вручную мусор копи-пасте скорее всего результата недаст, это же всего лишь видимый мусор, а не код символов.
Ты же как-то символ пробела менял на что угодно, например 8140 или 814B. Как ты это делал?
Нужно короче в ту строку забить вот такой набор символов:
Кстати ещё, хорошо что ты мне напомнил.
Сдампил unicode_list.txt из оригинального jpn0.pgf из прошивки )) там charmap table: 9778 символов. И игра ведь по-умолчанию использует этот набор символов.
И сдампил твой jpn0.pgf, у него charmap table: 16688 символов вот поэтому он весит больше 2 мегов.
Применил к твоему 8-мегабайтному шрифту unicode_list.txt от оригинала - получился jpn0.pgf 1.3Mb
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
В смысле? Вот же на предыдущей странице, в этом посте я дампил память https://www.pspx.ru/forum/showpost.ph...&postcount=163
Там в памяти видно в хексе какие символы выводит на экран PSP. Как раз она выводит символы из этого диапазона.
Тут ситуация наоборот, конвертер пишет в текстовике $82BD, а PSP вместо него выводит символ $C0.
Мы будем писать $82BD, а на экране видеть русскую "А" например. Тем более это будет экономить память однобайтными символами.
Нет, в точности все до наоборот. Я понимаю что в памяти там $C0 символ, так и должно быть. Но на экран выводится именно $82BD вместо него. В этом и есть смысл - экономия места в памяти для набора наиболее используемых символов. И если $82BD написать, на экран тоже он же - $82BD будет выводиться. Не знаю как еще мне это доказать.. разве что забить одну фразу единственными символами $C0, и в шрифте править глифы у $82BD.
Сообщение от ErikPshat
Эмм, в смысле, как не импортировать? Он что не принимает файл назад? Вручную мусор копи-пасте скорее всего результата недаст, это же всего лишь видимый мусор, а не код символов.
Нет такой функции в проге.
Сообщение от ErikPshat
Ты же как-то символ пробела менял на что угодно, например 8140 или 814B. Как ты это делал?
shiftjis самостоятельная, независимая от других, кодировка. 814B как и те русские буквы входят в её диапазон по стандарту. Я просто вбиваю нужный мне 814B символ и он отображается как и положено по shiftjis стандарту, т.к. windows у меня в японском окружении и shiftjis для него дефолтная кодировка для отображения. utf16 и прочие винда в расчет даже не берет, т.к. еще раз говорю, shiftjis полноценная и независимая от utf16 и прочих (то что символы там не пересекаются - абсолютно ни о чем не говорит).
В любом случае, вручную опять эту фразу попробовал перенести, выглядит так:
Нормально она перенеслась или нет думаю можно в дампе памяти посмотреть.
ErikPshat, до меня сейчас дошло, что ты наверное думал что раз:
$C0 --> $82BD
То и в обратную сторону должно быть: $82BD --> $C0
Но нет, конвертирование это только в одну сторону работает и будет выводиться:
$82BD --> $82BD
Думаю, вообще можно из шрифта этот A6-EF диапазон удалить полностью и ничего не будет, т.к. игра ни при каких обстоятельствах на экран не может выводить его выводить.
riku.kh3, блин ты чо в японии живёшь ))) что у тебя за дефолтный виндус весь в shiftjis ))) и нифига она не полноценная, т.к. в основном состоит из японско-китайского алфавита.
В общем ты наверное прав, т.к. в shiftjis, например твоём TTF я вижу только одну русскую раскладку и она находится именно в UTF-16BE, ну ты и сам видел в шрифте коды русских символов. Это так же можно проверить, написав в текстовом редакторе русский алфавит, сохранить его в кодировке UTF-16BE и увидеть в хексе тот же самый код.
А т.к. ты из неё сделал jpn0.pgf, то эта раскладка там и осталась на своём месте.
Поэтому получается, что PSP выводит на экран русский текст из этой кодировки UTF-16BE, потому что в шрифте больше нет других русских букв это получается ты пишешь и видишь на экране одно, а также русские символы я вижу в дампе в пределах 8458 и т.п., а PSP выводит на экран шрифт из кодировки UTF-16BE.
Хотя на компе в текстовом редакторе, при переключении в кодировку shiftjis, почему-то я вижу читабельный текст на русском с теми же кодами 8458 и т.п. Видимо на компе лежит шрифт какой-то расширенный. Либо я ваще ничего не понимаю. Ну вот смотрю всякие шрифты и вижу в 8458 847E 8485 только японские иероглифы, а в текстовом редакторе при переключении в shiftjis вижу всё на русском.
И ещё, я же каждый раз дамплю в памяти тексты, а они ведь складываются в EBOOT.BIN (ELF) т.е. этот забитый вначале нулями эльф складывается в нормальный файл в памяти, об этом отвечу в другой теме как раз по теме
Сообщение от riku.kh3
Думаю, вообще можно из шрифта этот A6-EF диапазон удалить полностью и ничего не будет, т.к. игра ни при каких обстоятельствах на экран не может выводить его выводить.
А вот ты как раз и проверь это, потом я сдамплю память и посмотрим, что будет выводить вместо однобайтов.
Сообщение от riku.kh3
$C0 --> $82BD
Нет, я думал наоборот. Ведь наоборот $82BD конвертится в $C0.
Если в памяти я вижу $C0, то думаю, что я вижу именно то, что этот код обозначает. Хотя фиг его знает.
Я пытаюсь переместить шрифт в японскую область, чтобы не было крашей при сохранении. Ведь на японских символах крахов не происходит.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Поэтому получается, что PSP выводит на экран русский текст из этой кодировки UTF-16BE, потому что в шрифте больше нет других русских букв это получается ты пишешь и видишь на экране одно, а также русские символы я вижу в дампе в пределах 8458 и т.п., а PSP выводит на экран шрифт из кодировки UTF-16BE.
Я вот и думаю, что может libfont или какой другой модуль переводит shiftjis в UTF16 (или что другое в юникоде) прежде чем обращаться к PGF файлу с шрифтом. Т.к. помоему все-таки в PGF, как и в TTF, никаких shiftjis кодов у символов нет, только UTF16 (или юникод там, хз). Это как раз может объяснить крэши при использовании в тексте русских букв в shifjis.
riku.kh3, я думаю, что коды символов из TTF переезжают в PGF один в один, потому что когда я добавлял шрифт однобайтный в TTF и компилировал в ltn0.pgf, то появлялся русский алфавит именно в той кодировке 1251, а до этого там была абракадабра.
А shiftjis по сути чисто японская кодировка, чтобы поместить туда кучу японских символов, которых там больше сотни или фиг знает сколько дофига имеется. В русском языке-то всего 33 коровы )) Для этого и создавался шрифт shiftjis. Ну и естесственно они туда добавили и другие национальные шрифты, и для большей совместимости они их оставили на тех же позициях, как в других кодировках, например UTF-16 для русского или UTF-7 для чисто английского, состоящего из первых 127 байт (0х7F).
Я же тебе говорю, что ты слишком всё усложняешь. Ты почему-то считаешь, что Shift-JIS - это какой-то особый внеземной shiftjis закодированный алгоритм, как я смотрю на твои изречения по этому поводу
Ну добавь туда русский алфавит в win-1251 область или в UTF-8 область - это будет тот же самый shiftjis, только "расширенный".
А LIBFONT тут явно вмешивается и видимо корректирует по-своему. Вот почему-то странно, ведь в shiftjis кодах 8458 847E 8485 я вижу японские или китайские символы, но он не их отображает, а перенаправляет на 0410 и т.п. в UTF-16 русскую.
Сообщение от riku.kh3
Это как раз может объяснить крэши при использовании в тексте русских букв в shifjis.
Ну так вот, чтобы не было крешей, нужно переносить алфавит в используемую японскую область. Тем более с пробелом проблему решили.
В шрифте это сделать не сложно. Только вот как писать текст, ведь его дофига?
Можно конечно поставить перед собой таблицу смещений, какой русской букве соответствует японский символ и писать японскими символами, а потом на экране видеть русский текст. Но с такими объёмами нужно конвертер иметь и он есть, только его нужно скомпилировать.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Ну так вот, чтобы не было крешей, нужно переносить алфавит в используемую японскую область. Тем более с пробелом проблему решили.
В шрифте это сделать не сложно. Только вот как писать текст, ведь его дофига?
Можно конечно поставить перед собой таблицу смещений, какой русской букве соответствует японский символ и писать японскими символами, а потом на экране видеть русский текст. Но с такими объёмами нужно конвертер иметь и он есть, только его нужно скомпилировать.
Так сначала попробуй проблему 'фиксированной' ширины каждой такой перерисованной буквы решить. Иначе и смотрится уродливо, и текста вмещается как кот наплакал.
И, да, если A6-EF из шрифта полностью вычистить на игру это никак не влияет.
Так сначала попробуй проблему 'фиксированной' ширины каждой такой перерисованной буквы решить. Иначе и смотрится уродливо, и текста вмещается как кот наплакал.
Да нет там фиксированной ширины. Всё зависит, как ты сам её выставишь в TTF. Вернее достаточно просто копи-пасте сделать русских глифов в японскую раскладку, которую игра использует для вывода японских символов. Все значения ширины так же переедут и там не надо будет что-то вручную перерисовывать.
Ты действительно считаешь, что ширина КОДА японского символа зависит от его кода, а не от символа?
Не сравнивай широкий пробел 8140, который никак нельзя было сделать уже - это системный код и он вообще отсутствует в shiftjis шрифтах, и поэтому не имеет глифов.
Вообщем нужно просто взять и перенести алфавит. А вот как писать? Ну я могу написать через хекс кодами предложение японскими символами, где будут стоять русские. Только как написать 1000 таких предложений?
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Ты действительно считаешь, что ширина КОДА японского символа зависит от его кода, а не от символа?
Не сравнивай широкий пробел 8140, который никак нельзя было сделать уже - это системный код и он вообще отсутствует в shiftjis шрифтах, и поэтому не имеет глифов.
Я считаю, что в PGF есть таблица ширины/высоты в пикселях для каждого символа. Я прыгал вокруг TTF очень долго пытаясь ширину хоть одного символа уменьшить... После конвертирования в PGF получаешь по ширине совсем не то, что в TTF было. Что хочешь там перенаправляй-перерисовывай, значения в TTF меняй.. Символ по ширине не изменится ни на пиксель. Ты увидишь на экране свой глиф нарисованный/перенаправленный нетронутый, каким бы мелким его не сделал, и хренову кучу пустого интервала до следующего символа.
riku.kh3, слушай, может нам совсем избавиться от shiftjis и писать в любой другой кодировке и перейти на обычный ltn0.pgf, переименовывая его.
Может есть какие-нибудь другие европейские игры, где используется обычный однобайтный шрифт и присутствует нормальный libfont.prx?
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, да наврятли там какая-то разница между libfont из разных игр есть, в эмуляторе он вообще не используется потому что. Да и из однобайтного диапазона там A1-DF физически не получится использовать, т.к. движок самой игры перенаправляет с них.. а использование латиницы 41-7A приводит к тем же крэшам при сейве.
ErikPshat, да затык полный, какое там сам справишься)) Давно твержу что не перенести русские буквы в другую область - размер не изменить никак. Квадратами 17x19 пикселей он отображает каждый символ и все тут))
С TTF играться бесполезно, и с PGF, судя по всему - тоже. Да и вообще вся эта затея с переносом букв мутная. Расходимся, в общем, с чувством выполненного долга. Тут работа для того, кто сможет отдебажить крэши и их причину устранить (сомневаюсь, что тут такие найдутся).
Ну так что мы имеем...
Пробел заменили на японский символ - креши продолжаются.
Но символы русские зато видим в хорошем читабельном виде.
Вывод - креши происходят из-за текстовых символов, значит пробел здесь не при чём.
Вот такие символы генерит RLPAKTOOL при написании текста:
Значит нужно уходить от этих кодов символов. Какие-то из них по-видимому используются в служебном диапазоне игры.
В японском диапазоне они широкие. Но ведь есть ещё и другие узкие диапазоны, даже например в греческом языке.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Вывод - креши происходят из-за текстовых символов, значит пробел здесь не при чём.
Из-за одного только пробела тоже иногда крэши происходят... но не суть важно.
Сообщение от ErikPshat
В японском диапазоне они широкие. Но ведь есть ещё и другие узкие диапазоны, даже например в греческом языке.
Да нет там почти ничего узкого, давно все пересмотрел. 2-3 символа узких нашлись от силы. А нам надо на два регистра русского алфавита - 66 таких символов.
Пробела как раз таки и не получается, символ и занимаемое им место пропадут. И даже если получится это реализовать, бонусам перестанет работать перенос слов (с shiftjis пробелом он работает) и в сохранениях будут крокозябры. То есть идеальным решением все-таки было бы уменьшить существующий shiftjis пробел вдвое.
Ну вот здесь и ещё много-много раз ты говорил насчёт пробела, что всё туфта и ничего не получается. Однако проблема решилась элементарно, с того момента, когда начали тестировать и ты сам это дело решил.
То же самое со шрифтами. Ты хоть сам пробовал перемещать шрифты в однобайтовый диапазон A1-FF? Или это опять только на словах, твои теоретические домыслы?
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Ну вот здесь и ещё много-много раз ты говорил насчёт пробела, что всё туфта и ничего не получается. Однако проблема решилась элементарно, с того момента, когда начали тестировать и ты сам это дело решил.
Что решилось то? Один из тех немногих символов нашел, что покороче, стер и сделал вместо пробела - вот и всё.
Сообщение от ErikPshat
То же самое со шрифтами. Ты хоть сам пробовал перемещать шрифты в однобайтовый диапазон A1-FF? Или это опять только на словах, твои теоретические домыслы?
Пробовал, писал же, не используются они вообще игрой. Перенаправляются! Так сложно ア от あ отличить? Видел же сам что в дампе и что на экран выводится.
Ну так решилось же. Теперь 100-пудово из-за него креш не идёт. Перенос работает, правда иногда полслова переносится или даже одна буква ))) но это совсем редко.
Понятно, видел и проверил, забил весь шрифт русским алфавитом, буквы стали меньше, а их ширина осталась прежней.
Ладно, закончу свой релиз, осталась половина. И снова пожалуй займусь, ещё в запасе есть IDA PRO. Рассчитываю найти ширину букв. Ну и есть другие варианты, ведь европейские игры не страдают такой фигнёй, а в чём разница? в либфонте? в PGF?
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram