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

  1. Decide on your naming
  2. Get your animation into FNIS
  3. Create the Idle Animation (IDLE)
  4. Create the Package (PACK) that points to the IDLE
  5. Create the Activator (ACTI) that references your Device ID
  6. Create the Static (STAT) "Move Ghost"
  7. Create the Misc Item (MISC) "Inventory Item" that references your DeviceID
  8. Create the Constructable Object (COBJ) so it can be built at the forge
  9. Create the JSON file tying it all together
  10. 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 be snark-dm-spazinator01-a1

  • And your DeviceID would be Snark-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.

  1. In dse-display-model.esp find the Idle Animation called dse_dm_IdleTPose, right click, Copy as new record..., name it snark_dm_IdleSpazinator01A1, select snark-dmpack1.esp and accept. Your ESP should now have a new entry that is a duplicate of my template.

  2. Find your snark_dm_IdleSpazinator01A1 and edit the ENAM - Animation Event which currently says dse-dm-tpose to say snark-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.

  1. In dse-display-model.esp find the Package dse_dm_PkgIdleTPose, right click, Copy as new record..., name it snark_dm_PkgIdleSpazinator01A1, select snark-dmpack1.esp and accept.

  2. Find your snark_dm_PkgIdleSpazinator01A1 and edit the IDLA - Animations Animation #0 which currently says dse_dm_IdleTPose to point to your snark_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.

  1. In dse-display-model.esp find the Activator dse_dm_FurnTest01, right click, Copy as new record..., name it snark_dm_FurnSpazinator01, select snark-dmpack1.esp and accept.

  2. Find your snark_dm_FurnSpazinator01 and make the following Edits:

    • VMAD / Scripts / Script / dse_dm_ActiPlaceableBase / Property / Device ID change the value which currently says DSE-Test01 to say Snark-Spazinator01 - your DeviceID.

    • FULL - Name change the value which currently says Test Furniture to say The Spazinator - the proper name of your device.

    • Model / MODL - Model FileName change the value which currently says dse-display-model\test.nif to say snark-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.

  1. In dse-display-model.esp find the Static dse_dm_GhostTest01, right click, Copy as new record..., name it snark_dm_GhostSpazinator01, select snark-dmpack1.esp and accept.

  2. Find your snark_dm_GhostSpazinator01 and change the MODL - Model FileName which currently says dse-display-model\test.nif to say snark-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.

  1. In dse-display-model.esp find the Misc. Item dse_dm_ItemTest01, right click, Copy as new record..., name it snark_dm_ItemSpazinator01, select snark-dmpack1.esp and accept.

  2. Find your snark_dm_ItemSpazinator01 and make the following edits:

    • VMAD / Scripts / Script / dse_dm_ItemPlaceableBase / Property / Device ID change the value which currently says DSE-Test01 to say Snark-Spazinator01 - your DeviceID.

    • FULL - Name change the value which currently says DM3 | Test Furniture to say The Spazinator - the proper name of your device, as it should be listed at the Forge. All the official Display Model Furniture have the prefix DM3 | so that they appear together - it is acceptable for you to also prefix them DM3 | 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.

  1. In dse-display-model.esp find the Constructable Object dse_dm_BuildDollStand01, right cick, Copy as new record..., name it snark_dm_BuildSpazinator01, select snark-dmpack1.esp and accept.

  2. Find your snark_dm_BuildSpazinator01 and make the following edits:

    • CNAM - Created Object change this to point at your dse_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.

  1. Find the file configs\dse-display-model\devices\DSE-DollStand01.json and make a copy of it, naming your file Snark-Spazinator01.json - note you are keeping the dse-display-model file path in this case. This is how the mod will find your furniture.

  2. 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 digits 03 are the load order (as far as xEdit knows) and you need replace them with 0x which makes mine look like 0x00182A|dse-display-model.esp.

    • Set Device.ID to the text Snark-Spazinator01 - the same value you set on the VMAD in step 4.

    • Set Device.Activator to the FormID for snark_dm_FurnSpazinator01, your ACTI from step 4.

    • Set Device.Ghost to the FormID for snark_dm_GhostSpazinator01, your STAT from step 5.

    • Set Device.Inventory to the FormID for snark_dm_ItemSpazinator01, your MISC from step 6.

    • Set Device.Actors[0].Name to the text Spazzing on the Spazinator.

    • Set Device.Actors[0].Package to the FormID for snark_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.