はじめに
前回の投稿から、ひと月ほど間が空いてしまいましたが、ドムドーラ地方の測量と地形の生成がようやく一段落しました。ドムドーラといえば、ドラゴンクエストの攻略上非常に重要なアイテムを手に入れる仕掛け(イベント?)がある街です。街自体の生成はこれからですが、その仕掛けを再現する方法についても検討したので、地形の生成と仕掛けの実現方法についてまとめてみます。
※本投稿には、ドラゴンクエストの攻略に関するネタバレを含みます。ご注意ください。
ドムドーラ地方の生成
以前生成したメルキド地方の面積は、440x270=118800ブロック分でしたが、今回生成したドムドーラ地方は、528x420=221760ブロックと、メルキド地方の約2倍の広さとなりました1。
この測量結果をベースにマインクラフト上で地形を再現したものが、こちらです。
メルキド地方の生成では、浮遊大陸のように地形を宙に浮かせていました。しかし、砂漠地帯があるドムドーラでは、砂を空中に配置すると落下してしまいます。そこで、生成する地形の「底」となる高さに「岩盤」を配置して砂の落下を防いでいます。
薄青色のダイヤモンドブロックが敷き詰められている区画がドムドーラの街の跡地で、オリジナルのドラゴンクエストとほぼ同じ配置です。左上の緑地部分は「しのさそり」や「よろいのきし」が出現し始めるエリアで、ドムドーラへ向かう旅路を何度も阻まれました。右上の方で岩山に区切られて飛び地のようになっているエリアは、オリジナルではもっと広い陸地でした。岩山の洞窟から南下してこのエリアまで来ると、橋を渡ったわけでもないのに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
ドムドーラの仕掛けを再現するには、特定のエリアに踏み込んだことをトリガーに、この「あくまのきし」を出現させる必要があります。エリアへの進入を検出するだけであれば、感圧板やtestfor
を仕込んだコマンドブロックで対応できそうです。ただし、あくまのきしとの戦闘中に、判定対象エリアへ再度進入してしまっても、あくまのきしが複数出現しないようにする必要があります3。したがって、マインクラフト上でこの仕掛けを再現する場合、以下のand条件で「あくまのきし」を召喚する仕組みをつくることになりそうです。
- 特定エリアにプレイヤーが踏み込んだこと
- 「あくまのきし」という名前を持つエンティティが存在していないこと
また、「ロトのよろい」の入手については、「あくまのきし」の初回撃破以降となるように(あくまのきしとの戦闘前や戦闘中に入手することがないように)制御する必要があります。あくまのきしの撃破数をscoreboard
で管理できればよいのですが、統合版をベースとしているEducation Editionでは難しそうです。そこで、泥臭い方法ですが次節に記載するような方法で判定を行おうと思います。
あくまのきしとの勝負判定方法
- 用意するフラグ
- 戦闘中フラグ:あくまのきしと戦闘中かどうかを判定する
- 撃破フラグ:あくまのきしを倒したことがあるかどうかを判定する
戦闘中フラグと撃破フラグは、scoreboard
を使って管理することもできそうですし、適当な場所にブロックを置くことでtestforblocks
を使って判定することもできそうです。
- 戦闘中かどうかの判定
- ドムドーラの町マップ内に、プレイヤーとあくまのきしが両方存在している場合、戦闘中フラグを立てる
プレイヤーやあくまのきしの存在確認については、Part2 街の再現で用いたtestfor
の構文を使うことで、対応できそうです。
# プレイヤーの存在確認
/testfor @p[<町エリアの範囲>]
# あくまのきしの存在確認
/testfor @e[name=あくまのきし,<町エリアの範囲>]
- 戦闘終了の判定
- 戦闘中フラグが立っている状態で、ドムドーラの町マップ内に、プレイヤーのみが存在している状態となった場合、プレイヤーの勝利と判定する
- 戦闘中フラグが立っている状態で、ドムドーラの町マップ内に、あくまのきしのみが存在している状態となった場合、プレイヤーの敗北と判定する
- 勝利判定時の処理
- 撃破フラグが立っていない場合、「ロトのよろい」がはいったチェストを、ゆきのふの店屋の裏に出現させる
- 撃破フラグを立てる
- 戦闘中フラグを解除する
- 敗北判定時の処理
- あくまのきしを消滅させる
- 戦闘中フラグを解除する
ロトのよろいが入ったチェストを、指定位置に出現させる方法については、Part6で用いたstructure
を使おうと思います。チェストにロトのよろいを入れた状態で、structureとして記録しておき、指定位置にロードすることで実現できるはずです。
今回は、町の実装まではたどり着けませんでしたが、実装方法の大枠は整理できたと思います。次回はドムドーラの町を再現してみようと思います。
おまけ1:ドムドーラ地方全体の生成動画
ドムドーラ地方を生成した時の様子を動画にまとめました。20倍速で1分程度の長さとなっています。
おまけ2:祝!ロトシリーズHD-2D版発売
本日、ドラゴンクエスト3 HD-2D版の発売日の発表と合わせて、1&2の発売も発表されました。FC版からのファンにとってはうれしい限りです。1&2の発売は来年とのことなので、HD-2D版の発売までにはアレフガルドを完成させられていたらいいな、と思っています。
おまけ3:アレフガルド in マインクラフト 連載一覧
これまでの投稿をまとめておきます。
No. | 内容 |
---|---|
Part1 | マインクラフトでの地形生成 |
Part2 | 町の再現① |
Part3 | メルキド as Code |
Part4 | 住民との会話システム |
Part5 | 海と森の生成 |
Part6 | 森の生成方法の改良 |