Changes to combat and cards

This commit is contained in:
Brian Fertig 2026-03-24 20:55:08 -06:00
parent d17379ca57
commit e731b87e9d
3 changed files with 59 additions and 50 deletions

View File

@ -1672,9 +1672,9 @@
"trigger": "preAttack" "trigger": "preAttack"
}, },
{ {
"name": "armored", "name": "hack",
"value": 1, "value": 3,
"trigger": "passive" "trigger": "preAttack"
} }
] ]
}, },
@ -1695,9 +1695,9 @@
"trigger": "preAttack" "trigger": "preAttack"
}, },
{ {
"name": "armored", "name": "hack",
"value": 2, "value": 5,
"trigger": "passive" "trigger": "preAttack"
} }
] ]
}, },
@ -1718,9 +1718,9 @@
"trigger": "preAttack" "trigger": "preAttack"
}, },
{ {
"name": "armored", "name": "hack",
"value": 3, "value": 7,
"trigger": "passive" "trigger": "preAttack"
} }
] ]
}, },
@ -1741,9 +1741,9 @@
"trigger": "preAttack" "trigger": "preAttack"
}, },
{ {
"name": "armored", "name": "hack",
"value": 5, "value": 10,
"trigger": "passive" "trigger": "preAttack"
} }
] ]
}, },
@ -1764,9 +1764,9 @@
"trigger": "preAttack" "trigger": "preAttack"
}, },
{ {
"name": "armored", "name": "hack",
"value": 7, "value": 14,
"trigger": "passive" "trigger": "preAttack"
} }
] ]
} }
@ -3183,7 +3183,7 @@
"skills": [ "skills": [
{ {
"name": "strike", "name": "strike",
"value": 4, "value": 7,
"trigger": "preAttack", "trigger": "preAttack",
"all": true "all": true
} }
@ -4060,6 +4060,25 @@
"health": 26, "health": 26,
"armor": 2, "armor": 2,
"delay": 0, "delay": 0,
"skills": [
{
"name": "enfeeble",
"value": 1,
"trigger": "preBattle",
"all": true
},
{
"name": "drain",
"value": 2,
"trigger": "preBattle"
}
]
},
{
"attack": 0,
"health": 39,
"armor": 3,
"delay": 0,
"skills": [ "skills": [
{ {
"name": "enfeeble", "name": "enfeeble",
@ -4076,8 +4095,8 @@
}, },
{ {
"attack": 0, "attack": 0,
"health": 39, "health": 59,
"armor": 3, "armor": 5,
"delay": 0, "delay": 0,
"skills": [ "skills": [
{ {
@ -4093,25 +4112,6 @@
} }
] ]
}, },
{
"attack": 0,
"health": 59,
"armor": 5,
"delay": 0,
"skills": [
{
"name": "enfeeble",
"value": 5,
"trigger": "preBattle",
"all": true
},
{
"name": "drain",
"value": 7,
"trigger": "preBattle"
}
]
},
{ {
"attack": 0, "attack": 0,
"health": 88, "health": 88,
@ -4120,13 +4120,13 @@
"skills": [ "skills": [
{ {
"name": "enfeeble", "name": "enfeeble",
"value": 7, "value": 4,
"trigger": "preBattle", "trigger": "preBattle",
"all": true "all": true
}, },
{ {
"name": "drain", "name": "drain",
"value": 10, "value": 8,
"trigger": "preBattle" "trigger": "preBattle"
} }
] ]
@ -4139,13 +4139,13 @@
"skills": [ "skills": [
{ {
"name": "enfeeble", "name": "enfeeble",
"value": 10, "value": 5,
"trigger": "preBattle", "trigger": "preBattle",
"all": true "all": true
}, },
{ {
"name": "drain", "name": "drain",
"value": 15, "value": 11,
"trigger": "preBattle" "trigger": "preBattle"
} }
] ]
@ -5362,7 +5362,7 @@
}, },
{ {
"name": "counter", "name": "counter",
"value": 3, "value": 2,
"trigger": "on_defend" "trigger": "on_defend"
} }
] ]
@ -5380,7 +5380,7 @@
}, },
{ {
"name": "counter", "name": "counter",
"value": 5, "value": 3,
"trigger": "on_defend" "trigger": "on_defend"
} }
] ]
@ -5398,7 +5398,7 @@
}, },
{ {
"name": "counter", "name": "counter",
"value": 7, "value": 5,
"trigger": "on_defend" "trigger": "on_defend"
} }
] ]
@ -5416,7 +5416,7 @@
}, },
{ {
"name": "counter", "name": "counter",
"value": 10, "value": 8,
"trigger": "on_defend" "trigger": "on_defend"
} }
] ]
@ -5434,7 +5434,7 @@
}, },
{ {
"name": "counter", "name": "counter",
"value": 15, "value": 10,
"trigger": "on_defend" "trigger": "on_defend"
} }
] ]

View File

@ -291,6 +291,8 @@ export class CombatEngine {
} }
const extraAttacks = (context.extraAttacks || 0) + 1; const extraAttacks = (context.extraAttacks || 0) + 1;
// Track rupture stacks applied this attack sequence so flurry can't stack beyond skill.value
context.ruptureTracker = { applied: 0 };
for (let a = 0; a < extraAttacks; a++) { for (let a = 0; a < extraAttacks; a++) {
// Skip a target that was already killed (e.g. by mortar during preAttack) // Skip a target that was already killed (e.g. by mortar during preAttack)
const currentTarget = (target && target.currentHP > 0) ? target : null; const currentTarget = (target && target.currentHP > 0) ? target : null;

View File

@ -74,21 +74,28 @@ export class SkillProcessor {
} }
rupture(skill, attacker, defender, allies, enemies, context) { rupture(skill, attacker, defender, allies, enemies, context) {
const tracker = context?.ruptureTracker;
const alreadyApplied = tracker?.applied || 0;
const canApply = Math.max(0, skill.value - alreadyApplied);
if (canApply <= 0) return;
if (skill.all) { if (skill.all) {
const targets = enemies.filter(e => e.currentHP > 0 && !(e.burrowTurns > 0)); const targets = enemies.filter(e => e.currentHP > 0 && !(e.burrowTurns > 0));
if (targets.length === 0) return; if (targets.length === 0) return;
const allTargets = []; const allTargets = [];
for (const t of targets) { for (const t of targets) {
t.ruptureStacks = (t.ruptureStacks || 0) + skill.value; t.ruptureStacks = (t.ruptureStacks || 0) + canApply;
allTargets.push({ target: t, stacks: skill.value }); allTargets.push({ target: t, stacks: canApply });
} }
if (tracker) tracker.applied += canApply;
if (context) context.ruptureAllTargets = allTargets; if (context) context.ruptureAllTargets = allTargets;
return; return;
} }
if (!defender || defender.currentHP <= 0) return; if (!defender || defender.currentHP <= 0) return;
if (defender.burrowTurns > 0) return; if (defender.burrowTurns > 0) return;
defender.ruptureStacks = (defender.ruptureStacks || 0) + skill.value; defender.ruptureStacks = (defender.ruptureStacks || 0) + canApply;
if (context) { context.ruptureTarget = defender; context.ruptureStacks = skill.value; } if (tracker) tracker.applied += canApply;
if (context) { context.ruptureTarget = defender; context.ruptureStacks = canApply; }
} }
berserk(skill, attacker, defender, allies, enemies, context) { berserk(skill, attacker, defender, allies, enemies, context) {