riku.kh3, в шапке пример не совсем примитивный. Там самый обычный PRX, как и все нормальные PRX-ы. EBOOT.BIN - это так же файл PRX, в распакованном виде ELF. Просто видимо в этой игре разрабы нахитрили. А может они все такие на UMD.
В общем я же дампил тексты из памяти. Так вот, эти тексты складываются в самый конец этого EBOOT.BIN эльфа. И сам файл EBOOT.BIN складывается в памяти в рабочий вид, он же состоит в основном из рабочего программного кода, только в конец складывает результаты работы по ходу продвижения игры.
Я подглядел, как он складывается и могу дать тебе разгадку явления ))
Берёшь свой декриптованный файл EBOOT.BIN
От позиции 0x18 до позиции 0x1018 (ровно 0x1000) удаляешь всю эту область.
Получаешь готовый рабочий файл и можешь его прогонять через prxTool.
В позиции 0x225E60 файл заканчивается, а в дампе туда приклеивается рабочая часть игры.
Если откроешь дамп в текстовом редакторе в кодировке Shift-JIS, то почти в самом конце увидишь текст, на момент которого был снят дамп.
Сам дамп памяти и готовый EBOOT.BIN приаттачиваю.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, да, prxtool теперь хоть и разбирает, но 'data ref' для этих фраз вообще не находит. Вот например одна из фраз в EBOOT.BIN декриптованом 1ECF7C-1ECFAB (в LITBIS дампе 1EBF7C-1EBFAB). Как ее хотя бы на байт вперед или назад сместить? Ничего что бы на ее начало указывало не находится, как в примере из шапки.
riku.kh3, а у меня PRXTool теперь с этим файлом вообще не работает ))) Так что видимо что-то не так с ибутом, это не выход.
Смещение узнаётся и без PRXTool-а. Нужно адрес позиции вбить в поиск и он выведет на то смещение. Но файл у нас получился не верный, поэтому это ни к чему не приведёт. Думаю нужно брать оригинальный декриптованный файл и с ним работать. Там заголовок не 0x60, как обычно, а 0x1018, поэтому его нужно отнимать.
В оригинале думаю это позиция текста 0x1EDF70. И там нет указателей на текст. Скорее всего указатели в скриптпаке или их нет совсем между текстами. Они могут быть на начало каждой группы текстовых диалогов.
Я там вижу, что каждый диалог начинается с 8175 и заканчивается 8176.
Затем каждый диалог просто отделяется 2-умя нулями 0000 - это и есть цепная реакция между диалогами, их отделяющая.
А уже между группами диалогов идёт 4 нулевых байта 00000000.
Таким образом они по-очереди наверное и раскладываются без всяких указателей.
Получается ты можешь двигать смещения внутри всех групп диалогов, но главное не сдвигать программный код до и после всех диалогов.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, там это рандомные фразы, которые персонажи говорят в мини-игре с бейсболом. Между ними последовательности точно нет, поэтому должны быть указатели на их начало.. И это точно не в скриптпаке.
Сообщение от ErikPshat
Я там вижу, что каждый диалог начинается с 8175 и заканчивается 8176.
Затем каждый диалог просто отделяется 2-умя нулями 0000 - это и есть цепная реакция между диалогами, их отделяющая.
Не, 8175 - это открывающаяся скобочка диалога (что-то вроде русских ковычек) и 8176 закрывающаяся скобочка. Свободные нули можно свободно забивать своим текстом, и он отображается. Главное чтобы между фразами один байт '00' был разделительный. То есть, в этом плане, на пример из шапки похоже.
Главное чтобы между фразами один байт '00' был разделительный.
Ну вот это главное. Они просто перестраховались и сделали 2 нулевых байта.
А разве нельзя один диалог, чтобы залазил на другой, но между ними оставлять разделяющий байт. Просто один диалог будет длиннее, а другой короче. То есть, когда поинтер следующего диалога сдвигается от своего начала.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, только что проверил в наглую сдвинув этот самый разделяющий '00'. Фраза которая увеличилась отображается нормально ровно до '00'. Но следующая за ней фраза, за счет которой увеличил предыдущую, попросту начинается с конца предыдущей фразы пока не упирается в '00'. То есть вторая фраза испортилась и отображает лишь маленький кусочек конца предыдущей фразы.
riku.kh3, получается поинтеры на каждую фразу где-то есть. Нужно поискать ))) они могут быть и в каком-нибудь отдельном куске.
Собсно поинтеры обычно заметно, их видно по стройному ряду кодов, плавно увеличивающихся. Обычно идёт 4 байта смещения и следом 4 служебных байта.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram