ラテーラのマイクラブログ

冒険・建築・自動化・検証といろいろやってます

地図検証

f:id:laterraing:20190607232033p:plain

1.91から地図の仕様が変わり、少しややこしくなったので調べてみました

 

世界のサイズ

これは以前から変わりませんが、今回の説明のために一応記載しておきます

最初に持っている地図は世界サイズ小と同じ大きさになります

各サイズは以下の通り

  • 大:5120×5120ブロック、最初の地図25枚分の大きさ
  • 中:3072×3072ブロック、最初の地図9枚分の大きさ
  • 小:1024×1024ブロック、最初の地図1枚分の大きさ
  • クラシック:864×864ブロック(以下クラシックは検証から省略)

図に表すとこのようになります

f:id:laterraing:20190607204849p:plain

 

地図の縮小

新たに地図を作成すると最も拡大された地図(縮小レベル0)が出来ます

f:id:laterraing:20190607123517p:plain

領域は128×128ブロック分になります

 

そして地図は最大4段階縮小することができます

縮小レベル1(1:2、256×256ブロック)

f:id:laterraing:20190607123608p:plain

 

縮小レベル2(1:4、512×512ブロック)

f:id:laterraing:20190607123655p:plain

 

縮小レベル3(1:8、1024×1024ブロック)

最初にもらえる地図はこのサイズになります

f:id:laterraing:20190607123820p:plain

 

縮小レベル4(1:16、2048×2048ブロック)

f:id:laterraing:20190607123855p:plain

 

各地図の配置図

地図はプレイヤーの現在地を中心として作成されるわけではなく、あらかじめ配置が決められています

縮小レベルごとに地図の配置を図に表してみました

 

縮小レベル0 

 赤色枠:縮小レベル3の地図の配置

 灰色枠:縮小レベル0の地図の配置

f:id:laterraing:20190607123501p:plain

X,Z:0,0を中心に地図が配置されるので世界の端の地図は半分だけ表示されます

縮小レベル0の地図で世界地図を作るには以下の枚数必要になります

  • 世界サイズ大:1681枚
  • 世界サイズ中:625枚
  • 世界サイズ小:81枚

 

縮小レベル1 

 赤色枠:縮小レベル3の地図の配置

 緑色枠:縮小レベル1の地図の配置

f:id:laterraing:20190607123557p:plain

縮小レベル1の地図で世界地図を作るには以下の枚数必要になります

  • 世界サイズ大:441枚
  • 世界サイズ中:169枚
  • 世界サイズ小:25枚

 

縮小レベル2 

 赤色枠:縮小レベル3の地図の配置

 青色枠:縮小レベル2の地図の配置

f:id:laterraing:20190607123640p:plain

縮小レベル2の地図で世界地図を作るには以下の枚数必要になります

  • 世界サイズ大:121枚
  • 世界サイズ中:49枚
  • 世界サイズ小:9枚

 

縮小レベル3 

 赤色枠:縮小レベル3の地図の配置

f:id:laterraing:20190607123804p:plain

縮小レベル3の地図で世界地図を作るには以下の枚数必要になります

  • 世界サイズ大:25枚
  • 世界サイズ中:9枚
  • 世界サイズ小:1枚

 

縮小レベル4 

 赤色枠:縮小レベル3の地図の配置

 黄色枠:縮小レベル4の地図の配置

f:id:laterraing:20190607123844p:plain

縮小レベル4の地図で世界地図を作るには以下の枚数必要になります

  • 世界サイズ大:9枚
  • 世界サイズ中:9枚
  • 世界サイズ小:1

 

縮小の検証

馴染みのある縮小レベル3の地図(以下、[3]地図というように表記)を作成するには[0]地図を3段階縮小すれば出来ますが、決まった場所の地図でないと狙い通りに作れません

そこで、順を追って図解していきたいと思います

 

例えば、太枠の位置が作りたい[3]地図の位置だとします

f:id:laterraing:20190607172400p:plain
 

[3]地図を作るには[2]地図が必要です

[2]地図の配置は青色の枠になり、水色で塗りつぶされた範囲のいずれかの[2]地図を縮小すれば赤枠の位置の[3]地図が作成出来ます

f:id:laterraing:20190607172738p:plain


同様に先ほどの[2]地図を作るには薄緑色で塗りつぶされた範囲の[1]地図を、

f:id:laterraing:20190607173355p:plain

 

[1]地図を作るには灰色で塗りつぶされた範囲の[0]地図を縮小すると出来ます

f:id:laterraing:20190607173718p:plain

 

よって、[3]地図(赤枠)を作るには灰色で塗りつぶされた範囲のいずれかの[0]地図が最初に必要ということになります

f:id:laterraing:20190607173955p:plain

まぁ★の位置で地図を作成・縮小するのが一番わかりやすいですかね

逆に言えば赤枠内でも灰色の範囲外の地図を縮小すると、狙いとは違った場所の地図が作られてしまうというわけですね

地図の中央値

作成したい地図の中央値がわかれば間違いなく狙い通りの地図を作ることが出来ます

ということで、わかりやすいように縮小レベル3の地図の中央値を図に表してみました

f:id:laterraing:20190607180343p:plain

きっちり座標を合わせなくても誤差は128までであれば問題ないです

ただ、中央に行くより別の位置で作成した方が短距離で済む場合もあるので、あくまで確実な方法として紹介しておきます

 

また、現在いる座標から現在地を含む地図(縮小レベル0)の中央値を算出することができます

計算方法は以下の通り(公式Wikiより)

 座標+64が0または正の値の場合:

    int((n+64)÷128)×128

 座標+64が負の値の場合:

    int((n-63)÷128)×128

 nは現在いるX座標もしくはZ座標、int()は小数点以下を切り捨て

 

応用して他の縮小レベルの地図でも中央値を算出できるよう計算式を作ってみました

 

縮小レベル1

 座標+128が0または正の値の場合:

    int((n+128)÷256)×256

 座標+128が負の値の場合:

    int((n-127)÷256)×256

 

縮小レベル2

 座標+256が0または正の値の場合:

    int((n+256)÷512)×512

 座標+256が負の値の場合:

    int((n-255)÷512)×512

 

縮小レベル3

 座標+512が0または正の値の場合:

    int((n+512)÷1024)×1024

 座標+512が負の値の場合:

    int((n-511)÷1024)×1024

 

縮小レベル4

 座標+1024が0または正の値の場合:

    int((n+1024)÷2048)×2048

 座標+1024が負の値の場合:

    int((n-1023)÷2048)×2048

 

長々と書きましたが、空白の地図のまま縮小レベルを変えられたら、こんな苦労はしなくて済むんですけどね^^;

今後のアプデでその仕様が追加されることを望みます