Разработка и ромхакинг > Ромхакинг и программирование

[3DS] Luigi Mansion

(1/2) > >>

.:SapiK:.:
Всем привет. Решил попробовать свои силы в хаке и переводе данной игры, ресурсы нашел, текст лежит в открытом виде, файл со шрифтом так же найден, но не могу его правильно отобразить и соответственно экспортировать. Может у знающих людей найдется минутка глянуть, подсказать. Заранее благодарен.





Zetper:
А как полностью называется программа который ты просматриваешь картинку на первом фото ?

.:SapiK:.:
Zetper, вот https://github.com/IcySon55/Kuriimu тулкит в его составе утилита kukki.

Сейчас нашел в файле шрифта русские буквы...  0_0

lupus:
Осталось посмотреть немецкий или ещё какой текст и выяснить, какие коды используются для расширенной латиницы и посчитать, какие для кириллицы.
Чисто теоретически, это вполне может быть UTF.
Ну и с поинтерами разобраться.
Попробуй программу autodump и автоматический поиск поинтеров.
http://coreline.su/#soft/

.:SapiK:.:
lupus, Спасибо большое, в игре действительно юникод, русские символы занимают в два раза больше места. Разбираюсь с Autodump, вот что выдает после поиска, текст находится в каждой четвертой строке, можно ли как-то автоматизировать его выбор или только руками проставлять?

lupus:
Судя по приложенному скрину, поинтеры распознались неверно.
Выложи сюда лангпак, посмотрю, что с ним можно сделать.

.:SapiK:.:
lupus, спасибо.

lupus:
.:SapiK:., завтра гляну.

lupus:
Глянул я твой лангпак. К сожалению, автодамп его не переварил, хотя формат хранения текста довольно простой.
Текст начинается с 0xe40c, поинтеры на него лежат в интервале 0x5bb4-0xe404. Сами поинтеры 4 байта с интервалом 0x10.
Если какие-то знания в ромхакинге у тебя есть, то этого +/- должно хватить, чтобы извлечь текст.
Как вариант, можно создать проект для круптара, но для этого придутся составить таблицу всех используемых символов и управляющих команд. Ну, или ловить MetLob'а и просить написать плагин к автодампу для работы с текстом в твоей игре.
Очень "грязный" дамп текста во вложении.

Upd:
Ещё не сказал, например последовательность 0x7F00080000000E000000 означает, что в этом месте нужно показать иконку <домик> (строка "Press <домик> to return to HOME Menu"
0x7F000800000001000000 - скорее всего <кнопка Start>
Строка заканчивается на 0x7f или 0x7f00. И, скорее всего есть какое-то выравнивание строк по адресам, т.к. разное количество 0x00 между строками.

.:SapiK:.:
lupus, спасибо за дамп текста, адреса поинтеров, потихоньку перевожу дамп, попутно пытаюсь освоить круптар 7. Проект создал, указал адреса текста, поинтеров, таблицы, но все же текст выводиться не корректно, буду разбираться. Почему-то съедается первый символ в каждой строке. Еще раз спасибо.

lupus:
Помог, чем смог.

MetLob:

--- Цитата: lupus от 21 Ноябрь 2020, 14:40:29 ---Ну, или ловить MetLob'а и просить написать плагин к автодампу для работы с текстом в твоей игре.
Очень "грязный" дамп текста во вложении.

--- Конец цитаты ---

Я, видимо, сам поймался...

Вот маленький ликбез к созданию проекта АвтоДампа, если поинтеры содержат размер строки.

Сначала настраиваем тип поинтеров:


Здесь таблица поинтеров начинается с 0x5BAC. Размер элемента таблицы с указателем = 16.
Сначала идут номер сообщения (4 байта), затем неизвестные 4 байта, затем оффсет (абсолютный), затем размер данных сообщения.
Поэтому выставляем параметры так:


Затем открываем файл, выбирая Дефолтный плагин. Обязательно открываем диалог с выбором указателей.
Автоматический поиск указателей ищет поинтеры (с сопутствующей инфой), размером в 16 байт. Ищет он с 0, 16, 32 и т.д., а наши указатели начинаются с позиции, кратной 12 (x5BAC), следовательно внизу, как на скрине, необзходимо проставить 12 (нажать ентер).


После этого АД автоматически найдет область с указателями. Всегда нужно проверять, верно ли он нашел, но для этого файла он справился.

После открытия файла, как уже было замечено, текст перемешан с множеством служебных кодов.
Каждый код начинается с байта 7F.
Затем у каждого кода есть продолжение: собственно код команды (2 байта):
0000 - окончание сообщения (очистка экрана)
0100 - перенос
0200 - ожидание нажатия кнопки
0800 - различные кнопки
0E00 - неизвестный мне (используется в строке Vs. <код>)
0F00 - число
1100 - переход на другое сообщение
1500 - смена цвета
1900 - кнопки L/R

Это все основные команды. Но у некоторых команд есть и параметры (4 байтовые значения):
0800: 01000000 - кнопка A
0800: 02000000 - кнопка B
0800: 03000000 - кнопка X
0800: 04000000 - кнопка Y
0800: 05000000 - кнопка ←
0800: 06000000 - кнопка →
0800: 0C000000 - Circle PAD
0800: 0D000000 - START
0800: 0E000000 - HOME
1900: 07000000 05000000 - кнопка L
1900: 08000000 06000000 - кнопка R

0F00: 00000000 - количество призраков
0F00: 01000000 - количество золота

1500: 01000000 - GREEN
1500: 02000000 - RED
1500: 03000000 - YELOW
1500: FFFFFFFF - WHITE

Необходимо создать таблицу декодирования (как вставлять, есть в документации)
Но вот тут есть проблемки формата, а именно в дурацком выравнивании:
1) Сам байт начала команды (7F) расположен в любом месте (без выравнивания)
2) Каждый КОД команды выравнивается по своему размеру: 2.
3) Каждый ПАРАМЕТР команды выравнивается по своему размеру: 4.

Отсюда получаем, что после 7F может идти 1 байт нуля, если 7F стоит на ЧЕТНОМ месте,
а после КОДА команды - иногда добавляется 2 нулевых байта, чтобы параметры начинались с позиции, кратной 4.

Я создал такую вот таблицу декодирования (в качестве переноса в АД проставил 0100):

--- Код: ---7F0000=<END>
7F00=<#0>
7F=<#>
0200=<BTN>
080001000000=<A>
0800000001000000=<0\A>
080002000000=<B>
0800000002000000=<0\B>
080003000000=<X>
0800000003000000=<0\X>
080004000000=<Y>
0800000004000000=<0\Y>
080005000000=<←>
0800000005000000=<0\←>
080006000000=<→>
0800000006000000=<0\→>
08000C000000=<CPAD>
080000000C000000=<0\CPAD>
08000D000000=<START>
080000000D000000=<0\START>
08000E000000=<HOME>
080000000E000000=<0\HOME>
19000700000005000000=<L>
190000000700000005000000=<0\L>
19000800000006000000=<R>
190000000800000006000000=<0\R>

0E0000000000=<UNK>
0F0000000000=<GHOSTS>
0F00000000000000=<0\GHOSTS>
0F0001000000=<GOLDS>
0F00000001000000=<0\GOLDS>

1100,2=<GOTO>

150001000000=<GREEN>
1500000001000000=<0\GREEN>
150002000000=<RED>
1500000002000000=<0\RED>
150003000000=<YELOW>
1500000003000000=<0\YELOW>
1500FFFFFFFF=<WHITE>
15000000FFFFFFFF=<0\WHITE>

--- Конец кода ---

В этой таблице я сделал по 2 команды на 1 (с добавочными нулями и без):
Например, <#> в тексте будет означать 7F, а <#0> - 7F00.
<0\HOME> будет означать, что перед параметром команды 0800 будут два нуля: 0800 0000 E000000
При изменении текста нужно следить за нулями: просто добавляя или удаляя "0\" из команды.

В этом случае краша в игре не должно быть. Знаю - муторно, но это все, что я мог сделать на скорую руку.
При более тесном сотрудничестве смогу легко написать тулзу, которая будет фикстить бинарный файл на эти нули. Тогда проблема слежения за позицией байта будет не актуальна.

ПС: проект для АД во вложении

MD.Haus:

--- Цитата: .:SapiK:. от 23 Ноябрь 2020, 11:10:09 ---lupus, спасибо за дамп текста, адреса поинтеров, потихоньку перевожу дамп, попутно пытаюсь освоить круптар 7. Проект создал, указал адреса текста, поинтеров, таблицы, но все же текст выводиться не корректно, буду разбираться. Почему-то съедается первый символ в каждой строке. Еще раз спасибо.

--- Конец цитаты ---
Привет! Я тоже хочу поучаствовать в переводе! Опыта ноль, но есть желание!может спишемся и займемся на пару?

Romanbb:
Доброе утро, есть ссылка, как китайцы перевели данную игру https://xzonn.top/posts/Luigi-Mansion-Chinese-Localization.html
Я ток не понял как они файл шрифта обработали. Что такое LA44?

Sharpnull:

--- Цитата: Romanbb от 26 Август 2021, 06:47:53 ---Что такое LA44?
--- Конец цитаты ---
Это формат изображения. В Kuriimu открыть Kukkii, а там File > Open Raw Image можно выбрать Format. L (luminance) - оттенки серого (чёрно-белое), A (alpha) - прозрачность, значит 4 бита на оттенки серого и 4 бита на прозрачность. Задаются в программе: ImageFormats.cs, LA.cs, LaPixelDescriptor.cs.

lupus:
Там же кириллица встроенная, вроде, не?

Romanbb:

--- Цитата: lupus от 26 Август 2021, 17:16:48 ---Там же кириллица встроенная, вроде, не?

--- Конец цитаты ---
Судя по статье выше, скорее всего нет:

Библиотека шрифтов в этой игре хранится в /Region_JP/Fonts/main.gzfи/Region_JP/Fonts/location.gzf.Файл можно открыть с помощью программного обеспечения Kukkii серии Kuriimu.,Но на картинке ошибка.Проанализировав исходный код, было обнаружено,Изображение файла шрифта необходимо принудительно LA44отформатировать,В этом формате изображения в библиотеке шрифтов можно экспортировать как обычно..в то же время,Воспользуйтесь преимуществами поддержки формата GZF в исходном коде Kukkii,Я получил место хранения всех символьных данных,И извлеките с помощью скрипта Python.

тем не мение,Возникла проблема с процессом импорта:Игра не считывает смещение изображения, хранящееся в файле,Но 0x1780данные изображения при чтении по умолчанию.следовательно,Это ограничивает количество символов, которые шрифт может хранить.,Т.е. 496.

Romanbb:
при попытке открытия файла получается чушь даже после форматирования LA44. В чем соль?

Ogr:

--- Цитата: Romanbb от 26 Август 2021, 22:22:35 ---В чем соль?
--- Конец цитаты ---
нууууууууу, соль обычно в солонке... :crazy:

Romanbb:
lupus, Да действительно.... шрифт присутствует... только в одно файле

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии