Compare commits

56 Commits

Author SHA1 Message Date
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
c8003524d6 Merge remote-tracking branch 'upstream/master' 2021-01-29 17:44:57 +01:00
dbc501da64 lava orb and axe items glow 2021-01-28 14:38:57 +00:00
4a3bf56409 Merge remote-tracking branch 'upstream/master' 2021-01-23 12:56:11 +01:00
2c88a98ca3 update mod.conf info 2021-01-21 10:15:19 +00:00
5297dfbbdf Merge remote-tracking branch 'upstream/master' 2020-09-21 18:06:40 +02:00
4018a5c8e8 Added spawn.lua check for custom mob spawns, example file included 2020-09-21 10:03:08 +01:00
1e72bfd920 Merge remote-tracking branch 'upstream/master' 2020-09-04 21:40:14 +02:00
144c851207 convert mobs_fireball.ogg to mono 2020-09-04 09:14:27 +01:00
057177203a Merge remote-tracking branch 'upstream/master' 2020-08-29 20:31:49 +02:00
84f1ff383a mt5.x translations added/updated (thanks dacmot) 2020-08-29 09:35:58 +01:00
6b69a3e23d Merge remote-tracking branch 'upstream/master' 2020-08-25 20:06:32 +02:00
a42877ef78 added 5.x translations 2020-08-25 10:53:02 +01:00
deea6597da update translation detection 2020-08-25 09:56:43 +01:00
7be2f3bd63 Merge remote-tracking branch 'upstream/master' 2020-08-19 21:24:25 +02:00
fd1807e746 updated locale (thanks IFRFSX) 2020-08-19 13:03:32 +01:00
ca10e7e1f6 Merge remote-tracking branch 'upstream/master' 2020-07-17 22:40:01 +02:00
3c3d65796a since lava flan live in lava, set self.fly_in so they dont slow down when moving around 2020-06-28 14:52:17 +01:00
a39eec8822 use mobs:add_mob() to add obsidian flan, also lava damages ob flan 2020-06-22 21:24:57 +01:00
a6b6795eb4 tweak obsidian flan node breakage 2020-06-21 20:52:52 +01:00
592c4aca50 Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-06-20 15:39:41 +02:00
475e0f5624 use global particle effect function for sand/lava monster 2020-06-20 10:08:15 +01:00
4477466120 tidy on_die function, add sounds 2020-06-19 20:44:52 +01:00
abae5bada4 add obsidian flan 2020-06-19 20:26:21 +01:00
4f135de146 spider has new jump attack 2020-06-19 16:07:55 +01:00
b6591fa9a7 tweak spider climbing feature 2020-05-23 14:56:00 +01:00
55d3d4b547 Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-05-09 14:24:36 +02:00
674afa91e5 nil check for player when using lava pick 2020-05-08 20:40:08 +01:00
2fdfd7f84c deinterlaced lava flan image 2020-04-23 20:05:55 +01:00
ded074939a fix lava flan textures to remove annoying interlace handling errors 2020-04-23 08:51:38 +01:00
ffc136296e add sanity check to spiders 2020-04-11 17:56:51 +01:00
33a314934a spiders now spawn on ethereal's cold dirt 2020-04-07 09:22:37 +01:00
5674b6328e Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-02-29 18:08:15 +01:00
2663922651 chinese local added (thanks IFRFSX) 2020-02-14 11:24:22 +00:00
cd5909697b lava flan glow in dark 2020-01-09 09:42:49 +00:00
3ddd27e515 Merge branch 'master' of yunohost.local:mtcontrib/mobs_monster into nalc-1.2-dev 2019-12-22 13:58:23 +01:00
e6d4b185b3 code tidy ' to " 2019-08-05 09:52:25 +01:00
822450e2c7 add pickaxe group to lava pick 2019-06-03 10:02:26 +01:00
133766d0ab Merge branch 'master' into nalc-1.2 2019-05-10 00:58:32 +02:00
947adeeb79 update license.txt 2019-04-18 14:31:46 +01:00
6cf5b95fc9 lava pick heals lava flan when hit, increased water damage 2019-02-23 10:36:37 +00:00
86e5f4ed09 tweaked tool damage for sand, stone and tree monsters 2019-02-11 09:27:22 +00:00
eeb6a8e138 added mobs:force_capture() example to sand monster 2018-12-20 11:14:52 +00:00
d6420071ab add do_custom function so that spiders can climb walls 2018-11-29 12:15:56 +00:00
53 changed files with 1179 additions and 122 deletions

View File

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

View File

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

View File

@ -16,8 +16,8 @@ mobs:register_mob("mobs_monster:dungeon_master", {
shoot_interval = 2.2,
arrow = "mobs_monster:fireball",
shoot_offset = 1,
hp_min = 22,
hp_max = 45,
hp_min = 42,
hp_max = 75,
armor = 60,
collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7},
visual = "mesh",
@ -65,6 +65,7 @@ mobs:register_mob("mobs_monster:dungeon_master", {
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:dungeon_master",
nodes = {"default:stone", "default:sandstone", "nether:netherrack"},
@ -73,6 +74,7 @@ mobs:spawn({
active_object_count = 1,
max_height = -70,
})
end
mobs:register_egg("mobs_monster:dungeon_master", S("Dungeon Master"), "fire_basic_flame.png", 1, true)

View File

@ -1,34 +1,45 @@
local path = minetest.get_modpath("mobs_monster")
-- Load support for intllib.
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
local S = minetest.get_translator and minetest.get_translator("mobs_monster") or
dofile(path .. "intllib.lua")
-- 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
end
mobs.intllib = S
-- Check for custom mob spawn file
local input = io.open(path .. "spawn.lua", "r")
if input then
mobs.custom_spawn_monster = true
input:close()
input = nil
end
-- Monsters
dofile(path .. "dirt_monster.lua") -- PilzAdam
dofile(path .. "dungeon_master.lua")
dofile(path .. "oerkki.lua")
dofile(path .. "sand_monster.lua")
dofile(path .. "stone_monster.lua")
dofile(path .. "tree_monster.lua")
dofile(path .. "lava_flan.lua") -- Zeg9
dofile(path .. "mese_monster.lua")
dofile(path .. "spider.lua") -- AspireMint
dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa
dofile(path .. "land_guard.lua")
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
dofile(path .. "lucky_block.lua")
print (S("[MOD] Mobs Redo Monsters loaded"))

3
intllib.lua Normal file
View File

@ -0,0 +1,3 @@
-- 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
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

@ -35,9 +35,14 @@ mobs:register_mob("mobs_monster:lava_flan", {
drops = {
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
},
water_damage = 5,
water_damage = 8,
lava_damage = 0,
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,
@ -52,31 +57,40 @@ mobs:register_mob("mobs_monster:lava_flan", {
},
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
if minetest.get_node(pos).name == "air" then
minetest.set_node(pos, {name = "fire:basic_flame"})
end
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
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"},
@ -84,6 +98,7 @@ mobs:spawn({
active_object_count = 1,
max_height = 0,
})
end
mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1)
@ -95,6 +110,7 @@ mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility
minetest.register_craftitem(":mobs:lava_orb", {
description = S("Lava orb"),
inventory_image = "zmobs_lava_orb.png",
light_source = 14,
})
minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
@ -112,6 +128,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)
@ -159,8 +178,10 @@ minetest.register_tool(":mobs:pick_lava", {
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({
@ -180,3 +201,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",
-- war_cry = "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,
}
})
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 = "wielditem",
visual_size = {x = 0.5, y = 0.5},
textures = {"default_obsidian_shard.png"},
velocity = 6,
-- rotate = 180,
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 = minetest.registered_nodes[node]
if def then
node = { name = node }
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 = 12, gain = 1.0}, true)
end
})

View File

@ -19,3 +19,14 @@ 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.
mobs.fireball.png was originally made by Sapier and edited by Benrob:
-- Animals Mod by Sapier
--
-- You may copy, use, modify or do nearly anything except removing this
-- copyright notice.
-- And of course you are NOT allow to pretend you have written it.
--
-- (c) Sapier
-- Contact sapier a t gmx net

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

@ -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

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

@ -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=

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

@ -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

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

@ -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

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

@ -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

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

@ -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ı

View File

@ -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=树怪

View File

@ -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=樹怪

View File

@ -2,34 +2,35 @@
# last update: 2016/June/10
#dirtmonster.lua
Dirt Monster =
Dirt Monster=
#dungeonmaster.lua
Dungeon Master =
Dungeon Master=
#init.lua
[MOD] Mobs Redo 'Monsters' loaded =
[MOD] Mobs Redo 'Monsters' loaded=
#lava_flan.lua
Lava Flan =
Lava orb =
Lava Pickaxe =
Lava Flan=
Lava orb=
Lava Pickaxe=
Obsidian Flan=
#mese_monster.lua
Mese Monster =
Mese Monster=
#oerkki.lua
Oerkki =
Oerkki=
#sandmonster.lua
Sand Monster =
Sand Monster=
#spider.lua
Spider =
Cobweb =
Spider=
Cobweb=
#stonemonster.lua
Stone Monster =
Stone Monster=
#treemonster.lua
Tree Monster =
Tree Monster=

36
locale/zh_CN.txt Normal file
View File

@ -0,0 +1,36 @@
# 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 = [模组] Mobs Redo 'Monsters' 已加载
#lava_flan.lua
Lava Flan = 岩浆饼
Lava orb = 岩浆球
Lava Pickaxe = 岩浆镐
Obsidian Flan = 黑耀石饼
#mese_monster.lua
Mese Monster = 黄石怪
#oerkki.lua
Oerkki = 奥尔基
#sandmonster.lua
Sand Monster = 沙怪
#spider.lua
Spider = 蜘蛛
Cobweb = 蜘蛛网
#stonemonster.lua
Stone Monster = 石头怪
#treemonster.lua
Tree Monster = 树怪

36
locale/zh_TW.txt Normal file
View File

@ -0,0 +1,36 @@
# 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 = [模組] Mobs Redo 'Monsters' 已加載
#lava_flan.lua
Lava Flan = 岩漿餅
Lava orb = 岩漿球
Lava Pickaxe = 岩漿鎬
Obsidian Flan = 黑耀石餅
#mese_monster.lua
Mese Monster = 黃石怪
#oerkki.lua
Oerkki = 奧爾基
#sandmonster.lua
Sand Monster = 沙怪
#spider.lua
Spider = 蜘蛛
Cobweb = 蜘蛛網
#stonemonster.lua
Stone Monster = 石頭怪
#treemonster.lua
Tree Monster = 樹怪

View File

@ -58,6 +58,7 @@ mobs:register_mob("mobs_monster:mese_monster", {
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:mese_monster",
nodes = {"default:stone", "default:sandstone"},
@ -66,6 +67,7 @@ mobs:spawn({
active_object_count = 1,
max_height = -20,
})
end
mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_block.png", 1)

View File

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

View File

@ -20,6 +20,7 @@ mobs:register_mob("mobs_monster:oerkki", {
textures = {
{"mobs_oerkki.png"},
{"mobs_oerkki2.png"},
{"mobs_oerkki3.png"},
},
makes_footstep_sound = false,
sounds = {
@ -61,6 +62,7 @@ mobs:register_mob("mobs_monster:oerkki", {
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:oerkki",
nodes = {"default:stone"},
@ -68,6 +70,7 @@ mobs:spawn({
chance = 7000,
max_height = -10,
})
end
mobs:register_egg("mobs_monster:oerkki", S("Oerkki"), "default_obsidian.png", 1)

View File

@ -11,7 +11,7 @@ Dungeon Master
Lava Flan
- 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.
- 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.
Mese Monster
@ -27,7 +27,7 @@ Sand Monster
Spiders
- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed.
- Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed.
Stone Monster
@ -35,6 +35,10 @@ Stone Monster
Tree Monster
- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three.
- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom.
Land Guard
- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain.
Lucky Blocks: 11

View File

@ -3,7 +3,8 @@ local S = mobs.intllib
-- custom particle effects
local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow)
local effect = function(
pos, amount, texture, min_size, max_size, radius, gravity, glow)
radius = radius or 2
min_size = min_size or 0.5
@ -38,6 +39,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
attack_type = "dogfight",
pathfinding = true,
--specific_attack = {"player", "mobs_npc:npc"},
--ignore_invisibility = true,
reach = 2,
damage = 1,
hp_min = 4,
@ -48,6 +50,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
mesh = "mobs_sand_monster.b3d",
textures = {
{"mobs_sand_monster.png"},
{"mobs_sand_monster2.png"},
},
blood_texture = "default_desert_sand.png",
makes_footstep_sound = true,
@ -79,6 +82,14 @@ mobs:register_mob("mobs_monster:sand_monster", {
punch_start = 74,
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)
local pos = self.object:get_pos()
@ -87,13 +98,28 @@ 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"},
@ -101,6 +127,7 @@ mobs:spawn({
active_object_count = 2,
min_height = 0,
})
end
mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"), "default_desert_sand.png", 1)

Binary file not shown.

173
spawn_example.lua Normal file
View File

@ -0,0 +1,173 @@
--[[ Spawn Template, defaults to values shown if line not provided
mobs:spawn({
name = "",
- Name of mob, must be provided e.g. "mymod:my_mob"
nodes = {"group:soil, "group:stone"},
- Nodes to spawn on top of.
neighbors = {"air"},
- Nodes to spawn beside.
min_light = 0,
- Minimum light level.
max_light = 15,
- Maximum light level, 15 is sunlight only.
interval = 30,
- Spawn interval in seconds.
chance = 5000,
- Spawn chance, 1 in every 5000 nodes.
active_object_count = 1,
- Active mobs of this type in area.
min_height = -31000,
- Minimum height level.
max_height = 31000,
- Maximum height level.
day_toggle = nil,
- Daytime toggle, true to spawn during day, false for night, nil for both
on_spawn = nil,
- On spawn function to run when mob spawns in world
on_map_load = nil,
- On map load, when true mob only spawns in newly generated map areas
})
]]--
-- Dirt Monster
mobs:spawn({
name = "mobs_monster:dirt_monster",
nodes = {"default:dirt_with_grass"},
min_light = 0,
max_light = 7,
chance = 6000,
active_object_count = 2,
min_height = 0,
day_toggle = false,
})
-- Dungeon Master
mobs:spawn({
name = "mobs_monster:dungeon_master",
nodes = {"default:stone"},
max_light = 5,
chance = 9000,
active_object_count = 1,
max_height = -70,
})
-- Lava Flan
mobs:spawn({
name = "mobs_monster:lava_flan",
nodes = {"default:lava_source"},
chance = 1500,
active_object_count = 1,
max_height = 0,
})
-- Mese Monster
mobs:spawn({
name = "mobs_monster:mese_monster",
nodes = {"default:stone"},
max_light = 7,
chance = 5000,
active_object_count = 1,
max_height = -20,
})
-- Oerkki
mobs:spawn({
name = "mobs_monster:oerkki",
nodes = {"default:stone"},
max_light = 7,
chance = 7000,
max_height = -10,
})
-- Sand Monster
mobs:spawn({
name = "mobs_monster:sand_monster",
nodes = {"default:desert_sand"},
chance = 7000,
active_object_count = 2,
min_height = 0,
})
-- Spider (above ground)
mobs:spawn({
name = "mobs_monster:spider",
nodes = {
"default:dirt_with_rainforest_litter", "default:snowblock",
"default:snow", "ethereal:crystal_dirt", "ethereal:cold_dirt"
},
min_light = 0,
max_light = 8,
chance = 7000,
active_object_count = 1,
min_height = 25,
max_height = 31000,
})
-- Spider (below ground)
mobs:spawn({
name = "mobs_monster:spider",
nodes = {"default:stone_with_mese", "default:mese", "default:stone"},
min_light = 0,
max_light = 7,
chance = 7000,
active_object_count = 1,
min_height = -31000,
max_height = -40,
})
-- Stone Monster
mobs:spawn({
name = "mobs_monster:stone_monster",
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
max_light = 7,
chance = 7000,
max_height = 0,
})
-- Tree Monster
mobs:spawn({
name = "mobs_monster:tree_monster",
nodes = {"default:leaves", "default:jungleleaves"},
max_light = 7,
chance = 7000,
min_height = 0,
day_toggle = false,
})

View File

@ -1,6 +1,56 @@
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)
@ -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,
@ -55,55 +105,132 @@ mobs:register_mob("mobs_monster:spider", {
punch_start = 25,
punch_end = 45,
},
-- what kind of spider are we spawning?
-- check surrounding nodes and spawn a specific spider
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
-- snowy spider
if minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
self.base_texture = {"mobs_spider_snowy.png"}
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = true
-- tarantula
elseif minetest.find_node_near(pos, 1,
{"default:dirt_with_rainforest_litter", "default:jungletree"}) then
self.base_texture = {"mobs_spider_orange.png"}
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = true
-- grey spider
elseif minetest.find_node_near(pos, 1,
{"default:stone", "default:gravel"}) then
self.base_texture = {"mobs_spider_grey.png"}
self.object:set_properties({textures = self.base_texture})
-- mese spider
elseif minetest.find_node_near(pos, 1,
{"default:mese", "default:stone_with_mese"}) then
self.base_texture = {"mobs_spider_mese.png"}
self.object:set_properties({textures = self.base_texture})
elseif minetest.find_node_near(pos, 1,
{"ethereal:crystal_dirt", "ethereal:crystal_spike"}) then
self.base_texture = {"mobs_spider_crystal.png"}
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = true
self.drops = {
{name = "farming:string", chance = 1, min = 0, max = 2},
{name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2},
}
for n = 1, #spider_types do
tmp = spider_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
self.docile_by_day = tmp.docile
if tmp.drops then
self.drops = tmp.drops
end
if tmp.shoot then
self.attack_type = "dogshoot"
self.arrow = "mobs_monster:cobweb"
self.dogshoot_switch = 1
self.dogshoot_count_max = 60
self.dogshoot_count2_max = 20
self.shoot_interval = 2
self.shoot_offset = 2
end
if tmp.small then
self.object:set_properties({
collisionbox = {-0.2, -0.2, -0.2, 0.2, 0, 0.2},
visual_size = {x = 0.25, y = 0.25}
})
end
return true
end
end
return true -- run only once, false/nil runs every activation
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
pos.y = pos.y + self.collisionbox[2] - 0.2
local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5)
local dir_z = math.cos(yaw) * (self.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
mobs:set_animation(self, "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
})
if not mobs.custom_spawn_monster then
-- above ground spawn
mobs:spawn({
name = "mobs_monster:spider",
nodes = {
"default:dirt_with_rainforest_litter", "default:snowblock",
"default:snow", "ethereal:crystal_dirt"
"default:snow", "ethereal:crystal_dirt", "ethereal:cold_dirt"
},
min_light = 0,
max_light = 8,
@ -124,6 +251,7 @@ mobs:spawn({
min_height = -31000,
max_height = -40,
})
end
mobs:register_egg("mobs_monster:spider", S("Spider"), "mobs_cobweb.png", 1)
@ -151,7 +279,7 @@ minetest.register_node(":mobs:cobweb", {
walkable = false,
groups = {snappy = 1, disable_jump = 1},
drop = "farming:string",
sounds = default.node_sound_leaves_defaults(),
sounds = default.node_sound_leaves_defaults()
})
minetest.register_craft({
@ -163,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")

View File

@ -1,6 +1,18 @@
local S = mobs.intllib
local stone_types = {
{ nodes = {"default:desert_stone"},
skins = {"mobs_stone_monster3.png"},
drops = {
{name = "default:desert_cobble", chance = 1, min = 0, max = 2},
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "default:gold_lump", chance = 5, min = 0, max = 2}
}
}
}
-- Stone Monster by PilzAdam
@ -35,7 +47,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,
@ -53,9 +65,44 @@ mobs:register_mob("mobs_monster:stone_monster", {
punch_start = 40,
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
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:stone_monster",
nodes = {"default:stone", "default:desert_stone", "default:sandstone"},
@ -63,6 +110,7 @@ mobs:spawn({
chance = 7000,
max_height = 0,
})
end
mobs:register_egg("mobs_monster:stone_monster", S("Stone Monster"), "default_stone.png", 1)

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: 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

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: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 B

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

View File

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