feat: guardian defensive stats — shield, barrier, health regen + stat label renames
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m21s

This commit is contained in:
2026-05-29 18:18:00 +02:00
parent 71c68443c4
commit 7bd28e2085
9 changed files with 196 additions and 76 deletions
+36 -3
View File
@@ -21,8 +21,8 @@ function hp(floor: number): number {
return Math.floor(base * Math.pow(floor / 10, exponent));
}
function pactCost(hpVal: number, power: number, armor: number): number {
return Math.floor(hpVal * 0.3 + power * 5 + hpVal * armor * 0.5);
function pactCost(hpVal: number, power: number, armor: number, shield: number, barrier: number): number {
return Math.floor(hpVal * 0.3 + power * 5 + hpVal * armor * 0.5 + shield * 2 + hpVal * barrier * 0.3);
}
function mk(
@@ -35,11 +35,21 @@ function mk(
boons: GuardianDef['boons'],
uniquePerk: string,
effects: GuardianDef['effects'],
defensive?: {
shield?: number;
shieldRegen?: number;
barrier?: number;
barrierRegen?: number;
healthRegen?: number;
healthRegenIsPercent?: boolean;
},
): GuardianDef {
const hpVal = hp(floor);
const power = Math.floor(hpVal * 0.5);
const arm = armor;
const pc = pactCost(hpVal, power, arm);
const shield = defensive?.shield ?? 0;
const barrier = defensive?.barrier ?? 0;
const pc = pactCost(hpVal, power, arm, shield, barrier);
const pt = 2 + Math.floor(floor / 10);
return {
@@ -49,6 +59,12 @@ function mk(
pact: pactMult,
color,
armor: arm,
shield,
shieldRegen: defensive?.shieldRegen ?? 0,
barrier,
barrierRegen: defensive?.barrierRegen ?? 0,
healthRegen: defensive?.healthRegen ?? 0,
healthRegenIsPercent: defensive?.healthRegenIsPercent ?? false,
boons,
pactCost: pc,
pactTime: pt,
@@ -82,6 +98,7 @@ const TIER1: Record<number, GuardianDef> = {
],
'Water spells deal +15% damage',
[{ type: 'armor_pierce', value: 0.15 }],
{ healthRegen: 10, healthRegenIsPercent: false },
),
30: mk(30, 'Ventus Rex', ['air'], '#00D4FF', 0.18, 2.0,
[
@@ -98,6 +115,7 @@ const TIER1: Record<number, GuardianDef> = {
],
'Earth spells deal +25% damage to guardians',
[{ type: 'armor_pierce', value: 0.2 }],
{ shield: 200, shieldRegen: 5 },
),
50: mk(50, 'Lux Aeterna', ['light'], '#FFD700', 0.20, 2.5,
[
@@ -106,6 +124,7 @@ const TIER1: Record<number, GuardianDef> = {
],
'Light spells reveal enemy weaknesses (+20% damage)',
[{ type: 'crit_chance', value: 0.1 }],
{ barrier: 0.05, barrierRegen: 0.01 },
),
60: mk(60, 'Umbra Mortis', ['dark'], '#9B59B6', 0.22, 2.75,
[
@@ -114,6 +133,7 @@ const TIER1: Record<number, GuardianDef> = {
],
'Dark spells deal +25% damage to armored enemies',
[{ type: 'crit_damage', value: 0.15 }],
{ healthRegen: 5, healthRegenIsPercent: true },
),
70: mk(70, 'Mors Ultima', ['death'], '#778CA3', 0.25, 3.0,
[
@@ -122,6 +142,7 @@ const TIER1: Record<number, GuardianDef> = {
],
'Death spells execute enemies below 20% HP',
[{ type: 'raw_damage', value: 0.1 }],
{ shield: 400, shieldRegen: 10 },
),
80: mk(80, 'Vinculum Arcana', ['transference'], '#1ABC9C', 0.20, 3.25,
[
@@ -130,6 +151,7 @@ const TIER1: Record<number, GuardianDef> = {
],
'Transference spells have 25% reduced cost',
[{ type: 'cost_reduction', value: 0.25 }],
{ barrier: 0.08, barrierRegen: 0.02, healthRegen: 3, healthRegenIsPercent: true },
),
};
@@ -145,6 +167,7 @@ const TIER2: Record<number, GuardianDef> = {
],
'Metal spells pierce 20% armor',
[{ type: 'armor_pierce', value: 0.2 }],
{ shield: 600, shieldRegen: 15, healthRegen: 4, healthRegenIsPercent: true },
),
100: mk(100, '', ['sand'], '#D4AC0D', 0.25, 3.75,
[
@@ -153,6 +176,7 @@ const TIER2: Record<number, GuardianDef> = {
],
'Sand spells slow enemies by 25%',
[{ type: 'slow', value: 0.25 }],
{ barrier: 0.10, barrierRegen: 0.03, healthRegen: 5, healthRegenIsPercent: true },
),
110: mk(110, '', ['lightning'], '#FFEB3B', 0.22, 4.0,
[
@@ -161,6 +185,7 @@ const TIER2: Record<number, GuardianDef> = {
],
'Lightning spells chain to 2 additional targets',
[{ type: 'chain', value: 2 }],
{ shield: 800, shieldRegen: 20, barrier: 0.05, barrierRegen: 0.01 },
),
};
@@ -177,6 +202,7 @@ const TIER3: Record<number, GuardianDef> = {
],
'Tri-aspect: Metal, Fire, and Earth spells gain +10% effectiveness',
[{ type: 'armor_pierce', value: 0.25 }, { type: 'burn', value: 0.1 }],
{ shield: 1000, shieldRegen: 25, barrier: 0.05, barrierRegen: 0.01 },
),
140: mk(140, '', ['sand', 'earth', 'water'], '#C9B896', 0.30, 4.75,
[
@@ -186,6 +212,7 @@ const TIER3: Record<number, GuardianDef> = {
],
'Tri-aspect: Sand, Earth, and Water spells gain +10% effectiveness',
[{ type: 'slow', value: 0.3 }, { type: 'armor_pierce', value: 0.15 }],
{ barrier: 0.12, barrierRegen: 0.03, healthRegen: 6, healthRegenIsPercent: true },
),
150: mk(150, '', ['lightning', 'fire', 'air'], '#FFE066', 0.28, 5.0,
[
@@ -195,6 +222,7 @@ const TIER3: Record<number, GuardianDef> = {
],
'Tri-aspect: Lightning, Fire, and Air spells gain +10% effectiveness',
[{ type: 'chain', value: 2 }, { type: 'cast_speed', value: 0.1 }],
{ shield: 1200, shieldRegen: 30, healthRegen: 5, healthRegenIsPercent: true },
),
160: mk(160, '', ['metal', 'lightning', 'fire', 'earth', 'air'], '#E8C872', 0.35, 5.25,
[
@@ -204,6 +232,7 @@ const TIER3: Record<number, GuardianDef> = {
],
'Fused aspects: Lightning spells gain +20% armor pierce; Metal spells chain once',
[{ type: 'armor_pierce', value: 0.3 }, { type: 'chain', value: 1 }],
{ shield: 1500, shieldRegen: 40, barrier: 0.08, barrierRegen: 0.02, healthRegen: 7, healthRegenIsPercent: true },
),
};
@@ -220,6 +249,7 @@ const TIER4: Record<number, GuardianDef> = {
],
'Crystal spells reflect 15% damage back to attackers',
[{ type: 'reflect', value: 0.15 }],
{ shield: 2000, shieldRegen: 50, barrier: 0.10, barrierRegen: 0.03 },
),
180: mk(180, '', ['stellar'], '#F0E68C', 0.30, 6.0,
[
@@ -228,6 +258,7 @@ const TIER4: Record<number, GuardianDef> = {
],
'Stellar spells deal +30% damage at night',
[{ type: 'night_bonus', value: 0.3 }],
{ barrier: 0.15, barrierRegen: 0.04, healthRegen: 8, healthRegenIsPercent: true },
),
190: mk(190, '', ['void'], '#4A235A', 0.35, 6.5,
[
@@ -237,6 +268,7 @@ const TIER4: Record<number, GuardianDef> = {
],
'Void spells ignore 40% of all resistances',
[{ type: 'resist_ignore', value: 0.4 }],
{ shield: 2500, shieldRegen: 60, barrier: 0.10, barrierRegen: 0.02, healthRegen: 6, healthRegenIsPercent: true },
),
200: mk(200, '', ['crystal', 'stellar', 'void'], '#B39DDB', 0.40, 7.0,
[
@@ -246,6 +278,7 @@ const TIER4: Record<number, GuardianDef> = {
],
'Exotic convergence: All exotic spells gain +15% effectiveness',
[{ type: 'reflect', value: 0.1 }, { type: 'resist_ignore', value: 0.1 }],
{ shield: 3000, shieldRegen: 80, barrier: 0.12, barrierRegen: 0.03, healthRegen: 10, healthRegenIsPercent: true },
),
};