Guías / Construcción y recursos
Un píxel de mapa es un byte, y dos de sus bits son brillo
61 colores base × 4 tonos = 244 colores a partir de un arreglo de 16.384 bytes. Solo uno de los cuatro tonos es el valor pleno del color; los otros tres se oscurecen al 86%, 71% y 53%.
Cada mapa lleno en Minecraft ocupa lo mismo en disco: un arreglo de colors bytes de exactamente 16.384 entradas, es decir 128 × 128. Eso vale tanto para un mapa de escala 0 que cubre 128 bloques como para uno de escala 4 que cubre 2.048 bloques: la cantidad de píxeles nunca cambia. Todo lo demás sobre el arte de mapas se desprende de ese único hecho.
El byte se parte en dos
Cada uno de esos 16.384 bytes no es un color. Es un color base y un tono empaquetados juntos:
baseColorId = colorId >> 2 // 0–63
shadeIndex = colorId & 3 // 0–3
Así que los dos bits bajos son el brillo y el resto indica qué bloque estás mirando. Con 61 colores base definidos (el id 0 es la ranura transparente/sin explorar), el byte más alto que un mapa real almacena es 61 × 4 + 3 = 247.
61 × 4 = 244 colores distintos, que es la paleta completa disponible para el arte de mapas. Ni 61 ni 256.
Solo un tono es el valor pleno del color
Los cuatro multiplicadores no están espaciados de forma uniforme, y uno de ellos es 1,0:
| índice de tono | multiplicador | como porcentaje |
|---|---|---|
| 0 | 180 / 255 | 70,6% |
| 1 | 220 / 255 | 86,3% |
| 2 | 255 / 255 | 100% |
| 3 | 135 / 255 | 52,9% |
El tono 2 es el RGB propio del color de mapa, sin escalar: un valor fijo por id de color, no muestreado de la textura del bloque. Los otros tres son versiones más oscuras de él, y el más oscuro —el tono 3— tiene apenas un poco más de la mitad del brillo.
Por eso el arte de mapas escalonado se ve tan distinto del plano. Una construcción plana produce solo el tono normal (86%), así que un mapa plano tiene 61 colores disponibles. Variar la altura desbloquea los tonos más claros y más oscuros de cada bloque y te lleva a 183. La paleta no se vuelve más amplia — no obtienes tonos nuevos— sino tres veces más profunda en valor, que es justo lo que el tramado necesita. El cuarto tono (53%) nunca se produce a partir de bloques: existe en el formato de byte, y solo lo usa un archivo de mapa editado.
Fíjate también en que el orden de los tonos no es monótono: el índice 3 es el más oscuro, no el más claro. Ordenar por índice y esperar un degradado te da 71%, 86%, 100%, 53%.
La escala multiplica el área, nunca la resolución
El campo scale va de 0 a 4, y el terreno que cubre es de 128 × 2^scale bloques por lado:
| escala | bloques cubiertos | un píxel de mapa es |
|---|---|---|
| 0 | 128 × 128 | 1 bloque |
| 1 | 256 × 256 | 2 × 2 bloques |
| 2 | 512 × 512 | 4 × 4 bloques |
| 3 | 1.024 × 1.024 | 8 × 8 bloques |
| 4 | 2.048 × 2.048 | 16 × 16 bloques — exactamente un chunk |
Un mapa de escala 4 cubre 256 veces el área de uno de escala 0 usando los mismos 16.384 bytes. Esa es la razón de que el arte de mapas tenga que construirse a escala 0: con cualquier otro zoom, un píxel es el promedio de varios bloques y la imagen que colocaste con tanto cuidado se pierde al remuestrearse.
La fila de escala 4 vale la pena recordarla por otro motivo: un píxel es precisamente un chunk, lo que convierte a un mapa con el zoom al máximo en una cuadrícula de chunks utilizable.
Qué significa esto para un archivo corrupto
Si un archivo de mapa (data/minecraft/maps/<id>.dat en la carpeta del mundo) tiene un arreglo colors que no mide 16.384 bytes, no es un mapa con píxeles faltantes: el juego igual carga el mapa, pero descarta los píxeles y lo muestra en blanco. No existe una forma de longitud parcial. El arreglo siempre es de tamaño completo, y las zonas sin explorar se guardan como id de color 0 en lugar de omitirse.