Графическая система тайловая, т.е. данные изображения хранятся в виде плиток 8х8. Для окрашивания тайлов имеется 4 набора по 4 цвета на фон (один из них общий) + 4 наборов по 3 цвета (не считая прозрачного) на спрайты. Цветовые наборы применяются к атрибутной зоне 16х16. Таким образом, на экране может быть максимум 25 цветов.
Платформа имеет аппаратные спрайты: 64 штуки размером 8х8 или 8х16, не более 8 спрайтов на строке. Спрайты могут быть отражены по вертикали или горизонтали. Спрайты могут браться из своего набора тайлов или из фонового набора.
Famicom способен одновременно отображать 256 уникальных тайлов фона.
Нарисовать простую картинку с ограничением в 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 фон, сделайте спрайтовый набор. Задайте координаты спрайтам. Скомпилируйте ром и посмотрите его в эмуляторе.