ArchiveXL: body mods and refits

Summary

This page explains how to enable body mod support in ArchiveXL:

Body modders: Adding support

Clothing mods: Making use of the tags

Checking the current body

Run the following code snippet in CET to see which body is currently installed:

print(Game.GetScriptableSystemsContainer():Get("PuppetStateSystem"):GetBodyTypeSuffix(ItemID.new(), GetPlayer(), nil))

NOTE

The past method of adding the components to each individual appearance does still work. However, you'll want to use the new method (for version >= 1.14), since it is both more robust and less tedious.

Body modders: Adding support

Starting with version 1.14, you can use ArchiveXL: Resource patching to inject your tags into the existing files!

You can download the template from Nexus, or create one yourself.

1. Registering the body mod

  1. Create an .xl file in your Wolvenkit Project's resources folder (File -> New file -> ArchiveXL)

  2. Optional: Name it the same as your current project (e.g. boobs_for_back_problems.archive.xl)

  3. Put the following file content:

player:
  bodyTypes: [ NewBody ]  # for substitutions, this will be converted 
                          # to snake case: new_body

2. Patch the player entity files

We'll make use of ArchiveXL: Resource patching for this.

Set up the patch .ent

If you downloaded the template project, a patch .ent will already be included.

Create your own patch .ent
  1. In Wolvenkit, select File -> New File

  2. Scroll down the menu until you find the one with the extension .ent (should be EntEntityTemplate)

  3. Add a new, blank EntEntityTemplate to your project

  4. Give it a good name and move it somewhere

  5. Open the file and select the components array

  6. Add a new entMeshComponent and name it Body:YourBodyTag

  7. Now, proceed with the rest of the guide

  1. Inside the patch .ent, find the entMeshComponent under the components array.

  2. Change its name to match your body mod, e.g. Body:BoobsForBackProblems -> Body:NewBody

Register the patch .ent

Make sure that your patch .ent is added to the game by telling ArchiveXL about it. Add the following block to your .xl file:

resource:
    patch:
        path\to\your\patch_file.ent:
          - !include player_wa.ent 
          - !include player_ma.ent 

Include only the relevant body gender!

3. Test

That's it, everything should work now! Let's test.

  1. Launch the game and load into a save

  2. check if the body tag registers by running the CET command.

If yes: Congratulations, you've made it much easier for people to add refits for your body!

Troubleshooting

The process is so simple that there aren't many things to go wrong:

  1. Update ArchiveXL

  2. Double-check your .yaml via yamllint and make sure you don't have syntax errors (indent matters)

If that doesn't work, check if the component gets added correctly. There are two ways to do this:

CET:

print(GetPlayer():FindComponentByName("Body:NewBody"))

If that still doesn't work, consider using the template from Nexus, which has been tried and tested on May 18 2024 with ArchiveXL

Clothing mods: Making use of the tags

The problem

Even with the AKL AutoRefitter, the process of supporting body mods is tedious. And even worse: you then have to pack everything separately for Nexus:

The Solution

If a mod supports body tags, ArchiveXL can detect the current body mod, and conditionally load the correct mesh. Now, everything can be put into a single .archive!

Dynamic Appearances

If you're using dynamic appearances, you don't need to register a suffix and can simply match or substitute for the body tag:

appearance name:
t0_recoloured_netrunner_suit&body=new_body

substitution:
*my\mod\meshes\p{gender}a_netrunning_suit_{body}.mesh

If no body mod is installed, the value will be base_body, so make sure to name your files and folders accordingly!

Suffixes

If you're sticking to the classical approach, you need to add the following lines to your .yaml:

  appearanceSuffixes:
    - !append itemsFactoryAppearanceSuffix.BodyType

Now, you can use the suffixes in your root entity just like camera states or body genders:

appearanceName: my_custom_shirt&FPP&NewBody

Supporting mods

The following body mods support dynamic body switching.

If you know something that should be on the list, please edit The Wiki!

As of 18th March 2024, Nim's More Body Meshes is compatible again with Gymfiend Body Mod.

Use only one main archive! [#_nim_more_body_meshes_Gymfiend_patch.archive]

ModTag namesubstitution value

Lush

&body=lush

Lush

&body=lush

Ult

&body=ult

Song2

&body=song2

Angel

&body=angel

RB

&body=rb

EBB

&body=ebb

EBBP

&body=ebbp

EBBRB

&body=ebbrb

EBBPRB

&body=ebbprb

Gymfiend

&body=gymfiend

Flat

&body=flat

Last updated