feature: add new composite and exotic mana types (ticket #202)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 17s

This commit is contained in:
2026-05-29 21:51:45 +02:00
parent 7bd28e2085
commit e3ce18c601
31 changed files with 1279 additions and 170 deletions
+99 -61
View File
@@ -1,14 +1,14 @@
// ─── Static Guardian Definitions ─────────────────────────────────────────────────
// New 9-tier progression for guardians:
// Expanded guardian progression:
//
// Tier 1: Base Elements (floors 1080)
// Fire, Water, Air, Earth, Light, Dark, Death, Transference
// Tier 2: Composite Elements (floors 90120)
// Metal, Sand, Lightning
// Tier 3: Composite + Components (floors 130160)
// Tier 4: Exotic Elements (floors 170200)
// Tier 2: Composite Elements (floors 90160)
// Metal, Sand, Lightning, Frost, BlackFlame, Radiant Flames, Miasma, Shadow Glass
// Tier 3: Exotic Elements (floors 170240)
// 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 90120)
// TIER 2: Composite Elements (Floors 90160) — 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 130160)
// TIER 3: Exotic Elements (Floors 170240) — 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 170200)
// ═══════════════════════════════════════════════════════════════════════════════
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 };