Compare commits

...

26 Commits

Author SHA1 Message Date
b3e50d295c Merge remote-tracking branch 'upstream/master' 2022-01-22 20:06:05 +01:00
ae0e50bb69 add spanish translation (thanks mckaygerhard) 2022-01-22 08:30:02 +00:00
f792de52af update translation checks 2022-01-20 08:56:28 +00:00
cab9cf25c6 Merge remote-tracking branch 'upstream/master' 2021-11-26 21:44:00 +01:00
23e24bff06 fix intllib return 2021-11-14 14:21:53 +00:00
f39fc78e4a Merge remote-tracking branch 'upstream/master' 2021-09-21 23:09:27 +02:00
cd201150b6 add nether varients of dungeon master 2021-09-01 08:05:13 +01:00
70d92995bb Merge remote-tracking branch 'upstream/master' 2021-07-26 22:23:25 +02:00
1c4ce9e402 make default optional dependency 2021-07-24 22:21:37 +01:00
69ca619580 Merge remote-tracking branch 'upstream/master' 2021-06-20 17:16:01 +02:00
5009e7439d lava flan heals while in lava 2021-06-14 09:38:32 +01:00
9b3c1e156f fire spirit additions 2021-06-07 17:45:41 +01:00
949bfec484 initial fire spirit upload 2021-05-12 10:11:34 +01:00
7bd9080eda Merge remote-tracking branch 'upstream/master' 2021-04-08 13:29:19 +02:00
e39d06b2d8 add fire damage to obsidian flan 2021-04-05 08:56:12 +01:00
b9666dffb4 add fire_damage = 0 to lava flan 2021-04-05 08:51:13 +01:00
2baa1cc77d Merge remote-tracking branch 'upstream/master' 2021-03-12 12:30:34 +01:00
095d8753e0 add Tree Creeper 2021-03-02 18:04:01 +00:00
476ad97935 update mese monster texture 2021-03-02 13:54:26 +00:00
5723ba508e add Land Guards 2021-03-02 13:35:17 +00:00
57f40cf4b1 make cave spider tiny 2021-03-01 19:47:47 +00:00
22308b4c94 add different dirt and stone type monsters 2021-03-01 12:27:12 +00:00
05ccc87150 add additional tree monster types for ethereal trees 2021-03-01 11:00:57 +00:00
b1a94c5abc update spider types, have jungle tarantula spit webs 2021-03-01 10:24:56 +00:00
2129b4731f Merge remote-tracking branch 'upstream/master' 2021-02-07 13:11:50 +01:00
9835105cf9 fix typo in mod.conf 2021-02-01 08:07:59 +00:00
41 changed files with 649 additions and 83 deletions

View File

@ -1,5 +1,5 @@
default
mobs mobs
default?
lucky_block? lucky_block?
toolranks? toolranks?
intllib? intllib?

View File

@ -1,5 +1,15 @@
local S = mobs.intllib local S = mobs.intllib_monster
local dirt_types = {
{ nodes = {"ethereal:dry_dirt"},
skins = {"mobs_dirt_monster3.png"},
drops = {
{name = "ethereal:dry_dirt", chance = 1, min = 0, max = 2}
}
}
}
-- Dirt Monster by PilzAdam -- Dirt Monster by PilzAdam
@ -19,6 +29,7 @@ mobs:register_mob("mobs_monster:dirt_monster", {
mesh = "mobs_stone_monster.b3d", mesh = "mobs_stone_monster.b3d",
textures = { textures = {
{"mobs_dirt_monster.png"}, {"mobs_dirt_monster.png"},
{"mobs_dirt_monster2.png"},
}, },
blood_texture = "default_dirt.png", blood_texture = "default_dirt.png",
makes_footstep_sound = true, makes_footstep_sound = true,
@ -49,19 +60,39 @@ mobs:register_mob("mobs_monster:dirt_monster", {
punch_start = 40, punch_start = 40,
punch_end = 63, punch_end = 63,
}, },
-- check surrounding nodes and spawn a specific monster
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #dirt_types do
tmp = dirt_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
}) })
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:gray_dirt"
end
if not mobs.custom_spawn_monster then if not mobs.custom_spawn_monster then
mobs:spawn({ mobs:spawn({
name = "mobs_monster:dirt_monster", name = "mobs_monster:dirt_monster",
nodes = {spawn_on}, nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"},
min_light = 0, min_light = 0,
max_light = 7, max_light = 7,
chance = 6000, chance = 6000,

View File

@ -1,5 +1,15 @@
local S = mobs.intllib local S = mobs.intllib_monster
local master_types = {
{ nodes = {"nether:rack"},
skins = {"mobs_dungeon_master_nether.png"},
},
{ nodes = {"nether:rack_deep"},
skins = {"mobs_dungeon_master_netherdeep.png"},
}
}
-- Dungeon Master by PilzAdam -- Dungeon Master by PilzAdam
@ -16,8 +26,8 @@ mobs:register_mob("mobs_monster:dungeon_master", {
shoot_interval = 2.2, shoot_interval = 2.2,
arrow = "mobs_monster:fireball", arrow = "mobs_monster:fireball",
shoot_offset = 1, shoot_offset = 1,
hp_min = 22, hp_min = 42,
hp_max = 45, hp_max = 75,
armor = 60, armor = 60,
collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7}, collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7},
visual = "mesh", visual = "mesh",
@ -62,13 +72,39 @@ mobs:register_mob("mobs_monster:dungeon_master", {
speed_normal = 15, speed_normal = 15,
speed_run = 15, speed_run = 15,
}, },
-- check surrounding nodes and spawn a specific monster
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #master_types do
tmp = master_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
}) })
if not mobs.custom_spawn_monster then if not mobs.custom_spawn_monster then
mobs:spawn({ mobs:spawn({
name = "mobs_monster:dungeon_master", name = "mobs_monster:dungeon_master",
nodes = {"default:stone", "default:sandstone", "nether:netherrack"}, nodes = {"default:stone", "nether:rack", "nether:rack_deep", "hell:hellrack"},
max_light = 5, max_light = 5,
chance = 9000, chance = 9000,
active_object_count = 1, active_object_count = 1,

98
fire_spirit.lua Normal file
View File

@ -0,0 +1,98 @@
local S = mobs.intllib_monster
local mob_drops = {
{name = "fireflies:firefly", chance = 1, min = 1, max = 1}
}
if minetest.get_modpath("ethereal") then
table.insert(mob_drops,
{name = "ethereal:fire_dust", chance = 1, min = 1, max = 1})
end
-- Fire Spirit
mobs:register_mob("mobs_monster:fire_spirit", {
type = "monster",
passive = false,
attack_type = "dogfight",
pathfinding = true,
reach = 2,
damage = 4,
hp_min = 25,
hp_max = 45,
armor = 100,
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
visual_scale = {x = 0.5, y = 0.5, z = 0.5},
visual = "sprite",
textures = {
{"mobs_fire_spirit.png"}
},
glow = 14,
blood_texture = "fire_basic_flame.png",
immune_to = {
{"bucket:bucket_water", 1},
{"bucket:bucket_river_water", 1},
{"all"}
},
makes_footstep_sound = false,
sounds = {
random = "fire_fire",
damage = "fire_extinguish_flame",
death = "fire_extinguish_flame"
},
view_range = 14,
walk_velocity = 2,
run_velocity = 3,
jump = true,
jump_height = 6,
drops = mob_drops,
water_damage = 1,
lava_damage = 0,
fire_damage = 0,
light_damage = 0,
fall_damage = false,
fear_height = 8,
animation = {},
on_die = function(self, pos)
mobs:effect(pos, 20, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false)
self.object:remove()
end,
do_custom = function(self, dtime)
self.flame_timer = (self.flame_timer or 0) + dtime
if self.flame_timer < 0.25 then
return
end
self.flame_timer = 0
local pos = self.object:get_pos()
-- pos, amount, texture, min_size, max_size, radius, gravity, glow, fall
mobs:effect(pos, 5, "fire_basic_flame.png", 1, 2, 0.1, 0.2, 14, nil)
end
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:fire_spirit",
nodes = {"default:obsidian", "caverealms:hot_cobble"},
neighbors = {"group:fire"},
min_light = 12,
max_light = 15,
chance = 1500,
active_object_count = 1,
max_height = -150
})
end
mobs:register_egg("mobs_monster:fire_spirit", S("Fire Spirit"), "fire_basic_flame.png", 1)

View File

@ -2,10 +2,32 @@
-- Load support for intllib. -- Load support for intllib.
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/" local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
local S = minetest.get_translator and minetest.get_translator("mobs_monster") or local S
dofile(path .. "intllib.lua")
mobs.intllib = S -- Check for translation method
local S
if minetest.get_translator ~= nil then
S = minetest.get_translator("mobs_monster") -- 5.x translation function
else
if minetest.get_modpath("intllib") then
dofile(minetest.get_modpath("intllib") .. "/init.lua")
if intllib.make_gettext_pair then
gettext, ngettext = intllib.make_gettext_pair() -- new gettext method
else
gettext = intllib.Getter() -- old text file method
end
S = gettext
else -- boilerplate function
S = function(str, ...)
local args = {...}
return str:gsub("@%d+", function(match)
return args[tonumber(match:sub(2))]
end)
end
end
end
mobs.intllib_monster = S
-- Check for custom mob spawn file -- Check for custom mob spawn file
@ -29,6 +51,8 @@ dofile(path .. "lava_flan.lua") -- Zeg9
dofile(path .. "mese_monster.lua") dofile(path .. "mese_monster.lua")
dofile(path .. "spider.lua") -- AspireMint dofile(path .. "spider.lua") -- AspireMint
dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa
dofile(path .. "land_guard.lua")
dofile(path .. "fire_spirit.lua")
-- Load custom spawning -- Load custom spawning
@ -41,4 +65,4 @@ end
dofile(path .. "lucky_block.lua") dofile(path .. "lucky_block.lua")
print (S("[MOD] Mobs Redo Monsters loaded")) print ("[MOD] Mobs Redo Monsters loaded")

View File

@ -1,3 +0,0 @@
-- Support for the old multi-load method
dofile(minetest.get_modpath("intllib").."/init.lua")

127
land_guard.lua Normal file
View File

@ -0,0 +1,127 @@
local S = mobs.intllib_monster
local guard_types = {
{ nodes = {
"default:snow", "default:snowblock", "default:ice",
"default:dirt_with_snow"
},
skins = {"mobs_land_guard6.png", "mobs_land_guard7.png", "mobs_land_guard8.png"},
drops = {
{name = "default:ice", chance = 1, min = 1, max = 4},
{name = "mobs:leather", chance = 2, min = 0, max = 2},
{name = "default:diamond", chance = 4, min = 0, max = 2},
},
},
{ nodes = {
"ethereal:dry_dirt", "default:sand", "default:desert_sand",
"default:dry_dirt_with_dry_grass", "default:dry_dirt"
},
skins = {"mobs_land_guard4.png", "mobs_land_guard5.png"},
drops = {
{name = "default:sandstone", chance = 1, min = 1, max = 4},
{name = "mobs:leather", chance = 2, min = 0, max = 2},
{name = "default:mese_crystal", chance = 4, min = 0, max = 2},
},
}
}
-- Land Guard
mobs:register_mob("mobs_monster:land_guard", {
type = "monster",
passive = false,
attack_type = "dogfight",
group_attack = true,
reach = 3,
damage = 15,
hp_min = 30,
hp_max = 65,
armor = 50,
collisionbox = {-0.5, -1.01, -0.5, 0.5, 1.6, 0.5},
visual_size = {x = 1, y = 1},
visual = "mesh",
mesh = "mobs_dungeon_master.b3d",
textures = {
{"mobs_land_guard.png"},
{"mobs_land_guard2.png"},
{"mobs_land_guard3.png"}
},
makes_footstep_sound = true,
sounds = {
random = "mobs_dungeonmaster",
},
walk_velocity = 1.5,
run_velocity = 3.4,
jump = true,
jump_height = 2.0,
floats = 0,
view_range = 15,
drops = {
{name = "mobs:leather", chance = 2, min = 0, max = 2},
{name = "default:mese_crystal", chance = 3, min = 0, max = 2},
{name = "default:diamond", chance = 4, min = 0, max = 1},
},
water_damage = 0,
lava_damage = 6,
light_damage = 0,
fear_height = 8,
animation = {
stand_start = 0,
stand_end = 19,
walk_start = 20,
walk_end = 35,
punch_start = 36,
punch_end = 48,
speed_normal = 15,
speed_run = 20,
},
-- check surrounding nodes and spawn a specific guard
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #guard_types do
tmp = guard_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = { tmp.skins[math.random(#tmp.skins)] }
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = tmp.docile
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end,
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:land_guard",
nodes = {
"default:snow", "default:ice", "default:stone",
"default:dry_dirt_with_dry_grass", "ethereal:dry_dirt"
},
max_light = 7,
chance = 25000,
min_height = 0,
active_object_count = 1,
})
end
mobs:register_egg("mobs_monster:land_guard", S("Land Guard"), "default_ice.png", 1)

View File

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

View File

@ -30,3 +30,7 @@ mobs.fireball.png was originally made by Sapier and edited by Benrob:
-- --
-- (c) Sapier -- (c) Sapier
-- Contact sapier a t gmx net -- Contact sapier a t gmx net
Textures created by wwar (cc0)
mobs_dungeon_master_nether.png
mobs_dungeon_master_netherdeep.png

14
locale/mobs_monster.es.tr Normal file
View File

@ -0,0 +1,14 @@
# textdomain:mobs_monster
Cobweb=Telarania
Dirt Monster=Mounstro de tierra
Dungeon Master=Maestro de mazmorra
Lava Flan=Flan de lava
Lava Pickaxe=Hacha de lava
Lava orb=Esfera de lava
Mese Monster=Mounstro de mese
#Obsidian Flan=
Oerkki=Oerkki
Sand Monster=Mounstro de arena
Spider=Arania
Stone Monster=Mounstro de piedra
Tree Monster=Mounstro de madera

View File

@ -1,6 +1,5 @@
local S = mobs.intllib local S = mobs.intllib_monster
-- Mese Monster by Zeg9 -- Mese Monster by Zeg9
@ -12,6 +11,9 @@ mobs:register_mob("mobs_monster:mese_monster", {
shoot_interval = 0.5, shoot_interval = 0.5,
arrow = "mobs_monster:mese_arrow", arrow = "mobs_monster:mese_arrow",
shoot_offset = 2, shoot_offset = 2,
--arrow_override = function(self)
-- self.velocity = 20
--end,
hp_min = 10, hp_min = 10,
hp_max = 25, hp_max = 25,
armor = 80, armor = 80,

View File

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

View File

@ -1,6 +1,5 @@
local S = mobs.intllib local S = mobs.intllib_monster
-- Oerkki by PilzAdam -- Oerkki by PilzAdam
@ -20,6 +19,7 @@ mobs:register_mob("mobs_monster:oerkki", {
textures = { textures = {
{"mobs_oerkki.png"}, {"mobs_oerkki.png"},
{"mobs_oerkki2.png"}, {"mobs_oerkki2.png"},
{"mobs_oerkki3.png"},
}, },
makes_footstep_sound = false, makes_footstep_sound = false,
sounds = { sounds = {

View File

@ -27,7 +27,7 @@ Sand Monster
Spiders Spiders
- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed. - Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed.
Stone Monster Stone Monster
@ -35,6 +35,14 @@ Stone Monster
Tree Monster Tree Monster
- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three. - Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom.
Land Guard
- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain.
Fire Spirit
- Fire Spirits will not tolerate players roaming around their domain and will fiercely attack until their dying puff of smoke. Will drop it's spirit and some fire dust when using ethereal.
Lucky Blocks: 11 Lucky Blocks: 11

View File

@ -1,6 +1,5 @@
local S = mobs.intllib local S = mobs.intllib_monster
-- custom particle effects -- custom particle effects
local effect = function( local effect = function(
@ -39,6 +38,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
attack_type = "dogfight", attack_type = "dogfight",
pathfinding = true, pathfinding = true,
--specific_attack = {"player", "mobs_npc:npc"}, --specific_attack = {"player", "mobs_npc:npc"},
--ignore_invisibility = true,
reach = 2, reach = 2,
damage = 1, damage = 1,
hp_min = 4, hp_min = 4,
@ -49,6 +49,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
mesh = "mobs_sand_monster.b3d", mesh = "mobs_sand_monster.b3d",
textures = { textures = {
{"mobs_sand_monster.png"}, {"mobs_sand_monster.png"},
{"mobs_sand_monster2.png"},
}, },
blood_texture = "default_desert_sand.png", blood_texture = "default_desert_sand.png",
makes_footstep_sound = true, makes_footstep_sound = true,

View File

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

View File

@ -1,5 +1,17 @@
local S = mobs.intllib local S = mobs.intllib_monster
local stone_types = {
{ nodes = {"default:desert_stone"},
skins = {"mobs_stone_monster3.png"},
drops = {
{name = "default:desert_cobble", chance = 1, min = 0, max = 2},
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "default:gold_lump", chance = 5, min = 0, max = 2}
}
}
}
-- Stone Monster by PilzAdam -- Stone Monster by PilzAdam
@ -35,7 +47,7 @@ mobs:register_mob("mobs_monster:stone_monster", {
{name = "default:cobble", chance = 1, min = 0, max = 2}, {name = "default:cobble", chance = 1, min = 0, max = 2},
{name = "default:coal_lump", chance = 3, min = 0, max = 2}, {name = "default:coal_lump", chance = 3, min = 0, max = 2},
{name = "default:iron_lump", chance = 5, min = 0, max = 2}, {name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "maptools:silver_coin", chance = 1, min = 0, max = 1,}, {name = "maptools:silver_coin", chance = 1, min = 0, max = 1},
{name = "default:torch", chance = 2, min = 3, max = 5}, {name = "default:torch", chance = 2, min = 3, max = 5},
}, },
water_damage = 0, water_damage = 0,
@ -61,6 +73,32 @@ mobs:register_mob("mobs_monster:stone_monster", {
{"default:pick_mese", 6}, {"default:pick_mese", 6},
{"default:pick_diamond", 7}, {"default:pick_diamond", 7},
}, },
-- check surrounding nodes and spawn a specific spider
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #stone_types do
tmp = stone_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
}) })

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
textures/mobs_oerkki3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
textures/mobs_tree_monster6.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 B

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

View File

@ -1,5 +1,48 @@
local S = mobs.intllib local S = mobs.intllib_monster
local tree_types = {
{ nodes = {"ethereal:sakura_leaves", "ethereal:sakura_leaves2"},
skins = {"mobs_tree_monster5.png"},
drops = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:sakura_leaves", chance = 1, min = 1, max = 2},
{name = "ethereal:sakura_trunk", chance = 2, min = 1, max = 2},
{name = "ethereal:sakura_tree_sapling", chance = 2, min = 0, max = 2},
}
},
{ nodes = {"ethereal:frost_leaves"},
skins = {"mobs_tree_monster3.png"},
drops = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:frost_leaves", chance = 1, min = 1, max = 2},
{name = "ethereal:frost_tree", chance = 2, min = 1, max = 2},
{name = "ethereal:crystal_spike", chance = 4, min = 0, max = 2},
}
},
{ nodes = {"ethereal:yellowleaves"},
skins = {"mobs_tree_monster4.png"},
drops = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:yellowleaves", chance = 1, min = 1, max = 2},
{name = "ethereal:yellow_tree_sapling", chance = 2, min = 0, max = 2},
{name = "ethereal:golden_apple", chance = 3, min = 0, max = 2},
}
},
{ nodes = {"default:acacia_bush_leaves"},
skins = {"mobs_tree_monster6.png"},
drops = {
{name = "tnt:gunpowder", chance = 1, min = 0, max = 2},
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "default:coal_lump", chance = 3, min = 0, max = 3}
},
explode = true
},
}
-- Tree Monster (or Tree Gollum) by PilzAdam -- Tree Monster (or Tree Gollum) by PilzAdam
@ -12,8 +55,8 @@ mobs:register_mob("mobs_monster:tree_monster", {
--specific_attack = {"player", "mobs_animal:chicken"}, --specific_attack = {"player", "mobs_animal:chicken"},
reach = 2, reach = 2,
damage = 2, damage = 2,
hp_min = 7, hp_min = 20,
hp_max = 33, hp_max = 40,
armor = 100, armor = 100,
collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4},
visual = "mesh", visual = "mesh",
@ -66,13 +109,60 @@ mobs:register_mob("mobs_monster:tree_monster", {
punch_start = 48, punch_start = 48,
punch_end = 62, punch_end = 62,
}, },
-- check surrounding nodes and spawn a specific tree monster
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #tree_types do
tmp = tree_types[n]
if tmp.explode and math.random(2) == 1 then return true end
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
if tmp.explode then
self.attack_type = "explode"
self.explosion_radius = 3
self.explosion_timer = 3
self.damage = 21
self.reach = 3
self.fear_height = 4
self.water_damage = 2
self.lava_damage = 15
self.light_damage = 0
self.makes_footstep_sound = false
self.runaway_from = {"mobs_animal:kitten"}
self.sounds = {
attack = "tnt_ignite",
explode = "tnt_explode",
fuse = "tnt_ignite"
}
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
}) })
if not mobs.custom_spawn_monster then if not mobs.custom_spawn_monster then
mobs:spawn({ mobs:spawn({
name = "mobs_monster:tree_monster", name = "mobs_monster:tree_monster",
nodes = {"default:leaves", "default:jungleleaves", "moretrees:beech_leaves"}, nodes = {"group:leaves"}, --{"default:leaves", "default:jungleleaves"},
max_light = 7, max_light = 7,
chance = 7000, chance = 7000,
min_height = 0, min_height = 0,