mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-22 13:52:31 +01:00
Fix radiation damage
This commit is contained in:
parent
584cd82b58
commit
097d033585
@ -573,23 +573,24 @@ local abdomen_offset = vector.new(0, 1, 0)
|
|||||||
local abdomen_offset_length = vector.length(abdomen_offset)
|
local abdomen_offset_length = vector.length(abdomen_offset)
|
||||||
local cache_scaled_shielding = {}
|
local cache_scaled_shielding = {}
|
||||||
|
|
||||||
local function dmg_player(pos, o)
|
local function dmg_player(pos, o, strength)
|
||||||
local pl_pos = vector.add(o:getpos(), abdomen_offset)
|
local pl_pos = vector.add(o:getpos(), abdomen_offset)
|
||||||
local shielding = 0
|
local shielding = 0
|
||||||
|
local dist = vector.distance(pos, pl_pos)
|
||||||
for ray_pos in technic.trace_node_ray(pos,
|
for ray_pos in technic.trace_node_ray(pos,
|
||||||
vector.direction(pos, pl_pos),
|
vector.direction(pos, pl_pos), dist) do
|
||||||
vector.distance(pos, pl_pos)) do
|
|
||||||
if not vector.equals(ray_pos, pos) then
|
if not vector.equals(ray_pos, pos) then
|
||||||
local shield_name = minetest.get_node(ray_pos).name
|
local shield_name = minetest.get_node(ray_pos).name
|
||||||
local shield_val = cache_scaled_shielding[sname]
|
local shield_val = cache_scaled_shielding[sname]
|
||||||
if not shield_val then
|
if not shield_val then
|
||||||
shield_val = math.sqrt(node_radiation_resistance(shield_name)) * -0.025
|
shield_val = math.sqrt(node_radiation_resistance(shield_name)) * 0.025
|
||||||
cache_scaled_shielding[shield_name] = shield_val
|
cache_scaled_shielding[shield_name] = shield_val
|
||||||
end
|
end
|
||||||
shielding = shielding + sval
|
shielding = shielding + shield_val
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local dmg = (0.25e-6 * strength * strength * math.exp(shielding)) / math.max(0.75, dist_sq)
|
local dmg = (0.25e-6 * strength * strength) /
|
||||||
|
(math.max(0.75, dist * dist) * math.exp(shielding))
|
||||||
if dmg >= 0.25 then
|
if dmg >= 0.25 then
|
||||||
local dmg_int = math.floor(dmg)
|
local dmg_int = math.floor(dmg)
|
||||||
-- The closer you are to getting one more damage point,
|
-- The closer you are to getting one more damage point,
|
||||||
@ -608,7 +609,7 @@ local function dmg_abm(pos, node)
|
|||||||
for _, o in pairs(minetest.get_objects_inside_radius(pos,
|
for _, o in pairs(minetest.get_objects_inside_radius(pos,
|
||||||
strength * 0.001 + abdomen_offset_length)) do
|
strength * 0.001 + abdomen_offset_length)) do
|
||||||
if o:is_player() then
|
if o:is_player() then
|
||||||
dmg_player(pos, o)
|
dmg_player(pos, o, strength)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user