Экраны.
Часть первая, теоретическая, всем известная. можно сразу переходить ко второй - практической части.
Если со спрайтами все понятно - мелкие фрагменты от 1х1 тайла до полноприводных 4х4, то с экранами маленько сложнее. Эти самые экраны состоят из трех частей, ладно, четырех:
1. палитра
2. тайловый сет
3. тайловая карта
4. режимы работы
С палитрой и отчасти с тайловым сетом мы встречались еще во времена спрайтов и там как бы все понятно, но что еще за тайловая карта? Это по сути матрица, с инструкциями как на ней расположены тайлы друг за другом. Там каждому тайлу на изображении дополнительно указываются его параметры:
номер тайла из тайлового сета
приоритет
палитра
зеркало по Х
зеркало по У
Эти параметры заключены в двух байтах. то есть для каждого тайла в тайловой карте выделено по 2 байта. Чтобы было понятнее надо эти два байта показать в бинарном виде:
![](https://i124.fastpic.org/big/2024/1024/a8/74547dde546473e5155b4a84992bdca8.png)
Конечно на данном этапе возникнет вопрос: да нахрена это надо? просто загрузил PNG картинку и пользуйся! С точки зрения современного пользователя, насмотревшегося всяких 4к на ютубах это прям очень даже не понятно, но вот в те времена, когда трава была зеленее - железо только только начинало развиваться и поэтому тогдашние инженеры выкручивались как могли чтобы сделать и подешевле и чтоб возможности были вполне себе конкурентными, чтобы нинденду обниндендить. Вот и пришли они к тому, что приставка будет иметь 4 палитры - то есть 2 бита из тех 16 бит в тайловой карте (00, 01, 10, 11 - 0, 1, 2, 3 номера палитр) и 11 бит под тайловый номер (а 11 бит это %111 1111 1111 или $7FF в хекс или 2047 в десятичных - 2047 возможных тайла)
В принципе такая куча тайлов не так уж и мала и есть куда разгуляться... НО! под видеопамять у нас выделено всего 65 килобайт в приставке. Плюс еще помимо самих тайлов в этой-же памяти должны болтаться две тайловые карты под два слоя картинки и еще должна болтаться таблица спрайтов. Получается полноценно втулить изображение может нехватить памяти - ведь под каждый тайл надо по 32 байта (напомню: в одном байте 2 пикселя и поэтому 8 строк помножить на 8 столбиков = не 64, а 32). Вот с точки зрения спрайтов, где тайлы должны идти друг за другом - все плохо. А вот с точки зрения экранов - маленько получше, так как тут инженеры припасли трюки ушами. Во первых - кто сказал, что нумерация тайлов обязательно должна быть 1 тайл, 2 тайл, 3 тайл, 4 тайл, 5...... ? Можно оптимизировать изображение. Совсем необязательно чтобы у картинки были все тайлы уникальные. Можно взять и сделать сравнение тайлов и если 1 и 2 тайл одинаковые, то значит можно в тайловой карте для второго тайла указать то, что он будет использовать 1 номер тайла и картинка будет точно такая-же как и была, то есть ничего не потеряет. Тоже самое касается каждого тайла относительно всех остальных тайлов на изображении - надо прогнать по всей картинке и выкинуть повторяющиеся тайлы. Иными словами - эти тайловые карты позволяют нам сжимать изображение. В результате тайловый сет может занимать меньше памяти, чем ежели бы он был без этого "сжатия" напрямую. Второй трюк заключается в использовании зеркал, что может сжать тайловый сет еще больше, то есть тайл может быть перевернут на изображении - скажем по вертикали, или даже и по вертикали и по горизонтали.
Вот на флаге моей страны - Казахстана есть повторяющиеся элементы. Если в первом случае все тайлы уникальные это займет 32 тайла, а во втором повторяющиеся будут отсечены - их станет 14. А если еще проверить тайлы на зеркала, а в данном случае по вертикали - то можно еще 2 тайла отсечь и по итогу тайлов станет 12. Вот в этом суть использования тайловых карт.
![](https://i124.fastpic.org/big/2024/1024/a7/e72c5c852e6defb696f4283816b36aa7.png)
С палитрой тоже все понятно - каждому тайлу в тайловой карте можно указать какую именно палитру он будет использовать.
А бит приоритета регулирует где этот тайл на экране будет находится по отношению к спрайту. Где-то было видео из Дюны, где автор рассказывал про этот приоритет и демонстрировал, как юнит мог заехать в заросли - то есть элемент ландшафта мог визуально спрятать юнита от глаз игрока (радару и компьютеру конечно пофиг - найдет и покарает в любом случае
![Улыбка :)](//www.emu-land.net/forum/Smileys/default/smiley.gif)
) Или если это игра-бродилка, то таким приоритетом можно было бы рисовать колонны в здании например, которые бы скрывали персонажа во время ходьбы, добавляя сцене глубины.
Что касается режимов работы экрана, то это касается размеров экранов в зависимости PAL и NTSC, а так-же выбранного режима - H40 или H32. Тут позволю себе копирнуть из интернетов:
NTSC:
Режим H40 — 320x224 пикселя (40x28 тайлов). Самый распространённый режим разрешения
Режим H32 — 256x224 пикселей (32x28 тайлов). Менее популярный режим разрешения
PAL:
Режим H40 — 320x240 пикселей (40x30 тайлов). Самый распространённый режим разрешения
Режим H32 — 256x240 пикселей (32x30 тайлов). Менее популярный режим разрешения