Pixelrat (обсуждение | вклад) (→Инструкции и исходники) |
Pixelrat (обсуждение | вклад) (→Инструкции и исходники) |
||
Строка 55: | Строка 55: | ||
</spoiler> | </spoiler> | ||
<spoiler text="Простая картинка со спрайтами"> | <spoiler text="Простая картинка со спрайтами"> | ||
− | + | Так как у Famicom есть аппаратные спрайты, то можно этим воспользоваться для обхода графических ограничений, например, спрайты можно накладывать на фон, чтобы добавить ещё несколько цветов в атрибутную зону и/или чтобы сэкономить место в тайловом наборе для фона. | |
+ | |||
+ | Цветовые ограничения для спрайтов аналогичны фоновым, только нулевой цвет - прозрачный. Спрайты можно накладывать друг на друга, но злоупотреблять этим не стоит, потому что на одной строке не может быть больше 8 спрайтов. | ||
+ | |||
+ | Для начала скачайте [[:Файл:nesasm-simplesprites.zip|этот]] архив. Откройте в notepad++ (ни в коем случае не используйте блокнот!) файл 1.asm и на строчках 111 и 112 вы увидите следующее:<br/> | ||
+ | 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 | ||
+ | и т.д.<br/> | ||
+ | |||
+ | vert - координата тайла по вертикали<br/> | ||
+ | tile - номер тайла<br/> | ||
+ | attr - атрибут тайла<br/> | ||
+ | horiz - координата тайла по горизонтали<br/> | ||
+ | |||
+ | Номер тайла можно узнать так:<br/> | ||
+ | [[File:nes-spr-1.png|600px]] | ||
+ | |||
+ | Координаты спрайтов... Если ваш редактор не позволяет их узнать, воспользуйтесь, например, GraphicsGale, а потом переведите их в 16-ричный формат при помощи кое-какого режима "Программист" в обычном калькуляторе из Windows. | ||
+ | |||
+ | На рисунке ниже синее - это спрайт, а красная точка - означает место, координаты которого вам нужно узнать. | ||
+ | |||
+ | [[File:nes-spr-2.png]] | ||
+ | |||
+ | Хотя если вы планируете расставлять спрайты по сетке 8х8, то [[:Файл:tablekoordinat.ods|эта]] табличка тоже поможет. | ||
+ | |||
+ | Теперь ''attr''.<br/> | ||
+ | Первая цифра определяет положение спрайта по "глубине", т.е. за или перед фоном и другими спрайтами, а также отражает спрайт: | ||
+ | * 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 фон, сделайте спрайтовый набор. Задайте координаты спрайтам. Скомпилируйте ром и посмотрите его в эмуляторе. | ||
+ | |||
+ | <gallery widths="128" heights="96"> | ||
+ | Файл:Пейзаж by pixelrat.png|[[:Файл:landscape.zip|сурсы]] | ||
+ | Файл:violet_eye_by_pixelrat_x2.png|[[:Файл:eye.zip|сурсы]] | ||
+ | Файл:volk-kuchemal_by_pixelrat_x2.png|[[:Файл:kuchemal.zip|сурсы]] | ||
+ | </gallery> | ||
</spoiler> | </spoiler> | ||
<spoiler text="Гигаскрин. Простой вариант"> | <spoiler text="Гигаскрин. Простой вариант"> |
Версия 12:50, 27 января 2019
Разрешение: 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.
Примеры работ
Инструменты
Инструкции и исходники
Гигаскрин. Простой вариант со спрайтами