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

View File

@ -291,6 +291,8 @@ export class CombatEngine {
}
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++) {
// Skip a target that was already killed (e.g. by mortar during preAttack)
const currentTarget = (target && target.currentHP > 0) ? target : null;

View File

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