| Разработка и ромхакинг > Ромхакинг и программирование |
| [3DS] Извлечение графики из рома True Remembrance |
| (1/1) |
| Erizo_V:
Всем привет. Кто-нибудь может помочь извлечь ресурсы из рома 3дс игры? Кажется, для этого консоль нужна, но у меня ее нет( Сам ром https://yadi.sk/d/i8x8vz-p0t6B4Q |
| Глупый:
--- Цитата: Erizo_V от 20 Ноябрь 2018, 20:55:47 ---извлечь ресурсы из рома 3дс игры? Кажется, для этого консоль нужна --- Конец цитаты --- Не нужна. Достаточно 3dstool. Можно скачать патч от любой 3ds Зельды, например этот, как самый мелкий. Алгоритм такой: 1 В любом из батников удалить всё лишнее начиная от "rem Patch" и до "pause". (Не забыть сохранить.) 2 Положить 3ds ром в папку Original и запустить этот батник. ??? ??? Profit! |
| Erizo_V:
--- Цитата: Глупый от 20 Ноябрь 2018, 21:48:31 ---Не нужна. Достаточно 3dstool. Можно скачать патч от любой 3ds Зельды, например этот, как самый мелкий. Алгоритм такой: 1 В любом из батников удалить всё лишнее начиная от "rem Patch" и до "pause". (Не забыть сохранить.) 2 Положить 3ds ром в папку Original и запустить этот батник. ??? ??? Profit! --- Конец цитаты --- Сделал все по инструкции, но ничего не вышло. Извлеклись какие-то бины и хедеры общим весом в 247 кб. Больше ничего. |
| Erizo_V:
--- Цитата: Глупый от 20 Ноябрь 2018, 23:22:29 ------ --- Конец цитаты --- Скрин и файлы прикрепил. Игра не новая, как раз наоборот. Ром залил на гугл https://drive.google.com/open?id=1Xp6OfyzDIBZWxLSJcU9c14AWzI9VooDJ |
| Глупый:
Ага. Теперь можно удалить или закомментить строчку с удалением и понять почему они не распаковались... ) --- Код: ---del /Q "%%~nf\rom.cxi" "%%~nf\%f_1%" "%%~nf\%f_2%" >nul --- Конец кода --- |
| Erizo_V:
--- Цитата: Глупый от 20 Ноябрь 2018, 23:43:21 ---Ага. Теперь можно удалить или закомментить строчку с удалением и понять почему они не распаковались... ) --- Код: ---del /Q "%%~nf\rom.cxi" "%%~nf\%f_1%" "%%~nf\%f_2%" >nul --- Конец кода --- --- Конец цитаты --- Прикрепляю тесты |
| Глупый:
Зачем? Я же уже видел ошибки. --- Код: ---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:
--- Цитата: Глупый от 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 от 21 Ноябрь 2018, 00:21:07 ---После замены этих строк кода --- Конец цитаты --- Замены на что? 0_0 Это вполне правильные строки(верни обратно), но утилитке тут что-то не понравилось, это видно по тестам из первого поста с ними. У меня два варианта, либо это баг и он поправится заменой утилитки в папке _soft на версию поновее: тыц. Либо что-то не так с самим ромом. Тут только если найти оригинальный и попробовать с ним. Либо одно из двух. + Bonus: В порядке бреда, можно ещё попробовать с параметрами пошаманить(-xvtfu), уменьшая их количество в этих двух строках вплоть до одного извлечения(-x), но то такое. Все мои тестовые японцы извлеклись и так. |
| Erizo_V:
--- Цитата: Глупый от 21 Ноябрь 2018, 00:51:20 ---Замены на что? 0_0 Это вполне правильные строки(верни обратно), но утилитке тут что-то не понравилось, это видно по тестам из первого поста с ними. У меня два варианта, либо это баг и он поправится заменой утилитки в папке _soft на версию поновее: тыц. Либо что-то не так с самим ромом. Тут только если найти оригинальный и попробовать с ним. Либо одно из двух. + Bonus: В порядке бреда, можно ещё попробовать с параметрами пошаманить(-xvtfu), уменьшая их количество в этих двух строках вплоть до одного извлечения(-x), но то такое. Все мои тестовые японцы извлеклись и так. --- Конец цитаты --- У меня вроде что-то извлеклось, но все файлы имеют формат .bin, как их открыть? |
| Глупый:
--- Цитата: Erizo_V от 21 Ноябрь 2018, 00:56:51 ---вроде что-то извлеклось, но все файлы имеют формат .bin --- Конец цитаты --- В смысле что-то извлеклось? Если появились папки romfs\ и exefs\ с каким-то содержимым типа bin фалйлов, то нужно вернуть на место и удаление лишнего: --- Код: ---del /Q "%%~nf\rom.cxi" "%%~nf\%f_1%" "%%~nf\%f_2%" >nul --- Конец кода --- И если там действительно появились эти папки, то после какого действия? + Прог для извлечения графики и вставки её обратно для 3DS уже много, у того же китайца, что запилил 3dstool, в репе вижу минимум три. Разные контейнеры, но сами форматы текстур вполне стандартизированы. Есть ещё и Kuriimu в котором тоже всё это реализовано. Но bin это не формат, а лишь расширение(говорящее что там может быть что угодно), форматы нужно разбирать методами умного реверса или тупого анализа, говорят при соответствующих навыках даже сопоставимо по времени. Или найти в тырнетах, если кто-то что-то из этого уже проделал для данной игры. ) |
| Sharpnull:
Извлёк изображения из архива 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 pillow --- Конец кода --- 3. Скопировать скрипты 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. --- Конец цитаты --- |
| Глупый:
--- Цитата: Sharpnull от 31 Май 2020, 21:46:10 ---Если ромы не зашифрованы, то с помощью ctrtool --- Конец цитаты --- А шифрованные\не шифрованные *.3ds - 3dstools, как тут выше и написано, только прогу обновить в папке софт(таки баг в той версии)... Ну и обратно она его зашифровать тоже может, если вдуг чего... --- Цитата: Sharpnull от 31 Май 2020, 21:46:10 ---Для декодирования ETC1A4 --- Конец цитаты --- Всё это конечно здорово, но... Тык, разве не? Да и в Курииме: там есть все(вариаций всяких нет одного и того же) 3ds и WiiU стандарты текстур и их пакетная обработка тоже была. Только для WiiU onepiecefreak3 запорол обратную вставку(кому-то придётся допиливать выравнивания когда-нибудь), и что-то поменял в цветах при извлечении, не помню уже правильный тестовый билд, но красный в итоге стал синим (может починили с тех давних пор)... По всему остальному замечаний и дополнений нет. |
| Sharpnull:
--- Цитата: Глупый от 31 Май 2020, 22:27:25 ---А шифрованные\не шифрованные *.3ds - 3dstools --- Конец цитаты --- Я сначала им пытался, в -h ничего не понял, потом нашёл страницу с объяснением с ctrtool и сразу получилось. В сети видел два рома 3ds и cia с этой игрой, на них проверил и записал как точно рабочий способ. --- Цитата: Глупый от 31 Май 2020, 22:27:25 ---Тык, разве не? --- Конец цитаты --- Texturipper принимает только входной файл, значит сканирование автоматическое. --- Цитата: Глупый от 31 Май 2020, 22:27:25 ---Да и в Курииме: там есть все(вариаций всяких нет одного и того же) 3ds и WiiU стандарты текстур и их пакетная обработка тоже была. --- Конец цитаты --- Я видел ваше сообщение, запускал Kuriimu.exe и там не увидел поддержки raw. Сейчас запустил Kukkii.exe, там действительно открывалось raw изображение ETC1A4, указать размеры и готово, но Batch -> Batch Export PNG не работает с raw и было бы неудобно через GUI всё равно. Я использовал raw, потому что там не полноценные файлы CTPK, а Texture Info Entry, а чтобы привести к виду CTPK пришлось бы заполнять структуры, проще было выбрать кусок с преобразованием. |
| Навигация |
| Главная страница сообщений |