feature: add new composite and exotic mana types (ticket #202)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 17s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 17s
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
// ─── Static Guardian Definitions ─────────────────────────────────────────────────
|
||||
// New 9-tier progression for guardians:
|
||||
// Expanded guardian progression:
|
||||
//
|
||||
// Tier 1: Base Elements (floors 10–80)
|
||||
// Fire, Water, Air, Earth, Light, Dark, Death, Transference
|
||||
// Tier 2: Composite Elements (floors 90–120)
|
||||
// Metal, Sand, Lightning
|
||||
// Tier 3: Composite + Components (floors 130–160)
|
||||
// Tier 4: Exotic Elements (floors 170–200)
|
||||
// Tier 2: Composite Elements (floors 90–160)
|
||||
// Metal, Sand, Lightning, Frost, BlackFlame, Radiant Flames, Miasma, Shadow Glass
|
||||
// Tier 3: Exotic Elements (floors 170–240)
|
||||
// Crystal, Stellar, Void, Soul, Time, Plasma + convergence guards
|
||||
//
|
||||
// Floors 210+ are procedurally generated in guardian-encounters.ts.
|
||||
// Floors 250+ are procedurally generated in guardian-encounters.ts.
|
||||
|
||||
import type { GuardianDef } from '../types';
|
||||
import { resolveMultiUnlockChain } from '../utils/guardian-utils';
|
||||
@@ -156,7 +156,9 @@ const TIER1: Record<number, GuardianDef> = {
|
||||
};
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
// TIER 2: Composite Elements (Floors 90–120)
|
||||
// TIER 2: Composite Elements (Floors 90–160) — 8 guardians
|
||||
// Original: Metal, Sand, Lightning
|
||||
// New: Frost, BlackFlame, Radiant Flames, Miasma, Shadow Glass
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
const TIER2: Record<number, GuardianDef> = {
|
||||
@@ -187,60 +189,60 @@ const TIER2: Record<number, GuardianDef> = {
|
||||
[{ type: 'chain', value: 2 }],
|
||||
{ shield: 800, shieldRegen: 20, barrier: 0.05, barrierRegen: 0.01 },
|
||||
),
|
||||
120: mk(120, '', ['frost'], '#A8D8EA', 0.28, 4.25,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Frost damage' },
|
||||
{ type: 'castingSpeed', value: 10, desc: '+10% casting speed' },
|
||||
],
|
||||
'Frost spells freeze enemies, reducing their attack speed by 20%',
|
||||
[{ type: 'freeze', value: 0.2 }],
|
||||
{ shield: 900, shieldRegen: 22, barrier: 0.08, barrierRegen: 0.02 },
|
||||
),
|
||||
130: mk(130, '', ['blackflame'], '#8B2500', 0.32, 4.5,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 20, desc: '+20% BlackFlame damage' },
|
||||
{ type: 'rawDamage', value: 10, desc: '+10% raw damage' },
|
||||
],
|
||||
'BlackFlame spells apply a curse that reduces enemy resistances by 15%',
|
||||
[{ type: 'curse', value: 0.15 }, { type: 'burn', value: 0.15 }],
|
||||
{ shield: 1000, shieldRegen: 25, healthRegen: 5, healthRegenIsPercent: true },
|
||||
),
|
||||
140: mk(140, '', ['radiantflames'], '#FFAA33', 0.25, 4.75,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Radiant Flames damage' },
|
||||
{ type: 'insightGain', value: 10, desc: '+10% insight gain' },
|
||||
],
|
||||
'Radiant Flames spells blind enemies, reducing their accuracy and damage by 15%',
|
||||
[{ type: 'blind', value: 0.15 }, { type: 'burn', value: 0.1 }],
|
||||
{ barrier: 0.12, barrierRegen: 0.03, healthRegen: 6, healthRegenIsPercent: true },
|
||||
),
|
||||
150: mk(150, '', ['miasma'], '#6B8E23', 0.28, 5.0,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Miasma damage' },
|
||||
{ type: 'maxMana', value: 200, desc: '+200 max mana' },
|
||||
],
|
||||
'Miasma spells corrode armor and spread plague in swarm rooms',
|
||||
[{ type: 'corrosion', value: 0.2 }, { type: 'poison', value: 0.15 }],
|
||||
{ shield: 1100, shieldRegen: 28, barrier: 0.05, barrierRegen: 0.01 },
|
||||
),
|
||||
160: mk(160, '', ['shadowglass'], '#2C2C54', 0.33, 5.25,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 20, desc: '+20% Shadow Glass damage' },
|
||||
{ type: 'critDamage', value: 15, desc: '+15% crit damage' },
|
||||
],
|
||||
'Shadow Glass spells create piercing spikes ignoring 30% armor',
|
||||
[{ type: 'armor_pierce', value: 0.3 }, { type: 'pierce', value: 0.25 }],
|
||||
{ shield: 1200, shieldRegen: 30, healthRegen: 5, healthRegenIsPercent: true },
|
||||
),
|
||||
};
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
// TIER 3: Composite + Their Components (Floors 130–160)
|
||||
// TIER 3: Exotic Elements (Floors 170–240) — 6 exotics + 2 convergence guards
|
||||
// Original: Crystal, Stellar, Void (floors 170-200)
|
||||
// New: Soul, Time, Plasma + a convergence guardian
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
const TIER3: Record<number, GuardianDef> = {
|
||||
130: mk(130, '', ['metal', 'fire', 'earth'], '#D4A574', 0.35, 4.5,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 20, desc: '+20% Metal damage' },
|
||||
{ type: 'elementalDamage', value: 10, desc: '+10% Fire damage' },
|
||||
{ type: 'elementalDamage', value: 10, desc: '+10% Earth damage' },
|
||||
],
|
||||
'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,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 20, desc: '+20% Sand damage' },
|
||||
{ type: 'elementalDamage', value: 10, desc: '+10% Earth damage' },
|
||||
{ type: 'elementalDamage', value: 10, desc: '+10% Water damage' },
|
||||
],
|
||||
'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,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 20, desc: '+20% Lightning damage' },
|
||||
{ type: 'elementalDamage', value: 10, desc: '+10% Fire damage' },
|
||||
{ type: 'elementalDamage', value: 10, desc: '+10% Air damage' },
|
||||
],
|
||||
'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,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Metal damage' },
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Lightning damage' },
|
||||
{ type: 'rawDamage', value: 10, desc: '+10% raw damage' },
|
||||
],
|
||||
'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 },
|
||||
),
|
||||
};
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
// TIER 4: Exotic Elements (Floors 170–200)
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
const TIER4: Record<number, GuardianDef> = {
|
||||
170: mk(170, '', ['crystal'], '#85C1E9', 0.35, 5.5,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 20, desc: '+20% Crystal damage' },
|
||||
@@ -270,15 +272,52 @@ const TIER4: Record<number, GuardianDef> = {
|
||||
[{ 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,
|
||||
200: mk(200, '', ['soul'], '#E8D5F5', 0.30, 7.0,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 25, desc: '+25% Soul damage' },
|
||||
{ type: 'rawDamage', value: 20, desc: '+20% raw damage' },
|
||||
],
|
||||
'Soul spells bypass all defenses and shields',
|
||||
[{ type: 'defense_pierce', value: 0.5 }, { type: 'mana_drain', value: 0.2 }],
|
||||
{ shield: 2800, shieldRegen: 55, barrier: 0.08, barrierRegen: 0.02 },
|
||||
),
|
||||
210: mk(210, '', ['time'], '#C5B99A', 0.32, 7.5,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 20, desc: '+20% Time damage' },
|
||||
{ type: 'castingSpeed', value: 20, desc: '+20% casting speed' },
|
||||
],
|
||||
'Time spells slow enemies by 30% and reduce dodge by 20%',
|
||||
[{ type: 'slow', value: 0.3 }, { type: 'temporal_snap', value: 0.15 }],
|
||||
{ barrier: 0.15, barrierRegen: 0.04, healthRegen: 9, healthRegenIsPercent: true },
|
||||
),
|
||||
220: mk(220, '', ['plasma'], '#FF6B9D', 0.28, 8.0,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 25, desc: '+25% Plasma damage' },
|
||||
{ type: 'manaRegen', value: 2.5, desc: '+2.5 mana regen' },
|
||||
],
|
||||
'Plasma spells chain to 3 targets with 30% damage each',
|
||||
[{ type: 'chain', value: 3 }, { type: 'burn', value: 0.1 }],
|
||||
{ shield: 3200, shieldRegen: 70, barrier: 0.10, barrierRegen: 0.02 },
|
||||
),
|
||||
230: mk(230, '', ['crystal', 'stellar', 'void'], '#B39DDB', 0.40, 8.5,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Crystal damage' },
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Stellar damage' },
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Void damage' },
|
||||
],
|
||||
'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 },
|
||||
'Primordial gaze: Crystal/Stellar/Void spells gain +20% effectiveness',
|
||||
[{ type: 'reflect', value: 0.1 }, { type: 'resist_ignore', value: 0.15 }],
|
||||
{ shield: 3500, shieldRegen: 90, barrier: 0.12, barrierRegen: 0.03 },
|
||||
),
|
||||
240: mk(240, '', ['soul', 'time', 'plasma'], '#D5A0E0', 0.42, 9.0,
|
||||
[
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Soul damage' },
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Time damage' },
|
||||
{ type: 'elementalDamage', value: 15, desc: '+15% Plasma damage' },
|
||||
],
|
||||
'Astral convergence: Soul/Time/Plasma spells gain +20% effectiveness',
|
||||
[{ type: 'defense_pierce', value: 0.2 }, { type: 'chain', value: 1 }],
|
||||
{ shield: 3800, shieldRegen: 100, barrier: 0.14, barrierRegen: 0.03, healthRegen: 12, healthRegenIsPercent: true },
|
||||
),
|
||||
};
|
||||
|
||||
@@ -290,7 +329,6 @@ const STATIC_GUARDIANS: Record<number, GuardianDef> = {
|
||||
...TIER1,
|
||||
...TIER2,
|
||||
...TIER3,
|
||||
...TIER4,
|
||||
};
|
||||
|
||||
export { STATIC_GUARDIANS, TIER1, TIER2, TIER3, TIER4 };
|
||||
export { STATIC_GUARDIANS, TIER1, TIER2, TIER3 };
|
||||
|
||||
Reference in New Issue
Block a user