Tutorial 5: Basketweaving – Part 2

We pick up where we left off in the last tutorial and continue fleshing our our designed skill tree in the Creation Kit.


Skill Level: Advanced

This is an advanced tutorial and is targeted toward experienced modders.

Important Note

There is a lot of information in this tutorial. Please take your time working through it.

Nodes

We are now ready to set up the nodes. The nodes are Activator objects with the CampPerkNode script attached.

Find the _Camp_PerkNode_DefaultForModdersCOPYME activator form and duplicate it 5 times, one for each perk. Set the Editor IDs as follows, referencing your numbered node diagram you made earlier:

Basket_Node_1BasketBeginner

Basket_Node_2RedBasketExpert

Basket_Node_3HappyBasketCrafter

Basket_Node_4TravelBasket

Basket_Node_5BasketMaster

Then, set the “Name” field of each to their display name. “Basket Beginner”, etc.

When you are finished, you should have the following:

Lines

We will now create all of the required Perk Lines. A Perk Line is an Activator with a particular model file.

Thankfully, this is rather easy; just copy _Camp_PerkLine_DefaultForModdersCOPYME a total of 5 times, and name them as follows, referencing your node diagram:

Basket_Line_1_2

Basket_Line_1_3

Basket_Line_2_4

Basket_Line_3_4

Basket_Line_4_5

Configuring Nodes

Now, we will set up the CampPerkNode properties of each node activator we created. We will set each up slightly differently, because each perk we designed demands something unique in its message display.

If you’re following along but creating your own perk tree for your mod, just try to find the node that matches what you want to display the closest (number of downstream nodes, number of values to increment and by how much, etc) and model yours after it.

Info
Each CampPerkNode identifies the downstream nodes and lines connected to it. Collectively, this data is used to build the logical skill tree automatically. Therefore, it is very important to get this information right, or strange behavior might occur.

Let’s define the properties of CampPerkNode:

description_value_iterator – The amount to increase the first incrementing numerical value in the perk description, per rank. (For example, a value of 5 would show “increase blah by 5” on rank 1, “increase blah by 10” on rank 2, etc)

description_value_modifier – The amount to offset the first incrementing numerical value by in the perk description at the start. (For example, a value of 5 and a description_value_iterator of 5 would show “increase blah by 10” on rank 1, “increase blah by 15” on rank 2, etc)

downstream_line_1 – The first connected downstream line activator.

downstream_line_2 – The second connected downstream line activator.

downstream_node_1 – The first connected downstream node.

downstream_node_2 – The second connected downstream node.

required_description_value_count – Can be set to 0, 1, or 2. Denotes how many incrementing numerical values there are in the perk description.

required_perk_description – This perk’s description message.

required_perk_rank_global – This perk’s current rank global variable.

required_perk_rank_global_max – This perk’s max rank global variable.

required_skill_description – The overall skill description message.

secondary_description_value_iterator – The amount to increase the second incrementing numerical value in the perk description, per rank.

secondary_description_value_modifier – The amount to offset the second incrementing numerical value by in the perk description at the start.

Now, we will configure each node.

Basket_Node_1BasketBeginner

Double-click on this activator and open the Properties window of this node. We will set the properties as follows:

We wanted to “create 1 / 2 / 3 / 4 / 5 extra baskets each time you make a basket” with this perk, so the numerical value in the perk description increases by 1 each rank. So, we set the description_value_iterator to 1 and the modifier to 0.

You’ll notice that there are no downstream nodes or lines defined. This is how an origin node is created! A node with no connected downstream nodes is implicitly the origin node.

We set the required_description_value_count to 1 because we only have one value that changes each rank in the description.

We then fill in the properties for the perk description, the rank globals, and the overall skill description.

We leave the secondary description value fields alone because we set the required_description_value_count to 1.

Basket_Node_2RedBasketExpert

Double-click this activator and define its properties as follows:

This perk “improves making red baskets by x%” starting at 5%, so we set the description_value_iterator to 5 and the modifier to 0.

Referring to our diagram, Node 2 has one downstream node, Node 1, connected with Line 1-2. We set up our downstream nodes and lines to match this.

We set the rest of the properties similar to the last one (globals, descriptions, etc).

Basket_Node_3HappyBasketCrafter

Set up as follows.

Since our description simply reads, “Every time you craft a basket, you are filled with joy”, there are no numbers to increase with each rank in the description message. Therefore, all of the description value iterator and modifiers are left blank, and the required_description_value_count is set to 0.

According to our diagram, the node downstream to Node 3 is again Node 1, but uses Line 1 – 3.

Basket_Node_4TravelBasket

Set up as follows.

This one’s a bit different. Two things make it unique:

  • It converges two paths in the diagram, so it has two downstream lines and nodes.
  • It has an incrementing value in the description, but it starts at 15% and goes up by 5% each rank!

 

To converge two paths in the tree, simply specify both lines and their associated downstream nodes as shown above.

To start the description value at 15% and increase by 5% each rank, we need to set the iterator to 5, and the modifier to 10. The modifier sets the starting value of the description to + 10, and then rank 1 adds another + 5 from the iterator, to make 15%, and then +5% per each rank afterwards.

Basket_Node_5BasketMaster

The final perk. Set as follows:

Like the perk before it, it has an incrementing description value that starts on a value higher than the amount that it increases by each rank. The difference here is that there are two of them. So, we set both the first and secondary iterators and modifiers to the appropriate values to match the description and set required_description_value_count to 2.

Basket Master has only one downstream connection to Travel Basket.

The Perk Art

We’re going to switch gears for a bit and create our perk artwork in Photoshop. This is what will display behind our perk tree in game in order to give it some theme and flavor.

Start by creating a new blank 1024×1024 document in Photoshop.

Create a new layer.

Delete the background.

Create your perk art via whatever method works best for you. Just make sure that it’s transparent.

I simply used a Photoshop brush below, but, you could use any number of methods.

Create a new layer and place it under your artwork. Paint it completely black using the paint bucket.

Use the Magic Wand tool (or similar) to highlight all of your perk art on your top layer.

Go to Select, Modify, Feather… and feather your selection by 4 px.

With your artwork selected, in the Channel tab, create a new Channel. It should automatically be named “Alpha” or similar. Select the Alpha channel and click the eyeball to make it visible.

With your artwork selected and with Alpha being the selected channel, paint into your selection with a large, white brush. This will create your alpha and glow maps.

When you’re done, check your work by hiding the RGB channels. You should have something similar to the following.

We can now export our DDS texture for use in Skyrim. Using the nVidia DDS plugin for Photoshop, save your DDS texture with DXT3 compression and mip maps. Copy this DDS file into your Skyrim/textures directory.

Back to the CK!

We’re now going to create our static perk art plane object. Open your plug-in and duplicate the _Camp_PerkArtPlane_DefaultForModdersCOPYME. We’ll name ours Basket_PerkArtPlane.

We’ll now make a new TextureSet. Make a copy of _Camp_PerkArt_Example. We’ll name ours Basket_PerkArt_TextureSet.

After copying and renaming, open it and replace the diffuse and glow textures with the perk art DDS file we just exported from Photoshop. You should end up with something similar to the following.

If everything looks good, press OK to close the TextureSet.

We can now apply our TextureSet. Go back to your Basket_PerkArtPlane static, click the Model Edit button, and double-click the first entry in the Alternate Textures “New Texture” column. Select your TextureSet and press OK. You should have something similar to the following. Press OK to exit both windows when you’re done.

In the next part of this tutorial, we will set up our position references for our nodes in order to define the shape of the tree, tie everything together using the node controller, and test out our creation in-game!