Compare commits

11 Commits

Author SHA1 Message Date
592c4aca50 Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-06-20 15:39:41 +02:00
tenplus1
4477466120 tidy on_die function, add sounds 2020-06-19 20:44:52 +01:00
tenplus1
abae5bada4 add obsidian flan 2020-06-19 20:26:21 +01:00
tenplus1
4f135de146 spider has new jump attack 2020-06-19 16:07:55 +01:00
tenplus1
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
TenPlus1
674afa91e5 nil check for player when using lava pick 2020-05-08 20:40:08 +01:00
TenPlus1
2fdfd7f84c deinterlaced lava flan image 2020-04-23 20:05:55 +01:00
TenPlus1
ded074939a fix lava flan textures to remove annoying interlace handling errors 2020-04-23 08:51:38 +01:00
tenplus1
ffc136296e add sanity check to spiders 2020-04-11 17:56:51 +01:00
TenPlus1
33a314934a spiders now spawn on ethereal's cold dirt 2020-04-07 09:22:37 +01:00
8 changed files with 216 additions and 25 deletions

View File

@@ -55,12 +55,42 @@ mobs:register_mob("mobs_monster:lava_flan", {
}, },
on_die = function(self, pos) on_die = function(self, pos)
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
minetest.add_particlespawner({
amount = 40,
time = 0.25,
minpos = pos,
maxpos = pos,
minvel = {x = -2, y = 0, z = -2},
maxvel = {x = 2, y = 2, z = 2},
minacc = {x = 0, y = 0, z = 0},
maxacc = {x = 0, y = 10, z = 0},
minexptime = 0.1,
maxexptime = 1,
minsize = 3.0,
maxsize = 5.0,
texture = "tnt_smoke.png",
})
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
minetest.add_entity(pos, "mobs_monster:obsidian_flan")
end
else
if minetest.get_node(pos).name == "air" then if minetest.get_node(pos).name == "air" then
minetest.set_node(pos, {name = "fire:basic_flame"}) minetest.set_node(pos, {name = "fire:basic_flame"})
end end
self.object:remove()
minetest.add_particlespawner({ minetest.add_particlespawner({
amount = 20, amount = 20,
time = 0.25, time = 0.25,
@@ -76,6 +106,9 @@ mobs:register_mob("mobs_monster:lava_flan", {
maxsize = 2.0, maxsize = 2.0,
texture = "fire_basic_flame.png", texture = "fire_basic_flame.png",
}) })
self.object:remove()
end
end, end,
glow = 10, glow = 10,
}) })
@@ -116,6 +149,9 @@ local old_handle_node_drops = minetest.handle_node_drops
function minetest.handle_node_drops(pos, drops, digger) function minetest.handle_node_drops(pos, drops, digger)
-- does player exist?
if not digger then return end
-- are we holding Lava Pick? -- are we holding Lava Pick?
if digger:get_wielded_item():get_name() ~= ("mobs:pick_lava") then if digger:get_wielded_item():get_name() ~= ("mobs:pick_lava") then
return old_handle_node_drops(pos, drops, digger) return old_handle_node_drops(pos, drops, digger)
@@ -185,3 +221,133 @@ minetest.override_item("mobs:pick_lava", {
description = toolranks.create_description("Lava Pickaxe", 0, 1), description = toolranks.create_description("Lava Pickaxe", 0, 1),
after_use = toolranks.new_afteruse}) after_use = toolranks.new_afteruse})
end 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},
},
water_damage = 0,
lava_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
if def.groups and def.groups.level == 2 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

@@ -11,7 +11,7 @@ Dungeon Master
Lava Flan 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 Mese Monster

View File

@@ -3,7 +3,8 @@ local S = mobs.intllib
-- custom particle effects -- 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 radius = radius or 2
min_size = min_size or 0.5 min_size = min_size or 0.5

View File

@@ -5,6 +5,9 @@ local get_velocity = function(self)
local v = self.object:get_velocity() 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 return (v.x * v.x + v.z * v.z) ^ 0.5
end end
@@ -101,6 +104,7 @@ mobs:register_mob("mobs_monster:spider", {
return true -- run only once, false/nil runs every activation return true -- run only once, false/nil runs every activation
end, end,
-- custom function to make spiders climb vertical facings -- custom function to make spiders climb vertical facings
do_custom = function(self, dtime) do_custom = function(self, dtime)
@@ -112,14 +116,17 @@ mobs:register_mob("mobs_monster:spider", {
self.spider_timer = 0 self.spider_timer = 0
-- need to be stopped to go onwards -- need to be stopped to go onwards
if get_velocity(self) > 0.2 then if get_velocity(self) > 0.5 then
self.disable_falling = false self.disable_falling = nil
return return
end end
local pos = self.object:get_pos() local pos = self.object:get_pos()
local yaw = self.object:get_yaw() local yaw = self.object:get_yaw()
-- sanity check
if not yaw then return end
pos.y = pos.y + self.collisionbox[2] - 0.2 pos.y = pos.y + self.collisionbox[2] - 0.2
local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5) local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5)
@@ -148,9 +155,26 @@ mobs:register_mob("mobs_monster:spider", {
self.disable_falling = true self.disable_falling = true
-- move up facing -- move up facing
v.x = 0 ; v.y = 0
v.y = self.jump_height v.y = self.jump_height
mobs:set_animation(self, "jump") mobs:set_animation(self, "jump")
self.object:set_velocity(v) 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 end
}) })
@@ -160,7 +184,7 @@ mobs:spawn({
name = "mobs_monster:spider", name = "mobs_monster:spider",
nodes = { nodes = {
"default:dirt_with_rainforest_litter", "default:snowblock", "default:dirt_with_rainforest_litter", "default:snowblock",
"default:snow", "ethereal:crystal_dirt" "default:snow", "ethereal:crystal_dirt", "ethereal:cold_dirt"
}, },
min_light = 0, min_light = 0,
max_light = 8, max_light = 8,

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

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