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>
This commit is contained in:
parent
39d6e7ac33
commit
616a84ec5e
11 changed files with 2319 additions and 249 deletions
|
|
@ -10,13 +10,30 @@
|
|||
"level": 1,
|
||||
"xpRequired": 100,
|
||||
"totalXp": 100,
|
||||
"intelPoints": 23
|
||||
"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
|
||||
"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,
|
||||
|
|
@ -28,7 +45,16 @@
|
|||
"level": 4,
|
||||
"xpRequired": 116,
|
||||
"totalXp": 431,
|
||||
"intelPoints": 21
|
||||
"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,
|
||||
|
|
@ -40,7 +66,15 @@
|
|||
"level": 6,
|
||||
"xpRequired": 128,
|
||||
"totalXp": 681,
|
||||
"intelPoints": 215
|
||||
"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,
|
||||
|
|
@ -52,7 +86,16 @@
|
|||
"level": 8,
|
||||
"xpRequired": 142,
|
||||
"totalXp": 958,
|
||||
"intelPoints": 23
|
||||
"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,
|
||||
|
|
@ -70,7 +113,16 @@
|
|||
"level": 11,
|
||||
"xpRequired": 164,
|
||||
"totalXp": 1428,
|
||||
"intelPoints": 51
|
||||
"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,
|
||||
|
|
@ -88,7 +140,16 @@
|
|||
"level": 14,
|
||||
"xpRequired": 186,
|
||||
"totalXp": 1963,
|
||||
"intelPoints": 51
|
||||
"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,
|
||||
|
|
@ -100,7 +161,15 @@
|
|||
"level": 16,
|
||||
"xpRequired": 202,
|
||||
"totalXp": 2359,
|
||||
"intelPoints": 520
|
||||
"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,
|
||||
|
|
@ -112,7 +181,16 @@
|
|||
"level": 18,
|
||||
"xpRequired": 220,
|
||||
"totalXp": 2790,
|
||||
"intelPoints": 53
|
||||
"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,
|
||||
|
|
@ -130,7 +208,16 @@
|
|||
"level": 21,
|
||||
"xpRequired": 246,
|
||||
"totalXp": 3504,
|
||||
"intelPoints": 51
|
||||
"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,
|
||||
|
|
@ -148,7 +235,16 @@
|
|||
"level": 24,
|
||||
"xpRequired": 268,
|
||||
"totalXp": 4285,
|
||||
"intelPoints": 101
|
||||
"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,
|
||||
|
|
@ -160,7 +256,15 @@
|
|||
"level": 26,
|
||||
"xpRequired": 284,
|
||||
"totalXp": 4845,
|
||||
"intelPoints": 105
|
||||
"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,
|
||||
|
|
@ -172,7 +276,16 @@
|
|||
"level": 28,
|
||||
"xpRequired": 301,
|
||||
"totalXp": 5438,
|
||||
"intelPoints": 103
|
||||
"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,
|
||||
|
|
@ -190,7 +303,16 @@
|
|||
"level": 31,
|
||||
"xpRequired": 326,
|
||||
"totalXp": 6393,
|
||||
"intelPoints": 101
|
||||
"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,
|
||||
|
|
@ -208,7 +330,16 @@
|
|||
"level": 34,
|
||||
"xpRequired": 350,
|
||||
"totalXp": 7419,
|
||||
"intelPoints": 101
|
||||
"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,
|
||||
|
|
@ -220,7 +351,15 @@
|
|||
"level": 36,
|
||||
"xpRequired": 366,
|
||||
"totalXp": 8143,
|
||||
"intelPoints": 155
|
||||
"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,
|
||||
|
|
@ -232,7 +371,16 @@
|
|||
"level": 38,
|
||||
"xpRequired": 384,
|
||||
"totalXp": 8902,
|
||||
"intelPoints": 153
|
||||
"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,
|
||||
|
|
@ -250,7 +398,16 @@
|
|||
"level": 41,
|
||||
"xpRequired": 410,
|
||||
"totalXp": 10107,
|
||||
"intelPoints": 151
|
||||
"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,
|
||||
|
|
@ -268,7 +425,16 @@
|
|||
"level": 44,
|
||||
"xpRequired": 434,
|
||||
"totalXp": 11385,
|
||||
"intelPoints": 151
|
||||
"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,
|
||||
|
|
@ -292,7 +458,16 @@
|
|||
"level": 48,
|
||||
"xpRequired": 468,
|
||||
"totalXp": 13204,
|
||||
"intelPoints": 153
|
||||
"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,
|
||||
|
|
@ -310,7 +485,16 @@
|
|||
"level": 51,
|
||||
"xpRequired": 494,
|
||||
"totalXp": 14661,
|
||||
"intelPoints": 201
|
||||
"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,
|
||||
|
|
@ -328,7 +512,16 @@
|
|||
"level": 54,
|
||||
"xpRequired": 518,
|
||||
"totalXp": 16191,
|
||||
"intelPoints": 201
|
||||
"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,
|
||||
|
|
@ -340,7 +533,15 @@
|
|||
"level": 56,
|
||||
"xpRequired": 534,
|
||||
"totalXp": 17251,
|
||||
"intelPoints": 205
|
||||
"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,
|
||||
|
|
@ -352,7 +553,16 @@
|
|||
"level": 58,
|
||||
"xpRequired": 552,
|
||||
"totalXp": 18346,
|
||||
"intelPoints": 203
|
||||
"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,
|
||||
|
|
@ -370,7 +580,16 @@
|
|||
"level": 61,
|
||||
"xpRequired": 575,
|
||||
"totalXp": 20052,
|
||||
"intelPoints": 201
|
||||
"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,
|
||||
|
|
@ -388,7 +607,16 @@
|
|||
"level": 64,
|
||||
"xpRequired": 590,
|
||||
"totalXp": 21807,
|
||||
"intelPoints": 251
|
||||
"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,
|
||||
|
|
@ -400,7 +628,15 @@
|
|||
"level": 66,
|
||||
"xpRequired": 600,
|
||||
"totalXp": 23002,
|
||||
"intelPoints": 255
|
||||
"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,
|
||||
|
|
@ -412,7 +648,16 @@
|
|||
"level": 68,
|
||||
"xpRequired": 612,
|
||||
"totalXp": 24220,
|
||||
"intelPoints": 253
|
||||
"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,
|
||||
|
|
@ -430,7 +675,16 @@
|
|||
"level": 71,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 26086,
|
||||
"intelPoints": 251
|
||||
"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,
|
||||
|
|
@ -448,13 +702,31 @@
|
|||
"level": 74,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 27958,
|
||||
"intelPoints": 251
|
||||
"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
|
||||
"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,
|
||||
|
|
@ -466,7 +738,15 @@
|
|||
"level": 77,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 29830,
|
||||
"intelPoints": 3025
|
||||
"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,
|
||||
|
|
@ -478,7 +758,16 @@
|
|||
"level": 79,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 31078,
|
||||
"intelPoints": 303
|
||||
"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,
|
||||
|
|
@ -496,7 +785,16 @@
|
|||
"level": 82,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 32950,
|
||||
"intelPoints": 301
|
||||
"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,
|
||||
|
|
@ -514,7 +812,16 @@
|
|||
"level": 85,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 34822,
|
||||
"intelPoints": 301
|
||||
"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,
|
||||
|
|
@ -538,7 +845,16 @@
|
|||
"level": 89,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 37318,
|
||||
"intelPoints": 353
|
||||
"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,
|
||||
|
|
@ -550,7 +866,15 @@
|
|||
"level": 91,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 38566,
|
||||
"intelPoints": 355
|
||||
"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,
|
||||
|
|
@ -562,7 +886,16 @@
|
|||
"level": 93,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 39814,
|
||||
"intelPoints": 351
|
||||
"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,
|
||||
|
|
@ -574,7 +907,15 @@
|
|||
"level": 95,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 41062,
|
||||
"intelPoints": 3520
|
||||
"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,
|
||||
|
|
@ -586,7 +927,16 @@
|
|||
"level": 97,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 42310,
|
||||
"intelPoints": 351
|
||||
"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,
|
||||
|
|
@ -604,7 +954,16 @@
|
|||
"level": 100,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 44182,
|
||||
"intelPoints": 405
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -10,7 +10,14 @@
|
|||
"level": 1,
|
||||
"xpRequired": 100,
|
||||
"totalXp": 100,
|
||||
"intelPoints": 1
|
||||
"intelPoints": 1,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Ranged Augmentation Limit",
|
||||
"description": "Allows additional augments to be slotted onto ranged weapons.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsranged_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 2,
|
||||
|
|
@ -22,7 +29,15 @@
|
|||
"level": 3,
|
||||
"xpRequired": 110,
|
||||
"totalXp": 315,
|
||||
"intelPoints": 21
|
||||
"intelPoints": 21,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Melee Augmentation Limit",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Allows additional augments to be slotted onto melee weapons.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsmelee_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 4,
|
||||
|
|
@ -34,7 +49,15 @@
|
|||
"level": 5,
|
||||
"xpRequired": 122,
|
||||
"totalXp": 553,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Repair Master",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Reduces the maximum durability cost of each repair on all types of items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_repairmaxdurability_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 6,
|
||||
|
|
@ -52,7 +75,15 @@
|
|||
"level": 8,
|
||||
"xpRequired": 142,
|
||||
"totalXp": 958,
|
||||
"intelPoints": 2250
|
||||
"intelPoints": 2250,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Consumable Batch Crafting",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "When crafting consumable objects such as healkits, ammo, and spice consumables, there is a chance to produce twice as many.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_consumablebatchcraftingbonus_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 9,
|
||||
|
|
@ -64,7 +95,15 @@
|
|||
"level": 10,
|
||||
"xpRequired": 157,
|
||||
"totalXp": 1264,
|
||||
"intelPoints": 21
|
||||
"intelPoints": 21,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Garment Augmentation Limit",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Allows additional augments to be slotted onto armors.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsarmor_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 11,
|
||||
|
|
@ -76,7 +115,15 @@
|
|||
"level": 12,
|
||||
"xpRequired": 171,
|
||||
"totalXp": 1599,
|
||||
"intelPoints": 5100
|
||||
"intelPoints": 5100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Spice Yield",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "A chance to get extra resources from refining orders in the Spice Refineries.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_spicerefiningyields_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 13,
|
||||
|
|
@ -88,7 +135,15 @@
|
|||
"level": 14,
|
||||
"xpRequired": 186,
|
||||
"totalXp": 1963,
|
||||
"intelPoints": 5333
|
||||
"intelPoints": 5333,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Recycling Yield",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Recycling yields more resources.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_recycleyield_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 15,
|
||||
|
|
@ -100,7 +155,15 @@
|
|||
"level": 16,
|
||||
"xpRequired": 202,
|
||||
"totalXp": 2359,
|
||||
"intelPoints": 550
|
||||
"intelPoints": 550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Recycling Jackpot",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "When recycling, you may obtain rare additional items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_recyclejackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 17,
|
||||
|
|
@ -112,7 +175,15 @@
|
|||
"level": 18,
|
||||
"xpRequired": 220,
|
||||
"totalXp": 2790,
|
||||
"intelPoints": 5
|
||||
"intelPoints": 5,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Efficient Machinery",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Increases the speed of all crafting and refining.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_craftingrefiningspeed_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 19,
|
||||
|
|
@ -124,7 +195,15 @@
|
|||
"level": 20,
|
||||
"xpRequired": 239,
|
||||
"totalXp": 3258,
|
||||
"intelPoints": 550
|
||||
"intelPoints": 550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Fabrication Mastery",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Increases the chance for better stats when crafting augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_craftingjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 21,
|
||||
|
|
@ -136,7 +215,15 @@
|
|||
"level": 22,
|
||||
"xpRequired": 253,
|
||||
"totalXp": 3757,
|
||||
"intelPoints": 10300
|
||||
"intelPoints": 10300,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Chemical Yield",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "A chance to get extra resources from refining orders in the Chemical Refineries.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_chemicalrefiningyields_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 23,
|
||||
|
|
@ -154,7 +241,15 @@
|
|||
"level": 25,
|
||||
"xpRequired": 276,
|
||||
"totalXp": 4561,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Cost Reduction",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Decreases the crafting cost for augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_recipedecreaseupgradeitems_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 26,
|
||||
|
|
@ -172,7 +267,15 @@
|
|||
"level": 28,
|
||||
"xpRequired": 301,
|
||||
"totalXp": 5438,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Repair Master",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Reduces the maximum durability cost of each repair on all types of items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_repairmaxdurability_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 29,
|
||||
|
|
@ -184,13 +287,29 @@
|
|||
"level": 30,
|
||||
"xpRequired": 319,
|
||||
"totalXp": 6067,
|
||||
"intelPoints": 101
|
||||
"intelPoints": 101,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Melee Augmentation Limit",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Allows additional augments to be slotted onto melee weapons.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsmelee_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 31,
|
||||
"xpRequired": 326,
|
||||
"totalXp": 6393,
|
||||
"intelPoints": 101
|
||||
"intelPoints": 101,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Ranged Augmentation Limit",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Allows additional augments to be slotted onto ranged weapons.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsranged_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 32,
|
||||
|
|
@ -202,7 +321,15 @@
|
|||
"level": 33,
|
||||
"xpRequired": 342,
|
||||
"totalXp": 7069,
|
||||
"intelPoints": 1525
|
||||
"intelPoints": 1525,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Fabrication Mastery",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Increases the chance for better stats when crafting augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_craftingjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 34,
|
||||
|
|
@ -214,7 +341,15 @@
|
|||
"level": 35,
|
||||
"xpRequired": 358,
|
||||
"totalXp": 7777,
|
||||
"intelPoints": 1550
|
||||
"intelPoints": 1550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Recycling Jackpot",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "When recycling, you may obtain rare additional items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_recyclejackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 36,
|
||||
|
|
@ -232,7 +367,15 @@
|
|||
"level": 38,
|
||||
"xpRequired": 384,
|
||||
"totalXp": 8902,
|
||||
"intelPoints": 15
|
||||
"intelPoints": 15,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Efficient Machinery",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Increases the speed of all crafting and refining.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_craftingrefiningspeed_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 39,
|
||||
|
|
@ -244,7 +387,15 @@
|
|||
"level": 40,
|
||||
"xpRequired": 402,
|
||||
"totalXp": 9697,
|
||||
"intelPoints": 15333
|
||||
"intelPoints": 15333,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Recycling Yield",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Recycling yields more resources.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_recycleyield_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 41,
|
||||
|
|
@ -256,7 +407,15 @@
|
|||
"level": 42,
|
||||
"xpRequired": 418,
|
||||
"totalXp": 10525,
|
||||
"intelPoints": 151
|
||||
"intelPoints": 151,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Garment Augmentation Limit",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Allows additional augments to be slotted onto armors.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsarmor_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 43,
|
||||
|
|
@ -274,7 +433,15 @@
|
|||
"level": 45,
|
||||
"xpRequired": 442,
|
||||
"totalXp": 11827,
|
||||
"intelPoints": 20100
|
||||
"intelPoints": 20100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Spice Yield",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "A chance to get extra resources from refining orders in the Spice Refineries.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_spicerefiningyields_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 46,
|
||||
|
|
@ -292,7 +459,15 @@
|
|||
"level": 48,
|
||||
"xpRequired": 468,
|
||||
"totalXp": 13204,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Repair Master",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Reduces the maximum durability cost of each repair on all types of items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_repairmaxdurability_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 49,
|
||||
|
|
@ -316,7 +491,15 @@
|
|||
"level": 52,
|
||||
"xpRequired": 502,
|
||||
"totalXp": 15163,
|
||||
"intelPoints": 20
|
||||
"intelPoints": 20,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pattern Upgrading",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Unlocks a recipe in the Advanced Survival Fabricator which combines lower quality Schematic Patterns to create higher quality patterns.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_upgradingfragmentsability_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 53,
|
||||
|
|
@ -334,7 +517,15 @@
|
|||
"level": 55,
|
||||
"xpRequired": 526,
|
||||
"totalXp": 16717,
|
||||
"intelPoints": 2025
|
||||
"intelPoints": 2025,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Fabrication Mastery",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Increases the chance for better stats when crafting augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_craftingjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 56,
|
||||
|
|
@ -358,7 +549,15 @@
|
|||
"level": 59,
|
||||
"xpRequired": 561,
|
||||
"totalXp": 18907,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Cost Reduction",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Decreases the crafting cost for augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_recipedecreaseupgradeitems_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 60,
|
||||
|
|
@ -370,7 +569,15 @@
|
|||
"level": 61,
|
||||
"xpRequired": 575,
|
||||
"totalXp": 20052,
|
||||
"intelPoints": 25150
|
||||
"intelPoints": 25150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Waste Not, Want Not",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "When recycling a unique item, you have a chance to recover the schematic used to fabricate that item.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_schematicswhenrecycle_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 62,
|
||||
|
|
@ -382,7 +589,15 @@
|
|||
"level": 63,
|
||||
"xpRequired": 585,
|
||||
"totalXp": 21217,
|
||||
"intelPoints": 25300
|
||||
"intelPoints": 25300,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Ore Yield",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "A chance to get extra resources from refining orders in the Ore Refineries.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_refiningyields_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 64,
|
||||
|
|
@ -400,7 +615,15 @@
|
|||
"level": 66,
|
||||
"xpRequired": 600,
|
||||
"totalXp": 23002,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Repair Master",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Reduces the maximum durability cost of each repair on all types of items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_repairmaxdurability_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 67,
|
||||
|
|
@ -418,7 +641,15 @@
|
|||
"level": 69,
|
||||
"xpRequired": 618,
|
||||
"totalXp": 24838,
|
||||
"intelPoints": 2550
|
||||
"intelPoints": 2550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Recycling Jackpot",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "When recycling, you may obtain rare additional items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_recyclejackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 70,
|
||||
|
|
@ -436,7 +667,15 @@
|
|||
"level": 72,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 26710,
|
||||
"intelPoints": 25
|
||||
"intelPoints": 25,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Efficient Machinery",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Increases the speed of all crafting and refining.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_craftingrefiningspeed_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 73,
|
||||
|
|
@ -454,7 +693,16 @@
|
|||
"level": 75,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 28582,
|
||||
"intelPoints": 30
|
||||
"intelPoints": 30,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Crafter\u2019s Helm Variant",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Headgear commemorating those who craft, create, and build. Such artisans shape the world around them by the sheer force of their artifice. \n\nUsed to customize helmets.",
|
||||
"bonus": "Unlocks cosmetic reward",
|
||||
"icon": "t_ui_iconspecialization_reward_crafting_malehelmet01_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 76,
|
||||
|
|
@ -472,7 +720,15 @@
|
|||
"level": 78,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 30454,
|
||||
"intelPoints": 3050
|
||||
"intelPoints": 3050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Fabrication Mastery",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Increases the chance for better stats when crafting augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_craftingjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 79,
|
||||
|
|
@ -484,7 +740,15 @@
|
|||
"level": 80,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 31702,
|
||||
"intelPoints": 30333
|
||||
"intelPoints": 30333,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Recycling Yield",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Recycling yields more resources.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_recycleyield_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 81,
|
||||
|
|
@ -502,7 +766,15 @@
|
|||
"level": 83,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 33574,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Repair Master",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Reduces the maximum durability cost of each repair on all types of items.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_repairmaxdurability_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 84,
|
||||
|
|
@ -514,7 +786,15 @@
|
|||
"level": 85,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 34822,
|
||||
"intelPoints": 30100
|
||||
"intelPoints": 30100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Spice Yield",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "A chance to get extra resources from refining orders in the Spice Refineries.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_spicerefiningyields_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 86,
|
||||
|
|
@ -526,13 +806,29 @@
|
|||
"level": 87,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 36070,
|
||||
"intelPoints": 351
|
||||
"intelPoints": 351,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Ranged Augmentation Limit",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Allows additional augments to be slotted onto ranged weapons.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsranged_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 88,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 36694,
|
||||
"intelPoints": 351
|
||||
"intelPoints": 351,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Melee Augmentation Limit",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Allows additional augments to be slotted onto melee weapons.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_augmentslotsmelee_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 89,
|
||||
|
|
@ -544,7 +840,15 @@
|
|||
"level": 90,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 37942,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Cost Reduction",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Decreases the crafting cost for augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_recipedecreaseupgradeitems_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 91,
|
||||
|
|
@ -562,7 +866,15 @@
|
|||
"level": 93,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 39814,
|
||||
"intelPoints": 35
|
||||
"intelPoints": 35,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Efficient Machinery",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Increases the speed of all crafting and refining.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_crafting_craftingrefiningspeed_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 94,
|
||||
|
|
@ -580,7 +892,15 @@
|
|||
"level": 96,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 41686,
|
||||
"intelPoints": 3550
|
||||
"intelPoints": 3550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Augment Fabrication Mastery",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Increases the chance for better stats when crafting augments.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_craftingjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 97,
|
||||
|
|
@ -604,7 +924,15 @@
|
|||
"level": 100,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 44182,
|
||||
"intelPoints": 40150
|
||||
"intelPoints": 40150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Ghost Data",
|
||||
"cost": "40 Spice Melange",
|
||||
"description": "Chance to gain twice as many permits when learning a schematic.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_crafting_ghostdataability_d.webp"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -10,7 +10,15 @@
|
|||
"level": 1,
|
||||
"xpRequired": 100,
|
||||
"totalXp": 100,
|
||||
"intelPoints": 215
|
||||
"intelPoints": 215,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pack Mule",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Increases inventory size by 1 row.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_playerinventoryslots_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 2,
|
||||
|
|
@ -22,7 +30,15 @@
|
|||
"level": 3,
|
||||
"xpRequired": 110,
|
||||
"totalXp": 315,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Boost Heat Reduction",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Reduced heat buildup when using vehicle boosts.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehicleboostheatreduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 4,
|
||||
|
|
@ -40,7 +56,15 @@
|
|||
"level": 6,
|
||||
"xpRequired": 128,
|
||||
"totalXp": 681,
|
||||
"intelPoints": 250
|
||||
"intelPoints": 250,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Fuel Efficiency",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Reduced fuel consumption when piloting vehicles.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehiclefuelefficiency_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 7,
|
||||
|
|
@ -52,7 +76,15 @@
|
|||
"level": 8,
|
||||
"xpRequired": 142,
|
||||
"totalXp": 958,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Rider in the Storm",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Reduced vehicle damage taken from sandstorms.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_sandstormdamagereduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 9,
|
||||
|
|
@ -64,7 +96,15 @@
|
|||
"level": 10,
|
||||
"xpRequired": 157,
|
||||
"totalXp": 1264,
|
||||
"intelPoints": 2
|
||||
"intelPoints": 2,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Treasure Hunter",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Increases the amount of loot gained from crashed ships and buried treasures.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_buriedtreasurebonus_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 11,
|
||||
|
|
@ -82,7 +122,15 @@
|
|||
"level": 13,
|
||||
"xpRequired": 178,
|
||||
"totalXp": 1777,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Efficient Surveyor",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Time required to successfully survey with the survey probe is reduced.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_surveyingtimedecrease_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 14,
|
||||
|
|
@ -94,7 +142,15 @@
|
|||
"level": 15,
|
||||
"xpRequired": 194,
|
||||
"totalXp": 2157,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Boost Heat Reduction",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Reduced heat buildup when using vehicle boosts.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehicleboostheatreduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 16,
|
||||
|
|
@ -106,13 +162,29 @@
|
|||
"level": 17,
|
||||
"xpRequired": 211,
|
||||
"totalXp": 2570,
|
||||
"intelPoints": 5150
|
||||
"intelPoints": 5150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Scanning Range",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Increased range with scanners.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_scanningrange_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 18,
|
||||
"xpRequired": 220,
|
||||
"totalXp": 2790,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Recovery Cost Reduction",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Reduces the cost of Vehicle Recovery.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_reducecostvehiclerecovery_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 19,
|
||||
|
|
@ -124,7 +196,15 @@
|
|||
"level": 20,
|
||||
"xpRequired": 239,
|
||||
"totalXp": 3258,
|
||||
"intelPoints": 5150
|
||||
"intelPoints": 5150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Speed Bonus",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Increased maximum travel speed when piloting vehicles.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehiclespeedbonus_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 21,
|
||||
|
|
@ -142,7 +222,15 @@
|
|||
"level": 23,
|
||||
"xpRequired": 260,
|
||||
"totalXp": 4017,
|
||||
"intelPoints": 1050
|
||||
"intelPoints": 1050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Heat Dissipation",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Vehicles dissipate heat more rapidly.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_fastervehicleheat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 24,
|
||||
|
|
@ -154,7 +242,15 @@
|
|||
"level": 25,
|
||||
"xpRequired": 276,
|
||||
"totalXp": 4561,
|
||||
"intelPoints": 1015
|
||||
"intelPoints": 1015,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pack Mule",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Increases inventory size by 1 row.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_playerinventoryslots_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 26,
|
||||
|
|
@ -172,7 +268,15 @@
|
|||
"level": 28,
|
||||
"xpRequired": 301,
|
||||
"totalXp": 5438,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Suspensor Powerdrain Reduction",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Reduced power drain from suspensor belts.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_suspensorpowerdrain_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 29,
|
||||
|
|
@ -184,7 +288,15 @@
|
|||
"level": 30,
|
||||
"xpRequired": 319,
|
||||
"totalXp": 6067,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Boost Heat Reduction",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Reduced heat buildup when using vehicle boosts.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehicleboostheatreduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 31,
|
||||
|
|
@ -202,7 +314,15 @@
|
|||
"level": 33,
|
||||
"xpRequired": 342,
|
||||
"totalXp": 7069,
|
||||
"intelPoints": 10100
|
||||
"intelPoints": 10100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Expert Maneuvering",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Your piloting skill enables you to reduce the damage taken when piloting a vehicle.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_vehicledamageresistance_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 34,
|
||||
|
|
@ -214,7 +334,15 @@
|
|||
"level": 35,
|
||||
"xpRequired": 358,
|
||||
"totalXp": 7777,
|
||||
"intelPoints": 1550
|
||||
"intelPoints": 1550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Fuel Efficiency",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Reduced fuel consumption when piloting vehicles.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehiclefuelefficiency_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 36,
|
||||
|
|
@ -232,7 +360,15 @@
|
|||
"level": 38,
|
||||
"xpRequired": 384,
|
||||
"totalXp": 8902,
|
||||
"intelPoints": 15500
|
||||
"intelPoints": 15500,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Revealing the Fog",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Reveal a larger area of the fog of war when traversing across the map.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_fogwarrevealradius_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 39,
|
||||
|
|
@ -244,7 +380,15 @@
|
|||
"level": 40,
|
||||
"xpRequired": 402,
|
||||
"totalXp": 9697,
|
||||
"intelPoints": 15
|
||||
"intelPoints": 15,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Hidden Caches",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Increases amount of loot in loot containers.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_lootpoolalterations_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 41,
|
||||
|
|
@ -256,7 +400,15 @@
|
|||
"level": 42,
|
||||
"xpRequired": 418,
|
||||
"totalXp": 10525,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Wall Crawler",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Reduced stamina drain when climbing.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_climbingstamina_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 43,
|
||||
|
|
@ -274,7 +426,15 @@
|
|||
"level": 45,
|
||||
"xpRequired": 442,
|
||||
"totalXp": 11827,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Rider in the Storm",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Reduced vehicle damage taken from sandstorms.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_sandstormdamagereduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 46,
|
||||
|
|
@ -292,7 +452,15 @@
|
|||
"level": 48,
|
||||
"xpRequired": 468,
|
||||
"totalXp": 13204,
|
||||
"intelPoints": 2050
|
||||
"intelPoints": 2050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Heat Dissipation",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Vehicles dissipate heat more rapidly.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_fastervehicleheat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 49,
|
||||
|
|
@ -304,7 +472,15 @@
|
|||
"level": 50,
|
||||
"xpRequired": 486,
|
||||
"totalXp": 14167,
|
||||
"intelPoints": 2015
|
||||
"intelPoints": 2015,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pack Mule",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Increases inventory size by 1 row.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_playerinventoryslots_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 51,
|
||||
|
|
@ -316,7 +492,15 @@
|
|||
"level": 52,
|
||||
"xpRequired": 502,
|
||||
"totalXp": 15163,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Recovery Cost Reduction",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Reduces the cost of Vehicle Recovery.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_reducecostvehiclerecovery_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 53,
|
||||
|
|
@ -334,7 +518,15 @@
|
|||
"level": 55,
|
||||
"xpRequired": 526,
|
||||
"totalXp": 16717,
|
||||
"intelPoints": 2050
|
||||
"intelPoints": 2050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Fuel Efficiency",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Reduced fuel consumption when piloting vehicles.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehiclefuelefficiency_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 56,
|
||||
|
|
@ -358,7 +550,15 @@
|
|||
"level": 59,
|
||||
"xpRequired": 561,
|
||||
"totalXp": 18907,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Boost Heat Reduction",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Reduced heat buildup when using vehicle boosts.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehicleboostheatreduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 60,
|
||||
|
|
@ -376,7 +576,15 @@
|
|||
"level": 62,
|
||||
"xpRequired": 580,
|
||||
"totalXp": 20632,
|
||||
"intelPoints": 2550
|
||||
"intelPoints": 2550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Heat Dissipation",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Vehicles dissipate heat more rapidly.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_fastervehicleheat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 63,
|
||||
|
|
@ -394,7 +602,15 @@
|
|||
"level": 65,
|
||||
"xpRequired": 595,
|
||||
"totalXp": 22402,
|
||||
"intelPoints": 2550
|
||||
"intelPoints": 2550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Fuel Efficiency",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Reduced fuel consumption when piloting vehicles.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehiclefuelefficiency_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 66,
|
||||
|
|
@ -412,7 +628,15 @@
|
|||
"level": 68,
|
||||
"xpRequired": 612,
|
||||
"totalXp": 24220,
|
||||
"intelPoints": 2550
|
||||
"intelPoints": 2550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Heat Dissipation",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Vehicles dissipate heat more rapidly.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_fastervehicleheat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 69,
|
||||
|
|
@ -430,7 +654,15 @@
|
|||
"level": 71,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 26086,
|
||||
"intelPoints": 25350
|
||||
"intelPoints": 25350,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Scanning Range",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Increased range with scanners.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_scanningrange_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 72,
|
||||
|
|
@ -448,13 +680,30 @@
|
|||
"level": 74,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 27958,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Without Rhythm",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Reduced worm threat from moving across the sand.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_lesswormthreat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 75,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 28582,
|
||||
"intelPoints": 30
|
||||
"intelPoints": 30,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Explorer\u2019s Helm Variant",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Headgear celebrating those who excel at discovery. That illimitable curiosity, stronger than the fear of death, has brought humanity across vast swaths of the universe, further than their biology had any right to take them.\n\nUsed to customize helmets.",
|
||||
"bonus": "Unlocks cosmetic reward",
|
||||
"icon": "t_ui_iconspecialization_reward_exploration_malehelmet01_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 76,
|
||||
|
|
@ -466,7 +715,15 @@
|
|||
"level": 77,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 29830,
|
||||
"intelPoints": 3015
|
||||
"intelPoints": 3015,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pack Mule",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Increases inventory size by 1 row.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_playerinventoryslots_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 78,
|
||||
|
|
@ -484,7 +741,15 @@
|
|||
"level": 80,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 31702,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Rider in the Storm",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Reduced vehicle damage taken from sandstorms.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_sandstormdamagereduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 81,
|
||||
|
|
@ -502,7 +767,15 @@
|
|||
"level": 83,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 33574,
|
||||
"intelPoints": 3050
|
||||
"intelPoints": 3050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Heat Dissipation",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Vehicles dissipate heat more rapidly.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_fastervehicleheat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 84,
|
||||
|
|
@ -514,7 +787,15 @@
|
|||
"level": 85,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 34822,
|
||||
"intelPoints": 3050
|
||||
"intelPoints": 3050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Fuel Efficiency",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Reduced fuel consumption when piloting vehicles.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehiclefuelefficiency_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 86,
|
||||
|
|
@ -532,7 +813,15 @@
|
|||
"level": 88,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 36694,
|
||||
"intelPoints": 35100
|
||||
"intelPoints": 35100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Expert Maneuvering",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Your piloting skill enables you to reduce the damage taken when piloting a vehicle.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_vehicledamageresistance_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 89,
|
||||
|
|
@ -544,7 +833,15 @@
|
|||
"level": 90,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 37942,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Vehicle Boost Heat Reduction",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduced heat buildup when using vehicle boosts.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_vehicleboostheatreduction_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 91,
|
||||
|
|
@ -562,7 +859,15 @@
|
|||
"level": 93,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 39814,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Suspensor Powerdrain Reduction",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduced power drain from suspensor belts.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_suspensorpowerdrain_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 94,
|
||||
|
|
@ -574,7 +879,15 @@
|
|||
"level": 95,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 41062,
|
||||
"intelPoints": 3550
|
||||
"intelPoints": 3550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Heat Dissipation",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Vehicles dissipate heat more rapidly.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_exploration_fastervehicleheat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 96,
|
||||
|
|
@ -592,7 +905,15 @@
|
|||
"level": 98,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 42934,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Without Rhythm",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduced worm threat from moving across the sand.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_lesswormthreat_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 99,
|
||||
|
|
@ -604,7 +925,15 @@
|
|||
"level": 100,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 44182,
|
||||
"intelPoints": 4015
|
||||
"intelPoints": 4015,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pack Mule",
|
||||
"cost": "40 Spice Melange",
|
||||
"description": "Increases inventory size by 1 row.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_exploration_playerinventoryslots_d.webp"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -10,19 +10,43 @@
|
|||
"level": 1,
|
||||
"xpRequired": 100,
|
||||
"totalXp": 100,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Salvaging",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Scrap-yielding resource nodes have a chance to yield additional bonus components when mined using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_bonusyieldscrap_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 2,
|
||||
"xpRequired": 105,
|
||||
"totalXp": 205,
|
||||
"intelPoints": 2200
|
||||
"intelPoints": 2200,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Every Last Drop",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Increased water yield when using a dew reaper or scythe.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_additionalwaterplants_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 3,
|
||||
"xpRequired": 110,
|
||||
"totalXp": 315,
|
||||
"intelPoints": 21000
|
||||
"intelPoints": 21000,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Exsanguination Mastery",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Increased blood harvested from corpses.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_additionalbloodcorpses_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 4,
|
||||
|
|
@ -34,7 +58,15 @@
|
|||
"level": 5,
|
||||
"xpRequired": 122,
|
||||
"totalXp": 553,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "More Efficient Tools",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Reduced power consumption from using tools.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_toolusagecostspower_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 6,
|
||||
|
|
@ -46,13 +78,29 @@
|
|||
"level": 7,
|
||||
"xpRequired": 135,
|
||||
"totalXp": 816,
|
||||
"intelPoints": 250
|
||||
"intelPoints": 250,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 8,
|
||||
"xpRequired": 142,
|
||||
"totalXp": 958,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Compactor Safety",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Reduced sandworm threat generation when using the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_compactorthreatgeneration_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 9,
|
||||
|
|
@ -64,7 +112,15 @@
|
|||
"level": 10,
|
||||
"xpRequired": 157,
|
||||
"totalXp": 1264,
|
||||
"intelPoints": 525
|
||||
"intelPoints": 525,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 11,
|
||||
|
|
@ -82,7 +138,15 @@
|
|||
"level": 13,
|
||||
"xpRequired": 178,
|
||||
"totalXp": 1777,
|
||||
"intelPoints": 5100
|
||||
"intelPoints": 5100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Compactor Range",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Increases the range for the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_compactorgatherrange_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 14,
|
||||
|
|
@ -94,7 +158,15 @@
|
|||
"level": 15,
|
||||
"xpRequired": 194,
|
||||
"totalXp": 2157,
|
||||
"intelPoints": 51000
|
||||
"intelPoints": 51000,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pickup Yields",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Increased amount collected when picking up items like scrap, stone, and ore.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_additionalyieldspickups_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 16,
|
||||
|
|
@ -106,7 +178,15 @@
|
|||
"level": 17,
|
||||
"xpRequired": 211,
|
||||
"totalXp": 2570,
|
||||
"intelPoints": 550
|
||||
"intelPoints": 550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 18,
|
||||
|
|
@ -124,7 +204,15 @@
|
|||
"level": 20,
|
||||
"xpRequired": 239,
|
||||
"totalXp": 3258,
|
||||
"intelPoints": 1025
|
||||
"intelPoints": 1025,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 21,
|
||||
|
|
@ -142,7 +230,15 @@
|
|||
"level": 23,
|
||||
"xpRequired": 260,
|
||||
"totalXp": 4017,
|
||||
"intelPoints": 1050
|
||||
"intelPoints": 1050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 24,
|
||||
|
|
@ -154,7 +250,15 @@
|
|||
"level": 25,
|
||||
"xpRequired": 276,
|
||||
"totalXp": 4561,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Compactor Safety",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Reduced sandworm threat generation when using the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_compactorthreatgeneration_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 26,
|
||||
|
|
@ -172,7 +276,15 @@
|
|||
"level": 28,
|
||||
"xpRequired": 301,
|
||||
"totalXp": 5438,
|
||||
"intelPoints": 1050
|
||||
"intelPoints": 1050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 29,
|
||||
|
|
@ -184,7 +296,15 @@
|
|||
"level": 30,
|
||||
"xpRequired": 319,
|
||||
"totalXp": 6067,
|
||||
"intelPoints": 1025
|
||||
"intelPoints": 1025,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 31,
|
||||
|
|
@ -202,7 +322,15 @@
|
|||
"level": 33,
|
||||
"xpRequired": 342,
|
||||
"totalXp": 7069,
|
||||
"intelPoints": 15100
|
||||
"intelPoints": 15100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Compactor Range",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Increases the range for the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_compactorgatherrange_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 34,
|
||||
|
|
@ -214,7 +342,15 @@
|
|||
"level": 35,
|
||||
"xpRequired": 358,
|
||||
"totalXp": 7777,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Salvaging",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Scrap-yielding resource nodes have a chance to yield additional bonus components when mined using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_bonusyieldscrap_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 36,
|
||||
|
|
@ -232,7 +368,15 @@
|
|||
"level": 38,
|
||||
"xpRequired": 384,
|
||||
"totalXp": 8902,
|
||||
"intelPoints": 1550
|
||||
"intelPoints": 1550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 39,
|
||||
|
|
@ -244,7 +388,15 @@
|
|||
"level": 40,
|
||||
"xpRequired": 402,
|
||||
"totalXp": 9697,
|
||||
"intelPoints": 1525
|
||||
"intelPoints": 1525,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 41,
|
||||
|
|
@ -262,7 +414,15 @@
|
|||
"level": 43,
|
||||
"xpRequired": 426,
|
||||
"totalXp": 10951,
|
||||
"intelPoints": 1550
|
||||
"intelPoints": 1550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 44,
|
||||
|
|
@ -274,7 +434,15 @@
|
|||
"level": 45,
|
||||
"xpRequired": 442,
|
||||
"totalXp": 11827,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "More Efficient Tools",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Reduced power consumption from using tools.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_toolusagecostspower_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 46,
|
||||
|
|
@ -292,7 +460,15 @@
|
|||
"level": 48,
|
||||
"xpRequired": 468,
|
||||
"totalXp": 13204,
|
||||
"intelPoints": 2050
|
||||
"intelPoints": 2050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 49,
|
||||
|
|
@ -304,7 +480,15 @@
|
|||
"level": 50,
|
||||
"xpRequired": 486,
|
||||
"totalXp": 14167,
|
||||
"intelPoints": 2025
|
||||
"intelPoints": 2025,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 51,
|
||||
|
|
@ -322,7 +506,15 @@
|
|||
"level": 53,
|
||||
"xpRequired": 510,
|
||||
"totalXp": 15673,
|
||||
"intelPoints": 2050
|
||||
"intelPoints": 2050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 54,
|
||||
|
|
@ -334,7 +526,15 @@
|
|||
"level": 55,
|
||||
"xpRequired": 526,
|
||||
"totalXp": 16717,
|
||||
"intelPoints": 201000
|
||||
"intelPoints": 201000,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Pickup Yields",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Increased amount collected when picking up items like scrap, stone, and ore.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_additionalyieldspickups_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 56,
|
||||
|
|
@ -352,7 +552,15 @@
|
|||
"level": 58,
|
||||
"xpRequired": 552,
|
||||
"totalXp": 18346,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Corpse Compression",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Corpses occupy less inventory volume.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_jellyfingcorpse_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 59,
|
||||
|
|
@ -370,7 +578,15 @@
|
|||
"level": 61,
|
||||
"xpRequired": 575,
|
||||
"totalXp": 20052,
|
||||
"intelPoints": 2525
|
||||
"intelPoints": 2525,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 62,
|
||||
|
|
@ -382,7 +598,15 @@
|
|||
"level": 63,
|
||||
"xpRequired": 585,
|
||||
"totalXp": 21217,
|
||||
"intelPoints": 25100
|
||||
"intelPoints": 25100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Compactor Range",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Increases the range for the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_compactorgatherrange_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 64,
|
||||
|
|
@ -394,7 +618,15 @@
|
|||
"level": 65,
|
||||
"xpRequired": 595,
|
||||
"totalXp": 22402,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Compactor Safety",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Reduced sandworm threat generation when using the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_compactorthreatgeneration_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 66,
|
||||
|
|
@ -412,7 +644,15 @@
|
|||
"level": 68,
|
||||
"xpRequired": 612,
|
||||
"totalXp": 24220,
|
||||
"intelPoints": 2550
|
||||
"intelPoints": 2550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 69,
|
||||
|
|
@ -430,7 +670,15 @@
|
|||
"level": 71,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 26086,
|
||||
"intelPoints": 3025
|
||||
"intelPoints": 3025,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 72,
|
||||
|
|
@ -448,13 +696,30 @@
|
|||
"level": 74,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 27958,
|
||||
"intelPoints": 30400
|
||||
"intelPoints": 30400,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Compactor Range",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Increases the range for the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_compactorgatherrange_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 75,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 28582,
|
||||
"intelPoints": 30
|
||||
"intelPoints": 30,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Gatherer's Helm Variant",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Headgear for those who know how to acquire that which is needed. No matter how powerful they are, the most affluent people in the universe cannot escape their dependence on such agents.\n\nUsed to customize helmets.",
|
||||
"bonus": "Unlocks cosmetic reward",
|
||||
"icon": "t_ui_iconspecialization_reward_gathering_malehelmet01_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 76,
|
||||
|
|
@ -472,7 +737,15 @@
|
|||
"level": 78,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 30454,
|
||||
"intelPoints": 30100
|
||||
"intelPoints": 30100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Superior Compactor Range",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Increases the range for the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_compactorgatherrange_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 79,
|
||||
|
|
@ -490,7 +763,15 @@
|
|||
"level": 81,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 32326,
|
||||
"intelPoints": 3025
|
||||
"intelPoints": 3025,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 82,
|
||||
|
|
@ -502,7 +783,15 @@
|
|||
"level": 83,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 33574,
|
||||
"intelPoints": 3550
|
||||
"intelPoints": 3550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Effective Mining",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources from mineral nodes that aren't normally present when mining using analysis mode.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_byproductsalvage_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 84,
|
||||
|
|
@ -520,7 +809,15 @@
|
|||
"level": 86,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 35446,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Compactor Safety",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduced sandworm threat generation when using the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_compactorthreatgeneration_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 87,
|
||||
|
|
@ -544,7 +841,15 @@
|
|||
"level": 90,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 37942,
|
||||
"intelPoints": 3525
|
||||
"intelPoints": 3525,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 91,
|
||||
|
|
@ -562,7 +867,15 @@
|
|||
"level": 93,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 39814,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "More Efficient Tools",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduced power consumption from using tools.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_toolusagecostspower_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 94,
|
||||
|
|
@ -580,7 +893,15 @@
|
|||
"level": 96,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 41686,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Compactor Safety",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduced sandworm threat generation when using the static compactor.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_gathering_compactorthreatgeneration_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 97,
|
||||
|
|
@ -604,7 +925,15 @@
|
|||
"level": 100,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 44182,
|
||||
"intelPoints": 4025
|
||||
"intelPoints": 4025,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Yield Jackpot",
|
||||
"cost": "40 Spice Melange",
|
||||
"description": "Adds a chance to gain additional resources when mining a resource node.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_gathering_yieldjackpot_d.webp"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -10,19 +10,43 @@
|
|||
"level": 1,
|
||||
"xpRequired": 100,
|
||||
"totalXp": 100,
|
||||
"intelPoints": 250
|
||||
"intelPoints": 250,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Head Hunter",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Increases damage dealt to enemies when shooting them in the head.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_headshotdmg_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 2,
|
||||
"xpRequired": 105,
|
||||
"totalXp": 205,
|
||||
"intelPoints": 21000
|
||||
"intelPoints": 21000,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Soft Step",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Traps triggered by you take more time to detonate.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_trapstriggerdetonate_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 3,
|
||||
"xpRequired": 110,
|
||||
"totalXp": 315,
|
||||
"intelPoints": 250
|
||||
"intelPoints": 250,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Loosen the Purse Strings",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Gain additional House Scrip when completing Landsraad Missions.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_morehousecredits_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 4,
|
||||
|
|
@ -34,7 +58,15 @@
|
|||
"level": 5,
|
||||
"xpRequired": 122,
|
||||
"totalXp": 553,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Discreet",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Reduces the distance that enemies sense you.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducedistancenpcsense_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 6,
|
||||
|
|
@ -52,7 +84,15 @@
|
|||
"level": 8,
|
||||
"xpRequired": 142,
|
||||
"totalXp": 958,
|
||||
"intelPoints": 21000
|
||||
"intelPoints": 21000,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Explosive",
|
||||
"cost": "2 Spice Melange",
|
||||
"description": "Increases the damage dealt by explosive barrels that you detonate.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_moredamageexplosivebarrels_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 9,
|
||||
|
|
@ -64,7 +104,15 @@
|
|||
"level": 10,
|
||||
"xpRequired": 157,
|
||||
"totalXp": 1264,
|
||||
"intelPoints": 550
|
||||
"intelPoints": 550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Head Hunter",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Increases damage dealt to enemies when shooting them in the head.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_headshotdmg_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 11,
|
||||
|
|
@ -76,7 +124,15 @@
|
|||
"level": 12,
|
||||
"xpRequired": 171,
|
||||
"totalXp": 1599,
|
||||
"intelPoints": 5150
|
||||
"intelPoints": 5150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Infiltrator",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Reduces range at which you can be scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducerangescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 13,
|
||||
|
|
@ -94,7 +150,15 @@
|
|||
"level": 15,
|
||||
"xpRequired": 194,
|
||||
"totalXp": 2157,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Hard to Spot",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "Reduces speed at which enemies recognize you as a threat.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducerecognitionspeed_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 16,
|
||||
|
|
@ -106,7 +170,15 @@
|
|||
"level": 17,
|
||||
"xpRequired": 211,
|
||||
"totalXp": 2570,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Greasing Palms",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "The cost of bribing Landsraad envoys is reduced.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_bribinglandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 18,
|
||||
|
|
@ -118,7 +190,15 @@
|
|||
"level": 19,
|
||||
"xpRequired": 229,
|
||||
"totalXp": 3019,
|
||||
"intelPoints": 550
|
||||
"intelPoints": 550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Landsraad Contributor",
|
||||
"cost": "5 Spice Melange",
|
||||
"description": "When completing a Landsraad task, you contribute more points on behalf of your faction toward gaining the support of that House.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_contributionlandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 20,
|
||||
|
|
@ -136,7 +216,15 @@
|
|||
"level": 22,
|
||||
"xpRequired": 253,
|
||||
"totalXp": 3757,
|
||||
"intelPoints": 1020
|
||||
"intelPoints": 1020,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Loosen the Purse Strings",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Gain additional House Scrip when completing Landsraad Missions.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_morehousecredits_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 23,
|
||||
|
|
@ -148,7 +236,15 @@
|
|||
"level": 24,
|
||||
"xpRequired": 268,
|
||||
"totalXp": 4285,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Shadow",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Reduces the scanning duration when you are scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_reducetimescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 25,
|
||||
|
|
@ -166,7 +262,15 @@
|
|||
"level": 27,
|
||||
"xpRequired": 292,
|
||||
"totalXp": 5137,
|
||||
"intelPoints": 1050
|
||||
"intelPoints": 1050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Head Hunter",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Increases damage dealt to enemies when shooting them in the head.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_headshotdmg_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 28,
|
||||
|
|
@ -178,7 +282,15 @@
|
|||
"level": 29,
|
||||
"xpRequired": 310,
|
||||
"totalXp": 5748,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Greasing Palms",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "The cost of bribing Landsraad envoys is reduced.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_bribinglandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 30,
|
||||
|
|
@ -196,7 +308,15 @@
|
|||
"level": 32,
|
||||
"xpRequired": 334,
|
||||
"totalXp": 6727,
|
||||
"intelPoints": 10150
|
||||
"intelPoints": 10150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Infiltrator",
|
||||
"cost": "10 Spice Melange",
|
||||
"description": "Reduces range at which you can be scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducerangescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 33,
|
||||
|
|
@ -214,7 +334,15 @@
|
|||
"level": 35,
|
||||
"xpRequired": 358,
|
||||
"totalXp": 7777,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Shadow",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Reduces the scanning duration when you are scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_reducetimescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 36,
|
||||
|
|
@ -226,7 +354,15 @@
|
|||
"level": 37,
|
||||
"xpRequired": 375,
|
||||
"totalXp": 8518,
|
||||
"intelPoints": 1550
|
||||
"intelPoints": 1550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Loosen the Purse Strings",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Gain additional House Scrip when completing Landsraad Missions.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_morehousecredits_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 38,
|
||||
|
|
@ -244,7 +380,15 @@
|
|||
"level": 40,
|
||||
"xpRequired": 402,
|
||||
"totalXp": 9697,
|
||||
"intelPoints": 15
|
||||
"intelPoints": 15,
|
||||
"perks": [
|
||||
{
|
||||
"name": "What\u2019s Theirs is Mine",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Enemy corpses grant additional loot.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_extraloot_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 41,
|
||||
|
|
@ -262,7 +406,15 @@
|
|||
"level": 43,
|
||||
"xpRequired": 426,
|
||||
"totalXp": 10951,
|
||||
"intelPoints": 15100
|
||||
"intelPoints": 15100,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Landsraad Contributor",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "When completing a Landsraad task, you contribute more points on behalf of your faction toward gaining the support of that House.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_contributionlandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 44,
|
||||
|
|
@ -274,7 +426,15 @@
|
|||
"level": 45,
|
||||
"xpRequired": 442,
|
||||
"totalXp": 11827,
|
||||
"intelPoints": 1520
|
||||
"intelPoints": 1520,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Loosen the Purse Strings",
|
||||
"cost": "15 Spice Melange",
|
||||
"description": "Gain additional House Scrip when completing Landsraad Missions.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_morehousecredits_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 46,
|
||||
|
|
@ -292,7 +452,15 @@
|
|||
"level": 48,
|
||||
"xpRequired": 468,
|
||||
"totalXp": 13204,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Shadow",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Reduces the scanning duration when you are scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_reducetimescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 49,
|
||||
|
|
@ -304,7 +472,15 @@
|
|||
"level": 50,
|
||||
"xpRequired": 486,
|
||||
"totalXp": 14167,
|
||||
"intelPoints": 2050
|
||||
"intelPoints": 2050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Head Hunter",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Increases damage dealt to enemies when shooting them in the head.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_headshotdmg_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 51,
|
||||
|
|
@ -322,7 +498,15 @@
|
|||
"level": 53,
|
||||
"xpRequired": 510,
|
||||
"totalXp": 15673,
|
||||
"intelPoints": 2050
|
||||
"intelPoints": 2050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Landsraad Contributor",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "When completing a Landsraad task, you contribute more points on behalf of your faction toward gaining the support of that House.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_contributionlandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 54,
|
||||
|
|
@ -334,7 +518,15 @@
|
|||
"level": 55,
|
||||
"xpRequired": 526,
|
||||
"totalXp": 16717,
|
||||
"intelPoints": 20150
|
||||
"intelPoints": 20150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Infiltrator",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "Reduces range at which you can be scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducerangescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 56,
|
||||
|
|
@ -352,7 +544,15 @@
|
|||
"level": 58,
|
||||
"xpRequired": 552,
|
||||
"totalXp": 18346,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Greasing Palms",
|
||||
"cost": "20 Spice Melange",
|
||||
"description": "The cost of bribing Landsraad envoys is reduced.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_bribinglandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 59,
|
||||
|
|
@ -364,7 +564,15 @@
|
|||
"level": 60,
|
||||
"xpRequired": 570,
|
||||
"totalXp": 19477,
|
||||
"intelPoints": 2550
|
||||
"intelPoints": 2550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Loosen the Purse Strings",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Gain additional House Scrip when completing Landsraad Missions.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_morehousecredits_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 61,
|
||||
|
|
@ -382,7 +590,15 @@
|
|||
"level": 63,
|
||||
"xpRequired": 585,
|
||||
"totalXp": 21217,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Shadow",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Reduces the scanning duration when you are scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_reducetimescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 64,
|
||||
|
|
@ -394,7 +610,15 @@
|
|||
"level": 65,
|
||||
"xpRequired": 595,
|
||||
"totalXp": 22402,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Hard to Spot",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Reduces speed at which enemies recognize you as a threat.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducerecognitionspeed_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 66,
|
||||
|
|
@ -418,7 +642,15 @@
|
|||
"level": 69,
|
||||
"xpRequired": 618,
|
||||
"totalXp": 24838,
|
||||
"intelPoints": 25150
|
||||
"intelPoints": 25150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Infiltrator",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "Reduces range at which you can be scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducerangescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 70,
|
||||
|
|
@ -436,7 +668,15 @@
|
|||
"level": 72,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 26710,
|
||||
"intelPoints": 2550
|
||||
"intelPoints": 2550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Landsraad Contributor",
|
||||
"cost": "25 Spice Melange",
|
||||
"description": "When completing a Landsraad task, you contribute more points on behalf of your faction toward gaining the support of that House.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_contributionlandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 73,
|
||||
|
|
@ -448,13 +688,30 @@
|
|||
"level": 74,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 27958,
|
||||
"intelPoints": 3050
|
||||
"intelPoints": 3050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Head Hunter",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Increases damage dealt to enemies when shooting them in the head.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_headshotdmg_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 75,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 28582,
|
||||
"intelPoints": 30
|
||||
"intelPoints": 30,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Saboteur\u2019s Helm Variant",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Headgear for those expert in the nefarious enterprise of undoing. Such devious souls can see a seemingly impenetrable wall, and know which single brick to remove in order to cause the whole thing to come tumbling down.\n\nUsed to customize helmets.",
|
||||
"bonus": "Unlocks cosmetic reward",
|
||||
"icon": "t_ui_iconspecialization_reward_sabotage_malehelmet01_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 76,
|
||||
|
|
@ -472,7 +729,15 @@
|
|||
"level": 78,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 30454,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Greasing Palms",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "The cost of bribing Landsraad envoys is reduced.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_bribinglandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 79,
|
||||
|
|
@ -490,7 +755,15 @@
|
|||
"level": 81,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 32326,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Shadow",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Reduces the scanning duration when you are scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_reducetimescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 82,
|
||||
|
|
@ -514,7 +787,15 @@
|
|||
"level": 85,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 34822,
|
||||
"intelPoints": 3050
|
||||
"intelPoints": 3050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Loosen the Purse Strings",
|
||||
"cost": "30 Spice Melange",
|
||||
"description": "Gain additional House Scrip when completing Landsraad Missions.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_morehousecredits_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 86,
|
||||
|
|
@ -532,7 +813,15 @@
|
|||
"level": 88,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 36694,
|
||||
"intelPoints": 3550
|
||||
"intelPoints": 3550,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Landsraad Contributor",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "When completing a Landsraad task, you contribute more points on behalf of your faction toward gaining the support of that House.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_contributionlandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 89,
|
||||
|
|
@ -544,7 +833,15 @@
|
|||
"level": 90,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 37942,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Greasing Palms",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "The cost of bribing Landsraad envoys is reduced.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_bribinglandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 91,
|
||||
|
|
@ -562,7 +859,15 @@
|
|||
"level": 93,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 39814,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Discreet",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduces the distance that enemies sense you.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducedistancenpcsense_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 94,
|
||||
|
|
@ -574,7 +879,15 @@
|
|||
"level": 95,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 41062,
|
||||
"intelPoints": 0
|
||||
"intelPoints": 0,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Greasing Palms",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "The cost of bribing Landsraad envoys is reduced.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_bribinglandsraad_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 96,
|
||||
|
|
@ -592,7 +905,15 @@
|
|||
"level": 98,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 42934,
|
||||
"intelPoints": 35150
|
||||
"intelPoints": 35150,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Infiltrator",
|
||||
"cost": "35 Spice Melange",
|
||||
"description": "Reduces range at which you can be scanned.",
|
||||
"icon": "t_ui_iconspecialization_keystoneminor_sabotage_reducerangescanned_d.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"level": 99,
|
||||
|
|
@ -604,7 +925,15 @@
|
|||
"level": 100,
|
||||
"xpRequired": 624,
|
||||
"totalXp": 44182,
|
||||
"intelPoints": 4050
|
||||
"intelPoints": 4050,
|
||||
"perks": [
|
||||
{
|
||||
"name": "Head Hunter",
|
||||
"cost": "40 Spice Melange",
|
||||
"description": "Increases damage dealt to enemies when shooting them in the head.",
|
||||
"icon": "t_ui_iconspecialization_keystonemajor_sabotage_headshotdmg_d.webp"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -3,7 +3,13 @@ import { computed, onMounted, ref, shallowRef, watch } from 'vue';
|
|||
import XpProgressCard from './components/XpProgressCard.vue';
|
||||
import FactionTrack from './components/FactionTrack.vue';
|
||||
import SkillTree from './components/SkillTree.vue';
|
||||
import { applyBuild, build, resetBuild, setClass, setHouse } from './store';
|
||||
import {
|
||||
applyBuild,
|
||||
build,
|
||||
resetBuild,
|
||||
setHouse,
|
||||
setViewedClass,
|
||||
} from './store';
|
||||
import {
|
||||
CLASSES,
|
||||
HOUSES,
|
||||
|
|
@ -104,6 +110,48 @@ const totalIntelAtLevel = computed(() => {
|
|||
return charXp.value.rows[idx]?.totalIntelPoints || 0;
|
||||
});
|
||||
|
||||
// Skill points are a single global pool spent across all 5 trees.
|
||||
const totalSpentAcrossClasses = computed(() =>
|
||||
Object.values(build.skills).reduce((a, b) => a + (b || 0), 0),
|
||||
);
|
||||
|
||||
// Per-class summary: { classId: { spent, allocations: [{node, points}] } }
|
||||
const summaryByClass = computed(() => {
|
||||
const out: Record<
|
||||
ClassId,
|
||||
{ spent: number; allocations: { tag: string; name: string; kind: string; points: number; max: number }[] }
|
||||
> = {
|
||||
benegesserit: { spent: 0, allocations: [] },
|
||||
mentat: { spent: 0, allocations: [] },
|
||||
planetologist: { spent: 0, allocations: [] },
|
||||
swordmaster: { spent: 0, allocations: [] },
|
||||
trooper: { spent: 0, allocations: [] },
|
||||
};
|
||||
for (const c of CLASSES) {
|
||||
const tree = skillTrees.value[c.id];
|
||||
if (!tree) continue;
|
||||
for (const node of tree.nodes) {
|
||||
const pts = build.skills[node.tag] || 0;
|
||||
if (pts > 0) {
|
||||
out[c.id].spent += pts;
|
||||
out[c.id].allocations.push({
|
||||
tag: node.tag,
|
||||
name: node.name,
|
||||
kind: node.kind,
|
||||
points: pts,
|
||||
max: node.maxPoints,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
});
|
||||
|
||||
function resetAllSkills() {
|
||||
if (!confirm('Clear allocated points across ALL classes?')) return;
|
||||
build.skills = {};
|
||||
}
|
||||
|
||||
async function share() {
|
||||
saving.value = true;
|
||||
shareStatus.value = '';
|
||||
|
|
@ -202,11 +250,11 @@ const specMeta: Record<SpecId, { name: string; sym: string }> = {
|
|||
</p>
|
||||
</header>
|
||||
|
||||
<!-- HOUSE + CLASS -->
|
||||
<!-- HOUSE -->
|
||||
<section class="panel">
|
||||
<div class="panel-head">
|
||||
<h2>House & Class</h2>
|
||||
<div class="sub">Identity</div>
|
||||
<h2>House</h2>
|
||||
<div class="sub">Faction allegiance</div>
|
||||
</div>
|
||||
<div class="house-grid">
|
||||
<div
|
||||
|
|
@ -221,31 +269,6 @@ const specMeta: Record<SpecId, { name: string; sym: string }> = {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 22px">
|
||||
<div
|
||||
style="
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 10.5px;
|
||||
letter-spacing: 0.2em;
|
||||
text-transform: uppercase;
|
||||
color: var(--ink-muted);
|
||||
margin-bottom: 8px;
|
||||
"
|
||||
>
|
||||
Class
|
||||
</div>
|
||||
<div class="class-grid">
|
||||
<div
|
||||
v-for="c in CLASSES"
|
||||
:key="c.id"
|
||||
:class="['class-pick', build.classId === c.id ? 'active' : '']"
|
||||
@click="setClass(c.id)"
|
||||
>
|
||||
{{ c.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CHARACTER -->
|
||||
|
|
@ -298,6 +321,7 @@ const specMeta: Record<SpecId, { name: string; sym: string }> = {
|
|||
:table="specTables[s]"
|
||||
:level="build.specs[s].level"
|
||||
:xp-into="build.specs[s].xpInto"
|
||||
show-perks
|
||||
@update:level="(n) => (build.specs[s].level = n)"
|
||||
@update:xp-into="(n) => (build.specs[s].xpInto = n)"
|
||||
/>
|
||||
|
|
@ -322,21 +346,114 @@ const specMeta: Record<SpecId, { name: string; sym: string }> = {
|
|||
/>
|
||||
</section>
|
||||
|
||||
<!-- SKILL TREE -->
|
||||
<!-- SKILL TREES -->
|
||||
<section class="panel">
|
||||
<div class="panel-head">
|
||||
<h2>Skill Tree — {{ CLASSES.find((c) => c.id === build.classId)?.name }}</h2>
|
||||
<div class="sub">Class progression</div>
|
||||
<h2>Skill Trees</h2>
|
||||
<div class="sub">
|
||||
{{ totalSpentAcrossClasses }} / {{ totalSkillPointsAtLevel }} points
|
||||
spent · all 5 classes share one pool
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="class-grid" style="margin-bottom: 18px">
|
||||
<div
|
||||
v-for="c in CLASSES"
|
||||
:key="c.id"
|
||||
:class="['class-pick', build.classId === c.id ? 'active' : '']"
|
||||
@click="setViewedClass(c.id)"
|
||||
>
|
||||
{{ c.name }}
|
||||
<span
|
||||
v-if="summaryByClass[c.id].spent > 0"
|
||||
style="
|
||||
display: block;
|
||||
margin-top: 4px;
|
||||
color: var(--spice);
|
||||
font-size: 10px;
|
||||
"
|
||||
>
|
||||
{{ summaryByClass[c.id].spent }} pt{{
|
||||
summaryByClass[c.id].spent === 1 ? '' : 's'
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<SkillTree
|
||||
:tree="currentTree"
|
||||
:allocations="build.skills"
|
||||
:available-points="totalSkillPointsAtLevel"
|
||||
@update:allocations="(a) => (build.skills = a)"
|
||||
@reset="() => (build.skills = {})"
|
||||
@reset="resetAllSkills"
|
||||
/>
|
||||
</section>
|
||||
|
||||
<!-- SKILL SUMMARY -->
|
||||
<section class="panel">
|
||||
<div class="panel-head">
|
||||
<h2>Skill Summary</h2>
|
||||
<div class="sub">All allocations across classes</div>
|
||||
</div>
|
||||
<div class="cards">
|
||||
<div v-for="c in CLASSES" :key="c.id" class="card">
|
||||
<div class="sym">{{ c.name.toUpperCase().slice(0, 3) }}</div>
|
||||
<h3>
|
||||
{{ c.name }}
|
||||
<span
|
||||
style="
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 12px;
|
||||
color: var(--ink-muted);
|
||||
letter-spacing: 0.12em;
|
||||
margin-left: 8px;
|
||||
"
|
||||
>{{ summaryByClass[c.id].spent }} pts</span
|
||||
>
|
||||
</h3>
|
||||
<div
|
||||
v-if="summaryByClass[c.id].allocations.length === 0"
|
||||
style="color: var(--ink-muted); font-size: 13px; padding: 8px 0"
|
||||
>
|
||||
no points allocated
|
||||
</div>
|
||||
<ul
|
||||
v-else
|
||||
style="
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: grid;
|
||||
gap: 4px;
|
||||
"
|
||||
>
|
||||
<li
|
||||
v-for="a in summaryByClass[c.id].allocations"
|
||||
:key="a.tag"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 12px;
|
||||
padding: 4px 8px;
|
||||
background: var(--bg);
|
||||
border-radius: 3px;
|
||||
border: 1px solid var(--line-soft);
|
||||
"
|
||||
>
|
||||
<span>
|
||||
<span style="color: var(--ink-muted); margin-right: 6px">{{
|
||||
a.kind.slice(0, 3).toUpperCase()
|
||||
}}</span>
|
||||
{{ a.name }}
|
||||
</span>
|
||||
<span style="color: var(--sand)">{{ a.points }}/{{ a.max }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="footer-bar">
|
||||
<div>Unofficial fan-made tool · not affiliated with the publisher</div>
|
||||
<div>Data sourced from dune.gaming.tools snapshots</div>
|
||||
|
|
|
|||
|
|
@ -36,10 +36,22 @@ const gridStyle = computed(() => ({
|
|||
rowGap: `${GAP}px`,
|
||||
}));
|
||||
|
||||
// Total points spent in the entire build (across all 5 trees). Used for the
|
||||
// global budget check.
|
||||
const totalAllocated = computed(() =>
|
||||
Object.values(props.allocations).reduce((a, b) => a + (b || 0), 0),
|
||||
);
|
||||
|
||||
// Points spent inside THIS tree only.
|
||||
const thisTreeAllocated = computed(() => {
|
||||
if (!props.tree) return 0;
|
||||
let n = 0;
|
||||
for (const node of props.tree.nodes) {
|
||||
n += props.allocations[node.tag] || 0;
|
||||
}
|
||||
return n;
|
||||
});
|
||||
|
||||
function centerForNode(row: number, col: number) {
|
||||
const x = (col - 1) * (CELL + GAP) + CELL / 2;
|
||||
const y = (row - 1) * (CELL + GAP) + CELL / 2;
|
||||
|
|
@ -120,8 +132,13 @@ function onContext(tag: string, e: MouseEvent) {
|
|||
color: var(--ink-dim);
|
||||
"
|
||||
>
|
||||
<span style="color: var(--sand)">{{ totalAllocated }}</span> /
|
||||
{{ availablePoints }} skill points spent
|
||||
<span style="color: var(--sand)">{{ thisTreeAllocated }}</span> in this
|
||||
tree
|
||||
<span style="color: var(--ink-muted); margin: 0 8px">·</span>
|
||||
<span :style="{ color: totalAllocated > availablePoints ? 'var(--ember)' : 'var(--ink-dim)' }">
|
||||
{{ totalAllocated }}
|
||||
</span>
|
||||
/ {{ availablePoints }} total
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
|
|
@ -133,7 +150,7 @@ function onContext(tag: string, e: MouseEvent) {
|
|||
>
|
||||
Click +1 · Shift-click / right-click −1
|
||||
</div>
|
||||
<button @click="emit('reset')">Reset Skills</button>
|
||||
<button @click="emit('reset')">Reset All Trees</button>
|
||||
</div>
|
||||
|
||||
<div class="tree-wrap" v-if="tree">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
import type { XpTable } from '../types';
|
||||
import { computed, ref } from 'vue';
|
||||
import type { Perk, XpTable } from '../types';
|
||||
|
||||
const props = defineProps<{
|
||||
title: string;
|
||||
|
|
@ -9,6 +9,7 @@ const props = defineProps<{
|
|||
level: number;
|
||||
xpInto: number;
|
||||
maxLevel?: number;
|
||||
showPerks?: boolean;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
@ -16,6 +17,33 @@ const emit = defineEmits<{
|
|||
'update:xpInto': [n: number];
|
||||
}>();
|
||||
|
||||
const showAllPerks = ref(false);
|
||||
|
||||
interface LeveledPerk extends Perk {
|
||||
unlockLevel: number;
|
||||
}
|
||||
|
||||
const allPerks = computed<LeveledPerk[]>(() => {
|
||||
if (!props.table) return [];
|
||||
const out: LeveledPerk[] = [];
|
||||
for (const r of props.table.rows) {
|
||||
if (r.perks) {
|
||||
for (const p of r.perks) {
|
||||
out.push({ ...p, unlockLevel: r.level });
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
});
|
||||
|
||||
const unlockedPerks = computed(() =>
|
||||
allPerks.value.filter((p) => p.unlockLevel <= props.level),
|
||||
);
|
||||
|
||||
const nextPerk = computed(() =>
|
||||
allPerks.value.find((p) => p.unlockLevel > props.level) || null,
|
||||
);
|
||||
|
||||
const maxLevel = computed(() => props.maxLevel ?? props.table?.rows.length ?? 0);
|
||||
|
||||
const nextRow = computed(() => {
|
||||
|
|
@ -83,5 +111,149 @@ function fmt(n: number): string {
|
|||
<span>Cumulative</span>
|
||||
<span>{{ fmt(cumulativeAtCurrent + xpInto) }} XP</span>
|
||||
</div>
|
||||
|
||||
<div v-if="showPerks && allPerks.length" class="perks-block">
|
||||
<div class="perks-head">
|
||||
<span>Perks Unlocked</span>
|
||||
<span class="count">
|
||||
{{ unlockedPerks.length }} / {{ allPerks.length }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<ul class="perk-list">
|
||||
<li
|
||||
v-for="p in (showAllPerks ? allPerks : unlockedPerks)"
|
||||
:key="`${p.unlockLevel}-${p.name}`"
|
||||
:class="['perk', p.unlockLevel > level ? 'locked' : '']"
|
||||
>
|
||||
<span class="perk-lvl">L{{ p.unlockLevel }}</span>
|
||||
<span class="perk-body">
|
||||
<span class="perk-name">{{ p.name }}</span>
|
||||
<span v-if="p.description" class="perk-desc">
|
||||
{{ p.description }}
|
||||
</span>
|
||||
<span v-if="p.effect || p.bonus" class="perk-effect">
|
||||
<span v-if="p.effect">{{ p.effect }}</span>
|
||||
<span v-if="p.bonus" style="color: var(--sand-2)">
|
||||
{{ p.bonus }}
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="perks-footer">
|
||||
<span v-if="nextPerk && !showAllPerks">
|
||||
Next: <strong>{{ nextPerk.name }}</strong>
|
||||
at L{{ nextPerk.unlockLevel }}
|
||||
</span>
|
||||
<span v-else-if="!nextPerk && !showAllPerks">All perks unlocked</span>
|
||||
<span v-else> </span>
|
||||
<button class="perks-toggle" @click="showAllPerks = !showAllPerks">
|
||||
{{ showAllPerks ? 'Hide locked' : 'Show all' }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.perks-block {
|
||||
margin-top: 14px;
|
||||
padding-top: 12px;
|
||||
border-top: 1px dashed var(--line-soft);
|
||||
}
|
||||
.perks-head {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 10.5px;
|
||||
letter-spacing: 0.18em;
|
||||
text-transform: uppercase;
|
||||
color: var(--ink-muted);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.perks-head .count {
|
||||
color: var(--sand);
|
||||
}
|
||||
.perk-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: grid;
|
||||
gap: 4px;
|
||||
max-height: 220px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.perk-list::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
.perk-list::-webkit-scrollbar-thumb {
|
||||
background: var(--line);
|
||||
border-radius: 3px;
|
||||
}
|
||||
.perk {
|
||||
display: grid;
|
||||
grid-template-columns: 36px 1fr;
|
||||
gap: 8px;
|
||||
padding: 6px 8px;
|
||||
background: var(--bg);
|
||||
border: 1px solid var(--line-soft);
|
||||
border-radius: 3px;
|
||||
}
|
||||
.perk.locked {
|
||||
opacity: 0.42;
|
||||
border-style: dashed;
|
||||
}
|
||||
.perk-lvl {
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 11px;
|
||||
color: var(--sand-2);
|
||||
letter-spacing: 0.08em;
|
||||
align-self: start;
|
||||
padding-top: 1px;
|
||||
}
|
||||
.perk.locked .perk-lvl {
|
||||
color: var(--ink-muted);
|
||||
}
|
||||
.perk-body {
|
||||
display: grid;
|
||||
gap: 2px;
|
||||
}
|
||||
.perk-name {
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
color: var(--ink);
|
||||
}
|
||||
.perk.locked .perk-name {
|
||||
color: var(--ink-dim);
|
||||
}
|
||||
.perk-desc {
|
||||
font-size: 11.5px;
|
||||
color: var(--ink-dim);
|
||||
line-height: 1.35;
|
||||
}
|
||||
.perk-effect {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 11px;
|
||||
color: var(--green);
|
||||
}
|
||||
.perks-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: 8px;
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 10.5px;
|
||||
color: var(--ink-muted);
|
||||
letter-spacing: 0.1em;
|
||||
}
|
||||
.perks-toggle {
|
||||
padding: 4px 10px;
|
||||
font-size: 10px;
|
||||
letter-spacing: 0.16em;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -80,7 +80,9 @@ export function setHouse(h: House) {
|
|||
build.faction = { tier: 0, standingInto: 0 };
|
||||
}
|
||||
|
||||
export function setClass(c: ClassId) {
|
||||
// classId only tracks which tree tab is currently being viewed. Skill points
|
||||
// are a single global pool and the player can allocate into all 5 trees at
|
||||
// once, so switching tabs must NOT clear allocations.
|
||||
export function setViewedClass(c: ClassId) {
|
||||
build.classId = c;
|
||||
build.skills = {}; // skills are per-class
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,15 @@ export type SpecId =
|
|||
| 'gathering'
|
||||
| 'sabotage';
|
||||
|
||||
export interface Perk {
|
||||
name: string;
|
||||
cost?: string;
|
||||
description?: string;
|
||||
effect?: string;
|
||||
bonus?: string;
|
||||
icon?: string;
|
||||
}
|
||||
|
||||
export interface XpRow {
|
||||
level: number;
|
||||
xpRequired: number;
|
||||
|
|
@ -20,6 +29,7 @@ export interface XpRow {
|
|||
totalSkillPoints?: number;
|
||||
intelPoints?: number;
|
||||
totalIntelPoints?: number;
|
||||
perks?: Perk[];
|
||||
}
|
||||
|
||||
export interface XpTable {
|
||||
|
|
@ -71,9 +81,13 @@ export interface SpecProgress {
|
|||
export interface BuildState {
|
||||
v: 1; // schema version
|
||||
house: House;
|
||||
// classId is just the currently viewed skill-tree tab — players allocate
|
||||
// into all 5 trees from a single shared skill-point pool.
|
||||
classId: ClassId;
|
||||
character: { level: number; xpInto: number };
|
||||
specs: Record<SpecId, SpecProgress>;
|
||||
faction: { tier: number; standingInto: number };
|
||||
skills: Record<string, number>; // tag -> allocated points
|
||||
// Allocated skill points keyed by full tag (e.g. Skills.Ability.BattleCry).
|
||||
// Tags are globally unique across classes, so one flat map works for all 5.
|
||||
skills: Record<string, number>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,6 +96,75 @@ def extract_xp_table(path: Path, value_keys: list[str]) -> list[dict]:
|
|||
return {"header": header, "rows": out}
|
||||
|
||||
|
||||
# ---------- specialization perks ----------
|
||||
# Spec tables have a "Rewards" <td> with rich HTML inside. Each row may grant
|
||||
# one or more perks; each perk has a name, optional cost badge, description,
|
||||
# optional effect line, optional cosmetic-unlock flag, and an icon.
|
||||
SPEC_ROW_RE = re.compile(
|
||||
r'<tr><td class="text-center">(?P<lvl>\d+)</td>'
|
||||
r'<td class="text-center">[^<]*</td>'
|
||||
r'<td class="text-center">[^<]*</td>'
|
||||
r'<td>(?P<rewards>.*?)</td></tr>',
|
||||
re.DOTALL,
|
||||
)
|
||||
PERK_BLOCK_RE = re.compile(
|
||||
r'<div class="flex gap-3">(?P<inner>.*?)</div>\s*</div>',
|
||||
re.DOTALL,
|
||||
)
|
||||
PERK_NAME_RE = re.compile(r'<span class="font-medium">([^<]+)</span>')
|
||||
PERK_COST_RE = re.compile(
|
||||
r'<span class="text-xs px-1\.5 py-0\.5 bg-tb-30 rounded">([^<]+)</span>'
|
||||
)
|
||||
PERK_DESC_RE = re.compile(
|
||||
r'<div class="text-sm text-neutral-400[^"]*"[^>]*>([^<]+)</div>'
|
||||
)
|
||||
PERK_EFFECT_RE = re.compile(
|
||||
r'<div class="text-sm text-green-400[^"]*"[^>]*>([^<]+)</div>'
|
||||
)
|
||||
PERK_BONUS_RE = re.compile(
|
||||
r'<div class="text-sm text-yellow-400[^"]*"[^>]*>([^<]+)</div>'
|
||||
)
|
||||
PERK_ICON_RE = re.compile(r'src="\./[^"]*/(t_ui_[^"]+\.webp)"')
|
||||
|
||||
|
||||
def extract_spec_perks(path: Path) -> dict[int, list[dict]]:
|
||||
"""Return {level: [perk, ...]} for a specialization track HTML."""
|
||||
html = path.read_text()
|
||||
out: dict[int, list[dict]] = {}
|
||||
for row_m in SPEC_ROW_RE.finditer(html):
|
||||
lvl = int(row_m.group("lvl"))
|
||||
rewards_html = row_m.group("rewards")
|
||||
# rows with no perks render as <span class="text-gray-500">-</span>
|
||||
if 'text-gray-500' in rewards_html and 'icon-container' not in rewards_html:
|
||||
continue
|
||||
perks: list[dict] = []
|
||||
for blk_m in PERK_BLOCK_RE.finditer(rewards_html):
|
||||
inner = blk_m.group("inner")
|
||||
name = PERK_NAME_RE.search(inner)
|
||||
if not name:
|
||||
continue
|
||||
perk = {"name": name.group(1).strip()}
|
||||
cost = PERK_COST_RE.search(inner)
|
||||
if cost:
|
||||
perk["cost"] = cost.group(1).strip()
|
||||
desc = PERK_DESC_RE.search(inner)
|
||||
if desc:
|
||||
perk["description"] = desc.group(1).strip()
|
||||
effect = PERK_EFFECT_RE.search(inner)
|
||||
if effect:
|
||||
perk["effect"] = effect.group(1).strip()
|
||||
bonus = PERK_BONUS_RE.search(inner)
|
||||
if bonus:
|
||||
perk["bonus"] = bonus.group(1).strip()
|
||||
icon = PERK_ICON_RE.search(inner)
|
||||
if icon:
|
||||
perk["icon"] = icon.group(1)
|
||||
perks.append(perk)
|
||||
if perks:
|
||||
out[lvl] = perks
|
||||
return out
|
||||
|
||||
|
||||
# ---------- skill tree extractor ----------
|
||||
NODE_RE = re.compile(
|
||||
r'<div\s+role="button"[^>]*class="node[^"]*"[^>]*data-tag="(?P<tag>Skills\.[^"]+)"[^>]*'
|
||||
|
|
@ -239,13 +308,18 @@ def main():
|
|||
(OUT / "character-xp.json").write_text(json.dumps(char_xp, indent=2))
|
||||
manifest["xp"]["character"] = "character-xp.json"
|
||||
|
||||
# Specialization XP (5 tracks)
|
||||
# Specialization XP (5 tracks) — also extract perks at each level.
|
||||
specs = ["Combat", "Crafting", "Exploration", "Gathering", "Sabotage"]
|
||||
for spec in specs:
|
||||
src = SAMPLE / f"{spec} Track XP Table - Dune Awakening.html"
|
||||
data = extract_xp_table(
|
||||
SAMPLE / f"{spec} Track XP Table - Dune Awakening.html",
|
||||
["xpRequired", "totalXp", "intelPoints", "totalIntelPoints"],
|
||||
src, ["xpRequired", "totalXp", "intelPoints", "totalIntelPoints"]
|
||||
)
|
||||
perks_by_level = extract_spec_perks(src)
|
||||
for row in data["rows"]:
|
||||
perks = perks_by_level.get(row["level"])
|
||||
if perks:
|
||||
row["perks"] = perks
|
||||
slug = spec.lower()
|
||||
(OUT / f"spec-{slug}.json").write_text(json.dumps(data, indent=2))
|
||||
manifest["xp"][slug] = f"spec-{slug}.json"
|
||||
|
|
|
|||
Loading…
Reference in a new issue