Урок № 2: Редактирование титульникаИтак, мы с вами научились находить переменные, отвечающие за жизни, менять их количество, а также делать бесконечными жизни и энергию. В данном уроке мы рассмотрим титульный экран ещё одной, не менее известной игры на NES - Ghosts'n Goblins.
Но перед тем, как приступить непосредственно к редактированию самого титульника, скажу пару слов о строении титульников в NES играх. Титульные экраны могу составляться либо микроблоками (тайлами 8х8 пикселей), так и макроблоками размерами 2х2 тайла. В некоторых играх используется оптимизация кода засчёт упрощения оформления повторяющихся строк (для примера: чтобы не писать "48 48 48 48 48 48 48 48 48 48", некоторые разработчики оформляют данную строку более кратко: "0A 48", что означает 10 байт одним тайлом). Подобные ухищрения проводятся в основном для экономии места в коде.
В данной же игре нам не придётся расшифровывать код титульника, ибо в ней титульник полностью открыт. Более того - он оформлен микротайлами, что удобно для его редактирования.
Открываем ром
Ghosts'n Goblins (U) [!].nes на эмуляторе
FCEUX 2.2.3, дожидаемся загрузки титульника, затем нажимаем на клавишу "\" (чуть выше Enter). Эмулятор перейдёт в режим паузы (будет виден значок в правом нижнем углу). Делается это для того, чтобы в процессе редактирования игра не проигрывалась сама собой и не отвлекала вас, а сам титульник был перед глазами. Отключить паузу эмулятора можно, зайдя в
Debugger и нажав
Run.
Теперь, когда титульник перед вами, вам нужно выяснить, как же он устроен. Для этого заходите в
Debug->Name Table Viewer. Появится окно, в котором вы можете изучить строение титульника, наводя курсор на определённый тайл и узнавая его значение:
Также будет отображаться его положение на экране и адрес в PPU, но это нам не нужно, так как мы хотим постоянный результат. Так что снова лезем в
Debug->Hex Editor и снова переключаемся в ROM File. Теперь разворачиваем окно
Name Table Viewer и смотрим значение первого тайла титульника. Хекс редактор также должен быть включён (как на скрине). В хекс редакторе заходим в
Edit->Find... и вписываем все значения с первого тайла в окно поиска:
Желательно написать больше значений, чтобы сразу найти нужное нам место. Только смотрите, пишите внимательно, не ошибайтесь - в Name Table Viewer нет сетки, показывающей границы тайлов, а потому съехать вниз или вверх и ввести значение с другой строки запросто можно.
Итак, вы ввели первую строку титульника и тут же её нашли. Жмём повторно на кнопку и убеждаемся, что больше совпадений нет. Это то, что мы искали. На скрине для удобства выделена вся первая строка. Теперь для наглядности мы попробуем затереть эту строку. Смотрим в
Name Table Viewer, какое значение отвечает за пустоту. Это значение FF. Смело вводим это значение на всю строку.
Нажимаем Reset или Power, зажимаем "\" и дожидаемся титульника (можно ускорить это дело, зажав также кнопку Tab).
Мы видим, что у нас получилось затереть первую строку:
Таким образом мы может переделать весь титульник. Чтобы точно знать, на что будете заменять существующие значения, сверните или закройте Name Table, и откройте параллельно с хекс-редактором PPU Viewer (
Debug->PPU Viewer):
И точно так же глядите значения тайлов и вбивайте их в хекс.
Но чтобы результат был более приемлемым - вам придётся придумать, как вам оформить новый титульник, а также предварительно перерисовать графику в тайловом редакторе типа YY-CHR или Tile Layer Pro. Но об этом мы узнаем в следующем уроке.
Благодарю за внимание!