I've received a lot of questions about how I made the Arrowsmith mod without the Creation Kit (CK). On top of that I don't have the time to fulfill everybody's requests and make every variation of the mod that every person wants.
So in this tutorial I'm going to explain how to create a simple recipe mod to make a Woodcutter's Axe out of Iron Ingots and Firewood. And hopefully this will help fellow modders figure out how to make their own or make changes to mine.
This may be updated in the future to reflect bug fixes or other discoveries.
Before You Start
- You need a basic understand of hexadecimal numbers. All integers I mention are unsigned unless stated otherwise.
- You also need to know that converting an integer or an ID to raw data requires reversing the bytes. For example, an ID of 01234567 becomes 67 45 23 01 in raw data.
(Anytime I show data split up with spaces like 67 45 23 01, it's raw data.) - DO NOT save your esp file while Skyrim is running. It will cause TESsnip to crash and you will loose all of your changes since the last save.
Part 1: Install and configure Fall Out Mod Manager
Since there is no Skyrim Mod Manager or CK yet we have to use the latest FOMM. With a few tweaks it will work with Skyrim.
- Open your Skyrim install folder and make a copy of TESV.exe. Rename the new copy falloutnv.exe.
- Download and install FOMM: http://sourceforge.net/projects/fomm/
- After installing FOMM, run FOMM and it will ask you to select a FallOut game. Select New Vegas.
- When FOMM asks your for the game directory, select your Skyrim folder (where falloutnv.exe is located).
- Sometimes FOMM will pop up an error about missing an INI file when you run it. You can ignore this error and continue.
Part 2: Creating a Basic Plugin File (ESP)
- In FOMM, select TESsnip from the Tools Menu.
- In TESsnip, select New from the File menu.
- The new plugin will have one record by default. Double click this record and change the name to TES4 if it's not already.
- From the Edit menu, select Add Master and select Skyrim.esm. (You may need to select Master Files from a drop down when browsing for the file.)
- Select the TES4 record. With the TES4 record selected there will be several subrecords listed in the bottom left pane of the window.
The first one is called HEDR. Double click HEDR and change the file version to 0.94.
Leave record count as it is. We will change it later.
Change the 3rd field (Unknown) to 2048. - The CNAM subrecord is the author's name. You can change this to your name if you'd like.
- I recommend you save this plugin as a blank plugin for future use.
Part 3: Create the Recipe Record
Before continuing with TESsnip, you need to find the item IDs for all of the materials needed to make the item and the ID of the item that's being made. In this tutorial we need the item IDs of Iron Ingots, Firewood, and Woodcutter's Axe.
There are several ways to find the IDs. The easiest way is to look them up on the UESP wiki. Or you can look through the Skyrim.esm file using TESnip or Skyrim Viewer but that may be more difficult.
Another way is to use the game's console to do a search. To do this use the command help "query" 0, where query is your search term. This will give you a list of all the records in the game containing the query. You can scroll through a long list using PgUp and PgDn keys.
So our IDs are:
Iron Ingot: 0005ace4
Firewood: 0006f993
Woodcutter's Axe: 0002f2f4
Now that we have the IDs, let's continue in FOMM.
- In the main FOMM window, right click Skyrim.esm and select TESsnip. It might take a few minutes to load the file.
- In Skyrim.esm find the GRUP (COBJ) record group and select it.
- In the Edit menu, select Copy.
- Go back to your New plugin window and select the root of the plugin (it says New plugin or will be the filename if you saved it).
- In the Edit menu, select Paste.
- Delete all the records in the GRUP (COBJ) group (still in your plugin window).
(This is the only way I know of to create a group in TESsnip. If anyone knows how to do it without Copy/Paste, let me know.) - Select GRUP (COBJ) and select New Record from the Edit menu.
- Double click NEW_ and change the new to COBJ.
Create a form ID and enter it in the form ID field (see Appendix A: Form IDs at the bottom of the post).
In the Unknown 2 field enter 000e6917.
In the Unknown 3 field enter 00020028. (I don't know what these 2 do. I took them from existing recipes)
Click Save. - Select the COBJ record and select New Subrecord from the Edit menu.
- Double click the NEW_ subrecord and change the name to EDID.
In the large edit box on the right side, type an editor ID that's not already being used. For this tutorial we'll use RecipeWeaponWoodcutterAxe
On the left side add a 00 byte to the end.
Click Save. - Create a new subrecord. Double click it and name it COCT.
In the hex (left) section of the editor, enter the number of materials that will be used in this recipe as a 4byte hex number. If you use stacks (eg. 10 Iron Ingots) the stack counts as 1.
In this tutorial we have 2 materials, firewood and iron ingots. So enter 02 00 00 00. - Create a CNTO subrecord for each material. The data for this subrecord is split into two 4byte integers. The first 4 bytes is the item id and the last 4 bytes is the number of that item needed.
For this tutorial we will enter the id for Iron Ingots (0005ace4) and the number (1) as E4 AC 05 00 01 00 00 00.
Then for the Firewood (0006f993) we will create a second CNTO subrecord with the data 93 F9 06 00 01 00 00 00. - (Optional) If you want to have a requirement for this recipe, create a new CTDA subrecord and enter the data.
See Appendix B: CTDA Subcrecords towards the bottom of the post.
For the tutorial, we will not create this subrecord. - Create a CNAM subrecord. This is the ID of the item you want the recipe to create.
For the tutorial, we will use the Woodcutter's Axe ID (0002f2f4), so enter F4 F2 02 00. - Create a BNAM subrecord. This is the ID of the station required to make the item.
Smelter: CE 5C 0A 00
Forge: 05 81 08 00 (use this for the tutorial)
Skyforge: CE 46 0F 00
Cooking Pot: B3 5C 0A 00
Tanning Rack: 6A 86 07 00 - Create a NAM1 subrecord. This is the number of the resulting item to create. This can either be a 2 byte or a 4 byte integer.
For the tutorial enter 01 00.
Part 4: Finalize and Test
Almost done!
Go back to TES4's HEDR subrecord and change Record Count to the total number of GRUPs plus the TES4 record. For some reason this does not include records inside of GRUPs.
If you followed the tutorial, this will be 2. TES4 and GRUP (COBJ).
Now save your plugin as an esp file and enable it in Skyrim (Data Files in launcher or edit plugins.txt).
Load the game and visit a forge. You will find the Woodcutter's Axe recipe in the MISC section of the Forge.
If you would like to know how to move the recipe to another section besides MISC, follow the steps below.
(Optional) Part 5: Moving Your Recipe to a Different Menu
The data that determines where in the smithing menu the recipe appears is actually found in the resulting item rather than the recipe.
Each item contains keywords (like tags or categories) that affect where they appear in various menus, such as shopping menus, smithing menus, or in your inventory.
So to move your recipe to a different menu, you have to edit the keywords for that item, which also means overwriting the game's record for that item.
- Open Skyrim.esm with TESsnip. Find the item and copy it and it's group record to your plugin.
For the tutorial, copy the WEAP record Axe01 (0002f2f4). - TESsnip doesn't handle string references properly and causes the item name to display the string ID as a string instead of getting the actual string. The fix for this is to change the FULL subrecord to the actual name. This will need to be translated for translated versions of the plugin.
For the tutorial, set the FULL subrecord to Woodcutter's Axe. - The KWDA subrecord contains the keywords for the item. Similar to the CNTO subrecord for COBJ (recipe) records, the KWDA subrecord can contain multiple values. Every 4 bytes is a keyword ID, corresponding to a KYWD record.
Items crafted by recipes need a Material keyword in order to appear in one of the existing sections of the smithing menu. Without a Material keyword, the recipe will appear in the MISC section by default.
Most Material keywords are either WeapMaterial or ArmorMaterial. These can be found in the KYWD records.
For the tutorial, we want to add the WeapMaterialIron keyword, which is keyword ID 0001e718.
So add to the end of the KWDA, after the existing keyword ID, 18 E7 01 00. - The last subrecord that needs to be modified is the KSIZ subrecord. This subrecord is an integer that specifies the number of keyword IDs used in KWDA.
For the tutorial, we now have 2 keywords assigned to the item, so change KSIZ to 02 00 00 00.
And that's it! Update your record count, save your esp and load it in the game to test it out. You should find the Woodcutter's Axe in the Iron smithing menu.
Appendix A: Form IDs
Feel free to correct me if I'm wrong about this, but this has worked for me so far.
I believe form IDs are normally created automatically by the CK. But in this case we have to make up our own. The simplest way that seems to work is to have your form IDs start with 01. Then select a number (in hex) between 01 and FF for your own use to be the 2nd byte. Then use the remaining bytes to number your records. For example mine are 0188xxxx. 88 being the number I selected to identify my new records and xxxx being 0001, 0002, etc.
The difference between 00 and 01 ids:
The first two digits in the form ids are called the mod index. Everything in Skyrim.esm automatically has a mod index of 00. Additional esm/esp files will be assigned a mod index based on their load order. Since Update.esm loads after Skyrim.esm, it gets the mod index of 01. Plugins loaded after that will be 02, 03, 04, etc. Every 01 id and reference to a 01 id you include in your plugin will automatically have it's mod index changed based on what mod index that game assigns it. You'll only see this change in the game. It will not make changes to the plugin file itself. So as long as you give your new records a 01 id, you should be fine. Only use 00 ids to replace existing Skyrim.esm records or reference them.
Appendix B: CTDA Subrecords
CTDA subrecords specify conditions that must be met before the recipe will appear in the smithing menus. They are long and complex. Here's what I know so far.
Some of this I figured out from the CTDA_Field entry on UESP, but not everything matches up.
The CTDA subrecord is typically 32 bytes long.
00 00 00 00 00 00 80 3F C0 01 54 00 66 AD 03 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF
- Operator and Flags
This byte contains two properties. The first property is one operator.
Possible values appear to be:
- 00 - equal to
- 20 - not equal to
- 40 - greater than
- 60 - greater than or equal to
- 80 - less than
- A0 - less than or equal to
- 01 - OR. Use this if use multiple CTDA subrecords and want to require either of their conditions to be met instead of both.
- 02 - Run on target. By default the function is run on the player (such as player.HasPerk). I'm not sure what the target is when dealing with recipes.
- 04 - Use global. Don't know what this does yet.
For example 62 will use the "greater than or equal to" operator with the "run on target" flag enabled.
83 will use the "less than" operator with the "OR" flag and "run on target" flag enabled.
40 will use the "greater than" operator with no flags enabled. - Padding, does nothing apparently.
- Value that the function will be compared to using the operator.
The value is a float rather than an integer. Use this converter to convert your values. - Function used.
You can find a list of functions here: http://mod.gib.me/sk....html#functions
To get the value of a function to enter, take the function's id from the page, subtract 4096, and convert the result to hex. - More padding, but always seems to be 54 00.
- Parameter 1, if required by the function.
- Parameter 2, if required by the function.
- More padding and a form id reference?
This is another odd part. According to the wiki this part should be 4 bytes of padding, then 4 bytes for the reference id; 8 bytes total. But in all the CTDAs I've seen so far, this is 12 bytes long instead of 8 bytes. So I have no clue which part is the reference id, or if the last 4 bytes is something else completely.
This CTDA subrecord checks if the player has the Steel Smithing Perk.
00 00 00 00 00 00 80 3F C0 01 54 00 0D B4 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF
00 Checks if the result of the function equals 1.0 (00 00 80 3F)
C0 01 is the HasPerk function. It's id is 4544. Subtract 4096 and convert the result to hex and you get 01c0.
0D B4 0C 00 is the perk id (000cb40d) for Steel Smithing.
This CTDA subrecord checks if the player has the global value that determines if the player can smith Ancient Nord and Nord Hero gear at the Skyforge (unlocked via quests).
00 00 00 00 00 00 80 3F 4A 00 54 00 D1 46 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF
00 Checks if the result of the function equals 1.0 (00 00 80 3F)
4A 00 is the GetGlobalValue function. It's id is 4170. Subtract 4096 and convert the result to hex and you get 004a.
D1 46 0F 00 is the global id (000f46d1) for SkyForgeSmithing.
This CTDA subrecord checks if the player has at least one Hagraven Feather in their inventory. The various leather recipes for the tanning rack use similar subrecords.
For example, the recipe that lets you make Leather out of a Fox Hide doesn't appear in the menu unless the player has at least one Fox Hide in their inventory. This prevents you from always seeing every single Leather recipe in the tanning rack menu.
60 00 00 00 00 00 80 3F 2F 00 54 00 66 AD 03 00 00 00 00 00 02 00 00 00 14 00 00 00 FF FF FF FF
60 Checks if the result of the function is greather than or equal to 1.0 (00 00 80 3F)
2F 00 is the GetItemCount function. It's id is 4143. Subtract 4096 and convert the result to hex and you get 002f.
66 AD 03 00 is the item id (0003ad66) for Hagraven Feathers.
This one has some additional stuff in the padding at the end, but I have no idea what it does.
Edited by Samutz, 07 February 2012 - 06:41 PM.
Sign In
Create Account



Back to top

Terms of Service