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:

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.

) 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: