* add arrow_override changes to mese monster arrows to make
  them stronger/faster the deeper you go
* place lava flan death flame in air position only
* change tree monster textures and hange cobweb texture due too close to minecraft
* remove any older model mese monsters that haven't already defined
* sand and stone monster models updated along with textures, for license issue
* disable friendly_fire for dungeon master (they can take a fireball)
* update README and improve information
master
mckaygerhard 2023-06-06 01:09:54 -04:00
commit 790927950e
41 changed files with 616 additions and 3287 deletions

View File

@ -29,19 +29,19 @@ mobs:register_mob("mobs_monster:dirt_monster", {
mesh = "mobs_stone_monster.b3d",
textures = {
{"mobs_dirt_monster.png"},
{"mobs_dirt_monster2.png"},
{"mobs_dirt_monster2.png"}
},
blood_texture = "default_dirt.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_dirtmonster",
random = "mobs_dirtmonster"
},
view_range = 15,
walk_velocity = 1,
run_velocity = 3,
jump = true,
drops = {
{name = "default:dirt", chance = 1, min = 0, max = 2},
{name = "default:dirt", chance = 1, min = 0, max = 2}
},
water_damage = 1,
lava_damage = 5,
@ -57,7 +57,7 @@ mobs:register_mob("mobs_monster:dirt_monster", {
run_start = 40,
run_end = 63,
punch_start = 40,
punch_end = 63,
punch_end = 63
},
-- check surrounding nodes and spawn a specific monster
@ -89,16 +89,17 @@ mobs:register_mob("mobs_monster:dirt_monster", {
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:dirt_monster",
nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"},
min_light = 0,
max_light = 7,
chance = 6000,
active_object_count = 2,
min_height = 0,
day_toggle = false,
})
mobs:spawn({
name = "mobs_monster:dirt_monster",
nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"},
min_light = 0,
max_light = 7,
chance = 6000,
active_object_count = 2,
min_height = 0,
day_toggle = false
})
end

View File

@ -25,6 +25,7 @@ mobs:register_mob("mobs_monster:dungeon_master", {
reach = 3,
shoot_interval = 2.2,
arrow = "mobs_monster:fireball",
friendly_fire = false,
shoot_offset = 1,
hp_min = 42,
hp_max = 75,
@ -35,12 +36,12 @@ mobs:register_mob("mobs_monster:dungeon_master", {
textures = {
{"mobs_dungeon_master.png"},
{"mobs_dungeon_master2.png"},
{"mobs_dungeon_master3.png"},
{"mobs_dungeon_master3.png"}
},
makes_footstep_sound = true,
sounds = {
random = "mobs_dungeonmaster",
shoot_attack = "mobs_fireball",
shoot_attack = "mobs_fireball"
},
walk_velocity = 1,
run_velocity = 3,
@ -51,7 +52,7 @@ mobs:register_mob("mobs_monster:dungeon_master", {
{name = "mobs:leather", chance = 2, min = 0, max = 2},
{name = "default:mese_crystal", chance = 3, min = 0, max = 2},
{name = "default:diamond", chance = 4, min = 0, max = 1},
{name = "default:diamondblock", chance = 30, min = 0, max = 1},
{name = "default:diamondblock", chance = 30, min = 0, max = 1}
},
water_damage = 1,
lava_damage = 1,
@ -67,7 +68,7 @@ mobs:register_mob("mobs_monster:dungeon_master", {
shoot_start = 36,
shoot_end = 48,
speed_normal = 15,
speed_run = 15,
speed_run = 15
},
-- check surrounding nodes and spawn a specific monster
@ -99,14 +100,15 @@ mobs:register_mob("mobs_monster:dungeon_master", {
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:dungeon_master",
nodes = {"default:stone", "nether:rack", "nether:rack_deep"},
max_light = 5,
chance = 9000,
active_object_count = 1,
max_height = -70,
})
mobs:spawn({
name = "mobs_monster:dungeon_master",
nodes = {"default:stone", "nether:rack", "nether:rack_deep"},
max_light = 5,
chance = 9000,
active_object_count = 1,
max_height = -70
})
end
@ -149,7 +151,7 @@ mobs:register_arrow("mobs_monster:fireball", {
self.object:set_velocity({
x = dir.x * self.velocity,
y = dir.y * self.velocity,
z = dir.z * self.velocity,
z = dir.z * self.velocity
})
end
end
@ -159,14 +161,14 @@ mobs:register_arrow("mobs_monster:fireball", {
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 8},
damage_groups = {fleshy = 8}
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 8},
damage_groups = {fleshy = 8}
}, nil)
end,

View File

@ -82,16 +82,17 @@ mobs:register_mob("mobs_monster:fire_spirit", {
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:fire_spirit",
nodes = {"default:obsidian", "caverealms:hot_cobble"},
neighbors = {"group:fire"},
min_light = 12,
max_light = 15,
chance = 1500,
active_object_count = 1,
max_height = -150
})
mobs:spawn({
name = "mobs_monster:fire_spirit",
nodes = {"default:obsidian", "caverealms:hot_cobble"},
neighbors = {"group:fire"},
min_light = 12,
max_light = 15,
chance = 1500,
active_object_count = 1,
max_height = -150
})
end

View File

@ -2,8 +2,6 @@
-- Load support for intllib.
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
local S
-- Check for translation method
local S
if minetest.get_translator ~= nil then
@ -12,11 +10,10 @@ else
if minetest.get_modpath("intllib") then
dofile(minetest.get_modpath("intllib") .. "/init.lua")
if intllib.make_gettext_pair then
gettext, ngettext = intllib.make_gettext_pair() -- new gettext method
S = intllib.make_gettext_pair() -- new gettext method
else
gettext = intllib.Getter() -- old text file method
S = intllib.Getter() -- old text file method
end
S = gettext
else -- boilerplate function
S = function(str, ...)
local args = {...}
@ -61,7 +58,9 @@ end
-- Lucky Blocks
dofile(path .. "lucky_block.lua")
if minetest.get_modpath("lucky_block") then
dofile(path .. "lucky_block.lua")
end
print ("[MOD] Mobs Redo Monsters loaded")

View File

@ -18,13 +18,13 @@ mobs:register_mob("mobs_monster:lava_flan", {
textures = {
{"zmobs_lava_flan.png"},
{"zmobs_lava_flan2.png"},
{"zmobs_lava_flan3.png"},
{"zmobs_lava_flan3.png"}
},
blood_texture = "fire_basic_flame.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_lavaflan",
war_cry = "mobs_lavaflan",
war_cry = "mobs_lavaflan"
},
walk_velocity = 0.5,
run_velocity = 2,
@ -32,14 +32,14 @@ mobs:register_mob("mobs_monster:lava_flan", {
view_range = 10,
floats = 1,
drops = {
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1}
},
water_damage = 8,
lava_damage = -1,
fire_damage = 0,
light_damage = 0,
immune_to = {
{"mobs:pick_lava", -2}, -- lava pick heals 2 health
{"mobs:pick_lava", -2} -- lava pick heals 2 health
},
fly_in = {"default:lava_source", "default:lava_flowing"},
animation = {
@ -54,6 +54,8 @@ mobs:register_mob("mobs_monster:lava_flan", {
punch_start = 20,
punch_end = 28
},
-- custom death function
on_die = function(self, pos)
local cod = self.cause_of_death or {}
@ -66,26 +68,32 @@ mobs:register_mob("mobs_monster:lava_flan", {
mobs:effect(pos, 40, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false)
minetest.sound_play("fire_extinguish_flame",
{pos = pos, max_hear_distance = 12, gain = 1.5}, true)
{pos = pos, max_hear_distance = 12, gain = 1.5}, true)
self.object:remove()
if math.random(4) == 1 then
mobs:add_mob(pos, {
name = "mobs_monster:obsidian_flan",
})
mobs:add_mob(pos, {name = "mobs_monster:obsidian_flan"})
end
else
if minetest.get_node(pos).name == "air" then
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
local nods = minetest.find_nodes_in_area(
{x = pos.x, y = pos.y + 1, z = pos.z},
{x = pos.x, y = pos.y, z = pos.z}, "air")
-- place flame if position empty and flame exists
if nods and #nods > 0
and minetest.registered_nodes["fire:basic_flame"] then
pos = nods[math.random(#nods)]
minetest.set_node(pos, {name = "fire:basic_flame"})
end
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
self.object:remove()
end
end,
glow = 10,
glow = 10
})
@ -95,21 +103,24 @@ mobs:spawn({
nodes = {"default:lava_source"},
chance = 1500,
active_object_count = 1,
max_height = 0,
max_height = 0
})
end
-- add spawn egg
mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1)
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility
-- compatibility alias, only needed for servers who used the old mobs mod
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan")
-- lava orb
minetest.register_craftitem(":mobs:lava_orb", {
description = S("Lava orb"),
inventory_image = "zmobs_lava_orb.png",
light_source = 14,
light_source = 14
})
minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
@ -117,7 +128,7 @@ minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
minetest.register_craft({
type = "fuel",
recipe = "mobs:lava_orb",
burntime = 80,
burntime = 80
})
@ -139,29 +150,32 @@ function minetest.handle_node_drops(pos, drops, digger)
local hot_drops = {}
-- loop through current node drops
for _, drop in pairs(drops) do
for _, drop in ipairs(drops) do
-- get cooked output of current drops
local stack = ItemStack(drop)
local output = minetest.get_craft_result({
method = "cooking",
width = 1,
items = {drop}
})
-- if we have cooked result then add to new list
if output
and output.item
and not output.item:is_empty() then
while not stack:is_empty() do
table.insert(hot_drops,
ItemStack({
name = output.item:get_name(),
count = output.item:to_table().count,
})
)
else -- if not then return normal drops
table.insert(hot_drops, stack)
local output, decremented_input = minetest.get_craft_result({
method = "cooking",
width = 1,
items = {stack}
})
if output.item:is_empty() then
table.insert_all(hot_drops, decremented_input.items)
break
else
if not output.item:is_empty() then
table.insert(hot_drops, output.item)
end
table.insert_all(hot_drops, output.replacements)
stack = decremented_input.items[1] or ItemStack()
end
end
end
@ -225,13 +239,12 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
visual = "mesh",
mesh = "zmobs_lava_flan.x",
textures = {
{"mobs_obsidian_flan.png"},
{"mobs_obsidian_flan.png"}
},
blood_texture = "default_obsidian.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_lavaflan",
-- war_cry = "mobs_lavaflan",
random = "mobs_lavaflan"
},
walk_velocity = 0.1,
run_velocity = 0.5,
@ -240,7 +253,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
floats = 0,
drops = {
{name = "default:obsidian_shard", chance = 1, min = 1, max = 5},
{name = "default:obsidian", chance = 3, min = 0, max = 2},
{name = "default:obsidian", chance = 3, min = 0, max = 2}
},
water_damage = 0,
lava_damage = 8,
@ -260,6 +273,8 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
}
})
-- add spawn egg
mobs:register_egg("mobs_monster:obsidian_flan", S("Obsidian Flan"),
"default_obsidian.png", 1)
@ -269,11 +284,9 @@ local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
-- mese arrow (weapon)
mobs:register_arrow("mobs_monster:obsidian_arrow", {
visual = "sprite",
-- visual = "wielditem",
visual_size = {x = 0.5, y = 0.5},
textures = {"default_obsidian_shard.png"},
velocity = 6,
-- rotate = 180,
hit_player = function(self, player)
player:punch(self.object, 1.0, {

View File

@ -31,6 +31,68 @@ mobs.fireball.png was originally made by Sapier and edited by Benrob:
-- (c) Sapier
-- Contact sapier a t gmx net
Textures created by wwar (cc0)
Textures created by wwar (CC0)
mobs_dungeon_master_nether.png
mobs_dungeon_master_netherdeep.png
mobs_stone_monster.png
mobs_dungeon_master2.png
mobs_land_guard.png
mobs_land_guard2.png
mobs_land_guard3.png
Textures by AMMOnym (WTFPL)
mobs_stone_monster2.png
Textures by TenPlus1 (MIT)
mobs_stone_monster3.png
Textures by Sirrobzeroone (CC0 1.0 Universal)
mobs_stone_monster4.png
mobs_sand_monster.png
Textures and Model created by SirrobZeroone (CC0)
mobs_mese_monster_red.png
mobs_mese_monster_blue.png
mobs_mese_monster_green.png
mobs_mese_monster_purple.png
mobs_mese_arrow.png
mobs_mese_monster.b3d
Pavel_S and PilzAdam (WTFPL)
mobs_dirt_monster.png
mobs_dirt_monster2.png
mobs_dirt_monster3.png
mobs_dungeon_master.b3d
mobs_dungeon_master.png
mobs_dungeon_master.ogg
mobs_fireball.ogg
mobs_oerkki.b3d
mobs_oerkki.png
mobs_sand_monster.b3d [edited by SirrobZeroone]
mobs_sand_monster2.png
mobs_stone_monster.b3d [edited by SirrobZeroone]
mobs_tree_monster.b3d
mobs_tree_monster*.png (edited by TenPlus1)
AspireMint (CC BY-SA 3.0)
mobs_spider.b3d
mobs_spider_mese.png
mobs_spider_orange.png
mobs_spider_snowy.png
mobs_spider_grey.png
mobs_spider_crystal.png
Zeg9 (CC BY-SA 3.0)
zmobs_lava_flan.x
zmobs_lava_flan.png
zmobs_lava_orb.png
Sounds by Cyberpangolin (WTFPL) https://forum.minetest.net/viewtopic.php?t=10798
mobs_dirtmonster.ogg
mobs_dungeonmaster.ogg
mobs_lavaflan.ogg
mobs_mesemonster.ogg
mobs_oerkki.ogg
mobs_sandmonster.ogg
mobs_stonemonster.ogg
mobs_treemonster.ogg

View File

@ -1,42 +1,37 @@
local web = {name = "mobs:cobweb"}
local web_trap = {
size = {x = 3, y = 3, z = 3},
data = {
web, web, web,
web, web, web,
web, web, web,
if minetest.get_modpath("lucky_block") then
web, web, web,
web, web, web,
web, web, web,
local web = {name = "mobs:cobweb"}
local web_trap = {
size = {x = 3, y = 3, z = 3},
data = {
web, web, web,
web, web, web,
web, web, web,
web, web, web,
web, web, web,
web, web, web,
web, web, web,
web, web, web,
web, web, web,
},
web, web, web,
web, web, web,
web, web, web
}
}
lucky_block:add_schematics({
{"webtrap", web_trap, {x = 1, y = 0, z = 1}},
})
lucky_block:add_schematics({
{"webtrap", web_trap, {x = 1, y = 0, z = 1}},
})
lucky_block:add_blocks({
{"sch", "webtrap", 1, true},
{"spw", "mobs:dungeon_master", 1, nil, nil, 3, "Billy"},
{"spw", "mobs:sand_monster", 3},
{"spw", "mobs:stone_monster", 3, nil, nil, 3, "Bob"},
{"spw", "mobs:dirt_monster", 3},
{"spw", "mobs:tree_monster", 3},
{"spw", "mobs:oerkki", 3},
{"exp"},
{"spw", "mobs:spider", 5},
{"spw", "mobs:mese_monster", 2},
{"spw", "mobs:lava_flan", 3},
{"nod", "default:chest", 0, {
{name = "mobs:lava_orb", max = 1}}},
})
end
lucky_block:add_blocks({
{"sch", "webtrap", 1, true},
{"spw", "mobs:dungeon_master", 1, nil, nil, 3, "Billy"},
{"spw", "mobs:sand_monster", 3},
{"spw", "mobs:stone_monster", 3, nil, nil, 3, "Bob"},
{"spw", "mobs:dirt_monster", 3},
{"spw", "mobs:tree_monster", 3},
{"spw", "mobs:oerkki", 3},
{"exp"},
{"spw", "mobs:spider", 5},
{"spw", "mobs:mese_monster", 2},
{"spw", "mobs:lava_flan", 3},
{"nod", "default:chest", 0, {
{name = "mobs:lava_orb", max = 1}}},
})

View File

@ -1,41 +1,183 @@
local S = mobs.intllib_monster
-- Mese Monster by Zeg9
local mese_monster_types = {
-- mese_monster_red
{
y_min = -20,
y_max = -1000,
damage = 2,
reach = 3,
hp_min = 15,
hp_max = 25,
armor = 80,
skins = {"mobs_mese_monster_red.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0}
},
drops = {
{name = "default:mese_crystal", chance = 15, min = 0, max = 1},
{name = "default:mese_crystal_fragment", chance = 2, min = 0, max = 1}
},
arrow_override = function(self)
self.velocity = 6
self.damage = 2
end
},
-- mese_monster_green
{
y_min = -1001,
y_max = -2000,
damage = 3,
reach = 3,
hp_min = 20,
hp_max = 30,
armor = 75,
skins = {"mobs_mese_monster_green.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0},
{"default:pick_stone", 0},
{"default:shovel_stone", 0},
{"default:axe_stone", 0},
{"default:sword_stone", 0}
},
drops = {
{name = "default:mese_crystal", chance = 12, min = 0, max = 1},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 1}
},
arrow_override = function(self)
self.velocity = 6
self.damage = 2
end
},
-- mese_monster_blue
{
y_min = -2001,
y_max = -3000,
damage = 3,
reach = 4,
hp_min = 25,
hp_max = 35,
armor = 70,
skins = {"mobs_mese_monster_blue.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0},
{"default:pick_stone", 0},
{"default:shovel_stone", 0},
{"default:axe_stone", 0},
{"default:sword_stone", 0},
{"default:pick_bronze", 0},
{"default:shovel_bronze", 0},
{"default:axe_bronze", 0},
{"default:sword_bronze", 0}
},
drops = {
{name = "default:mese", chance = 15, min = 0, max = 1},
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2}
},
arrow_override = function(self)
self.velocity = 7
self.damage = 3
end
},
-- mese_monster_purple
{
y_min = -3000,
y_max = -31000,
damage = 4,
reach = 5,
hp_min = 30,
hp_max = 40,
armor = 60,
skins = {"mobs_mese_monster_purple.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0},
{"default:pick_stone", 0},
{"default:shovel_stone", 0},
{"default:axe_stone", 0},
{"default:sword_stone", 0},
{"default:pick_bronze", 0},
{"default:shovel_bronze", 0},
{"default:axe_bronze", 0},
{"default:sword_bronze", 0},
{"default:pick_steel", 0},
{"default:shovel_steel", 0},
{"default:axe_steel", 0},
{"default:sword_steel", 0}
},
drops = {
{name = "default:mese", chance = 9, min = 0, max = 1},
{name = "default:mese_crystal", chance = 6, min = 0, max = 2},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 3}
},
arrow_override = function(self)
self.velocity = 8
self.damage = 4
end
}}
-- Mese Monster by SirrobZeroone
mobs:register_mob("mobs_monster:mese_monster", {
type = "monster",
visual_size = {x = 10, y = 10}, -- Got scale wrong in blender by factor of 10 - S01
passive = false,
damage = 3,
attack_type = "shoot",
attack_type = "dogshoot",
damage = 4,
reach = 4,
shoot_interval = 0.5,
arrow = "mobs_monster:mese_arrow",
shoot_offset = 2,
--arrow_override = function(self)
-- self.velocity = 20
--end,
shoot_offset = 0.75,
-- arrow_override = function(self)
-- self.velocity = 20
-- end,
knock_back = true,
hp_min = 10,
hp_max = 25,
armor = 80,
collisionbox = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5},
collisionbox = {-0.75, -0.5, -0.75, 0.75, 2.5, 0.75},
visual = "mesh",
mesh = "zmobs_mese_monster.x",
mesh = "mobs_mese_monster.b3d",
textures = {
{"zmobs_mese_monster.png"},
{"mobs_mese_monster_purple.png"}
},
blood_texture = "default_mese_crystal_fragment.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_mesemonster",
damage = "default_glass_footstep"
},
view_range = 10,
walk_velocity = 0.5,
run_velocity = 2,
walk_velocity = 1,
run_velocity = 3,
jump = true,
jump_height = 8,
can_leap = true,
fall_damage = 0,
fall_speed = -6,
stepheight = 2.1,
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0}
},
drops = {
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2},
@ -44,29 +186,152 @@ mobs:register_mob("mobs_monster:mese_monster", {
lava_damage = 1,
light_damage = 0,
animation = {
speed_normal = 15,
speed_run = 15,
stand_start = 0,
stand_end = 14,
walk_start = 15,
walk_end = 38,
run_start = 40,
run_end = 63,
punch_start = 40,
punch_end = 63,
speed_normal = 18,
speed_run = 18,
walk_start = 10,
walk_end = 41,
walk_speed = 20,
run_start = 10,
run_end = 41,
run_speed = 30,
stand_start = 60,
stand_end = 83,
shoot_start = 100,
shoot_end = 113,
die_start = 125,
die_end = 141,
death_speed = 25,
die_loop = false,
jump_start = 150 ,
jump_end = 168,
jump_loop = false,
punch_start = 175,
punch_end = 189
},
after_activate = function(self, staticdata, def, dtime)
local tex = self and self.textures and self.textures[1]
if tex == "zmobs_mese_monster.png" then
self.object:remove()
end
end,
on_spawn = function(self)
local pos = self.object:get_pos()
-- quick update self function
local function update(self, def)
self.object:set_properties({textures = def.skins})
self.base_texture = def.skins
-- added by mobs_redo
self.hp_min = def.hp_min
self.hp_max = def.hp_max
self.health = math.random(self.hp_min, self.hp_max)
self.damage = def.damage
self.reach = def.reach
self.armor = def.armor
self.immune_to = def.immune_to
self.drops = def.drops
self.arrow_override = def.arrow_override
end
-- Normal spawn case
for name, def in pairs(mese_monster_types) do
if pos.y <= def.y_min and pos.y >= def.y_max then
update(self, def)
return true
end
end
--[[
-- player using egg
-- direction sets type N = red, E = green, S = blue, W = purple
-- Just for fun - S01
local objects = minetest.get_objects_inside_radius(pos, 10)
for i, obj in ipairs(objects) do
if minetest.is_player(obj)
and obj:get_wielded_item():get_name() == "mobs_monster:mese_monster" then
local degree = (360 + math.deg(obj:get_look_horizontal())) % 360
local compass_sel
if degree > 45 and degree <= 135 then compass_sel = 4
elseif degree > 135 and degree <= 225 then compass_sel = 3
elseif degree > 225 and degree <= 315 then compass_sel = 2
else compass_sel = 1
end
local def = mese_monster_types[compass_sel]
update(self, def)
return true
end
end
]]
-- catch case if all else fails random it
update(self, mese_monster_types[math.random(4)])
return true
end
})
-- mese arrow (weapon)
minetest.register_craftitem("mobs_monster:mese_crystal_fragment_arrow", {
description = S("Mese Monster Arrow"),
inventory_image = "mobs_mese_arrow.png",
groups = {not_in_creative_inventory = 1}
})
mobs:register_arrow("mobs_monster:mese_arrow", {
visual = "wielditem",
visual_size = {x = 0.25, y = 0.25},
textures = {"mobs_monster:mese_crystal_fragment_arrow"},
velocity = 8,
rotate = 180,
damage = 2,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = self.damage}
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = self.damage}
}, nil)
end,
hit_node = function(self, pos, node)
end
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:mese_monster",
nodes = {"default:stone"},
max_light = 7,
chance = 5000,
active_object_count = 1,
max_height = -20,
})
mobs:spawn({
name = "mobs_monster:mese_monster",
nodes = {"default:stone"},
max_light = 7,
chance = 5000,
active_object_count = 1,
max_height = -20
})
end
@ -76,40 +341,10 @@ mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_
mobs:alias_mob("mobs:mese_monster", "mobs_monster:mese_monster") -- compatiblity
-- mese arrow (weapon)
mobs:register_arrow("mobs_monster:mese_arrow", {
visual = "sprite",
-- visual = "wielditem",
visual_size = {x = 0.5, y = 0.5},
textures = {"default_mese_crystal_fragment.png"},
--textures = {"default:mese_crystal_fragment"},
velocity = 6,
-- rotate = 180,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 2},
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 2},
}, nil)
end,
hit_node = function(self, pos, node)
end
})
-- 9x mese crystal fragments = 1x mese crystal
local f = "default:mese_crystal_fragment"
minetest.register_craft({
output = "default:mese_crystal",
recipe = {
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
}
recipe = {{f, f, f}, {f, f, f}, {f, f, f}}
})

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -19,11 +19,11 @@ mobs:register_mob("mobs_monster:oerkki", {
textures = {
{"mobs_oerkki.png"},
{"mobs_oerkki2.png"},
{"mobs_oerkki3.png"},
{"mobs_oerkki3.png"}
},
makes_footstep_sound = false,
sounds = {
random = "mobs_oerkki",
random = "mobs_oerkki"
},
walk_velocity = 1,
run_velocity = 3,
@ -31,7 +31,7 @@ mobs:register_mob("mobs_monster:oerkki", {
jump = true,
drops = {
{name = "default:obsidian", chance = 3, min = 0, max = 2},
{name = "default:gold_lump", chance = 2, min = 0, max = 2},
{name = "default:gold_lump", chance = 2, min = 0, max = 2}
},
water_damage = 2,
lava_damage = 4,
@ -47,7 +47,7 @@ mobs:register_mob("mobs_monster:oerkki", {
punch_start = 37,
punch_end = 49,
speed_normal = 15,
speed_run = 15,
speed_run = 15
},
replace_rate = 5,
replace_what = {"default:torch"},
@ -55,19 +55,20 @@ mobs:register_mob("mobs_monster:oerkki", {
replace_offset = -1,
immune_to = {
{"default:sword_wood", 0}, -- no damage
{"default:gold_lump", -10}, -- heals by 10 points
{"default:gold_lump", -10} -- heals by 10 points
},
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:oerkki",
nodes = {"default:stone"},
max_light = 7,
chance = 7000,
max_height = -10,
})
mobs:spawn({
name = "mobs_monster:oerkki",
nodes = {"default:stone"},
max_light = 7,
chance = 7000,
max_height = -10
})
end

View File

@ -1,54 +1,58 @@
minetest mod MOBS MONSTER
![](screenshot.png)
![](screenshot.jpg)
Information
-----------
This mod creates many types of monsters. Some are weak, some are powerful,
and they generally do the player a lot of harm. Many of these monsters spawn
below ground and take light damage.
Lucky Blocks: 11
### Dirt Monster
- Spawning at night on green grass (or grey in ethereal) these mobs wander around looking for a player to eat. Drops 1-5 dirt when killed.
Dirt monsters spawn at night on green grass (or grey in ethereal). They have a tendency to wander around looking for a player to eat and drop 1-2 dirt when killed. Dirt monsters have between 3-27 health, take damage in sunlight, and deal very little damage.
### Dungeon Master
- Spawning below -70 underground DM's have a tendency to hurl fire balls at unsuspecting players and can cause major damage, but get too close and he will switch to dogfight attack. Can drop mese or diamond when killed.
Dungeon masters spawn below -70 underground DM's and hurl fireballs at unsuspecting players and can cause major damage, but get too close and he will switch to dogfight attack. They have between 42 and 75 health points. Their melee attack deals six damage points and their fireball inflicts eight. The fireball will also explode if it hits a node. They drop mese or diamond when killed.
### Lava Flan
- Cute as they may look lava flan wallow in their namesake (no, not flans) and get curious about players who wander by, forgetting that they can burn you and cause damage. They have a 1 in 5 chance of dropping lava orb when killed, but if they die in water then pray they dont solidify into an obsidian flan that shoots shards and destroys all around them.
Cute as they may look, lava flan wallow in their namesake (no, not flans) and get curious about players who wander by, forgetting that they can burn you and cause damage. They have a 1 in 5 chance of dropping lava orb when killed, but if they die in water then pray they dont solidify into an obsidian flan that shoots shards and destroys all around them.
### Mese Monster
- These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. Will drop mese when killed.
These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. The deeper you go the tougher they seem to get. Will drop mese when killed. Another thing - they do not take damage from many weapons.
### Oerkki
- Found in dark areas like most monsters Oerkki wander the caverns stealing away torches on the ground and attacking anyone found in that area. 1 in 3 chance of dropping obsidian.
Found in dark areas like most monsters, Oerkki wander the caverns stealing away torches on the ground and attacking anyone found in that area. 1 in 3 chance of dropping obsidian.
### Sand Monster
- The hot deserts are home to these guys who spawn at any time of the day to attack players. They drop 3-5 desert sand when killed.
The hot deserts are home to these guys who spawn at any time of the day to attack players. They drop 3-5 desert sand when killed. A single sand monster isn't much of a threat - they deal one damage point.
### Spiders
- Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed.
Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed.
### Stone Monster
- Found underground in dark caves these mobs seem to be zombie-like in fashion with a tendency to rush a player in the area. can drop torch, iron or coal when killed.
Found underground in dark caves, these mobs seem to be zombie-like in fashion with a tendency to rush a player in the area. They can drop torch, iron or coal when killed.
### Tree Monster
- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom.
Found atop trees at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom.
### Land Guard
- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain.
These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain. They have between 60 and 130 health points and deal 15 damage, enough to kill you in two blows.
### Fire Spirit
- Fire Spirits will not tolerate players roaming around their domain and will fiercely attack until their dying puff of smoke. Will drop it's spirit and some fire dust when using ethereal.
Fire Spirits will not tolerate players roaming around their domain and will fiercely attack until their dying puff of smoke. They will drop their spirit and some fire dust when using ethereal.

View File

@ -2,8 +2,7 @@
local S = mobs.intllib_monster
-- custom particle effects
local effect = function(
pos, amount, texture, min_size, max_size, radius, gravity, glow)
local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow)
radius = radius or 2
min_size = min_size or 0.5
@ -25,7 +24,7 @@ local effect = function(
minsize = min_size,
maxsize = max_size,
texture = texture,
glow = glow,
glow = glow
})
end
@ -49,20 +48,20 @@ mobs:register_mob("mobs_monster:sand_monster", {
mesh = "mobs_sand_monster.b3d",
textures = {
{"mobs_sand_monster.png"},
{"mobs_sand_monster2.png"},
{"mobs_sand_monster2.png"}
},
blood_texture = "default_desert_sand.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_sandmonster",
random = "mobs_sandmonster"
},
walk_velocity = 1.5,
run_velocity = 4,
view_range = 8, --15
view_range = 8,
jump = true,
floats = 0,
drops = {
{name = "default:desert_sand", chance = 1, min = 3, max = 5},
{name = "default:desert_sand", chance = 1, min = 3, max = 5}
},
water_damage = 3,
lava_damage = 4,
@ -78,7 +77,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
run_start = 74,
run_end = 105,
punch_start = 74,
punch_end = 105,
punch_end = 105
},
immune_to = {
{"default:shovel_wood", 3}, -- shovels deal more damage to sand monster
@ -86,7 +85,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
{"default:shovel_bronze", 4},
{"default:shovel_steel", 4},
{"default:shovel_mese", 5},
{"default:shovel_diamond", 7},
{"default:shovel_diamond", 7}
},
--[[
custom_attack = function(self, p)
@ -118,17 +117,19 @@ mobs:register_mob("mobs_monster:sand_monster", {
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:sand_monster",
nodes = {"default:desert_sand"},
chance = 7000,
active_object_count = 2,
min_height = 0,
})
mobs:spawn({
name = "mobs_monster:sand_monster",
nodes = {"default:desert_sand"},
chance = 7000,
active_object_count = 2,
min_height = 0
})
end
mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"), "default_desert_sand.png", 1)
mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"),
"default_desert_sand.png", 1)
mobs:alias_mob("mobs:sand_monster", "mobs_monster:sand_monster") -- compatibility

BIN
screenshot.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

View File

@ -74,12 +74,12 @@ mobs:register_mob("mobs_monster:spider", {
{"mobs_spider_orange.png"},
{"mobs_spider_snowy.png"},
{"mobs_spider_grey.png"},
{"mobs_spider_crystal.png"},
{"mobs_spider_crystal.png"}
},
makes_footstep_sound = false,
sounds = {
random = "mobs_spider",
attack = "mobs_spider",
attack = "mobs_spider"
},
walk_velocity = 1,
run_velocity = 3,
@ -87,7 +87,7 @@ mobs:register_mob("mobs_monster:spider", {
view_range = 15,
floats = 0,
drops = {
{name = "farming:string", chance = 1, min = 0, max = 2},
{name = "farming:string", chance = 1, min = 0, max = 2}
},
water_damage = 5,
lava_damage = 5,
@ -102,7 +102,7 @@ mobs:register_mob("mobs_monster:spider", {
run_start = 1,
run_end = 21,
punch_start = 25,
punch_end = 45,
punch_end = 45
},
-- check surrounding nodes and spawn a specific spider
@ -224,32 +224,33 @@ mobs:register_mob("mobs_monster:spider", {
if not mobs.custom_spawn_monster then
-- above ground spawn
mobs:spawn({
name = "mobs_monster:spider",
nodes = {
"default:dirt_with_rainforest_litter", "default:snowblock",
"default:snow", "ethereal:crystal_dirt", "ethereal:cold_dirt"
},
min_light = 0,
max_light = 8,
chance = 7000,
active_object_count = 1,
min_height = 25,
max_height = 31000,
})
-- below ground spawn
mobs:spawn({
name = "mobs_monster:spider",
nodes = {"default:stone_with_mese", "default:mese", "default:stone"},
min_light = 0,
max_light = 7,
chance = 7000,
active_object_count = 1,
min_height = -31000,
max_height = -40,
})
-- above ground spawn
mobs:spawn({
name = "mobs_monster:spider",
nodes = {
"default:dirt_with_rainforest_litter", "default:snowblock",
"default:snow", "ethereal:crystal_dirt", "ethereal:cold_dirt"
},
min_light = 0,
max_light = 8,
chance = 7000,
active_object_count = 1,
min_height = 25,
max_height = 31000
})
-- below ground spawn
mobs:spawn({
name = "mobs_monster:spider",
nodes = {"default:stone_with_mese", "default:mese", "default:stone"},
min_light = 0,
max_light = 7,
chance = 7000,
active_object_count = 1,
min_height = -31000,
max_height = -40
})
end
@ -278,7 +279,7 @@ minetest.register_node(":mobs:cobweb", {
walkable = false,
groups = {snappy = 1, disable_jump = 1},
drop = "farming:string",
sounds = default.node_sound_leaves_defaults()
sounds = default and default.node_sound_leaves_defaults()
})
minetest.register_craft({
@ -286,13 +287,15 @@ minetest.register_craft({
recipe = {
{"farming:string", "", "farming:string"},
{"", "farming:string", ""},
{"farming:string", "", "farming:string"},
{"farming:string", "", "farming:string"}
}
})
local web_place = function(pos)
if minetest.find_node_near(pos, 1, {"ignore"}) then return end
local pos2 = minetest.find_node_near(pos, 1, {"air", "group:leaves"}, true)
if pos2 then
@ -316,7 +319,7 @@ mobs:register_arrow("mobs_monster:cobweb", {
player:punch(self.object, 1.0, {
full_punch_interval = 2.0,
damage_groups = {fleshy = 3},
damage_groups = {fleshy = 3}
}, nil)
web_place(self.object:get_pos())
@ -330,7 +333,7 @@ mobs:register_arrow("mobs_monster:cobweb", {
player:punch(self.object, 1.0, {
full_punch_interval = 2.0,
damage_groups = {fleshy = 3},
damage_groups = {fleshy = 3}
}, nil)
end
})

View File

@ -10,6 +10,15 @@ local stone_types = {
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "default:gold_lump", chance = 5, min = 0, max = 2}
}
},
{ nodes = {"default:sandstone"},
skins = {"mobs_stone_monster4.png"},
drops = {
{name = "default:sandstone", chance = 1, min = 0, max = 2},
{name = "default:tin_lump", chance = 5, min = 0, max = 2},
{name = "default:copper_lump", chance = 5, min = 0, max = 2}
}
}
}
@ -31,11 +40,11 @@ mobs:register_mob("mobs_monster:stone_monster", {
mesh = "mobs_stone_monster.b3d",
textures = {
{"mobs_stone_monster.png"},
{"mobs_stone_monster2.png"}, -- by AMMOnym
{"mobs_stone_monster2.png"} -- by AMMOnym
},
makes_footstep_sound = true,
sounds = {
random = "mobs_stonemonster",
random = "mobs_stonemonster"
},
walk_velocity = 1,
run_velocity = 2,
@ -61,7 +70,7 @@ mobs:register_mob("mobs_monster:stone_monster", {
run_start = 40,
run_end = 63,
punch_start = 40,
punch_end = 63,
punch_end = 63
},
immune_to = {
{"default:pick_wood", 0}, -- wooden pick doesnt hurt stone monster
@ -69,7 +78,7 @@ mobs:register_mob("mobs_monster:stone_monster", {
{"default:pick_bronze", 5},
{"default:pick_steel", 5},
{"default:pick_mese", 6},
{"default:pick_diamond", 7},
{"default:pick_diamond", 7}
},
-- check surrounding nodes and spawn a specific spider
@ -101,13 +110,14 @@ mobs:register_mob("mobs_monster:stone_monster", {
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:stone_monster",
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
max_light = 7,
chance = 7000,
max_height = 0,
})
mobs:spawn({
name = "mobs_monster:stone_monster",
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
max_light = 7,
chance = 7000,
max_height = 0
})
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 B

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 B

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 610 B

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 757 B

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 B

View File

@ -9,7 +9,7 @@ local tree_types = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:sakura_leaves", chance = 1, min = 1, max = 2},
{name = "ethereal:sakura_trunk", chance = 2, min = 1, max = 2},
{name = "ethereal:sakura_tree_sapling", chance = 2, min = 0, max = 2},
{name = "ethereal:sakura_tree_sapling", chance = 2, min = 0, max = 2}
}
},
@ -19,7 +19,7 @@ local tree_types = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:frost_leaves", chance = 1, min = 1, max = 2},
{name = "ethereal:frost_tree", chance = 2, min = 1, max = 2},
{name = "ethereal:crystal_spike", chance = 4, min = 0, max = 2},
{name = "ethereal:crystal_spike", chance = 4, min = 0, max = 2}
}
},
@ -29,7 +29,7 @@ local tree_types = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:yellowleaves", chance = 1, min = 1, max = 2},
{name = "ethereal:yellow_tree_sapling", chance = 2, min = 0, max = 2},
{name = "ethereal:golden_apple", chance = 3, min = 0, max = 2},
{name = "ethereal:golden_apple", chance = 3, min = 0, max = 2}
}
},
@ -41,7 +41,7 @@ local tree_types = {
{name = "default:coal_lump", chance = 3, min = 0, max = 3}
},
explode = true
},
}
}
@ -63,12 +63,12 @@ mobs:register_mob("mobs_monster:tree_monster", {
mesh = "mobs_tree_monster.b3d",
textures = {
{"mobs_tree_monster.png"},
{"mobs_tree_monster2.png"},
{"mobs_tree_monster2.png"}
},
blood_texture = "default_wood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_treemonster",
random = "mobs_treemonster"
},
walk_velocity = 1,
run_velocity = 3,
@ -78,7 +78,7 @@ mobs:register_mob("mobs_monster:tree_monster", {
{name = "default:stick", chance = 1, min = 0, max = 2},
{name = "default:sapling", chance = 2, min = 0, max = 2},
{name = "default:junglesapling", chance = 3, min = 0, max = 2},
{name = "default:apple", chance = 4, min = 1, max = 2},
{name = "default:apple", chance = 4, min = 1, max = 2}
},
water_damage = 0,
lava_damage = 0,
@ -105,7 +105,7 @@ mobs:register_mob("mobs_monster:tree_monster", {
run_start = 48,
run_end = 62,
punch_start = 48,
punch_end = 62,
punch_end = 62
},
-- check surrounding nodes and spawn a specific tree monster
@ -158,14 +158,15 @@ mobs:register_mob("mobs_monster:tree_monster", {
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:tree_monster",
nodes = {"group:leaves"}, --{"default:leaves", "default:jungleleaves"},
max_light = 7,
chance = 7000,
min_height = 0,
day_toggle = false,
})
mobs:spawn({
name = "mobs_monster:tree_monster",
nodes = {"group:leaves"},
max_light = 7,
chance = 7000,
min_height = 0,
day_toggle = false
})
end