Редактирование Палитры

Оригинальный текст принадлежит Green Charizard
http://www.pkmnhackersonline.com
Перевод onk-mork crossroad2@narod.ru

Весь следующий текст взывает к основам работы с гекс кодировками (что немаловажно для понимания структуры этого кода). Вы можете разобраться в том, как изменить своими руками цвета всего того, что вы видете на экране когда запускаете GBA РОМ не как нибудь, а покопавшись непосредственно в гекса коде. Копаться мы будем все в том же диапозоне игр: Рубин, Сапфир, Изумруди и ОКрасный и ЛЗеленый.

Оговорюсь с самого начала. Для безбашенного редактирования палитр существет инструмент, кличут его APE (Advanced Pallete Editor). А так как когда-то давно был не продвинутый инструмент, то о качестве можно догадаться - делали на совесть. Но в этом описании мы рассматривать работу APE не будем, мы будем делать все руками.

Работать с палитрами довольно просто, поэтому мы начинаем с них. Перед тем как мы приступим можно задуматься над вопросом "А в чем выгода от редактирования палитр?". Скучная и тупая формулировка следует из названия статитьи - это изменения отдельных цветов игры, для получения других. А на кой, вообще, менять эти цвета и что это дает?
Предположим, что это быстро и весело дает возможность поменять цвет покёцентра с красного на черный, или цвета травы заменить на аналогичные синие. На крайний случай вспомните скольких цветов в Рубине есть горы? Более чем трех, так что можно еще сделать и зеленые (поросшие мхом), это ж прикольно.

Что для этого нужно:

-VisualBoy Advance (VBA) - эмулятор игр
-Ваш ROM, будем хакать Рубин
-Hex Editor (e.g. Hex Workshop, Cygnus Free edition, Hexecute…) - один из перечисленных инструментов

Предположим что цвет травы вам нравится, и с покёцентром Вы разбираться тоже не хотите. Тогда я предложу вам мой вариант, давно хотел перекрасить подводные скалы из фиолетового в темно-зеленые, для кардинальных перемен (в темно серые я бы не стал, хоть так и правдоподобнее). Скачайте эмулированную савку для GBA игры Рубин в папку с названием Ruby Hack (далее ваш профессианальный nickname). Туда же скопируйте сам РОМ Рубина и обзавите точно также Pokemon_Ruby_example02 (только расширение *.gba оставьте прежним). Когда игра загрузится запустите эту сохраненку. Вы окажетесь на воде, в том месте, где находится подводный выход из Сутополиса (Солнечного города название карты Sootopolis city 0.7). DIVE знает Тентакруэль, поэтому ныряйте и выплывайте из города на открытые подводные просторы (карта UNDERWATER 0.51).

http://crossroad2.narod.ru/pokemon/hack/guides/poleznoe.gif Открою секрет всех ГБА игр - они состоят из 3-8 слоев разных типов изображений одновременно, для достижения различных эффектов. Все слои можно посмотреть в главной панели вашего эмулятора Options / Video / Layers вы увидите список всех слоев. На основе своих наблюдений, я составил примерное описание, за какую часть графики отвечает тот или иной слой (также даны сочетания клавишь для выкл/вкл):
BG 0 - все диалоги и менюшки в игре на карте в этом слое.CTRL+1
BG 1 - ваш персонаж может прятаться за домами или деревьями, их изображения лежат сверху благодаря этому слою. Или всякие мосты, под которыми можно снизу пройти или проплыть - все это здесь лежит. CTRL+2
BG 2 и BG 3 - это прозрачный и фоновый тайловые слои (грубо говоря). Суть в том, что, например, тайл лестницы есть почти в каждом подземелье или горе, но цвет самого подземелья меняется. Для каждого подземелья будет тайл со своим кодом "лестницы на фоне", но програмно это лестница без фона + фон. Вы можете наблюдать на примере деревьев на фоне травы, других деревьев, воды и т.д. есть еще много примеров (может у кого появится желание написать про них!).
Про эти слои в бою. Фон для битвы это BG3, все техники, которые исполняет покемон требуют прозрачности, поэтому они на BG2. Вот - CTRL+3 CTRL+4
OBJ - объектный слой. Вы наверное замечали в старых мультфильмах, когда идешь по волшебному лесу и видишь деревья, как вдруг одно из них оживает, его цвет сразу же отличается от расскраски "не живых" деревьев, а если замрет, то сливается с фоном. Как раз в объектном слое все взаимодействия персонажей и происходят. Да, и еще, рамочка во всплывающих окнах во время игры, тоже, в этом слое. CTRL+5
WIN 0 -... не изучено, но нафиг убирает с экрана карту и все на ней... CTRL+6
WIN 1 -... изучено?.. нет. CTRL+7
OBJ WIN - ... вообще не изучено CTRL+8http://crossroad2.narod.ru/pokemon/hack/guides/poleznoe.gif

Вернемся к редактированию палитр. Так как работать мы будем с палитрами BackGround (фон), то этот туман на экране, да и человечка можно убрать отменив показ OBJ (объектного слоя CTRL+5). Так лучше. Теперь проще будет искать линейку фиолетовых цветов.

http://crossroad2.narod.ru/pokemon/hack/guides/03_palette_edition_01.png

Чтобы точно определить нужные нам цвета в вашем эмуляторе VBA откройте на главной панели Tools /  Map viewer. Выделите слой в котором нужно выбрать цвет (BG0,BG1 или BG2), далее на картинке справа выделить нужный тайл. Он может состоять из нескольких цветов, поэтому на поле 8 х 8 квадратиков выберите нужный вам цвет. Затем запомните или запишите его RGB составные (R:14 G:9 B:25) и по этим составным определить его в палитре точно.

http://crossroad2.narod.ru/pokemon/hack/guides/03_palette_edition_02.png

Далее, на главной панели откройте Tools / Palette viewer. На глаз мы уже обнаружили группу фиолетовых цветов. Поэтому при детальном сравнении RGB составных мы уже знаем с какими оттенками нам придется работать. Теперь обратим внимание на кодировку каждого цвета, ведь в код игры пишется код цвета каждого пиксела.
цвет - код
R:11 G:6  B:22 - 58CB
R:14 G:9  B:25 - 652Е
R:18 G:14 B:27 - 6DD2
R:22 G:18 B:31 - 7Е56
R:24 G:20 B:31 - 7E98
я не стал рассматривать цвет со значением 0х5047 потому, что он придает некий оттенок синевы в тенях.

Всегда нужно менять местами первую и последнюю байтовые кодировки (в байт входит два числа). Просто запомните.
Это ваша запись 58 CB --> CB 58.
И далее по списку... И теперь мы работаем с этими преобразованными значениями CB58 , 2E65 , D26D , 567Е , 987E. В палитре, что мы видим цвета расположены от светлого к темному слева направо, точно также в игре в кодировке ЭТОЙ палитры записаны и коды этих цветов --> 987E567ЕD26D2E65CB58 мы получили строчку кода (целых двадцать байтов из 16 миллионов)

Теперь мы открываем HEX Workshop (он треубет установки). В нем запускаете из вашей папки Ruby Hack ****, ваш Pokemon_Ruby_example02.gba файл, и видим эти самы 16 миллионов байт гекса кода, радость-то какая! Найти, нужную нам строчку, можно через меню Edit / Find... или CTRL+F и Откроется окно:

-----------------------------------
Find What
Type : Hex Values -  должно быть в этом пункте
Vlue : 987E567ED26D2E65CB58 - наша последовательность цветов
Text : сейчас ни разу не полезная строчка
галочка в Find All instances
выбрать искать Up (вверх) или Down (вниз)
ОК
-----------------------------------

У вас возникает вопрос "Почему нужно искать именно последовательность цветов, а не по одному?" Если возникает, отвечу, что чем длиннее строчка поиска, тем точнее сам поиск.

В окошке справа внизу под кодом высветился номер строки и длинна найденного отрезка кода - 00246A3E и 00000А (10 байт). Щелкаем по этой строчке и смотрим на выделенный желтым участок кода - наша строка цветов. Осталось только внести новые значения в этот участок. Вопрос, где их взять эти новые значения, ведь нужна гекса кодировка именно этой игры!
Можно воспользоваться прогой А-Color (которую я постараюсь найти в ближайшее время) либо взять из палитры в том же самом ГБА эмуляторе, главное помнить про перестановку байтов местами.

Нужные мне зеленые цвета я нашел в верхнем левом углу. это цвета деревьев, теперь будут под водой! Пишу последовательно их кодировки в ГБА палете : 43F6 3310 1A27 0147 ---МЕНЯЕМ--> F643 1033 271A 4701 у нас четыре новых кода для, а нужно пять. Тут уж церемониться я не хочу поэтому просто оставим самый светлый из фиолетовых (987E) как есть, а заменять будем другие.

567E --> F643
D26D --> 1033
2E65 --> 271A
CB58 --> 4701

Берем левую и правую руки и заменяем в соответствии со схемой выше.
Теперь можно сохранить CTRL+S или через меню файл.
Откройте  ваш, только что сохраненный, Pokemon_Ruby_example02.gba в эмуляторе, дождитесь загрузки савки и нырните к новым цветами подводного цартсва.

http://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_01.pnghttp://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_02.pnghttp://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_03.png

Вполне даже веселенькое подводное царство, на мой взгляд намного интересснее чем было раньше. Теперь вы можете видеть что, подводные растения, которые колышатся от подводных течений все же сохранили часть своих старых цветов! Их тоже надо заменить. Эти цвета 692У и 5CAA
http://crossroad2.narod.ru/pokemon/hack/guides/03_palette_edition_04.png
Так как тут искать недалеко мо можно глазами поискать выше последовательность 2E69 AA5C

http://crossroad2.narod.ru/pokemon/hack/guides/03_palette_edition_05.gif

и заменить
2E69 --> 271A
AA5C --> 4701
Сохранитесь посмотрите будет выглядеть так

http://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_04.pnghttp://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_05.png

В итоге с подводным миром можно сотворить нечто подобное:
если заменить нужные цвета под цвет гор (их как раз шесть) 5В67 DB52 5746 D339 702D 0C29
http://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_06.png

по прежнему в моде коллекция под водой солнечного города FF7F 5A6B F75E 9452 1046 0000
http://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_07.png

ну, или, золотой песочек 57FF FF2F BF23 7B0A F214 4A00
http://crossroad2.narod.ru/pokemon/hack/guides/Pokemon_Ruby_example02_08.png

На этом я не хочу прекращать наше путешествие (уж больно понравилось)!

Продолжим в нутри Солнечного города!!!

Позвольте предложить вашему вниманию преобразованную карту города
http://crossroad2.narod.ru/pokemon/hack/guides/03_palette_edition_06.png

и палеты из эмулятора до и после

http://crossroad2.narod.ru/pokemon/hack/guides/03_palette_edition_03.png

Чтобы начать нужно найти палету цветов именно Солнечного города, это можно сделать если искать шесть цветов солнечных гор (палета ДО, синий прямоугольник), можно перекрасить в эти шесть цветов 7166 8C39 314A 8C3D 0929 523E. Дальше воду можно сделать темной или грязной (палета ДО, красная полоска -> 7766 AC76 7166 8C6E 2A62 2731), можете сравнить изменение палеты и самой карты, думаю, вода будет вам интересна.
Дальше все совсем весело, в оранжевом овале обведены цвета всех деревьев игры если зайти в Options / Replace то можно заменить все деревья в игре на обгоревшие (после битвы Кайорга, Граудона и Рейквазы!!!) как введете нужные цвета выскочит менюшка в которой можно нажать Replace All и готово. Я также решил заменить всю траву (палета ДО, оранжевый прямоугольник) в кровавый цвет битвы (цвета крышки покецентра), а покецентры теперь с синими крышками.
Да и нассчет травы, вы можете кое-где видеть кусочки зеленой травы, если обратиться к палете это не так уж и много, пусть это побудит вас поискать самостоятельно.

Отредактировано WinaveR (18-09-2009 17:09:01)