Make undead mobs burn in sunlight instead of dealing damage directly

Elias Fleckenstein 2021-01-02 12:43:50 +01:00
parent 8ba8f62527
commit 081ae7fbff
5 changed files with 12 additions and 4 deletions

@ -1053,8 +1053,11 @@ local do_env_damage = function(self)
if mod_worlds then if mod_worlds then
_, dim = mcl_worlds.y_to_layer(pos.y) _, dim = mcl_worlds.y_to_layer(pos.y)
end end
if self.sunlight_damage ~= 0 and (minetest.get_node_light(pos) or 0) >= minetest.LIGHT_MAX and dim == "overworld" then if (self.sunlight_damage ~= 0 or self.ignited_by_sunlight) and (minetest.get_node_light(pos) or 0) >= minetest.LIGHT_MAX and dim == "overworld" then
if deal_light_damage(self, pos, self.sunlight_damage) then if self.ignited_by_sunlight then
mcl_burning.set_on_fire(self.object, 10, self.sunlight_damage or 1)
else
deal_light_damage(self, pos, self.sunlight_damage)
return true return true
end end
end end
@ -3813,6 +3816,7 @@ minetest.register_entity(name, {
instant_death = def.instant_death or false, instant_death = def.instant_death or false,
fire_resistant = def.fire_resistant or false, fire_resistant = def.fire_resistant or false,
fire_damage_resistant = def.fire_damage_resistant or false, fire_damage_resistant = def.fire_damage_resistant or false,
ignited_by_sunlight = def.ignited_by_sunlight or false,
-- End of MCL2 extensions -- End of MCL2 extensions
on_spawn = def.on_spawn, on_spawn = def.on_spawn,

@ -251,6 +251,7 @@ functions needed for the mob to work properly which contains the following:
'xp_max' the maximum XP it drops on death (default: 0) 'xp_max' the maximum XP it drops on death (default: 0)
'fire_resistant' If true, the mob can't burn 'fire_resistant' If true, the mob can't burn
'fire_damage_resistant' If true the mob will not take damage when burning 'fire_damage_resistant' If true the mob will not take damage when burning
'ignited_by_sunlight' If true the mod will burn at daytime. (Takes sunlight_damage per second)

@ -81,7 +81,7 @@ local skeleton = {
die_speed = 15, die_speed = 15,
die_loop = false, die_loop = false,
}, },
sunlight_damage = 1, ignited_by_sunlight = true,
view_range = 16, view_range = 16,
fear_height = 4, fear_height = 4,
attack_type = "dogshoot", attack_type = "dogshoot",

@ -82,7 +82,8 @@ mobs:register_mob("mobs_mc:villager_zombie", {
run_start = 0, run_start = 0,
run_end = 20, run_end = 20,
}, },
sunlight_damage = 1, sunlight_damage = 2,
ignited_by_sunlight = true,
view_range = 16, view_range = 16,
fear_height = 4, fear_height = 4,
harmed_by_heal = true, harmed_by_heal = true,

@ -85,6 +85,7 @@ local zombie = {
walk_start = 0, walk_end = 40, walk_start = 0, walk_end = 40,
run_start = 0, run_end = 40, run_start = 0, run_end = 40,
}, },
ignited_by_sunlight = true,
sunlight_damage = 2, sunlight_damage = 2,
view_range = 16, view_range = 16,
attack_type = "dogfight", attack_type = "dogfight",
@ -111,6 +112,7 @@ mobs:register_mob("mobs_mc:baby_zombie", baby_zombie)
-- Desert variant of the zombie -- Desert variant of the zombie
local husk = table.copy(zombie) local husk = table.copy(zombie)
husk.textures = {{"mobs_mc_husk.png"}} husk.textures = {{"mobs_mc_husk.png"}}
husk.ignited_by_sunlight = false
husk.sunlight_damage = 0 husk.sunlight_damage = 0
husk.drops = drops_common husk.drops = drops_common
-- TODO: Husks avoid water -- TODO: Husks avoid water