extract.py now also copies every referenced icon webp from sample-data into character-builder/frontend/public/icons/ so Vite bundles them with the SPA (serves at /icons/<filename>.webp). 154 icons (91 skill + 63 perk) end up in the build, ~668 KB total. SkillTree nodes show the skill's icon centered in the node instead of the name text (name moves below the node as a label). Hovered / allocated / maxed states change icon brightness and saturation, with a sand-colored drop-shadow on maxed nodes. XpProgressCard renders the perk icon to the left of each perk's text. Locked perks desaturate the icon. The grid grows from 2 columns to 3 to accommodate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
57 lines
No EOL
1.2 KiB
JSON
57 lines
No EOL
1.2 KiB
JSON
{
|
|
"xp": {
|
|
"character": "character-xp.json",
|
|
"combat": "spec-combat.json",
|
|
"crafting": "spec-crafting.json",
|
|
"exploration": "spec-exploration.json",
|
|
"gathering": "spec-gathering.json",
|
|
"sabotage": "spec-sabotage.json"
|
|
},
|
|
"factions": {
|
|
"atreides": "faction-atreides.json",
|
|
"harkonnen": "faction-harkonnen.json"
|
|
},
|
|
"skills": [
|
|
{
|
|
"id": "benegesserit",
|
|
"name": "Bene Gesserit",
|
|
"file": "skills-benegesserit.json",
|
|
"nodes": 22,
|
|
"edges": 23
|
|
},
|
|
{
|
|
"id": "mentat",
|
|
"name": "Mentat",
|
|
"file": "skills-mentat.json",
|
|
"nodes": 22,
|
|
"edges": 22
|
|
},
|
|
{
|
|
"id": "planetologist",
|
|
"name": "Planetologist",
|
|
"file": "skills-planetologist.json",
|
|
"nodes": 20,
|
|
"edges": 10
|
|
},
|
|
{
|
|
"id": "swordmaster",
|
|
"name": "Swordmaster",
|
|
"file": "skills-swordmaster.json",
|
|
"nodes": 22,
|
|
"edges": 22
|
|
},
|
|
{
|
|
"id": "trooper",
|
|
"name": "Trooper",
|
|
"file": "skills-trooper.json",
|
|
"nodes": 22,
|
|
"edges": 22
|
|
}
|
|
],
|
|
"icons": {
|
|
"directory": "frontend/public/icons",
|
|
"served_at": "/icons/",
|
|
"count": 154,
|
|
"missing": []
|
|
}
|
|
} |