Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New hotfixes for balance of balrog arena after the new update (no squash) #1889

Merged
merged 4 commits into from
Jan 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions mods/_various/mobs/api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1861,6 +1861,11 @@ end

-- deal damage and effects when mob punched
function mobs:mob_punch(self, hitter, tflp, tool_capabilities, dir)
-- TEMPORARY FIX (remove when refactoring)
if not hitter then
return
end

-- mob health check
if self.health <= 0 then
-- kill mob
Expand Down
37 changes: 35 additions & 2 deletions mods/lord/Core/projectiles/src/projectiles/api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,40 @@ local flame_node = function(pos)
end
end

local flame_area = function(p1, p2)
-- `explosive_object` is temporary workaround for mobs to be affected by the explosion
local explode_objects = function(pos, radius, explosive_object, damage_groups)
for obj in core.objects_inside_radius(pos, radius) do
if obj == explosive_object then
goto continue
end
local obj_pos = obj:get_pos()
local distance_vector = vector.subtract(obj_pos, pos)
local distance_length = vector.length(distance_vector)
local dir_vector = vector.normalize(distance_vector)
local explosion_power

if distance_length == 0 then
explosion_power = radius
else
explosion_power = -math.log10((distance_length/radius)^2)
if explosion_power > radius then
explosion_power = radius
end
end
local dealt_damage = table.mul_values(table.div_values(damage_groups, {}, radius), {}, explosion_power)
obj:punch(explosive_object, 1.4, {
full_punch_interval = 1.4,
damage_groups = dealt_damage
}, vector.multiply(dir_vector, explosion_power))
::continue::
end
end

local explode_area = function(pos, burn_radius, explosion_radius, explosive_object, damage_groups)
local rad_vec = vector.new(burn_radius, burn_radius, burn_radius)
local p1 = vector.subtract(pos, rad_vec)
local p2 = vector.add(pos, rad_vec)
explode_objects(pos, explosion_radius, explosive_object, damage_groups)
for y = p1.y, p2.y do
for z = p1.z, p2.z do
minetest.punch_node({ x = p1.x - 1, y = y, z = z })
Expand Down Expand Up @@ -93,7 +126,7 @@ end


return {
flame_area = flame_area,
explode_area = explode_area,
register_projectile = register_projectile,
get_projectiles = function() return registered_projectiles end,
}
6 changes: 4 additions & 2 deletions mods/lord/Core/projectiles/src/projectiles/entity.lua
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,11 @@ local register_projectile_entity = function(name, entity_reg)
flight_processing(self, environment, self._rotation_formula)
end

local stack = self._projectile_stack
local is_in_creative = minetest.registered_items[stack:get_name()].groups.not_in_creative_inventory

if update_life_timer(self, dtime) then
minetest.add_item(pos, self._projectile_stack)
if update_life_timer(self, dtime) and not is_in_creative then
minetest.add_item(pos, stack)
end
end,
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
Expand Down
5 changes: 3 additions & 2 deletions mods/lord/Entities/lottmobs/src/racial/others/balrog.lua
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ mobs:register_mob("lottmobs:balrog", {
},
makes_footstep_sound = true,
view_range = 50,
armor = 100,
armor = { fleshy = 80, fire = 0, soul = 200 },
walk_velocity = 1,
run_velocity = 3,
damage = 30,
damage = 15,
damage_type = "fire",
drops = {
{ name = "lottores:mithril_ingot", chance = 5, min = 1, max = 5, }, -- temporary reduced x 10
{ name = "lottores:mithrilsword", chance = 5, min = 1, max = 1, },
Expand Down
12 changes: 7 additions & 5 deletions mods/lord/Tools/lord_projectiles/src/lord_projectiles/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ return {
wield_item = "lord_projectiles:fire_ball",
visual_size = vector.new(1, 1, 1),
},
max_speed = 35,
max_speed = 40,
sound_hit_node = { name = "lord_projectiles_explosion", gain = 3.0 },
sound_hit_object = { name = "lord_projectiles_explosion", gain = 3.0 },
damage_groups = { fire = 15, },
Expand All @@ -238,7 +238,7 @@ return {
local rad_vec = vector.new(radius, radius, radius)
local min_pos = vector.subtract(node_pos, rad_vec)
local max_pos = vector.add(node_pos, rad_vec)
projectiles.flame_area(min_pos, max_pos)
projectiles.explode_area(node_pos, radius, 5, projectile.object, { fleshy = 15 })
minetest.add_particlespawner({
pos = {
min = min_pos,
Expand Down Expand Up @@ -269,6 +269,7 @@ return {
local rad_vec = vector.new(radius, radius, radius)
local min_pos = vector.subtract(pos, rad_vec)
local max_pos = vector.add(pos, rad_vec)
projectiles.explode_area(pos, radius, 5, projectile.object, { fleshy = 15 })
minetest.add_particlespawner({
pos = {
min = min_pos,
Expand Down Expand Up @@ -296,7 +297,7 @@ return {
after_hit_node = function(projectile)
projectile.object:remove()
end,
after_hit_entity = function(projectile)
after_hit_object = function(projectile)
projectile.object:remove()
end
},
Expand Down Expand Up @@ -329,7 +330,7 @@ return {
local rad_vec = vector.new(radius, radius, radius)
local min_pos = vector.subtract(node_pos, rad_vec)
local max_pos = vector.add(node_pos, rad_vec)
projectiles.flame_area(min_pos, max_pos)
projectiles.explode_area(node_pos, radius, 3, projectile.object, { fleshy = 5 })
minetest.add_particlespawner({
pos = {
min = min_pos,
Expand Down Expand Up @@ -360,6 +361,7 @@ return {
local rad_vec = vector.new(radius, radius, radius)
local min_pos = vector.subtract(pos, rad_vec)
local max_pos = vector.add(pos, rad_vec)
projectiles.explode_area(pos, radius, 3, projectile.object, { fleshy = 5 })
minetest.add_particlespawner({
pos = {
min = min_pos,
Expand Down Expand Up @@ -387,7 +389,7 @@ return {
after_hit_node = function(projectile)
projectile.object:remove()
end,
after_hit_entity = function(projectile)
after_hit_object = function(projectile)
projectile.object:remove()
end
},
Expand Down
Loading