Регистрация Авторизация В избранное
 
 
Меню
Greengh0st

Переводы Greengh0st’a

Проекты Greengh0st’a

Переводы Gamerbes & Hanasaka

Баннеры

JurasskPark BHLady

Magic Team Megaten

PSCD.RU

Счётчик посещений

HotLog

Перевод Наруто 2 или работа с сжатой графикой

Автор: JurasskPark
Опубликовано: 2369 дней назад (28-03-2011 17:27)
Редактировалось: 16 раз — последний 2368 дней назад
Играет: Buhar Jerreau - Мост
0
Голосов: 0
Добрый день, мальчики и девочки. smile
Давно я не писал в блог про перевод Наруто. Это значит, что сегодня мне есть, что вам сказать. smile

Сегодня я расскажу про то, как я вставляю сжатую графику с картами в ROM.
Начнём по порядку.
LZ77 - это сжатие данных. Кто бы мог такое подумать? smile LZ77 на GBA и NDS всегда начинается c байта 10 и состоит из четвёрки байтов, т.е. 10 ХХ ХХ ХХ.
Изображения и карты находятся всего по адресу оканчивающие на 0, 4, 8, С. Карта в основном всегда находится рядом с тайлами. Это к сведению, потому что нам это поможет при вставке данных. smile
Сначала TrickZter показал программу unLZ-GBA с помощью которой можно искать графику сжатую в lz77 c Хаффманом.



С помощью кнопки RawDump программа извлекает  данные, на которых вы сейчас находитесь. Данные уже извлекаются распакованные из формата lz77 и у них расширение буде .raw. И хоть вы убейтесь об стенку при сохранении расширение вам не поменять, что в дальнейшем очень будет злить. :(
Как вы видели, то на первой картинке адрес 0068B3D4 и он заканчивается на 4, а у карты адрес 0068B900 и заканчивает на 0. Значит я не обманул. :P



Если подвести итоги, то 0068B3D4 - это тайлы изображения, а 0068B900 - это карта этого изображения.

Можно извлечь данные. У тайлов изображений расширение поставим .chr, а карты сделаем .map. Это поможет нам в дальнейшем.

Кстати, можно так фигачить все картинки и дальше, но от этого можно заработать гемморой, так как кроме извлечения данных и замены разрешения нужно будет вести учёт их адресов, чтобы потом не вспоминать, откуда мы их извлекли и та ли карта для этого изображения или другая.
Примерно вот так.
You can only use...
0068B3D4 - тайлы
0068B900 - карта
6144 - размер тайлов
1152 - размер карты

Вопрос: а нафига нам размер тайлов и карты???
Ответ: а для того, деточка, чтобы лучше жилось! smile На самом деле новый размер тайлов и карты не может быть больше предыдущего, если вы вставляет данные на это же место. Иначе они затрут данные, которые идут после них, а это влечёт за собой БОЛЬШИЕ ПРОБЛЕМЫ.
И тут нам на помощь приходит на помощь LZ77Restructor2 от всемирноизвестного TrickZter’a.

Изображение уменьшено. Щелкните, чтобы увидеть оригинал.


Красявая, правда? smile
Пока она находится в стадии завершения, но уже работает.
Из плюсов мне понравилось:
+ Отсутствие багов как  в unLZ-GBA,  если возвращаемся назад по данным, то адресам не меняются и не показывается мусор с левыми адресами, то есть могут быть показанные данные, у которых адрес не делятся на 4, а это не 0, 4, 8 и С.
+ Очень понравилась быстрая работа программы. Прям вжик и всё открыто, распаковано, по холодильнику разложено... hoho
+ Удобный и быстрый режим переключения между форматами 4BPP и 8BPP.
+ У извлеченных данных указывается адрес откуда их извлекли и их оригинальный размер.
А если в программу будет добавлена возможность подгрузить палитру, то она будет просто вкусняшка. smile

Так. Вернёмся к нашим бара..байтам. smile
Ещё нам нужна палитра. В данной доке я писать как её делают не буду, но по многочисленным просьбам напишу. smile
Теперь нужна супер-пупер программа MapImage 2.0 от Джинни. Она продаётся за 4.99 $ и если вы сделаете заказ прямо сейчас, то мы сделаем для вас скидку и продадим её за 3.99 $!!! Это очень выгодное предложение.  Спешите делать заказ!!!
Так. Запускаем программу.

Изображение уменьшено. Щелкните, чтобы увидеть оригинал.


Переходим в Image - Load Map without Header, Tiles and Palette...
Появляется окно выбора карты изображения.



Программе нужен файл только с расширением .map. Других видеть она не хочет. Очень привередливая. smile



Потом появляется окно выбора файла с тайлами. Для этого файла мы тоже ранее меняли расширение на .chr.



Теперь выбираем файл с палитрой.
Снова от нас программа что-то хочет!




А! Она хочет чтобы мы указали ширину и высоту в тайлах для построения изображения. Так как в нашем случае игра на платформе GBA, то для построения ширины изображения будут 32 тайла, а вот высоту нужно будет уже смотреть в зависимости от изображения Главное, чтобы изображение в высоту не обрезалось. Ничего страшного если высоту с первого раза не угадаем. smile Можно попробовать ещё раз. Я с запасом поставил высоту 24 тайла.
Смотрим, что у нас получилось.



Красяво! smile

Сохраняем изображение в BMP.
Image - Save to BMP... (Ctrl+S)
Вот она.



Ахалай-махалай текст-драйвер-джипи давай!
И у нас уже есть готовое изображение. smile



А вы заметили, что картинка больше по сравнению с оригиналом стало?
Что это значит? Ну как ясень-пень, что карта изображения будет больше.

Когда картинка, которую вы хотите вставить уже готова и MapImage 2.0 вы уже давно закрыли,  а вы ведь его закрыли? ;o)
Проделываем ту же процедуру, что и при сохранении изображения, единственное, что мы его будем уже загружать через   Image - Load from BMP... (Ctrl+L).

Теперь сохраняем карту.
Image - Save Map without Header...
Я оставляю имя этим же, только в конце добавляю _rus и получается 0068B900 (331)_rus.map.
Сохраняем тайлы.
Image - Save Tiles... (Сtrl+T)
И новое имя будет 0068B3D4 (1322)_rus.chr.

Теперь пойду и выпью чаю.

*Через 5 минут*

Так про что я говорил? Ах да! Мы хотели взломать сайт Чи... Ой, нет...
Нам надо снова сжать картинки в lz77. Для этого нам снова понадобиться GBACrusher.
Запускаем GBA Crusher. Открываем файл с тайлами 0068B3D4 (1322)_rus.chr через кнопку Add File(s). Выбираем режим LZ77, Vram safe.Нажимаем кнопку CRUNCH IT! и сохрянем файл под новым именем, например, 0068B3D4  (1322)_rus.chr.lz77. Ту же самую процедуру проделываем с картой.

Ну? Кто прав был? smile Карта изображения у нас по размеру больше оригинала, а вот карта тайлов нет.




Тут можно поступить двумя путями:
1) В самом ROMе искать пустое место, главное не попасть на место, которое может быть специальным черным фоном и состоят из  FF. XD
2) Увеличить РОМ. Для увеличения РОМ’а. Я использовал Magic File Resizer.
Снова вспоминаем, что чтобы вставить данные, то адреса должны заканчиваться на 0,4,8 и C.
Так как места при увеличении РОМ’а дофига, то можно шиковать и не запариваться с адресами.
Я их делал гламурными. smile Но до написания этого текста я уже успел немного понаставлять картинок.
Сейчас найду место.

Вот оно! Адрес 802600. Легко запомнить, но в отдельный файлик лучше сразу записать. Будь он не ладен этот склероз! smile



Теперь понадобиться программа CopyFile от Джинни.
Input File - файл, откуда забираем данные - это например, 0068B3D4 (1322)_rus.chr.lz77
Output File - файл, куда записываем данные - это naruto2rus.gba
Input File Offset - адрес в исходном файле.
Output File Offset - адрес в изменяемом файле - это h802600 (h значит, что используется 16-ный адрес)
Data Length - длина данных.
Input File Offset и Data Length не трогаем.



0068B900 (331)_rus.map.lz77 будем также вставлять, но уже по адресу 802B00.
А теперь чтобы проверить все нормально или нет, мы должны в игре найти место, где появляется это изображение.
И сделать быстрое сохранение до появление этого изображения.



Теперь включаем голову, потому что я буду менять ВЕЛИКИЕ и УЖАСНЫЕ пойнтеры на изображение.
Изображение у нас было по адресу 0068B3D4.
Ищем порядок байтов в порядке D4 B3 68 08.
Откуда взялась цифра 08? Я не знаю, но мне сказали, что "ROM у тебя меньше h1000000, так что последняя цифра всегда будет 08". Поэтому будем верить. smile
Ещё раз покажу чтобы было понятно как цифры поменялись.
00 68 B3 D4
D4 B3 68 08

Ищу порядок байтов с помощью ЗоПа т.е. Золотого Пальца. hoho



Он показал адрес 4f4888. Как мы видим последнее число опять делится на 4, значит всё нормально.



D4 B3 68 08  мы должны заменить на новый адрес.
Адрес новых тайлов 802600 по тому же принципу это будет 00 26 80 08.
Меняем D4 B3 68 08 на 00 26 80 08.



Коротко эта запись будет выглядеть так.
68B3D4 (802600) пойнтер  00 26 80 08 ищем D4 B3 68 08 адрес 4f4888
Тоже самое делаем с картой тайлов.
68B900 (802B00) пойнтер 00 2B 80 08 ищем 00 B9 68 08 адрес 4f488C.



Как мы видим, адреса пойнтеров находятся рядом.

А теперь запускаем игру и видим.



Эм-м-м-м…  Да пофиг!!! И так сойдёт! suspirious
P.S. Про такую документацию на romhacking.net.ru новости не пишут.  jokingly
Динозавр в шоке! | А у нас в городе слоны...

Загрузка комментариев...

 
 
InstantCMS