Hi, I’d like to share my thoughts and ideas on sharing of loadouts - most importantly: skill trees.
The issue
My friends and I play the game a lot, and we try a lot of wacky stuff. Sometimes said stuff is actually fun or, god forbid, even effective. Whenever we find one of those builds, we suggest for our mates to try - which is easier said than done, as the skill trees are only getting bigger and more complex.
“Sharing” currently means “walking your mate through the tree and picking the same nodes” or at best “sending over 3 screenshots via discord, so he can do it in his own time”.
The goal
Inspired by digital CCGs, I’d like to see skill tree share codes.
Technically I’d like to share the whole loadout, but due to weapon rolls, availability to different people and such that does not seem feasible.
Usage
Players would either:
-
Create a skill tree, press a button to create a share code, then copy and paste it in a private chat with their friend.
-
Copy a code they received, then (while the code is in their clipboard) press a “Load Talents from clipboard” button, which would then recreate the skill tree from the code or show an error, e.g. in case the user does not have enough skill points or if the code is somehow malformed.
Technical implementation
The easiest way I could think of to implement this system is a custom bitmap format, which would look roughly as follows:
First, a mandatory version header, one or two bytes long. This is to make sure that a newer rendition of share-format could seamlessly coexist with this initial version.
Afterwards, add two bytes per line of nodes in the talent tree. If every talent node is represented by one bit, this would allow up to 16 nodes per line; quite enough, I would hope.
The given byte array gets B64 encoded - voila.
The limitation to this implementation is that it is very primitive. It has no way to check whether the given nodes are actually connected or whether multiple exclusive nodes are chosen, among others.
You could add a character ID (so you don’t import Zealot trees into a Psyker for example) or checking for correctness - but a feature needs to walk before it can run.
Short example
Let’s take the current Zealot all the way down the middle (spending 27 points in total, just for the sake of the argument).
-
The first line consists of Disdain, Anoint in Blood and Backstabber. We’re picking Anoint in Blood.
-
Technically Disdain would be the number 1 (i.e. 0b1), Anoint in Blood would be 2 (i.e. 0b10) and Backstabber would be 4 (i.e. 0b100). This means that we represent the line as 2 for this example.
-
These binary numbers may appear flipped, because I enumerate from the left but smaller digits are found on the left.
-
The second line is Enemies Within, Enemies Without, Fortitude in Fellowship, Purge the Unclean, Blood Redemption and Scourge.
-
In our example of taking every middle node, we represent Fortitude in Fellowship and Purge the Unclean as the number 6 (i.e. 0b00110).
-
At this point I think you get the idea, so we skip a few lines.
-
We pick Chorus of Spiritual Fortitude as our ability. I will assume all modifiers to “core” nodes to be the next line, so we are picking Banishing Light and either Holy Cause or Ecclesiarch’s Call.
-
In numbers, this is either 6 (0b0000110) or 12 (0b0001100). Let’s go with Ecclesiarch’s Call, so 12.
-
Lastly I will assume all modifiers for Blazing Piety to be the same line.
-
This would make our picks I Shall Not Fall and Maniac be represented by the number 48 (i.e. 0b110000).
All lines in order:
- 1, our version header
- 2 (0b10)
- 6 (0b110)
- 2 (0b10)
- 12 (0b1100)
- 2 (0b10), Immolation Grenade
- 2 (0b10)
- 2 (0b10)
- 12 (0b1100)
- 12 (0b1100)
- 2 (0b10), Beacon of Purity
- 2 (0b10)
- 2 (0b10), Chorus of Spiritual Fortitude
- 12 (0b1100), Banishing Light & Ecclesiarch’s Call
- 2 (0b10)
- 2 (0b10)
- 2 (0b10)
- 12 (0b1100)
- 2 (0b10), Martyrdom
- 12 (0b1100), I Shall Not Fall & Maniac
According to my example implementation the resulting code would be: AAEAAgAGAAIADAACAAIAAgAMAAwAAgACAAIADAACAAIAAgAMAAIAMA==
For those who need code to follow, I added a python implementation of the example:
darktide-talent-share-example.py.txt (496 Bytes)

