Home - Exit-9B/CustomSkills GitHub Wiki

Welcome to the CustomSkills wiki!

The reference pages here will guide you on the process of creating custom skills. It is assumed that you already know how to use the Creation Kit.

Before getting started, you should make sure you have a decent editor for JSON files, such as Visual Studio Code.

You may also want to look at some Examples of custom skill implementations.

Configuration

To get started, create your configuration file with the path Data/SKSE/Plugins/CustomSkills/MySkills.json, where MySkills is a unique identifier for your skills menu. The basic outline of a configuration file looks like this:

{
  "$schema": "https://raw.githubusercontent.com/Exit-9B/CustomSkills/main/docs/schema/CustomSkill.json",
  "version": 1,
  "skydome": {
    "model": "DLC01/Interface/INTVampirePerkSkydome.nif",
    "cameraRightPoint": 2
  },
  "perkPoints": "myskill.esp|D62",
  "skills": [
    {
      "id": "myskill",
      "name": "My Custom Skill",
      "description": "This skill is neat.",
      "level": "myskill.esp|D63",
      "ratio": "myskill.esp|D65",
      "legendary": "myskill.esp|1D92",
      "color": "myskill.esp|1D93",
      "experienceFormula": {
        "useMult": 1.0,
        "useOffset": 0.0,
        "improveMult": 1.0,
        "improveOffset": 0.0,
        "enableXPPerRank": false
      },
      "nodes": [
        {
          "id": "perk01",
          "perk": "myskill.esp|12C8",
          "x": 0,
          "y": 0,
          "links": [ "perk02" ]
        },
        {
          "id": "perk02",
          "perk": "myskill.esp|12C9",
          "x": 1.5,
          "y": 1
        }
      ]
    }
  ]
}

Most of the fields in the above example are optional. A brief overview:

  • $schema is used for editor integration, allowing your editor to give hints and detect errors in the config.
  • version is currently unused and reserved for future use.
  • skydome is for configuring the Skydome which appears in the background of the skills menu.
  • perkPoints is an optional global variable for storing a custom source of perk points.
  • The skills array contains one or more individual skill definitions.
    • id is a unique identifier used for identifying the skill. If you only have a single skill, this ID will automatically default to the same name as the config filename.
    • name is the display name of the skill. It supports Localization.
    • description is the in-game description of the skill. It supports Localization.
    • level, ratio, legendary, and color are optional global variables that determine the display and behavior of the skill.
    • experienceFormula contains fields for configuring how Skill XP is calculated when Leveling. enableXPPerRank determines whether leveling up the skill also grants level XP.
    • nodes defines the perks in the Skill Tree and their positions.

You can start with just these fields, adding the rest as you go along.

{
  "$schema": "https://raw.githubusercontent.com/Exit-9B/CustomSkills/main/docs/schema/CustomSkill.json",
  "version": 1,
  "skills": [
    {
      "id": "myskill",
      "name": "My Custom Skill",
      "description": "This skill is neat."
    }
  ]
}

The next step is to create the appropriate Globals and Keywords, as these provide the basis for most features of the framework.