Compare commits
26 Commits
c8003524d6
...
b3e50d295c
Author | SHA1 | Date | |
---|---|---|---|
b3e50d295c | |||
ae0e50bb69 | |||
f792de52af | |||
cab9cf25c6 | |||
23e24bff06 | |||
f39fc78e4a | |||
cd201150b6 | |||
70d92995bb | |||
1c4ce9e402 | |||
69ca619580 | |||
5009e7439d | |||
9b3c1e156f | |||
949bfec484 | |||
7bd9080eda | |||
e39d06b2d8 | |||
b9666dffb4 | |||
2baa1cc77d | |||
095d8753e0 | |||
476ad97935 | |||
5723ba508e | |||
57f40cf4b1 | |||
22308b4c94 | |||
05ccc87150 | |||
b1a94c5abc | |||
2129b4731f | |||
9835105cf9 |
@ -1,5 +1,5 @@
|
|||||||
default
|
|
||||||
mobs
|
mobs
|
||||||
|
default?
|
||||||
lucky_block?
|
lucky_block?
|
||||||
toolranks?
|
toolranks?
|
||||||
intllib?
|
intllib?
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
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,
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
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
|
-- Dungeon Master by PilzAdam
|
||||||
@ -16,8 +26,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",
|
||||||
@ -62,13 +72,39 @@ mobs:register_mob("mobs_monster:dungeon_master", {
|
|||||||
speed_normal = 15,
|
speed_normal = 15,
|
||||||
speed_run = 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
|
if not mobs.custom_spawn_monster then
|
||||||
mobs:spawn({
|
mobs:spawn({
|
||||||
name = "mobs_monster:dungeon_master",
|
name = "mobs_monster:dungeon_master",
|
||||||
nodes = {"default:stone", "default:sandstone", "nether:netherrack"},
|
nodes = {"default:stone", "nether:rack", "nether:rack_deep", "hell:hellrack"},
|
||||||
max_light = 5,
|
max_light = 5,
|
||||||
chance = 9000,
|
chance = 9000,
|
||||||
active_object_count = 1,
|
active_object_count = 1,
|
||||||
|
98
fire_spirit.lua
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
|
||||||
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
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)
|
32
init.lua
@ -2,10 +2,32 @@
|
|||||||
-- Load support for intllib.
|
-- 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
|
local S
|
||||||
dofile(path .. "intllib.lua")
|
|
||||||
|
|
||||||
mobs.intllib = S
|
-- Check for translation method
|
||||||
|
local S
|
||||||
|
if minetest.get_translator ~= nil then
|
||||||
|
S = minetest.get_translator("mobs_monster") -- 5.x translation function
|
||||||
|
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
|
||||||
|
else
|
||||||
|
gettext = intllib.Getter() -- old text file method
|
||||||
|
end
|
||||||
|
S = gettext
|
||||||
|
else -- boilerplate function
|
||||||
|
S = function(str, ...)
|
||||||
|
local args = {...}
|
||||||
|
return str:gsub("@%d+", function(match)
|
||||||
|
return args[tonumber(match:sub(2))]
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mobs.intllib_monster = S
|
||||||
|
|
||||||
|
|
||||||
-- Check for custom mob spawn file
|
-- Check for custom mob spawn file
|
||||||
@ -29,6 +51,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
|
||||||
@ -41,4 +65,4 @@ end
|
|||||||
dofile(path .. "lucky_block.lua")
|
dofile(path .. "lucky_block.lua")
|
||||||
|
|
||||||
|
|
||||||
print (S("[MOD] Mobs Redo Monsters loaded"))
|
print ("[MOD] Mobs Redo Monsters loaded")
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
-- Support for the old multi-load method
|
|
||||||
dofile(minetest.get_modpath("intllib").."/init.lua")
|
|
||||||
|
|
127
land_guard.lua
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
|
||||||
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
|
||||||
-- Lava Flan by Zeg9 (additional textures by JurajVajda)
|
-- Lava Flan by Zeg9 (additional textures by JurajVajda)
|
||||||
|
|
||||||
@ -36,7 +35,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 +52,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 +173,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 +192,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 +244,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 +256,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 +299,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 +330,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"})
|
||||||
|
@ -30,3 +30,7 @@ mobs.fireball.png was originally made by Sapier and edited by Benrob:
|
|||||||
--
|
--
|
||||||
-- (c) Sapier
|
-- (c) Sapier
|
||||||
-- Contact sapier a t gmx net
|
-- Contact sapier a t gmx net
|
||||||
|
|
||||||
|
Textures created by wwar (cc0)
|
||||||
|
mobs_dungeon_master_nether.png
|
||||||
|
mobs_dungeon_master_netherdeep.png
|
||||||
|
14
locale/mobs_monster.es.tr
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# textdomain:mobs_monster
|
||||||
|
Cobweb=Telarania
|
||||||
|
Dirt Monster=Mounstro de tierra
|
||||||
|
Dungeon Master=Maestro de mazmorra
|
||||||
|
Lava Flan=Flan de lava
|
||||||
|
Lava Pickaxe=Hacha de lava
|
||||||
|
Lava orb=Esfera de lava
|
||||||
|
Mese Monster=Mounstro de mese
|
||||||
|
#Obsidian Flan=
|
||||||
|
Oerkki=Oerkki
|
||||||
|
Sand Monster=Mounstro de arena
|
||||||
|
Spider=Arania
|
||||||
|
Stone Monster=Mounstro de piedra
|
||||||
|
Tree Monster=Mounstro de madera
|
@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
|
||||||
-- Mese Monster by Zeg9
|
-- Mese Monster by Zeg9
|
||||||
|
|
||||||
@ -12,6 +11,9 @@ mobs:register_mob("mobs_monster:mese_monster", {
|
|||||||
shoot_interval = 0.5,
|
shoot_interval = 0.5,
|
||||||
arrow = "mobs_monster:mese_arrow",
|
arrow = "mobs_monster:mese_arrow",
|
||||||
shoot_offset = 2,
|
shoot_offset = 2,
|
||||||
|
--arrow_override = function(self)
|
||||||
|
-- self.velocity = 20
|
||||||
|
--end,
|
||||||
hp_min = 10,
|
hp_min = 10,
|
||||||
hp_max = 25,
|
hp_max = 25,
|
||||||
armor = 80,
|
armor = 80,
|
||||||
|
6
mod.conf
@ -1,4 +1,4 @@
|
|||||||
name = mobs_monster
|
name = mobs_monster
|
||||||
depends = default, mobs
|
depends = mobs
|
||||||
optional depends = lucky_block, toolranks, intllib
|
optional_depends = default, lucky_block, toolranks, intllib
|
||||||
description = Adds many types of monster.
|
description = Adds many types of monsters.
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
|
||||||
-- Oerkki by PilzAdam
|
-- Oerkki by PilzAdam
|
||||||
|
|
||||||
@ -20,6 +19,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 = {
|
||||||
|
12
readme.md
@ -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
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
|
||||||
-- custom particle effects
|
-- custom particle effects
|
||||||
local effect = function(
|
local effect = function(
|
||||||
@ -39,6 +38,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 +49,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,
|
||||||
|
159
spider.lua
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
local get_velocity = function(self)
|
local get_velocity = function(self)
|
||||||
|
|
||||||
@ -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")
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
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
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
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,5 +1,48 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib_monster
|
||||||
|
|
||||||
|
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,
|
||||||
|