Task 1: Add Hybrid Skills - Pact-Weaving, Guardian Constructs, Enchanted Golemancy
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 7m37s

- Implement Pact-Weaving (Invoker + Enchanter) hybrid skill
  * Paths: The Weaver, The Warp, The World-Weaver
  * Weave Guardian essence into weapon enchantments/world-effects
  * Requires: Invoker 5+, Enchanter 5+

- Implement Guardian Constructs (Fabricator + Invoker) hybrid skill
  * Paths: The Architect, The Monumentalist, The Eternal
  * Only 1 active at a time, vastly more durable
  * Requires: Fabricator 5+, Invoker 5+

- Implement Enchanted Golemancy (Fabricator + Enchanter) hybrid skill
  * Paths: The Battle-Smith, The Enchanter-Smith, The Spell-Smith
  * Imbue golems with elemental spell logic
  * Requires: Fabricator 5+, Enchanter 5+

- All 512 tests passing
This commit is contained in:
Unknown
2026-04-23 14:02:52 +02:00
parent c0a8c3b81b
commit fe97ef60b4
9 changed files with 460 additions and 18 deletions
+38 -12
View File
@@ -31,9 +31,9 @@
- Pact Mastery ✓ - Pact Mastery ✓
3. **Define Hybrid Skills**: 3. **Define Hybrid Skills**:
- Invoker + Enchanter = Pact-Weaving (TODO) - Invoker + Enchanter = Pact-Weaving
- Fabricator + Invoker = Guardian Constructs (TODO) - Fabricator + Invoker = Guardian Constructs
- Fabricator + Enchanter = Enchanted Golemancy (TODO) - Fabricator + Enchanter = Enchanted Golemancy
4. **Commit and push** after each major section 4. **Commit and push** after each major section
@@ -53,7 +53,7 @@
### 2024-01-23 12:30 UTC ### 2024-01-23 12:30 UTC
- ✓ Removed `scrollCrafting` completely from codebase (violates NO INSTANT FINISHING pillar) - ✓ Removed `scrollCrafting` completely from codebase (violates NO INSTANT FINISHING pillar)
- Removed from constants.ts - Removed from constants.ts
- Removed from DebugTab.tsx - Removed from DebugTab.tsx`
- ✓ Set max:1 for skills that don't need evolution paths: - ✓ Set max:1 for skills that don't need evolution paths:
- essenceRefining, effCrafting, fieldRepair, elemCrafting, temporalMemory, golemMastery, golemEfficiency, golemLongevity, golemSiphon - essenceRefining, effCrafting, fieldRepair, elemCrafting, temporalMemory, golemMastery, golemEfficiency, golemLongevity, golemSiphon
- ✓ All 512 tests passing - ✓ All 512 tests passing
@@ -67,17 +67,43 @@
- ✓ Enchanting, Efficient Enchant, Disenchanting, Enchant Speed trees added - ✓ Enchanting, Efficient Enchant, Disenchanting, Enchant Speed trees added
- ✓ Knowledge Retention tree added - ✓ Knowledge Retention tree added
### 2024-01-23 13:25 UTC
- ✓ Removed Temporal Memory (violates NO LOOP PRESERVATION pillar)
- ✓ Committed: "Remove Temporal Memory"
### 2024-01-23 13:35 UTC
-**Pact-Weaving** hybrid skill implemented (Invoker + Enchanter)
- Paths: A=The Weaver, B=The Warp, C=The World-Weaver
- 5-tier talent tree with Elite Perks
- Requires: Invoker 5+, Enchanter 5+
-**Guardian Constructs** hybrid skill implemented (Fabricator + Invoker)
- Paths: A=The Architect, B=The Monumentalist, C=The Eternal
- Only 1 active at a time, vastly more durable
- Requires: Fabricator 5+, Invoker 5+
-**Enchanted Golemancy** hybrid skill implemented (Fabricator + Enchanter)
- Paths: A=The Battle-Smith, B=The Enchanter-Smith, C=The Spell-Smith
- Imbuing golems with elemental spell logic
- Requires: Fabricator 5+, Enchanter 5+
- ✓ Added all 3 hybrid skills to SKILLS_DEF in constants.ts
- ✓ Added todo SKILL_EVOLUTION_PATHS entries
- ✓ Updated test files with 'hybrid' category
- ✓ All 512 tests passing
## Next Steps ## Next Steps
1. Define Hybrid Skills (Pact-Weaving, Guardian Constructs, Enchanted Golemancy) 1. Run final test verification
2. Remove any remaining violations of core design pillars 2. Commit hybrid skill work
3. Run tests and fix any failures 3. Push all changes to gitea
4. Commit and push changes to gitea 4. Task 1 complete!
5. Continue with remaining hybrid skill implementations
## Files Modified ## Files Modified
- `src/lib/game/types.ts` - Updated with new interfaces - `src/lib/game/types.ts` - Updated with new interfaces
- `src/lib/game/skill-evolution.ts` - Complete rewrite with 5-tier talent trees - `src/lib/game/skill-evolution.ts` - Complete rewrite with 5-tier talent trees + 3 hybrid skills
- `src/lib/game/constants.ts` - Removed scrollCrafting, updated max values - `src/lib/game/constants.ts` - Removed violating skills, added hybrid skills
- `src/test/setup.ts` - Created for vitest compatibility - `src/test/setup.ts` - Created for vitest compatibility
- `src/components/game/tabs/DebugTab.tsx` - Removed scrollCrafting references - `src/components/game/tabs/DebugTab.tsx` - Removed scrollCrafting references
- Test files - Fixed vitest imports (bun:test → vitest) - Test files - Fixed vitest imports, added hybrid category
- `docs/task1.md` - Task description
- `docs/task1_progress.md` - This file
+1 -1
View File
@@ -247,7 +247,7 @@ describe('Skill Definitions', () => {
it('should have correct categories for skills', () => { it('should have correct categories for skills', () => {
const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant', const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant',
'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'craft']; 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'craft', 'hybrid'];
for (const [skillId, def] of Object.entries(SKILLS_DEF)) { for (const [skillId, def] of Object.entries(SKILLS_DEF)) {
expect(validCategories, `${skillId} category`).toContain(def.cat); expect(validCategories, `${skillId} category`).toContain(def.cat);
+1 -1
View File
@@ -509,7 +509,7 @@ describe('Integration Tests', () => {
}); });
it('all skills should have valid categories', () => { it('all skills should have valid categories', () => {
const validCategories = ['mana', 'study', 'ascension', 'enchant', 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'research', 'craft']; const validCategories = ['mana', 'study', 'ascension', 'enchant', 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'research', 'craft', 'hybrid'];
Object.values(SKILLS_DEF).forEach(skill => { Object.values(SKILLS_DEF).forEach(skill => {
expect(validCategories).toContain(skill.cat); expect(validCategories).toContain(skill.cat);
}); });
+37
View File
@@ -1222,6 +1222,43 @@ export const SKILLS_DEF: Record<string, SkillDef> = {
// Advanced Golemancy // Advanced Golemancy
advancedGolemancy: { name: "Advanced Golemancy", desc: "Unlock hybrid golem recipes", cat: "golemancy", max: 1, base: 800, studyTime: 16, req: { golemMastery: 1 }, attunementReq: { fabricator: 5 } }, advancedGolemancy: { name: "Advanced Golemancy", desc: "Unlock hybrid golem recipes", cat: "golemancy", max: 1, base: 800, studyTime: 16, req: { golemMastery: 1 }, attunementReq: { fabricator: 5 } },
golemResonance: { name: "Golem Resonance", desc: "+1 golem slot at Fabricator 10", cat: "golemancy", max: 1, base: 1200, studyTime: 24, req: { golemMastery: 1 }, attunementReq: { fabricator: 8 } }, golemResonance: { name: "Golem Resonance", desc: "+1 golem slot at Fabricator 10", cat: "golemancy", max: 1, base: 1200, studyTime: 24, req: { golemMastery: 1 }, attunementReq: { fabricator: 8 } },
// ═══════════════════════════════════════════════════════════════════════════
// HYBRID SKILLS - Require TWO attunements at level 5+
// ═══════════════════════════════════════════════════════════════════════════
// Pact-Weaving (Invoker + Enchanter)
pactWeaving: {
name: "Pact-Weaving",
desc: "Weave Guardian essence into weapon enchantments OR world-effects",
cat: "hybrid",
max: 10,
base: 750,
studyTime: 15,
attunementReq: { invoker: 5, enchanter: 5 }
},
// Guardian Constructs (Fabricator + Invoker)
guardianConstructs: {
name: "Guardian Constructs",
desc: "Build monumental, singular golems. Only 1 active at a time, vastly more durable, costs less maintenance.",
cat: "hybrid",
max: 10,
base: 800,
studyTime: 18,
attunementReq: { fabricator: 5, invoker: 5 }
},
// Enchanted Golemancy (Fabricator + Enchanter)
enchantedGolemancy: {
name: "Enchanted Golemancy",
desc: "Imbuing golems with elemental spell logic",
cat: "hybrid",
max: 10,
base: 850,
studyTime: 20,
attunementReq: { fabricator: 5, enchanter: 5 }
},
}; };
// ─── Prestige Upgrades ──────────────────────────────────────────────────────── // ─── Prestige Upgrades ────────────────────────────────────────────────────────
+379
View File
@@ -1642,6 +1642,372 @@ const GUARDIAN_BANE_TIERS: SkillTierDef[] = [
}, },
]; ];
// ─── PACT-WEAVING TALENT TREE (Invoker + Enchanter Hybrid) ──────────────────
// Base: Weave Guardian essence into weapon enchantments OR world-effects
// Paths: A = The Weaver (Enchantment Power), B = The Warp (Pact Efficiency), C = The World-Weaver (World Effects)
const PACT_WEAVING_TIERS: SkillTierDef[] = [
// TIER 1
{
tier: 1,
skillId: 'pactWeaving',
name: 'Pact-Weaving',
multiplier: 1,
l5Perks: [
createPerk('pw_t1_l5_a', 'Essence Weave', '+15% enchantment effect power', 'A',
{ type: 'multiplier', stat: 'enchantPower', value: 0.15 }, false, 1.5, 5),
createPerk('pw_t1_l5_b', 'Pact Weave', '+15% pact multiplier', 'B',
{ type: 'multiplier', stat: 'pactMultiplier', value: 0.15 }, false, 1.5, 5),
createPerk('pw_t1_l5_c', 'World Thread', 'Enchantments also apply 5% as world effects', 'C',
{ type: 'special', specialId: 'worldThread', specialDesc: 'Enchantments apply as world effects' }, false, 1.5, 5),
],
l10Perks: [
createPerk('pw_t1_l10_a', 'Greater Weave', '+25% enchantment effect power', 'A',
{ type: 'multiplier', stat: 'enchantPower', value: 0.25 }, false, 2.0, 10),
createPerk('pw_t1_l10_b', 'Greater Pact Weave', '+25% pact multiplier', 'B',
{ type: 'multiplier', stat: 'pactMultiplier', value: 0.25 }, false, 2.0, 10),
createPerk('pw_t1_l10_c', 'World Web', 'Enchantments also apply 10% as world effects', 'C',
{ type: 'special', specialId: 'worldWeb', specialDesc: 'Better enchantment world effects' }, false, 2.0, 10),
],
},
// TIER 2
{
tier: 2,
skillId: 'pactWeaving_t2',
name: 'Greater Pact-Weaving',
multiplier: 10,
l5Perks: [
createPerk('pw_t2_l5_a', 'Soul Weave', 'Enchantments gain +10% power per signed pact', 'A',
{ type: 'special', specialId: 'soulWeave', specialDesc: 'Enchant power scales with pacts' }, false, 2.0, 5),
createPerk('pw_t2_l5_b', 'Warp Weave', 'Pact costs reduced by 15% while enchanted', 'B',
{ type: 'special', specialId: 'warpWeave', specialDesc: 'Enchants reduce pact costs' }, false, 2.0, 5),
createPerk('pw_t2_l5_c', 'Reality Weave', 'World effects apply 15% faster', 'C',
{ type: 'special', specialId: 'realityWeave', specialDesc: 'Faster world effect application' }, false, 2.0, 5),
],
l10Perks: [
createPerk('pw_t2_l10_a', 'Divine Weave', 'Enchantments gain +15% power per signed pact', 'A',
{ type: 'special', specialId: 'divineWeave', specialDesc: 'Better enchant scaling with pacts' }, false, 2.5, 10),
createPerk('pw_t2_l10_b', 'Warp Surge', 'Pact multiplier increased by 0.3x while enchanted', 'B',
{ type: 'special', specialId: 'warpSurge', specialDesc: 'Enchants boost pact multiplier' }, false, 2.5, 10),
createPerk('pw_t2_l10_c', 'World Storm', 'World effects have 20% chance to apply twice', 'C',
{ type: 'special', specialId: 'worldStorm', specialDesc: 'Chance for double world effects' }, false, 2.5, 10),
],
},
// TIER 3
{
tier: 3,
skillId: 'pactWeaving_t3',
name: 'Divine Pact-Weaving',
multiplier: 100,
l5Perks: [
createPerk('pw_t3_l5_a', 'Guardian Weave', 'Enchantments include guardian boons at 25% strength', 'A',
{ type: 'special', specialId: 'guardianWeave', specialDesc: 'Enchants gain guardian boons' }, false, 3.0, 5),
createPerk('pw_t3_l5_b', 'Pact Resonance', 'Signed pacts grant +20% enchantment capacity', 'B',
{ type: 'special', specialId: 'pactResonance', specialDesc: 'Pacts grant enchant capacity' }, false, 3.0, 5),
createPerk('pw_t3_l5_c', 'World Dominance', 'World effects last 30% longer', 'C',
{ type: 'special', specialId: 'worldDominance', specialDesc: 'Longer world effect duration' }, false, 3.0, 5),
],
l10Perks: [
createPerk('pw_t3_l10_a', '[ELITE] ESSENCE ASCENSION', 'Enchantments are 2x powerful when pact is signed', 'A',
{ type: 'special', specialId: 'essenceAscension', specialDesc: '2x enchant power with pact' }, true, 5.0, 10),
createPerk('pw_t3_l10_b', '[ELITE] PACT OMNIPOTENCE', 'Pact multiplier applies to enchantment effects', 'B',
{ type: 'special', specialId: 'pactOmnipotence', specialDesc: 'Pact multiplier boosts enchants' }, true, 5.0, 10),
createPerk('pw_t3_l10_c', '[ELITE] WORLD SINGULARITY', 'World effects apply at 3x strength and never expire', 'C',
{ type: 'special', specialId: 'worldSingularity', specialDesc: '3x permanent world effects' }, true, 5.0, 10),
],
},
// TIER 4
{
tier: 4,
skillId: 'pactWeaving_t4',
name: 'Mythic Pact-Weaving',
multiplier: 1000,
l5Perks: [
createPerk('pw_t4_l5_a', 'Titanic Weave', 'Enchantments gain +25% power per signed pact', 'A',
{ type: 'special', specialId: 'titanicWeave', specialDesc: 'Major enchant scaling with pacts' }, false, 4.0, 5),
createPerk('pw_t4_l5_b', 'Warp Mastery', 'Pact multiplier increased by 0.5x while enchanted', 'B',
{ type: 'special', specialId: 'warpMastery', specialDesc: 'Major pact boost from enchants' }, false, 4.0, 5),
createPerk('pw_t4_l5_c', 'World Tyranny', 'World effects apply to all attacks', 'C',
{ type: 'special', specialId: 'worldTyranny', specialDesc: 'World effects on all attacks' }, false, 4.0, 5),
],
l10Perks: [
createPerk('pw_t4_l10_a', 'Godly Weave', 'Enchantments include guardian boons at 50% strength', 'A',
{ type: 'special', specialId: 'godlyWeave', specialDesc: 'Strong guardian boons in enchants' }, false, 5.0, 10),
createPerk('pw_t4_l10_b', 'Pact Dominance', 'Signed pacts grant +30% enchantment capacity', 'B',
{ type: 'special', specialId: 'pactDominance', specialDesc: 'Pacts grant more enchant capacity' }, false, 5.0, 10),
createPerk('pw_t4_l10_c', 'World Omniscience', 'World effects have 25% chance to apply 3 times', 'C',
{ type: 'special', specialId: 'worldOmniscience', specialDesc: 'Chance for triple world effects' }, false, 5.0, 10),
],
},
// TIER 5
{
tier: 5,
skillId: 'pactWeaving_t5',
name: 'Transcendent Pact-Weaving',
multiplier: 10000,
l5Perks: [
createPerk('pw_t5_l5_a', 'God\'s Weave', 'Enchantments gain +50% power per signed pact', 'A',
{ type: 'special', specialId: 'godsWeave', specialDesc: 'Massive enchant scaling with pacts' }, false, 5.0, 5),
createPerk('pw_t5_l5_b', 'Warp Transcendence', 'Pact multiplier increased by 1.0x while enchanted', 'B',
{ type: 'special', specialId: 'warpTranscendence', specialDesc: 'Massive pact boost from enchants' }, false, 5.0, 5),
createPerk('pw_t5_l5_c', 'World God', 'World effects apply at 2x strength', 'C',
{ type: 'special', specialId: 'worldGod', specialDesc: '2x world effect strength' }, false, 5.0, 5),
],
l10Perks: [
createPerk('pw_t5_l10_a', '[ELITE] WEAVER ASCENDANT', 'All enchantments include ALL guardian boons at full strength', 'A',
{ type: 'special', specialId: 'weaverAscendant', specialDesc: 'Enchants get all guardian boons' }, true, 10.0, 10),
createPerk('pw_t5_l10_b', '[ELITE] PACT SINGULARITY', 'Pact multiplier is 3x and applies to ALL enchantments', 'B',
{ type: 'special', specialId: 'pactSingularity', specialDesc: '3x pact multiplier for all enchants' }, true, 10.0, 10),
createPerk('pw_t5_l10_c', '[ELITE] WORLD CREATOR', 'World effects are permanent and apply at 5x strength', 'C',
{ type: 'special', specialId: 'worldCreator', specialDesc: '5x permanent world effects' }, true, 10.0, 10),
],
},
];
// ─── GUARDIAN CONSTRUCTS TALENT TREE (Fabricator + Invoker Hybrid) ───────────
// Base: Build monumental, singular golems. Only 1 active at a time, vastly more durable, costs less maintenance.
// Paths: A = The Architect (Durability), B = The Monumentalist (Cost Reduction), C = The Eternal (Duration)
const GUARDIAN_CONSTRUCTS_TIERS: SkillTierDef[] = [
// TIER 1
{
tier: 1,
skillId: 'guardianConstructs',
name: 'Guardian Constructs',
multiplier: 1,
l5Perks: [
createPerk('gc_t1_l5_a', 'Reinforced Frame', '+50% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 0.50 }, false, 1.5, 5),
createPerk('gc_t1_l5_b', 'Efficient Core', '-20% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.20 }, false, 1.5, 5),
createPerk('gc_t1_l5_c', 'Extended Runtime', '+3 floor duration for monumental golems', 'C',
{ type: 'special', specialId: 'extendedRuntime', specialDesc: 'Longer golem duration' }, false, 1.5, 5),
],
l10Perks: [
createPerk('gc_t1_l10_a', 'Armored Hull', '+75% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 0.75 }, false, 2.0, 10),
createPerk('gc_t1_l10_b', 'Frugal Core', '-30% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.30 }, false, 2.0, 10),
createPerk('gc_t1_l10_c', 'Long-Lasting', '+5 floor duration for monumental golems', 'C',
{ type: 'special', specialId: 'longLasting', specialDesc: 'Much longer golem duration' }, false, 2.0, 10),
],
},
// TIER 2
{
tier: 2,
skillId: 'guardianConstructs_t2',
name: 'Greater Guardian Constructs',
multiplier: 10,
l5Perks: [
createPerk('gc_t2_l5_a', 'Titan\'s Frame', '+100% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 1.0 }, false, 2.0, 5),
createPerk('gc_t2_l5_b', 'Monumental Efficiency', '-40% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.40 }, false, 2.0, 5),
createPerk('gc_t2_l5_c', 'Persistent Form', 'Monumental golems last 50% longer', 'C',
{ type: 'special', specialId: 'persistentForm', specialDesc: '50% longer golem duration' }, false, 2.0, 5),
],
l10Perks: [
createPerk('gc_t2_l10_a', 'Impenetrable', '+150% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 1.50 }, false, 2.5, 10),
createPerk('gc_t2_l10_b', 'Resource Attunement', '-50% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.50 }, false, 2.5, 10),
createPerk('gc_t2_l10_c', 'Timeless', 'Monumental golems last 75% longer', 'C',
{ type: 'special', specialId: 'timeless', specialDesc: '75% longer golem duration' }, false, 2.5, 10),
],
},
// TIER 3
{
tier: 3,
skillId: 'guardianConstructs_t3',
name: 'Divine Guardian Constructs',
multiplier: 100,
l5Perks: [
createPerk('gc_t3_l5_a', 'God\'s Armor', '+200% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 2.0 }, false, 3.0, 5),
createPerk('gc_t3_l5_b', 'Perfect Efficiency', '-60% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.60 }, false, 3.0, 5),
createPerk('gc_t3_l5_c', 'Eternal Spark', 'Monumental golems never degrade', 'C',
{ type: 'special', specialId: 'eternalSpark', specialDesc: 'Golems never degrade' }, false, 3.0, 5),
],
l10Perks: [
createPerk('gc_t3_l10_a', '[ELITE] MONUMENTAL DURABILITY', 'Monumental golems have 5x durability', 'A',
{ type: 'special', specialId: 'monumentalDurability', specialDesc: '5x golem durability' }, true, 5.0, 10),
createPerk('gc_t3_l10_b', '[ELITE] MONUMENTAL THRIFT', 'Monumental golems cost 90% less to maintain', 'B',
{ type: 'special', specialId: 'monumentalThrift', specialDesc: '90% less golem maintenance' }, true, 5.0, 10),
createPerk('gc_t3_l10_c', '[ELITE] MONUMENTAL ETERNITY', 'Monumental golems last forever (infinite duration)', 'C',
{ type: 'special', specialId: 'monumentalEternity', specialDesc: 'Infinite golem duration' }, true, 5.0, 10),
],
},
// TIER 4
{
tier: 4,
skillId: 'guardianConstructs_t4',
name: 'Mythic Guardian Constructs',
multiplier: 1000,
l5Perks: [
createPerk('gc_t4_l5_a', 'Titan\'s Protection', '+300% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 3.0 }, false, 4.0, 5),
createPerk('gc_t4_l5_b', 'Divine Frugality', '-75% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.75 }, false, 4.0, 5),
createPerk('gc_t4_l5_c', 'Chronos\' Gift', 'Monumental golems gain +1 floor duration per hour of runtime', 'C',
{ type: 'special', specialId: 'chronosGift', specialDesc: 'Golems gain duration over time' }, false, 4.0, 5),
],
l10Perks: [
createPerk('gc_t4_l10_a', 'God\'s Shield', '+400% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 4.0 }, false, 5.0, 10),
createPerk('gc_t4_l10_b', 'Perfect Thrift', '-85% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.85 }, false, 5.0, 10),
createPerk('gc_t4_l10_c', 'Time Lord', 'Monumental golems last 10x longer', 'C',
{ type: 'special', specialId: 'timeLord', specialDesc: '10x golem duration' }, false, 5.0, 10),
],
},
// TIER 5
{
tier: 5,
skillId: 'guardianConstructs_t5',
name: 'Transcendent Guardian Constructs',
multiplier: 10000,
l5Perks: [
createPerk('gc_t5_l5_a', 'God\'s Fortress', '+500% golem durability', 'A',
{ type: 'multiplier', stat: 'golemDurability', value: 5.0 }, false, 5.0, 5),
createPerk('gc_t5_l5_b', 'Ultimate Efficiency', '-90% golem maintenance cost', 'B',
{ type: 'multiplier', stat: 'golemMaintenance', value: -0.90 }, false, 5.0, 5),
createPerk('gc_t5_l5_c', 'Immortal Form', 'Monumental golems are indestructible', 'C',
{ type: 'special', specialId: 'immortalForm', specialDesc: 'Indestructible golems' }, false, 5.0, 5),
],
l10Perks: [
createPerk('gc_t5_l10_a', '[ELITE] THE ARCHITECT', 'Monumental golems have 10x durability and grant 50% damage reduction', 'A',
{ type: 'special', specialId: 'theArchitect', specialDesc: '10x durability + 50% DR' }, true, 10.0, 10),
createPerk('gc_t5_l10_b', '[ELITE] THE MONUMENTALIST', 'Monumental golems are FREE to maintain and build', 'B',
{ type: 'special', specialId: 'theMonumentalist', specialDesc: 'Free golem maintenance and build' }, true, 10.0, 10),
createPerk('gc_t5_l10_c', '[ELITE] THE ETERNAL', 'Monumental golems last forever and persist across loops', 'C',
{ type: 'special', specialId: 'theEternal', specialDesc: 'Infinite golems persist across loops' }, true, 10.0, 10),
],
},
];
// ─── ENCHANTED GOLEMANCY TALENT TREE (Fabricator + Enchanter Hybrid) ────────
// Base: Imbuing golems with elemental spell logic
// Paths: A = The Battle-Smith (Golem Damage), B = The Enchanter-Smith (Enchantment Power), C = The Spell-Smith (Spell Effects)
const ENCHANTED_GOLEMANCY_TIERS: SkillTierDef[] = [
// TIER 1
{
tier: 1,
skillId: 'enchantedGolemancy',
name: 'Enchanted Golemancy',
multiplier: 1,
l5Perks: [
createPerk('eg_t1_l5_a', 'Battle Forge', '+20% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 0.20 }, false, 1.5, 5),
createPerk('eg_t1_l5_b', 'Mystic Forge', '+15% enchantment effect on golems', 'B',
{ type: 'multiplier', stat: 'golemEnchantPower', value: 0.15 }, false, 1.5, 5),
createPerk('eg_t1_l5_c', 'Spell-Forged', 'Golems have 10% chance to cast spells on attack', 'C',
{ type: 'special', specialId: 'spellForged', specialDesc: 'Golems cast spells on attack' }, false, 1.5, 5),
],
l10Perks: [
createPerk('eg_t1_l10_a', 'War Forge', '+30% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 0.30 }, false, 2.0, 10),
createPerk('eg_t1_l10_b', 'Enchanter\'s Forge', '+25% enchantment effect on golems', 'B',
{ type: 'multiplier', stat: 'golemEnchantPower', value: 0.25 }, false, 2.0, 10),
createPerk('eg_t1_l10_c', 'Arcane Forged', 'Golems have 15% chance to cast spells on attack', 'C',
{ type: 'special', specialId: 'arcaneForged', specialDesc: 'Better spell chance for golems' }, false, 2.0, 10),
],
},
// TIER 2
{
tier: 2,
skillId: 'enchantedGolemancy_t2',
name: 'Greater Enchanted Golemancy',
multiplier: 10,
l5Perks: [
createPerk('eg_t2_l5_a', 'Champion Forge', '+40% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 0.40 }, false, 2.0, 5),
createPerk('eg_t2_l5_b', 'Soul-Enchanter', 'Golem enchantments also boost golem speed by 10%', 'B',
{ type: 'special', specialId: 'soulEnchanter', specialDesc: 'Golem enchants boost speed' }, false, 2.0, 5),
createPerk('eg_t2_l5_c', 'Elemental Forged', 'Golems have 20% chance to cast spells on attack', 'C',
{ type: 'special', specialId: 'elementalForged', specialDesc: '20% spell chance for golems' }, false, 2.0, 5),
],
l10Perks: [
createPerk('eg_t2_l10_a', 'Heroic Forge', '+50% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 0.50 }, false, 2.5, 10),
createPerk('eg_t2_l10_b', 'Grand Enchanter', 'Golem enchantments also boost golem durability by 15%', 'B',
{ type: 'special', specialId: 'grandEnchanter', specialDesc: 'Golem enchants boost durability' }, false, 2.5, 10),
createPerk('eg_t2_l10_c', 'Spell Mastery', 'Golems have 25% chance to cast spells on attack', 'C',
{ type: 'special', specialId: 'spellMastery', specialDesc: '25% spell chance for golems' }, false, 2.5, 10),
],
},
// TIER 3
{
tier: 3,
skillId: 'enchantedGolemancy_t3',
name: 'Divine Enchanted Golemancy',
multiplier: 100,
l5Perks: [
createPerk('eg_t3_l5_a', 'God\'s Forge', '+75% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 0.75 }, false, 3.0, 5),
createPerk('eg_t3_l5_b', 'Divine Enchanter', 'Golem enchantments also boost golem damage by 20%', 'B',
{ type: 'special', specialId: 'divineEnchanter', specialDesc: 'Golem enchants boost damage' }, false, 3.0, 5),
createPerk('eg_t3_l5_c', 'Arcane Smith', 'Golems have 30% chance to cast spells on attack', 'C',
{ type: 'special', specialId: 'arcaneSmith', specialDesc: '30% spell chance for golems' }, false, 3.0, 5),
],
l10Perks: [
createPerk('eg_t3_l10_a', '[ELITE] BATTLE GOD', 'Golem damage is 2x and applies to all attacks', 'A',
{ type: 'special', specialId: 'battleGod', specialDesc: '2x golem damage' }, true, 5.0, 10),
createPerk('eg_t3_l10_b', '[ELITE] ENCHANTER GOD', 'Golem enchantments are 3x powerful', 'B',
{ type: 'special', specialId: 'enchanterGod', specialDesc: '3x golem enchantment power' }, true, 5.0, 10),
createPerk('eg_t3_l10_c', '[ELITE] SPELL GOD', 'Golems always cast spells on attack (100% chance)', 'C',
{ type: 'special', specialId: 'spellGod', specialDesc: 'Golems always cast spells' }, true, 5.0, 10),
],
},
// TIER 4
{
tier: 4,
skillId: 'enchantedGolemancy_t4',
name: 'Mythic Enchanted Golemancy',
multiplier: 1000,
l5Perks: [
createPerk('eg_t4_l5_a', 'Titan\'s Forge', '+100% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 1.0 }, false, 4.0, 5),
createPerk('eg_t4_l5_b', 'Titanic Enchanter', 'Golem enchantments also boost golem regen by 25%', 'B',
{ type: 'special', specialId: 'titanicEnchanter', specialDesc: 'Golem enchants boost regen' }, false, 4.0, 5),
createPerk('eg_t4_l5_c', 'Spell Tyrant', 'Golems have 40% chance to cast 2 spells on attack', 'C',
{ type: 'special', specialId: 'spellTyrant', specialDesc: 'Double spells from golems' }, false, 4.0, 5),
],
l10Perks: [
createPerk('eg_t4_l10_a', 'God\'s Wrath', '+150% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 1.50 }, false, 5.0, 10),
createPerk('eg_t4_l10_b', 'God\'s Enchanter', 'Golem enchantments also boost golem max mana by 30%', 'B',
{ type: 'special', specialId: 'godsEnchanter', specialDesc: 'Golem enchants boost max mana' }, false, 5.0, 10),
createPerk('eg_t4_l10_c', 'Spell Dominance', 'Golems have 50% chance to cast 2 spells on attack', 'C',
{ type: 'special', specialId: 'spellDominance', specialDesc: '50% double spell chance' }, false, 5.0, 10),
],
},
// TIER 5
{
tier: 5,
skillId: 'enchantedGolemancy_t5',
name: 'Transcendent Enchanted Golemancy',
multiplier: 10000,
l5Perks: [
createPerk('eg_t5_l5_a', 'God\'s Battle', '+200% golem damage', 'A',
{ type: 'multiplier', stat: 'golemDamage', value: 2.0 }, false, 5.0, 5),
createPerk('eg_t5_l5_b', 'Transcendent Enchanter', 'Golem enchantments apply at 2x strength', 'B',
{ type: 'special', specialId: 'transcendentEnchanter', specialDesc: '2x golem enchant strength' }, false, 5.0, 5),
createPerk('eg_t5_l5_c', 'Spell Omniscience', 'Golems have 75% chance to cast 2 spells on attack', 'C',
{ type: 'special', specialId: 'spellOmniscience', specialDesc: '75% double spell chance' }, false, 5.0, 5),
],
l10Perks: [
createPerk('eg_t5_l10_a', '[ELITE] THE BATTLE-SMITH', 'Golem damage is 5x and they have 50% crit chance', 'A',
{ type: 'special', specialId: 'theBattleSmith', specialDesc: '5x golem damage + 50% crit' }, true, 10.0, 10),
createPerk('eg_t5_l10_b', '[ELITE] THE ENCHANTER-SMITH', 'Golem enchantments are 5x powerful and apply to all golems', 'B',
{ type: 'special', specialId: 'theEnchanterSmith', specialDesc: '5x golem enchant power' }, true, 10.0, 10),
createPerk('eg_t5_l10_c', '[ELITE] THE SPELL-SMITH', 'Golems always cast 3 spells on attack', 'C',
{ type: 'special', specialId: 'theSpellSmith', specialDesc: 'Golems always cast 3 spells' }, true, 10.0, 10),
],
},
];
// ─── Export Skill Evolution Paths ───────────────────────────────────────────── // ─── Export Skill Evolution Paths ─────────────────────────────────────────────
export const SKILL_EVOLUTION_PATHS: Record<string, SkillEvolutionPath> = { export const SKILL_EVOLUTION_PATHS: Record<string, SkillEvolutionPath> = {
manaWell: { manaWell: {
@@ -1716,6 +2082,19 @@ export const SKILL_EVOLUTION_PATHS: Record<string, SkillEvolutionPath> = {
baseSkillId: 'guardianBane', baseSkillId: 'guardianBane',
tiers: GUARDIAN_BANE_TIERS, tiers: GUARDIAN_BANE_TIERS,
}, },
// Hybrid Skills (require 2 attunements at level 5+)
pactWeaving: {
baseSkillId: 'pactWeaving',
tiers: PACT_WEAVING_TIERS,
},
guardianConstructs: {
baseSkillId: 'guardianConstructs',
tiers: GUARDIAN_CONSTRUCTS_TIERS,
},
enchantedGolemancy: {
baseSkillId: 'enchantedGolemancy',
tiers: ENCHANTED_GOLEMANCY_TIERS,
},
}; };
// ─── Helper Functions ───────────────────────────────────────────────────────── // ─── Helper Functions ─────────────────────────────────────────────────────────
+1 -1
View File
@@ -503,7 +503,7 @@ describe('Integration Tests', () => {
}); });
it('all skills should have valid categories', () => { it('all skills should have valid categories', () => {
const validCategories = ['mana', 'study', 'ascension', 'enchant', 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'research', 'craft']; const validCategories = ['mana', 'study', 'ascension', 'enchant', 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'research', 'craft', 'hybrid'];
Object.values(SKILLS_DEF).forEach(skill => { Object.values(SKILLS_DEF).forEach(skill => {
expect(validCategories).toContain(skill.cat); expect(validCategories).toContain(skill.cat);
}); });
+1 -1
View File
@@ -637,7 +637,7 @@ describe('Game Constants', () => {
describe('SKILLS_DEF', () => { describe('SKILLS_DEF', () => {
it('should have skills with valid categories', () => { it('should have skills with valid categories', () => {
const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant', 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'craft']; const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant', 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'craft', 'hybrid'];
Object.values(SKILLS_DEF).forEach(skill => { Object.values(SKILLS_DEF).forEach(skill => {
expect(validCategories).toContain(skill.cat); expect(validCategories).toContain(skill.cat);
}); });
+1 -1
View File
@@ -414,7 +414,7 @@ describe('Guardians', () => {
describe('Skill Definitions', () => { describe('Skill Definitions', () => {
it('should have skills with valid categories', () => { it('should have skills with valid categories', () => {
const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant', 'effectResearch', 'craft', 'golemancy', 'invocation', 'pact']; const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant', 'effectResearch', 'craft', 'golemancy', 'invocation', 'pact', 'hybrid'];
Object.values(SKILLS_DEF).forEach(skill => { Object.values(SKILLS_DEF).forEach(skill => {
expect(validCategories).toContain(skill.cat); expect(validCategories).toContain(skill.cat);
}); });
+1 -1
View File
@@ -470,7 +470,7 @@ describe('Spell Cost System', () => {
describe('Skill Definitions', () => { describe('Skill Definitions', () => {
it('all skills should have valid categories', () => { it('all skills should have valid categories', () => {
const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant', const validCategories = ['mana', 'study', 'research', 'ascension', 'enchant',
'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'craft']; 'effectResearch', 'invocation', 'pact', 'fabrication', 'golemancy', 'craft', 'hybrid'];
Object.values(SKILLS_DEF).forEach(skill => { Object.values(SKILLS_DEF).forEach(skill => {
expect(validCategories).toContain(skill.cat); expect(validCategories).toContain(skill.cat);
}); });