Увидел на форуме тему «Написания распаковщика графики для Dendy». Эта тема натолкнула меня на мысль, а какое устройство у несжатой графики в Hex-редакторе. Так сказать, каким образом она хранится в роме игры. В этой теме я попробую это выяснить и заодно то, как она хранится на других приставках.
Как и в случае с моей статьёй «Sega MegaDrive палитра» умных слов не будет, и я постараюсь максимально понятно объяснить методы хранения несжатой графики.
Надеюсь, многим моя статья будет полезна и интересна.
1BPP (Метод хранение несжатой графики 1BPP)
GB/GBC (Метод хранение несжатой графики в играх для GB/GBC)
GBA (Метод хранение несжатой графики в играх для GBA)
SMS/GG (Метод хранение несжатой графики в играх для SMS/GG)
SNES (Метод хранение несжатой графики в играх для SNES)
Sega 32X (Метод хранение несжатой графики в играх для Sega 32X) 8-bit (color indices) (A1B5G5R5)
PSX (TIM 4-bit (color indices))
PSX (TIM 8-bit (color indices))
PSX (TIM 16-bit (actual colors) [TBGR / A1B5G5R5])
PSX (TIM 24-bit (actual colors) [RGB / R8G8B8])
Sega MegaDrive / Sega CD
Метод хранение несжатой графики в играх для SMD / SCD
Так же используется и в играх для Sega 32X.
Для простоты будем рассматривать один тайл. Размер одного тайла 8 на 8 пикселей. То есть один тайл содержит в себе 64 пикселя. (Тайл может содержать в себе 16 различных цветов (15+цвет фона))
Как на мой взгляд, у SMD довольно простая система хранения графики. Но в связи с этим, графика занимает не мало места в роме. Для хранения одного тайла нужно 32 байта.
В свою очередь один пиксель занимает пол байта или 4 бита.
Как я писал раньше, тайл может содержать в себе 16 различных цветов. Каждый пиксель должен соответствовать какому-то цвету. Палитра тайлам присваивается позже, поэтому каждый пиксель соответствует месту в палитре (номеру цвета). От 0 до F (в шестнадцатеричной системе счисления).
Пример для лучшего понимания.
Тут всё посложнее, чем в случае с SMD, но я постараюсь разъяснить.
Nintendo Entertainment System
Метод хранение несжатой графики в играх для NES
Как и в прошлый раз, в качестве примера будет рассматривать один тайл. Один тайл состоит из 64 пикселей. (Тайл содержит в себе всего 4 цвета, а фактически три (3+цвет фона)).
Для хранения одного тайла нужно 16 байт.
Один пиксель занимает два (2) бита. При этом система хранения довольно интересная. Это связано с тем, что нам нужно хранить данные о четырёх цветах, а не о двух, иначе было бы намного проще.
Данный тайла разделены на две области по 8 байт или 64 бита.
01111111, 11111111, 11111111, 11111111, 11111111, 11111111, 11111111, 11111111, 11111111,
01111111, 11111111, 11111111, 11111111, 11111111, 11111111, 11111111, 11111111, 11111111
Месту каждого пикселя соответствует его «порядковый номер» в битах. То есть первому пикселю соответствует первый бит первой и второй группы бит. Последнему пикселю соответствует последний (64) бит в обеих группах бит. Объяснить это сложно, лучше посмотреть на картинку, нагляднее намного понятнее.
10000000 00000000 00000000 00010000 00000000 00000000 00000000 00000001
10000000 00000000 00000000 00001000 00000000 00000000 00000000 00000001
Пиксели назначаются (обозначаются) следующим образом:
Первый цвет соответствует значению 0 0 (Условно прозрачный)
Второй цвет соответствует значению 1 0
Третья цвет соответствует значению 0 1
Четвёртая цвет соответствует значению 1 1