Piksel Mapy to jeden bajt, a dwa jego bity to jasność
61 kolorów bazowych × 4 odcienie = 244 kolory z tablicy 16 384 bajtów. Tylko jeden z czterech odcieni to prawdziwy kolor bloku; pozostałe trzy są przyciemnione do 86%, 71% i 53%.
Każda wypełniona Mapa w Minecrafcie ma ten sam rozmiar na dysku: tablica colors bajtów, dokładnie 16 384 wpisów, czyli 128 × 128. Dotyczy to Mapy o wielkości 0, obejmującej 128 bloków, i Mapy o wielkości 4, obejmującej 2048 bloków — liczba pikseli nigdy się nie zmienia. Wszystko inne w sztuce Mapy wynika z tego jednego faktu.
Bajt dzieli się na dwie części
Każdy z tych 16 384 bajtów nie jest kolorem. Jest to kolor bazowy i odcień spakowane razem:
baseColorId = colorId >> 2 // 0–63
shadeIndex = colorId & 3 // 0–3
Tak więc dwa najniższe bity to jasność, a reszta to blok, na który patrzysz. Zdefiniowano 61 kolorów bazowych (id 0 to przezroczyste/nieodkryte miejsce), więc najwyższy bajt, jaki zawiera prawdziwa Mapa, to 61 × 4 + 3 = 247.
61 × 4 = 244 różne kolory, co stanowi całą paletę dostępną dla sztuki Mapy. Nie 61, i nie 256.
Tylko jeden odcień to rzeczywisty kolor bloku
Cztery mnożniki nie są równomiernie rozmieszczone, a jeden z nich to 1.0:
| indeks odcienia | mnożnik | jako procent |
|---|---|---|
| 0 | 180 / 255 | 70.6% |
| 1 | 220 / 255 | 86.3% |
| 2 | 255 / 255 | 100% |
| 3 | 135 / 255 | 52.9% |
Odcień 2 to kolor tekstury bloku, nienaruszony. Pozostałe trzy to jego ciemniejsze wersje, a najciemniejszy — odcień 3 — to tylko nieco ponad połowa jasności.
Dlatego sztuka Mapy zbudowana na schodach wygląda tak inaczej niż płaska. Płaska konstrukcja może zawsze wytworzyć tylko jeden z tych czterech odcieni na blok, więc płaska Mapa ma dostępne 61 kolorów. Zmienianie wysokości odblokowuje pozostałe trzy odcienie każdego bloku i przenosi Cię do 244. Paleta nie staje się szersza — nie otrzymujesz nowych barw — staje się czterokrotnie głębsza pod względem wartości, co jest dokładnie tym, czego potrzebuje dithering.
Zauważ również, że kolejność odcieni nie jest monotoniczna: indeks 3 jest najciemniejszy, a nie najjaśniejszy. Sortowanie według indeksu i oczekiwanie gradientu daje 71%, 86%, 100%, 53%.
Wielkości mnoży obszar, nigdy rozdzielczość
Pole scale przyjmuje wartości 0–4, a obszar, który pokrywa, to 128 × 2^scale bloków na stronę:
| wielkości | pokryte bloki | jeden piksel Mapy to |
|---|---|---|
| 0 | 128 × 128 | 1 blok |
| 1 | 256 × 256 | 2 × 2 bloki |
| 2 | 512 × 512 | 4 × 4 bloki |
| 3 | 1,024 × 1,024 | 8 × 8 bloków |
| 4 | 2,048 × 2,048 | 16 × 16 bloków — dokładnie jeden chunk |
Mapa o wielkości 4 pokrywa 256 razy większy obszar niż Mapa o wielkości 0, używając tych samych 16 384 bajtów. To jest cały powód, dla którego sztuka Mapy musi być budowana w wielkości 0: przy każdym innym powiększeniu jeden piksel to średnia z kilku bloków, a obraz, który starannie umieściłeś, jest ponownie próbkowany.
Wiersz dla wielkości 4 warto zapamiętać z innego powodu — jeden piksel to dokładnie jeden chunk, co sprawia, że w pełni powiększona Mapa jest użyteczną siatką chunków.
Co to oznacza dla uszkodzonego pliku
Jeśli map_<id>.dat ma tablicę colors, która nie ma 16 384 bajtów, nie jest to Mapa z brakującymi pikselami — w ogóle nie jest to czytelna Mapa. Nie ma formy o częściowej długości. Tablica jest zawsze pełnowymiarowa, z nieodkrytymi obszarami przechowywanymi jako id koloru 0, a nie pominiętymi.