dune-tools/character-builder/data/skills-trooper.json
Vantz Stockwell f142725dd8 Skill tree: subtrees, loadout slots, label fix
Skill trees now render the way the source does: each class has three named
subtrees (e.g. Swordmaster: The Blade / The Will / The Way), each with its
own 3-col or 5-col grid, sized in 72px cells. Extractor parses subtrees
separately so the per-tree row/col coordinates are correct (previously all
22 nodes were stacked on one combined grid and overlapped). Connector
edges are mapped per-subtree too.

Loadout: new global 3-ability + 3-technique slot row at the bottom of the
Skill Trees panel. The cap is global across all 5 classes (matches the
source HTML which has `id=active-Ability-N` / `id=active-Technique-N`
without per-tree scope). Click a slot to pick from any allocated Ability
or Spice (for Ability slots) or any allocated Perk (for Technique slots);
right-click clears. Slot backgrounds use the local ability.png /
technique.png artwork copied into /icons.

Label overlap fix: constrained the name label under each node to the node
width (72px) and bumped the vertical gap from 44 to 60px so 2-3 line names
have room without bleeding into the row below.

Existing saved builds migrate cleanly — loadout normalizes to length-3
slot arrays if absent or malformed.

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

384 lines
No EOL
12 KiB
JSON

{
"id": "trooper",
"name": "Trooper",
"subtrees": [
{
"name": "Gunnery",
"cols": 5,
"nodes": [
{
"tag": "Skills.Ability.EnergyCapsule",
"id": "EnergyCapsule",
"name": "Energy Capsule",
"kind": "Ability",
"row": 1,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_iconabilityenergycapsule_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-energycapsule"
},
{
"tag": "Skills.Attribute.Weaponry5",
"id": "Weaponry5",
"name": "Heavy Weapon Damage",
"kind": "Attribute",
"row": 2,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamagebonusheavyweapon_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-weaponry5"
},
{
"tag": "Skills.Attribute.Weaponry6",
"id": "Weaponry6",
"name": "Gunsmith",
"kind": "Attribute",
"row": 2,
"col": 4,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributerepairefficiency_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-weaponry6"
},
{
"tag": "Skills.Perk.HeavyWeaponNaib",
"id": "HeavyWeaponNaib",
"name": "Heavy Weapon Agility",
"kind": "Perk",
"row": 3,
"col": 1,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeperkheavyweaponnaib_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-heavyweaponnaib"
},
{
"tag": "Skills.Attribute.Weaponry3",
"id": "Weaponry3",
"name": "Scattergun Damage",
"kind": "Attribute",
"row": 3,
"col": 3,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamagebonusrifle_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-weaponry3"
},
{
"tag": "Skills.Attribute.Weaponry4",
"id": "Weaponry4",
"name": "Field Maintenance",
"kind": "Attribute",
"row": 3,
"col": 5,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributerepair_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-weaponry4"
},
{
"tag": "Skills.Attribute.Weaponry2",
"id": "Weaponry2",
"name": "Disruptor Damage",
"kind": "Attribute",
"row": 4,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamagebonussmg_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-weaponry2"
},
{
"tag": "Skills.Perk.BodyShots",
"id": "BodyShots",
"name": "Center of Mass",
"kind": "Perk",
"row": 4,
"col": 4,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeperkcentralaim_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-bodyshots"
},
{
"tag": "Skills.Attribute.Weaponry1",
"id": "Weaponry1",
"name": "Ranged Damage",
"kind": "Attribute",
"row": 5,
"col": 3,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamage_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-weaponry1"
}
],
"edges": [
{
"from": "Skills.Ability.EnergyCapsule",
"to": "Skills.Attribute.Weaponry5"
},
{
"from": "Skills.Ability.EnergyCapsule",
"to": "Skills.Attribute.Weaponry6"
},
{
"from": "Skills.Attribute.Weaponry5",
"to": "Skills.Perk.HeavyWeaponNaib"
},
{
"from": "Skills.Attribute.Weaponry3",
"to": "Skills.Attribute.Weaponry5"
},
{
"from": "Skills.Attribute.Weaponry3",
"to": "Skills.Attribute.Weaponry6"
},
{
"from": "Skills.Attribute.Weaponry4",
"to": "Skills.Attribute.Weaponry6"
},
{
"from": "Skills.Attribute.Weaponry2",
"to": "Skills.Perk.HeavyWeaponNaib"
},
{
"from": "Skills.Attribute.Weaponry2",
"to": "Skills.Attribute.Weaponry3"
},
{
"from": "Skills.Attribute.Weaponry3",
"to": "Skills.Perk.BodyShots"
},
{
"from": "Skills.Attribute.Weaponry4",
"to": "Skills.Perk.BodyShots"
},
{
"from": "Skills.Attribute.Weaponry1",
"to": "Skills.Attribute.Weaponry2"
},
{
"from": "Skills.Attribute.Weaponry1",
"to": "Skills.Perk.BodyShots"
}
]
},
{
"name": "Suspensor Training",
"cols": 3,
"nodes": [
{
"tag": "Skills.Ability.SuspensorBlast",
"id": "SuspensorBlast",
"name": "Suspensor Blast",
"kind": "Ability",
"row": 1,
"col": 2,
"maxPoints": 1,
"icon": "t_ui_iconabilitysuspensorblast_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-suspensorblast"
},
{
"tag": "Skills.Perk.DeathFromAbove",
"id": "DeathFromAbove",
"name": "Death from Above",
"kind": "Perk",
"row": 2,
"col": 1,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeperkdeathfromabove_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-deathfromabove"
},
{
"tag": "Skills.Ability.CollapseGrenade",
"id": "CollapseGrenade",
"name": "Collapse Grenade",
"kind": "Ability",
"row": 2,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_iconabilitycollapsegrenade_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-collapsegrenade"
},
{
"tag": "Skills.Attribute.SuspensorTech1",
"id": "SuspensorTech1",
"name": "Suspensor Efficiency",
"kind": "Attribute",
"row": 3,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeskillpowerefficiency_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-suspensortech1"
},
{
"tag": "Skills.Perk.SuspensorDash",
"id": "SuspensorDash",
"name": "Suspensor Dash",
"kind": "Perk",
"row": 4,
"col": 1,
"maxPoints": 1,
"icon": "t_ui_iconskilltreesuspensordash_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-suspensordash"
},
{
"tag": "Skills.Ability.SuspensorGrenade_Amplification",
"id": "SuspensorGrenade_Amplification",
"name": "Gravity Field",
"kind": "Ability",
"row": 4,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_icongadgetamplificationgrenade_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-suspensorgrenade_amplification"
},
{
"tag": "Skills.Ability.SuspensorGrenade_Reduction",
"id": "SuspensorGrenade_Reduction",
"name": "Anti-gravity Field",
"kind": "Ability",
"row": 5,
"col": 2,
"maxPoints": 1,
"icon": "t_ui_icongadgetreductionsuspensorgrenade_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-suspensorgrenade_reduction"
}
],
"edges": [
{
"from": "Skills.Ability.SuspensorBlast",
"to": "Skills.Perk.DeathFromAbove"
},
{
"from": "Skills.Ability.CollapseGrenade",
"to": "Skills.Ability.SuspensorBlast"
},
{
"from": "Skills.Attribute.SuspensorTech1",
"to": "Skills.Perk.DeathFromAbove"
},
{
"from": "Skills.Perk.DeathFromAbove",
"to": "Skills.Perk.SuspensorDash"
},
{
"from": "Skills.Ability.CollapseGrenade",
"to": "Skills.Attribute.SuspensorTech1"
},
{
"from": "Skills.Ability.CollapseGrenade",
"to": "Skills.Ability.SuspensorGrenade_Amplification"
},
{
"from": "Skills.Attribute.SuspensorTech1",
"to": "Skills.Perk.SuspensorDash"
},
{
"from": "Skills.Ability.SuspensorGrenade_Amplification",
"to": "Skills.Attribute.SuspensorTech1"
},
{
"from": "Skills.Ability.SuspensorGrenade_Reduction",
"to": "Skills.Perk.SuspensorDash"
},
{
"from": "Skills.Ability.SuspensorGrenade_Amplification",
"to": "Skills.Ability.SuspensorGrenade_Reduction"
}
]
},
{
"name": "Tactical Tech",
"cols": 3,
"nodes": [
{
"tag": "Skills.Spice.GadgetReload",
"id": "GadgetReload",
"name": "Reflexive Reload",
"kind": "Spice",
"row": 1,
"col": 2,
"maxPoints": 1,
"icon": "t_ui_iconskilltreereflexivereload_d.webp",
"url": "https://dune.gaming.tools/skills/skills-spice-gadgetreload"
},
{
"tag": "Skills.Ability.AssaultSeeker",
"id": "AssaultSeeker",
"name": "Assault Seeker",
"kind": "Ability",
"row": 2,
"col": 1,
"maxPoints": 3,
"icon": "t_ui_iconabilityassaultseeker_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-assaultseeker"
},
{
"tag": "Skills.Ability.MagneticAttractor",
"id": "MagneticAttractor",
"name": "Attractor Field",
"kind": "Ability",
"row": 2,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_icongadgetshigmultitoolmagneticattractor_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-magneticattractor"
},
{
"tag": "Skills.Ability.FragGrenade",
"id": "FragGrenade",
"name": "Explosive Grenade",
"kind": "Ability",
"row": 4,
"col": 1,
"maxPoints": 3,
"icon": "t_ui_icongadgetfraggrenades_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-fraggrenade"
},
{
"tag": "Skills.Perk.TrooperCooldowns",
"id": "TrooperCooldowns",
"name": "Battle Hardened",
"kind": "Perk",
"row": 4,
"col": 3,
"maxPoints": 3,
"icon": "t_ui_iconskilltreetroopercooldown_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-troopercooldowns"
},
{
"tag": "Skills.Ability.CablePull",
"id": "CablePull",
"name": "Shigawire Claw",
"kind": "Ability",
"row": 5,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_icongadgetshigmultitoolsardaukarpull_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-cablepull"
}
],
"edges": [
{
"from": "Skills.Ability.AssaultSeeker",
"to": "Skills.Spice.GadgetReload"
},
{
"from": "Skills.Ability.MagneticAttractor",
"to": "Skills.Spice.GadgetReload"
},
{
"from": "Skills.Ability.AssaultSeeker",
"to": "Skills.Ability.FragGrenade"
},
{
"from": "Skills.Ability.MagneticAttractor",
"to": "Skills.Perk.TrooperCooldowns"
},
{
"from": "Skills.Ability.CablePull",
"to": "Skills.Ability.FragGrenade"
},
{
"from": "Skills.Ability.CablePull",
"to": "Skills.Perk.TrooperCooldowns"
}
]
}
]
}