Appearances: change the looks

Changing an NPC's default appearances (and adding more via AMM)

If you want to create a custom NPC from scratch, look here.

You can find another guide about this linked on the Community Guides page (direct link)

Created by @manavortex Published December 27 2022

This guide will walk you through editing NPC appearances for Cyberpunk 2077.

If you want to create your own custom NPC, see here.

It uses the following versions:

  • Cyberpunk 2077 game version >= 1.6

  • WolvenKit >= 8.7.1-nightly.2022-11-04

  • (only if you want to add new appearances) AppearanceMenuMod >= 1.15

Assumed skill level: You're able to read.

The .ent file

The game's first point of contact is the .ent file. You can find it by searching WolvenKit like this:

<npcName>*.ent

If you come up blank, try around with variations. E.g., Johnny is "silverhand", Viktor is "ripperdoc".

However, the file contains the path to an .app file. Find and add it to your project.

If you are using Appearance Menu Mod, this list will look familiar.

Major NPCs have their own .app files: base\characters\appearances\main_npc\.

Others are not so lucky - e.g., Mamá Welles is lobbed in with the other valentino goons: base\characters\appearances\gang\gang__valentinos_wa.app

The .app file

The array appearances will contain a list with every appearance that's defined for this NPC, matching the key appearanceName in the .ent file.

Not all of these have been "published" (as in "hooked up to .ent files"). For an example of this, check base\characters\appearances\citizen\citizen__children_mc.app

The only thing you need to care about is the components array, where you can add, remove, or modify parts of an NPC's appearance:

The names of components need to (read: "should") be unique so you can manipulate them outside of the .app file.

CDPR's style of unique naming allows us to find components and their usage across the game files, which will come on handy when we're trying to add items.

This is where the magic happens.

Changing and removing components

Change items by selecting a different appearance or a different mesh:

Wake up, Johnny! … Follow the white rabbit, Johnny!

Remove items by deleting their entries from the list:

no more ring!

Animations: if you can't avoid them, copy them as well!

Anything of the type entAnimatedComponent means that components are animated. That's mostly the case for physics-enabled stuff influenced by gravity, such as coats, jackets, or long hair.

Physics gave us the atomic bomb. (It also gave us computers, but this is besides the point right now.)

Animations are usually unique to meshes on a by-pixel basis and do not react kindly to edits or swaps. (Try splitting the obi from Saburo's kimono into its own submesh if you don't believe me).

If you copy an animated component (e.g. Johnny's vest), then you need to copy the corresponding entAnimatedComponent as well, or the mesh won't move.

Any of these are an indicator that there is TROUBLE

If you delete a physics-enabled component, you can safely delete the corresponding AnimatedComponent.

(Safely) adding components

If you want to exchange an NPC's hair, check here.

The obvious thing to do if you want to add a new item is to duplicate another component and then act as if it was just another change:

This is usually safe, as long as you are sticking to entSkinnedMeshComponents.

And this might work. Or it might end up leaving them standing in an exploded pixel cloud. In case of animated components, editing them will almost certainly break them.

In that case, you need to browse the files for any occurances of the component you want to add and copy the relevant components. For example, if you want to put Johnny into a different kind of vest, this is how you'd go about it:

  1. Search for the mesh name of the vest that you want to use (e.g. ma_vest__high_collar*.mesh)

  2. Select the mesh, then "find files using this": If you run into an error, make sure that you have the "Wolvenkit Resources" plugin installed!I

  3. Find an .app file that looks promising - for example Scorpion's: Open it without adding it to the project (you don't need the file).

  4. Find and select the components in the other NPC's appearance list:

  5. Select "Copy Selection From Array/Buffer"

  6. Go back to your original .app file and select either the "components" array or any component inside it. Now right-click and select "Paste Selection From Array/Buffer".

  7. If you haven't done that yet, delete the original component(s) and animations:

Adding new appearances

Adding a new appearance to AMM requires you to register it in three files:

  1. the .lua

  2. the .ent

  3. the .app

If you are using HotReload, don't forget to "reload all mods" to make AMM pick up the changes in the script.

The .lua file

To tell AMM about your new appearances and make them available, you have to create a LUA file in the following folder: Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks\mods\AppearanceMenuMod\Collabs\Custom Appearances. Let's call it AMM_JohnnyTutorial.lua.

Give it the following content:

return {
  modder = "tutorial",
  unique_identifier = "tutorial_johnny_appearances",
  entity_id = "0x5E611B16, 24",
  appearances = {
    "silverhand_cyberspace_glasses",
    "silverhand_fluffy_socks",
  },
}

You can find the correct entity ID by looking at the character with AMM:

If the NPC doesn't yet exist, you can create a custom entity. For an example file, check one of these mods.

Now, we have to hook up the new appearances.

The .ent file

Find the .ent file that you've identified in the first step of this guide, and add it to your WolvenKit project. Open it, then duplicate the last item in the appearances array. Now, change the new entry to match your custom appearance:

appearanceName

cyberspace_glasses

name

silverhand_cyberspace_glasses

leave the rest alone, unless you know what you're doing

The .app file

In the app file, duplicate one of the already existing appearances, and change the name of the new item to the one you specified in the .ent file:

You can now change components around as specified above!

Troubleshooting

My new component won't move at all!

You may have forgotten to copy the animation file. Look for an entAnimatedComponent inside the .app — they're usually called something like xxx_dangle(s) or collar. (See here)

I added an appearance, but a random one is showing when I select it

That's what happens when the game can't find the appearance you picked. You're probably trying to add an AMM appearance. Check the spelling between your lua file with the appearance name, the mapping entry inside the .ent, and the appearance's name in the .app file.

For further troubleshooting steps, see here.

Last updated

#647: Add info on downloading Phantom Liberty DLC files for rollback

Change request updated