dune-tools/character-builder/data/skills-mentat.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": "mentat",
"name": "Mentat",
"subtrees": [
{
"name": "Mental Calculus",
"cols": 5,
"nodes": [
{
"tag": "Skills.Perk.ShieldWeakpoint",
"id": "ShieldWeakpoint",
"name": "Shield Overcharge",
"kind": "Perk",
"row": 1,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_iconskilltreeshieldovercharge_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-shieldweakpoint"
},
{
"tag": "Skills.Perk.ExploitWeakness",
"id": "ExploitWeakness",
"name": "Exploit Weakness",
"kind": "Perk",
"row": 2,
"col": 2,
"maxPoints": 1,
"icon": "t_ui_iconskilltreespiceeffectexploitweakness_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-exploitweakness"
},
{
"tag": "Skills.Attribute.MentalCalculus5",
"id": "MentalCalculus5",
"name": "Rifle Damage",
"kind": "Attribute",
"row": 2,
"col": 4,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamagebonusscattergun_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-mentalcalculus5"
},
{
"tag": "Skills.Attribute.MentalCalculus3",
"id": "MentalCalculus3",
"name": "Tailoring",
"kind": "Attribute",
"row": 3,
"col": 1,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributerepairefficiency_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-mentalcalculus3"
},
{
"tag": "Skills.Perk.HeadShots",
"id": "HeadShots",
"name": "Marksman",
"kind": "Perk",
"row": 3,
"col": 3,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeperkmarksman_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-headshots"
},
{
"tag": "Skills.Attribute.MentalCalculus4",
"id": "MentalCalculus4",
"name": "Pistol Damage",
"kind": "Attribute",
"row": 3,
"col": 5,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamagebonusgun_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-mentalcalculus4"
},
{
"tag": "Skills.Attribute.MentalCalculus1",
"id": "MentalCalculus1",
"name": "Garment Keeper",
"kind": "Attribute",
"row": 4,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributerepair_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-mentalcalculus1"
},
{
"tag": "Skills.Attribute.MentalCalculus2",
"id": "MentalCalculus2",
"name": "Ranged Damage",
"kind": "Attribute",
"row": 4,
"col": 4,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamage_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-mentalcalculus2"
},
{
"tag": "Skills.Ability.TurretSeeker",
"id": "TurretSeeker",
"name": "The Sentinel",
"kind": "Ability",
"row": 5,
"col": 3,
"maxPoints": 3,
"icon": "t_ui_iconabilityturretseeker_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-turretseeker"
}
],
"edges": [
{
"from": "Skills.Perk.ExploitWeakness",
"to": "Skills.Perk.ShieldWeakpoint"
},
{
"from": "Skills.Attribute.MentalCalculus5",
"to": "Skills.Perk.ShieldWeakpoint"
},
{
"from": "Skills.Attribute.MentalCalculus3",
"to": "Skills.Perk.ExploitWeakness"
},
{
"from": "Skills.Perk.ExploitWeakness",
"to": "Skills.Perk.HeadShots"
},
{
"from": "Skills.Attribute.MentalCalculus5",
"to": "Skills.Perk.HeadShots"
},
{
"from": "Skills.Attribute.MentalCalculus4",
"to": "Skills.Attribute.MentalCalculus5"
},
{
"from": "Skills.Attribute.MentalCalculus1",
"to": "Skills.Attribute.MentalCalculus3"
},
{
"from": "Skills.Attribute.MentalCalculus1",
"to": "Skills.Perk.HeadShots"
},
{
"from": "Skills.Attribute.MentalCalculus2",
"to": "Skills.Perk.HeadShots"
},
{
"from": "Skills.Attribute.MentalCalculus2",
"to": "Skills.Attribute.MentalCalculus4"
},
{
"from": "Skills.Ability.TurretSeeker",
"to": "Skills.Attribute.MentalCalculus1"
},
{
"from": "Skills.Ability.TurretSeeker",
"to": "Skills.Attribute.MentalCalculus2"
}
]
},
{
"name": "Assassination",
"cols": 3,
"nodes": [
{
"tag": "Skills.Ability.HunterSeeker",
"id": "HunterSeeker",
"name": "Hunter-Seeker",
"kind": "Ability",
"row": 1,
"col": 2,
"maxPoints": 1,
"icon": "t_ui_icongadgethunterseeker_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-hunterseeker"
},
{
"tag": "Skills.Perk.PoisonTooth",
"id": "PoisonTooth",
"name": "Poison Tooth",
"kind": "Perk",
"row": 2,
"col": 1,
"maxPoints": 3,
"icon": "t_ui_iconskilltreepoisontooth_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-poisontooth"
},
{
"tag": "Skills.Ability.StunDart",
"id": "StunDart",
"name": "Stunner",
"kind": "Ability",
"row": 2,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_iconabilitystunnerdart_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-stundart"
},
{
"tag": "Skills.Attribute.Assassination2",
"id": "Assassination2",
"name": "Assassin&#39;s Shot",
"kind": "Attribute",
"row": 3,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributedamage_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-assassination2"
},
{
"tag": "Skills.Ability.PoisonMine",
"id": "PoisonMine",
"name": "Poison Mine",
"kind": "Ability",
"row": 4,
"col": 1,
"maxPoints": 3,
"icon": "t_ui_iconabilitypoisonmine_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-poisonmine"
},
{
"tag": "Skills.Attribute.Assassination1",
"id": "Assassination1",
"name": "Headshot Damage",
"kind": "Attribute",
"row": 4,
"col": 3,
"maxPoints": 3,
"icon": "t_ui_iconskilltreeattributeheadshotbonus_d.webp",
"url": "https://dune.gaming.tools/skills/skills-attribute-assassination1"
},
{
"tag": "Skills.Ability.PoisonCapsuleLauncher",
"id": "PoisonCapsuleLauncher",
"name": "Poison Capsule",
"kind": "Ability",
"row": 5,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_icongadgetpoisoncapsulelauncher_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-poisoncapsulelauncher"
}
],
"edges": [
{
"from": "Skills.Ability.HunterSeeker",
"to": "Skills.Perk.PoisonTooth"
},
{
"from": "Skills.Ability.HunterSeeker",
"to": "Skills.Ability.StunDart"
},
{
"from": "Skills.Attribute.Assassination2",
"to": "Skills.Perk.PoisonTooth"
},
{
"from": "Skills.Ability.PoisonMine",
"to": "Skills.Perk.PoisonTooth"
},
{
"from": "Skills.Ability.StunDart",
"to": "Skills.Attribute.Assassination2"
},
{
"from": "Skills.Ability.StunDart",
"to": "Skills.Attribute.Assassination1"
},
{
"from": "Skills.Ability.PoisonMine",
"to": "Skills.Attribute.Assassination2"
},
{
"from": "Skills.Attribute.Assassination1",
"to": "Skills.Attribute.Assassination2"
},
{
"from": "Skills.Ability.PoisonCapsuleLauncher",
"to": "Skills.Ability.PoisonMine"
},
{
"from": "Skills.Ability.PoisonCapsuleLauncher",
"to": "Skills.Attribute.Assassination1"
}
]
},
{
"name": "Tactician",
"cols": 3,
"nodes": [
{
"tag": "Skills.Ability.PortableGenerator",
"id": "PortableGenerator",
"name": "Source of Power",
"kind": "Ability",
"row": 1,
"col": 2,
"maxPoints": 1,
"icon": "t_ui_iconabilityportablegenerator_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-portablegenerator"
},
{
"tag": "Skills.Ability.SuspensorMine_Reduction",
"id": "SuspensorMine_Reduction",
"name": "Anti-gravity Mine",
"kind": "Ability",
"row": 2,
"col": 1,
"maxPoints": 1,
"icon": "t_ui_icongadgetreductionremotemine_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-suspensormine_reduction"
},
{
"tag": "Skills.Perk.IronWill",
"id": "IronWill",
"name": "Iron Will",
"kind": "Perk",
"row": 2,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_iconskilltreeironwill_d.webp",
"url": "https://dune.gaming.tools/skills/skills-perk-ironwill"
},
{
"tag": "Skills.Ability.SuspensorMine_Amplification",
"id": "SuspensorMine_Amplification",
"name": "Gravity Mine",
"kind": "Ability",
"row": 4,
"col": 1,
"maxPoints": 1,
"icon": "t_ui_icongadgetamplificationremotemine_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-suspensormine_amplification"
},
{
"tag": "Skills.Ability.SolidoDecoy",
"id": "SolidoDecoy",
"name": "Solido Decoy",
"kind": "Ability",
"row": 4,
"col": 3,
"maxPoints": 1,
"icon": "t_ui_iconabilitysolidodecoy_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-solidodecoy"
},
{
"tag": "Skills.Ability.SuspensorWall",
"id": "SuspensorWall",
"name": "Shield Wall",
"kind": "Ability",
"row": 5,
"col": 2,
"maxPoints": 3,
"icon": "t_ui_iconabilitysuspensorwall_d.webp",
"url": "https://dune.gaming.tools/skills/skills-ability-suspensorwall"
}
],
"edges": [
{
"from": "Skills.Ability.PortableGenerator",
"to": "Skills.Ability.SuspensorMine_Reduction"
},
{
"from": "Skills.Ability.PortableGenerator",
"to": "Skills.Perk.IronWill"
},
{
"from": "Skills.Ability.SuspensorMine_Amplification",
"to": "Skills.Ability.SuspensorMine_Reduction"
},
{
"from": "Skills.Ability.SolidoDecoy",
"to": "Skills.Perk.IronWill"
},
{
"from": "Skills.Ability.SuspensorMine_Amplification",
"to": "Skills.Ability.SuspensorWall"
},
{
"from": "Skills.Ability.SolidoDecoy",
"to": "Skills.Ability.SuspensorWall"
}
]
}
]
}