Passive Skill Tree Node Encoding

I have a routine that treats the passive tree spec problem as a graph. It evaluates potentially good candidates through GA (may end up brute force, though) based on weighted values of stat importance.

I wanted to visualize the resultant trees by leveraging the existing tree tool. (My program would output the fitness score and a direct link with the correct encoded string), but I'm having problems figuring out the pattern of node and node ID.

For background, we consider the long encoded string at the end of the "pathofexile.com/passive-skill-tree/" URL.

"+" is replaced with "-", and "\" is replaced with "_". Presumably, because these would change the meaning of the URL and in base64 encoding those characters will be used normally.

After these replaces, we can base64 decode the string.

After decoding we read in a certain number of bytes for the preamble.

To make it easy to understand there are 4 base10 digits for the version:

{0, 0, 0, 2} The current version is 2, the leading 0's are presumably place holders for future versions.

{3} One digit for the class. 3 is witch, 1 is marauder, etc.

{0} One digit that is treated as a boolean/binary value for the state of the full screen toggle

After the preamble, there are a series of Int16's, one for each selected node. Presumably this is some sort of node ID assigned by the web team.

For example, a small build rooted at the witch could take on these node values:

{766, 1346, 1461, 1891, 4036, 4219, 4399, 4432, 5607, 5823, 5972, 6613, 7388, 8833, 9322, 10843, 11018, 11420, 11551, 11591, 13068, 14363, 15228, 15329, 16790, 17091, 19635, 20528, 20546, 20807, 22090, 22315, 23206, 24050, 24362, 25058, 25411, 27929, 28754, 28885, 29523, 29619, 29781, 30090, 31950, 32345, 32710, 33296, 34779, 34882, 35706, 35894, 36287, 36412, 38148, 39322, 40609, 41635, 42795, 44723, 44955, 46136, 46277, 46839, 47159, 47306, 48086, 48698, 49233, 49236, 49408, 49605, 49651, 49900, 53785, 54277, 54607, 54993, 56090, 56158, 56519, 56951, 57220, 57264, 58103, 58244, 58649, 59009, 60259, 60388, 61547, 61981, 62177, 62442, 62795, 64501, 65067, 65502}

What I am struggling with here is to find the pattern that exists here, without having to assign by-hand each node ID to match the site's.

The use of RequireJS, jQuery, and minifying has made it fairly time consuming to read through it to figure it out this far.
There appears to be an inline JSON which holds an array of objects that contain this information neatly for me. I've yet to determine the importance of each object's property, but I was able to extract information useful enough for my purposes:

63425 Zealot's Oath Life Regeneration applies to Energy Shield instead of Life
52120 Buff Duration 10% increased Duration of Buffs and Debuffs you create from skills 33479
54572 Buff Duration 10% increased Duration of Buffs and Debuffs you create from skills 52120,35503
9123 Buff Duration 10% increased Duration of Buffs and Debuffs you create from skills 54572
63447 Intelligence +10 to Intelligence 44184,52412,23385
44184 Intelligence +10 to Intelligence 5296,20154
3469 Dexterity +10 to Dexterity 7388
...

Where for each node I create a line:

[Node ID] [Node Name] [Node Description Line 1, Line 2, ...] [Out Node 1, Out Node 2, ...]

I apologize for the poor formatting. I don't think these forums are well equipped to handle the posting of code snippets.
I've been thinking of applying GA to the passive tree too, though haven't gotten as far as you. I am half way through reading a Field Guide to Genetic Programming and this seemed like a good newb project to start with.

The offline calculator has a json file (skilltree.txt) which has the node ids with names and positions. This may be the same as the inline json you found. The source code is viewable so might be a useful resource.

Anyway, good luck :)
Brutus. Do you even sync?
Last edited by differential on Aug 27, 2014, 7:55:29 AM

Report Forum Post

Report Account:

Report Type

Additional Info