Um pixel de Mapa é um byte, e dois de seus bits são brilho
61 cores base × 4 tons = 244 cores de um array de 16.384 bytes. Apenas um dos quatro tons é a cor real do bloco; os outros três são escurecidos para 86%, 71% e 53%.
Todo mapa preenchido no Minecraft tem o mesmo tamanho em disco: um array de colors bytes com exatamente 16.384 entradas, que é 128 × 128. Isso é verdade para um mapa de Escala 0 cobrindo 128 blocos e um mapa de Escala 4 cobrindo 2.048 blocos — a contagem de pixels nunca muda. Todo o resto sobre a arte de Mapa decorre desse único fato.
O byte se divide em dois
Cada um desses 16.384 bytes não é uma cor. É uma cor base e um tom empacotados juntos:
baseColorId = colorId >> 2 // 0–63
shadeIndex = colorId & 3 // 0–3
Então os dois bits de menor valor são o brilho e o restante é qual bloco você está olhando. Com 61 cores base definidas (o ID 0 é o slot transparente/inexplorado), o byte mais alto que um Mapa real contém é 61 × 4 + 3 = 247.
61 × 4 = 244 cores distintas, que é a paleta inteira disponível para a arte de Mapa. Não 61, e não 256.
Apenas um tom é a cor real do bloco
Os quatro multiplicadores não são igualmente espaçados, e um deles é 1.0:
| índice do tom | multiplicador | em porcentagem |
|---|---|---|
| 0 | 180 / 255 | 70.6% |
| 1 | 220 / 255 | 86.3% |
| 2 | 255 / 255 | 100% |
| 3 | 135 / 255 | 52.9% |
O tom 2 é a cor da textura do bloco, intocada. Os outros três são versões mais escuras dela, e o mais escuro — tom 3 — é apenas um pouco mais da metade do brilho.
É por isso que a arte de Mapa em escadaria parece tão diferente de uma arte plana. Uma construção plana só pode produzir um desses quatro por bloco, então um Mapa plano tem 61 cores disponíveis. Variar a altura desbloqueia os outros três tons de cada bloco e leva você a 244. A paleta não fica mais ampla — você não obtém novos matizes — ela fica quatro vezes mais profunda em valor, que é exatamente o que o pontilhamento (dithering) precisa.
Observe também que a ordem dos tons não é monotônica: o índice 3 é o mais escuro, não o mais brilhante. Ordenar por índice e esperar um gradiente resulta em 71%, 86%, 100%, 53%.
A Escala multiplica a área, nunca a resolução
O campo scale varia de 0 a 4, e a área que ele cobre é de 128 × 2^scale blocos por lado:
| Escala | blocos cobertos | um pixel de Mapa é |
|---|---|---|
| 0 | 128 × 128 | 1 bloco |
| 1 | 256 × 256 | 2 × 2 blocos |
| 2 | 512 × 512 | 4 × 4 blocos |
| 3 | 1.024 × 1.024 | 8 × 8 blocos |
| 4 | 2.048 × 2.048 | 16 × 16 blocos — exatamente um chunk |
Um Mapa de Escala 4 cobre 256 vezes a área de um Mapa de Escala 0 usando os mesmos 16.384 bytes. Essa é a razão pela qual a arte de Mapa precisa ser construída na Escala 0: em qualquer outro zoom, um pixel é uma média de vários blocos e a imagem que você cuidadosamente colocou é reamostrada.
A linha da Escala 4 vale a pena ser lembrada por uma razão diferente — um pixel é precisamente um chunk, o que torna um Mapa totalmente ampliado uma grade de chunks utilizável.
O que isso significa para um arquivo corrompido
Se um map_<id>.dat tem um array colors que não é de 16.384 bytes, não é um Mapa com pixels faltando — não é um Mapa legível de forma alguma. Não existe forma de comprimento parcial. O array é sempre de tamanho completo, com áreas inexploradas armazenadas como ID de cor 0 em vez de omitidas.