merge with upstream
@ -1,5 +1,5 @@
|
||||
default
|
||||
mobs
|
||||
default?
|
||||
lucky_block?
|
||||
toolranks?
|
||||
intllib?
|
||||
|
@ -1,6 +1,16 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local dirt_types = {
|
||||
|
||||
{ nodes = {"ethereal:dry_dirt"},
|
||||
skins = {"mobs_dirt_monster3.png"},
|
||||
drops = {
|
||||
{name = "ethereal:dry_dirt", chance = 1, min = 0, max = 2}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- Dirt Monster by PilzAdam
|
||||
|
||||
@ -19,6 +29,7 @@ mobs:register_mob("mobs_monster:dirt_monster", {
|
||||
mesh = "mobs_stone_monster.b3d",
|
||||
textures = {
|
||||
{"mobs_dirt_monster.png"},
|
||||
{"mobs_dirt_monster2.png"},
|
||||
},
|
||||
blood_texture = "default_dirt.png",
|
||||
makes_footstep_sound = true,
|
||||
@ -48,18 +59,39 @@ mobs:register_mob("mobs_monster:dirt_monster", {
|
||||
punch_start = 40,
|
||||
punch_end = 63,
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific monster
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos() ; pos.y = pos.y - 1
|
||||
local tmp
|
||||
|
||||
for n = 1, #dirt_types do
|
||||
|
||||
tmp = dirt_types[n]
|
||||
|
||||
if minetest.find_node_near(pos, 1, tmp.nodes) then
|
||||
|
||||
self.base_texture = tmp.skins
|
||||
self.object:set_properties({textures = tmp.skins})
|
||||
|
||||
if tmp.drops then
|
||||
self.drops = tmp.drops
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return true -- run only once, false/nil runs every activation
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
local spawn_on = "default:dirt_with_grass"
|
||||
|
||||
if minetest.get_modpath("ethereal") then
|
||||
spawn_on = "ethereal:gray_dirt"
|
||||
end
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dirt_monster",
|
||||
nodes = {spawn_on},
|
||||
nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"},
|
||||
min_light = 0,
|
||||
max_light = 7,
|
||||
chance = 6000,
|
||||
@ -68,6 +100,7 @@ mobs:spawn({
|
||||
max_height = 80,
|
||||
day_toggle = false,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:dirt_monster", S("Dirt Monster"), "default_dirt.png", 1)
|
||||
|
@ -1,6 +1,16 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local master_types = {
|
||||
|
||||
{ nodes = {"nether:rack"},
|
||||
skins = {"mobs_dungeon_master_nether.png"},
|
||||
},
|
||||
{ nodes = {"nether:rack_deep"},
|
||||
skins = {"mobs_dungeon_master_netherdeep.png"},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- Dungeon Master by PilzAdam
|
||||
|
||||
@ -16,8 +26,8 @@ mobs:register_mob("mobs_monster:dungeon_master", {
|
||||
shoot_interval = 2.2,
|
||||
arrow = "mobs_monster:fireball",
|
||||
shoot_offset = 1,
|
||||
hp_min = 22,
|
||||
hp_max = 45,
|
||||
hp_min = 42,
|
||||
hp_max = 75,
|
||||
armor = 60,
|
||||
collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7},
|
||||
visual = "mesh",
|
||||
@ -60,17 +70,45 @@ mobs:register_mob("mobs_monster:dungeon_master", {
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific monster
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos() ; pos.y = pos.y - 1
|
||||
local tmp
|
||||
|
||||
for n = 1, #master_types do
|
||||
|
||||
tmp = master_types[n]
|
||||
|
||||
if minetest.find_node_near(pos, 1, tmp.nodes) then
|
||||
|
||||
self.base_texture = tmp.skins
|
||||
self.object:set_properties({textures = tmp.skins})
|
||||
|
||||
if tmp.drops then
|
||||
self.drops = tmp.drops
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return true -- run only once, false/nil runs every activation
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dungeon_master",
|
||||
nodes = {"default:stone"},
|
||||
nodes = {"default:stone", "nether:rack", "nether:rack_deep"},
|
||||
max_light = 5,
|
||||
chance = 9000,
|
||||
active_object_count = 1,
|
||||
max_height = -70,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:dungeon_master", S("Dungeon Master"), "fire_basic_flame.png", 1, true)
|
||||
|
98
fire_spirit.lua
Normal file
@ -0,0 +1,98 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local mob_drops = {
|
||||
{name = "fireflies:firefly", chance = 1, min = 1, max = 1}
|
||||
}
|
||||
|
||||
if minetest.get_modpath("ethereal") then
|
||||
|
||||
table.insert(mob_drops,
|
||||
{name = "ethereal:fire_dust", chance = 1, min = 1, max = 1})
|
||||
end
|
||||
|
||||
-- Fire Spirit
|
||||
|
||||
mobs:register_mob("mobs_monster:fire_spirit", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
pathfinding = true,
|
||||
reach = 2,
|
||||
damage = 4,
|
||||
hp_min = 25,
|
||||
hp_max = 45,
|
||||
armor = 100,
|
||||
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
|
||||
visual_scale = {x = 0.5, y = 0.5, z = 0.5},
|
||||
visual = "sprite",
|
||||
textures = {
|
||||
{"mobs_fire_spirit.png"}
|
||||
},
|
||||
glow = 14,
|
||||
blood_texture = "fire_basic_flame.png",
|
||||
immune_to = {
|
||||
{"bucket:bucket_water", 1},
|
||||
{"bucket:bucket_river_water", 1},
|
||||
{"all"}
|
||||
},
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
random = "fire_fire",
|
||||
damage = "fire_extinguish_flame",
|
||||
death = "fire_extinguish_flame"
|
||||
},
|
||||
view_range = 14,
|
||||
walk_velocity = 2,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
jump_height = 6,
|
||||
drops = mob_drops,
|
||||
water_damage = 1,
|
||||
lava_damage = 0,
|
||||
fire_damage = 0,
|
||||
light_damage = 0,
|
||||
fall_damage = false,
|
||||
fear_height = 8,
|
||||
animation = {},
|
||||
|
||||
on_die = function(self, pos)
|
||||
|
||||
mobs:effect(pos, 20, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false)
|
||||
|
||||
self.object:remove()
|
||||
end,
|
||||
|
||||
do_custom = function(self, dtime)
|
||||
|
||||
self.flame_timer = (self.flame_timer or 0) + dtime
|
||||
|
||||
if self.flame_timer < 0.25 then
|
||||
return
|
||||
end
|
||||
|
||||
self.flame_timer = 0
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
-- pos, amount, texture, min_size, max_size, radius, gravity, glow, fall
|
||||
mobs:effect(pos, 5, "fire_basic_flame.png", 1, 2, 0.1, 0.2, 14, nil)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
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
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:fire_spirit", S("Fire Spirit"), "fire_basic_flame.png", 1)
|
47
init.lua
@ -1,22 +1,45 @@
|
||||
|
||||
-- Load support for intllib.
|
||||
local path = minetest.get_modpath(minetest.get_current_modname())
|
||||
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
|
||||
|
||||
local S = minetest.get_translator and minetest.get_translator("mobs_monster") or
|
||||
dofile(path .. "/intllib.lua")
|
||||
dofile(path .. "intllib.lua")
|
||||
|
||||
mobs.intllib = S
|
||||
|
||||
|
||||
-- Check for custom mob spawn file
|
||||
local input = io.open(path .. "spawn.lua", "r")
|
||||
|
||||
if input then
|
||||
mobs.custom_spawn_monster = true
|
||||
input:close()
|
||||
input = nil
|
||||
end
|
||||
|
||||
|
||||
-- Monsters
|
||||
dofile(path .. "/dirt_monster.lua") -- PilzAdam
|
||||
dofile(path .. "/dungeon_master.lua")
|
||||
dofile(path .. "/oerkki.lua")
|
||||
dofile(path .. "/sand_monster.lua")
|
||||
dofile(path .. "/stone_monster.lua")
|
||||
dofile(path .. "/tree_monster.lua")
|
||||
dofile(path .. "/lava_flan.lua") -- Zeg9
|
||||
dofile(path .. "/mese_monster.lua")
|
||||
dofile(path .. "/spider.lua") -- AspireMint
|
||||
dofile(path .. "dirt_monster.lua") -- PilzAdam
|
||||
dofile(path .. "dungeon_master.lua")
|
||||
dofile(path .. "oerkki.lua")
|
||||
dofile(path .. "sand_monster.lua")
|
||||
dofile(path .. "stone_monster.lua")
|
||||
dofile(path .. "tree_monster.lua")
|
||||
dofile(path .. "lava_flan.lua") -- Zeg9
|
||||
dofile(path .. "mese_monster.lua")
|
||||
dofile(path .. "spider.lua") -- AspireMint
|
||||
dofile(path .. "land_guard.lua")
|
||||
dofile(path .. "fire_spirit.lua")
|
||||
|
||||
|
||||
-- Load custom spawning
|
||||
if mobs.custom_spawn_monster then
|
||||
dofile(path .. "spawn.lua")
|
||||
end
|
||||
|
||||
|
||||
-- Lucky Blocks
|
||||
dofile(path .. "/lucky_block.lua")
|
||||
dofile(path .. "lucky_block.lua")
|
||||
|
||||
|
||||
print (S("[MOD] Mobs Redo Monsters loaded"))
|
||||
|
127
land_guard.lua
Normal file
@ -0,0 +1,127 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
|
||||
local guard_types = {
|
||||
|
||||
{ nodes = {
|
||||
"default:snow", "default:snowblock", "default:ice",
|
||||
"default:dirt_with_snow"
|
||||
},
|
||||
skins = {"mobs_land_guard6.png", "mobs_land_guard7.png", "mobs_land_guard8.png"},
|
||||
drops = {
|
||||
{name = "default:ice", chance = 1, min = 1, max = 4},
|
||||
{name = "mobs:leather", chance = 2, min = 0, max = 2},
|
||||
{name = "default:diamond", chance = 4, min = 0, max = 2},
|
||||
},
|
||||
},
|
||||
|
||||
{ nodes = {
|
||||
"ethereal:dry_dirt", "default:sand", "default:desert_sand",
|
||||
"default:dry_dirt_with_dry_grass", "default:dry_dirt"
|
||||
},
|
||||
skins = {"mobs_land_guard4.png", "mobs_land_guard5.png"},
|
||||
drops = {
|
||||
{name = "default:sandstone", chance = 1, min = 1, max = 4},
|
||||
{name = "mobs:leather", chance = 2, min = 0, max = 2},
|
||||
{name = "default:mese_crystal", chance = 4, min = 0, max = 2},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
-- Land Guard
|
||||
|
||||
mobs:register_mob("mobs_monster:land_guard", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
reach = 3,
|
||||
damage = 15,
|
||||
hp_min = 30,
|
||||
hp_max = 65,
|
||||
armor = 50,
|
||||
collisionbox = {-0.5, -1.01, -0.5, 0.5, 1.6, 0.5},
|
||||
visual_size = {x = 1, y = 1},
|
||||
visual = "mesh",
|
||||
mesh = "mobs_dungeon_master.b3d",
|
||||
textures = {
|
||||
{"mobs_land_guard.png"},
|
||||
{"mobs_land_guard2.png"},
|
||||
{"mobs_land_guard3.png"}
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "mobs_dungeonmaster",
|
||||
},
|
||||
walk_velocity = 1.5,
|
||||
run_velocity = 3.4,
|
||||
jump = true,
|
||||
jump_height = 2.0,
|
||||
floats = 0,
|
||||
view_range = 15,
|
||||
drops = {
|
||||
{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},
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 6,
|
||||
light_damage = 0,
|
||||
fear_height = 8,
|
||||
animation = {
|
||||
stand_start = 0,
|
||||
stand_end = 19,
|
||||
walk_start = 20,
|
||||
walk_end = 35,
|
||||
punch_start = 36,
|
||||
punch_end = 48,
|
||||
speed_normal = 15,
|
||||
speed_run = 20,
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific guard
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos() ; pos.y = pos.y - 1
|
||||
local tmp
|
||||
|
||||
for n = 1, #guard_types do
|
||||
|
||||
tmp = guard_types[n]
|
||||
|
||||
if minetest.find_node_near(pos, 1, tmp.nodes) then
|
||||
|
||||
self.base_texture = { tmp.skins[math.random(#tmp.skins)] }
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
self.docile_by_day = tmp.docile
|
||||
|
||||
if tmp.drops then
|
||||
self.drops = tmp.drops
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return true -- run only once, false/nil runs every activation
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:land_guard",
|
||||
nodes = {
|
||||
"default:snow", "default:ice", "default:stone",
|
||||
"default:dry_dirt_with_dry_grass", "ethereal:dry_dirt"
|
||||
},
|
||||
max_light = 7,
|
||||
chance = 25000,
|
||||
min_height = 0,
|
||||
active_object_count = 1,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:land_guard", S("Land Guard"), "default_ice.png", 1)
|
@ -36,7 +36,8 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 8,
|
||||
lava_damage = 0,
|
||||
lava_damage = -1,
|
||||
fire_damage = 0,
|
||||
light_damage = 0,
|
||||
immune_to = {
|
||||
{"mobs:pick_lava", -2}, -- lava pick heals 2 health
|
||||
@ -52,7 +53,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28,
|
||||
punch_end = 28
|
||||
},
|
||||
on_die = function(self, pos)
|
||||
|
||||
@ -89,6 +90,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:lava_flan",
|
||||
nodes = {"default:lava_source"},
|
||||
@ -96,6 +98,7 @@ mobs:spawn({
|
||||
active_object_count = 1,
|
||||
max_height = 0,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1)
|
||||
@ -107,6 +110,7 @@ mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility
|
||||
minetest.register_craftitem(":mobs:lava_orb", {
|
||||
description = S("Lava orb"),
|
||||
inventory_image = "zmobs_lava_orb.png",
|
||||
light_source = 14,
|
||||
})
|
||||
|
||||
minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
|
||||
@ -170,13 +174,18 @@ minetest.register_tool(":mobs:pick_lava", {
|
||||
inventory_image = "mobs_pick_lava.png",
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.4,
|
||||
max_drop_level=3,
|
||||
groupcaps={
|
||||
cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3},
|
||||
max_drop_level = 3,
|
||||
groupcaps = {
|
||||
cracky = {
|
||||
times = {[1] = 1.80, [2] = 0.80, [3] = 0.40},
|
||||
uses = 40,
|
||||
maxlevel = 3
|
||||
}
|
||||
},
|
||||
damage_groups = {fleshy = 6, fire = 1},
|
||||
},
|
||||
groups = {pickaxe = 1}
|
||||
groups = {pickaxe = 1},
|
||||
light_source = 14
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -184,7 +193,7 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""}
|
||||
}
|
||||
})
|
||||
|
||||
@ -363,6 +372,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 8,
|
||||
fire_damage = 0,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 15,
|
||||
@ -374,7 +384,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
|
||||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28,
|
||||
punch_end = 28
|
||||
}
|
||||
})
|
||||
|
||||
@ -417,9 +427,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
||||
|
||||
local radius = 1
|
||||
local def = minetest.registered_nodes[node]
|
||||
|
||||
if def then
|
||||
node = { name = node }
|
||||
node = {name = node}
|
||||
end
|
||||
|
||||
if def and def.tiles and def.tiles[1] then
|
||||
texture = def.tiles[1]
|
||||
end
|
||||
@ -446,7 +458,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
||||
texture = texture,
|
||||
-- ^ only as fallback for clients without support for `node` parameter
|
||||
node = node,
|
||||
collisiondetection = true,
|
||||
collisiondetection = true
|
||||
})
|
||||
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
|
@ -30,3 +30,7 @@ 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)
|
||||
mobs_dungeon_master_nether.png
|
||||
mobs_dungeon_master_netherdeep.png
|
||||
|
@ -12,6 +12,9 @@ mobs:register_mob("mobs_monster:mese_monster", {
|
||||
shoot_interval = 0.5,
|
||||
arrow = "mobs_monster:mese_arrow",
|
||||
shoot_offset = 2,
|
||||
--arrow_override = function(self)
|
||||
-- self.velocity = 20
|
||||
--end,
|
||||
hp_min = 10,
|
||||
hp_max = 25,
|
||||
armor = 80,
|
||||
@ -56,6 +59,7 @@ mobs:register_mob("mobs_monster:mese_monster", {
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:mese_monster",
|
||||
nodes = {"default:stone"},
|
||||
@ -64,6 +68,7 @@ mobs:spawn({
|
||||
active_object_count = 1,
|
||||
max_height = -20,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_block.png", 1)
|
||||
|
3
mod.conf
@ -1 +1,4 @@
|
||||
name = mobs_monster
|
||||
depends = mobs
|
||||
optional_depends = default, lucky_block, toolranks, intllib
|
||||
description = Adds many types of monsters.
|
||||
|
@ -20,6 +20,7 @@ mobs:register_mob("mobs_monster:oerkki", {
|
||||
textures = {
|
||||
{"mobs_oerkki.png"},
|
||||
{"mobs_oerkki2.png"},
|
||||
{"mobs_oerkki3.png"},
|
||||
},
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
@ -61,6 +62,7 @@ mobs:register_mob("mobs_monster:oerkki", {
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:oerkki",
|
||||
nodes = {"default:stone"},
|
||||
@ -68,6 +70,7 @@ mobs:spawn({
|
||||
chance = 7000,
|
||||
max_height = -10,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:oerkki", S("Oerkki"), "default_obsidian.png", 1)
|
||||
|
12
readme.md
@ -27,7 +27,7 @@ Sand Monster
|
||||
|
||||
Spiders
|
||||
|
||||
- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, 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
|
||||
|
||||
@ -35,6 +35,14 @@ Stone Monster
|
||||
|
||||
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.
|
||||
- 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.
|
||||
|
||||
Land Guard
|
||||
|
||||
- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain.
|
||||
|
||||
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.
|
||||
|
||||
Lucky Blocks: 11
|
||||
|
@ -39,6 +39,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
|
||||
attack_type = "dogfight",
|
||||
pathfinding = true,
|
||||
--specific_attack = {"player", "mobs_npc:npc"},
|
||||
--ignore_invisibility = true,
|
||||
reach = 2,
|
||||
damage = 1,
|
||||
hp_min = 4,
|
||||
@ -49,6 +50,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
|
||||
mesh = "mobs_sand_monster.b3d",
|
||||
textures = {
|
||||
{"mobs_sand_monster.png"},
|
||||
{"mobs_sand_monster2.png"},
|
||||
},
|
||||
blood_texture = "default_desert_sand.png",
|
||||
makes_footstep_sound = true,
|
||||
@ -116,7 +118,7 @@ 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"},
|
||||
@ -125,6 +127,7 @@ mobs:spawn({
|
||||
min_height = 0,
|
||||
max_height = 80,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"), "default_desert_sand.png", 1)
|
||||
|
173
spawn_example.lua
Normal file
@ -0,0 +1,173 @@
|
||||
|
||||
--[[ Spawn Template, defaults to values shown if line not provided
|
||||
|
||||
mobs:spawn({
|
||||
|
||||
name = "",
|
||||
|
||||
- Name of mob, must be provided e.g. "mymod:my_mob"
|
||||
|
||||
nodes = {"group:soil, "group:stone"},
|
||||
|
||||
- Nodes to spawn on top of.
|
||||
|
||||
neighbors = {"air"},
|
||||
|
||||
- Nodes to spawn beside.
|
||||
|
||||
min_light = 0,
|
||||
|
||||
- Minimum light level.
|
||||
|
||||
max_light = 15,
|
||||
|
||||
- Maximum light level, 15 is sunlight only.
|
||||
|
||||
interval = 30,
|
||||
|
||||
- Spawn interval in seconds.
|
||||
|
||||
chance = 5000,
|
||||
|
||||
- Spawn chance, 1 in every 5000 nodes.
|
||||
|
||||
active_object_count = 1,
|
||||
|
||||
- Active mobs of this type in area.
|
||||
|
||||
min_height = -31000,
|
||||
|
||||
- Minimum height level.
|
||||
|
||||
max_height = 31000,
|
||||
|
||||
- Maximum height level.
|
||||
|
||||
day_toggle = nil,
|
||||
|
||||
- Daytime toggle, true to spawn during day, false for night, nil for both
|
||||
|
||||
on_spawn = nil,
|
||||
|
||||
- On spawn function to run when mob spawns in world
|
||||
|
||||
on_map_load = nil,
|
||||
|
||||
- On map load, when true mob only spawns in newly generated map areas
|
||||
})
|
||||
]]--
|
||||
|
||||
|
||||
-- Dirt Monster
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dirt_monster",
|
||||
nodes = {"default:dirt_with_grass"},
|
||||
min_light = 0,
|
||||
max_light = 7,
|
||||
chance = 6000,
|
||||
active_object_count = 2,
|
||||
min_height = 0,
|
||||
day_toggle = false,
|
||||
})
|
||||
|
||||
-- Dungeon Master
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dungeon_master",
|
||||
nodes = {"default:stone"},
|
||||
max_light = 5,
|
||||
chance = 9000,
|
||||
active_object_count = 1,
|
||||
max_height = -70,
|
||||
})
|
||||
|
||||
-- Lava Flan
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:lava_flan",
|
||||
nodes = {"default:lava_source"},
|
||||
chance = 1500,
|
||||
active_object_count = 1,
|
||||
max_height = 0,
|
||||
})
|
||||
|
||||
-- Mese Monster
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:mese_monster",
|
||||
nodes = {"default:stone"},
|
||||
max_light = 7,
|
||||
chance = 5000,
|
||||
active_object_count = 1,
|
||||
max_height = -20,
|
||||
})
|
||||
|
||||
-- Oerkki
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:oerkki",
|
||||
nodes = {"default:stone"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
max_height = -10,
|
||||
})
|
||||
|
||||
-- Sand Monster
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:sand_monster",
|
||||
nodes = {"default:desert_sand"},
|
||||
chance = 7000,
|
||||
active_object_count = 2,
|
||||
min_height = 0,
|
||||
})
|
||||
|
||||
-- Spider (above ground)
|
||||
|
||||
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,
|
||||
})
|
||||
|
||||
-- Spider (below ground)
|
||||
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,
|
||||
})
|
||||
|
||||
-- Stone Monster
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:stone_monster",
|
||||
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
max_height = 0,
|
||||
})
|
||||
|
||||
-- Tree Monster
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:tree_monster",
|
||||
nodes = {"default:leaves", "default:jungleleaves"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
min_height = 0,
|
||||
day_toggle = false,
|
||||
})
|
159
spider.lua
@ -11,6 +11,47 @@ local get_velocity = function(self)
|
||||
return (v.x * v.x + v.z * v.z) ^ 0.5
|
||||
end
|
||||
|
||||
|
||||
local spider_types = {
|
||||
|
||||
{ nodes = {"default:snow", "default:snowblock", "default:dirt_with_snow"},
|
||||
skins = {"mobs_spider_snowy.png"},
|
||||
docile = true,
|
||||
drops = nil
|
||||
},
|
||||
|
||||
{ nodes = {"default:dirt_with_rainforest_litter", "default:jungletree"},
|
||||
skins = {"mobs_spider_orange.png"},
|
||||
docile = true,
|
||||
drops = nil,
|
||||
shoot = true
|
||||
},
|
||||
|
||||
{ nodes = {"default:stone", "default:gravel"},
|
||||
skins = {"mobs_spider_grey.png"},
|
||||
docile = nil,
|
||||
drops = nil,
|
||||
small = true
|
||||
},
|
||||
|
||||
{ nodes = {"default:mese", "default:stone_with_mese"},
|
||||
skins = {"mobs_spider_mese.png"},
|
||||
docile = nil,
|
||||
drops = {
|
||||
{name = "farming:string", chance = 1, min = 0, max = 2},
|
||||
{name = "default:mese_crystal_fragment", chance = 2, min = 1, max = 4}}
|
||||
},
|
||||
|
||||
{ nodes = {"ethereal:crystal_dirt", "ethereal:crystal_spike"},
|
||||
skins = {"mobs_spider_crystal.png"},
|
||||
docile = true,
|
||||
drops = {
|
||||
{name = "farming:string", chance = 1, min = 0, max = 2},
|
||||
{name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2}}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- Spider by AspireMint (CC-BY-SA 3.0 license)
|
||||
|
||||
mobs:register_mob("mobs_monster:spider", {
|
||||
@ -53,7 +94,7 @@ mobs:register_mob("mobs_monster:spider", {
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 15,
|
||||
speed_run = 20,--15,
|
||||
speed_run = 20,
|
||||
stand_start = 0,
|
||||
stand_end = 0,
|
||||
walk_start = 1,
|
||||
@ -63,42 +104,46 @@ mobs:register_mob("mobs_monster:spider", {
|
||||
punch_start = 25,
|
||||
punch_end = 45,
|
||||
},
|
||||
-- what kind of spider are we spawning?
|
||||
|
||||
-- check surrounding nodes and spawn a specific spider
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos() ; pos.y = pos.y - 1
|
||||
local tmp
|
||||
|
||||
-- snowy spider
|
||||
if minetest.find_node_near(pos, 1,
|
||||
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
|
||||
self.base_texture = {"mobs_spider_snowy.png"}
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
self.docile_by_day = true
|
||||
-- tarantula
|
||||
elseif minetest.find_node_near(pos, 1,
|
||||
{"default:dirt_with_rainforest_litter", "default:jungletree"}) then
|
||||
self.base_texture = {"mobs_spider_orange.png"}
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
self.docile_by_day = true
|
||||
-- grey spider
|
||||
elseif minetest.find_node_near(pos, 1,
|
||||
{"default:stone", "default:gravel"}) then
|
||||
self.base_texture = {"mobs_spider_grey.png"}
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
-- mese spider
|
||||
elseif minetest.find_node_near(pos, 1,
|
||||
{"default:mese", "default:stone_with_mese"}) then
|
||||
self.base_texture = {"mobs_spider_mese.png"}
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
elseif minetest.find_node_near(pos, 1,
|
||||
{"ethereal:crystal_dirt", "ethereal:crystal_spike"}) then
|
||||
self.base_texture = {"mobs_spider_crystal.png"}
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
self.docile_by_day = true
|
||||
self.drops = {
|
||||
{name = "farming:string", chance = 1, min = 0, max = 2},
|
||||
{name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2},
|
||||
}
|
||||
for n = 1, #spider_types do
|
||||
|
||||
tmp = spider_types[n]
|
||||
|
||||
if minetest.find_node_near(pos, 1, tmp.nodes) then
|
||||
|
||||
self.base_texture = tmp.skins
|
||||
self.object:set_properties({textures = tmp.skins})
|
||||
self.docile_by_day = tmp.docile
|
||||
|
||||
if tmp.drops then
|
||||
self.drops = tmp.drops
|
||||
end
|
||||
|
||||
if tmp.shoot then
|
||||
self.attack_type = "dogshoot"
|
||||
self.arrow = "mobs_monster:cobweb"
|
||||
self.dogshoot_switch = 1
|
||||
self.dogshoot_count_max = 60
|
||||
self.dogshoot_count2_max = 20
|
||||
self.shoot_interval = 2
|
||||
self.shoot_offset = 2
|
||||
end
|
||||
|
||||
if tmp.small then
|
||||
self.object:set_properties({
|
||||
collisionbox = {-0.2, -0.2, -0.2, 0.2, 0, 0.2},
|
||||
visual_size = {x = 0.25, y = 0.25}
|
||||
})
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return true -- run only once, false/nil runs every activation
|
||||
@ -178,6 +223,7 @@ mobs:register_mob("mobs_monster:spider", {
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
-- above ground spawn
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:spider",
|
||||
@ -204,6 +250,7 @@ mobs:spawn({
|
||||
min_height = -31000,
|
||||
max_height = -40,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:spider", S("Spider"), "mobs_cobweb.png", 1)
|
||||
@ -233,7 +280,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.node_sound_leaves_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -244,3 +291,47 @@ minetest.register_craft({
|
||||
{"farming:string", "", "farming:string"},
|
||||
}
|
||||
})]]
|
||||
|
||||
local web_place = function(pos)
|
||||
|
||||
local pos2 = minetest.find_node_near(pos, 1, {"air", "group:leaves"}, true)
|
||||
|
||||
if pos2 then
|
||||
minetest.swap_node(pos2, {name = "homedecor:cobweb_corner"})
|
||||
end
|
||||
end
|
||||
|
||||
mobs:register_arrow("mobs_monster:cobweb", {
|
||||
visual = "sprite",
|
||||
visual_size = {x = 1, y = 1},
|
||||
textures = {"mobs_cobweb.png"},
|
||||
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
|
||||
velocity = 15,
|
||||
tail = 1,
|
||||
tail_texture = "mobs_cobweb.png",
|
||||
tail_size = 5,
|
||||
glow = 2,
|
||||
expire = 0.1,
|
||||
|
||||
hit_player = function(self, player)
|
||||
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 2.0,
|
||||
damage_groups = {fleshy = 3},
|
||||
}, nil)
|
||||
|
||||
web_place(self.object:get_pos())
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
web_place(pos)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 2.0,
|
||||
damage_groups = {fleshy = 3},
|
||||
}, nil)
|
||||
end
|
||||
})
|
||||
|
@ -1,6 +1,18 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local stone_types = {
|
||||
|
||||
{ nodes = {"default:desert_stone"},
|
||||
skins = {"mobs_stone_monster3.png"},
|
||||
drops = {
|
||||
{name = "default:desert_cobble", chance = 1, min = 0, max = 2},
|
||||
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
|
||||
{name = "default:gold_lump", chance = 5, min = 0, max = 2}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- Stone Monster by PilzAdam
|
||||
|
||||
@ -34,7 +46,7 @@ mobs:register_mob("mobs_monster:stone_monster", {
|
||||
drops = {
|
||||
{name = "default:cobble", chance = 1, min = 0, max = 2},
|
||||
{name = "default:coal_lump", chance = 3, min = 0, max = 2},
|
||||
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
|
||||
{name = "default:iron_lump", chance = 5, min = 0, max = 2}
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 1,
|
||||
@ -59,9 +71,36 @@ mobs:register_mob("mobs_monster:stone_monster", {
|
||||
{"default:pick_mese", 6},
|
||||
{"default:pick_diamond", 7},
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific spider
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos() ; pos.y = pos.y - 1
|
||||
local tmp
|
||||
|
||||
for n = 1, #stone_types do
|
||||
|
||||
tmp = stone_types[n]
|
||||
|
||||
if minetest.find_node_near(pos, 1, tmp.nodes) then
|
||||
|
||||
self.base_texture = tmp.skins
|
||||
self.object:set_properties({textures = tmp.skins})
|
||||
|
||||
if tmp.drops then
|
||||
self.drops = tmp.drops
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return true -- run only once, false/nil runs every activation
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:stone_monster",
|
||||
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
|
||||
@ -69,6 +108,7 @@ mobs:spawn({
|
||||
chance = 7000,
|
||||
max_height = 0,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:stone_monster",
|
||||
|
BIN
textures/mobs_dirt_monster2.png
Normal file
After Width: | Height: | Size: 594 B |
BIN
textures/mobs_dirt_monster3.png
Normal file
After Width: | Height: | Size: 610 B |
BIN
textures/mobs_dungeon_master_nether.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
textures/mobs_dungeon_master_netherdeep.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
textures/mobs_fire_spirit.png
Normal file
After Width: | Height: | Size: 274 B |
BIN
textures/mobs_land_guard.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
textures/mobs_land_guard2.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
textures/mobs_land_guard3.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
textures/mobs_land_guard4.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
textures/mobs_land_guard5.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
textures/mobs_land_guard6.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
textures/mobs_land_guard7.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
textures/mobs_land_guard8.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
textures/mobs_oerkki3.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
textures/mobs_sand_monster2.png
Normal file
After Width: | Height: | Size: 778 B |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 757 B |
BIN
textures/mobs_stone_monster3.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
textures/mobs_tree_monster3.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
textures/mobs_tree_monster4.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
textures/mobs_tree_monster5.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
textures/mobs_tree_monster6.png
Executable file
After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 567 B After Width: | Height: | Size: 305 B |
BIN
textures/zmobs_mese_monster_old.png
Normal file
After Width: | Height: | Size: 567 B |
@ -1,6 +1,49 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local tree_types = {
|
||||
|
||||
{ nodes = {"ethereal:sakura_leaves", "ethereal:sakura_leaves2"},
|
||||
skins = {"mobs_tree_monster5.png"},
|
||||
drops = {
|
||||
{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},
|
||||
}
|
||||
},
|
||||
|
||||
{ nodes = {"ethereal:frost_leaves"},
|
||||
skins = {"mobs_tree_monster3.png"},
|
||||
drops = {
|
||||
{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},
|
||||
}
|
||||
},
|
||||
|
||||
{ nodes = {"ethereal:yellowleaves"},
|
||||
skins = {"mobs_tree_monster4.png"},
|
||||
drops = {
|
||||
{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},
|
||||
}
|
||||
},
|
||||
|
||||
{ nodes = {"default:acacia_bush_leaves"},
|
||||
skins = {"mobs_tree_monster6.png"},
|
||||
drops = {
|
||||
{name = "tnt:gunpowder", chance = 1, min = 0, max = 2},
|
||||
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
|
||||
{name = "default:coal_lump", chance = 3, min = 0, max = 3}
|
||||
},
|
||||
explode = true
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
-- Tree Monster (or Tree Gollum) by PilzAdam
|
||||
|
||||
@ -12,8 +55,8 @@ mobs:register_mob("mobs_monster:tree_monster", {
|
||||
--specific_attack = {"player", "mobs_animal:chicken"},
|
||||
reach = 2,
|
||||
damage = 2,
|
||||
hp_min = 7,
|
||||
hp_max = 33,
|
||||
hp_min = 20,
|
||||
hp_max = 40,
|
||||
armor = 100,
|
||||
collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4},
|
||||
visual = "mesh",
|
||||
@ -64,18 +107,67 @@ mobs:register_mob("mobs_monster:tree_monster", {
|
||||
punch_start = 48,
|
||||
punch_end = 62,
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific tree monster
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos() ; pos.y = pos.y - 1
|
||||
local tmp
|
||||
|
||||
for n = 1, #tree_types do
|
||||
|
||||
tmp = tree_types[n]
|
||||
|
||||
if tmp.explode and math.random(2) == 1 then return true end
|
||||
|
||||
if minetest.find_node_near(pos, 1, tmp.nodes) then
|
||||
|
||||
self.base_texture = tmp.skins
|
||||
self.object:set_properties({textures = tmp.skins})
|
||||
|
||||
if tmp.drops then
|
||||
self.drops = tmp.drops
|
||||
end
|
||||
|
||||
if tmp.explode then
|
||||
self.attack_type = "explode"
|
||||
self.explosion_radius = 3
|
||||
self.explosion_timer = 3
|
||||
self.damage = 21
|
||||
self.reach = 3
|
||||
self.fear_height = 4
|
||||
self.water_damage = 2
|
||||
self.lava_damage = 15
|
||||
self.light_damage = 0
|
||||
self.makes_footstep_sound = false
|
||||
self.runaway_from = {"mobs_animal:kitten"}
|
||||
self.sounds = {
|
||||
attack = "tnt_ignite",
|
||||
explode = "tnt_explode",
|
||||
fuse = "tnt_ignite"
|
||||
}
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return true -- run only once, false/nil runs every activation
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:tree_monster",
|
||||
nodes = {"default:leaves", "default:jungleleaves"},
|
||||
nodes = {"group:leaves"}, --{"default:leaves", "default:jungleleaves"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
min_height = 0,
|
||||
day_toggle = false,
|
||||
max_height = 180,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:tree_monster", S("Tree Monster"), "default_tree_top.png", 1)
|
||||
|