村人が消える
マイクラ統合版でよく聞くバグとして、村人や動物が消えるという現象があります。
私のYoutubeチャンネルでもアイアンゴーレムトラップや村人施設の動画を出すと
「湧き潰しをしっかりしているのに村人が居なくなりました。」
「飼っている動物が消えました。」
といったコメントを割と頻繁にいただきます。
ですが私のプレイ環境(PC)ではこの現象が起こったことがなく、原因もわからないので(まぁケースバイケースで原因がちがうバグだろう)くらいに思ってスルーしてました。
で、ちゃんと検証してみたところしっかりと原因を特定(と推測)できたので、本稿で原因と対策を説明していきます。
【追記】
1.18で本稿で検証した村人消失バグが修正された、とパッチノートに記述が・・・
▶【マイクラ統合版】1.18アップデート「Caves&Criffs Part.2」の気になる変更点
しかしながら、実際にはエンティティの保存不具合という新たな消失バグが存在し、こちらは1.18.10アップデートで修正された模様です。
▶1.18.10更新ログ
原因はチャンク毎のバックアップと不正終了
ランダムタイミングのバックアップ
マイクラ統合版には実は内部的に2つのセーブデータがあり、ひとつは「セーブして終了」もしくは「オートセーブ」で保存される一般的なセーブデータ、もうひとつは裏でこっそり保存されているバックアップデータ。
バックアップデータは見た目上はなんの表示もなく記録されるため、普通にプレイしていて意識することはまずありません。
またバックアップはチャンクごとにランダムに行われることも検証からわかっています。
バックアップは不正終了時に活用される
バックアップデータは通常のセーブデータが保存されると破棄されます。
通常は「セーブして終了」からプレイを終え、プレイを再開する場合は通常のセーブデータに復帰するためバックアップを意識することはありません。
ではなぜバックアップを保存しているのかというと、不正終了時の復帰用です。
マイクラ統合版における不正終了とは、エラー落ちや強制終了などの「正規のセーブを行わずにアプリを終了する」こと。
Switchなどの比較的スペックが低いハードで起きるエラー落ち、androidやiOSでやりがちなホームボタンスリープ後のタスクキルなどでセーブデータが保存されずにアプリが終了した場合に、次回のロードが直近のバックアップへの復帰となります。
バックアップへの復帰で村人が消える理由
では、本来はプレイデータの損失を防ぐ救済機能であるバックアップ機能で村人が消えるのはなぜなのでしょうか。
村人がチャンクを跨ぐタイミングとバックアップ
例えば村人が2つのチャンク(AとB)に跨ったスペースを自由に歩き回れる場合。
当然村人は、ランダムウォークの過程でチャンクAとBを行き来することがあります。
この時、村人がチャンクを跨いで移動するタイミングとは別にチャンク別にランダムなタイミングでバックアップが走っているため、無作為にこれらの状況が発生する可能性があります。
- 村人:チャンクA バックアップ:チャンクA
- 村人:チャンクA バックアップ:チャンクB
- 村人:チャンクB バックアップ:チャンクA
- 村人:チャンクB バックアップ:チャンクB
そして何らかの原因で不正終了すると直近のバックアップに復帰するわけですが、この時のバックアップが偶然、上記の2と3の組み合わせだったら・・・
『どちらのチャンクのバックアップにも村人が居ない=村人が消える。』
という状況が発生するわけです。
村人が増えることはない
この理屈でいけばバックアップが1と4の組み合わせだった場合には村人が増えることもありそうですが、何度検証しても増えることはありませんでした。
これはおそらく村人の内部的なIDを参照して復帰時に整合性チェックを行っているためだと思われます。
ただし、復帰時のデータ内での整合性チェックは出来ても過去データは破棄しているので変化量チェックは出来ない。
そのため増えることはないが減ることはある、ということですね。
ちなみに各種ブロックにはIDがないので整合性チェックが行えません。
同じようにチャンク間を移動させた場合にタイミングによってはブロックが増えたり減ったりすることがあります。
村人消失を防ぐ方法
村人が消えるバグを防ぐ方法は単純です。
チャンクを跨がせない
まず1つ目は村人にチャンクを跨がせないこと。
チャンクを跨がなければ常に同じチャンクに居続けることになるのでバックアップタイミングがいつであっても消失を防ぐことが出来ます。
『村人の移動範囲を1チャンク内に限定する。』
『村人を1ブロックに閉じ込める。』
といった構造で施設を作れば完璧です。
不正終了しない
エラー落ちを防げるかどうかはハードのスペックや使用環境に依存するのでなんとも言えませんが、スリープを多用しているなどのプレイヤーの行動がきっかけになって不正終了している場合もあります。
プレイを中断するときは毎回「セーブして終了」を心がけることで不正終了の頻度を下げることができるかもしれませんね。
そして「スペックの高いハードに乗り換える」というのも不正終了を防ぐ効果的な方法です。
スペックが低いハードだと処理がハングアップしてフリーズやエラー落ちを起こす頻度が高まります。
SwitchやスマホからPCに乗り換えることでプレイ環境のおおきな改善が可能で、実際ゲーミングPCでプレイしている私は村人が消えたことがありません。
動画のコメントで「村人が消えました」と言われて困ってしまったのは自分で経験していないから、ですね。
検証方法は動画で公開しています
ここまで説明したバックアップのタイミングに関して、具体的な検証の様子は動画で公開しています。
バックアップを悪用して無限増殖は可能?
もしもバックアップのタイミングを特定できるなら、例えばチェストに砂をいっぱいに入れてチャンク間を移動させることで無限増殖する、ということも可能かも知れません。
が、現状はどうしてもランダムタイミングに邪魔されて「増えたり減ったりする」というところまでしか装置化出来ていません。
バックアップタイミングのパターン特定に成功したら結構デカイ発見になる可能性があるので、ご存知の方、是非教えてくださいw