Attributes
attributeSettings
Attributes are the core stats of your system - strength, dexterity, intelligence, or whatever names fit your world. They drive skill-roll modifiers and optionally scale resource pools.
"Character attributes"
- Editor location
- Mechanics → Attributes
- Editor type
- JSON only
- Size limits
-
-
attributeSettings.attributeNames(entry count) — 30 entries -
attributeSettings.attributeNames.*(each) — 64 chars
-
Schema
{
"attributeSettings": {
"attributeNames": [
"string"
],
"startingAttributeValue": "number",
"startingAttributePoints": "number",
"attributeStatModifiers": {
"<key>": {
"variable": "string",
"amount": "number"
}
},
"maxStartingAttribute": "number",
"lowAttributeThreshold": "number",
"lowAttributeTraits": {
"<key>": "string"
},
"attributeBonusModifier": "number",
"attributeDamageModifiers": {
"<key>": "number"
},
"attributeEvasionModifiers": {
"<key>": "number"
}
}
}
Example
{
"attributeNames": ["strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma"],
"maxStartingAttribute": 16,
"startingAttributeValue": 8,
"lowAttributeThreshold": 2,
"lowAttributeTraits": {
"strength": "Frail",
"constitution": "Sickly",
"intelligence": "Slow Learner",
"charisma": "Off-Putting"
},
"attributeBonusModifier": 2.5,
"attributeStatModifiers": {
"strength": { "amount": 2, "variable": "health" },
"constitution": { "amount": 1, "variable": "health" },
"wisdom": { "amount": 2, "variable": "mana" },
"intelligence": { "amount": 1, "variable": "mana" }
},
"startingAttributePoints": 27,
"attributeDoubleCostAt": 14,
"attributeDamageModifiers": {
"strength": 2
},
"attributeEvasionModifiers": {
"dexterity": 1
}
}
Fields
attributeNames
Can be fully renamed or expanded. Attribute names inform how the AI decides which is relevant to an action. All attribute name strings must be lowercase. The engine normalises attribute lookups to lowercase internally; using mixed or title case (e.g. "Intellect" instead of "intellect") causes silent mismatches with skills[*].attribute and attributeStatModifiers lookups. The same lowercase strings must be used consistently everywhere attributes are referenced: attributeSettings.attributeNames, attributes dict keys, skills[*].attribute, traits[*].attributes[*].attribute, items[*].bonuses[*].variable (when type: "attribute"), and attributeSettings.attributeStatModifiers keys.
startingAttributeValue
Base value before point buy. Required.
lowAttributeThreshold
Attribute score below which a character is considered “low” in that attribute.
lowAttributeTraits
Keyed map of traits automatically applied to characters whose score falls below lowAttributeThreshold. Can be used to add narrative or mechanical penalties for dump stats. Leave {} to disable.
attributeStatModifiers
Maps each attribute to a resource boost. Each entry requires variable (the resource name) and amount (the boost per attribute point). No type field is needed.
variablein modifiers:health, or any custom resource name.amount: 2= “for every 1 point of this attribute, boost the resource by 2.”
Warning (
attributeStatModifiersdoes NOT take atypefield): Each entry has onlyvariable(the resource name) andamount(the bonus per attribute point above 10). Addingtype: "characterResources"or any other type field is silently ignored — the entry still parses, but the extra field has no effect.
attributeDoubleCostAt
Extra-codec. Number. Attribute score at which each additional point costs 2 point-buy points instead of 1. Implements the D&D 5e point-buy rule where scores above a threshold become progressively more expensive. Common value: 14.
attributeDamageModifiers
Optional. Maps attribute names to a percentage bonus applied to the player’s outgoing damage. { "strength": 2 } gives +2% damage per strength point — a character with strength 12 deals +24% damage. Multiple configured attributes stack multiplicatively. Negative values are ignored. Calculated on buffed attribute values.
Note (damage modifier stacking):
attributeDamageModifiersapplies a global percentage multiplier to all outgoing damage and stacks with — but does not replace — the existing per-skill attribute damage bonus for combat skills. The per-skill bonus ismax(0, floor((effectiveAttr - 6) / 2))added directly to damage, calculated from whichever attribute the skill uses. The global modifier applies on top of that. Both scale with the same buffed attribute value.
attributeEvasionModifiers
Optional. Maps attribute names to a percentage reduction in incoming damage to the player. { "dexterity": 1 } gives -1% incoming damage per dexterity point — a character with dexterity 14 takes 14% less damage. Multiple attributes stack multiplicatively. Negative values are ignored.
Keys in both modifier maps must match an entry in attributeNames exactly. A misspelled or unknown key (e.g. strenght) is silently ignored by the engine and contributes nothing, so the validator flags any key not found in attributeNames.