Compare commits
104 Commits
Author | SHA1 | Date |
---|---|---|
bri cassa | 7893b94f6e | |
tenplus1 | 130f46c81f | |
bri cassa | d4d8cc526a | |
tenplus1 | a1030bf7d5 | |
tenplus1 | 5adb1caf70 | |
tenplus1 | 2661e900e7 | |
tenplus1 | 0c4794c446 | |
tenplus1 | 7a5d019d8a | |
tenplus1 | 51d7677e65 | |
bri cassa | c632143fad | |
tenplus1 | 885ba57efb | |
tenplus1 | a9d4b1f8f3 | |
tenplus1 | 4a0e6b2877 | |
tenplus1 | 79dec9264c | |
tenplus1 | b7c5e8b471 | |
tenplus1 | 641dfc4530 | |
tenplus1 | 0d17a08762 | |
tenplus1 | bceda9c75f | |
tenplus1 | 6162be9910 | |
tenplus1 | 463e69a444 | |
tenplus1 | 1b197f9ae1 | |
tenplus1 | 1c2daeb102 | |
tenplus1 | 49639831a9 | |
tenplus1 | 78354ea87f | |
tenplus1 | b85d9bf21e | |
tenplus1 | 35d0c2b051 | |
tenplus1 | ba83e28c31 | |
tenplus1 | 84a9b630ce | |
bri cassa | 00146154b5 | |
tenplus1 | 1ee293dae0 | |
tenplus1 | 4d88f45109 | |
tenplus1 | a097ee9388 | |
tenplus1 | 1ba32b39eb | |
tenplus1 | 7ade16b4d1 | |
tenplus1 | 4be774624c | |
bri cassa | b3e50d295c | |
tenplus1 | ae0e50bb69 | |
tenplus1 | f792de52af | |
bri cassa | cab9cf25c6 | |
tenplus1 | 23e24bff06 | |
bri cassa | f39fc78e4a | |
tenplus1 | cd201150b6 | |
bri cassa | 70d92995bb | |
tenplus1 | 1c4ce9e402 | |
bri cassa | 69ca619580 | |
tenplus1 | 5009e7439d | |
tenplus1 | 9b3c1e156f | |
tenplus1 | 949bfec484 | |
bri cassa | 7bd9080eda | |
tenplus1 | e39d06b2d8 | |
tenplus1 | b9666dffb4 | |
bri cassa | 2baa1cc77d | |
tenplus1 | 095d8753e0 | |
tenplus1 | 476ad97935 | |
tenplus1 | 5723ba508e | |
tenplus1 | 57f40cf4b1 | |
tenplus1 | 22308b4c94 | |
tenplus1 | 05ccc87150 | |
tenplus1 | b1a94c5abc | |
Sys Quatre | 2129b4731f | |
tenplus1 | 9835105cf9 | |
Sys Quatre | c8003524d6 | |
tenplus1 | dbc501da64 | |
Sys Quatre | 4a3bf56409 | |
tenplus1 | 2c88a98ca3 | |
Sys Quatre | 5297dfbbdf | |
tenplus1 | 4018a5c8e8 | |
Sys Quatre | 1e72bfd920 | |
tenplus1 | 144c851207 | |
Sys Quatre | 057177203a | |
tenplus1 | 84f1ff383a | |
Sys Quatre | 6b69a3e23d | |
tenplus1 | a42877ef78 | |
tenplus1 | deea6597da | |
Sys Quatre | 7be2f3bd63 | |
tenplus1 | fd1807e746 | |
Sys Quatre | ca10e7e1f6 | |
TenPlus1 | 3c3d65796a | |
tenplus1 | a39eec8822 | |
tenplus1 | a6b6795eb4 | |
Sys Quatre | 592c4aca50 | |
tenplus1 | 475e0f5624 | |
tenplus1 | 4477466120 | |
tenplus1 | abae5bada4 | |
tenplus1 | 4f135de146 | |
tenplus1 | b6591fa9a7 | |
Sys Quatre | 55d3d4b547 | |
TenPlus1 | 674afa91e5 | |
TenPlus1 | 2fdfd7f84c | |
TenPlus1 | ded074939a | |
tenplus1 | ffc136296e | |
TenPlus1 | 33a314934a | |
Sys Quatre | 5674b6328e | |
TenPlus1 | 2663922651 | |
TenPlus1 | cd5909697b | |
Sys Quatre | 3ddd27e515 | |
TenPlus1 | e6d4b185b3 | |
TenPlus1 | 822450e2c7 | |
Sys Quatre | 133766d0ab | |
TenPlus1 | 947adeeb79 | |
TenPlus1 | 6cf5b95fc9 | |
TenPlus1 | 86e5f4ed09 | |
TenPlus1 | eeb6a8e138 | |
TenPlus1 | d6420071ab |
|
@ -1,5 +0,0 @@
|
|||
default
|
||||
mobs
|
||||
intllib?
|
||||
lucky_block?
|
||||
toolranks?
|
|
@ -1 +0,0 @@
|
|||
Adds many types of monster.
|
|
@ -1,5 +1,15 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
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,11 +29,12 @@ 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,
|
||||
sounds = {
|
||||
random = "mobs_dirtmonster",
|
||||
random = "mobs_dirtmonster"
|
||||
},
|
||||
view_range = 15,
|
||||
walk_velocity = 1,
|
||||
|
@ -47,28 +58,51 @@ mobs:register_mob("mobs_monster:dirt_monster", {
|
|||
run_start = 40,
|
||||
run_end = 63,
|
||||
punch_start = 40,
|
||||
punch_end = 63,
|
||||
punch_end = 63
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific monster
|
||||
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 not mobs.custom_spawn_monster then
|
||||
|
||||
if minetest.get_modpath("ethereal") then
|
||||
spawn_on = "ethereal:gray_dirt"
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dirt_monster",
|
||||
nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"},
|
||||
min_light = 0,
|
||||
max_light = 7,
|
||||
chance = 6000,
|
||||
active_object_count = 2,
|
||||
min_height = 0,
|
||||
day_toggle = false
|
||||
})
|
||||
end
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dirt_monster",
|
||||
nodes = {spawn_on},
|
||||
min_light = 0,
|
||||
max_light = 7,
|
||||
chance = 6000,
|
||||
active_object_count = 2,
|
||||
min_height = 0,
|
||||
day_toggle = false,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:dirt_monster", S("Dirt Monster"), "default_dirt.png", 1)
|
||||
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
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
|
||||
|
@ -15,9 +25,10 @@ mobs:register_mob("mobs_monster:dungeon_master", {
|
|||
reach = 3,
|
||||
shoot_interval = 2.2,
|
||||
arrow = "mobs_monster:fireball",
|
||||
friendly_fire = false,
|
||||
shoot_offset = 1,
|
||||
hp_min = 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",
|
||||
|
@ -25,12 +36,12 @@ mobs:register_mob("mobs_monster:dungeon_master", {
|
|||
textures = {
|
||||
{"mobs_dungeon_master.png"},
|
||||
{"mobs_dungeon_master2.png"},
|
||||
{"mobs_dungeon_master3.png"},
|
||||
{"mobs_dungeon_master3.png"}
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "mobs_dungeonmaster",
|
||||
shoot_attack = "mobs_fireball",
|
||||
shoot_attack = "mobs_fireball"
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
|
@ -60,19 +71,47 @@ mobs:register_mob("mobs_monster:dungeon_master", {
|
|||
shoot_start = 36,
|
||||
shoot_end = 48,
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
speed_run = 15
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific monster
|
||||
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
|
||||
})
|
||||
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dungeon_master",
|
||||
nodes = {"default:stone", "default:sandstone", "nether:netherrack"},
|
||||
max_light = 5,
|
||||
chance = 9000,
|
||||
active_object_count = 1,
|
||||
max_height = -70,
|
||||
})
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:dungeon_master",
|
||||
nodes = {"default:stone", "nether:rack", "nether:rack_deep", "hell:hellrack"},
|
||||
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)
|
||||
|
@ -114,7 +153,7 @@ mobs:register_arrow("mobs_monster:fireball", {
|
|||
self.object:set_velocity({
|
||||
x = dir.x * self.velocity,
|
||||
y = dir.y * self.velocity,
|
||||
z = dir.z * self.velocity,
|
||||
z = dir.z * self.velocity
|
||||
})
|
||||
end
|
||||
end
|
||||
|
@ -124,14 +163,14 @@ mobs:register_arrow("mobs_monster:fireball", {
|
|||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 8},
|
||||
damage_groups = {fleshy = 8}
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 8},
|
||||
damage_groups = {fleshy = 8}
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_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)
|
74
init.lua
|
@ -1,34 +1,56 @@
|
|||
|
||||
local path = minetest.get_modpath("mobs_monster")
|
||||
-- Load support for intllib.
|
||||
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
|
||||
|
||||
-- Intllib
|
||||
local S
|
||||
if minetest.global_exists("intllib") then
|
||||
if intllib.make_gettext_pair then
|
||||
-- New method using gettext.
|
||||
S = intllib.make_gettext_pair()
|
||||
else
|
||||
-- Old method using text files.
|
||||
S = intllib.Getter()
|
||||
end
|
||||
else
|
||||
S = function(s) return s end
|
||||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
-- 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
|
||||
|
||||
|
||||
-- helper function
|
||||
local function ddoo(mob)
|
||||
|
||||
if minetest.settings:get_bool("mobs_monster." .. mob) == false then
|
||||
print("[Mobs_Monster] " .. mob .. " disabled!")
|
||||
return
|
||||
end
|
||||
|
||||
dofile(path .. mob .. ".lua")
|
||||
end
|
||||
mobs.intllib = S
|
||||
|
||||
-- Monsters
|
||||
ddoo("dirt_monster") -- PilzAdam
|
||||
ddoo("dungeon_master")
|
||||
ddoo("oerkki")
|
||||
ddoo("sand_monster")
|
||||
ddoo("stone_monster")
|
||||
ddoo("tree_monster")
|
||||
ddoo("lava_flan") -- Zeg9
|
||||
ddoo("mese_monster")
|
||||
ddoo("spider") -- AspireMint
|
||||
ddoo("land_guard")
|
||||
ddoo("fire_spirit")
|
||||
dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa
|
||||
|
||||
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 .. "/minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa
|
||||
|
||||
dofile(path .. "/lucky_block.lua")
|
||||
-- Load custom spawning
|
||||
if mobs.custom_spawn_monster then
|
||||
dofile(path .. "spawn.lua")
|
||||
end
|
||||
|
||||
print ("[MOD] Mobs Redo 'Monsters' loaded")
|
||||
|
||||
-- Lucky Blocks
|
||||
if minetest.get_modpath("lucky_block") then
|
||||
dofile(path .. "lucky_block.lua")
|
||||
end
|
||||
|
||||
|
||||
print ("[MOD] Mobs Monster loaded")
|
||||
|
|
|
@ -0,0 +1,126 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_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)
|
282
lava_flan.lua
|
@ -1,6 +1,5 @@
|
|||
|
||||
local S = mobs.intllib
|
||||
|
||||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
-- Lava Flan by Zeg9 (additional textures by JurajVajda)
|
||||
|
||||
|
@ -19,13 +18,13 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
|||
textures = {
|
||||
{"zmobs_lava_flan.png"},
|
||||
{"zmobs_lava_flan2.png"},
|
||||
{"zmobs_lava_flan3.png"},
|
||||
{"zmobs_lava_flan3.png"}
|
||||
},
|
||||
blood_texture = "fire_basic_flame.png",
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
random = "mobs_lavaflan",
|
||||
war_cry = "mobs_lavaflan",
|
||||
war_cry = "mobs_lavaflan"
|
||||
},
|
||||
walk_velocity = 0.5,
|
||||
run_velocity = 2,
|
||||
|
@ -33,11 +32,16 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
|||
view_range = 10,
|
||||
floats = 1,
|
||||
drops = {
|
||||
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
|
||||
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1}
|
||||
},
|
||||
water_damage = 5,
|
||||
lava_damage = 0,
|
||||
water_damage = 8,
|
||||
lava_damage = -1,
|
||||
fire_damage = 0,
|
||||
light_damage = 0,
|
||||
immune_to = {
|
||||
{"mobs:pick_lava", -2} -- lava pick heals 2 health
|
||||
},
|
||||
fly_in = {"default:lava_source", "default:lava_flowing"},
|
||||
animation = {
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
|
@ -48,53 +52,75 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
|||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28,
|
||||
punch_end = 28
|
||||
},
|
||||
|
||||
-- custom death function
|
||||
on_die = function(self, pos)
|
||||
|
||||
if minetest.get_node(pos).name == "air" then
|
||||
minetest.set_node(pos, {name = "fire:basic_flame"})
|
||||
local cod = self.cause_of_death or {}
|
||||
local def = cod.node and minetest.registered_nodes[cod.node]
|
||||
|
||||
if def and def.groups and def.groups.water then
|
||||
|
||||
pos.y = pos.y + 1
|
||||
|
||||
mobs:effect(pos, 40, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false)
|
||||
|
||||
minetest.sound_play("fire_extinguish_flame",
|
||||
{pos = pos, max_hear_distance = 12, gain = 1.5}, true)
|
||||
|
||||
self.object:remove()
|
||||
|
||||
if math.random(4) == 1 then
|
||||
mobs:add_mob(pos, {name = "mobs_monster:obsidian_flan"})
|
||||
end
|
||||
else
|
||||
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
|
||||
|
||||
local nods = minetest.find_nodes_in_area(
|
||||
{x = pos.x, y = pos.y + 1, z = pos.z},
|
||||
{x = pos.x, y = pos.y, z = pos.z}, "air")
|
||||
|
||||
-- place flame if position empty and flame exists
|
||||
if nods and #nods > 0
|
||||
and minetest.registered_nodes["fire:basic_flame"] then
|
||||
|
||||
pos = nods[math.random(#nods)]
|
||||
minetest.set_node(pos, {name = "fire:basic_flame"})
|
||||
end
|
||||
|
||||
self.object:remove()
|
||||
end
|
||||
|
||||
self.object:remove()
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = 20,
|
||||
time = 0.25,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x = -2, y = -2, z = -2},
|
||||
maxvel = {x = 2, y = 2, z = 2},
|
||||
minacc = {x = 0, y = -10, z = 0},
|
||||
maxacc = {x = 0, y = -10, z = 0},
|
||||
minexptime = 0.1,
|
||||
maxexptime = 1,
|
||||
minsize = 1.0,
|
||||
maxsize = 2.0,
|
||||
texture = "fire_basic_flame.png",
|
||||
})
|
||||
end,
|
||||
glow = 10
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:lava_flan",
|
||||
nodes = {"default:lava_source"},
|
||||
chance = 1500,
|
||||
active_object_count = 1,
|
||||
max_height = 0,
|
||||
max_height = 0
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- add spawn egg
|
||||
mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1)
|
||||
|
||||
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility
|
||||
|
||||
-- compatibility alias, only needed for servers who used the old mobs mod
|
||||
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan")
|
||||
|
||||
|
||||
-- lava orb
|
||||
minetest.register_craftitem(":mobs:lava_orb", {
|
||||
description = S("Lava orb"),
|
||||
inventory_image = "zmobs_lava_orb.png",
|
||||
light_source = 14
|
||||
})
|
||||
|
||||
minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
|
||||
|
@ -102,7 +128,7 @@ minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
|
|||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:lava_orb",
|
||||
burntime = 80,
|
||||
burntime = 80
|
||||
})
|
||||
|
||||
|
||||
|
@ -112,6 +138,9 @@ local old_handle_node_drops = minetest.handle_node_drops
|
|||
|
||||
function minetest.handle_node_drops(pos, drops, digger)
|
||||
|
||||
-- does player exist?
|
||||
if not digger then return end
|
||||
|
||||
-- are we holding Lava Pick?
|
||||
if digger:get_wielded_item():get_name() ~= ("mobs:pick_lava") then
|
||||
return old_handle_node_drops(pos, drops, digger)
|
||||
|
@ -121,29 +150,32 @@ function minetest.handle_node_drops(pos, drops, digger)
|
|||
local hot_drops = {}
|
||||
|
||||
-- loop through current node drops
|
||||
for _, drop in pairs(drops) do
|
||||
for _, drop in ipairs(drops) do
|
||||
|
||||
-- get cooked output of current drops
|
||||
local stack = ItemStack(drop)
|
||||
local output = minetest.get_craft_result({
|
||||
method = "cooking",
|
||||
width = 1,
|
||||
items = {drop}
|
||||
})
|
||||
|
||||
-- if we have cooked result then add to new list
|
||||
if output
|
||||
and output.item
|
||||
and not output.item:is_empty() then
|
||||
while not stack:is_empty() do
|
||||
|
||||
table.insert(hot_drops,
|
||||
ItemStack({
|
||||
name = output.item:get_name(),
|
||||
count = output.item:to_table().count,
|
||||
})
|
||||
)
|
||||
else -- if not then return normal drops
|
||||
table.insert(hot_drops, stack)
|
||||
local output, decremented_input = minetest.get_craft_result({
|
||||
method = "cooking",
|
||||
width = 1,
|
||||
items = {stack}
|
||||
})
|
||||
|
||||
if output.item:is_empty() then
|
||||
|
||||
table.insert_all(hot_drops, decremented_input.items)
|
||||
break
|
||||
else
|
||||
if not output.item:is_empty() then
|
||||
table.insert(hot_drops, output.item)
|
||||
end
|
||||
|
||||
table.insert_all(hot_drops, output.replacements)
|
||||
|
||||
stack = decremented_input.items[1] or ItemStack()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -155,12 +187,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},
|
||||
damage_groups = {fleshy = 6, fire = 1},
|
||||
},
|
||||
groups = {pickaxe = 1},
|
||||
light_source = 14
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -168,7 +206,7 @@ minetest.register_craft({
|
|||
recipe = {
|
||||
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""}
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -180,3 +218,137 @@ minetest.override_item("mobs:pick_lava", {
|
|||
description = toolranks.create_description("Lava Pickaxe", 0, 1),
|
||||
after_use = toolranks.new_afteruse})
|
||||
end
|
||||
|
||||
|
||||
-- obsidian flan
|
||||
|
||||
mobs:register_mob("mobs_monster:obsidian_flan", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "shoot",
|
||||
shoot_interval = 0.5,
|
||||
shoot_offset = 1.0,
|
||||
arrow = "mobs_monster:obsidian_arrow",
|
||||
reach = 2,
|
||||
damage = 3,
|
||||
hp_min = 10,
|
||||
hp_max = 35,
|
||||
armor = 30,
|
||||
visual_size = {x = 0.6, y = 0.6},
|
||||
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.8, 0.3},
|
||||
visual = "mesh",
|
||||
mesh = "zmobs_lava_flan.x",
|
||||
textures = {
|
||||
{"mobs_obsidian_flan.png"}
|
||||
},
|
||||
blood_texture = "default_obsidian.png",
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "mobs_lavaflan"
|
||||
},
|
||||
walk_velocity = 0.1,
|
||||
run_velocity = 0.5,
|
||||
jump = false,
|
||||
view_range = 10,
|
||||
floats = 0,
|
||||
drops = {
|
||||
{name = "default:obsidian_shard", chance = 1, min = 1, max = 5},
|
||||
{name = "default:obsidian", chance = 3, min = 0, max = 2}
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 8,
|
||||
fire_damage = 0,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
stand_start = 0,
|
||||
stand_end = 8,
|
||||
walk_start = 10,
|
||||
walk_end = 18,
|
||||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- add spawn egg
|
||||
mobs:register_egg("mobs_monster:obsidian_flan", S("Obsidian Flan"),
|
||||
"default_obsidian.png", 1)
|
||||
|
||||
|
||||
local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
|
||||
|
||||
-- mese arrow (weapon)
|
||||
mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
||||
visual = "sprite",
|
||||
visual_size = {x = 0.5, y = 0.5},
|
||||
textures = {"default_obsidian_shard.png"},
|
||||
velocity = 6,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 8},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 8},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
|
||||
if mobs_griefing == false or minetest.is_protected(pos, "") then
|
||||
return
|
||||
end
|
||||
|
||||
local texture = "default_dirt.png" --fallback texture
|
||||
local radius = 1
|
||||
local def = node and minetest.registered_nodes[node.name]
|
||||
|
||||
if not def then
|
||||
return
|
||||
end
|
||||
|
||||
if def and def.tiles and def.tiles[1] then
|
||||
texture = def.tiles[1]
|
||||
end
|
||||
|
||||
-- do not break obsidian or diamond blocks or unbreakable nodes
|
||||
if (def.groups and def.groups.level and def.groups.level > 1)
|
||||
or def.groups.unbreakable then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = 32,
|
||||
time = 0.1,
|
||||
minpos = vector.subtract(pos, radius / 2),
|
||||
maxpos = vector.add(pos, radius / 2),
|
||||
minvel = {x = -3, y = 0, z = -3},
|
||||
maxvel = {x = 3, y = 5, z = 3},
|
||||
minacc = {x = 0, y = -10, z = 0},
|
||||
maxacc = {x = 0, y = -10, z = 0},
|
||||
minexptime = 0.8,
|
||||
maxexptime = 2.0,
|
||||
minsize = radius * 0.33,
|
||||
maxsize = radius,
|
||||
texture = texture,
|
||||
-- ^ only as fallback for clients without support for `node` parameter
|
||||
node = node,
|
||||
collisiondetection = true
|
||||
})
|
||||
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
|
||||
local snd = def.sounds and def.sounds.dug or "default_dig_crumbly"
|
||||
|
||||
minetest.sound_play(snd, {pos = pos, max_hear_distance = 8, gain = 1.0}, true)
|
||||
end
|
||||
})
|
||||
|
|
67
license.txt
|
@ -19,3 +19,70 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
Textures created by wwar (CC0)
|
||||
mobs_dungeon_master_nether.png
|
||||
mobs_dungeon_master_netherdeep.png
|
||||
mobs_stone_monster.png
|
||||
mobs_dungeon_master2.png
|
||||
mobs_land_guard.png
|
||||
mobs_land_guard2.png
|
||||
mobs_land_guard3.png
|
||||
|
||||
Textures by AMMOnym (WTFPL)
|
||||
mobs_stone_monster2.png
|
||||
|
||||
Textures by TenPlus1 (MIT)
|
||||
mobs_stone_monster3.png
|
||||
mobs_fireball.png
|
||||
|
||||
Textures by Sirrobzeroone (CC0 1.0 Universal)
|
||||
mobs_stone_monster4.png
|
||||
mobs_sand_monster.png
|
||||
|
||||
Textures and Model created by SirrobZeroone (CC0)
|
||||
mobs_mese_monster_red.png
|
||||
mobs_mese_monster_blue.png
|
||||
mobs_mese_monster_green.png
|
||||
mobs_mese_monster_purple.png
|
||||
mobs_mese_arrow.png
|
||||
mobs_mese_monster.b3d
|
||||
|
||||
Pavel_S and PilzAdam (WTFPL)
|
||||
mobs_dirt_monster.png
|
||||
mobs_dirt_monster2.png
|
||||
mobs_dirt_monster3.png
|
||||
mobs_dungeon_master.b3d
|
||||
mobs_dungeon_master.png
|
||||
mobs_dungeon_master.ogg
|
||||
mobs_fireball.ogg
|
||||
mobs_oerkki.b3d
|
||||
mobs_oerkki.png
|
||||
mobs_sand_monster.b3d [edited by SirrobZeroone]
|
||||
mobs_sand_monster2.png
|
||||
mobs_stone_monster.b3d [edited by SirrobZeroone]
|
||||
mobs_tree_monster.b3d
|
||||
mobs_tree_monster*.png (edited by TenPlus1)
|
||||
|
||||
AspireMint (CC BY-SA 3.0)
|
||||
mobs_spider.b3d
|
||||
mobs_spider_mese.png
|
||||
mobs_spider_orange.png
|
||||
mobs_spider_snowy.png
|
||||
mobs_spider_grey.png
|
||||
mobs_spider_crystal.png
|
||||
|
||||
Zeg9 (CC BY-SA 3.0)
|
||||
zmobs_lava_flan.x
|
||||
zmobs_lava_flan.png
|
||||
zmobs_lava_orb.png
|
||||
|
||||
Sounds by Cyberpangolin (WTFPL) https://forum.minetest.net/viewtopic.php?t=10798
|
||||
mobs_dirtmonster.ogg
|
||||
mobs_dungeonmaster.ogg
|
||||
mobs_lavaflan.ogg
|
||||
mobs_mesemonster.ogg
|
||||
mobs_oerkki.ogg
|
||||
mobs_sandmonster.ogg
|
||||
mobs_stonemonster.ogg
|
||||
mobs_treemonster.ogg
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
# German Translation for mobs_monster mod
|
||||
# Deutsche Übersetzung der mobs_monster Mod
|
||||
# last update: 2016/June/10
|
||||
# Author: Xanthin
|
||||
|
||||
#dirtmonster.lua
|
||||
Dirt Monster = Erdmonster
|
||||
|
||||
#dungeonmaster.lua
|
||||
Dungeon Master = Kerkermeister
|
||||
|
||||
#init.lua
|
||||
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Monsters' geladen
|
||||
|
||||
#lava_flan.lua
|
||||
Lava Flan = Lavaflan
|
||||
Lava orb = Lavakugel
|
||||
Lava Pickaxe = Lavaspitzhacke
|
||||
|
||||
#mese_monster.lua
|
||||
Mese Monster = Mesemonster
|
||||
|
||||
#oerkki.lua
|
||||
Oerkki = Oerkki
|
||||
|
||||
#sandmonster.lua
|
||||
Sand Monster = Sandmonster
|
||||
|
||||
#spider.lua
|
||||
Spider = Spinne
|
||||
Cobweb = Spinnennetz
|
||||
|
||||
#stonemonster.lua
|
||||
Stone Monster = Steinmonster
|
||||
|
||||
#treemonster.lua
|
||||
Tree Monster = Baummonster
|
|
@ -1,34 +0,0 @@
|
|||
# last update: 2016/June/10
|
||||
|
||||
#dirtmonster.lua
|
||||
Dirt Monster = Monstre de terre
|
||||
|
||||
#dungeonmaster.lua
|
||||
Dungeon Master = Maître des donjons
|
||||
|
||||
#init.lua
|
||||
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Monstres' chargé
|
||||
|
||||
#lava_flan.lua
|
||||
Lava Flan = Flan de lave
|
||||
Lava orb = Orbe de lave
|
||||
Lava Pickaxe = Pioche de lave
|
||||
|
||||
#mese_monster.lua
|
||||
Mese Monster = Monstre de Mese
|
||||
|
||||
#oerkki.lua
|
||||
Oerkki = Oerkki
|
||||
|
||||
#sandmonster.lua
|
||||
Sand Monster = Monstre de sable
|
||||
|
||||
#spider.lua
|
||||
Spider = Araignée
|
||||
Cobweb = Toile d'arraignée
|
||||
|
||||
#stonemonster.lua
|
||||
Stone Monster = Monstre de pierre
|
||||
|
||||
#treemonster.lua
|
||||
Tree Monster = Monstre de bois
|
|
@ -1,38 +0,0 @@
|
|||
# ITALIAN LOCALE FILE FOR THE MOBS MONSTER MODULE
|
||||
# Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
|
||||
# This file is distributed under the same license as the MOBS MONSTER package.
|
||||
# Hamlet <h4mlet@riseup.net>, 2017.
|
||||
#
|
||||
|
||||
#dirtmonster.lua
|
||||
Dirt Monster = Mostro di terra
|
||||
|
||||
#dungeonmaster.lua
|
||||
Dungeon Master = Padrone delle segrete
|
||||
|
||||
#init.lua
|
||||
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Monsters' caricato
|
||||
|
||||
#lava_flan.lua
|
||||
Lava Flan = Sformato di lava
|
||||
Lava orb = Sfera di lava
|
||||
Lava Pickaxe = Piccone di lava
|
||||
|
||||
#mese_monster.lua
|
||||
Mese Monster = Mostro di mese
|
||||
|
||||
#oerkki.lua
|
||||
Oerkki = Oerkki
|
||||
|
||||
#sandmonster.lua
|
||||
Sand Monster = Mostro di sabbia
|
||||
|
||||
#spider.lua
|
||||
Spider = Ragno
|
||||
Cobweb = Ragnatela
|
||||
|
||||
#stonemonster.lua
|
||||
Stone Monster = Mostro di pietra
|
||||
|
||||
#treemonster.lua
|
||||
Tree Monster = Albero mostro
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
Cobweb=Spinnennetz
|
||||
Dirt Monster=Erdmonster
|
||||
Dungeon Master=Kerkermeister
|
||||
Lava Flan=Lavaflan
|
||||
Lava Pickaxe=Lavaspitzhacke
|
||||
Lava orb=Lavakugel
|
||||
Mese Monster=Mesemonster
|
||||
#Obsidian Flan=
|
||||
Oerkki=Oerkki
|
||||
Sand Monster=Sandmonster
|
||||
Spider=Spinne
|
||||
Stone Monster=Steinmonster
|
||||
Tree Monster=Baummonster
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
#Cobweb=
|
||||
#Dirt Monster=
|
||||
#Dungeon Master=
|
||||
#Lava Flan=
|
||||
#Lava Pickaxe=
|
||||
#Lava orb=
|
||||
#Mese Monster=
|
||||
#Obsidian Flan=
|
||||
#Oerkki=
|
||||
#Sand Monster=
|
||||
#Spider=
|
||||
#Stone Monster=
|
||||
#Tree Monster=
|
|
@ -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
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
Cobweb=Toile d'arraignée
|
||||
Dirt Monster=Monstre de terre
|
||||
Dungeon Master=Maître des donjons
|
||||
Lava Flan=Lave en gelée
|
||||
Lava Pickaxe=Pioche de lave
|
||||
Lava orb=Orbe de lave
|
||||
Mese Monster=Monstre de mese
|
||||
Obsidian Flan=Obsidienne en gelée
|
||||
Oerkki=Oerkki
|
||||
Sand Monster=Monstre de sable
|
||||
Spider=Araignée
|
||||
Stone Monster=Monstre de pierre
|
||||
Tree Monster=Monstre de bois
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
Cobweb=Ragnatela
|
||||
Dirt Monster=Mostro di terra
|
||||
Dungeon Master=Padrone delle segrete
|
||||
Lava Flan=Sformato di lava
|
||||
Lava Pickaxe=Piccone di lava
|
||||
Lava orb=Sfera di lava
|
||||
Mese Monster=Mostro di mese
|
||||
#Obsidian Flan=
|
||||
Oerkki=Oerkki
|
||||
Sand Monster=Mostro di sabbia
|
||||
Spider=Ragno
|
||||
Stone Monster=Mostro di pietra
|
||||
Tree Monster=Albero mostro
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
Cobweb=Sarang Labah-labah
|
||||
Dirt Monster=Raksasa Tanah
|
||||
Dungeon Master=Penjaga Kurungan Bawah Tanah
|
||||
Lava Flan=Raksasa Lava
|
||||
Lava Pickaxe=Beliung Lava
|
||||
Lava orb=Bola Lava
|
||||
Mese Monster=Raksasa Mese
|
||||
#Obsidian Flan=
|
||||
Oerkki=Oerkki
|
||||
Sand Monster=Raksasa Pasir
|
||||
Spider=Labah-labah
|
||||
Stone Monster=Raksasa Batu
|
||||
Tree Monster=Raksasa Pokok
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
Cobweb=Örümcek ağı
|
||||
Dirt Monster=Toprak Canavarı
|
||||
Dungeon Master=Zindan başı
|
||||
Lava Flan=Lav Flan
|
||||
Lava Pickaxe=Lav kazması
|
||||
Lava orb=Lav küre
|
||||
Mese Monster=Mese Canavarı
|
||||
#Obsidian Flan=
|
||||
Oerkki=Oerkki
|
||||
Sand Monster=Kum Canavarı
|
||||
Spider=Örümcek
|
||||
Stone Monster=Taş Canavarı
|
||||
Tree Monster=Ağaç Canavarı
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
Cobweb=蜘蛛网
|
||||
Dirt Monster=泥土怪
|
||||
Dungeon Master=地穴之主
|
||||
Lava Flan=岩浆饼
|
||||
Lava Pickaxe=岩浆镐
|
||||
Lava orb=岩浆球
|
||||
Mese Monster=黄石怪
|
||||
#Obsidian Flan=
|
||||
Oerkki=奥尔基
|
||||
Sand Monster=沙怪
|
||||
Spider=蜘蛛
|
||||
Stone Monster=石头怪
|
||||
Tree Monster=树怪
|
|
@ -0,0 +1,14 @@
|
|||
# textdomain:mobs_monster
|
||||
Cobweb=蜘蛛網
|
||||
Dirt Monster=泥土怪
|
||||
Dungeon Master=地穴之主
|
||||
Lava Flan=岩漿餅
|
||||
Lava Pickaxe=岩漿鎬
|
||||
Lava orb=岩漿球
|
||||
Mese Monster=黃石怪
|
||||
#Obsidian Flan=
|
||||
Oerkki=奧爾基
|
||||
Sand Monster=沙怪
|
||||
Spider=蜘蛛
|
||||
Stone Monster=石頭怪
|
||||
Tree Monster=樹怪
|
|
@ -1,35 +0,0 @@
|
|||
# Malay translations of mobs_monster mod
|
||||
# using template from 2016/June/10, translated on 2018/February/05
|
||||
|
||||
#dirtmonster.lua
|
||||
Dirt Monster = Raksasa Tanah
|
||||
|
||||
#dungeonmaster.lua
|
||||
Dungeon Master = Penjaga Kurungan Bawah Tanah
|
||||
|
||||
#init.lua
|
||||
[MOD] Mobs Redo 'Monsters' loaded = [MODS] Mobs Redo 'Monsters' telah dimuatkan
|
||||
|
||||
#lava_flan.lua
|
||||
Lava Flan = Raksasa Lava
|
||||
Lava orb = Bola Lava
|
||||
Lava Pickaxe = Beliung Lava
|
||||
|
||||
#mese_monster.lua
|
||||
Mese Monster = Raksasa Mese
|
||||
|
||||
#oerkki.lua
|
||||
Oerkki = Oerkki
|
||||
|
||||
#sandmonster.lua
|
||||
Sand Monster = Raksasa Pasir
|
||||
|
||||
#spider.lua
|
||||
Spider = Labah-labah
|
||||
Cobweb = Sarang Labah-labah
|
||||
|
||||
#stonemonster.lua
|
||||
Stone Monster = Raksasa Batu
|
||||
|
||||
#treemonster.lua
|
||||
Tree Monster = Raksasa Pokok
|
|
@ -1,35 +0,0 @@
|
|||
# Template for translations of mobs_monster mod
|
||||
# last update: 2016/June/10
|
||||
|
||||
#dirtmonster.lua
|
||||
Dirt Monster =
|
||||
|
||||
#dungeonmaster.lua
|
||||
Dungeon Master =
|
||||
|
||||
#init.lua
|
||||
[MOD] Mobs Redo 'Monsters' loaded =
|
||||
|
||||
#lava_flan.lua
|
||||
Lava Flan =
|
||||
Lava orb =
|
||||
Lava Pickaxe =
|
||||
|
||||
#mese_monster.lua
|
||||
Mese Monster =
|
||||
|
||||
#oerkki.lua
|
||||
Oerkki =
|
||||
|
||||
#sandmonster.lua
|
||||
Sand Monster =
|
||||
|
||||
#spider.lua
|
||||
Spider =
|
||||
Cobweb =
|
||||
|
||||
#stonemonster.lua
|
||||
Stone Monster =
|
||||
|
||||
#treemonster.lua
|
||||
Tree Monster =
|
|
@ -1,39 +0,0 @@
|
|||
# Türkçe çeviri by Admicos
|
||||
# Turkish translation by Admicos
|
||||
|
||||
# Son düzenleme: 26 Nisan 2017
|
||||
# Last edit: 26 April 2017
|
||||
|
||||
|
||||
#dirtmonster.lua
|
||||
Dirt Monster = Toprak Canavarı
|
||||
|
||||
#dungeonmaster.lua
|
||||
Dungeon Master = Zindan başı
|
||||
|
||||
#init.lua
|
||||
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Canavarlar' yüklendi
|
||||
|
||||
#lava_flan.lua
|
||||
Lava Flan = Lav Flan
|
||||
Lava orb = Lav küre
|
||||
Lava Pickaxe = Lav kazması
|
||||
|
||||
#mese_monster.lua
|
||||
Mese Monster = Mese Canavarı
|
||||
|
||||
#oerkki.lua
|
||||
Oerkki = Oerkki
|
||||
|
||||
#sandmonster.lua
|
||||
Sand Monster = Kum Canavarı
|
||||
|
||||
#spider.lua
|
||||
Spider = Örümcek
|
||||
Cobweb = Örümcek ağı
|
||||
|
||||
#stonemonster.lua
|
||||
Stone Monster = Taş Canavarı
|
||||
|
||||
#treemonster.lua
|
||||
Tree Monster = Ağaç Canavarı
|
|
@ -1,42 +1,37 @@
|
|||
local web = {name = "mobs:cobweb"}
|
||||
local web_trap = {
|
||||
size = {x = 3, y = 3, z = 3},
|
||||
data = {
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
|
||||
if minetest.get_modpath("lucky_block") then
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
|
||||
local web = {name = "mobs:cobweb"}
|
||||
local web_trap = {
|
||||
size = {x = 3, y = 3, z = 3},
|
||||
data = {
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
},
|
||||
web, web, web,
|
||||
web, web, web,
|
||||
web, web, web
|
||||
}
|
||||
}
|
||||
|
||||
lucky_block:add_schematics({
|
||||
{"webtrap", web_trap, {x = 1, y = 0, z = 1}},
|
||||
})
|
||||
lucky_block:add_schematics({
|
||||
{"webtrap", web_trap, {x = 1, y = 0, z = 1}},
|
||||
})
|
||||
|
||||
lucky_block:add_blocks({
|
||||
{"sch", "webtrap", 1, true},
|
||||
{"spw", "mobs:dungeon_master", 1, nil, nil, 3, "Billy"},
|
||||
{"spw", "mobs:sand_monster", 3},
|
||||
{"spw", "mobs:stone_monster", 3, nil, nil, 3, "Bob"},
|
||||
{"spw", "mobs:dirt_monster", 3},
|
||||
{"spw", "mobs:tree_monster", 3},
|
||||
{"spw", "mobs:oerkki", 3},
|
||||
{"exp"},
|
||||
{"spw", "mobs:spider", 5},
|
||||
{"spw", "mobs:mese_monster", 2},
|
||||
{"spw", "mobs:lava_flan", 3},
|
||||
{"nod", "default:chest", 0, {
|
||||
{name = "mobs:lava_orb", max = 1}}},
|
||||
})
|
||||
|
||||
end
|
||||
lucky_block:add_blocks({
|
||||
{"sch", "webtrap", 1, true},
|
||||
{"spw", "mobs:dungeon_master", 1, nil, nil, 3, "Billy"},
|
||||
{"spw", "mobs:sand_monster", 3},
|
||||
{"spw", "mobs:stone_monster", 3, nil, nil, 3, "Bob"},
|
||||
{"spw", "mobs:dirt_monster", 3},
|
||||
{"spw", "mobs:tree_monster", 3},
|
||||
{"spw", "mobs:oerkki", 3},
|
||||
{"exp"},
|
||||
{"spw", "mobs:spider", 5},
|
||||
{"spw", "mobs:mese_monster", 2},
|
||||
{"spw", "mobs:lava_flan", 3},
|
||||
{"nod", "default:chest", 0, {
|
||||
{name = "mobs:lava_orb", max = 1}}},
|
||||
})
|
||||
|
|
361
mese_monster.lua
|
@ -1,39 +1,184 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
local S = mobs.intllib
|
||||
local mese_monster_types = {
|
||||
|
||||
-- mese_monster_red
|
||||
{
|
||||
y_min = -20,
|
||||
y_max = -1000,
|
||||
damage = 2,
|
||||
reach = 3,
|
||||
hp_min = 15,
|
||||
hp_max = 25,
|
||||
armor = 80,
|
||||
skins = {"mobs_mese_monster_red.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese_crystal", chance = 15, min = 0, max = 1},
|
||||
{name = "default:mese_crystal_fragment", chance = 2, min = 0, max = 1}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 6
|
||||
self.damage = 2
|
||||
end
|
||||
},
|
||||
|
||||
-- mese_monster_green
|
||||
{
|
||||
y_min = -1001,
|
||||
y_max = -2000,
|
||||
damage = 3,
|
||||
reach = 3,
|
||||
hp_min = 20,
|
||||
hp_max = 30,
|
||||
armor = 75,
|
||||
skins = {"mobs_mese_monster_green.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0},
|
||||
{"default:pick_stone", 0},
|
||||
{"default:shovel_stone", 0},
|
||||
{"default:axe_stone", 0},
|
||||
{"default:sword_stone", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese_crystal", chance = 12, min = 0, max = 1},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 1}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 6
|
||||
self.damage = 2
|
||||
end
|
||||
},
|
||||
|
||||
-- mese_monster_blue
|
||||
{
|
||||
y_min = -2001,
|
||||
y_max = -3000,
|
||||
damage = 3,
|
||||
reach = 4,
|
||||
hp_min = 25,
|
||||
hp_max = 35,
|
||||
armor = 70,
|
||||
skins = {"mobs_mese_monster_blue.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0},
|
||||
{"default:pick_stone", 0},
|
||||
{"default:shovel_stone", 0},
|
||||
{"default:axe_stone", 0},
|
||||
{"default:sword_stone", 0},
|
||||
{"default:pick_bronze", 0},
|
||||
{"default:shovel_bronze", 0},
|
||||
{"default:axe_bronze", 0},
|
||||
{"default:sword_bronze", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese", chance = 15, min = 0, max = 1},
|
||||
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 7
|
||||
self.damage = 3
|
||||
end
|
||||
},
|
||||
|
||||
-- mese_monster_purple
|
||||
{
|
||||
y_min = -3000,
|
||||
y_max = -31000,
|
||||
damage = 4,
|
||||
reach = 5,
|
||||
hp_min = 30,
|
||||
hp_max = 40,
|
||||
armor = 60,
|
||||
skins = {"mobs_mese_monster_purple.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0},
|
||||
{"default:pick_stone", 0},
|
||||
{"default:shovel_stone", 0},
|
||||
{"default:axe_stone", 0},
|
||||
{"default:sword_stone", 0},
|
||||
{"default:pick_bronze", 0},
|
||||
{"default:shovel_bronze", 0},
|
||||
{"default:axe_bronze", 0},
|
||||
{"default:sword_bronze", 0},
|
||||
{"default:pick_steel", 0},
|
||||
{"default:shovel_steel", 0},
|
||||
{"default:axe_steel", 0},
|
||||
{"default:sword_steel", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese", chance = 9, min = 0, max = 1},
|
||||
{name = "default:mese_crystal", chance = 6, min = 0, max = 2},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 3}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 8
|
||||
self.damage = 4
|
||||
end
|
||||
}}
|
||||
|
||||
|
||||
-- Mese Monster by Zeg9
|
||||
|
||||
-- Mese Monster by SirrobZeroone
|
||||
mobs:register_mob("mobs_monster:mese_monster", {
|
||||
type = "monster",
|
||||
visual_size = {x = 10, y = 10}, -- Got scale wrong in blender by factor of 10 - S01
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "shoot",
|
||||
attack_type = "dogshoot",
|
||||
damage = 4,
|
||||
reach = 4,
|
||||
shoot_interval = 0.5,
|
||||
arrow = "mobs_monster:mese_arrow",
|
||||
shoot_offset = 2,
|
||||
shoot_offset = 0.75,
|
||||
-- arrow_override = function(self)
|
||||
-- self.velocity = 20
|
||||
-- end,
|
||||
knock_back = true,
|
||||
hp_min = 10,
|
||||
hp_max = 25,
|
||||
armor = 80,
|
||||
collisionbox = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5},
|
||||
collisionbox = {-0.75, -0.5, -0.75, 0.75, 2.5, 0.75},
|
||||
visual = "mesh",
|
||||
mesh = "zmobs_mese_monster.x",
|
||||
mesh = "mobs_mese_monster.b3d",
|
||||
textures = {
|
||||
{"zmobs_mese_monster.png"},
|
||||
{"mobs_mese_monster_purple.png"}
|
||||
},
|
||||
blood_texture = "default_mese_crystal_fragment.png",
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
random = "mobs_mesemonster",
|
||||
damage = "default_glass_footstep"
|
||||
},
|
||||
view_range = 10,
|
||||
walk_velocity = 0.5,
|
||||
run_velocity = 2,
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
jump_height = 8,
|
||||
can_leap = true,
|
||||
fall_damage = 0,
|
||||
fall_speed = -6,
|
||||
stepheight = 2.1,
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2},
|
||||
|
@ -44,70 +189,164 @@ mobs:register_mob("mobs_monster:mese_monster", {
|
|||
lava_damage = 1,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
stand_start = 0,
|
||||
stand_end = 14,
|
||||
walk_start = 15,
|
||||
walk_end = 38,
|
||||
run_start = 40,
|
||||
run_end = 63,
|
||||
punch_start = 40,
|
||||
punch_end = 63,
|
||||
speed_normal = 18,
|
||||
speed_run = 18,
|
||||
walk_start = 10,
|
||||
walk_end = 41,
|
||||
walk_speed = 20,
|
||||
run_start = 10,
|
||||
run_end = 41,
|
||||
run_speed = 30,
|
||||
stand_start = 60,
|
||||
stand_end = 83,
|
||||
shoot_start = 100,
|
||||
shoot_end = 113,
|
||||
die_start = 125,
|
||||
die_end = 141,
|
||||
death_speed = 25,
|
||||
die_loop = false,
|
||||
jump_start = 150 ,
|
||||
jump_end = 168,
|
||||
jump_loop = false,
|
||||
punch_start = 175,
|
||||
punch_end = 189
|
||||
},
|
||||
|
||||
after_activate = function(self, staticdata, def, dtime)
|
||||
|
||||
local tex = self and self.textures and self.textures[1]
|
||||
|
||||
if tex == "zmobs_mese_monster.png" then
|
||||
self.object:remove()
|
||||
end
|
||||
end,
|
||||
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
-- quick update self function
|
||||
local function update(self, def)
|
||||
|
||||
self.object:set_properties({textures = def.skins})
|
||||
self.base_texture = def.skins
|
||||
|
||||
-- added by mobs_redo
|
||||
self.hp_min = def.hp_min
|
||||
self.hp_max = def.hp_max
|
||||
self.health = math.random(self.hp_min, self.hp_max)
|
||||
self.damage = def.damage
|
||||
self.reach = def.reach
|
||||
self.armor = def.armor
|
||||
self.immune_to = def.immune_to
|
||||
self.drops = def.drops
|
||||
self.arrow_override = def.arrow_override
|
||||
end
|
||||
|
||||
-- Normal spawn case
|
||||
for name, def in pairs(mese_monster_types) do
|
||||
|
||||
if pos.y <= def.y_min and pos.y >= def.y_max then
|
||||
|
||||
update(self, def)
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
--[[
|
||||
-- player using egg
|
||||
-- direction sets type N = red, E = green, S = blue, W = purple
|
||||
-- Just for fun - S01
|
||||
|
||||
local objects = minetest.get_objects_inside_radius(pos, 10)
|
||||
|
||||
for i, obj in ipairs(objects) do
|
||||
|
||||
if minetest.is_player(obj)
|
||||
and obj:get_wielded_item():get_name() == "mobs_monster:mese_monster" then
|
||||
|
||||
local degree = (360 + math.deg(obj:get_look_horizontal())) % 360
|
||||
local compass_sel
|
||||
|
||||
if degree > 45 and degree <= 135 then compass_sel = 4
|
||||
elseif degree > 135 and degree <= 225 then compass_sel = 3
|
||||
elseif degree > 225 and degree <= 315 then compass_sel = 2
|
||||
else compass_sel = 1
|
||||
end
|
||||
|
||||
local def = mese_monster_types[compass_sel]
|
||||
|
||||
update(self, def)
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
]]
|
||||
-- catch case if all else fails random it
|
||||
update(self, mese_monster_types[math.random(4)])
|
||||
|
||||
return true
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:mese_monster",
|
||||
nodes = {"default:stone", "default:sandstone"},
|
||||
max_light = 7,
|
||||
chance = 5000,
|
||||
active_object_count = 1,
|
||||
max_height = -20,
|
||||
-- mese arrow (weapon)
|
||||
minetest.register_craftitem("mobs_monster:mese_crystal_fragment_arrow", {
|
||||
description = S("Mese Monster Arrow"),
|
||||
inventory_image = "mobs_mese_arrow.png",
|
||||
groups = {not_in_creative_inventory = 1}
|
||||
})
|
||||
|
||||
|
||||
mobs:register_arrow("mobs_monster:mese_arrow", {
|
||||
visual = "wielditem",
|
||||
visual_size = {x = 0.25, y = 0.25},
|
||||
textures = {"mobs_monster:mese_crystal_fragment_arrow"},
|
||||
velocity = 8,
|
||||
rotate = 180,
|
||||
damage = 2,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = self.damage}
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = self.damage}
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:mese_monster",
|
||||
nodes = {"default:stone", "default:sandstone"},
|
||||
max_light = 7,
|
||||
chance = 5000,
|
||||
active_object_count = 1,
|
||||
max_height = -20
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_block.png", 1)
|
||||
|
||||
|
||||
mobs:alias_mob("mobs:mese_monster", "mobs_monster:mese_monster") -- compatiblity
|
||||
|
||||
|
||||
-- mese arrow (weapon)
|
||||
mobs:register_arrow("mobs_monster:mese_arrow", {
|
||||
visual = "sprite",
|
||||
-- visual = "wielditem",
|
||||
visual_size = {x = 0.5, y = 0.5},
|
||||
textures = {"default_mese_crystal_fragment.png"},
|
||||
--textures = {"default:mese_crystal_fragment"},
|
||||
velocity = 6,
|
||||
-- rotate = 180,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 2},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 2},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
end
|
||||
})
|
||||
|
||||
-- 9x mese crystal fragments = 1x mese crystal
|
||||
local f = "default:mese_crystal_fragment"
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:mese_crystal",
|
||||
recipe = {
|
||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
||||
}
|
||||
recipe = {{f, f, f}, {f, f, f}, {f, f, f}}
|
||||
})
|
||||
|
|
4
mod.conf
|
@ -1 +1,5 @@
|
|||
name = mobs_monster
|
||||
description = Add many different monsters into your world.
|
||||
depends = mobs
|
||||
optional_depends = default, lucky_block, toolranks
|
||||
min_minetest_version = 5.0
|
||||
|
|
29
oerkki.lua
|
@ -1,6 +1,5 @@
|
|||
|
||||
local S = mobs.intllib
|
||||
|
||||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
-- Oerkki by PilzAdam
|
||||
|
||||
|
@ -20,10 +19,11 @@ mobs:register_mob("mobs_monster:oerkki", {
|
|||
textures = {
|
||||
{"mobs_oerkki.png"},
|
||||
{"mobs_oerkki2.png"},
|
||||
{"mobs_oerkki3.png"}
|
||||
},
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
random = "mobs_oerkki",
|
||||
random = "mobs_oerkki"
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
|
@ -48,7 +48,7 @@ mobs:register_mob("mobs_monster:oerkki", {
|
|||
punch_start = 37,
|
||||
punch_end = 49,
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
speed_run = 15
|
||||
},
|
||||
replace_rate = 5,
|
||||
replace_what = {"default:torch"},
|
||||
|
@ -56,18 +56,21 @@ mobs:register_mob("mobs_monster:oerkki", {
|
|||
replace_offset = -1,
|
||||
immune_to = {
|
||||
{"default:sword_wood", 0}, -- no damage
|
||||
{"default:gold_lump", -10}, -- heals by 10 points
|
||||
{"default:gold_lump", -10} -- heals by 10 points
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:oerkki",
|
||||
nodes = {"default:stone"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
max_height = -10,
|
||||
})
|
||||
if not mobs.custom_spawn_monster then
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:oerkki",
|
||||
nodes = {"default:stone"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
max_height = -10
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:oerkki", S("Oerkki"), "default_obsidian.png", 1)
|
||||
|
|
49
readme.md
|
@ -1,40 +1,49 @@
|
|||
# MONSTER MOBS
|
||||
|
||||
MONSTER MOBS
|
||||
This mod creates many types of monsters. Some are weak, some are powerful, and they generally do the player a lot of harm. Many of these monsters spawn below ground and take light damage.
|
||||
|
||||
Dirt Monster
|
||||
**Lucky Blocks**: 12
|
||||
|
||||
- Spawning at night on green grass (or grey in ethereal) these mobs wander around looking for a player to eat. Drops 1-5 dirt when killed.
|
||||
## Dirt Monster
|
||||
|
||||
Dungeon Master
|
||||
Dirt monsters spawn at night on green grass (or grey in `ethereal`). They have a tendency to wander around looking for a player to eat and drop 1-2 dirt when killed. Dirt monsters have between 3-27 health, take damage in sunlight, and deal very little damage.
|
||||
|
||||
- Spawning below -70 underground DM's have a tendency to hurl fire balls at unsuspecting players and can cause major damage, but get too close and he will switch to dogfight attack. Can drop mese or diamond when killed.
|
||||
# Dungeon Master
|
||||
|
||||
Lava Flan
|
||||
Dungeon masters spawn below -70 underground DM's and hurl fireballs at unsuspecting players and can cause major damage, but get too close and he will switch to dogfight attack. They have between 42 and 75 health points. Their melee attack deals six damage points and their fireball inflicts eight. The fireball will also explode if it hits a node. They drop mese or diamond when killed.
|
||||
|
||||
- Cute as they may look lava flan wallow in their namesake (no, not flans) and get curious about players who wander by, forgetting that they can burn you and cause damage. They have a 1 in 5 chance of dropping lava orb when killed.
|
||||
# Lava Flan
|
||||
|
||||
Mese Monster
|
||||
Cute as they may look, lava flan wallow in their namesake (no, not flans) and get curious about players who wander by, forgetting that they can burn you and cause damage. They have a 1 in 5 chance of dropping lava orb when killed, but if they die in water then pray they dont solidify into an obsidian flan that shoots shards and destroys all around them.
|
||||
|
||||
- These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. Will drop mese when killed.
|
||||
# Mese Monster
|
||||
|
||||
Oerkki
|
||||
These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. The deeper you go the tougher they seem to get. Will drop mese when killed. Another thing - they do not take damage from many weapons.
|
||||
|
||||
- Found in dark areas like most monsters Oerkki wander the caverns stealing away torches on the ground and attacking anyone found in that area. 1 in 3 chance of dropping obsidian.
|
||||
# Oerkki
|
||||
|
||||
Sand Monster
|
||||
Found in dark areas like most monsters, Oerkki wander the caverns stealing away torches on the ground and attacking anyone found in that area. 1 in 3 chance of dropping obsidian.
|
||||
|
||||
- The hot deserts are home to these guys who spawn at any time of the day to attack players. They drop 3-5 desert sand when killed.
|
||||
# Sand Monster
|
||||
|
||||
Spiders
|
||||
The hot deserts are home to these guys who spawn at any time of the day to attack players. They drop 3-5 desert sand when killed. A single sand monster isn't much of a threat - they deal one damage point.
|
||||
|
||||
- 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.
|
||||
# Spiders
|
||||
|
||||
Stone Monster
|
||||
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.
|
||||
|
||||
- Found underground in dark caves these mobs seem to be zombie-like in fashion with a tendency to rush a player in the area. can drop torch, iron or coal when killed.
|
||||
# Stone Monster
|
||||
|
||||
Tree Monster
|
||||
Found underground in dark caves, these mobs seem to be zombie-like in fashion with a tendency to rush a player in the area. They can drop torch, iron or coal when killed.
|
||||
|
||||
- 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.
|
||||
# Tree Monster
|
||||
|
||||
Lucky Blocks: 11
|
||||
Found atop trees at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom.
|
||||
|
||||
# Land Guard
|
||||
|
||||
These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain. They have between 60 and 130 health points and deal 15 damage, enough to kill you in two blows.
|
||||
|
||||
# Fire Spirit
|
||||
|
||||
Fire Spirits will not tolerate players roaming around their domain and will fiercely attack until their dying puff of smoke. They will drop their spirit and some fire dust when using ethereal.
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
|
||||
local S = mobs.intllib
|
||||
|
||||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
-- custom particle effects
|
||||
local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow)
|
||||
|
@ -25,7 +24,7 @@ local effect = function(pos, amount, texture, min_size, max_size, radius, gravit
|
|||
minsize = min_size,
|
||||
maxsize = max_size,
|
||||
texture = texture,
|
||||
glow = glow,
|
||||
glow = glow
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -38,6 +37,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,
|
||||
|
@ -48,15 +48,16 @@ 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,
|
||||
sounds = {
|
||||
random = "mobs_sandmonster",
|
||||
random = "mobs_sandmonster"
|
||||
},
|
||||
walk_velocity = 1.5,
|
||||
run_velocity = 4,
|
||||
view_range = 8, --15
|
||||
view_range = 8,
|
||||
jump = true,
|
||||
floats = 0,
|
||||
drops = {
|
||||
|
@ -77,7 +78,15 @@ mobs:register_mob("mobs_monster:sand_monster", {
|
|||
run_start = 74,
|
||||
run_end = 105,
|
||||
punch_start = 74,
|
||||
punch_end = 105,
|
||||
punch_end = 105
|
||||
},
|
||||
immune_to = {
|
||||
{"default:shovel_wood", 3}, -- shovels deal more damage to sand monster
|
||||
{"default:shovel_stone", 3},
|
||||
{"default:shovel_bronze", 4},
|
||||
{"default:shovel_steel", 4},
|
||||
{"default:shovel_mese", 5},
|
||||
{"default:shovel_diamond", 7}
|
||||
},
|
||||
--[[
|
||||
custom_attack = function(self, p)
|
||||
|
@ -87,23 +96,41 @@ mobs:register_mob("mobs_monster:sand_monster", {
|
|||
]]
|
||||
on_die = function(self, pos)
|
||||
pos.y = pos.y + 0.5
|
||||
effect(pos, 30, "mobs_sand_particles.png", 0.1, 2, 3, 5)
|
||||
mobs:effect(pos, 30, "mobs_sand_particles.png", .1, 2, 3, 5)
|
||||
pos.y = pos.y + 0.25
|
||||
effect(pos, 30, "mobs_sand_particles.png", 0.1, 2, 3, 5)
|
||||
mobs:effect(pos, 30, "mobs_sand_particles.png", .1, 2, 3, 5)
|
||||
end,
|
||||
--[[
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
local tool = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
if tool:get_name() == "default:sand" then
|
||||
|
||||
self.owner = name
|
||||
self.type = "npc"
|
||||
|
||||
mobs:force_capture(self, clicker)
|
||||
end
|
||||
end,
|
||||
]]
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:sand_monster",
|
||||
nodes = {"default:desert_sand"},
|
||||
chance = 7000,
|
||||
active_object_count = 2,
|
||||
min_height = 0,
|
||||
})
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:sand_monster",
|
||||
nodes = {"default:desert_sand"},
|
||||
chance = 7000,
|
||||
active_object_count = 2,
|
||||
min_height = 0
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"), "default_desert_sand.png", 1)
|
||||
mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"),
|
||||
"default_desert_sand.png", 1)
|
||||
|
||||
|
||||
mobs:alias_mob("mobs:sand_monster", "mobs_monster:sand_monster") -- compatibility
|
||||
|
|
After Width: | Height: | Size: 175 KiB |
|
@ -0,0 +1,10 @@
|
|||
mobs_monster.dirt_monster (Enable Dirt Monster) bool true
|
||||
mobs_monster.dungeon_master (Enable Dungeon Master) bool true
|
||||
mobs_monster.fire_spirit (Enable Fire Spirit) bool true
|
||||
mobs_monster.land_guard (Enable Land Guard) bool true
|
||||
mobs_monster.lava_flan (Enable Lava Flan) bool true
|
||||
mobs_monster.mese_monster (Enable Mese Monster) bool true
|
||||
mobs_monster.oerkki (Enable Oerkki) bool true
|
||||
mobs_monster.spider (Enable Spider) bool true
|
||||
mobs_monster.stone_monster (Enable Stone Monster) bool true
|
||||
mobs_monster.tree_monster (Enable Tree Monster) bool true
|
|
@ -0,0 +1,187 @@
|
|||
|
||||
--[[ 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,
|
||||
})
|
||||
|
||||
-- Land Guard
|
||||
|
||||
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,
|
||||
})
|
307
spider.lua
|
@ -1,5 +1,55 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
local S = mobs.intllib
|
||||
local get_velocity = function(self)
|
||||
|
||||
local v = self.object:get_velocity()
|
||||
|
||||
-- sanity check
|
||||
if not v then return 0 end
|
||||
|
||||
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)
|
||||
|
@ -24,12 +74,12 @@ mobs:register_mob("mobs_monster:spider", {
|
|||
{"mobs_spider_orange.png"},
|
||||
{"mobs_spider_snowy.png"},
|
||||
{"mobs_spider_grey.png"},
|
||||
{"mobs_spider_crystal.png"},
|
||||
{"mobs_spider_crystal.png"}
|
||||
},
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
random = "mobs_spider",
|
||||
attack = "mobs_spider",
|
||||
attack = "mobs_spider"
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
|
@ -45,7 +95,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,
|
||||
|
@ -53,77 +103,160 @@ mobs:register_mob("mobs_monster:spider", {
|
|||
run_start = 1,
|
||||
run_end = 21,
|
||||
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)
|
||||
|
||||
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
|
||||
end,
|
||||
|
||||
-- custom function to make spiders climb vertical facings
|
||||
do_custom = function(self, dtime)
|
||||
|
||||
-- quarter second timer
|
||||
self.spider_timer = (self.spider_timer or 0) + dtime
|
||||
if self.spider_timer < 0.25 then
|
||||
return
|
||||
end
|
||||
self.spider_timer = 0
|
||||
|
||||
-- need to be stopped to go onwards
|
||||
if get_velocity(self) > 0.5 then
|
||||
self.disable_falling = nil
|
||||
return
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
local yaw = self.object:get_yaw()
|
||||
|
||||
-- sanity check
|
||||
if not yaw then return end
|
||||
|
||||
local prop = self.object:get_properties()
|
||||
|
||||
pos.y = pos.y + prop.collisionbox[2] - 0.2
|
||||
|
||||
local dir_x = -math.sin(yaw) * (prop.collisionbox[4] + 0.5)
|
||||
local dir_z = math.cos(yaw) * (prop.collisionbox[4] + 0.5)
|
||||
local nod = minetest.get_node_or_nil({
|
||||
x = pos.x + dir_x,
|
||||
y = pos.y + 0.5,
|
||||
z = pos.z + dir_z
|
||||
})
|
||||
|
||||
-- get current velocity
|
||||
local v = self.object:get_velocity()
|
||||
|
||||
-- can only climb solid facings
|
||||
if not nod or not minetest.registered_nodes[nod.name]
|
||||
or not minetest.registered_nodes[nod.name].walkable then
|
||||
self.disable_falling = nil
|
||||
v.y = 0
|
||||
self.object:set_velocity(v)
|
||||
return
|
||||
end
|
||||
|
||||
--print ("----", nod.name, self.disable_falling, dtime)
|
||||
|
||||
-- turn off falling if attached to facing
|
||||
self.disable_falling = true
|
||||
|
||||
-- move up facing
|
||||
v.x = 0 ; v.y = 0
|
||||
v.y = self.jump_height
|
||||
|
||||
self:set_animation("jump")
|
||||
|
||||
self.object:set_velocity(v)
|
||||
end,
|
||||
|
||||
-- make spiders jump at you on attack
|
||||
custom_attack = function(self, pos)
|
||||
|
||||
local vel = self.object:get_velocity()
|
||||
|
||||
self.object:set_velocity({
|
||||
x = vel.x * self.run_velocity,
|
||||
y = self.jump_height * 1.5,
|
||||
z = vel.z * self.run_velocity
|
||||
})
|
||||
|
||||
self.pausetimer = 0.5
|
||||
|
||||
return true -- continue rest of attack function
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
-- above ground spawn
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:spider",
|
||||
nodes = {
|
||||
"default:dirt_with_rainforest_litter", "default:snowblock",
|
||||
"default:snow", "ethereal:crystal_dirt"
|
||||
},
|
||||
min_light = 0,
|
||||
max_light = 8,
|
||||
chance = 7000,
|
||||
active_object_count = 1,
|
||||
min_height = 25,
|
||||
max_height = 31000,
|
||||
})
|
||||
if not mobs.custom_spawn_monster then
|
||||
|
||||
-- below ground spawn
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:spider",
|
||||
nodes = {"default:stone_with_mese", "default:mese", "default:stone"},
|
||||
min_light = 0,
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
active_object_count = 1,
|
||||
min_height = -31000,
|
||||
max_height = -40,
|
||||
})
|
||||
-- above ground spawn
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:spider",
|
||||
nodes = {
|
||||
"default:dirt_with_rainforest_litter", "default:snowblock",
|
||||
"default:snow", "ethereal:crystal_dirt", "ethereal:cold_dirt"
|
||||
},
|
||||
min_light = 0,
|
||||
max_light = 8,
|
||||
chance = 7000,
|
||||
active_object_count = 1,
|
||||
min_height = 25,
|
||||
max_height = 31000
|
||||
})
|
||||
|
||||
-- below ground spawn
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:spider",
|
||||
nodes = {"default:stone_with_mese", "default:mese", "default:stone"},
|
||||
min_light = 0,
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
active_object_count = 1,
|
||||
min_height = -31000,
|
||||
max_height = -40
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:spider", S("Spider"), "mobs_cobweb.png", 1)
|
||||
|
@ -151,7 +284,7 @@ minetest.register_node(":mobs:cobweb", {
|
|||
walkable = false,
|
||||
groups = {snappy = 1, disable_jump = 1},
|
||||
drop = "farming:string",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
sounds = default and default.node_sound_leaves_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -159,8 +292,54 @@ minetest.register_craft({
|
|||
recipe = {
|
||||
{"farming:string", "", "farming:string"},
|
||||
{"", "farming:string", ""},
|
||||
{"farming:string", "", "farming:string"},
|
||||
{"farming:string", "", "farming:string"}
|
||||
}
|
||||
})
|
||||
|
||||
local web_place = function(pos)
|
||||
|
||||
if minetest.find_node_near(pos, 1, {"ignore"}) then return end
|
||||
|
||||
local pos2 = minetest.find_node_near(pos, 1, {"air", "group:leaves"}, true)
|
||||
|
||||
if pos2 then
|
||||
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")
|
||||
|
|
|
@ -1,5 +1,26 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
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}
|
||||
}
|
||||
},
|
||||
|
||||
{ nodes = {"default:sandstone"},
|
||||
skins = {"mobs_stone_monster4.png"},
|
||||
drops = {
|
||||
{name = "default:sandstone", chance = 1, min = 0, max = 2},
|
||||
{name = "default:tin_lump", chance = 5, min = 0, max = 2},
|
||||
{name = "default:copper_lump", chance = 5, min = 0, max = 2}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- Stone Monster by PilzAdam
|
||||
|
@ -19,11 +40,11 @@ mobs:register_mob("mobs_monster:stone_monster", {
|
|||
mesh = "mobs_stone_monster.b3d",
|
||||
textures = {
|
||||
{"mobs_stone_monster.png"},
|
||||
{"mobs_stone_monster2.png"}, -- by AMMOnym
|
||||
{"mobs_stone_monster2.png"} -- by AMMOnym
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "mobs_stonemonster",
|
||||
random = "mobs_stonemonster"
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 2,
|
||||
|
@ -35,7 +56,7 @@ mobs:register_mob("mobs_monster:stone_monster", {
|
|||
{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 = "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},
|
||||
},
|
||||
water_damage = 0,
|
||||
|
@ -51,18 +72,55 @@ mobs:register_mob("mobs_monster:stone_monster", {
|
|||
run_start = 40,
|
||||
run_end = 63,
|
||||
punch_start = 40,
|
||||
punch_end = 63,
|
||||
punch_end = 63
|
||||
},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0}, -- wooden pick doesnt hurt stone monster
|
||||
{"default:pick_stone", 4}, -- picks deal more damage to stone monster
|
||||
{"default:pick_bronze", 5},
|
||||
{"default:pick_steel", 5},
|
||||
{"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
|
||||
})
|
||||
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:stone_monster",
|
||||
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
max_height = 0,
|
||||
})
|
||||
if not mobs.custom_spawn_monster then
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:stone_monster",
|
||||
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
max_height = 0
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:stone_monster", S("Stone Monster"), "default_stone.png", 1)
|
||||
|
|
Before Width: | Height: | Size: 144 B After Width: | Height: | Size: 159 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 634 B |
After Width: | Height: | Size: 632 B |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 274 B |
Before Width: | Height: | Size: 220 B After Width: | Height: | Size: 241 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 563 B |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 778 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 534 B |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 527 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1002 B |
After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 567 B |
137
tree_monster.lua
|
@ -1,5 +1,48 @@
|
|||
-- Translation support
|
||||
local S = minetest.get_translator("mobs_monster")
|
||||
|
||||
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,20 +55,20 @@ 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",
|
||||
mesh = "mobs_tree_monster.b3d",
|
||||
textures = {
|
||||
{"mobs_tree_monster.png"},
|
||||
{"mobs_tree_monster2.png"},
|
||||
{"mobs_tree_monster2.png"}
|
||||
},
|
||||
blood_texture = "default_wood.png",
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "mobs_treemonster",
|
||||
random = "mobs_treemonster"
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
|
@ -43,11 +86,17 @@ mobs:register_mob("mobs_monster:tree_monster", {
|
|||
lava_damage = 0,
|
||||
light_damage = 2,
|
||||
fall_damage = 0,
|
||||
-- immune_to = {
|
||||
-- {"default:axe_diamond", 5},
|
||||
-- {"default:sapling", -5}, -- saplings heal
|
||||
-- {"all", 0},
|
||||
-- },
|
||||
immune_to = {
|
||||
{"default:axe_wood", 0}, -- wooden axe doesnt hurt wooden monster
|
||||
{"default:axe_stone", 4}, -- axes deal more damage to tree monster
|
||||
{"default:axe_bronze", 5},
|
||||
{"default:axe_steel", 5},
|
||||
{"default:axe_mese", 7},
|
||||
{"default:axe_diamond", 9},
|
||||
{"default:sapling", -5}, -- default and jungle saplings heal
|
||||
{"default:junglesapling", -5},
|
||||
-- {"all", 0}, -- only weapons on list deal damage
|
||||
},
|
||||
animation = {
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
|
@ -58,19 +107,69 @@ mobs:register_mob("mobs_monster:tree_monster", {
|
|||
run_start = 48,
|
||||
run_end = 62,
|
||||
punch_start = 48,
|
||||
punch_end = 62,
|
||||
punch_end = 62
|
||||
},
|
||||
|
||||
-- check surrounding nodes and spawn a specific tree monster
|
||||
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
|
||||
})
|
||||
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:tree_monster",
|
||||
nodes = {"default:leaves", "default:jungleleaves", "moretrees:beech_leaves"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
min_height = 0,
|
||||
day_toggle = false,
|
||||
})
|
||||
if not mobs.custom_spawn_monster then
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:tree_monster",
|
||||
nodes = {"group:leaves"},
|
||||
max_light = 7,
|
||||
chance = 7000,
|
||||
min_height = 0,
|
||||
day_toggle = false
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:tree_monster", S("Tree Monster"), "default_tree_top.png", 1)
|
||||
|
|