Разрешение: 256х240
Палитра:
Графическая система тайловая, т.е. данные изображения хранятся в виде плиток 8х8. Для окрашивания тайлов имеется 4 набора по 4 цвета на фон (один из них общий) + 4 наборов по 3 цвета (не считая прозрачного) на спрайты. Цветовые наборы применяются к атрибутной зоне 16х16. Таким образом, на экране может быть максимум 25 цветов.
Платформа имеет аппаратные спрайты: 64 штуки размером 8х8 или 8х16, не более 8 спрайтов на строке. Спрайты могут быть отражены по вертикали или горизонтали. Спрайты могут браться из своего набора тайлов или из фонового набора.
Famicom способен одновременно отображать 256 уникальных тайлов фона.
Пути обхода
- Накладывание спрайтов для обхода цветовых ограничений
- Интерлейсинг - переключение банка тайлов на другой в нужный момент. Требуется точный тайминг, что требует подгонки изображения для PAL и NTSC регионов отдельно, а также исключает возможность использования семплов в музыке
- Использование маппера MMC5 для уменьшения атрибутной зоны до 8х8 и использования максимально возможного количества уникальных тайлов
- Гигаскрин - быстрое переключение между двух изображений для иллюзии расширения палитры. Возможно переключать и спрайты
- При помощи внешней аппаратуры в теории возможно уменьшение атрибутной зоны до 8х1. Без внешнего железа при штатном количества памяти атрибутная зона может иметь размер 16х8, с расширенной памятью высоту возможно уменьшить до 1.
Примеры работ
Инструменты
Инструкции и исходники
Простая картинка
Нарисовать простую картинку с ограничением в 256 тайлов и без спрайтов можно, используя всего один NESST. На выходе у вас получится три файла с расширениями chr (банк тайлов), nam (таблица размещения и окраски тайлов), pal (набор палитр), которые можно использовать для компиляции образа картриджа.
Для ускорения перевода картинки в эти форматы можно нарисовать свой арт в любом удобном редакторе, затем в NESST набрать наборы палитр, экспортировать nametable в bmp (Export > Nametable as BMP file), открыть bmp-файл и скопировать в него свою работу. Далее нужно импортировать получившийся файл обратно в NESST (Import > BMP file as nametable). Всё. У нас будут набиты и расставлены все тайлы, и остаётся только проверить, правильно ли они раскрашены в nametable.
Для компиляции nes-файла воспользуйтесь этими исходниками.
Простая картинка со спрайтами
Так как у Famicom есть аппаратные спрайты, то можно этим воспользоваться для обхода графических ограничений, например, спрайты можно накладывать на фон, чтобы добавить ещё несколько цветов в атрибутную зону и/или чтобы сэкономить место в тайловом наборе для фона.
Цветовые ограничения для спрайтов аналогичны фоновым, только нулевой цвет - прозрачный. Спрайты можно накладывать друг на друга, но злоупотреблять этим не стоит, потому что на одной строке не может быть больше 8 спрайтов.
Для начала скачайте этот архив. Откройте в notepad++ (ни в коем случае не используйте блокнот!) файл 1.asm и на строчках 111 и 112 вы увидите следующее:
LDA #%10010000 ; Спрайты из первого набора, фон - из второго.
; LDA #%10000000 ; спрайты и фон из одного набора
Первый набор - это "CHR bank A" в NESST, а второй - "CHR bank B". Чтобы использовать эти банки оба, вам нужно:
- Оставить эти строчки как есть
- Сохранять графику в CHR 8K bank.
Дальше, на 150 строчке мы увидим следующее:
sprites:
; vert tile attr horiz
; ПРИВЕТ 1
.db $47, $01, $00, $88
.db $47, $02, $00, $90
и т.д.
vert - координата тайла по вертикали
tile - номер тайла
attr - атрибут тайла
horiz - координата тайла по горизонтали
Номер тайла можно узнать так:
Координаты спрайтов... Если ваш редактор не позволяет их узнать, воспользуйтесь, например, GraphicsGale, а потом переведите их в 16-ричный формат при помощи кое-какого режима "Программист" в обычном калькуляторе из Windows.
На рисунке ниже синее - это спрайт, а красная точка - означает место, координаты которого вам нужно узнать.
Хотя если вы планируете расставлять спрайты по сетке 8х8, то эта табличка тоже поможет.
Теперь attr.
Первая цифра определяет положение спрайта по "глубине", т.е. за или перед фоном и другими спрайтами, а также отражает спрайт:
- 4-7 отражение по горизонтали
- 8-B - отражение по вертикали
- C-F – отражение по горизонтали и вертикали.
- 0,1,4,5,8,9,C,D – показывают спрайт поверх фоновых плиток. Остальные — под ними.
Вторая цифра параметра определяет палитру:
- Палитра 0 — 0,4,8,C
- Палитра 1 — 1,5,9,D
- Палитра 2 — 2,6,A,E
- Палитра 3 — 3,7,B,F
Наборы цветов спрайтов отличны от фона, а потому сохранять их нужно в виде отдельного файла pal-sprites.pal.
Нарисуйте в NESST фон, сделайте спрайтовый набор. Задайте координаты спрайтам. Скомпилируйте ром и посмотрите его в эмуляторе.
Гигаскрин. Простой вариант
Исходники для nes-гиги тут. Позволяют использовать два изображения для получения некоего результирующего результата. Каждое изображение имеет свой набор тайлов, свою таблицу их расположения и окраски, свои палитры. Теоретически на экране может быть 145 оттенков одновременно.
Гигаскрин. Простой вариант со спрайтами
Расширенный вариант со спрайтами. Исходники тут.
Задание характеристик спрайтам производится путём редактирования файлов расширения oam в двоичных редакторах.
Первые четыре значения - это первый спрайт, вторые четыре значения - второй спрайт и т.д.
Первая цифра - координата тайла по вертикали, вторая - номер тайла, третья - атрибут тайла (раскраска, отражение, глубина), четвертая - координата тайла по горизонтали.
В атрибуте тайла первая цифра определяет положение спрайта по "глубине", т.е. за или перед фоном и другими спрайтами, а также отражает спрайт:
- 4-7 отражение по горизонтали
- 8-B - отражение по вертикали
- C-F – отражение по горизонтали и вертикали.
- 0,1,4,5,8,9,C,D – показывают спрайт поверх фоновых плиток. Остальные — под ними.
Вторая цифра атрибута тайла определяет палитру:
- Палитра 0 — 0,4,8,C
- Палитра 1 — 1,5,9,D
- Палитра 2 — 2,6,A,E
- Палитра 3 — 3,7,B,F
Интерлейсинг + гигаскрин
Ссылки