Автор Тема: [PSP] Dissidia 012 Final Fantasy  (Прочитано 3558 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sakuragaoka

  • Пользователь
  • Сообщений: 743
  • Пол: Мужской
  • 2007 не вернуть.
    • ВКонтакте
    • Просмотр профиля
[PSP] Dissidia 012 Final Fantasy
« : 15 Октября 2023, 13:27:11 »
Всем привет
Тщетно ищу человека, который поможет выковырять текст из образа вышеуказанной игры.
Файлы, вроде, опознал, в которых текст сидит, но у самого достать ничего не получается
https://drive.google.com/drive/folders/1qI2qY2OgTG5iQdVQ-fDCYLgzS2iSdm03 - тут залил все файлы, в которых текст.
Помогите, пожалуйста. Хочу перевести эту игру на русский.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5716
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #1 : 15 Октября 2023, 19:31:27 »
Структура mlng файла, везде Little-Endian:
4b: mlng
4b: Кол-во блоков
4b * Кол-во блоков: Смещения относительно файла
4b * Кол-во блоков: Размер в байтах
Структура блока:
2b: Кол-во строк по 2 байта (т. е. умножить на 2 для получения в байтах)
2b * Кол-во строк: Смещения относительно блока по 2 байта
Структура строки:
2b: Размер строки
Данные строки (не знаю как интерпретировать)
UPD2: В данных "строки" через байт по кругу идут зачем-то байты: ED 90 5E 84 32 2D A6 C8 00 57 F2 4B 36 92 73 84.
UPD3: Это XOR по тексту с ключом 98 ED AB 90 28 5E 42 84 B1 32 DA 2D 57 A6 BF C8 33 00 9A 57 27 F2 4C 4B A7 36 7D 92 9D 73 CE 84, который нашёл в расшифрованном EBOOT.BIN (USA) образа.

Тогда стоит добавить в название темы "Duodecim"
Написано 012, это duodecim с латыни :)
« Последнее редактирование: 15 Октября 2023, 20:57:26 от Sharpnull »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5716
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #2 : 15 Октября 2023, 22:52:51 »
Оказалось, что "блоки" - языки, их 6 в (USA) версии. Вот простой скрипт на Python 3, в 1-м аргументе передать .mlng файл, на выходе - .txt в UTF-8 со всеми строками подряд. Оригинальная кодировка после XOR с ключом - UTF-16 LE. Для замены нужно написать обратный скрипт. XOR используется не только для текста.

Оффлайн Sakuragaoka

  • Пользователь
  • Сообщений: 743
  • Пол: Мужской
  • 2007 не вернуть.
    • ВКонтакте
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #3 : 15 Октября 2023, 23:30:47 »
Вот простой скрипт
Офигеть, если честно. Спасибо большое. Я не мог найти человека, который вскроет эту штуку, года три, наверное.
Теперь можно заняться переводом. Еще раз, спасибо большое.

Добавлено позже:
Разобрал почти все файлы
Вот эти не захотели открываться только. А они самые большие.
« Последнее редактирование: 16 Октября 2023, 08:22:31 от paul_met »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5716
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #4 : 16 Октября 2023, 01:19:40 »
Вот эти не захотели открываться только
1387513718_16.mlng - изображения полученные через GimConv (написано в файле), можно увидеть в просмотрщике сырых изображений, выбрав 8bpp и ширину 256 пикселей. 1789910268_16.mlng - какие-то данные, начинаются на SEQ. В обоих файлах отдельные данные для каждого языка, без "шифрования" через XOR.

Оффлайн Sakuragaoka

  • Пользователь
  • Сообщений: 743
  • Пол: Мужской
  • 2007 не вернуть.
    • ВКонтакте
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #5 : 16 Октября 2023, 09:40:47 »
можно увидеть в просмотрщике сырых изображений, выбрав 8bpp и ширину 256 пикселей.
Расскажи, пожалуйста, поподробнее, как это сделать

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5716
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #6 : 16 Октября 2023, 15:30:25 »
Sakuragaoka, открыть любой редактор изображений для ромхакером, например, CrystalTile2 (кривая хрень как и остальной софт, что видел), F5, Tile form > GBA 8bpp, Width > 256. Как правильно отобразить и отредактировать уже другой вопрос.

Оффлайн lupus

  • Пользователь
  • Сообщений: 3887
  • Пол: Мужской
  • man with no face
    • ВКонтакте
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #7 : 16 Октября 2023, 22:50:32 »
Гимконвом же можно конвертнуть в png/bmp и обратно.
https://github.com/1upus/psp_psv_modding_and_translations/tree/master/psp_ff3_toolkit
Тут gimripper и gimconv ☝️

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5716
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #8 : 17 Октября 2023, 01:51:03 »
lupus, GimConv работает, только у меня не нашлось MSVCP71.DLL и его нет у вас, он оказывается не входит в "Visual C++ Redistributables", от Microsoft Visual C++ .NET: https://github.com/abbodi1406/vcredist/tree/master/source_links.

Оффлайн lupus

  • Пользователь
  • Сообщений: 3887
  • Пол: Мужской
  • man with no face
    • ВКонтакте
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #9 : 17 Октября 2023, 06:59:45 »
Странно. Ну да ладно, главное, что работает.

Оффлайн Sakuragaoka

  • Пользователь
  • Сообщений: 743
  • Пол: Мужской
  • 2007 не вернуть.
    • ВКонтакте
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #10 : 18 Октября 2023, 22:47:15 »
Sharpnull, а как инвертировать ваш чудо-скрипт?
lupus, как правильно воспользоваться инструментами с вашего гитхаба?

Извините, господа, вообще не программист,  поэтому куча нубских вопросов :cry:

Оффлайн lupus

  • Пользователь
  • Сообщений: 3887
  • Пол: Мужской
  • man with no face
    • ВКонтакте
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #11 : 19 Октября 2023, 14:17:50 »
Sakuragaoka, там есть ридми на русском. Поместить гимы в папку с софтом и запустить bat
Сам глянуть не могу, к сожалению - с телефона читаю.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5716
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #12 : 22 Октября 2023, 07:20:34 »
как инвертировать ваш чудо-скрипт?
Написал обратный скрипт - txt_to_mlng.py, в архиве также прошлый чуть изменённый с таким же алгоритмом - mlng_to_txt.py.
В 1-м аргументе путь до текста, во 2-м - путь до mlng из которого был извлечён текст (может быть оригинал или после txt_to_mlng.py):
txt_to_mlng.py input1.txt input2.mlngНа выходе файл с именем из 1-го аргумента, но с расширением mlng (здесь это input1.mlng). Можно указать одинаковые имена без расширения, будет перезапись, т. е. "txt_to_mlng.py 1.txt 1.mlng" изменит 1.mlng с новым текстом. Нужно указать mlng, т. к. требуется знать кол-во языков, кол-во строк в языке и какие строки пустые (в .txt пропущены пустые и нет разделителей). Когда будете редактировать .txt, помните, что нужно оставлять байт 00 (символ NUL) между строками, но, если что, мой скрипт напишет при несовпадении кол-ва строк.

Оффлайн Valens

  • Пользователь
  • Сообщений: 1
  • Пол: Мужской
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #13 : 22 Октября 2023, 17:11:08 »
Здравствуйте, давно слежу за темой, попытался сделать то что было сказано в Ваших инструкциях Sharpnull и lupus. Но т.к. не программист, как и пользователь Sakuragaoka, у меня мало чего получилось.
Получилось только скриптом "lng_to_txt" конвертировать файлы, кроме тех двух, которые содержат какие-то изображения. Скачал CrystalTile2, но в нем происходит что-то совершенно непонятное для моего разума. Соответственно, раз этот шаг у меня не получился, то и получить ГИМЫ для GimConv не получилось. Расскажите пожалуйста поподробнее что нужно мне сделать на этом этапе.
И ещё, решил попробовать изменить часть текста с английского на русский в файле 1022722184_32 (т.к. там диалог с муглом при первом запуске игры). Но не смог воспользоваться скриптом "txt_to_mlng.py", расскажите мне необразованному еще раз как это делать пожалуйста). Для того чтоб получить .txt файлы, я просто брал .mlng и перетаскивал их мышкой на файл скрипта и получал нужный файл, но в обратную сторону что-то не работает...

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5716
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #14 : 22 Октября 2023, 18:12:14 »
Valens, читайте как работать с командной строкой в Windows, давно хотел найти статью, чтобы туда посылать (пора уже открывать платные курсы по ромхакингу). Если коротко:
получить ГИМЫ для GimConv не получилось
По-хорошему смотреть смещение и размер в начале, вытаскивать и вставлять через скрипты или как удобно. Я просто обрезал начало файла .mlng до MIG.00 (байты 4D 49 47 2E 30 30), переименовал в .gim и выполнил:
GimConv.exe 1387513718_16.gim -o 1.png

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4653
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #15 : 23 Октября 2023, 19:36:18 »
Sharpnull,
у Кластера есть: https://window-opens-and-closes.info/

Оффлайн ASPIDWAR

  • Пользователь
  • Сообщений: 1
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #16 : 07 Апреля 2025, 23:38:46 »
Привет, как с прогрессом? Получилось что-то перевести?

Оффлайн cl

  • Пользователь
  • Сообщений: 76
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #17 : 11 Февраля 2026, 22:55:42 »
Привет, как с прогрессом? Получилось что-то перевести?
я в эту игру никогда не играл, но предлагаю не ждать перевод а использовать luna translator
насколько я читал она поддерживает ppsspp и перевод у тебя будет на лету