dune-tools/character-builder/data/spec-combat.json
Vantz Stockwell 616a84ec5e Allow allocation across all 5 skill trees + show spec perks per level
Skill trees:
- Class is no longer a single choice. The class panel is now tabs inside the
  Skill Trees section that switch which tree is viewed; allocations from every
  tree share one global skill-point pool sourced from character level.
- Switching tabs preserves allocations (previously cleared them).
- New "Skill Summary" panel lists every allocated skill grouped by class.
- Tree-local "spent" badge appears on each class tab; tree header now shows
  both per-tree and global totals, and turns red if over-budget.

Spec perks:
- Extractor now parses the Rewards column of each spec track HTML (name, cost,
  description, effect, bonus, icon). All 5 specs have 41 perks each.
- Spec cards display a scrollable perk list: unlocked perks highlighted, and a
  "Show all" toggle reveals locked/upcoming perks dimmed. A "Next: X at L Y"
  hint always points at the next unlock.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 07:47:55 -04:00

969 lines
No EOL
22 KiB
JSON

{
"header": [
"Level",
"Required XP",
"Cumulative",
"Rewards"
],
"rows": [
{
"level": 1,
"xpRequired": 100,
"totalXp": 100,
"intelPoints": 23,
"perks": [
{
"name": "Skill Points",
"cost": "2 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 2,
"xpRequired": 105,
"totalXp": 205,
"intelPoints": 25,
"perks": [
{
"name": "Max Stamina Increase",
"cost": "2 Spice Melange",
"description": "Increased maximum stamina.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxstamina_d.webp"
}
]
},
{
"level": 3,
"xpRequired": 110,
"totalXp": 315,
"intelPoints": 0
},
{
"level": 4,
"xpRequired": 116,
"totalXp": 431,
"intelPoints": 21,
"perks": [
{
"name": "Skill Points",
"cost": "2 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 5,
"xpRequired": 122,
"totalXp": 553,
"intelPoints": 0
},
{
"level": 6,
"xpRequired": 128,
"totalXp": 681,
"intelPoints": 215,
"perks": [
{
"name": "Max Health Increase",
"cost": "2 Spice Melange",
"description": "Increased maximum health.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxhealth_d.webp"
}
]
},
{
"level": 7,
"xpRequired": 135,
"totalXp": 816,
"intelPoints": 0
},
{
"level": 8,
"xpRequired": 142,
"totalXp": 958,
"intelPoints": 23,
"perks": [
{
"name": "Skill Points",
"cost": "2 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 9,
"xpRequired": 149,
"totalXp": 1107,
"intelPoints": 0
},
{
"level": 10,
"xpRequired": 157,
"totalXp": 1264,
"intelPoints": 0
},
{
"level": 11,
"xpRequired": 164,
"totalXp": 1428,
"intelPoints": 51,
"perks": [
{
"name": "Skill Points",
"cost": "5 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 12,
"xpRequired": 171,
"totalXp": 1599,
"intelPoints": 0
},
{
"level": 13,
"xpRequired": 178,
"totalXp": 1777,
"intelPoints": 0
},
{
"level": 14,
"xpRequired": 186,
"totalXp": 1963,
"intelPoints": 51,
"perks": [
{
"name": "Skill Points",
"cost": "5 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 15,
"xpRequired": 194,
"totalXp": 2157,
"intelPoints": 0
},
{
"level": 16,
"xpRequired": 202,
"totalXp": 2359,
"intelPoints": 520,
"perks": [
{
"name": "Max Stamina Increase",
"cost": "5 Spice Melange",
"description": "Increased maximum stamina.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxstamina_d.webp"
}
]
},
{
"level": 17,
"xpRequired": 211,
"totalXp": 2570,
"intelPoints": 0
},
{
"level": 18,
"xpRequired": 220,
"totalXp": 2790,
"intelPoints": 53,
"perks": [
{
"name": "Skill Points",
"cost": "5 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 19,
"xpRequired": 229,
"totalXp": 3019,
"intelPoints": 0
},
{
"level": 20,
"xpRequired": 239,
"totalXp": 3258,
"intelPoints": 0
},
{
"level": 21,
"xpRequired": 246,
"totalXp": 3504,
"intelPoints": 51,
"perks": [
{
"name": "Skill Points",
"cost": "5 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 22,
"xpRequired": 253,
"totalXp": 3757,
"intelPoints": 0
},
{
"level": 23,
"xpRequired": 260,
"totalXp": 4017,
"intelPoints": 0
},
{
"level": 24,
"xpRequired": 268,
"totalXp": 4285,
"intelPoints": 101,
"perks": [
{
"name": "Skill Points",
"cost": "10 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 25,
"xpRequired": 276,
"totalXp": 4561,
"intelPoints": 0
},
{
"level": 26,
"xpRequired": 284,
"totalXp": 4845,
"intelPoints": 105,
"perks": [
{
"name": "Max Health Increase",
"cost": "10 Spice Melange",
"description": "Increased maximum health.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxhealth_d.webp"
}
]
},
{
"level": 27,
"xpRequired": 292,
"totalXp": 5137,
"intelPoints": 0
},
{
"level": 28,
"xpRequired": 301,
"totalXp": 5438,
"intelPoints": 103,
"perks": [
{
"name": "Skill Points",
"cost": "10 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 29,
"xpRequired": 310,
"totalXp": 5748,
"intelPoints": 0
},
{
"level": 30,
"xpRequired": 319,
"totalXp": 6067,
"intelPoints": 0
},
{
"level": 31,
"xpRequired": 326,
"totalXp": 6393,
"intelPoints": 101,
"perks": [
{
"name": "Skill Points",
"cost": "10 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 32,
"xpRequired": 334,
"totalXp": 6727,
"intelPoints": 0
},
{
"level": 33,
"xpRequired": 342,
"totalXp": 7069,
"intelPoints": 0
},
{
"level": 34,
"xpRequired": 350,
"totalXp": 7419,
"intelPoints": 101,
"perks": [
{
"name": "Skill Points",
"cost": "10 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 35,
"xpRequired": 358,
"totalXp": 7777,
"intelPoints": 0
},
{
"level": 36,
"xpRequired": 366,
"totalXp": 8143,
"intelPoints": 155,
"perks": [
{
"name": "Max Stamina Increase",
"cost": "15 Spice Melange",
"description": "Increased maximum stamina.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxstamina_d.webp"
}
]
},
{
"level": 37,
"xpRequired": 375,
"totalXp": 8518,
"intelPoints": 0
},
{
"level": 38,
"xpRequired": 384,
"totalXp": 8902,
"intelPoints": 153,
"perks": [
{
"name": "Skill Points",
"cost": "15 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 39,
"xpRequired": 393,
"totalXp": 9295,
"intelPoints": 0
},
{
"level": 40,
"xpRequired": 402,
"totalXp": 9697,
"intelPoints": 0
},
{
"level": 41,
"xpRequired": 410,
"totalXp": 10107,
"intelPoints": 151,
"perks": [
{
"name": "Skill Points",
"cost": "15 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 42,
"xpRequired": 418,
"totalXp": 10525,
"intelPoints": 0
},
{
"level": 43,
"xpRequired": 426,
"totalXp": 10951,
"intelPoints": 0
},
{
"level": 44,
"xpRequired": 434,
"totalXp": 11385,
"intelPoints": 151,
"perks": [
{
"name": "Skill Points",
"cost": "15 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 45,
"xpRequired": 442,
"totalXp": 11827,
"intelPoints": 0
},
{
"level": 46,
"xpRequired": 450,
"totalXp": 12277,
"intelPoints": 0
},
{
"level": 47,
"xpRequired": 459,
"totalXp": 12736,
"intelPoints": 0
},
{
"level": 48,
"xpRequired": 468,
"totalXp": 13204,
"intelPoints": 153,
"perks": [
{
"name": "Skill Points",
"cost": "15 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 49,
"xpRequired": 477,
"totalXp": 13681,
"intelPoints": 0
},
{
"level": 50,
"xpRequired": 486,
"totalXp": 14167,
"intelPoints": 0
},
{
"level": 51,
"xpRequired": 494,
"totalXp": 14661,
"intelPoints": 201,
"perks": [
{
"name": "Skill Points",
"cost": "20 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 52,
"xpRequired": 502,
"totalXp": 15163,
"intelPoints": 0
},
{
"level": 53,
"xpRequired": 510,
"totalXp": 15673,
"intelPoints": 0
},
{
"level": 54,
"xpRequired": 518,
"totalXp": 16191,
"intelPoints": 201,
"perks": [
{
"name": "Skill Points",
"cost": "20 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 55,
"xpRequired": 526,
"totalXp": 16717,
"intelPoints": 0
},
{
"level": 56,
"xpRequired": 534,
"totalXp": 17251,
"intelPoints": 205,
"perks": [
{
"name": "Max Health Increase",
"cost": "20 Spice Melange",
"description": "Increased maximum health.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxhealth_d.webp"
}
]
},
{
"level": 57,
"xpRequired": 543,
"totalXp": 17794,
"intelPoints": 0
},
{
"level": 58,
"xpRequired": 552,
"totalXp": 18346,
"intelPoints": 203,
"perks": [
{
"name": "Skill Points",
"cost": "20 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 59,
"xpRequired": 561,
"totalXp": 18907,
"intelPoints": 0
},
{
"level": 60,
"xpRequired": 570,
"totalXp": 19477,
"intelPoints": 0
},
{
"level": 61,
"xpRequired": 575,
"totalXp": 20052,
"intelPoints": 201,
"perks": [
{
"name": "Skill Points",
"cost": "20 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 62,
"xpRequired": 580,
"totalXp": 20632,
"intelPoints": 0
},
{
"level": 63,
"xpRequired": 585,
"totalXp": 21217,
"intelPoints": 0
},
{
"level": 64,
"xpRequired": 590,
"totalXp": 21807,
"intelPoints": 251,
"perks": [
{
"name": "Skill Points",
"cost": "25 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 65,
"xpRequired": 595,
"totalXp": 22402,
"intelPoints": 0
},
{
"level": 66,
"xpRequired": 600,
"totalXp": 23002,
"intelPoints": 255,
"perks": [
{
"name": "Max Stamina Increase",
"cost": "25 Spice Melange",
"description": "Increased maximum stamina.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxstamina_d.webp"
}
]
},
{
"level": 67,
"xpRequired": 606,
"totalXp": 23608,
"intelPoints": 0
},
{
"level": 68,
"xpRequired": 612,
"totalXp": 24220,
"intelPoints": 253,
"perks": [
{
"name": "Skill Points",
"cost": "25 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 69,
"xpRequired": 618,
"totalXp": 24838,
"intelPoints": 0
},
{
"level": 70,
"xpRequired": 624,
"totalXp": 25462,
"intelPoints": 0
},
{
"level": 71,
"xpRequired": 624,
"totalXp": 26086,
"intelPoints": 251,
"perks": [
{
"name": "Skill Points",
"cost": "25 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 72,
"xpRequired": 624,
"totalXp": 26710,
"intelPoints": 0
},
{
"level": 73,
"xpRequired": 624,
"totalXp": 27334,
"intelPoints": 0
},
{
"level": 74,
"xpRequired": 624,
"totalXp": 27958,
"intelPoints": 251,
"perks": [
{
"name": "Skill Points",
"cost": "25 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 75,
"xpRequired": 624,
"totalXp": 28582,
"intelPoints": 30,
"perks": [
{
"name": "Combatant's Helm Variant",
"cost": "30 Spice Melange",
"description": "Headgear for those who practice one of the oldest professions. Those who live by the weapon often die by the weapon, but they will never be lacking in work in the time that they have.\n\nUsed to customize helmets.",
"bonus": "Unlocks cosmetic reward",
"icon": "t_ui_iconspecialization_reward_combamalehelmet01_d.webp"
}
]
},
{
"level": 76,
"xpRequired": 624,
"totalXp": 29206,
"intelPoints": 0
},
{
"level": 77,
"xpRequired": 624,
"totalXp": 29830,
"intelPoints": 3025,
"perks": [
{
"name": "Max Health Increase",
"cost": "30 Spice Melange",
"description": "Increased maximum health.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxhealth_d.webp"
}
]
},
{
"level": 78,
"xpRequired": 624,
"totalXp": 30454,
"intelPoints": 0
},
{
"level": 79,
"xpRequired": 624,
"totalXp": 31078,
"intelPoints": 303,
"perks": [
{
"name": "Skill Points",
"cost": "30 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 80,
"xpRequired": 624,
"totalXp": 31702,
"intelPoints": 0
},
{
"level": 81,
"xpRequired": 624,
"totalXp": 32326,
"intelPoints": 0
},
{
"level": 82,
"xpRequired": 624,
"totalXp": 32950,
"intelPoints": 301,
"perks": [
{
"name": "Skill Points",
"cost": "30 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 83,
"xpRequired": 624,
"totalXp": 33574,
"intelPoints": 0
},
{
"level": 84,
"xpRequired": 624,
"totalXp": 34198,
"intelPoints": 0
},
{
"level": 85,
"xpRequired": 624,
"totalXp": 34822,
"intelPoints": 301,
"perks": [
{
"name": "Skill Points",
"cost": "30 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 86,
"xpRequired": 624,
"totalXp": 35446,
"intelPoints": 0
},
{
"level": 87,
"xpRequired": 624,
"totalXp": 36070,
"intelPoints": 0
},
{
"level": 88,
"xpRequired": 624,
"totalXp": 36694,
"intelPoints": 0
},
{
"level": 89,
"xpRequired": 624,
"totalXp": 37318,
"intelPoints": 353,
"perks": [
{
"name": "Skill Points",
"cost": "35 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+3 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints3_d.webp"
}
]
},
{
"level": 90,
"xpRequired": 624,
"totalXp": 37942,
"intelPoints": 0
},
{
"level": 91,
"xpRequired": 624,
"totalXp": 38566,
"intelPoints": 355,
"perks": [
{
"name": "Max Health Increase",
"cost": "35 Spice Melange",
"description": "Increased maximum health.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxhealth_d.webp"
}
]
},
{
"level": 92,
"xpRequired": 624,
"totalXp": 39190,
"intelPoints": 0
},
{
"level": 93,
"xpRequired": 624,
"totalXp": 39814,
"intelPoints": 351,
"perks": [
{
"name": "Skill Points",
"cost": "35 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 94,
"xpRequired": 624,
"totalXp": 40438,
"intelPoints": 0
},
{
"level": 95,
"xpRequired": 624,
"totalXp": 41062,
"intelPoints": 3520,
"perks": [
{
"name": "Max Stamina Increase",
"cost": "35 Spice Melange",
"description": "Increased maximum stamina.",
"icon": "t_ui_iconspecialization_keystonemajor_combamaxstamina_d.webp"
}
]
},
{
"level": 96,
"xpRequired": 624,
"totalXp": 41686,
"intelPoints": 0
},
{
"level": 97,
"xpRequired": 624,
"totalXp": 42310,
"intelPoints": 351,
"perks": [
{
"name": "Skill Points",
"cost": "35 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+1 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints1_d.webp"
}
]
},
{
"level": 98,
"xpRequired": 624,
"totalXp": 42934,
"intelPoints": 0
},
{
"level": 99,
"xpRequired": 624,
"totalXp": 43558,
"intelPoints": 0
},
{
"level": 100,
"xpRequired": 624,
"totalXp": 44182,
"intelPoints": 405,
"perks": [
{
"name": "Skill Points",
"cost": "40 Spice Melange",
"description": "Gain an additional skill point.",
"effect": "+5 Skill Points",
"icon": "t_ui_iconspecialization_keystonemajor_combaskillpoints5_d.webp"
}
]
}
]
}