Consider helping out in updating the wiki for 3.7.0 - see Path of Exile Wiki:To-do list/3.7.0.

Passive Skill Tree JSON

From Path of Exile Wiki
Jump to: navigation, search

Passive skill tree JSON is used by the official website and many other community tools to display the skill tree.

JSON

The subsections follow the format of the json.

Key Type
assets Associative Array
characterData Associative Array
constants Associative Array
extraImages Associative Array
groups Associative Array
imageRoot String
imageZoomLevels Float Array
max_x Integer
max_y Integer
min_x Integer
min_y Integer
nodes Associative Array
root SkillTreeNode
skillSprites Associative Array

assets

This is an associative array that maps an asset name to an asset at a specific zoom level (i.e. "0.3835" below, note: Assets that don't change with zoom level will have a single entry of "1").

Example:

"assets": {
    "PSSkillFrame": {
        "0.1246": "https://link/to/asset/",
        "0.2109": "https://link/to/asset/",
        "0.2972": "https://link/to/asset/",
        "0.3835": "https://link/to/asset/"
    },
    ...
    "PSPointsFrame": {
        "1": "https://link/to/asset/"
    },
    ...
}

characterData

Associative array that maps the character attributes to the classid.

Each value for the array contains another associative array for various attributes:

Key Value description Type
base_dex character class starting dexterity integer
base_int character class starting intelligence integer
base_str character class starting strength integer

This maps to Scion as of this writing for example:

>>> st['characterData']['0']
{'base_int': 20, 'base_dex': 20, 'base_str': 20}
"characterData": {
    "0": {
        "base_str": 20,
        "base_dex": 20,
        "base_int": 20
    },
    ...
}

constants

Constants contain various game constants.

Located under the top level:

{
  constants: { /* constants */}
}
Key Value description Type
PSSCentreInnerRadius Radius Integer
chracterAttributes See Below Associative Array
classes See Below Associative Array
skillsPerOrbit A constant for SkillTreeNode.oidx Integer Array
orbitRadii A constant for SkillTreeNode.o Integer Array

characterAttributes

Associative array of character attributes and their id.

Format:

Key Value description Type
<Name of the attribute> Id of attribute integer

Example:

>>> json['constants']['characterAttributes']['Strength']
0
"characterAttributes": {
    "Strength": 0,
    "Dexterity": 1,
    "Intelligence": 2
}

classes

Associative array of Character classes and their associated id

Format:

Key Value description Type
Internal name of the class based on attributes, i.e. <Attribute>Class for example:

StrDexIntClass (refers to Scion)

Id of the class integer

Example:

>>> json['constants']['classes']['StrDexIntClass']
0
"classes": {
    "StrClass": 1,
    "DexClass": 2,
    "IntClass": 3,
    "StrDexClass": 4,
    "StrIntClass": 5,
    "DexIntClass": 6,
    "StrDexIntClass": 0
}

extraImages

This an associative array linking the CharacterClassId found in constants.classes to the associated 2DArt and location on the tree in which to display the art.

Note: Scion does not have an extra image to display when the class is selected

Example:

"extraImages": {
    "1": {
        "x": -4070.52,
        "y": 7.37268,
        "image": "Art/2DArt/BaseClassIllustrations/Str.png"
    },
    ...
}

groups

Groups is an associative array containing groups for the nodes.

Key Value description Type
oo Associative array of orbitals (i.e. SkillTreeNode.oidx). The boolean value states if the orbit is occupied assoc array[string, boolean]
n Contains a list of the associated nodes by their unique id array[integer]
x x-coordinate float
y y-coordinate float

You can see in the sample below that group 6 has an oo that is just an array of booleans. If this is seen, treat the index of the boolean as the key in the associative array.

"groups": {
    ...
    "6": {
        "x": 400.602,
        "y": -1786.7,
        "oo": [
            true
        ],
        "n": [
            60090
        ]
    },
    ...
    "15": {
        "x": 3424.24,
        "y": 3807.71,
        "oo": {
            "1": true
        },
        "n": [
            45033,
            53324,
            15344
        ]
    },
    ...
}

imageRoot

This is just a link to the image root for assets. Values that have been seen in the passed include: https://web.poecdn.com/image/, /image/, /image//

imageZoomLevels

This is an array of floats that designate the zoom levels for different assets used when creating a tree

"imageZoomLevels": [
    0.1246,
    0.2109,
    0.2972,
    0.3835
]

max_x

This is the maximum x that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).

max_y

This is the maximum y that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).

min_x

This is the minimum x that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).

min_y

This is the minimum y that a node on the normal skill tree will be (does not include ascendancy nodes and their odd locations).

nodes

Nodes is an associative array containing general information about the passive skill nodes in form of an associative array. The key of this dictionary is the Node ID and the value uses the following key value pairs:

Key Value description Type
ascendancyName Name of the associated ascendancy class

Not present if the node is not associated with an ascendancy

string
da how much dexterity the node adds integer
dn Name of the node string
g Id of the group the node is in integer
ia how much intelligence the node adds integer
icon Path relative to the root to node icon string
id Unique id of the nodes integer
isAscendancyStart Whether the node is a starting point for ascendancy class

Not present if the node is not associated with an ascendancy

boolean
isJewelSocket Whether the node is a socket for jewel boolean
isMultipleChoice Whether the node is a multiple choice node boolean
isMultipleChoiceOption Whether the node is a choice option for a multiple choice node boolean
ks Whether the node is a key stone boolean
m Whether the node is a mastery (i.e. the center of certain circles have images which are technically also passive skill nodes) boolean
not Whether the node is a noteable boolean
o Radii of orbit (0 to 4, orbitRadii = [0, 82, 162, 335, 493]) integer
oidx index on the orbit (skillsPerOrbit = [1, 6, 12, 12, 40]) integer
out Connections to other nodes by their id array[integer]
passivePointsGranted Passive points given integer
reminderText Reminder text(s). These appear grey in game and give some extra information about the mechanics or node.

Not present if there is no reminder text

array[string]
flavourText Node flavour text (similar to the flavour text on unqiues, appears in the unique border color in game) array[string]
sa How much strength the node adds integer
sd Stat descriptions. One Element per line (lines still may contain escaped characters, i.e. \n) array[string]
spc class starting node array
"nodes": {
    ...
    "57279": {
        "id": 57279,
        "icon": "Art/2DArt/SkillIcons/passives/KeystoneBloodMagic.png",
        "ks": true,
        "not": false,
        "dn": "Blood Magic",
        "m": false,
        "isJewelSocket": false,
        "isMultipleChoice": false,
        "isMultipleChoiceOption": false,
        "passivePointsGranted": 0,
        "flavourText": [
            "Lay open your veins, and draw power from your own spilled life."
        ],
        "spc": [],
        "sd": [
            "Removes all mana. Spend Life instead of Mana for Skills"
        ],
        "g": 451,
        "o": 0,
        "oidx": 0,
        "sa": 0,
        "da": 0,
        "ia": 0,
        "out": [
            3644,
            56143
        ],
        "in": []
    },
    ...
}

root

Contains the class starting nodes under the out key.

Example:

>>> st['root']
{'out': [50459, 47175, 50986, 61525, 54447, 44683, 58833], 'oidx': 0, 'ia': 0, 'da': 0, 'g': 0, 'o': 0, 'sa': 0}
>>> st['root']['out']
[50459, 47175, 50986, 61525, 54447, 44683, 58833]

skillSprites

Contains various arrays

Key Value description Type
keystoneActive array[assoc array]
keystoneInactive array[assoc array]
mastery array[assoc array]
normalActive array[assoc array]
normalInactive array[assoc array]
notableActive array[assoc array]
notableInactive array[assoc array]

Each of the array elements contains another associative array with that links the icon path with a specific sprite:

Key Value description Type
coords Contains an associate array that maps the icon path (as from the nodes) to coordinates in the sprite file and the size of the icon in the sprite file (see below) assoc array
filename Name of the sprite file string

Example:

>>> st['skillSprites']['mastery'][0]['filename']
'skill_sprite-active-0-4ea513d186d9a3e9936128b9e53674b8.png'

The each of the coords values contains another associative array like this:

Key Value description Type
w width of the icon integer
h height of the icon integer
x x position integer
y y position integer

Examples:

>>> st['skillSprites']['mastery'][0]['coords']['Art/2DArt/SkillIcons/passives/MasteryGroupMana.png']
{'w': 32, 'h': 32, 'y': 96, 'x': 128}

Ascendancy classes JSON

The ascendancy classes json section (i.e. from the json release under var = opts [...] ascClasses: { /* json */} )

Contains an associative array that maps the character class id to the information about the ascendancy classes.

assoc array for each class

Key Value description Type
name Name of the regular class (ex. "Marauder") string
classes ascendancy classes for this class by their id. The key is a class id, the value is another associative array. assoc array[string, assoc array]

assoc array for ascendancy classes

Key Value description Type
displayName Name of the ascendancy class string
name Name of the ascendancy class string
flavourText The flavour text of the class string
flavourTextColour comma-separated RGB colour string
flavourTextRect comma-separated coordinates string

Examples:

>>> asc['1']['classes']['1'].items()
dict_items([('name', 'Juggernaut'), ('flavourTextColour', '175,90,50'), ('flavourText', ' What divides the conqueror \n from the conquered? Perseverance.'), ('displayName', 'Juggernaut'), ('flavourTextRect', '250,150,1063,436')])
>>> asc['1']['classes']['2'].items()
dict_items([('name', 'Berserker'), ('flavourTextColour', '175,90,50'), ('flavourText', 'The savage path is \nalways swift and sure.'), ('displayName', 'Berserker'), ('flavourTextRect', '760,415,976,429')])
>>> asc['1']['classes']['3'].items()
dict_items([('name', 'Chieftain'), ('flavourTextColour', '175,90,50'), ('flavourText', '     The Ancestors speak \nthrough your clenched fists.'), ('displayName', 'Chieftain'), ('flavourTextRect', '250,175,976,429')])