Ссылки Команда Главная Форум Гостевая
МЕНЮ
Новости
01.01.2017
Переводы
01.01.2017
Проекты
10.05.2010
Программы
26.05.2012
Документация
26.11.2016
Прохождения
08.05.2011
Разное
07.06.2009
    rss
БАННЕРЫ
Наш баннер
Сайт JurasskPark
Griever Stuff
Новая реальность
Emu-Land
ConsolGames
CHIEF-NET
PSCD.RU
Langrisser
Battletoads
Valid HTML 4.01 Transitional
Правильный CSS!
 

 

 

 

 

Работа с Map Image

Для работы нам понадобятся: Map_Image, РОМ Cliffhanger (U).nes, обычный графический редактор (я буду использовать Photoshop).

Итак, сегодня мы познакомимся с великолепной программой Djinn’a под названием "Map Image". Сразу надо предупредить, что эта утилита имеет колоссальный спектр применения практически для всех распространённых консолей, однако здесь я поведаю лишь о том, как её применять при переводе игр на NES.

Для начала нужно сказать, что Map Image предназначена для редактирования любой графики. Как правило, там, где нужно подправить шрифт или подрисовать пару линий, можно обойтись и простым тайловым редактором. Однако, если вам нужно по-своему, скажем, перерисовать титульный экран или отредактировать другие графические данные большого объёма, то вышеупомянутый тайловый редактор отнимет много времени, а результат просто удручает: большие дрожащие буквы оказываются несимметричными и, зачастую, просто не смотрятся. А что делать, если оригинальная надпись выгнута по дуге, или как-нибудь по-другому? Выход один: конвертировать нужную графику в формат, понятный современным продвинутым графическим редакторам (например, Photoshop), в которых можно легко вставлять красивые надписи, изгибая их по своему усмотрению и прочее, прочее… После редактирования нужно, разумеется, засунуть всё обратно в РОМ. Вот этими двумя конвертациями и занимается Map Image.

Для начала, необходимо скинуть графику игры в понятный Photoshop’у файл. Map Image конвертирует в bmp. Для этого вам понадобятся 3 файла:

1)Тайловая карта экрана (*.map);

2)Тайлы того же экрана(*.chr);

3)Photosop’овская палитра(*.act).

Что касается последнего, то для NES’овских игр она будет содержать 4 цвета. К сожалению, Map Image не поддерживает атрибуты (они характерны только для игр NES и, теоретически, могли бы увеличить количество цветов на экране до 16 (спрайты не учитываются)). Таким образом, палитра будет представлять собой файл, размером $300 или 768 байт. Первые 12 байт отданы под RGB значения цвета (4 цвета, по 3 байта на каждый). Кстати, её можно будет отредактировать в самом Photoshop’e, но легче сделать вручную, а ещё легче взять заготовленную заранее из архива =)

Теперь о первом и втором: достать их из памяти приставки не составляет особого труда. Более подробно об этом написано в небольшом документе по перерисовке титульных экранов. Достать их из РОМа в некоторых случаях куда сложнее. Иногда зажат даже знакогенератор (непосредственно тайлы), однако чаще всего (и таких игр большинство) зажаты тайловые карты. Это означает, что могут возникнуть трудности с возвращением тайловых карт назад. Об этом будет рассказано ниже.

В отношении тайловой карты есть небольшая особенность: в бинарном файле есть заголовок: первые два байта (для игр на NES) отданы под ширину и высоту карты в числах тайлов соответственно, а оставшиеся байты будут являться уже данными самой карты. Скажем, если мы будем редактировать целый экран, то на NES он составляет 256x240 пикселей. Тайл – блок 8х8, соответственно первые два байта в заголовке будут $20, $1E ($100/8, $F0/8).

Более наглядно можно посмотреть в том же архиве, что и палитру.

Итак, открываем Map Image, выбираем 2bit Image (это для NES) -> Open Map and Tiles. Выбираем те файлы, которые нужно и вуаля – вот наша картинка. Затем 2bit Image-> Save Bmp и получаем нужный нам файл. Открываем Photoshop и приступаем к редактированию…

Чтобы всё было более наглядно, я объясню процесс вставки более подробно и с примером. Скажем, возьмём игру Cliffhanger (U).nes, и заменим её скучный титульный экран более красивым. За основу я взял обложку DVD фильма:

скриншот

Засовываем всё это в Photosop, редактируем по своему усмотрению, затем: Image -> Image size… выставляем ширину изображения на 256, а высоту на 240 (т.к. это размер полного экрана NES, а я собрался заменить его полностью), затем: Image -> Mode -> Indexed Color, где нужно выбрать Palette -> Custom -> Load и загружаем заранее заготовленную палитру *.act. Выбираем Dither, amount как понравится, жмём OK.

Если мы вставили не свой рисунок, а сконвертированный из игры Map Image, то менять ширину и высоту изображения не нужно – всё это было учтено в заголовке файла *.map (см. выше), который мы скормили Map Image. В принципе, шаманить с цветом тоже не надо - Map Image уже всё сделал. Но для редактирования такого файла нужно в первую очередь Image -> Mode -> RGB Color, а по окончании обратно перевести в Indexed Color (по моему мнению, так удобнее).

В итоге должно получиться примерно следующее:

скриншот

Файл сохраняем в BMP, причём обязательно в 8 бит.

Следующий этап получить из этого BMP наши тайловые карту и сами тайлы.

Соответственно, открываем Map Image: Image -> Open Bmp… и, опа!

скриншот

Знакомая картина? Это ещё более-менее – зачастую, нормально отражается только верхушка. Всё дело в том, что под одну страницу знакогенератора в видео памяти NES отдано всего 4 килобайта ($0000-$0FFF), в соответствии с графическим форматом, это всего лишь $100 тайлов, каждый проиндексирован ($0-$FF), если количество тайлов в *.chr переваливает за $100, Map Image начинает присваивать индексы с нуля. Т.е. *.chr будет формироваться правильно, а вот *.map – нет. Визуально это выглядит как на рисунке выше.

Выход из сложившейся ситуации заключается в уменьшении размера будущего *.chr файла (не стоит забывать, что мы должны будем засунуть его назад, а размер заменяемой графики может быть меньше, чем $100 тайлов. Т.е. даже если Map Image отразит всё правильно, это не гарантирует, что изменённая графика влезет в РОМ).

Способов сделать это несколько: ужать само изображение (обвести рамочкой и выбрать Free Transform); выбирать более выгодный способ при конвертации в Indexed Color или брать меньше проценты Amount, когда выбран Dither, но лучше всего, никогда не брать фотографию в качестве исходника =)

Как правило, если графика взята из игры и изменения поверх неё были не очень большие, таких проблем возникнуть не должно.

Что же, если всё нормально открылось, жмём 2bit Image -> Save Map and Tiles… Теперь полученные два файла (тайловую карту и тайлы) нужно засунуть в РОМ, на место заменяемых данных.

1)Тайлы. Сначала находим графику, которую будем заменять. Думаю, тут я не советчик =) Если графика зажата, то нужно будет также зажать и полученный файл *.chr, при этом, проследив, чтобы зажатая графика не стала больше исходной в РОМе.
Непосредственно вставка в случае Cliffhanger’а будет выглядеть так:

скриншот

(слева оригинальный РОМ, справа - *.chr файл, полученный Map Image)

2) Карта тайлов. Первым делом из двоичного файла нужно удалить те два байта заголовка, которые были нужны только для Map Image (воспользуйтесь обычным hex редактором). Затем, необходимо найти в РОМе непосредственно оригинальную карту тайлов (процесс нахождения хорошо описан в документе GottaX на форуме «Шедевра»). Заодно можно визуально увидеть зажата она или нет. Вообще говоря, процесс замены оригинальной карты своей самое сложное, что может быть в деле замены титульного экрана (разумеется, если тайлы не зажаты), потому что в 90% игр, которых я переводил, тайловые карты были зажаты RLE, поэтому новую карту придётся также зажимать, при этом важно, чтобы сжатые данные не получились больше оригинальных сжатых данных. Теперь, наверное, ясно, почему я взял в качестве примера игру Cliffhanger. Место в РОМе разработчики не берегли – карты, графика, текст и даже таблицы атрибутов лежат незапакованными. Поэтому удалось быстро найти и заменить карту тайлов для нашего титульника (здесь она начинается по адресу $10410 и, как любая непожатая карта, занимает ровно $3C0 байт).

Что же, самое время посмотреть что получилось.

Если вы не очень сильно изменяли оригинальный титульный экран, то следующий абзац можно смело пропустить, а если вы вставляете новый экран, то может получиться такая картина:

скриншот

Нда, до идеала ещё далеко. Дело в том, что палитра и таблица атрибутов остались неизменными, поэтому их надо будет тоже подредактировать. Пожалуй, особого секрета в редактировании тут нет. Наверное, быстрее всего найти палитру методом отладки (см. мой документ), хотя в этой игре этот процесс дополнительно усложняется (палитровые эффекты, используемые игрой, несколько осложняют поиск). Атрибуты также легко находятся отладкой (хотя, если они не зажаты, можно просто скопировать данные видеопамяти приставки и искать их в РОМе; кстати, это касается и тайловых карт). Особых хитростей в редактировании тоже нет. Для палитр NES есть несколько инструментов, для атрибутов – что-то не припомню, поэтому я редактировал вручную. В общем-то, минут через 15 был получен вот такой результат:

скриншот

Из-за моей лени, были использованы только две палитры из возможных четырёх, но если всё делать серьёзно, то оставшиеся две палитры могут придать большую реалистичность картинке.

С непривычки, можно подумать, что всё это муторный и долгий процесс, однако в случае Cliffhanger’а весь процесс занял у меня от силы минут 25 (15 из которых я редактировал палитру и атрибуты, чего во многих случаях делать не надо), а главное – результат заставляет радоваться глаз переводчика и игрока.

Кстати, в архиве помимо полученных мною тайловой карты, тайлов и палитры, есть ещё патч, который заменяет титульный экран в оригинальном РОМе.