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
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m21s
This commit is contained in:
@@ -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 },
|
||||
),
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user