diff --git a/src/Data/Skills/act_int.lua b/src/Data/Skills/act_int.lua index f22875272b..b56a07e3b9 100644 --- a/src/Data/Skills/act_int.lua +++ b/src/Data/Skills/act_int.lua @@ -866,7 +866,7 @@ skills["BlasphemyPlayer"] = { statDescriptionScope = "skill_stat_descriptions", statMap = { ["blasphemy_base_spirit_reservation_per_socketed_curse"] = { - mod("SkillData", "LIST", { key = "spiritReservationFlat", value = nil }) + mod("SkillData", "LIST", { key = "blasphemyReservationFlatSpirit", value = nil }) }, }, baseFlags = { diff --git a/src/Export/Skills/act_int.txt b/src/Export/Skills/act_int.txt index d6d08b007e..38491a7a74 100644 --- a/src/Export/Skills/act_int.txt +++ b/src/Export/Skills/act_int.txt @@ -80,7 +80,7 @@ statMap = { #flags area statMap = { ["blasphemy_base_spirit_reservation_per_socketed_curse"] = { - mod("SkillData", "LIST", { key = "spiritReservationFlat", value = nil }) + mod("SkillData", "LIST", { key = "blasphemyReservationFlatSpirit", value = nil }) }, }, #mods diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index eef6edcae8..0102fc1846 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -210,7 +210,7 @@ function calcs.doActorLifeManaSpiritReservation(actor) if activeSkill.skillData[name.."ReservationFlatForced"] then values.reservedFlat = activeSkill.skillData[name.."ReservationFlatForced"] else - local baseFlatVal = values.baseFlat + local baseFlatVal = values.baseFlat * mult values.reservedFlat = 0 if values.more > 0 and values.inc > -100 and baseFlatVal ~= 0 then values.reservedFlat = m_max(m_ceil(baseFlatVal * (100 + values.inc) / 100 * values.more / (1 + values.efficiency / 100), 0), 0) @@ -232,17 +232,19 @@ function calcs.doActorLifeManaSpiritReservation(actor) if activeSkill.skillTypes[SkillType.MultipleReservation] then local activeSkillCount, enabled = calcs.getActiveSkillCount(activeSkill) local minionFreeSpiritCount = skillModList:Sum("BASE", skillCfg, "MinionFreeSpiritCount") - values.reservedFlat = values.reservedFlat * mult * m_max(activeSkillCount - minionFreeSpiritCount, 0) + values.reservedFlat = values.reservedFlat * m_max(activeSkillCount - minionFreeSpiritCount, 0) end - - if activeSkill.skillTypes[SkillType.IsBlasphemy] and activeSkill.activeEffect.srcInstance.supportEffect and activeSkill.activeEffect.srcInstance.supportEffect.isSupporting then + if activeSkill.skillTypes[SkillType.IsBlasphemy] and activeSkill.activeEffect.srcInstance.supportEffect and activeSkill.activeEffect.srcInstance.supportEffect.isSupporting and activeSkill.skillData["blasphemyReservationFlat" .. name] then -- Sadly no better way to get key/val table element count in lua. local instances = 0 for _ in pairs(activeSkill.activeEffect.srcInstance.supportEffect.isSupporting) do instances = instances + 1 end - values.reservedFlat = values.reservedFlat * instances * mult - values.reservedPercent = values.reservedPercent * instances * mult + + -- Extra reservation of blasphemy needs to be separated from the reservation caused by curses + local blasphemyFlat = activeSkill.skillData["blasphemyReservationFlat" .. name] + local blasphemyEffectiveFlat = m_max(m_ceil(blasphemyFlat * mult * (100 + values.inc) / 100 * values.more / (1 + values.efficiency / 100), 0), 0) + values.reservedFlat = values.reservedFlat + blasphemyEffectiveFlat * instances end -- Blood Sacrament increases reservation per stage channelled if activeSkill.skillCfg.skillName == "Blood Sacrament" and activeSkill.activeStageCount then