ErikPshat, тебя не затруднит всё-таки проверить на реальной PSP модифицированный libfont? Неужели железу PSP пофиг, что путь к disc0:/ в мод. библе записан прямо тупо так в открытом виде, а не как до этого?
Щас попробую всё-таки запилить в образ мод.либфонт и проверить.
Ну а путь складывается по тому адресу в памяти flash0:/font/. В оригинале то место забито нулями специально для этих нужд. А т.к. по тому адресу я уже прописал новый путь, то он уже не затирается. Это можно проверить сдампив память с модифицированным либфонтом.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
riku.kh3, ну собсно проверил, всё работает. Подписанный и зашифрованный кастомный модуль отлично отрабатывает на PSP.
Только я шрифт туда подкинул свой Times New Roman сконверченный в ltn0.pgf - переименованный в jpn0.pgf.
Соответственно игра у меня японская и вместо шрифта я вижу прочерки, отображаются только английские слова и спец-символы типа - !?"
ErikPshat, тогда это объясняет, почему на эмуляторе путь переписывается назад на flash0, и все это китайское мамбо джамбо с написанием своего модуля
Кстати, я не понял, почему вдруг эмулятор использует шрифты из flash0, но так не должно быть. На эмуле так же должен либфонт отрабатывать и так же должен брать шрифт из образа.
Попробуй убрать из эмуля шрифт jpn0.pgf из папки совсем.
А может ты новый модуль не сохранил в образе игры? Или может шрифт туда забыл подкинуть?
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Все, понятно почему на эмуляторах с правильным libfont.prx шрифт не грузится откуда положено. Они попросту не используют libfont.prx вообще, вместо него там в самом эмуляторе грузится рутина. Попробовал заменить libfont.prx на пустышку забитую мусором, и оба эмулятора как ни в чем не бывало запустили игру:
riku.kh3, ну на первых скринах я вижу, что вроде бы грузится disc0:/PSP_GAME/USRDIR/X9DULE/libfont.prx
Там кругом видно, что путь отрабатывает.
И шрифт должен браться оттуда же disc0:/PSP_GAME/USRDIR/X9DULE/jpn0.pgf
Ты посмотри внимательнее в логах, может наряду с другими шрифтами он грузится где-то в конце?
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, на первых то скринах да, видно что 'вроде бы' грузится, но на самом деле эмуль определяет "что" это такое пытается грузится и скипает, перенаправляя на свой код рутины по работе со шрифтами. Логи я внимательно все пересмотрел - disc0:/PSP_GAME/USRDIR/X9DULE/jpn0.pgf не грузится 100%. Да и говорю, пустым файлом заменил libfont.prx в игре, а она все так же как ни в чем не бывало работает и шрифт все так же отображается.
То есть грубо говоря даже если libfont.prx и грузится, эмулятор его поверх своим кодом все-равно перезаписывает. Как то так, в общем.
riku.kh3, ну ладно, тогда значит понятно, что нифига не понятно, почему эмуляторы подсовывают свои шрифты
В общем думаю проблему мы решили, ведь игру планируется запускать на PSP. И в общем всё на ней работает, как положено.
Ну а проблемы со шрифтами при сохранении - это уже из другой оперы.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
riku.kh3, ну ладно, тогда значит понятно, что нифига не понятно, почему эмуляторы подсовывают свои шрифты
В общем думаю проблему мы решили, ведь игру планируется запускать на PSP. И в общем всё на ней работает, как положено.
Да, тут все отлично.
Сообщение от ErikPshat
Ну а проблемы со шрифтами при сохранении - это уже из другой оперы.
Проблем со шрифтами при сохранении не будет, если суметь существующие буковки по ширине уменьшать научиться. Для этого надо скорее всего сам pgf ковырять. А так да, если колхозным путем пойти и перерисовать буквы перекидав их местами и вместо одной из них сделать пробел, то при сохранении будет каша отображаться.. ну и бонусом перенос слов, скорее всего, перестанет работать.
ErikPshat, надпись 'Converted Edition' у тебя на скрине в обычной ascii кодировке с нормальным $20 пробелом, текст для таких системных сообщений берется из самого EBOOT.BIN.
А на втором скрине текст и пробелы в shiftjis 2-байтовой кодировке:
Vot takaya vot kodirovka
В самой игре если использовать в диалогах ascii с обычными $20 пробелами то игра будет крэшится при попытке сохраниться. То есть в идеале бы сократить ширину shiftjis буковок и пробела, чтобы они выглядели как обычно.
Получается нужно как-то Shift-JIS сконвертировать из TTF.
А в TTF можно подкорректировать пробел покороче с помощью редактора шрифтов, дома на компе валяется такой.
Это у Японцев в этой кодировке всегда расстояния такие, чтобы иероглифы не сливались, ну и другие символы языков так же отрисованы.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, с самим TTF я как только не игрался.. ширину уменьшать пробовал, в самой windows и любыми программами где этот шрифт используется как положено буковки уже становятся и shiftjis пробел в два раза меньше как надо.. но после конвертирования в pgf в самой игре совсем все не так.. Пробел как большим был так большим и остается, из ascii буквы если все глифы удалить - интервала вообще она перестает создавать.. а если из shiftjis символа все глифы удалить - в точности все до наоборот..
riku.kh3 добавил 08.05.2014 в 23:20
Сообщение от ErikPshat
Это у Японцев в этой кодировке всегда расстояния такие, чтобы иероглифы не сливались, ну и другие символы языков так же отрисованы.
Скрины которые я выкладывал с русским текстом все в том же shiftjis'е и там никаких интервалов нет. То есть не статическая эта ширина, и должна быть где-то таблица ширины для каждого символа.
Я, когда над переводом ff3 работали, с этими шрифтами намаялся. Правка ttf по ширине ничего не даст. Ttf2pgf штука не идеальная, но это лучшая софтина из тех, что я нашёл. В самом pgf хранится битмап символов и таблица ширин, пожато это всё rle алгоритмом. К сожалению ни одной программы, которая бы умела напрямую править pgf, мне найти не удалось.
Можно попробовать такой костыль: использовать вместо ascii пробела что-то вроде • предварительно исправив этот символ в ttf.
Количество сообщений на форуме далеко не всегда пропорционально умственным способностям человека. >>>Silent Hill: Genesis<<<
Можно попробовать такой костыль: использовать вместо ascii пробела что-то вроде • предварительно исправив этот символ в ttf.
Да, согласен. В переводе можно вместо пробела использовать любой международный символ, например знаки препинания беруться из общего набора международных шрифтов, такие как !?";:*#() и т.п.. Можно взять любой узкий малоиспользуемый знак и через редактор шрифтов TTF зачистить этот символ, либо перекопировать на его место пробел. Затем сконвертировать в PGF.
Но чую я, что там не только пробел используется в качестве служебного символа, могут попасть и любые другие буквы алфавита.
Про Лунар я уже писал ранее, какие буквы используются в качестве служебных.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
lupus, в комплекте с pfgtool помимо основной ttf_pgf.exe, есть еще dump_pgf.exe. Она умеет полную информацию по каждому символу в pgf выводить, в том числе и информацию о длине/ширине. Знающий человек посмотрев исходники dump_pgf, по идее, сможет понять где все это хранится и как изменить.
ErikPshat, как уже говорил: международные символы (ascii) править в TTF не поможет. ascii символы после конвертирования в pgf на экране занимают ровно столько места, сколько сами глифы. Если стереть все глифы, то символ абсолютно 0 пикселей интервала будет занимать и просто пропадет.
riku.kh3 добавил 09.05.2014 в 14:04
Сообщение от ErikPshat
Но чую я, что там не только пробел используется в качестве служебного символа, могут попасть и любые другие буквы алфавита.
Про Лунар я уже писал ранее, какие буквы используются в качестве служебных.
В этом плане тут все еще даже хуже, игра понимает скриптовые комманды в тексте и различные сочетания ascii буковок могут стать триггером комманд.
Последний раз редактировалось riku.kh3; 09.05.2014 в 14:04.
Причина: добавил, подумав
ErikPshat, как уже говорил: международные символы (ascii) править в TTF не поможет. ascii символы после конвертирования в pgf на экране занимают ровно столько места, сколько сами глифы. Если стереть все глифы, то символ абсолютно 0 пикселей интервала будет занимать и просто пропадет.
Ну вот возьмём shift-jis пробелы:
Возьмём для примера кавычки " с которых начинается предложение.
Как видно, после кавычек пробела нет и они занимают маленькое расстояние.
Если мы эти кавычки затрём, чтобы на экране вместо них отображалось пустое место, то получится вполне компактный пробел.
То есть, в переводе нужно писать в кодировке shift-jis, но вместо пробелов ставить кавычки. Либо, если уже перевод осуществлён, через поиск замену можно тупо массово заменить пробелы на кавычки, хоть в тексте хоть в хексе.
Тогда, как видно на скрине - расстояние между буквами нас устраивает и так же будет устраивать пробел (пустые кавычки). А PSP будет думать, что мы ставим кавычки и не будет добавлять 2-ой пробел.
Другое вопрос в том, сможем ли мы, исправив TTF, сконвертировать шрифт в PGF, чтобы он потом мог отображать писанину, сохранённую в shift-jis ?
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Как видно, после кавычек пробела нет и они занимают маленькое расстояние.
Если мы эти кавычки затрём, чтобы на экране вместо них отображалось пустое место, то получится вполне компактный пробел.
Пробела как раз таки и не получается, символ и занимаемое им место пропадут. И даже если получится это реализовать, бонусам перестанет работать перенос слов (с shiftjis пробелом он работает) и в сохранениях будут крокозябры. То есть идеальным решением все-таки было бы уменьшить существующий shiftjis пробел вдвое.
Сообщение от ErikPshat
Другое вопрос в том, сможем ли мы, исправив TTF, сконвертировать шрифт в PGF, чтобы он потом мог отображать писанину, сохранённую в shift-jis ?
С этим проблем нет:
(скрин не самый удачный, т.к. пробелы на нем по прежнему проблемные - $20)
Пробела как раз таки и не получается, символ и занимаемое им место пропадут. И даже если получится это реализовать, бонусам перестанет работать перенос слов (с shiftjis пробелом он работает) и в сохранениях будут крокозябры. То есть идеальным решением все-таки было бы уменьшить существующий shiftjis пробел вдвое.
Не понимаю, как может пропасть занимаемое символом место. Система будет всё равно думать, что символ на том месте есть и никуда он не пропадёт. Ведь код символа останется тем же, но не такой код пробела 0x20, а уже тот самый родной код символа, кавычек например.
И с чего перестанет работать перенос? Неужели для переноса ты используешь символ пробела?
Скинь плиз уже готовые ресурсы перевода, с самого начала игры, чтобы я мог потестить, а не переводить всё с начала...куда-нибудь в личку к примеру.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram