- Add level-up dialog (ApplicationV2) showing features gained per level - Class features with `changes` arrays auto-create Active Effects - Valor I/II/III on Fighter reduces crit threshold cumulatively (-1/-2/-3) - Perk selection UI in dialog (awaits perk compendium content) - Fix duplicate item creation bug (was double drop handling) - Configure proper dragDrop in ActorSheetV2 DEFAULT_OPTIONS - Add ancestries and classes compendium packs with LevelDB format - Docker compose PUID/PGID for proper file permissions Key patterns established: - Class progression stored in item.system.progression[] - Features with changes[] become ActiveEffects on level-up - applyClassFeatures() is idempotent (checks existing effects) - updateClassFeatures() handles level changes incrementally 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
105 lines
4.1 KiB
JSON
Executable File
105 lines
4.1 KiB
JSON
Executable File
{
|
|
"_id": "vagabondClsFighter",
|
|
"_key": "!items!vagabondClsFighter",
|
|
"name": "Fighter",
|
|
"type": "class",
|
|
"img": "icons/svg/sword.svg",
|
|
"system": {
|
|
"description": "<p>Fighters are versatile combatants who excel in any battlefield role. Whether wielding sword or bow, their martial prowess and tactical awareness make them formidable opponents.</p>",
|
|
"keyStat": "might",
|
|
"actionStyle": "attack",
|
|
"zone": "frontline",
|
|
"trainedSkills": ["brawl", "finesse", "detect", "leadership", "sneak"],
|
|
"startingPack": "<p>Gladiator, Knight, Warrior, or Watchman</p>",
|
|
"isCaster": false,
|
|
"progression": [
|
|
{
|
|
"level": 1,
|
|
"mana": 0,
|
|
"castingMax": 0,
|
|
"spellsKnown": 0,
|
|
"features": ["Fighting Style", "Valor I"]
|
|
},
|
|
{ "level": 2, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Momentum"] },
|
|
{ "level": 3, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Perk"] },
|
|
{ "level": 4, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Valor II"] },
|
|
{ "level": 5, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Perk"] },
|
|
{
|
|
"level": 6,
|
|
"mana": 0,
|
|
"castingMax": 0,
|
|
"spellsKnown": 0,
|
|
"features": ["Muster for Battle"]
|
|
},
|
|
{ "level": 7, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Perk"] },
|
|
{ "level": 8, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Valor III"] },
|
|
{ "level": 9, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Perk"] },
|
|
{ "level": 10, "mana": 0, "castingMax": 0, "spellsKnown": 0, "features": ["Harrying"] }
|
|
],
|
|
"features": [
|
|
{
|
|
"name": "Fighting Style",
|
|
"level": 1,
|
|
"description": "<p>You gain the <strong>Situational Awareness Perk</strong> and another Perk with the Melee or Ranged Training Prerequisite. You can ignore Stat prerequisites for this Perk.</p>",
|
|
"passive": true,
|
|
"requiresChoice": true,
|
|
"choiceType": "perk",
|
|
"choiceFilter": { "prerequisite": ["Melee Training", "Ranged Training"] },
|
|
"changes": []
|
|
},
|
|
{
|
|
"name": "Valor I",
|
|
"level": 1,
|
|
"description": "<p>The roll required for you to Crit on Attack Checks, and Saves to Dodge or Block Attacks is reduced by 1.</p>",
|
|
"passive": true,
|
|
"changes": [
|
|
{ "key": "system.attacks.melee.critThreshold", "mode": 2, "value": "-1", "priority": 10 },
|
|
{ "key": "system.attacks.ranged.critThreshold", "mode": 2, "value": "-1", "priority": 10 }
|
|
]
|
|
},
|
|
{
|
|
"name": "Valor II",
|
|
"level": 4,
|
|
"description": "<p>Your Valor improves. The crit threshold reduction increases to -2 total.</p>",
|
|
"passive": true,
|
|
"changes": [
|
|
{ "key": "system.attacks.melee.critThreshold", "mode": 2, "value": "-1", "priority": 10 },
|
|
{ "key": "system.attacks.ranged.critThreshold", "mode": 2, "value": "-1", "priority": 10 }
|
|
]
|
|
},
|
|
{
|
|
"name": "Valor III",
|
|
"level": 8,
|
|
"description": "<p>Your Valor reaches its peak. The crit threshold reduction increases to -3 total.</p>",
|
|
"passive": true,
|
|
"changes": [
|
|
{ "key": "system.attacks.melee.critThreshold", "mode": 2, "value": "-1", "priority": 10 },
|
|
{ "key": "system.attacks.ranged.critThreshold", "mode": 2, "value": "-1", "priority": 10 }
|
|
]
|
|
},
|
|
{
|
|
"name": "Momentum",
|
|
"level": 2,
|
|
"description": "<p>If you pass a Save against an attack, the next attack you make before the end of your next Turn is Favored.</p>",
|
|
"passive": true,
|
|
"changes": []
|
|
},
|
|
{
|
|
"name": "Muster for Battle",
|
|
"level": 6,
|
|
"description": "<p>You have two Actions on your first Turn of Combat.</p>",
|
|
"passive": true,
|
|
"changes": []
|
|
},
|
|
{
|
|
"name": "Harrying",
|
|
"level": 10,
|
|
"description": "<p>You can attack twice with the Attack Action, rather than just once.</p>",
|
|
"passive": true,
|
|
"changes": []
|
|
}
|
|
],
|
|
"customResource": {}
|
|
}
|
|
}
|