How To: Adding New Furniture to Display Model - darkconsole/dse-display-model GitHub Wiki
Armed with a working NIF file for the furniture's 3D model, and a working animation that pairs with it, these are the steps needed to add a simple furniture with a single pose.
Things not covered by this guide that you will need to already know about before starting:
- How to make your own animations.
- How to add your animations to FNIS.
- How to make your own meshes and textures.
- The basics of working with xEdit.
Overview
- Decide on your naming
- Get your animation into FNIS
- Create the Idle Animation (IDLE)
- Create the Package (PACK) that points to the IDLE
- Create the Activator (ACTI) that references your Device ID
- Create the Static (STAT) "Move Ghost"
- Create the Misc Item (MISC) "Inventory Item" that references your DeviceID
- Create the Constructable Object (COBJ) so it can be built at the forge
- Create the JSON file tying it all together
- Releasing Your Expansion Pack
0) Decide on your naming.
Honestly this is more important than you probably think it is. Here is an Example.
-
We want to make a Display Model Expansion Pack and we're calling it
Snark's Display Model Expansion Pack #1 -
Your name is
snarkconsole -
You are calling your device
The Spazinator -
While someone is using this device they will be said to be
Spazzing on the Spazinator -
It is then suggested you name the NIF file
meshes\snark-dmpack1\Spazinator01.nif -
With all your custom textures being in
textures\snark-dmpack1 -
And your ESP would be called
snark-dmpack1.esp -
And your Animation File would be (because FNIS)
meshes\actors\character\animations\snark-dmpack1\poses\Snark-Spazinator01-A1.hkx -
And your Animation Event (the thing you
player.saeto test) would besnark-dm-spazinator01-a1 -
And your
DeviceIDwould beSnark-Spazinator01
snark-is called a "Vendor Prefix" it uniquely identifies you as a mod authour. You should try and pick something short but unique to you in the community.
Example: My vendor prefix for Special Edition is
dse-, which means you should never be using it, or I will come to your house and poop on your doorstep.
1) Get your animation into FNIS.
The line in your FNIS_snark-dmpack1_List.txt would look something like this.
b -md,AVIbHeadTrackSpine,AVbHumanoidFootIKDisable snark-dm-spazinator01-A1 poses\Snark-Spazinator01-A1.hkx
This will allow the character's head to track people as they walk by, while keeping their spine locked in place, and prevent their feet from trying to "find" the ground. It can be tested by doing player.sae snark-dm-Spazinator01-a1
You will need to run both of the FNIS tools, FNIS for Modders followed by FNIS for users. FNIS for Modders will generate a file called meshes\actors\character\behaviors\snark-dmpack1\FNIS_snark-dmpack1_Behavior.hkx that you will need to package with the mod.
2) Create the Idle Animation (IDLE)
This teaches the game that the Idle/Pose exists.
-
In
dse-display-model.espfind the Idle Animation calleddse_dm_IdleTPose, right click,Copy as new record..., name itsnark_dm_IdleSpazinator01A1, selectsnark-dmpack1.espand accept. Your ESP should now have a new entry that is a duplicate of my template. -
Find your
snark_dm_IdleSpazinator01A1and edit theENAM - Animation Eventwhich currently saysdse-dm-tposeto saysnark-dm-spazinator01-a1- the name of the animation event in your FNIS from step 1.
3) Create the Package (PACK) that points to the IDLE
This teaches the game how to use the Idle/Pose while bound to furniture.
-
In
dse-display-model.espfind the Packagedse_dm_PkgIdleTPose, right click,Copy as new record..., name itsnark_dm_PkgIdleSpazinator01A1, selectsnark-dmpack1.espand accept. -
Find your
snark_dm_PkgIdleSpazinator01A1and edit theIDLA - AnimationsAnimation #0which currently saysdse_dm_IdleTPoseto point to yoursnark_dm_IdleSpazinator01A1
4) Create the Activator (ACTI) that references your Device ID
This is the object which will be placed in the game world and able to be clicked to interact with the furniture. If you do not know your DeviceID refer back to Step 0 of this guide. Until now you have not used it, but at this point you need to pick it and you need to stick with it.
-
In
dse-display-model.espfind the Activatordse_dm_FurnTest01, right click,Copy as new record..., name itsnark_dm_FurnSpazinator01, selectsnark-dmpack1.espand accept. -
Find your
snark_dm_FurnSpazinator01and make the following Edits:-
VMAD / Scripts / Script / dse_dm_ActiPlaceableBase / Property / Device IDchange the value which currently saysDSE-Test01to saySnark-Spazinator01- your DeviceID. -
FULL - Namechange the value which currently saysTest Furnitureto sayThe Spazinator- the proper name of your device. -
Model / MODL - Model FileNamechange the value which currently saysdse-display-model\test.nifto saysnark-dmpack1\Spazinator01.nif- the path to the 3D model.
-
5) Create the Static (STAT) "Move Ghost"
This is the object that will give you a rough idea how a device is oriented while moving it around the game world. The ones that come with Display Model have that ghostly white appearance.
-
In
dse-display-model.espfind the Staticdse_dm_GhostTest01, right click,Copy as new record..., name itsnark_dm_GhostSpazinator01, selectsnark-dmpack1.espand accept. -
Find your
snark_dm_GhostSpazinator01and change theMODL - Model FileNamewhich currently saysdse-display-model\test.nifto saysnark-dmpack1\Spazinator01.nif- the path to the 3D model.
NOTE: Ideally you would make a copy of your 3D model with no (real) textures, fewer polygons, fewer shapes, and no collision. When you move official Display Model furniture around you notice you get a more simple white ghosty version, all it needs to do is give you a rough idea of where the object is going to be and the space it is going to use. You can find the official ones in the meshes\dse-display-model\Ghosts directory to see how I do that. If you do make a ghost model remember to update the MODL - Model FileName to point to it.
6) Create the Misc Item (MISC) "Inventory Item" that references your DeviceID
This is the object that lives in your inventory after you pick up a device, removing it from the game world. This is also what is given to the player when crafting furniture at the forge.
-
In
dse-display-model.espfind the Misc. Itemdse_dm_ItemTest01, right click,Copy as new record..., name itsnark_dm_ItemSpazinator01, selectsnark-dmpack1.espand accept. -
Find your
snark_dm_ItemSpazinator01and make the following edits:-
VMAD / Scripts / Script / dse_dm_ItemPlaceableBase / Property / Device IDchange the value which currently saysDSE-Test01to saySnark-Spazinator01- your DeviceID. -
FULL - Namechange the value which currently saysDM3 | Test Furnitureto sayThe Spazinator- the proper name of your device, as it should be listed at the Forge. All the official Display Model Furniture have the prefixDM3 |so that they appear together - it is acceptable for you to also prefix themDM3 |or use your own prefix if you want.
-
7) Create the Constructable Object (COBJ) so it can be built at the forge.
This teaches the game how to let the player use the forge to construct the device. Until now I told you to use ones obviously named Test as a template, but I can't give you a test template because the game would show it.
-
In
dse-display-model.espfind the Constructable Objectdse_dm_BuildDollStand01, right cick,Copy as new record..., name itsnark_dm_BuildSpazinator01, selectsnark-dmpack1.espand accept. -
Find your
snark_dm_BuildSpazinator01and make the following edits:-
CNAM - Created Objectchange this to point at yourdse_dm_ItemSpazinator01from step 6. -
Edit the crafting requirements
Itemsas you see fit. It is best that you pick materials that are both reasonable for the device you made (like if it obviously needs wood) but also set the amounts required to still be enjoyable for the game.
-
8) Create the JSON file tying it all together.
This file defines everything about a device that describes things like what poses exist for it, any additional meshes that should be spawned, etc.
-
Find the file
configs\dse-display-model\devices\DSE-DollStand01.jsonand make a copy of it, naming your fileSnark-Spazinator01.json- note you are keeping thedse-display-modelfile path in this case. This is how the mod will find your furniture. -
Make the following edits to your
Snark-Spazinator01.jsonActivator, Ghost, Inventory, Package, and Form fields must be in the format:
"FormID|EspName"You can copy the FormID from xEdit by clicking on the row in the left pane and hitting ctrl+i. For example this is the form ID for my Dollstand:
0300182A- the first two digits03are the load order (as far as xEdit knows) and you need replace them with0xwhich makes mine look like0x00182A|dse-display-model.esp.-
Set
Device.IDto the textSnark-Spazinator01- the same value you set on the VMAD in step 4. -
Set
Device.Activatorto the FormID forsnark_dm_FurnSpazinator01, your ACTI from step 4. -
Set
Device.Ghostto the FormID forsnark_dm_GhostSpazinator01, your STAT from step 5. -
Set
Device.Inventoryto the FormID forsnark_dm_ItemSpazinator01, your MISC from step 6. -
Set
Device.Actors[0].Nameto the textSpazzing on the Spazinator. -
Set
Device.Actors[0].Packageto the FormID forsnark_dm_PkgIdleSpazinator01A1, your PACK from step 3. -
If your device is short or close to the ground, set the
Device.GrabOffsetto a low number like 0-16. -
If your device is as tall as a humanoid, set the
Device.GrabOffsetto a higher number like 64.
-
You should now have a working furniture for the game. Go to the forge, craft your Spazinator, place it in the world, put an NPC on it, make sure it all works.
9) Releasing Your Expansion Pack
When you are all done, your mod should have the following files.
snark-dmpack1.espconfigs\dse-display-model\Snark-Spazinator01.jsonmeshes\actors\character\animations\snark-dmpack1\FNIS_snark-dmpack1_List.txtmeshes\actors\character\animations\snark-dmpack1\poses\Snark-Spazinator01-A1.hkxmeshes\actors\character\behaviors\snark-dmpack1\FNIS_snark-dmpack1_Behavior.hkxmeshes\snark-dmpack1\Snark-Spazinator01.nifmeshes\snark-dmpack1\Snark-Spazinator01-Ghost.nif(if you made one)textures\snark-dmpack1\<any dds files>
If you are extending DM using another mod like ZAP you should NOT copy the meshes and texture files. You should be using them where that mod installed them, and then tell users that other mod is a required dependency. That is how you avoid getting yelled at for stealing. The exception here is if you had to edit someone else's file to make it work, and they allow for that to happen.
Zip that up with the structure intact and share your shit.
And remind people to re-runs FNIS after because they never will.