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
, andcolor
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.