fix(golemancy): reconcile spec vs code discrepancies (issue #326)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 2m21s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 2m21s
- D-SLOT-01: Verified slot cap of 7 matches spec §2.2 (no change needed) - D-COMB-03: Implement AoE damage distribution for Sand/Shadowglass frames - D-COMB-01: Reconcile armor pierce formula to spire-combat spec §9.4 (dmg × (1 + armorPierce)) - D-CIRC-01: Fix Simple Logic Circuit summon cost from raw to earth mana - D-ENCHANT-03: Add dual_attunement unlockRequirement to all golem enchantments - D-CORE-01/02: Add Guardian Core runtime override mechanism for guardian-specific mana Also increased test timeouts for module import tests that timeout in full suite runs.
This commit is contained in:
@@ -50,39 +50,42 @@ describe('computeBasicAttackDamage', () => {
|
||||
});
|
||||
|
||||
it('combines elemental bonus and armor pierce', () => {
|
||||
// Water vs Fire = 1.5x, then 50% armor with 25% pierce
|
||||
// effectiveArmor = 0.5 * (1 - 0.25) = 0.375
|
||||
// dmg = 10 * 1.5 * (1 - 0.375) = 9.375
|
||||
// Water vs Fire = 1.5x, then armor pierce adds to damage multiplier
|
||||
// dmg = 10 * 1.5 * (1 + 0.25) = 18.75
|
||||
const dmg = computeBasicAttackDamage(
|
||||
{ baseDamage: 10, armorPierce: 0.25, element: 'water' },
|
||||
0, 0.5, 'fire',
|
||||
);
|
||||
expect(dmg).toBeCloseTo(9.375, 5);
|
||||
expect(dmg).toBeCloseTo(18.75, 5);
|
||||
});
|
||||
|
||||
it('fully bypasses armor when armorPierce is 1.0', () => {
|
||||
it('doubles damage when armorPierce is 1.0', () => {
|
||||
// dmg = 10 * (1 + 1.0) = 20
|
||||
const dmg = computeBasicAttackDamage(
|
||||
{ baseDamage: 10, armorPierce: 1.0, element: undefined },
|
||||
0, 0.8, 'fire',
|
||||
);
|
||||
expect(dmg).toBe(10);
|
||||
expect(dmg).toBe(20);
|
||||
});
|
||||
|
||||
it('applies no armor bypass when armorPierce is 0', () => {
|
||||
it('returns base damage when armorPierce is 0', () => {
|
||||
// dmg = 10 * (1 + 0) = 10
|
||||
const dmg = computeBasicAttackDamage(
|
||||
{ baseDamage: 10, armorPierce: 0, element: undefined },
|
||||
0, 0.5, 'fire',
|
||||
);
|
||||
expect(dmg).toBe(5);
|
||||
expect(dmg).toBe(10);
|
||||
});
|
||||
|
||||
it('stacks enchantment armorPierce with frame armorPierce', () => {
|
||||
const totalPierce = Math.min(1, 0.5 + 0.15);
|
||||
// totalPierce = 0.5 + 0.15 = 0.65
|
||||
// dmg = 20 * (1 + 0.65) = 33
|
||||
const totalPierce = 0.5 + 0.15;
|
||||
const dmg = computeBasicAttackDamage(
|
||||
{ baseDamage: 20, armorPierce: 0.5, element: undefined },
|
||||
0.15, 0.4, 'fire',
|
||||
);
|
||||
expect(dmg).toBe(20 * (1 - 0.4 * (1 - totalPierce)));
|
||||
expect(dmg).toBe(20 * (1 + totalPierce));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user