Піксель мапи — це один байт, і два його біти — це яскравість
61 базовий колір × 4 відтінки = 244 кольори з масиву на 16 384 байти. Лише один із чотирьох відтінків є справжнім кольором блока; інші три затемнені до 86%, 71% та 53%.
Кожна заповнена мапа в Minecraft має однаковий розмір на диску: це colors byte array of exactly 16,384 записів, тобто 128 × 128. Це стосується як мапи масштабу 0, що покриває 128 блоків, так і мапи масштабу 4, що покриває 2 048 блоків — кількість пікселів ніколи не змінюється. Усе інше про мап-арт випливає з цього одного факту.
Байт ділиться на дві частини
Кожен із цих 16 384 байтів — це не колір. Це базовий колір і відтінок, упаковані разом:
baseColorId = colorId >> 2 // 0–63
shadeIndex = colorId & 3 // 0–3
Тож молодші два біти — це яскравість, а решта вказує на блок, на який ви дивитеся. З 61 визначеними базовими кольорами (id 0 — це прозорий/недосліджений слот), найвищий байт, який містить реальна мапа, становить 61 × 4 + 3 = 247.
61 × 4 = 244 унікальні кольори, що є повною палітрою, доступною для мап-арту. Не 61 і не 256.
Лише один відтінок є справжнім кольором блока
Чотири множники розташовані нерівномірно, і один із них дорівнює 1.0:
| індекс відтінку | множник | у відсотках |
|---|---|---|
| 0 | 180 / 255 | 70.6% |
| 1 | 220 / 255 | 86.3% |
| 2 | 255 / 255 | 100% |
| 3 | 135 / 255 | 52.9% |
Відтінок 2 є незайманим кольором текстури блока. Інші три є темнішими його версіями, а найтемніший — відтінок 3 — має трохи більше ніж половину яскравості.
Ось чому східчастий мап-арт так сильно відрізняється від плаского. Пласка споруда може видати лише один із цих чотирьох варіантів на блок, тому пласка мапа має лише 61 доступний колір. Зміна висоти відкриває інші три відтінки кожного блока і збільшує їх кількість до 244. Палітра не стає ширшою — ви не отримуєте нових тонів — вона стає в чотири рази глибшою за яскравістю, що якраз і потрібно для дизерингу.
Зверніть також увагу, що порядок відтінків не є монотонним: індекс 3 є найтемнішим, а не найяскравішим. Сортування за індексом в очікуванні градієнта дасть вам 71%, 86%, 100%, 53%.
Масштаб збільшує площу, але ніколи не роздільність
Масштаб scale field runs 0–4, а територія, яку він покриває, становить 128 × 2^scale blocks on a side:
| масштаб | покритих блоків | один піксель мапи — це |
|---|---|---|
| 0 | 128 × 128 | 1 блок |
| 1 | 256 × 256 | 2 × 2 блоки |
| 2 | 512 × 512 | 4 × 4 блоки |
| 3 | 1,024 × 1,024 | 8 × 8 блоків |
| 4 | 2,048 × 2,048 | 16 × 16 блоків — рівно один чанк |
Мапа масштабу 4 покриває у 256 разів більшу площу, ніж мапа масштабу 0, використовуючи ті самі 16 384 байти. Саме тому мап-арт потрібно будувати на масштабі 0: за будь-якого іншого наближення один піксель є усередненням кількох блоків, і ретельно викладене вами зображення просто спотвориться через ресемплінг.
Рядок із масштабом 4 варто запам'ятати з іншої причини — один піксель відповідає рівно одному чанку, що перетворює максимально віддалену мапу на зручну сітку чанків.
Що це означає для пошкодженого файлу
Якщо map_<id>.dat has a colors array that is not 16,384 bytes, it is not a map with missing pixels — it is not a readable map at all. There is no partial-length form. The array is always full-size, with unexplored areas stored as colour id 0 rather than omitted.