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:
Ivan Fontosh
2026-09-12 14:49:31 +08:00
commit d1f180ee0a
44 changed files with 10548 additions and 0 deletions
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "alien",
"name": "Alien RPG",
"description": "Year Zero stress and career. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Alien RPG"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "bitd",
"name": "Blades in the Dark",
"description": "Action ratings, stress, harm, clocks. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Blades in the Dark"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "coc",
"name": "Call of Cthulhu",
"description": "Investigators, percentiles, Sanity. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Call of Cthulhu"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "cyberpunk-red",
"name": "Cyberpunk RED",
"description": "STATs, role, humanity, net page. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Cyberpunk RED"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}
+118
View File
@@ -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."
}
]
}
}
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "pf2e",
"name": "Pathfinder 2e",
"description": "Proficiency ranks, feats graph. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Pathfinder 2e"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}
+62
View File
@@ -0,0 +1,62 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "shadowdark",
"name": "Shadowdark RPG",
"description": "Minimalist dark fantasy fan schema (mechanical scaffold).",
"edition": "1e-fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{ "key": "str", "label": "STR", "scale": "numeric", "min": 3, "max": 18, "default": 10, "category": "physical" },
{ "key": "dex", "label": "DEX", "scale": "numeric", "min": 3, "max": 18, "default": 10, "category": "physical" },
{ "key": "con", "label": "CON", "scale": "numeric", "min": 3, "max": 18, "default": 10, "category": "physical" },
{ "key": "int", "label": "INT", "scale": "numeric", "min": 3, "max": 18, "default": 10, "category": "mental" },
{ "key": "wis", "label": "WIS", "scale": "numeric", "min": 3, "max": 18, "default": 10, "category": "mental" },
{ "key": "cha", "label": "CHA", "scale": "numeric", "min": 3, "max": 18, "default": 10, "category": "social" }
],
"resources": [
{ "key": "hp", "label": "HP", "min": 0, "default": 8, "track": true },
{ "key": "hpMax", "label": "HP Max", "min": 1, "default": 8 }
],
"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"] }
],
"traits": [
{ "key": "ancestry", "label": "Ancestry" },
{ "key": "class", "label": "Class" }
]
},
"creationRules": [
{
"id": "roll",
"type": "roll",
"appliesTo": "attribute",
"params": { "expr": "3d6", "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": 280, "h": 36 }, "props": { "title": "Shadowdark" } },
{ "id": "str", "type": "number", "bind": "attr.str", "frame": { "x": 16, "y": 64, "w": 90, "h": 70 }, "props": { "label": "STR" } },
{ "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": 16, "y": 144, "w": 90, "h": 70 }, "props": { "label": "INT" } },
{ "id": "wis", "type": "number", "bind": "attr.wis", "frame": { "x": 116, "y": 144, "w": 90, "h": 70 }, "props": { "label": "WIS" } },
{ "id": "cha", "type": "number", "bind": "attr.cha", "frame": { "x": 216, "y": 144, "w": 90, "h": 70 }, "props": { "label": "CHA" } },
{ "id": "hp", "type": "track", "bind": "resource.hp", "frame": { "x": 320, "y": 64, "w": 200, "h": 80 }, "props": { "label": "HP", "max": 20 } },
{ "id": "notes", "type": "notes", "bind": "meta.notes", "frame": { "x": 16, "y": 240, "w": 500, "h": 140 } }
]
}
]
}
}
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "sw-d20",
"name": "Star Wars RPG (d20)",
"description": "d20-line abilities and powers. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Star Wars RPG (d20)"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "vtm",
"name": "Vampire: The Masquerade",
"description": "Dots attributes, disciplines, blood pool. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Vampire: The Masquerade"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}
+177
View File
@@ -0,0 +1,177 @@
{
"format": "ttrpg-system",
"formatVersion": 1,
"id": "wfrp",
"name": "Warhammer Fantasy Roleplay",
"description": "Careers, % advances, wounds. Fan mechanical scaffold.",
"edition": "fan",
"schemaVersion": 1,
"revision": 1,
"bricks": {
"attributes": [
{
"key": "str",
"label": "STR",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "dex",
"label": "DEX",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
},
{
"key": "mind",
"label": "Mind",
"scale": "numeric",
"min": 1,
"max": 10,
"default": 2
}
],
"resources": [
{
"key": "hp",
"label": "HP",
"min": 0,
"default": 10,
"track": true
}
],
"derived": [
{
"key": "strMod",
"label": "STR Mod",
"formula": "attr.str",
"dependsOn": [
"attr.str"
]
}
],
"progression": {
"label": "Features",
"graph": {
"nodes": [
{
"id": "n1",
"label": "Start",
"kind": "feat",
"position": {
"x": 0,
"y": 0
}
},
{
"id": "n2",
"label": "Advance",
"kind": "feat",
"position": {
"x": 200,
"y": 0
}
}
],
"edges": [
{
"id": "e1",
"source": "n1",
"target": "n2",
"kind": "prerequisite"
}
]
}
}
},
"creationRules": [
{
"id": "arr",
"type": "array",
"appliesTo": "attribute",
"params": {
"array": [
3,
2,
2
],
"keys": [
"str",
"dex",
"mind"
]
}
}
],
"sheetLayout": {
"pageSize": "fluid",
"grid": {
"size": 8
},
"pages": [
{
"id": "main",
"label": "Main",
"widgets": [
{
"id": "t",
"type": "section",
"frame": {
"x": 16,
"y": 16,
"w": 280,
"h": 36
},
"props": {
"title": "Warhammer Fantasy Roleplay"
}
},
{
"id": "str",
"type": "dots",
"bind": "attr.str",
"frame": {
"x": 16,
"y": 64,
"w": 160,
"h": 70
},
"props": {
"label": "STR",
"max": 5
}
},
{
"id": "hp",
"type": "track",
"bind": "resource.hp",
"frame": {
"x": 200,
"y": 64,
"w": 200,
"h": 80
},
"props": {
"label": "HP",
"max": 20
}
},
{
"id": "notes",
"type": "notes",
"bind": "meta.notes",
"frame": {
"x": 16,
"y": 160,
"w": 380,
"h": 120
}
}
]
}
]
}
}