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.

In the editor

"Character attributes"

Editor location
Files → Mechanics → Attributes
Editor type
Edit in Studio + View JSON
Size limits
  • attributeSettings.attributeNames (entry count) — 30 entries
  • attributeSettings.attributeNames.* (each) — 64

Schema

json
{
  "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"
    },
    "attributeDamageReductionModifiers": {
      "<key>": "number"
    }
  }
}

Example

json
{
  "attributeSettings": {
    "attributeNames": [
      "strength",
      "dexterity",
      "constitution",
      "intelligence",
      "wisdom",
      "charisma"
    ],
    "maxStartingAttribute": 16,
    "startingAttributeValue": 8,
    "lowAttributeThreshold": 2,
    "lowAttributeTraits": {
      "strength": "You have a weak body. Physical and melee skills come harder to you, and feats of strength often fail.",
      "intelligence": "You have a slow mind. Knowledge and magic skills are harder to learn and less reliable when used."
    },
    "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": 0,
    "attributeDamageModifiers": {
      "strength": 2
    },
    "attributeDamageReductionModifiers": {
      "dexterity": 1
    }
  }
}

Fields

attributeNames

The world's attribute names. Can be fully renamed or expanded. Attribute names inform how the AI decides which is relevant to an action. Every other place that names an attribute must use a string from this list, spelled the same way: attributes keys, skills[*].attribute, traits[*].attributes[*].attribute, itemTypes[*].bonuses[*].variable (when type: "attribute"), and the keys of attributeStatModifiers, attributeDamageModifiers, and attributeDamageReductionModifiers. Voyage warns when a skill's attribute is not in this list. Keep the names lowercase; the validator warns on any other case.

startingAttributeValue

The base value every attribute starts at before trait modifiers are applied. Required.

lowAttributeThreshold

An attribute at or below this score counts as low, and the character gains the trait its lowAttributeTraits entry describes.

lowAttributeTraits

Maps an attribute to the description of a weakness trait. When the attribute is at or below lowAttributeThreshold, the character gains a trait named after it (for strength, Low Strength) whose text is this value. The value is the description itself, not the key of a trait in traits, so write it as the weakness: what is weak, which skills it affects, and how it shows in learning and use. Use it for narrative or mechanical penalties on weak attributes. Leave {} to disable.

attributeStatModifiers

Maps each attribute to a resource boost. Each entry has exactly two fields: variable (the resource name, health or any custom resource) and amount (the boost per attribute point). amount: 2 means every point of the attribute adds 2 to the resource.

attributeDamageModifiers

Optional. Maps attribute names to a percentage bonus to the player's outgoing damage, per attribute point. { "strength": 2 } gives +2% damage per strength point. Negative values are ignored.

Note: This is separate from the flat damage bonus a type: "combat" skill adds from its own attribute (+1 damage per 2 attribute points above 6).

attributeDamageReductionModifiers

Optional. Maps attribute names to a percentage reduction in incoming damage to the player, per attribute point. { "dexterity": 1 } gives 1% less damage taken per dexterity point. Negative values are ignored.

Keys in both damage maps must match an entry in attributeNames; the validator flags any key that doesn't.

startingAttributePoints

A deprecated fallback, effectively unused. Attributes are determined by traits; it only applies to a world that defines none.

maxStartingAttribute

Hard cap a single attribute can reach during character creation.

attributeBonusModifier

Multiplier for the attribute contribution to success checks: the bonus is (attribute - 10) * attributeBonusModifier.