minetestのmobの仕組みを調べる事にした。
mobs
mobs
では、モブのベースとなる実装をModとしてLuaで実装している。しかし、このModには実際のモブは含まれていない。モブを導入したければ、このModを利用して、モブを実装したModを別途入れる必要がある。
https://codeberg.org/tenplus1/mobs_redo.git
READMEを翻訳する
Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel, Zeg9, ExeterDad and AspireMint.
PilzAdam のオリジナルの Simple Mob に、KrupnoPavel、Zeg9、ExeterDad、AspireMint による追加の Mob を加えて構築されています。
This mod contains the API only for adding your own mobs into the world, so please use the additional modpacks to add animals, monsters, and npcs.
この MOD には独自の Mob を世界に追加するための API のみが含まれているため、動物、モンスター、npc を追加するには追加の Modpack を使用してください。
クラフト
- Nametag. Can be crafted by paper, black dye, and string. Can be used to right-click on a tamed mob to give them a name.
- 名札
- 紙、黒い染料、糸で作ることができます。飼いならされたMobを右クリックして名前を付けるために使用できます。
- Net. Used to right-click tamed mobs to pick them up and place inside inventory as a spawn egg.
- 網
- 飼いならされたMobを右クリックして拾い上げ、スポーンエッグとしてインベントリ内に配置するために使用されます。
- Magic lasso. Similar to nets but with a better chance of picking up larger mobs.
- 魔法の投げ輪
- ネットに似ていますが、より大きな暴徒を拾う可能性が高くなります。
- Shears. Used to right-click sheep and return 1-3 wool.
- はさみ
- 羊を右クリックして羊毛を 1 ~ 3 個戻すために使用します。
- Protection Rune. Protects tamed mobs from being harmed by other players.
- 御守りルーン
- 飼いならされたMobを他のプレイヤーによる危害から守ります。
- Mob Fence and Fence Top. Stops mobs escaping or glitching throughfences.
- モブフェンスとフェンストップ
- 暴徒がフェンスを通って逃げたりグリッチしたりするのを防ぎます。
簡単なモブを実装する
モブの実装はいくつも公開されているから、それらを参考にすれば大体実装できる。今回は mobs_animal
を参考に、簡単なモブを実装した。
mobs:register_mob(
"example:bunny",
{
type = "animal",
visual = "mesh",
mesh = "mobs_bunny.b3d",
drawtype = "front",
collisionbox = {-0.268, -0.5, -0.268, 0.268, 0.167, 0.268},
walk_velocity = 3,
textures = {
{"mobs_bunny_brown.png"},
},
}
)
mobs:register_egg("example:bunny", "DUMMY BUNNY", "mobs_bunny_inv.png")
テキスチャやモデルは mobs_animal
のものを、コピーしてそのまま使用した。
爆発
モブ自身が爆発するAPI mobs:boom()
も提供されている。次のように実装すると爆発する1。
mobs:register_mob(
"example:bunny",
{
type = "animal",
visual = "mesh",
mesh = "mobs_bunny.b3d",
drawtype = "front",
collisionbox = {-0.268, -0.5, -0.268, 0.268, 0.167, 0.268},
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = true,
jump_height = 5,
textures = {
{"mobs_bunny_brown.png"},
},
on_die = function(self, pos)
local pos = self.object:get_pos()
local rad = 1 * 2
mobs:boom(self, pos, rad, rad)
end
}
)
当然だけれど、爆風に巻き込まれると自分自身も死ぬ。
攻撃
モブは、プレイヤーを攻撃できる。その攻撃方法には種類があり attack_type
で指定できる。
dogshoot
attack_typeに"dogshoot"を指定したモブは、何かを放ってプレイヤーを遠距離攻撃する。例えばビームや炎などは、これに当たる。何を放つかは、 mobs.register_arrow
等で定義し、速度やテクスチャなど、ビジュアルの設定によって、矢になったり炎になったりビームになる。
連続で攻撃する量や、攻撃の進行スピードを調整できる。また homing
に true
を設定するとプレイヤーを追尾できる。強くし過ぎると、太刀打ちできなくなる。
まとめ
minetestのモブの仕組みを調べた。また簡単なモブを実装し動く所を確認した。
動いている様子を動画で撮影しようかとも考えたが、兎が爆発していく所に若干残虐さを感じたため、動画を撮影するのはやめた。