mirror of
https://git.minetest.land/Mineclonia/Mineclonia.git
synced 2024-11-16 19:55:10 +00:00
Make dmg particles proportional to dmg
This commit is contained in:
parent
5bd19c03f6
commit
d9424ad82e
19 changed files with 45 additions and 44 deletions
|
@ -375,20 +375,28 @@ end
|
|||
|
||||
|
||||
-- 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, go_down)
|
||||
|
||||
radius = radius or 2
|
||||
min_size = min_size or 0.5
|
||||
max_size = max_size or 1
|
||||
gravity = gravity or -10
|
||||
glow = glow or 0
|
||||
go_down = go_down or false
|
||||
|
||||
local ym
|
||||
if go_down then
|
||||
ym = 0
|
||||
else
|
||||
ym = -radius
|
||||
end
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = amount,
|
||||
time = 0.25,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x = -radius, y = -radius, z = -radius},
|
||||
minvel = {x = -radius, y = ym, z = -radius},
|
||||
maxvel = {x = radius, y = radius, z = radius},
|
||||
minacc = {x = 0, y = gravity, z = 0},
|
||||
maxacc = {x = 0, y = gravity, z = 0},
|
||||
|
@ -401,6 +409,35 @@ local effect = function(pos, amount, texture, min_size, max_size, radius, gravit
|
|||
})
|
||||
end
|
||||
|
||||
local damage_effect = function(self, damage)
|
||||
-- damage particles
|
||||
if (not disable_blood) and damage > 0 then
|
||||
|
||||
local amount_large = math.floor(damage / 2)
|
||||
local amount_small = damage % 2
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + (self.collisionbox[5] - self.collisionbox[2]) * .5
|
||||
|
||||
local texture
|
||||
-- do we have a single blood texture or multiple?
|
||||
if type(self.blood_texture) == "table" then
|
||||
texture = self.blood_texture[random(1, #self.blood_texture)]
|
||||
else
|
||||
texture = self.blood_texture
|
||||
end
|
||||
-- full heart damage (one particle for each 2 HP damage)
|
||||
if amount_large > 0 then
|
||||
effect(pos, amount_large, texture, 2, 2, 1.75, 0, nil, true)
|
||||
end
|
||||
-- half heart damage (one additional particle if damage is an odd number)
|
||||
if amount_small > 0 then
|
||||
-- TODO: Use "half heart"
|
||||
effect(pos, amount_small, texture, 1, 1, 1.75, 0, nil, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local update_tag = function(self)
|
||||
self.object:set_properties({
|
||||
|
@ -781,13 +818,14 @@ local do_env_damage = function(self)
|
|||
|
||||
effect(pos, 2, "bubble.png", nil, nil, 1, nil)
|
||||
if self.breath <= 0 then
|
||||
-- TODO: Damage particle
|
||||
effect(pos, 5, "bubble.png", nil, nil, 1, nil)
|
||||
local dmg
|
||||
if nodef.drowning > 0 then
|
||||
self.health = self.health - nodef.drowning
|
||||
dmg = nodef.drowning
|
||||
else
|
||||
self.health = self.health - 4
|
||||
dmg = 4
|
||||
end
|
||||
damage_effect(self, dmg)
|
||||
self.health = self.health - dmg
|
||||
end
|
||||
if check_for_death(self, "drowning", {type = "environment",
|
||||
pos = pos, node = self.standing_in}) then return end
|
||||
|
@ -2540,24 +2578,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
|
|||
})
|
||||
end
|
||||
|
||||
-- blood_particles
|
||||
if self.blood_amount > 0
|
||||
and not disable_blood then
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + (-self.collisionbox[2] + self.collisionbox[5]) * .5
|
||||
|
||||
-- do we have a single blood texture or multiple?
|
||||
if type(self.blood_texture) == "table" then
|
||||
|
||||
local blood = self.blood_texture[random(1, #self.blood_texture)]
|
||||
|
||||
effect(pos, self.blood_amount, blood, nil, nil, 1, nil)
|
||||
else
|
||||
effect(pos, self.blood_amount, self.blood_texture, nil, nil, 1, nil)
|
||||
end
|
||||
end
|
||||
damage_effect(self, damage)
|
||||
|
||||
-- do damage
|
||||
self.health = self.health - floor(damage)
|
||||
|
@ -3161,7 +3182,6 @@ minetest.register_entity(name, {
|
|||
group_attack = def.group_attack or false,
|
||||
passive = def.passive or false,
|
||||
knock_back = def.knock_back ~= false,
|
||||
blood_amount = def.blood_amount or 5,
|
||||
blood_texture = def.blood_texture or "mobs_blood.png",
|
||||
shoot_offset = def.shoot_offset or 0,
|
||||
floats = def.floats or 1, -- floats in water by default
|
||||
|
|
|
@ -123,8 +123,6 @@ functions needed for the mob to work properly which contains the following:
|
|||
e.g. {"player", "mobs_animal:chicken"}.
|
||||
'runaway_from' contains a table with mob names to run away from, add
|
||||
"player" to list to runaway from player also.
|
||||
'blood_amount' contains the number of blood droplets to appear when
|
||||
mob is hit.
|
||||
'blood_texture' has the texture name to use for droplets e.g.
|
||||
"mobs_blood.png", or table {"blood1.png", "blood2.png"}
|
||||
'pathfinding' set to 1 for mobs to use pathfinder feature to locate
|
||||
|
|
|
@ -67,7 +67,6 @@ mobs:register_mob("mobs_mc:blaze", {
|
|||
fly = true,
|
||||
jump_chance = 98,
|
||||
fear_height = 0,
|
||||
blood_amount = 0,
|
||||
glow = 14,
|
||||
})
|
||||
|
||||
|
|
|
@ -115,7 +115,6 @@ mobs:register_mob("mobs_mc:creeper", {
|
|||
floats = 1,
|
||||
fear_height = 4,
|
||||
view_range = 16,
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
|
||||
|
|
|
@ -60,7 +60,6 @@ mobs:register_mob("mobs_mc:enderdragon", {
|
|||
walk_start = 0, walk_end = 20,
|
||||
run_start = 0, run_end = 20,
|
||||
},
|
||||
blood_amount = 0,
|
||||
|
||||
ignores_nametag = true,
|
||||
})
|
||||
|
|
|
@ -325,7 +325,6 @@ mobs:register_mob("mobs_mc:enderman", {
|
|||
view_range = 4,
|
||||
fear_height = 4,
|
||||
attack_type = "dogfight",
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@ mobs:register_mob("mobs_mc:endermite", {
|
|||
view_range = 16,
|
||||
damage = 2,
|
||||
reach = 1,
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
mobs:register_egg("mobs_mc:endermite", S("Endermite"), "mobs_mc_spawn_icon_endermite.png", 0)
|
||||
|
|
|
@ -71,7 +71,6 @@ mobs:register_mob("mobs_mc:ghast", {
|
|||
fly = true,
|
||||
fly_in = {"air"},
|
||||
jump_chance = 98,
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
|
||||
|
|
|
@ -77,7 +77,6 @@ mobs:register_mob("mobs_mc:guardian", {
|
|||
stepheight = 0.1,
|
||||
jump = false,
|
||||
view_range = 16,
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
mobs:spawn_specific("mobs_mc:guardian", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 25000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water - 10)
|
||||
|
|
|
@ -82,7 +82,6 @@ mobs:register_mob("mobs_mc:guardian_elder", {
|
|||
stepheight = 0.1,
|
||||
jump = false,
|
||||
view_range = 16,
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
mobs:spawn_specific("mobs_mc:guardian_elder", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-18)
|
||||
|
|
|
@ -336,7 +336,6 @@ skeleton_horse.sounds = {
|
|||
damage = "mobs_mc_skeleton_hurt",
|
||||
distance = 16,
|
||||
}
|
||||
skeleton_horse.blood_amount = 0
|
||||
mobs:register_mob("mobs_mc:skeleton_horse", skeleton_horse)
|
||||
|
||||
-- Zombie horse
|
||||
|
|
|
@ -58,7 +58,6 @@ mobs:register_mob("mobs_mc:iron_golem", {
|
|||
punch_start = 40, punch_end = 50,
|
||||
},
|
||||
jump = true,
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
|
||||
|
|
|
@ -44,7 +44,6 @@ mobs:register_mob("mobs_mc:shulker", {
|
|||
run_start = 0, run_end = 45,
|
||||
punch_start = 80, punch_end = 100,
|
||||
},
|
||||
blood_amount = 0,
|
||||
view_range = 16,
|
||||
fear_height = 4,
|
||||
})
|
||||
|
|
|
@ -42,7 +42,6 @@ mobs:register_mob("mobs_mc:silverfish", {
|
|||
attack_type = "dogfight",
|
||||
damage = 1,
|
||||
reach = 1,
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
mobs:register_egg("mobs_mc:silverfish", S("Silverfish"), "mobs_mc_spawn_icon_silverfish.png", 0)
|
||||
|
|
|
@ -83,7 +83,6 @@ local skeleton = {
|
|||
shoot_offset = 1,
|
||||
dogshoot_switch = 1,
|
||||
dogshoot_count_max =1.8,
|
||||
blood_amount = 0,
|
||||
}
|
||||
|
||||
mobs:register_mob("mobs_mc:skeleton", skeleton)
|
||||
|
|
|
@ -81,7 +81,6 @@ mobs:register_mob("mobs_mc:witherskeleton", {
|
|||
attack_type = "dogfight",
|
||||
dogshoot_switch = 1,
|
||||
dogshoot_count_max =0.5,
|
||||
blood_amount = 0,
|
||||
fear_height = 4,
|
||||
})
|
||||
|
||||
|
|
|
@ -69,7 +69,6 @@ mobs:register_mob("mobs_mc:snowman", {
|
|||
die_speed = 25,
|
||||
die_loop = false,
|
||||
},
|
||||
blood_amount = 0,
|
||||
do_custom = function(self, dtime)
|
||||
if not mobs_griefing then
|
||||
return
|
||||
|
|
|
@ -58,7 +58,6 @@ local spider = {
|
|||
run_start = 0,
|
||||
run_end = 20,
|
||||
},
|
||||
blood_amount = 0,
|
||||
}
|
||||
mobs:register_mob("mobs_mc:spider", spider)
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ mobs:register_mob("mobs_mc:wither", {
|
|||
walk_start = 0, walk_end = 20,
|
||||
run_start = 0, run_end = 20,
|
||||
},
|
||||
blood_amount = 0,
|
||||
})
|
||||
|
||||
local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
|
||||
|
|
Loading…
Reference in a new issue