Outside of reading and writing, one of my main interests is video games.
This tutorial is an extension of my previous tutorial about creating custom followers and marriage partners for Skyrim. If you want to create a custom hireling, follow the steps in that tutorial to create your follower, then come back here to find out what you need to do to set them up as a hireling in Skyrim. I recommend you make a copy of your basic follower mod to keep as a backup in case you run into problems or decide that you prefer the simpler setup.
Adapting a follower to use the vanilla hireling game mechanics is a little more complex than creating a simple follower, and requires you to explore some additional areas of the Creation Kit that I haven't talked about yet. It also creates certain compatibility issues with other mods that change follower behavior or that add new hirelings to the game which I'll discuss a little bit later.
Edit the NPC Settings
The first thing we're going to do is change a few of the settings in the NPC editor. These changes are mostly just to bring our hireling inline with vanilla hirelings so that we know they're working as intended.
In the Traits tab, set the Disposition Base back down to the default 35. You won't need to give them an artificially high disposition once you've set them up to use the hireling process because the recruiting process will handle that for us.
The other thing you need to do is make sure that the voice you have selected is the same as one of the voices used by the vanilla followers. This is necessary to get the follower to use all of the hireling dialogue so that you can interact with them seamlessly the way you do with the current hirelings. You don't have to do this if you're creating custom-voiced dialogue for your hireling, but this tutorial does not cover the creation of a custom voice, so you might want to follow this process first to make sure you understand the basics before moving on to another area of modding.
For Dundaryn, I changed the voice to Male Young Eager so that I can use Erik the Slayer's dialogue, which seemed the most appropriate. To see what voices are available, you can just do a search for 'hireling' in the Object window, Actor category, and open up the vanilla NPCs to see what voices they use.
In the Factions tab, right-click and select New. Type 'hireling' in the filter, and then select CurrentHireling from the list and press OK. Back in the Factions tab, right-click the rank and change it to -1.
You can delete the relationship from the Relationship tab as it's no longer required. It will be handled by the game. In the Keywords tab, right-click and choose Add from the context menu. In the filter in the Select Form dialog, type hireling and select JobHireling then click OK.
In the AI Data tab, you can downgrade the Assistance setting to Helps Allies, which is the setting vanilla hirelings use. Also, make sure that they are Aggressive and Foolhardy to get them to engage in combat and stay in combat, and that they have Any Crime selected.
Duplicate the Hireling Dialogue
These settings by themselves will not turn your follower into a hireling. For a simple follower, a few setting changes are enough, because all of the voice dialogue is generic, so it can be used by any character with the right voice type. Hirelings, on the other hand, have unique dialogue associated with them.
This means that you have to either overwrite the original hirelings or duplicate the dialogue associated with an existing hireling and repurpose it to fit your custom hireling. (The third option, creating unique voice dialogue is not covered in this tutorial.) Although it's a little more work, we're going to take the second approach and duplicate an existing hireling, rather than overwrite one. That way, we can avoid potential bugs and keep all of the original hirelings in the game.
Duplicating Dialogue in the HirelingQuest
To do this, find the HirelingQuest in the Object window under the Character, Quest category. Double-click to open it and switch to the Player Dialogue tab. In the far left column, Branches, you will see six dialogue branches that contain all of the dialogue associated with recruiting hirelings (the DialogueFollowers quest contains the rest of their dialogue).
In each of these branches, you're going to select each Topic in the middle column to display all of the Infos in the third column. In the Speaker NPC column in the list of Infos you can see which dialogue Infos are associated with which NPCs. These are the Infos you're going to duplicate for your hireling.
Since I'm basing Dundaryn on Erik the Slayer's dialogue, I'm going to be duplicating anything with HirelingErikTheSlayer in the Speaker NPC column, but I'm going to exclude any unnecessary dialogue which doesn't fit.
In Dundaryn's case, I've only duplicated dialogue from the two bottom branches: HirelingQuestTopic and HirelingQuestReHireBranch. I haven't duplicated the dialogue from the first two branches because I don't need them and they refer more specifically to Erik the Slayer and don't really fit Dundaryn. The third branch is only for the FemaleDarkElf voice, and the fourth branch, HirelingQuestRefusal will work for any of the hireling voices and therefore doesn't need to be duplicated.
The HirelingQuestReHireBranch is divided into two topics. I've duplicated Erik's "I could really use some more experience..." Info which is required for rehiring after being dismissed. If you're basing your hireling on Marcurio, you'll duplicate his Info instead. To duplicate an Info, right-click, and select Copy. After a couple of seconds, the duplicated Info will appear in the list. The original Info will have a star beside it, which indicates a modified object, but the duplicated Info will not have a star.
This can be very confusing if you're used to identifying stars with changed objects in the Creation Kit! We need to change the conditions on our Info to point to our hireling instead of the original hireling, but we need to edit the Info that doesn't have the star and appears below, not the original info with the star that appears above! (We're going to clean these dirty edits after we're done duplicating all the Infos we need.)
Change the Dialogue Condition
Double-click on our new info (the one below, without a star) to open the Topic Info dialogue. In the middle of the dialogue, you'll see a list of Conditions. Find the one that says GetIsID under Function Name. It should have the name of the hireling you are duplicating under the Function Info. Double-click it to open it, because we're going to change that so that it points at our new hireling.
In the Condition Item dialog, click on the big button with the name of the hireling. This will open a new dialog called Select Function Parameters. In the first drop-down box, select your custom hireling. You can type the name of your hireling to navigate to it quickly. Click OK to select it, then OK in the Condition Item dialog to update your change. Your custom hireling's name should now appear in the Condition list under Function Info.
Record the Voice Filename IDs
Because we need to extract the duplicated voice files from the game archives, we need to know which ones to extract, and what to rename them so that the game can find them. We're going to get this information right now, even though we're not going to be using it until the end.
First, we're going to get the ID for our new, duplicated voice file: in the Topic Info window, above the Conditions list, there is a Responses list. Double-click the response to pull up the Edit Response dialog. In the bottom half of this window, there is a section called Audio. The name of our new voice file is in the Voice Filename field. Either copy and paste this ID into a text document under a My Voice Files column or just write down the end of the filename with the hex code that looks something like this: "000F11B0_1". This is the ID we're going to change our extracted voice file so that the game can find it. Click Cancel to close the window, then click OK on the Topic Info dialog to save your changes.
Now you need to get the original ID of the voice file so that we know which file to extract from the archives. To get this ID, just do the same thing on the original Info. Double-click it to open it, double-click on the text in the Responses list and copy down the filename in the Voice Filename field. Record this under an Original Voice Files column beside your My Voice Files column.
Go to the second Topic under the HirelingQuestReHireBranch, find the dialogue info matching your voice, right-click and Copy to duplicate it, open the copied info (the one below, without a star), and update the condition as you did for the previous info. Don't forget to write down the new voice file ID, and the original voice file ID from the duplicated Info. The first Info, "Looks like you've got some help already..." doesn't need to be duplicated because it is available to all of the hirelings. This is the dialogue used when you try to rehire a hireling in that short window when you can rehire them for free.
You can use the same process to copy the dialogue for your hireling in the last branch, the HirelingQuestTopic, which has only a single Topic. The first two Infos are used by all of the hirelings and don't need to be duplicated, so you only need to duplicate the one addressed specifically to the hireling whose voice you're duplicating. This Info has a script attached to it which we will need to edit. For now, just duplicate the dialogue and change the condition as you did with the others. We'll come back to this Info a little later.
The last dialogue infos we need to duplicate are located in the Misc tab of the Quest under the topics HirelingQuestGoodbyes and HirelingQuestHellos. You don't need to duplicate all of the dialogue associated with the character whose voice you're using, but you should have at least one for each condition under the HirelingQuestHellos so that they have an appropriate greeting when you meet them before recruiting them, while they are recruited, and after they leave your service. You'll have to look at each dialogue assigned to your voice and decide whether or not you need to copy it.
Remember, for every dialogue you copy, you need to change the condition, write down the new voice file ID, and then write down the original voice file ID. Once you're done, click OK on the Quest window to save your changes.
Duplicate Dialogue in the DialogueFollower Quest
The rest of the dialogue you need to copy is in the DialogueFollower quest. This is the quest that controls all of the dialogue between you and your follower after they've been acquired. Much of this dialogue is generic, and doesn't need to be duplicated, but there are a few dialogues that you will need to duplicate to get your hireling to work as intended.
The easiest way to do this is to go through each Topic of each Branch and look for Infos that have the name of the hireling whose voice you are duplicating. In my own case, I duplicated the following Infos:
In the first branch, Dismiss, I didn't want to use Erik's unique dialogue because Dundaryn will not be going back to Rorikstead. There is a generic option for other followers, but unfortunately, it has a condition on it to force hirelings to use their unique dialogue. (GetInFaction, PotentialHireling == 0.) To get around this, I duplicated the generic "I'll head back home if you need me..." dialogue info and replaced that condition with a condition to test for Dundaryn instead.
In the second branch, DoingFavor, I didn't need to duplicate any dialogue because it is all generic. In the third branch, FavorState, I duplicated Erik's "What do you need...". In the fourth branch, Follow, I duplicated "Great! Let's go!". In the fifth branch, Trade, I duplicated "No problem. How can I help?" In the next branch, Wait, I duplicated "I'll be right here...". And I skipped the last branch which is all dedicated to Delphine.
After creating your hireling and recruiting him or her in-game, you may come across unusual silences where other hirelings or followers might make a comment. If this happens you can always track down these missing dialogue infos and add them to your mod. For the sake of this tutorial, I've only copied the most essential dialogue for Dundaryn. In total, I duplicated 11 dialogue infos, which means I'll need to extract and rename 11 voice files.
Create Global Variables
Before we extract the voice files we need to update the scripts so that the game recognizes our new follower as a hireling. This is where we're going to run into a big compatibility issue. Up until now, we've done everything we can to avoid compatibility issues. That's why we duplicated the dialogue infos and why we're going to duplicate the voice files instead of just overwriting one of the vanilla characters. As far as I know, however, there's no way to create a hireling that works the same way as an existing hireling without editing the hireling script. That's not a big deal if you don't use any follower or hireling overhauls, but it will be if you want your hireling to work in conjunction with one of these mods. It's also important to know if you plan on releasing your mod.
Before we edit the script, we need to create a couple of global variables required by the script. In the Object window, navigate to Miscellaneous and then Global. Type 'hireling' in the filter and right-click to duplicate one of the HirelingRecognizeName variables. Double-click it and change the name to HirelingRecognizeYourName. Don't change any of the settings. Click OK. When it asks you if you want to create a new form, say no, because you created a new form when you duplicated it.
Next, type 'rehire' in the Object window filter and follow the same process to turn one of the CanRehireNameOfHireling to CanRehireNameOfYourHireling. Save the plugin to register the new variables with the Creation Kit.
If you have a particularly sharp eye, you might have noticed the CanRehire* condition in the two dialogues we had to edit in the Rehire branch of the HirelingQuest. Open up that quest again, navigate to HirelingQuestReHireBranch, and go into each of the two topics, find the dialogue info that you edited and change that condition to point to your new global variable. Follow the same process you used to change the GetIsID to point to your character: double-click the GetGlobalValue condition, click on the big button in the middle to open the Select Function Parameters dialog and find your new global value in the drop down box, then click OK on everything to save your changes.
You'll have to do the same with any dialogue infos in the Misc tab that use the HirelingRecognize* condition. I had to change two of the infos duplicated for Dundaryn. The process is identical, it just uses the other global variable we created.
An easy way to track down any dialogue infos that use one of your new variables as a condition is to check the Use Info on the variables that correspond to the character whose voice you duplicated. Select the original variable in the Object list, right-click and select Use Info from the context menu and it will show you a list of all the Infos where that variable is used as a condition.
The Hireling Formlist
Some of my more perspicacious readers might be aware of the Hirelings formlist and be curious as to whether or not it's required. To be honest, I'm not sure. If you perform a Use Info on it, you'll draw blanks and Google turned up nothing. After a quick test, everything seemed to be working for Dundaryn without adding him to the list, and the list, in any case, is incomplete: Erik the Slayer is not on it. For all of these reasons, I tend to think that it was created in case it turned out to be useful, but was never actually used by Bethesda, so I've opted to ignore it. If at some point in the future someone discovers a use for it, I'm hoping that they'll let me know so I can update the tutorial!
Update the Hireling Script
Now that we have our new globals hooked up with the corresponding dialogue conditions, we need to edit the hireling scripts.
There are two scripts that you need to edit. The first is in the HirelingQuest under the HirelingQuestTopic branch. It will be the Info directly connected with the name of your hireling. I mentioned it earlier when we were editing dialogue and we're going to edit it now.
Edit the Topic Info Quest
To edit the script, double-click the Info to open the Topic Info window. In the bottom right of the window, you will see a box that says Script Name with a script with a name like TIF__01001234. Left-click to select it and then right-click and select Edit Source to open the script in the Creation Kit's built-in script editor. It should have a GlobalVariable Property with the name of the original hireling that you've duplicated. Change this property to match the global variable created for your custom hireling. If the line reads
GlobalVariable Property HirelingRecognizeErik Auto
you need to change it to read
GlobalVariable Property HirelingRecognizeDundaryn Auto
substituting the name of your own character for Dundaryn.
Once you've done that, click Build and select Compile from the menu bar. It should compile without errors as long as you've spelled the name of your variable correctly. Now you've added the global property to your script, but you need to assign the value from your new global to the property.
Edit the Topic Info Script Properties
Select the script again in the Topic Info window and then click on the Properties button to the right. In the Properties window, select your new property then click Edit Value. From the drop-down box, select your HirelingRecognize* global. The yellow pencil indicates that the property has been filled. Click OK to save your changes.
Next, in the Papyrus Fragment under End to the left, change the first line to match your new property and Compile.
This script is tied directly to new dialogue info, so making changes to it will not conflict with other mods. The second script that we need to edit is the one that is going to create compatibility headaches for us down the road. The process is identical, but there are a couple of additional lines of code.
Before you edit the script, I recommend you make two backup folders: one to contain the SetHirelingRehire.psc as it is before you edit it in case you need to restore it, and one to contain your modified script after you've compiled it. The reason is that now that scripts are external resources, like textures, there can only be one copy of the script, so if you install a mod that makes a change to the script, that mod's script will overwrite your own script.
If Bethesda decides to update the script for any reason (to add a new hireling, for example) their update will also overwrite your script. For both of these reasons, you'll want a backup of your modified script. You probably don't want to overwrite an official update, but you can use your modified script to 'remember' what you changed so you can incorporate those changes in the new script. Bear in mind that if you distribute your hireling for others to use, your modified script will override their original script as well if you include the source in your download.
Edit the SetHirelingRehire Script
Go back to the Object window and find the DialogueFollower quest in Character, Quest. Open it and switch to the Scripts tab. Right-click on SetHirelingRehire to open it in the editor. Add a GlobalVariable property, an ActorBase property, and an additional elseif condition following the format laid out by the others. You can see the changes I made in the screenshot on the right. Select Build, Compile from the menu bar. It should compile correctly as long as you spelled your properties correctly and didn't make any other changes.
Edit the SetHirelingRehire Script Properties
Select the SetHirelingRehire script again and click on Properties to open the Property editor. You need to point your two new properties to the correct objects to assign values to them. The first property, CanRehire* is set the same way as the HirelingRecognize* in the first script. The second property is set the same way but points to your hireling, not a global variable. Click OK to save your changes.
Because you've edited a script attached to the DialogueFollower quest, that quest will be marked as changed and your mod will be incompatible with pretty much every follower overhaul and every 'deep' follower mod ever created. Only one mod can make changes to a quest at a time: the last one loaded.
There isn't an easy way around these conflicts, but it is possible to combine changes made in one mod with changes made in another mod. That topic is a little beyond the scope of this tutorial, but you're well on your way to being able to figure that out yourself.
Clean the Mod
Now that we've discussed the important compatibility issues that affect our mod, we're going to do what we can to clean up some other compatibility issues that don't need to affect it.
You'll remember that when we duplicated the dialogue infos, the editor marked the original infos as changed, even though we hadn't changed them. We're going to clean up these 'dirty edits' by using the Details window in the Data browser.
Go to File, Data to open the Data browser, then select your file and click the Details button. This will pull up the File Details window, which shows you every change that you've made in your mod. (The modified scripts do not show up because they are an external resource, like a model or texture.)
If you look at the list of editor IDs, you'll notice that there are two entries for each dialogue info: the original info, marked as changed, and the duplicate info that you created for your character. Unfortunately, you can't tell which is which, and you don't want to clean out the new info. Expand the window a little so that you can see the Form ID column. If you look at the first two digits in the form ID, you'll see that one starts with 00 and the other with 01. The first two digits of the Form ID are the mod index. 00 always stands for the main Skyrim.esm. 01 is always the first .esm or .esp loaded after Skyrim.esm.
Using this information, you can tell which info you want to remove from your mod: the infos that start with 00. Find one of these infos, select it, and press the Delete key on your keyboard. The editor will give you a prompt warning you that it won't be loaded and disappear after the next save, which is exactly what we want. Click OK and a little I will appear in the column next to it, indicating that that object will be ignored the next time you load your mod. Repeat this process for the rest of the INFO entries that start with 00 until they've all been set to ignore.
Click Close on the File Details window and then OK to reload your mod in the editor. (Make sure it's set to Active File.) The infos won't actually be cleaned from your mod until you make some sort of change and then save it. Double-click on your hireling in the Object window to load up his details window then click OK. This will register as a change even though you haven't actually changed anything and is an easy way to force the editor to update your mod. Once the NPC details window is closed, save your mod. The unnecessary INFO entries should now be gone from the File Details window. Go ahead and check just to be sure you didn't miss any. In the screenshot you can see that I've organized the entries by Type to bring all of the INFOs together to make it easier to find any rogue entries.
If you've made any other unnecessary edits to your mod, you can repeat this process on those objects as well to remove them. Just make sure you're not accidentally undoing something you meant to do! Cleaning your mod is an absolute requirement before releasing it for other people to use. Any stray, unnecessary, 'dirty' edit could lead to an incompatibility issue for someone else and that 'bug' could be very hard to find if they have a couple hundred mods installed! It might seem innocuous to you, but it certainly won't be to them!
For certain objects, you may have to set them to ignore a few times before you get it to stick. That's because many objects are interconnected, and if you try to ignore an object required by another object, the editor will reload it anyway to avoid breaking that other object. If something refuses to be cleaned, try tracking down these unexpected dependencies and clear them up first.
Extracting the Voice Files from the Game Archives
Now that we've duplicated the dialogue, updated all of the conditions with our new globals, cleaned the unnecessary dialogue edits, and updated the scripts to accept our new hireling, we're almost done. The last thing we need to do is make a copy of the original dialogue so that our hireling will actually speak when we talk to him.
All of the original voice files can be found in the game archives. Skyrim game archives can be identified by their .bsa extension, which stands for Bethesda Softworks Archive. All of the voice files are located in the Skyrim - Voices.bsa and Skyrim - VoicesExtra.bsa, though the ones you need are probably all located in the first.
Create the Voice File Directory
Before we extract, we have to set up the folder that's going to contain the voice files. All of the voiced dialogue goes into
folder. For my mod, that was
The Data folder will already exist in your Skyrim folder, but you might have to create the Sound and Voice sub-folders manually. You will definitely need to create the folders inside those. Once you have your directory set up, you can extract the voice files.
Extract the Voice Files
To extract the voice files, you need a bsa extractor. There are a couple of different bsa extractors and they are all free and easy to find with a Google search. I use the bsa browser included in the Fallout Mod Manager (FOMM) because I already have it installed and it works with Skyrim files, but you might also try Fawzib Rojas' BSA Browser on the Skyrim Nexus. You can use the FOMM without owning a copy of Fallout 3 or Fallout: New Vegas by using this handy shortcut (the instructions are at a 1:25).
If you own a copy of Fallout 3 or Fallout: New Vegas, you can open the Fallout Mod Manager normally. Just select the option that matches the game you have installed and then click on the Open button in the bottom of the browser to navigate to your Skyrim folder. Select the Skyrim - Voices.bsa and click Open. The browser will load all of the archived files which might take a couple of seconds. You can click the Sort button to organize your results alphabetically, or type some text into the filter to refine your search.
In our case, because we know the specific ID numbers of the voice files we want to extract (you did write them down, didn't you?) you can just use the last six digits of the 8 digit hex number for each ID in the filter to home in on the required file. (Make sure you use the ID for the original file, not your new, duplicated file.) Once you've found it, click Extract and navigate to your plugin's voice folder and click Save.
Change the Name of the Extracted Files
Now you have the duplicated voice files, but they still use the ID for the original dialogue infos. In order for the game to recognize these files, you need to change the name of the file to match the ID of the new dialogue info that it corresponds to. Just copy and paste the 8 digit hexadecimal portion of the ID of your duplicated Info over the original identifier. The first two digits should be changed to 00. (They are probably 01 right now.) Make sure you match up the right IDs or your dialogue won't match up properly. (That's why I had you write down two columns.)
This tutorial took me a long time to write and includes a lot of little details. It's entirely possible, therefore, that in spite of my best intentions, I've forgotten to mention a step somewhere in the process. If you come across anything that you don't understand, or notice that I've missed something, please leave me a comment and I'll try to fix it asap. If you know of a better way of doing something, I'd love to hear that, too, as I'm still learning this stuff myself.
I cannot provide modding advice beyond what is contained in my tutorials: I probably don't know the answer. :( That's the problem with huge subjects like Skyrim modding. Good luck, you adventure has just begun!
Pudge on February 04, 2018:
Thanks a lot this is helpful for things other than hirelings as well!
Ac3s on April 19, 2015:
sweet tutorial, thank you