Compare commits

...

17 Commits

34 changed files with 554 additions and 60 deletions

View File

@ -1,6 +1,16 @@
local S = mobs.intllib 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 -- Dirt Monster by PilzAdam
@ -19,6 +29,7 @@ mobs:register_mob("mobs_monster:dirt_monster", {
mesh = "mobs_stone_monster.b3d", mesh = "mobs_stone_monster.b3d",
textures = { textures = {
{"mobs_dirt_monster.png"}, {"mobs_dirt_monster.png"},
{"mobs_dirt_monster2.png"},
}, },
blood_texture = "default_dirt.png", blood_texture = "default_dirt.png",
makes_footstep_sound = true, makes_footstep_sound = true,
@ -49,19 +60,39 @@ mobs:register_mob("mobs_monster:dirt_monster", {
punch_start = 40, punch_start = 40,
punch_end = 63, 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 if not mobs.custom_spawn_monster then
mobs:spawn({ mobs:spawn({
name = "mobs_monster:dirt_monster", name = "mobs_monster:dirt_monster",
nodes = {spawn_on}, nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"},
min_light = 0, min_light = 0,
max_light = 7, max_light = 7,
chance = 6000, chance = 6000,

View File

@ -16,8 +16,8 @@ mobs:register_mob("mobs_monster:dungeon_master", {
shoot_interval = 2.2, shoot_interval = 2.2,
arrow = "mobs_monster:fireball", arrow = "mobs_monster:fireball",
shoot_offset = 1, shoot_offset = 1,
hp_min = 22, hp_min = 42,
hp_max = 45, hp_max = 75,
armor = 60, armor = 60,
collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7}, collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7},
visual = "mesh", visual = "mesh",

98
fire_spirit.lua Normal file
View 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)

View File

@ -29,6 +29,8 @@ dofile(path .. "lava_flan.lua") -- Zeg9
dofile(path .. "mese_monster.lua") dofile(path .. "mese_monster.lua")
dofile(path .. "spider.lua") -- AspireMint dofile(path .. "spider.lua") -- AspireMint
dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa
dofile(path .. "land_guard.lua")
dofile(path .. "fire_spirit.lua")
-- Load custom spawning -- Load custom spawning

127
land_guard.lua Normal file
View 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)

View File

@ -36,7 +36,8 @@ mobs:register_mob("mobs_monster:lava_flan", {
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1}, {name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
}, },
water_damage = 8, water_damage = 8,
lava_damage = 0, lava_damage = -1,
fire_damage = 0,
light_damage = 0, light_damage = 0,
immune_to = { immune_to = {
{"mobs:pick_lava", -2}, -- lava pick heals 2 health {"mobs:pick_lava", -2}, -- lava pick heals 2 health
@ -52,7 +53,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
run_start = 20, run_start = 20,
run_end = 28, run_end = 28,
punch_start = 20, punch_start = 20,
punch_end = 28, punch_end = 28
}, },
on_die = function(self, pos) on_die = function(self, pos)
@ -173,9 +174,13 @@ minetest.register_tool(":mobs:pick_lava", {
inventory_image = "mobs_pick_lava.png", inventory_image = "mobs_pick_lava.png",
tool_capabilities = { tool_capabilities = {
full_punch_interval = 0.4, full_punch_interval = 0.4,
max_drop_level=3, max_drop_level = 3,
groupcaps={ groupcaps = {
cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3}, cracky = {
times = {[1] = 1.80, [2] = 0.80, [3] = 0.40},
uses = 40,
maxlevel = 3
}
}, },
damage_groups = {fleshy = 6, fire = 1}, damage_groups = {fleshy = 6, fire = 1},
}, },
@ -188,7 +193,7 @@ minetest.register_craft({
recipe = { recipe = {
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"}, {"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
{"", "default:obsidian_shard", ""}, {"", "default:obsidian_shard", ""},
{"", "default:obsidian_shard", ""}, {"", "default:obsidian_shard", ""}
} }
}) })
@ -240,6 +245,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
}, },
water_damage = 0, water_damage = 0,
lava_damage = 8, lava_damage = 8,
fire_damage = 0,
light_damage = 0, light_damage = 0,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
@ -251,7 +257,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
run_start = 20, run_start = 20,
run_end = 28, run_end = 28,
punch_start = 20, punch_start = 20,
punch_end = 28, punch_end = 28
} }
}) })
@ -294,9 +300,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
local radius = 1 local radius = 1
local def = minetest.registered_nodes[node] local def = minetest.registered_nodes[node]
if def then if def then
node = { name = node } node = {name = node}
end end
if def and def.tiles and def.tiles[1] then if def and def.tiles and def.tiles[1] then
texture = def.tiles[1] texture = def.tiles[1]
end end
@ -323,7 +331,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
texture = texture, texture = texture,
-- ^ only as fallback for clients without support for `node` parameter -- ^ only as fallback for clients without support for `node` parameter
node = node, node = node,
collisiondetection = true, collisiondetection = true
}) })
minetest.set_node(pos, {name = "air"}) minetest.set_node(pos, {name = "air"})

View File

@ -1,4 +1,4 @@
name = mobs_monster name = mobs_monster
depends = default, mobs depends = default, mobs
optional depends = lucky_block, toolranks, intllib optional_depends = lucky_block, toolranks, intllib
description = Adds many types of monster. description = Adds many types of monsters.

View File

@ -20,6 +20,7 @@ mobs:register_mob("mobs_monster:oerkki", {
textures = { textures = {
{"mobs_oerkki.png"}, {"mobs_oerkki.png"},
{"mobs_oerkki2.png"}, {"mobs_oerkki2.png"},
{"mobs_oerkki3.png"},
}, },
makes_footstep_sound = false, makes_footstep_sound = false,
sounds = { sounds = {

View File

@ -27,7 +27,7 @@ Sand Monster
Spiders 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 Stone Monster
@ -35,6 +35,14 @@ Stone Monster
Tree 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 Lucky Blocks: 11

View File

@ -39,6 +39,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
attack_type = "dogfight", attack_type = "dogfight",
pathfinding = true, pathfinding = true,
--specific_attack = {"player", "mobs_npc:npc"}, --specific_attack = {"player", "mobs_npc:npc"},
--ignore_invisibility = true,
reach = 2, reach = 2,
damage = 1, damage = 1,
hp_min = 4, hp_min = 4,
@ -49,6 +50,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
mesh = "mobs_sand_monster.b3d", mesh = "mobs_sand_monster.b3d",
textures = { textures = {
{"mobs_sand_monster.png"}, {"mobs_sand_monster.png"},
{"mobs_sand_monster2.png"},
}, },
blood_texture = "default_desert_sand.png", blood_texture = "default_desert_sand.png",
makes_footstep_sound = true, makes_footstep_sound = true,

View File

@ -11,6 +11,47 @@ local get_velocity = function(self)
return (v.x * v.x + v.z * v.z) ^ 0.5 return (v.x * v.x + v.z * v.z) ^ 0.5
end 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) -- Spider by AspireMint (CC-BY-SA 3.0 license)
mobs:register_mob("mobs_monster:spider", { mobs:register_mob("mobs_monster:spider", {
@ -54,7 +95,7 @@ mobs:register_mob("mobs_monster:spider", {
light_damage = 0, light_damage = 0,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
speed_run = 20,--15, speed_run = 20,
stand_start = 0, stand_start = 0,
stand_end = 0, stand_end = 0,
walk_start = 1, walk_start = 1,
@ -64,42 +105,46 @@ mobs:register_mob("mobs_monster:spider", {
punch_start = 25, punch_start = 25,
punch_end = 45, punch_end = 45,
}, },
-- what kind of spider are we spawning?
-- check surrounding nodes and spawn a specific spider
on_spawn = function(self) on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1 local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
-- snowy spider for n = 1, #spider_types do
if minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then tmp = spider_types[n]
self.base_texture = {"mobs_spider_snowy.png"}
self.object:set_properties({textures = self.base_texture}) if minetest.find_node_near(pos, 1, tmp.nodes) then
self.docile_by_day = true
-- tarantula self.base_texture = tmp.skins
elseif minetest.find_node_near(pos, 1, self.object:set_properties({textures = tmp.skins})
{"default:dirt_with_rainforest_litter", "default:jungletree"}) then self.docile_by_day = tmp.docile
self.base_texture = {"mobs_spider_orange.png"}
self.object:set_properties({textures = self.base_texture}) if tmp.drops then
self.docile_by_day = true self.drops = tmp.drops
-- grey spider end
elseif minetest.find_node_near(pos, 1,
{"default:stone", "default:gravel"}) then if tmp.shoot then
self.base_texture = {"mobs_spider_grey.png"} self.attack_type = "dogshoot"
self.object:set_properties({textures = self.base_texture}) self.arrow = "mobs_monster:cobweb"
-- mese spider self.dogshoot_switch = 1
elseif minetest.find_node_near(pos, 1, self.dogshoot_count_max = 60
{"default:mese", "default:stone_with_mese"}) then self.dogshoot_count2_max = 20
self.base_texture = {"mobs_spider_mese.png"} self.shoot_interval = 2
self.object:set_properties({textures = self.base_texture}) self.shoot_offset = 2
elseif minetest.find_node_near(pos, 1, end
{"ethereal:crystal_dirt", "ethereal:crystal_spike"}) then
self.base_texture = {"mobs_spider_crystal.png"} if tmp.small then
self.object:set_properties({textures = self.base_texture}) self.object:set_properties({
self.docile_by_day = true collisionbox = {-0.2, -0.2, -0.2, 0.2, 0, 0.2},
self.drops = { visual_size = {x = 0.25, y = 0.25}
{name = "farming:string", chance = 1, min = 0, max = 2}, })
{name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2}, end
}
return true
end
end end
return true -- run only once, false/nil runs every activation return true -- run only once, false/nil runs every activation
@ -234,7 +279,7 @@ minetest.register_node(":mobs:cobweb", {
walkable = false, walkable = false,
groups = {snappy = 1, disable_jump = 1}, groups = {snappy = 1, disable_jump = 1},
drop = "farming:string", drop = "farming:string",
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults()
}) })
minetest.register_craft({ minetest.register_craft({
@ -246,4 +291,48 @@ minetest.register_craft({
} }
}) })
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 = "mobs:cobweb"})
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
})
minetest.register_alias("mobs:spider_cobweb", "mobs:cobweb") minetest.register_alias("mobs:spider_cobweb", "mobs:cobweb")

View File

@ -1,6 +1,18 @@
local S = mobs.intllib 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 -- Stone Monster by PilzAdam
@ -35,7 +47,7 @@ mobs:register_mob("mobs_monster:stone_monster", {
{name = "default:cobble", chance = 1, min = 0, max = 2}, {name = "default:cobble", chance = 1, min = 0, max = 2},
{name = "default:coal_lump", chance = 3, 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},
{name = "maptools:silver_coin", chance = 1, min = 0, max = 1,}, {name = "maptools:silver_coin", chance = 1, min = 0, max = 1},
{name = "default:torch", chance = 2, min = 3, max = 5}, {name = "default:torch", chance = 2, min = 3, max = 5},
}, },
water_damage = 0, water_damage = 0,
@ -61,6 +73,32 @@ mobs:register_mob("mobs_monster:stone_monster", {
{"default:pick_mese", 6}, {"default:pick_mese", 6},
{"default:pick_diamond", 7}, {"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
}) })

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
textures/mobs_oerkki3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
textures/mobs_tree_monster6.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 B

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

View File

@ -1,6 +1,49 @@
local S = mobs.intllib 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 -- Tree Monster (or Tree Gollum) by PilzAdam
@ -12,8 +55,8 @@ mobs:register_mob("mobs_monster:tree_monster", {
--specific_attack = {"player", "mobs_animal:chicken"}, --specific_attack = {"player", "mobs_animal:chicken"},
reach = 2, reach = 2,
damage = 2, damage = 2,
hp_min = 7, hp_min = 20,
hp_max = 33, hp_max = 40,
armor = 100, armor = 100,
collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4},
visual = "mesh", visual = "mesh",
@ -66,13 +109,60 @@ mobs:register_mob("mobs_monster:tree_monster", {
punch_start = 48, punch_start = 48,
punch_end = 62, 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 if not mobs.custom_spawn_monster then
mobs:spawn({ mobs:spawn({
name = "mobs_monster:tree_monster", name = "mobs_monster:tree_monster",
nodes = {"default:leaves", "default:jungleleaves", "moretrees:beech_leaves"}, nodes = {"group:leaves"}, --{"default:leaves", "default:jungleleaves"},
max_light = 7, max_light = 7,
chance = 7000, chance = 7000,
min_height = 0, min_height = 0,