landsandboat/scripts/combat/basic/counter.lua
Xaver-DaRed 0fb133ed39 Cleanup requires and hook to lua loading
Co-Authored-By: sruon <sruon@users.noreply.github.com>
2026-07-08 14:07:25 +02:00

42 lines
1.2 KiB
Lua

-----------------------------------
-- Global, independent functions for counter calculations.
-----------------------------------
xi = xi or {}
xi.combat = xi.combat or {}
xi.combat.counter = xi.combat.counter or {}
-----------------------------------
xi.combat.counter.checkSeiganCounter = function(attacker, defender)
-- Early return: Defender lacks Third Eye.
if not defender:hasStatusEffect(xi.effect.THIRD_EYE) then
return false
end
-- Early return: Defender lacks Seigan.
if not defender:hasStatusEffect(xi.effect.SEIGAN) then
return false
end
if not defender:isFacing(attacker, 64) then
return false
end
if not defender:isEngaged() then
return false
end
-- Early return: Defender is a player without the proper weapon type.
if defender:isPC() and not defender:isWeaponTwoHanded() then
return false
end
-- Calculate counter chance.
local baseCounterRate = 25 + defender:getMod(xi.mod.THIRD_EYE_COUNTER_RATE)
local hitRateFactor = xi.combat.physicalHitRate.getPhysicalHitRate(defender, attacker, 0, xi.attackAnimation.RIGHT_ATTACK, false)
if math.randomInt(1, 100) > baseCounterRate * hitRateFactor then
return false
end
return true
end