Un pixel di una mappa è un byte, e due dei suoi bit sono la luminosità
61 colori di base × 4 tonalità = 244 colori da un array di 16.384 byte. Solo una delle quattro tonalità è il vero colore del blocco; le altre tre sono scurite all'86%, al 71% e al 53%.
Ogni mappa completata in Minecraft ha le stesse dimensioni su disco: un colors byte array of exactly 16,384 voci, ovvero 128 × 128. Questo vale sia per una mappa a scala 0 che copre 128 blocchi, sia per una mappa a scala 4 che copre 2.048 blocchi — il numero di pixel non cambia mai. Tutto il resto della map art deriva da questo singolo fatto.
Il byte si divide in due
Ciascuno di quei 16.384 byte non è un colore. È un colore di base e una tonalità compressi insieme:
baseColorId = colorId >> 2 // 0–63
shadeIndex = colorId & 3 // 0–3
Quindi i due bit inferiori sono la luminosità e il resto rappresenta il blocco che stai guardando. Con 61 colori di base definiti (l'id 0 è lo slot trasparente/inesplorato), il byte più alto contenuto in una mappa reale è 61 × 4 + 3 = 247.
61 × 4 = 244 colori distinti, ovvero l'intera tavolozza disponibile per la map art. Non 61, e non 256.
Solo una tonalità è il colore effettivo del blocco
I quattro moltiplicatori non sono equispaziati, e uno di essi è 1.0:
| indice tonalità | moltiplicatore | in percentuale |
|---|---|---|
| 0 | 180 / 255 | 70.6% |
| 1 | 220 / 255 | 86.3% |
| 2 | 255 / 255 | 100% |
| 3 | 135 / 255 | 52.9% |
Tonalità 2 è il colore della texture del blocco, intatto. Le altre tre sono versioni più scure, e la più scura — la tonalità 3 — è a poco più di metà luminosità.
Questo è il motivo per cui una map art a gradini appare così diversa da una piatta. Una costruzione piatta può produrre solo una di queste quattro per blocco, quindi una mappa piatta ha 61 colori disponibili. Variare l'altezza sblocca le altre tre tonalità di ogni blocco e porta a 244. La tavolozza non diventa più ampia — non ottieni nuove sfumature — diventa quattro volte più profonda nei valori, che è esattamente ciò di cui ha bisogno il dithering.
Nota anche che l'ordine delle tonalità non è monotonico: l'indice 3 è il più scuro, non il più chiaro. Ordinando per indice aspettandosi un gradiente si ottiene 71%, 86%, 100%, 53%.
La scala moltiplica l'area, mai la risoluzione
La scale field runs 0–4, e il terreno che copre è 128 × 2^scale blocks on a side:
| scala | blocchi coperti | un pixel della mappa è |
|---|---|---|
| 0 | 128 × 128 | 1 blocco |
| 1 | 256 × 256 | 2 × 2 blocchi |
| 2 | 512 × 512 | 4 × 4 blocchi |
| 3 | 1,024 × 1,024 | 8 × 8 blocchi |
| 4 | 2,048 × 2,048 | 16 × 16 blocchi — esattamente un chunk |
Una mappa a scala 4 copre 256 volte l'area di una mappa a scala 0 usando gli stessi 16.384 byte. Questo è l'intero motivo per cui la map art deve essere costruita a scala 0: a qualsiasi altro livello di zoom, un pixel è la media di diversi blocchi e l'immagine che hai posizionato con cura viene ricampionata.
Vale la pena ricordare la riga della scala 4 per un altro motivo: un pixel corrisponde esattamente a un chunk, rendendo una mappa completamente ingrandita una griglia di chunk utilizzabile.
Cosa significa per un file corrotto
Se un 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.