Автор Тема: [3DS] Извлечение графики из рома True Remembrance  (Прочитано 3488 раз)

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

Оффлайн Erizo_V

  • Пользователь
  • Сообщений: 16
    • Просмотр профиля
Всем привет.
Кто-нибудь может помочь извлечь ресурсы из рома 3дс игры? Кажется, для этого консоль нужна, но у меня ее нет(
Сам ром
https://yadi.sk/d/i8x8vz-p0t6B4Q

Оффлайн Глупый

  • Пользователь
  • Сообщений: 42
  • Пол: Мужской
  • Место, видимо, такое.(Ц)
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #1 : 20 Ноябрь 2018, 21:48:31 »
извлечь ресурсы из рома 3дс игры? Кажется, для этого консоль нужна
Не нужна. Достаточно 3dstool.


Оффлайн Erizo_V

  • Пользователь
  • Сообщений: 16
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #2 : 20 Ноябрь 2018, 21:55:30 »
Не нужна. Достаточно 3dstool.
Сделал все по инструкции, но ничего не вышло. Извлеклись какие-то бины и хедеры общим весом в 247 кб. Больше ничего.

Оффлайн Erizo_V

  • Пользователь
  • Сообщений: 16
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #3 : 20 Ноябрь 2018, 23:31:41 »
---
Скрин и файлы прикрепил. Игра не новая, как раз наоборот.
Ром залил на гугл
https://drive.google.com/open?id=1Xp6OfyzDIBZWxLSJcU9c14AWzI9VooDJ

Оффлайн Глупый

  • Пользователь
  • Сообщений: 42
  • Пол: Мужской
  • Место, видимо, такое.(Ц)
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #4 : 20 Ноябрь 2018, 23:43:21 »
Ага.
Теперь можно удалить или закомментить строчку с удалением и понять почему они не распаковались... )
del /Q "%%~nf\rom.cxi" "%%~nf\%f_1%" "%%~nf\%f_2%" >nul

Оффлайн Erizo_V

  • Пользователь
  • Сообщений: 16
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #5 : 20 Ноябрь 2018, 23:53:02 »
Ага.
Теперь можно удалить или закомментить строчку с удалением и понять почему они не распаковались... )
del /Q "%%~nf\rom.cxi" "%%~nf\%f_1%" "%%~nf\%f_2%" >nul
Прикрепляю тесты

Оффлайн Глупый

  • Пользователь
  • Сообщений: 42
  • Пол: Мужской
  • Место, видимо, такое.(Ц)
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #6 : 21 Ноябрь 2018, 00:16:52 »
Зачем? Я же уже видел ошибки.
ERROR: the file type is mismatchЧто-то с этим ромом утилитке вот тут не нравится, она не хочет извлекать файлы в папки. Попробую проверить на чём-нибудь японском...
%prog1% -xvtfu exefs "%%~nf\%f_1%" --header "%%~nf\exefs.header" --exefs-dir "%%~nf\exefs" >nul
%prog1% -xvtf romfs "%%~nf\%f_2%" --romfs-dir "%%~nf\romfs" >nul

Оффлайн Erizo_V

  • Пользователь
  • Сообщений: 16
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #7 : 21 Ноябрь 2018, 00:21:07 »
Зачем? Я же уже видел ошибки.
ERROR: the file type is mismatchЧто-то с этим ромом утилитке вот тут не нравится, она не хочет извлекать файлы в папки. Попробую проверить на чём-нибудь японском...
%prog1% -xvtfu exefs "%%~nf\%f_1%" --header "%%~nf\exefs.header" --exefs-dir "%%~nf\exefs" >nul
%prog1% -xvtf romfs "%%~nf\%f_2%" --romfs-dir "%%~nf\romfs" >nul
После замены этих строк кода, изменились только два теста из пяти.

Оффлайн Глупый

  • Пользователь
  • Сообщений: 42
  • Пол: Мужской
  • Место, видимо, такое.(Ц)
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #8 : 21 Ноябрь 2018, 00:51:20 »
После замены этих строк кода
Замены на что?  0_0
Это вполне правильные строки(верни обратно), но утилитке тут что-то не понравилось, это видно по тестам из первого поста с ними.
У меня два варианта, либо это баг и он поправится заменой утилитки в папке _soft на версию поновее: тыц.
Либо что-то не так с самим ромом. Тут только если найти оригинальный и попробовать с ним. Либо одно из двух.
+ Bonus: В порядке бреда, можно ещё попробовать с параметрами пошаманить(-xvtfu), уменьшая их количество в этих двух строках вплоть до одного извлечения(-x), но то такое. Все мои тестовые японцы извлеклись и так.

Оффлайн Erizo_V

  • Пользователь
  • Сообщений: 16
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #9 : 21 Ноябрь 2018, 00:56:51 »
Замены на что?  0_0
Это вполне правильные строки(верни обратно), но утилитке тут что-то не понравилось, это видно по тестам из первого поста с ними.
У меня два варианта, либо это баг и он поправится заменой утилитки в папке _soft на версию поновее: тыц.
Либо что-то не так с самим ромом. Тут только если найти оригинальный и попробовать с ним. Либо одно из двух.
+ Bonus: В порядке бреда, можно ещё попробовать с параметрами пошаманить(-xvtfu), уменьшая их количество в этих двух строках вплоть до одного извлечения(-x), но то такое. Все мои тестовые японцы извлеклись и так.
У меня вроде что-то извлеклось, но все файлы имеют формат .bin, как их открыть?

Оффлайн Глупый

  • Пользователь
  • Сообщений: 42
  • Пол: Мужской
  • Место, видимо, такое.(Ц)
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #10 : 21 Ноябрь 2018, 18:24:00 »
вроде что-то извлеклось, но все файлы имеют формат .bin
В смысле что-то извлеклось?
Если появились папки romfs\ и exefs\ с каким-то содержимым типа bin фалйлов, то нужно вернуть на место и удаление лишнего:
del /Q "%%~nf\rom.cxi" "%%~nf\%f_1%" "%%~nf\%f_2%" >nulИ если там действительно появились эти папки, то после какого действия?
+

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5128
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #11 : 31 Май 2020, 21:46:10 »
Извлёк изображения из архива imageArcive.arc, в котором хранится большинство изображений (текстур). Erizo_V изображения получил, для остальных (если такие будут, хех) подготовил программы для извлечения: https://github.com/infval/AMLUnpacker_TrueRemembrance/.
Так получилось, что есть 2 версии распаковщика на Python и C#. Первая требует установленный Python 3 и медленно работает, вторая - .NET Framework 4+ (хотя можно было скомпилировать под .NET Core со всеми зависимостями).
Python 3 версия
1. Установить последний Python 3: https://www.python.org/.
2. Установить PIL, в командной строке:
pip install -U pillow3. Скопировать скрипты AMLUnpacker.py и etc1decoder.py.
4. Для распаковки перетащить imageArcive.arc на AMLUnpacker.py или явно в командной строке:
AMLUnpacker.py imageArcive.arc -o images_dirГде images_dir конечная папка, без -o в imageArcive.arc_unpack.
C# версия
1. Если вдруг не установлен, то установите последний .NET Framework.
2. Скомпилированная программа: https://github.com/infval/AMLUnpacker_TrueRemembrance/releases.
2. Для распаковки перетащить imageArcive.arc на AMLUnpacker.exe или явно в командной строке:
AMLUnpacker.exe imageArcive.arc images_dirГде images_dir конечная папка, без этого в imageArcive.arc_unpack.

Как распаковать .3ds или .cia
Если ромы не зашифрованы, то с помощью ctrtool
.3ds
ctrtool --romfsdir=romfs game.3ds.cia
ctrtool --contents=contents game.cia
ctrtool --romfsdir=romfs contents.0000.00000000
Подробности: https://github.com/ihaveamac/3DS-rom-tools/wiki/Extract-a-game-or-application-in-.3ds-or-.cci-format.

Структура imageArcive.arc
Litte-Endian
0x00: 128 байт - Заголовок. AML_Arciver и нули.
0x80: 4 байта  - Количество файлов. Здесь 671.
0x84: Сжатые файлы
  0x00: 64 байта - Путь файла, его имя.
  0x40: 4 байта  - Размер данных дальше, после следующий файл.
По приколу написал файл в формате Kaitai Struct (.ksy), описывающий структуру. Но я его не использовал в коде, только проверил в Web IDE.
Сжатие данных
Первый 1 байт - маркер, который будет обозначать сжатие.
Когда встречается маркер, следующие байты: смещение назад и длина. Если смещение больше маркера, то -1 (вычесть единицу). Если два подряд маркера, то вставляется 1 байт равный маркеру, т. е. это экранирование.
Не используются байты только что записанные на выход, поэтому можно скопировать сразу все байты, а не по одному или кусками, как в некоторых алгоритмах.
Формат текстуры
После декомпрессии получаем ETC1A4 (ETC1 с прозрачностью, стандартный для 3DS), в начале идёт CTPK и заголовок https://www.3dbrew.org/wiki/CTPK#Texture_Info_Entry, из элементов используются только ширина и высота, остальное однотипно.

Исследование
Чтобы изучить сжатие, получил разжатые текстуры из памяти эмулятора Citra с помощью Cheat Engine. Первые байты одинаковые, так как не сжимаются, после сравнивал встречающиеся новые байты, чтобы найти соответствие текстурам. Хотя алгоритм очень простой, догадался не сразу.
Для декодирования ETC1A4 использовал код из https://github.com/gdkchan/Ohana3DS-Rebirth/, так как не смог найти готовой программы принимающей сырой файл (3dstex у меня не сработал). Изначально использовал Python для всего кроме ETC1A4, поэтому решил переписать декодирование на Python, но это медленно, тогда переписал остальное на C#.
etc1decoder.py можно использовать отдельно: etc1decoder.py файл_etc1 ширина высота [-o выходной_файл] [-a выставить для ETC1A4].
Кстати, ETC1 файл после кодирования в etc1tool.exe из Android SDK не смог правильно декодироваться использованным мной кодом, у 3DS различие в порядке байтов https://www.3dbrew.org/wiki/CGFX#TXOB:
Цитата
ETC1 is a compressed texture format which compresses blocks of 4x4 pixels into u64s. These u64 are traditionally stored in big endian; however, nintendo's implementation stores them in little endian. ETC1 textures are stored in 8x8 tiles; decompressed 4x4 therefore have to be organized accordingly.

Оффлайн Глупый

  • Пользователь
  • Сообщений: 42
  • Пол: Мужской
  • Место, видимо, такое.(Ц)
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #12 : 31 Май 2020, 22:27:25 »
Если ромы не зашифрованы, то с помощью ctrtool
А шифрованные\не шифрованные *.3ds - 3dstools, как тут выше и написано, только прогу обновить в папке софт(таки баг в той версии)... Ну и обратно она его зашифровать тоже может, если вдуг чего...
Для декодирования ETC1A4
Всё это конечно здорово, но...
Тык, разве не?
Да и в Курииме: там есть все(вариаций всяких нет одного и того же) 3ds и WiiU стандарты текстур и их пакетная обработка тоже была.

Только для WiiU onepiecefreak3 запорол обратную вставку(кому-то придётся допиливать выравнивания когда-нибудь), и что-то поменял в цветах при извлечении, не помню уже правильный тестовый билд, но красный в итоге стал синим (может починили с тех давних пор)...

По всему остальному замечаний и дополнений нет.
« Последнее редактирование: 31 Май 2020, 23:06:38 от Глупый »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5128
    • Просмотр профиля
[3DS] Извлечение графики из рома True Remembrance
« Ответ #13 : 01 Июнь 2020, 00:02:52 »
А шифрованные\не шифрованные *.3ds - 3dstools
Я сначала им пытался, в -h ничего не понял, потом нашёл страницу с объяснением с ctrtool и сразу получилось. В сети видел два рома 3ds и cia с этой игрой, на них проверил и записал как точно рабочий способ.
Тык, разве не?
Texturipper принимает только входной файл, значит сканирование автоматическое.
Да и в Курииме: там есть все(вариаций всяких нет одного и того же) 3ds и WiiU стандарты текстур и их пакетная обработка тоже была.
Я видел ваше сообщение, запускал Kuriimu.exe и там не увидел поддержки raw. Сейчас запустил Kukkii.exe, там действительно открывалось raw изображение ETC1A4, указать размеры и готово, но Batch -> Batch Export PNG не работает с raw и было бы неудобно через GUI всё равно. Я использовал raw, потому что там не полноценные файлы CTPK, а Texture Info Entry, а чтобы привести к виду CTPK пришлось бы заполнять структуры, проще было выбрать кусок с преобразованием.