Initial TTRPG character meta-builder with visual sheet editor.
Offline Electron app seeds 10 system presets, supports create-from-scratch designer with palette/drag/resize/bricks, and exports .ttrpg-system.json for the player. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"format": "ttrpg-system",
|
||||
"formatVersion": 1,
|
||||
"id": "dnd5e-srd",
|
||||
"name": "D&D 5e (SRD scaffold)",
|
||||
"description": "Fan mechanical scaffold inspired by D&D 5e SRD. Spell compendium filled separately from open sources / user import.",
|
||||
"edition": "5e",
|
||||
"schemaVersion": 1,
|
||||
"revision": 1,
|
||||
"bricks": {
|
||||
"attributes": [
|
||||
{ "key": "str", "label": "Strength", "scale": "numeric", "min": 8, "max": 15, "default": 10, "category": "physical" },
|
||||
{ "key": "dex", "label": "Dexterity", "scale": "numeric", "min": 8, "max": 15, "default": 10, "category": "physical" },
|
||||
{ "key": "con", "label": "Constitution", "scale": "numeric", "min": 8, "max": 15, "default": 10, "category": "physical" },
|
||||
{ "key": "int", "label": "Intelligence", "scale": "numeric", "min": 8, "max": 15, "default": 10, "category": "mental" },
|
||||
{ "key": "wis", "label": "Wisdom", "scale": "numeric", "min": 8, "max": 15, "default": 10, "category": "mental" },
|
||||
{ "key": "cha", "label": "Charisma", "scale": "numeric", "min": 8, "max": 15, "default": 10, "category": "social" }
|
||||
],
|
||||
"skills": [
|
||||
{ "key": "athletics", "label": "Athletics", "linkedAttribute": "str", "scale": "numeric", "default": 0 },
|
||||
{ "key": "acrobatics", "label": "Acrobatics", "linkedAttribute": "dex", "scale": "numeric", "default": 0 },
|
||||
{ "key": "stealth", "label": "Stealth", "linkedAttribute": "dex", "scale": "numeric", "default": 0 },
|
||||
{ "key": "arcana", "label": "Arcana", "linkedAttribute": "int", "scale": "numeric", "default": 0 },
|
||||
{ "key": "perception", "label": "Perception", "linkedAttribute": "wis", "scale": "numeric", "default": 0 },
|
||||
{ "key": "persuasion", "label": "Persuasion", "linkedAttribute": "cha", "scale": "numeric", "default": 0 }
|
||||
],
|
||||
"resources": [
|
||||
{ "key": "hp", "label": "Hit Points", "min": 0, "default": 10, "track": true },
|
||||
{ "key": "hpMax", "label": "HP Max", "min": 1, "default": 10 },
|
||||
{ "key": "hitDice", "label": "Hit Dice", "min": 0, "default": 1 }
|
||||
],
|
||||
"derived": [
|
||||
{ "key": "strMod", "label": "STR Mod", "formula": "floor((attr.str - 10) / 2)", "dependsOn": ["attr.str"] },
|
||||
{ "key": "dexMod", "label": "DEX Mod", "formula": "floor((attr.dex - 10) / 2)", "dependsOn": ["attr.dex"] },
|
||||
{ "key": "conMod", "label": "CON Mod", "formula": "floor((attr.con - 10) / 2)", "dependsOn": ["attr.con"] },
|
||||
{ "key": "intMod", "label": "INT Mod", "formula": "floor((attr.int - 10) / 2)", "dependsOn": ["attr.int"] },
|
||||
{ "key": "wisMod", "label": "WIS Mod", "formula": "floor((attr.wis - 10) / 2)", "dependsOn": ["attr.wis"] },
|
||||
{ "key": "chaMod", "label": "CHA Mod", "formula": "floor((attr.cha - 10) / 2)", "dependsOn": ["attr.cha"] },
|
||||
{ "key": "initiative", "label": "Initiative", "formula": "derived.dexMod", "dependsOn": ["derived.dexMod"] }
|
||||
],
|
||||
"traits": [
|
||||
{ "key": "race", "label": "Species" },
|
||||
{ "key": "class", "label": "Class" },
|
||||
{ "key": "background", "label": "Background" }
|
||||
],
|
||||
"progression": {
|
||||
"label": "Class features",
|
||||
"graph": {
|
||||
"nodes": [
|
||||
{ "id": "l1", "label": "Level 1 Feature", "kind": "feat", "position": { "x": 0, "y": 0 } },
|
||||
{ "id": "l2", "label": "Level 2 Feature", "kind": "feat", "position": { "x": 220, "y": 0 } }
|
||||
],
|
||||
"edges": [{ "id": "e1", "source": "l1", "target": "l2", "kind": "prerequisite" }]
|
||||
}
|
||||
}
|
||||
},
|
||||
"creationRules": [
|
||||
{
|
||||
"id": "pb",
|
||||
"type": "point_buy",
|
||||
"appliesTo": "attribute",
|
||||
"params": {
|
||||
"budget": 27,
|
||||
"keys": ["str", "dex", "con", "int", "wis", "cha"],
|
||||
"costs": { "8": 0, "9": 1, "10": 2, "11": 3, "12": 4, "13": 5, "14": 7, "15": 9 }
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "roll",
|
||||
"type": "roll",
|
||||
"appliesTo": "attribute",
|
||||
"params": { "expr": "4d6dl", "keys": ["str", "dex", "con", "int", "wis", "cha"], "min": 3, "max": 18 }
|
||||
}
|
||||
],
|
||||
"sheetLayout": {
|
||||
"pageSize": "fluid",
|
||||
"grid": { "size": 8 },
|
||||
"pages": [
|
||||
{
|
||||
"id": "main",
|
||||
"label": "Main",
|
||||
"widgets": [
|
||||
{ "id": "title", "type": "section", "frame": { "x": 16, "y": 16, "w": 320, "h": 36 }, "props": { "title": "D&D 5e Character" } },
|
||||
{ "id": "str", "type": "number", "bind": "attr.str", "frame": { "x": 16, "y": 64, "w": 90, "h": 70 }, "props": { "label": "STR" } },
|
||||
{ "id": "strMod", "type": "modBadge", "bind": "derived.strMod", "frame": { "x": 16, "y": 140, "w": 90, "h": 56 }, "props": { "label": "Mod" } },
|
||||
{ "id": "dex", "type": "number", "bind": "attr.dex", "frame": { "x": 116, "y": 64, "w": 90, "h": 70 }, "props": { "label": "DEX" } },
|
||||
{ "id": "con", "type": "number", "bind": "attr.con", "frame": { "x": 216, "y": 64, "w": 90, "h": 70 }, "props": { "label": "CON" } },
|
||||
{ "id": "int", "type": "number", "bind": "attr.int", "frame": { "x": 316, "y": 64, "w": 90, "h": 70 }, "props": { "label": "INT" } },
|
||||
{ "id": "wis", "type": "number", "bind": "attr.wis", "frame": { "x": 416, "y": 64, "w": 90, "h": 70 }, "props": { "label": "WIS" } },
|
||||
{ "id": "cha", "type": "number", "bind": "attr.cha", "frame": { "x": 516, "y": 64, "w": 90, "h": 70 }, "props": { "label": "CHA" } },
|
||||
{ "id": "hp", "type": "track", "bind": "resource.hp", "frame": { "x": 16, "y": 220, "w": 240, "h": 80 }, "props": { "label": "HP", "max": 30 } },
|
||||
{ "id": "skills", "type": "skillList", "frame": { "x": 280, "y": 220, "w": 320, "h": 260 } },
|
||||
{ "id": "notes", "type": "notes", "bind": "meta.notes", "frame": { "x": 16, "y": 320, "w": 240, "h": 160 } }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"compendium": {
|
||||
"spells": [
|
||||
{
|
||||
"id": "light",
|
||||
"name": "Light",
|
||||
"level": 0,
|
||||
"school": "evocation",
|
||||
"source": "SRD",
|
||||
"description": "Placeholder SRD cantrip stub — replace via dnd.su PHB import pipeline."
|
||||
},
|
||||
{
|
||||
"id": "mage-armor",
|
||||
"name": "Mage Armor",
|
||||
"level": 1,
|
||||
"school": "abjuration",
|
||||
"source": "SRD",
|
||||
"description": "Placeholder SRD spell stub."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user