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.sae
to test) would besnark-dm-spazinator01-a1
-
And your
DeviceID
would 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.esp
find the Idle Animation calleddse_dm_IdleTPose
, right click,Copy as new record...
, name itsnark_dm_IdleSpazinator01A1
, selectsnark-dmpack1.esp
and accept. Your ESP should now have a new entry that is a duplicate of my template. -
Find your
snark_dm_IdleSpazinator01A1
and edit theENAM - Animation Event
which currently saysdse-dm-tpose
to 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.esp
find the Packagedse_dm_PkgIdleTPose
, right click,Copy as new record...
, name itsnark_dm_PkgIdleSpazinator01A1
, selectsnark-dmpack1.esp
and accept. -
Find your
snark_dm_PkgIdleSpazinator01A1
and edit theIDLA - Animations
Animation #0
which currently saysdse_dm_IdleTPose
to 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.esp
find the Activatordse_dm_FurnTest01
, right click,Copy as new record...
, name itsnark_dm_FurnSpazinator01
, selectsnark-dmpack1.esp
and accept. -
Find your
snark_dm_FurnSpazinator01
and make the following Edits:-
VMAD / Scripts / Script / dse_dm_ActiPlaceableBase / Property / Device ID
change the value which currently saysDSE-Test01
to saySnark-Spazinator01
- your DeviceID. -
FULL - Name
change the value which currently saysTest Furniture
to sayThe Spazinator
- the proper name of your device. -
Model / MODL - Model FileName
change the value which currently saysdse-display-model\test.nif
to 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.esp
find the Staticdse_dm_GhostTest01
, right click,Copy as new record...
, name itsnark_dm_GhostSpazinator01
, selectsnark-dmpack1.esp
and accept. -
Find your
snark_dm_GhostSpazinator01
and change theMODL - Model FileName
which currently saysdse-display-model\test.nif
to 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.esp
find the Misc. Itemdse_dm_ItemTest01
, right click,Copy as new record...
, name itsnark_dm_ItemSpazinator01
, selectsnark-dmpack1.esp
and accept. -
Find your
snark_dm_ItemSpazinator01
and make the following edits:-
VMAD / Scripts / Script / dse_dm_ItemPlaceableBase / Property / Device ID
change the value which currently saysDSE-Test01
to saySnark-Spazinator01
- your DeviceID. -
FULL - Name
change the value which currently saysDM3 | Test Furniture
to 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.esp
find the Constructable Objectdse_dm_BuildDollStand01
, right cick,Copy as new record...
, name itsnark_dm_BuildSpazinator01
, selectsnark-dmpack1.esp
and accept. -
Find your
snark_dm_BuildSpazinator01
and make the following edits:-
CNAM - Created Object
change this to point at yourdse_dm_ItemSpazinator01
from step 6. -
Edit the crafting requirements
Items
as 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.json
and make a copy of it, naming your fileSnark-Spazinator01.json
- note you are keeping thedse-display-model
file path in this case. This is how the mod will find your furniture. -
Make the following edits to your
Snark-Spazinator01.json
Activator, 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 digits03
are the load order (as far as xEdit knows) and you need replace them with0x
which makes mine look like0x00182A|dse-display-model.esp
.-
Set
Device.ID
to the textSnark-Spazinator01
- the same value you set on the VMAD in step 4. -
Set
Device.Activator
to the FormID forsnark_dm_FurnSpazinator01
, your ACTI from step 4. -
Set
Device.Ghost
to the FormID forsnark_dm_GhostSpazinator01
, your STAT from step 5. -
Set
Device.Inventory
to the FormID forsnark_dm_ItemSpazinator01
, your MISC from step 6. -
Set
Device.Actors[0].Name
to the textSpazzing on the Spazinator
. -
Set
Device.Actors[0].Package
to the FormID forsnark_dm_PkgIdleSpazinator01A1
, your PACK from step 3. -
If your device is short or close to the ground, set the
Device.GrabOffset
to a low number like 0-16. -
If your device is as tall as a humanoid, set the
Device.GrabOffset
to 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.esp
configs\dse-display-model\Snark-Spazinator01.json
meshes\actors\character\animations\snark-dmpack1\FNIS_snark-dmpack1_List.txt
meshes\actors\character\animations\snark-dmpack1\poses\Snark-Spazinator01-A1.hkx
meshes\actors\character\behaviors\snark-dmpack1\FNIS_snark-dmpack1_Behavior.hkx
meshes\snark-dmpack1\Snark-Spazinator01.nif
meshes\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.