5/29/2017 0 Comments Fce Ultra Описание
Список эмуляторов NES — Википедия. Статья представляет собой список эмуляторов игровой консоли NES для различных платформ. Gray. Box Classici. NESNes. MACx. NESNESCafev. NESPotato Multiv. NES (J2. ME)Nescube (J2. ME)Nes. Em (Only Palm OS 5 and up)LJP — Little John Palm (has NES Module)- Open Source. FCEUltra. XMednafen. Устройство уровней в NES- играх / Хабрахабр. В этой статье я попробую рассказать о способе хранения уровней в ROM- памяти картриджей для приставки NES. В качестве примеров я буду приводить уровни из игры «Darkwing Duck», а также других игр компании «Capcom», разобранных мной несколько лет назад. Я постараюсь пропустить описание использования дизассемблера и техническую часть исследования (если будет интерес, можно сделать на эту тему отдельную статью), а остановлюсь на описании, как именно разработчики хранили данные. Зная, что именно искать, найти это внутри образа ROM станет намного проще. Бонусом я покажу готовый редактор уровней и несколько созданных на нём хаков классических NES- игр. Итак, начнём описание, как положено исследователям кода, снизу вверх. Нижний уровень будет самым сложным, но разбираться с ним полностью совсем необязательно, достаточно иметь приблизительное представление. Более того, можно пропустить эту часть вообще и продолжить чтение со следующего абзаца. Я лишь опишу в нескольких предложениях происходящее тут и перейду к более интересным вещам. Видеопроцессор NES имеет несколько экранных страниц — одна из них отображается на экране. В экранной странице хранятся номера тайлов размером 8x. Отличительные особенности: потрясающий звук, возможность устанавливать любые видеорежимы, требовательность к системе. Рубрика: Эмуляторы Денди (NES) на Windows. FCE Ultra – один из лучших эмуляторов для NES, содержащий в себе множество полезных функций. Сами тайлы берутся из знакогенератора (на 2. Для исследователя место их хранения практически не важно. Желающим более подробно разобраться с этой темой могу посоветовать почитать статью от Mi. Ge. Ra на русском языке. Просмотреть содержимое знакогенераторов видеопроцессора можно с помощью любого эмулятора NES, я буду использовать наиболее продвинутый для исследования игр — FCEUX (на момент написания статьи последняя версия 2. Debug- > PPU Viewer: Эмулятор отображает тайлы увеличенными вдвое для удобства изучения. Правый знакогенератор в этой игре используется для построения фонового экрана (левый — для отрисовки персонажей с помощью другого механизма, это тема для отдельной статьи). Как уже упоминалось выше, на описание одного экрана с помощью тайлов уходит 9. Но посмотрите на полную карту первого уровня «Darkwing Duck». Она состоит из 2. Если хранить описание всех экранов потайлово, то на сохранение одного уровня уйдёт примерно 1. Напоминаю, что это не сама видеопамять в образе игры, а только описание с помощью тайлов видеопамяти игровых экранов! Это больше всего суммарного размера банков данных во всём образе ROM «Чёрного Плаща» (там всего 1. Более того, уровни «Duck Tales 2» содержат до 3. Тут стоит задать себе вопрос, как можно хранить описание экранов экономнее? Что бы вы сделали на месте разработчиков? Программа-эмулятор FCE Ultra отличается высокой скоростью работы, качественным звуком и совместима с большинством игр.Во всех исследованных мной играх применялись всего 3 различных способа: сжатие, рисование на чистом холсте и блочный способ — описание уровня не тайлами, а большими структурами- блоками. Сжатие. Почти не применяется в NES- играх (зато постоянно применяется в играх на Sega Mega Drive и Snes) в основном по причине малого количества доступной оперативной памяти, которая требуется для хранения распакованных данных, а также медленного процессора. Тем не менее, изредка встречается RLE- сжатие. Пример — первая «Contra» (совместно с описанием экранов с помощью блоков, см. Можно убедиться в этом, скачав редактор для этой игры. Стоит заметить, что RLE на NES всё же используют, но не для сжатия описания уровня, а для более подходящих для этого сущностей. Например, сжимают им тайлы, хранящиеся в этом случае в банках данных («Duck Tales 2», та же «Contra»). Распаковка при этом происходит сразу в видеопамять. Также иногда сжимают текстовые данные (подходящими для этого алгоритмами), но для описания уровня на данной платформе это всё же экзотика. Рисование на чистом холсте. Данный подход подразумевает то, что большая часть экрана остаётся чистой, поэтому описывать её не надо. Описывается только по каким координатам должны быть нарисованы конкретные объекты. Яркий пример такого подхода — игры серии «Марио»: При таком подходе в памяти хранятся записи, которые расшифровываются в виде «нарисовать по координатам X,Y объект ЯЩИК». Всё остальное пространство остаётся залито фоновым цветом и тратить драгоценные байты на его описание не нужно. Получается, что на одну такую запись расходуется всего 3 байта, а на одном экране будет нарисовано всего 5- 6 объектов. Конечно, нужно потратить ещё несколько десятков байт на описание самих объектов, но это не идёт ни в какое сравнение с тем, чтобы хранить почти килобайт данных при описании всего экрана тайлами. А если вы присмотритесь к скриншотам повнимательнее, то узнаете страшную тайну «Super Mario Bros.» Облако и куст — это один и тот же объект, но нарисованный с разной палитрой. На что только не пойдут разработчики ради экономии нескольких байт. Кроме того, если исследовать способ записи информации об объектах на экране, то можно узнать, что и здесь использует вариация сжатия RLE, в записи можно указать, что несколько ящиков (как и любых других объектов, например, черепах) должно быть отображено подряд с помощью одного дополнительного байта. Кстати, о таком способе записи можно догадаться по дизайну уровней или врагов игры — если часто встречаются несколько одинаковых подряд идущих объектов, вероятно, может встретиться такой способ хранения информации о них. Блочный. Основной и самый часто встречаемый способ экономии места для сохранения данных об игровых уровнях — блочный, при котором уровень описывается не тайлами 8x. Сами единицы данных (блоки) могут быть разного размера — самый часто встречаемый для NES размер в 2x. При этом сами блоки могут быть организованы в большие структуры — макроблоки (2x. В левой части картинки показано объединение четырёх тайлов в один блок, в правой части — объединение четырёх блоков в один макроблок луны из первого уровня «Darkwing Duck». Из скриншота должен быть понятен основной принцип объединения. Примечание: ромхакеры часто называют блоки «Tiles», а макроблоки — «Tile Sprite Assembly (TSA)», что создаёт путаницу в понятиях тайла как символа/иконки в знакогенераторе и тайла как объединения нескольких других тайлов в одну структуру (TSA первого уровня и второго). Поэтому я позволю себе сохранить введённые мной названия. В разных играх могут быть разные, но похожие системы блоков и макроблоков. В «Batman» размер макроблока — 2x. Flintstones: Rescue Dino and Hoppy» макроблоки огромны (по 1. New Ghostbusters 2» нету макроблоков, а комнаты составлены из обычных блоков. Принцип не меняется — уровень сохраняется как массив из чисел, кодирующий номера больших по размеру структур, составленных из более маленьких. Например, описание первого экрана первого уровня в «Darkwing Duck» начинается в образе ROM по адресу 0x. Первые 8 байт — это первая строка экрана, 8 номеров макроблоков, которые будут отображены первыми, можете попробовать изменить их вручную, запустить игру, начать первый уровень и посмотреть результат. Следом описывается вторая строка, третья и так далее, один экран занимает 8 строк, дальше следует описание второго экрана. Описание экранов может идти не в том порядке, в котором они будут встречаться в игре. В каком- то смысле сами игровые экраны тоже можно представить огромными структурами из 8x. Экран не обязательно может иметь размер 8x. Часто можно увидеть на экране тайлы, которые ни при каких обстоятельствах не могут быть отображены игрой из- за особенностей движка (либо из- за ограничений скроллинга, либо из- за особенностей программирования, например, в «Tiny Toon Adventures» на уровнях ввысоту «съедается» половина макроблока на стыке двух экранов). В некоторых играх нету разделения на экраны, и весь уровень описывается одной большой матрицей индексов макроблоков. Как узнать из каких структур (макроблоков) состоит уровень конкретной игры? Для этого нужно найти описание уровня внутри образа ROM с помощью дизассемблера или другим способом и изменить один или несколько байт в этом описании, чтобы посмотреть, что произойдёт на экране: На картинках — примеры разных размеров макроблоков в разных играх (2x. Chip & Dale 2», 4x. Jungle Book», 4x. Flintstones Surprise of Dinosaur Peak»). Ещё раз — всё в уровнях игр на NES описывается блоками (ну, и макроблоками). При этом описание макроблоков чаще всего состоит просто из индексов отдельных блоков (при размере макроблока 2x. Чёрного Плаща» слева- направо и сверху- вниз), а вот описания блоков включают в себя дополнительную информацию — цвет всего блока и его характеристику, является ли блок фоном, платформой, на которой можно стоять, подбираемым предметов или шипами, которые наносят урон и т. Разумеется, встречаются игры, в которых данное правило не соблюдается (например, в «Ninja Cats» цвет задаётся сразу для всего макроблока, а в «Chip & Dale 2» информация о типе блока закодирована просто в самом его номере). Другое отличие — порядок хранения частей макроблоков в памяти, они могут идти последовательно (4 байта на описание первого макроблока, затем 4 байта на описание следующего и т. Однако общие принципы блочного построения соблюдаются везде, что позволяет, во- первых, быстро находить похожие структуры в разных играх, во- вторых, изучать, в каких играх использовались похожие движки. Так, например, уровни «Darkwing Duck» с точностью до указателей на наборы блоков и макроблоков соотвествуют таковым в игре «Tale Spin» (хотя сам движок взят из «Mega. Man 4», в котором наборы блоков и макроблоков были разделены по разным банкам, но с сохранением одинаковых указателей на них), и очень похожи на уровни «Chip & Dale» (отличия только в способах хранения вспомогательной информации уровня — в том, как записывается способ скроллинга экранов и кодов дверей между комнатами). Вторые же «Chip & Dale» сделаны совсем по другому, экраны в них описываются не макроблоками, а обычными блоками размером 2x. Исследуя игры, я писал для proof- of- concept программу Cad. Editor, которая отображала бы уровни из образов ROM так, как они выглядят в ходе прохождения игры на консоле. Со временем она обрастала функционалом редактора, и ромхакеры даже сделали с её помощью несколько замечательных хаков (в основном на «Capcom»- классику), а также с десяток демок.
0 Comments
Leave a Reply. |