Sign in to follow this  

[TEMPLATE] Custom follower (with Tutorial)

Do you find it useful ?  

9 members have voted

  1. 1. So, do you ?

    • Yes, thanks a lot
    • Nope, end yourself with beefalo belt
    • Dunno, but don't use this beefalo belt

Recommended Posts

Yakuzashi    104


Hello everyone. I hadn't seen any tutorial dedicated to this topic. At the start I need to state that I am pretty lame in everything associated with modding, so don't expect sophisticated solutions. This tutorial is simple yet effective, I have to agree that it could be better but as I have said, I am just simple man. I have used my old projects to explain you the scheme of your custom follower.

Template is based on this:

Main Part

To make functional follower you need to introduce the follower's:

- main script [creature.lua], the corpus of you follower

- anchor [anchor.lua], I have called it this way, because it attaches and provides easy summoning of the creature to your DST world

- brain [creaturebrain.lua], yep, that's the brain, every action you require from your creature belongs to it

- stategraph [SGcreature.lua], this file gives your creature ability to perform any visible action, because it's connected with animations and their realizations



Main Folder -> scripts -> prefabs -> [creature.lua]

Main Folder -> scripts -> prefabs -> [anchor.lua]

Main Folder -> scripts -> brains -> [creaturebrain.lua]

Main Folder -> scripts -> stategraphs -> [SGcreature.lua]


How to make mine template yours ? That's simple! Follow me this way!

At the start, change my names [name.lua] into yours.



That should be your character's name.


local common_postinit = function(inst) 



Add this tag to prevent summoned creature from attacking your character and vice versa.


local master_postinit = function(inst)



It will let you read books, which is crucial for this method of summoning follower.



Change name 'creature' into yours follower's name. Using Ctrl+F in Notepad++ as shown in ESCT tutorial by Dragon Wolf Leo.


Asset("ANIM", "anim/" ),

That's your follower's appearance [Main Folder -> exported -> creature]

You can call it what you want to, but it must match [name in exported] and all other references in whole mod to work properly.



Change name 'anchor' into your summoning item.



I am not sure if changing CreatureBrain name will affect anything but just to be sure you can try.

function CreatureBrain:OnStart()
    local root = PriorityNode(
        WhileNode(function() return IsNearLeader(self.inst, KEEP_WORKING_DIST) end, "Leader In Range",
                IfNode(function() return self.inst.prefab == "creature" end, "Is Duelist",
                        WhileNode(function() return self.inst.components.combat:GetCooldown() > .5 and ShouldKite(, self.inst) end, "Dodge",
                            RunAway(self.inst, { fn = ShouldKite, tags = { "_combat", "_health" }, notags = { "INLIMBO" } }, KITING_DIST, STOP_KITING_DIST)),
                }, .25)),
                IfNode(function() return self.inst.prefab == "creature" end, "Keep Chopping",
                    DoAction(self.inst, function() return FindEntityToWorkAction(self.inst, ACTIONS.CHOP) end)),
                IfNode(function() return self.inst.prefab == "creature" end, "Keep Mining",
                    DoAction(self.inst, function() return FindEntityToWorkAction(self.inst, ACTIONS.MINE) end)),
                IfNode(function() return self.inst.prefab == "creature" end, "Keep Digging",
                    DoAction(self.inst, function() return FindEntityToWorkAction(self.inst, ACTIONS.DIG, DIG_TAGS) end)),
        }, .25)),

        Follow(self.inst, GetLeader, MIN_FOLLOW_DIST, TARGET_FOLLOW_DIST, MAX_FOLLOW_DIST),

        WhileNode(function() return GetLeader(self.inst) ~= nil end, "Has Leader",
            FaceEntity(self.inst, GetFaceTargetFn, KeepFaceTargetFn)),
    }, .25) = BT(self.inst, root)

Those lines inside of this chunk must match your prefab's name. If it won't match your follower is not going to perform those actions (fighting,mining,chopping,digging)

ex.  'Creature' =/= 'creature' and your follower will not dig out objects in this case.


                IfNode(function() return self.inst.prefab == "Creature" end, "Keep Digging",
                    DoAction(self.inst, function() return FindEntityToWorkAction(self.inst, ACTIONS.DIG, DIG_TAGS) end)),



Change name 'creature' into yours follower's name. If you want your creature to be non-humanoid you can play with stategraph to match your animation's frames, but I don't know how to achieve rewarding results.



PrefabFiles = {

Change name 'creature' into yours follower's name one more. Add this:

Assets = {	
	Asset("ATLAS", "images/inventoryimages/anchor.xml"),
	Asset("IMAGE", "images/inventoryimages/anchor.tex"),

	Asset("ANIM", "anim/"),

This will make your item [anchor] avaible to craft and use. Just remember about CAPITALS.

GLOBAL.STRINGS.RECIPE_DESC.ANCHOR = "Allows you to summon your custom creature into this world."

local anchor = Ingredient( "anchor", 1 )
anchor.atlas = "images/inventoryimages/anchor.xml"
local anchor = AddRecipe("anchor", { Ingredient("feather_crow", 2), Ingredient(GLOBAL.CHARACTER_INGREDIENT.SANITY, 20), Ingredient("goldnugget", 4)}, RECIPETABS.WAR, TECH.NONE, nil, nil, nil, nil, nil, "images/inventoryimages/anchor.xml")

You will need to create additional:

- [Main Folder -> exported -> anchor] for your item if you want to see it in game.

- [Main Folder -> images -> inventoryimages] and place your 64x64 icon of item TEX and XML. Change names in XML too.


So everything beyond 'vanilla' tutorial is added by me to make your life easier. If you have created your first custom character you won't have problems with distinguishing extraordinary files connected with custom follower. I have attached my template just few lines under this block of text.

Have fun with your digital friend


P.S. I know my english is not perfect, but I think it's pretty understandable. Well if not just write a comment below and I will try to help you the best I can


Download the template here   ----->    Taern - Follower

Edited by Yakuzashi
  • Thanks 1

Share this post

Link to post
Share on other sites
mchoneybee    0
On 11/9/2019 at 4:14 AM, thomas4846 said:

you can also add the chatter function if you want your follower to have some speech

How does one add the chatter function? owo?

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this