Автор Тема: Dissidia 012 Final Fantasy достать текст  (Прочитано 785 раз)

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

Оффлайн Sakuragaoka

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

Оффлайн Ogr

  • Пользователь
  • Сообщений: 7468
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #1 : 15 Октябрь 2023, 13:50:11 »
Хочу перевести эту игру на русский.
псп версия переведена официально

Оффлайн Sakuragaoka

  • Пользователь
  • Сообщений: 741
  • Пол: Мужской
  • 2007 не вернуть.
    • ВКонтакте
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #2 : 15 Октябрь 2023, 17:45:16 »
псп версия переведена официально
Оригинал - да
Вторая часть осталась без перевода

Оффлайн dedok179

  • Пользователь
  • Сообщений: 497
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #3 : 15 Октябрь 2023, 18:14:50 »
Вторая часть осталась без перевода
Тогда стоит добавить в название темы "Duodecim", чтобы было понятно о какой именно идет речь

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5112
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #4 : 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 »

Оффлайн dedok179

  • Пользователь
  • Сообщений: 497
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #5 : 15 Октябрь 2023, 22:05:27 »

Написано 012, это duodecim с латыни :)
Точно. Что-то я совсем слепой стал  :lol:

Оффлайн Sharpnull

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

Оффлайн Sakuragaoka

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

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

Оффлайн Sharpnull

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

Оффлайн Sakuragaoka

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

Оффлайн Sharpnull

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

Оффлайн lupus

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

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5112
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #12 : 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

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

Оффлайн Sakuragaoka

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

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

Оффлайн lupus

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

Оффлайн Sharpnull

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

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5112
    • Просмотр профиля
Dissidia 012 Final Fantasy достать текст
« Ответ #18 : 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

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