Published: May 13 2023 by
Last documented update: Dec 01 2024 by
This page is a part of the NPV guide. It will show you how to use the provided example project to create a custom NPC for Cyberpunk 2077, whom you can then spawn with AppearanceMenuMod.
It will give you an overview over the control files and tell you how to pull in the right meshes (and appearances).
Video guide
created two video guides for this (November 2024 and January 2024). You can find a tutorial on body and head components and a tutorial on clothing components .
Wait, this isn't what I want!
How about ?
Find a more detailed guide about adding components to NPC app files under . This may help you if you get stuck!
Prerequisites
This guide assumes that
you already have a head mesh (see otherwise)
that you're using a set of default paths (if not, you will have to adjust)
the corresponding files are in either of these folders
tutorial\npv\your_female_character\headtutorial\npv\your_male_character\head
Skipping and skimming
This guide contains as little fluff as possible, and since much of it has been covered in other guides, extra information will be contained in the links. These will be annotated as clearly as possible with what you need to read and what's optional.
If you're skimming in this guide, you will end up making mistakes. Read thoroughly. If at the end of a section you aren't where the guide says you're supposed to be, fall back and double-check your process. If you still have trouble, you can hit us up on in the #mod-development channel.
Remember that at any time, you can check your progress by .
How everything hangs together
This section will explain what the template files do and how they hang together. You do not need to follow links; they add extra information or context if you want them.
If you like suffering, you can rely on the "fuck around and find out" approach, but I recommend at least reading through it.
In the end, an NPV is just a with a god complex. For that reason, the is the same (it's just a lot more complex, because you have more than 4 components).
If diagrams help you, then to see one.
The .lua file
We're registering our NPC with AppearanceMenuMod via a .lua file, which needs to end up in AMM's Custom Entities folder. The full path in the Cyberpunk directory will be this:
I have prepared two example files in the Wolvenkit's project's resources. Delete the one that you aren't using, then let's take a look at the other one:
tutorial_custom_female_character.lua
tutorial_custom_male_character.lua
The file content
This is the file content for the female example:
It loads our from tutorial\npv\your_female_character\_your_female_character.ent. That's the file which tells the game what to load.
You can and should change this file — see the inline documentation above for what to change. To do that, you can use a text editor such as .
The root entity
You find the root entity for your character here:
(You don't need any of this information to finish the guide.)
The root entity hooks up your .app file and the appearance names in the .lua file, and that's about everything there is to say about it. Here's how it looks:
If you want to add more appearances:
duplicate an existing entry
change the last key
Let's look at the .app file now.
The app file
You can find a more detailed guide about adding stuff to .app files under . It's optional, unless you're really stuck.
(You don't need any of this information to finish the guide.)
This section will tell you how to edit your NPV's appearance – their skin colour, chrome, piercings, tattoos. We will do this in the .app file.
When changing component names, you want to leave the (t0_, hx_) in place — the game needs them!
An .app file holds a number of appearances. These are connected by name to your entity file:
Inside each appearanceDefinition (appearance for short), the components array defines your NPC's properties. This is where the game is told to pull in facial expressions, animations, hair, skin, and equipment.
This is where all of your NPC's appearances are defined (appearanceDefinition, linked to the root entity via name). The appearanceDefinition's components define your NPV's properties, such as
animations
their shadow
hair
body
Step 1: Cleaning up
Deleting meshes from the mod's files left you with a bunch of inactive components. If you start the game now, there's a chance that you might crash.
Wolvenkit's will help you finding the components that you can delete.
Their names will show up in the log:
Go through the appearances and delete all components that File Validation warned you about. After that, you're good go customize your NPC!
Step 2: Customizing
The next section, , will help you find the right appearance names.
If you feel completely lost, you can read up on – the concept is exactly the same.
will help you by detecting broken links: keep an eye on Wolvenkit's log when you save a file.
Adding another component
If you need more components than you have, you can duplicate an existing one:
Select and right-click
Duplicate it from the context menu
Change the key name to something unique
Adding another appearance
To create more appearances, you can also duplicate an existing entry:
Select and right-click
Duplicate it from the context menu
change the key name to match the one in your root entity
How do I know what to put?
If you prefer to do things the hard way, you can head to and look up your individual parts. Otherwise, I suggest that you use NoraLee's excellent .
The part picker does not yet support the appearances added after 2.1. Our is up-to-date, though!
It will look like this:
The NPV picker does this for you, but here's how to select your eyebrow appearance by hand:
open up the mesh file and expand the first list appearances
The values you found out will go into the components in your NPV's .app file.
The NPV picker gives me a chunkMask...?
This property is used for hiding parts of a mesh. If the part picker gives you this number, simply paste it into the corresponding box in your component:
You can learn more about this under , but this is not necessary for the tutorial.
Customizing Cyberware
If you skip this step, you will end up with invisible cyberware or the wrong colour/appearance.
When selecting a different cyberware than the preconfigured one, you have to set the appearance name, or the whole thing will show up in grey. The appearance names are usually identical to the cyberware (cyberware_01, cyberware_02 etc.), but if you are uncertain, you can also open the mesh file and check the appearances list at the top.
For cyberware added after 2.2, please see ->
Wolvenkit's triggers when you save a file, and it will help you to spot mistakes.
Customizing eyelash colour
If you do not want to customize your eyelash colour, you can skip ahead to .
To set your custom eyelash colour, you need to set it inside the mesh file (as the player's eyelashes are coloured independently from the eye).
Open up the mesh file he_000_pxa_basehead. You can find it in your project browser, or open it from the component:
Find and expand the appearance you are using (the same you set in the .app file).
Find the chunk saying eyelashes_MAT (respectively eyeMat3 for mV) and change its value to the correct eyelash colour (e.g. eyelashes__blue_steel).
Customizing piercings and chrome: Chunkmasks
If you skip this step, you will end up with the wrong or too many piercings and cyberware.
To learn more about chunkmasks, check (if you can do it with the information below, you don't need to)
You have the full piercing or cyberware file, but you're only using parts of it — yet the game stubbornly shows you the whole mesh.
Fortunately, you don't have to edit it in Blender, because you can hide the parts you aren't using via chunkmasks.
Find the piercing or cyberware component in your .app file:
How do I know which numbers to put?
You can see that inside the .mesh file (which you can see in the component's depotPath). Open it in Wolvenkit, then switch to the tab and toggle the checkboxes on the right; those directly correspond to the boxes you need to uncheck in the .app file:
To hide those bits in the .app, we simply need to uncheck the corresponding boxes - check the previous screnshot!
Adding stuff to an appearance
The easiest way to add components is to duplicate an existing component.
For a single appearance
For a single appearance, right-click an existing component, and edit the properties:
For all appearances
To edit all appearances, use the menu bar entries under Appearances -> Edit Components.
Select "Create new component from existing"
Use the filter to find an appearance that you want to duplicate (e.g for a clothing item, duplicate a clothing component)
Give the component a unique name! You need this in the next step
Now, use "Change mesh component properties"
For "New component name", select the one from step 3
The other properties should be self-explanatory — this will edit the component's depot path, mesh appearance, and chunk mask.
If you need to change more about your component, use the to display only your new component across all appearances.
Adding modded items
For a step-by-step guide on how to add items from mods to your NPV, check -> !
Hair
This section will teach you how to add another hair mesh to your NPV. We will first remove the default hair, then replace it with the one you want.
To use modded hair, find the correct files and add them to your project.
If you want to look up in-game hairs, check
For more information on hair files, check the
Delete the current hair from the .app — there should be 2-3 components, their names will start with either hair_ or hh_0
Find the correct hair mesh. You have three options for this:
This will give you a list of files, which you can mostly ignore.
The only thing we care about is the hair's control file, which is usually an .ent file:
Some hair mods don't use an .ent file. In this case, the components will be inside the .app file's appearances, similar to NPC apps. You can copy the entire components array of the appearance that you want to use.
If there are multiple files, check which one uses the most components per appearance.
Open the .ent file and expand the components array. You will find three components in there, which you can now copy over to your .app!
The body
As of version 2.2.0, the body mesh and arms are included for easier replacing.
The process is the same as what you did with the hair: find the files in the mod, add them to your project, move them to your NPVs folder and customize them to your liking.
You can find more information at (which also contains the tattoo paths).
And that's the gist of it!
Go forth and create custom apperances!
You can , or look through the .app files for other NPCs for ideas. If you need further details, I highly recommend checking out NoraLee's , which will also give you all the context you could possibly need.
For guides on how to export a whole animated character to Blender, you can check .
Please remember that before sharing your NPV, you have to change the paths! You can find a full guide on the fastest way to do that .
Don't forget, you can pack the Wolvenkit project by pressing the green button in Wolvenkit's toolbar, spawning Tutorial Man and Tutorial Woman via AMM to check out your progress.
the meshes are named like their in-game equivalents, e.g. h0_000_pwa_c__basehead.mesh (if not, you will have to adjust)
name
to match the one in your .lua
change the first key appearanceName to the one you want to put in your .app
clothes
Change the depot path to the relative path of your mesh
change the components
see a bunch of entries with naming schemas like colour_01
the numbers correspond with the type of eyebrow in the character editor (look them up here)
Select the correct colour and appearance number
Save the file
Optional: If you want, you can clean up the eye mesh now. Check the eyes before you do!
Select the appearance you are using, then right-click to open the context menu
Hold Shift and select "delete everything but selection"
From the Clean Up menu, select "delete unused materials"
Filtering the files and clicking through their previews:
female: base\characters\common\hair > wa_ > .mesh > !shadow
male: base\characters\common\hair > ma_ > .mesh > !shadow
Enter the name of the hair mesh that you want to use into the Asset Browser's search bar (see next screenshot) and hit Return.
Once you have found the correct mesh file, right-click it and select "Find Files Using This":
return {
-- Your beautiful name :)
modder = "tutorial",
-- This must be UNIQUE so be creative!
-- NO SPACES OR SYMBOLS ALLOWED
unique_identifier = "tutorial_female_character",
-- This is the info about your new entity
entity_info = {
-- name: The name that will be shown in the Spawn tab
name = "Tutorial Woman",
-- path: The path to your entity file. Must use double slash bars \\
path = "tutorial\\npv\\your_female_character\\_your_female_character.ent",
-- record: This is the TweakDB record that will be used to add your character. More information below.
record = "Character.afterlife_merc_fast_melee_w_hard",
-- type: Character or Vehicle
type = "Character",
-- customName: Set this to true if you want the name you set here to appear in AMM Scan tab.
customName = true
},
appearances = {
"tutorial_woman_casual",
"tutorial_woman_business",
},
-- Here you can pass a list of attributes from different records to be copied to your new character.
-- More information below.
attributes = {
},
}