From 0eb49b4705d300e9168609c050c99c74b21fabda Mon Sep 17 00:00:00 2001 From: DualFroz Date: Wed, 26 Aug 2026 09:00:00 +0200 Subject: [PATCH] feat(combat): add deterministic damage resolution --- src/combat.lua | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/combat.lua diff --git a/src/combat.lua b/src/combat.lua new file mode 100644 index 0000000..beca537 --- /dev/null +++ b/src/combat.lua @@ -0,0 +1,26 @@ +-- Deterministic combat: damage is effective attack minus effective defense, +-- floored at 1. Effective stats fold in temporary status modifiers. + +local Combat = {} + +local function attackOf(entity) + return entity.effectiveAttack and entity:effectiveAttack() or entity.attack +end + +local function defenseOf(entity) + return entity.effectiveDefense and entity:effectiveDefense() or entity.defense +end + +function Combat.damage(attacker, defender) + local dealt = attackOf(attacker) - defenseOf(defender) + if dealt < 1 then dealt = 1 end + return dealt +end + +function Combat.attack(attacker, defender) + local dealt = Combat.damage(attacker, defender) + defender.hp = defender.hp - dealt + return { damage = dealt, killed = defender.hp <= 0 } +end + +return Combat