Balance adjustments: buff armor/delay on artillery units; rework rally to include caster when `all` is true and scale strike values; nerf flurry damage; simplify counter and bloodpact damage calculations.

This commit is contained in:
Brian Fertig 2026-03-16 21:33:31 -06:00
parent 14aaf03b33
commit c3e56fd6aa
2 changed files with 42 additions and 32 deletions

View File

@ -465,7 +465,7 @@
{
"attack": 2,
"health": 6,
"armor": 0,
"armor": 1,
"delay": 0,
"skills": [
{
@ -478,7 +478,7 @@
{
"attack": 3,
"health": 9,
"armor": 0,
"armor": 3,
"delay": 0,
"skills": [
{
@ -491,7 +491,7 @@
{
"attack": 5,
"health": 14,
"armor": 1,
"armor": 5,
"delay": 0,
"skills": [
{
@ -505,7 +505,7 @@
"attack": 7,
"health": 20,
"armor": 1,
"delay": 0,
"delay": 7,
"skills": [
{
"name": "mortar",
@ -517,7 +517,7 @@
{
"attack": 10,
"health": 30,
"armor": 2,
"armor": 10,
"delay": 0,
"skills": [
{
@ -545,13 +545,14 @@
"delay": 2,
"skills": [
{
"name": "berserk",
"name": "rally",
"value": 1,
"trigger": "on_attack"
"all": true,
"trigger": "preBattle"
},
{
"name": "strike",
"value": 2,
"value": 3,
"trigger": "preAttack"
}
]
@ -563,13 +564,14 @@
"delay": 2,
"skills": [
{
"name": "berserk",
"value": 2,
"trigger": "on_attack"
"name": "rally",
"value": 3,
"all": true,
"trigger": "preBattle"
},
{
"name": "strike",
"value": 3,
"value": 6,
"trigger": "preAttack"
}
]
@ -581,13 +583,14 @@
"delay": 2,
"skills": [
{
"name": "berserk",
"value": 2,
"trigger": "on_attack"
"name": "rally",
"value": 6,
"all": true,
"trigger": "preBattle"
},
{
"name": "strike",
"value": 5,
"value": 12,
"trigger": "preAttack"
}
]
@ -599,13 +602,14 @@
"delay": 2,
"skills": [
{
"name": "berserk",
"value": 3,
"trigger": "on_attack"
"name": "rally",
"value": 12,
"all": true,
"trigger": "preBattle"
},
{
"name": "strike",
"value": 7,
"value": 24,
"trigger": "preAttack"
}
]
@ -617,13 +621,14 @@
"delay": 2,
"skills": [
{
"name": "berserk",
"value": 5,
"trigger": "on_attack"
"name": "rally",
"value": 24,
"all": true,
"trigger": "preBattle"
},
{
"name": "strike",
"value": 10,
"value": 48,
"trigger": "preAttack"
}
]
@ -1480,7 +1485,7 @@
"skills": [
{
"name": "flurry",
"value": 2,
"value": 1,
"trigger": "passive"
},
{
@ -1498,7 +1503,7 @@
"skills": [
{
"name": "flurry",
"value": 2,
"value": 1,
"trigger": "passive"
},
{
@ -1516,7 +1521,7 @@
"skills": [
{
"name": "flurry",
"value": 3,
"value": 1,
"trigger": "passive"
},
{
@ -1534,7 +1539,7 @@
"skills": [
{
"name": "flurry",
"value": 5,
"value": 1,
"trigger": "passive"
},
{

View File

@ -105,10 +105,14 @@ export class SkillProcessor {
rally(skill, attacker, defender, allies, enemies, context) {
const assaultAllies = allies.filter(a => a.type === 'assault' && a !== attacker && a.currentHP > 0);
if (assaultAllies.length === 0) return;
if (skill.all) {
// Rally all includes the caster itself
const targets = attacker.type === 'assault' && attacker.currentHP > 0
? [attacker, ...assaultAllies]
: [...assaultAllies];
if (targets.length === 0) return;
const allTargets = [];
for (const t of assaultAllies) {
for (const t of targets) {
t.currentAttack += skill.value;
t._tempBuffs = t._tempBuffs || [];
t._tempBuffs.push({ stat: 'currentAttack', amount: skill.value, source: 'rally' });
@ -117,6 +121,7 @@ export class SkillProcessor {
if (context) context.rallyAllTargets = allTargets;
return;
}
if (assaultAllies.length === 0) return;
const rng = context?.rng;
const idx = rng
? rng.nextInt(0, assaultAllies.length - 1)
@ -331,7 +336,7 @@ export class SkillProcessor {
counter(skill, attacker, defender, allies, enemies, context) {
if (!context.attackingCard) return;
const dmg = Math.max(0, skill.value - Math.max(0, context.attackingCard.currentArmor));
const dmg = skill.value;
context.attackingCard.currentHP -= dmg;
context.counterDamage = dmg;
}
@ -408,7 +413,7 @@ export class SkillProcessor {
}
bloodpact(skill, attacker, defender, allies, enemies, context) {
const hpCost = Math.ceil(skill.value * 0.75);
const hpCost = skill.value;
attacker.currentHP -= hpCost;
attacker.health -= hpCost; // permanently reduce max HP
attacker.currentAttack += skill.value;