rpg-combat-pi-01/specs/levels.allium
Willem van den Ende 31984bbd9d Consolidate all .allium specs into specs/
- Move .pi/specs/ files into specs/ (healing, factions, merged magical-objects)
- Move src/*.allium files into specs/ (levels, changing-level)
- Delete .pi/specs/ directory
- Document specs/ convention in AGENTS.md
2026-06-15 08:16:12 +01:00

45 lines
1.3 KiB
Plaintext

-- allium: 3
-- allium: levels
------------------------------------------------------------
-- Rules
------------------------------------------------------------
rule LevelDiff {
for attacker in Characters, target in Characters:
diff = target.level - attacker.level
}
rule HighLevelTargetModifier {
when: CharacterDealsDamage(attacker, target, baseDamage)
requires: target.level - attacker.level >= 5
ensures: actualDamage = floor(baseDamage * 0.5)
}
rule LowLevelTargetModifier {
when: CharacterDealsDamage(attacker, target, baseDamage)
requires: attacker.level - target.level >= 5
ensures: actualDamage = floor(baseDamage * 1.5)
}
rule CloseLevelNoModifier {
when: CharacterDealsDamage(attacker, target, baseDamage)
requires: abs(target.level - attacker.level) < 5
ensures: actualDamage = baseDamage
}
------------------------------------------------------------
-- Invariants
------------------------------------------------------------
invariant DamageModifierComputationComplete {
for a in Characters, t in Characters, d in NonNegativeIntegers:
let diff = t.level - a.level
let actualDamage =
if diff >= 5 then floor(d * 0.5)
else if diff <= -5 then floor(d * 1.5)
else d
a.dealDamage(t, d) implies t.health = old(t.health) - actualDamage
}