ドムドーラ地方の生成（アレフガルド in マインクラフト Part7）

# はじめに
　[前回の投稿](https://qiita.com/yamamorisoba/items/2e6fb100b4ed73d77a27)から、ひと月ほど間が空いてしまいましたが、ドムドーラ地方の測量と地形の生成がようやく一段落しました。ドムドーラといえば、ドラゴンクエストの攻略上非常に重要なアイテムを手に入れる仕掛け（イベント？）がある街です。街自体の生成はこれからですが、その仕掛けを再現する方法についても検討したので、地形の生成と仕掛けの実現方法についてまとめてみます。
※本投稿には、ドラゴンクエストの攻略に関するネタバレを含みます。ご注意ください。

# ドムドーラ地方の生成 
 [以前生成したメルキド地方](https://qiita.com/yamamorisoba/items/f27bc50be589953ce696)の面積は、440x270=118800ブロック分でしたが、今回生成したドムドーラ地方は、528x420=221760ブロックと、メルキド地方の約2倍の広さとなりました[^1]。

![ドムドーラexcel.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297527/06c74bc7-1699-0b50-589d-e4556119f4af.jpeg)

　この測量結果をベースにマインクラフト上で地形を再現したものが、こちらです。
![ドムドーラminecraft.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297527/1a1554d2-f5d6-250f-19e0-f6b49d0688f1.jpeg)

　メルキド地方の生成では、浮遊大陸のように地形を宙に浮かせていました。しかし、砂漠地帯があるドムドーラでは、砂を空中に配置すると落下してしまいます。そこで、生成する地形の「底」となる高さに「岩盤」を配置して砂の落下を防いでいます。

　薄青色のダイヤモンドブロックが敷き詰められている区画がドムドーラの街の跡地で、オリジナルのドラゴンクエストとほぼ同じ配置です。左上の緑地部分は「しのさそり」や「よろいのきし」が出現し始めるエリアで、ドムドーラへ向かう旅路を何度も阻まれました。右上の方で岩山に区切られて飛び地のようになっているエリアは、オリジナルではもっと広い陸地でした。岩山の洞窟から南下してこのエリアまで来ると、橋を渡ったわけでもないのに[^2]出現するモンスターの強さが跳ね上がり、「ゴールドマン」や「キメラ」と死闘を繰り広げたものでした。南部の砂漠エリアは、海岸線こそオリジナルとほぼ同じ形を保っていますが、なぜか南西部にピラミッドが造られています。砂漠にピラミッドが登場するのはドラクエ3だったはずですが…

# (ネタバレ)店屋の裏のあの仕掛け
　ドムドーラはドラゴンクエストの作中ですでに滅ぼされてしまっている町で、住民は誰もいません。ですが、かつてドムドーラに住んでいた「ゆきのふ」じいさんが、自分のお店の裏に「ロトのよろい」を隠したという設定があります。ロトのよろいの隠し場所に踏み込むと「あくまのきし」というボスと闘うことになり、あくまのきしを倒した後で、地面を調べると、ロトのよろいが見つかるというわけです。この仕掛けをマインクラフトで再現する方法を検討します。

## 「あくまのきし」の出現方法
　もちろん、マインクラフトにそんなモンスターはいないので、別の敵対的MOBを「あくまのきし」として仕立てていきます。今回はゾンビをベースにあくまのきしを作ることにします。
　まずは、「あくまのきし」という名前付きでゾンビを召喚します。
 ```
 /summon zombie "あくまのきし"
 ```

　これだけでは、見た目が伴わないので、「あくまのきし」らしく、斧や鎧を装着してもらいます。
```
/replaceitem entity @e[name="あくまのきし"] slot.weapon.mainhand 0 iron_axe
/replaceitem entity @e[name="あくまのきし"] slot.weapon.offhand 0 shield
/replaceitem entity @e[name="あくまのきし"] slot.armor.head 0 iron_helmet
/replaceitem entity @e[name="あくまのきし"] slot.armor.chest 0 iron_chestplate
/replaceitem entity @e[name="あくまのきし"] slot.armor.legs 0 iron_leggings
/replaceitem entity @e[name="あくまのきし"] slot.armor.feet 0 iron_boots
```

![あくまのきし.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297527/57a9467f-bbfa-0587-1e39-7889dac9605a.jpeg)

　ドムドーラの仕掛けを再現するには、特定のエリアに踏み込んだことをトリガーに、この「あくまのきし」を出現させる必要があります。エリアへの進入を検出するだけであれば、感圧板や`testfor`を仕込んだコマンドブロックで対応できそうです。ただし、あくまのきしとの戦闘中に、判定対象エリアへ再度進入してしまっても、あくまのきしが複数出現しないようにする必要があります[^3]。したがって、マインクラフト上でこの仕掛けを再現する場合、以下のand条件で「あくまのきし」を召喚する仕組みをつくることになりそうです。
 
 - 特定エリアにプレイヤーが踏み込んだこと
 - 「あくまのきし」という名前を持つエンティティが存在していないこと

　また、「ロトのよろい」の入手については、「あくまのきし」の初回撃破以降となるように（あくまのきしとの戦闘前や戦闘中に入手することがないように）制御する必要があります。あくまのきしの撃破数を`scoreboard`で管理できればよいのですが、統合版をベースとしているEducation Editionでは難しそうです。そこで、泥臭い方法ですが次節に記載するような方法で判定を行おうと思います。

## あくまのきしとの勝負判定方法
* 用意するフラグ
    * 戦闘中フラグ：あくまのきしと戦闘中かどうかを判定する
    * 撃破フラグ：あくまのきしを倒したことがあるかどうかを判定する

戦闘中フラグと撃破フラグは、`scoreboard`を使って管理することもできそうですし、適当な場所にブロックを置くことで`testforblocks`を使って判定することもできそうです。

* 戦闘中かどうかの判定
    * ドムドーラの町マップ内に、プレイヤーとあくまのきしが両方存在している場合、戦闘中フラグを立てる

プレイヤーやあくまのきしの存在確認については、[Part2 街の再現](https://qiita.com/yamamorisoba/items/5e059388ac9db6037fb2)で用いた`testfor`の構文を使うことで、対応できそうです。
```
# プレイヤーの存在確認
/testfor @p[<町エリアの範囲>]
# あくまのきしの存在確認
/testfor @e[name=あくまのきし,<町エリアの範囲>]
```

* 戦闘終了の判定
    * 戦闘中フラグが立っている状態で、ドムドーラの町マップ内に、プレイヤーのみが存在している状態となった場合、プレイヤーの勝利と判定する
    * 戦闘中フラグが立っている状態で、ドムドーラの町マップ内に、あくまのきしのみが存在している状態となった場合、プレイヤーの敗北と判定する
* 勝利判定時の処理
    * 撃破フラグが立っていない場合、「ロトのよろい」がはいったチェストを、ゆきのふの店屋の裏に出現させる
    * 撃破フラグを立てる
    * 戦闘中フラグを解除する
* 敗北判定時の処理
    * あくまのきしを消滅させる
    * 戦闘中フラグを解除する

ロトのよろいが入ったチェストを、指定位置に出現させる方法については、[Part6](https://qiita.com/yamamorisoba/items/2e6fb100b4ed73d77a27)で用いた`structure`を使おうと思います。チェストにロトのよろいを入れた状態で、structureとして記録しておき、指定位置にロードすることで実現できるはずです。

　今回は、町の実装まではたどり着けませんでしたが、実装方法の大枠は整理できたと思います。次回はドムドーラの町を再現してみようと思います。

# おまけ1：ドムドーラ地方全体の生成動画
　ドムドーラ地方を生成した時の様子を動画にまとめました。20倍速で1分程度の長さとなっています。
 
<iframe width="560" height="315" src="https://www.youtube.com/embed/t0aLekiEYk0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
 
[^1]:メルキド地方も、南部の毒の沼地地帯まで含めると同じくらいの面積かもしれませんが…
[^2]:ドラゴンクエストは、橋を越えると敵が強くなるという傾向がありました。
[^3]:ドラゴンクエストではフィールドと戦闘が分離されているので、戦闘中にもう一度踏み込んでしまうというケースは考慮不要ですが、マインクラフトではフィールド内で戦闘を行うことになるので。

# おまけ2：祝！ロトシリーズHD-2D版発売
　本日、ドラゴンクエスト3 HD-2D版の発売日の発表と合わせて、1&2の発売も発表されました。FC版からのファンにとってはうれしい限りです。1&2の発売は来年とのことなので、HD-2D版の発売までにはアレフガルドを完成させられていたらいいな、と思っています。

# おまけ3：アレフガルド in マインクラフト 連載一覧
　これまでの投稿をまとめておきます。
 |No.|内容|
 |:--:|:--|
 |Part1|[マインクラフトでの地形生成](https://qiita.com/yamamorisoba/items/a8736bfe8acb802dd2ae)|
 |Part2|[町の再現①](https://qiita.com/yamamorisoba/items/5e059388ac9db6037fb2)|
 |Part3|[メルキド as Code](https://qiita.com/yamamorisoba/items/26905b328cff581102d0)|
 |Part4|[住民との会話システム](https://qiita.com/yamamorisoba/items/fdd1dfdc42510e64af5a)|
 |Part5|[海と森の生成](https://qiita.com/yamamorisoba/items/f27bc50be589953ce696)|
 |Part6|[森の生成方法の改良](https://qiita.com/yamamorisoba/items/2e6fb100b4ed73d77a27)|