地図のピクセルは1バイト、そのうち2ビットが明るさ
61種類の基本色 × 4段階の濃淡 = 244色。16,384バイトの配列から生成されます。4段階の濃淡のうち、ブロック本来の色は1つだけで、残りの3つは86%、71%、53%に暗くされています。
Minecraftの埋められた地図はすべて、ディスク上では同じ大きさです。正確に16,384エントリ、つまり128 × 128のcolorsバイト配列です。これは、128ブロックをカバーする大きさ0の地図でも、2,048ブロックをカバーする大きさ4の地図でも同じで、ピクセル数は決して変わりません。地図アートに関する他のすべてのことは、この事実から派生しています。
バイトが2つに分割される
これらの16,384バイトのそれぞれは、色ではありません。基本色と濃淡が一緒にパックされています。
baseColorId = colorId >> 2 // 0–63
shadeIndex = colorId & 3 // 0–3
下位2ビットが明るさで、残りがどのブロックを見ているかを示します。61種類の基本色(ID 0は透明/未探索のスロット)が定義されているため、実際の地図が保持する最大のバイトは61 × 4 + 3 = 247です。
61 × 4 = 244種類の異なる色。これが地図アートで利用できる全パレットです。61色でも256色でもありません。
ブロックの実際の色は1つの濃淡だけ
4つの乗数は均等に配置されておらず、そのうちの1つは1.0です。
| 濃淡インデックス | 乗数 | パーセンテージ |
|---|---|---|
| 0 | 180 / 255 | 70.6% |
| 1 | 220 / 255 | 86.3% |
| 2 | 255 / 255 | 100% |
| 3 | 135 / 255 | 52.9% |
濃淡2はブロックのテクスチャの色で、手つかずのままです。他の3つはそれよりも暗いバージョンで、最も暗い濃淡3は明るさの半分強しかありません。
これが、階段状の地図アートが平らなものと大きく異なる理由です。平らな建築では、ブロックごとにこれら4つのうち1つしか生成できないため、平らな地図で利用できる色は61色です。高さを変えることで、すべてのブロックの他の3つの濃淡が解放され、244色になります。パレットが広がるわけではありません(新しい色相は得られません)。値の深さが4倍になり、これはディザリングに必要なものです。
また、濃淡の順序は単調ではありません。インデックス3が最も明るいのではなく、最も暗いです。インデックスでソートしてグラデーションを期待すると、71%、86%、100%、53%になります。
大きさは面積を乗算するが、解像度は決して乗算しない
scaleフィールドは0~4で、カバーする地面は128 × 2^scaleブロックです。
| 大きさ | カバーするブロック | 地図の1ピクセルは |
|---|---|---|
| 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ブロック — ちょうど1チャンク |
大きさ4の地図は、同じ16,384バイトを使用して、大きさ0の地図の256倍の面積をカバーします。これが、地図アートを大きさ0で作成する必要がある唯一の理由です。他のズームでは、1ピクセルが複数のブロックの平均となり、慎重に配置した画像がリサンプリングされてしまいます。
大きさ4の行は別の理由で覚えておく価値があります。1ピクセルが正確に1チャンクであるため、完全にズームされた地図は使用可能なチャンクグリッドになります。
ファイル破損の意味
map_<id>.datのcolors配列が16,384バイトでない場合、それはピクセルが欠落した地図ではなく、まったく読み取り可能な地図ではありません。部分的な長さの形式はありません。配列は常にフルサイズで、未探索の領域は省略されるのではなく、色ID 0として保存されます。