Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 163 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Cyberpunk 2077 Modding

Loading...

For Mod Users:

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

For Mod Creators:

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

REDmod

Using Redmod to create mods.

REDmod is a command line tool developed by CDPR and Yigsoft which allows us to interact with game files in a variety of ways

Modules for mod creators:

resource-export  - Export REDengine files to raw format for editing
resource-import  - Import raw files to REDengine formats for use in your mod
animation-import - import .re animation files to an animset
util-hash        - Hashes paths/string with given hash algorithm
help             - Displays helpful info about the other avaliable modules (use -h or -help on any command)

if you're looking for how to use REDmod to install and manage mods as a user, click here

Exporting .xbm

REDmod can export REDengine .xbm files to several raw formats for editing.

dds: DirectDraw Surface bmp: Windows Bitmap jpg: Joint Photographics Experts Group tga: Truevision Targa png: Portable Network Graphics

XBM PARAMETERS

    -bitmap-mipmap=<uint>           - mipmap selection

    -bitmap-source=<bool>           - export uncooked file (default = false)

    -bitmap-flip=<bool>             - flip texture (default = false)

    -bitmap-gamma=<bool>            - forced gamma setting (default = false)
redmod resource-export -depot="M:\" -input="base\test\example.xbm" -output="M:\base\test\example.png" -bitmap-flip=true

you can also export textures using the wolvenkit gui (recommended)

Exporting Resources to Raw Formats

REDmod can export .mesh, .w2mesh, .xbm, rsvg and .svg files using the resource-export command.

redmod resource-export -depot=<depot> -input=<resource-path> -output=<file> -<optional parameters>

PARAMETERS

    -depot=<depot>                  - directory-path to the depot (e.g. "C:\depot")

    -input=<resource-path>          - resource path of the file to export (relative to depot)

    -output=<file>                  - absolute path to the output file

TweakDB Modding

To make a tweak mod in REDmod:

  1. make a new mod and create a new folder here: <Cyberpunk 2077>/mods/MODNAME/tweaks

  2. copy the .tweak file(s) you want to change from <Cyberpunk 2077>/tools/redmod/tweaks ❗ preserving the folder structure!

  3. add a info.json file to <Cyberpunk 2077>/mods/MODNAME/tweaks with some mod info

{
    "name": "MODNAME",
    "description": "Description for the tweak mod.",
    "version": "1.0.0",
    "customSounds":    [ ]
}

✅ Done. To test, launch the game with REDmod.

Commands

WolvenKit

WolvenKit - The ultimate mod editor for REDengine games

To dowload the tool and know more about it, go to the WolvenKit Wiki:

WolvenKit is an open-source modding tool for Cyberpunk 2077 and The Witcher 3: Wild Hunt. Our vision is to develop a standalone software which can read and write all REDengine file formats, simplify and accelerate modding workflows, and help you create great mods for great games.

Change logs

This page explains the features added in the different game versions.

Added:

  1. Load mod load order from a text file. by Auska

    • RedMod deploys a list of mods in order - passed through the command line.

      This change now makes it you don’t have to pass the names in the command line but read it from file.

      We can specify load order of archives in another load order file.

  2. Fix mesh Export paths and allow exporting to non-base resource paths. by Mana Vortex

    • The fbx importer would throw an error if in the resource path there wouldn't be base

--- Example:

❌/environment/decoration/industrial/pipes/entropy_pipe_01/entropy_pipe_01_module_small_l020_a.mesh

✅base/environment/decoration/industrial/pipes/entropy_pipe_01/entropy_pipe_01_module_small_l020_a.mesh

PixelRick's Cyberpunk Save Editor

Introduction

CPSE's Default UI

CyberpunkSaveEditor is a tool used to edit Cyberpunk 2077 sav.dat files

Animation Modding

Animation Modding - WolvenKit Integration

The REDmod animation import tool can be used as a Plugin in WolvenKit.

  • Add the .re animation file you wish to import to your /Raw folder in your mod project

  • Add the .anims animation set file from the game with the Asset Browser

  • Click View > Import/Export tool

  • In the Import/Export tool, navigate to Import: a list of all .re animation file in your /Raw folder will appear

  • Double click the entry to change the import options:

    • Select the .anims animation set file to import from the dropdown

    • Select the animation name you wish to override from the dropdown

  • Click process

INFO - It is best to name .re animation correctly even if you replace an existing animation, because the imported animation will always have the filename of the .re file.

INFO - You need to have the .rig file used by the .anims animationset present in your WolvenKit project.

Animation Modding - Manually

See also: Import Command

The import command imports an .re animation file into an existing .anims animation set file.

Optional parameters include specifying an existing animation name to rename inside the animset file (otherwise the filename of the .re animation file is used) or specifying a different output path (default is overwrite).

INFO - It is best to name .re animation correctly even if you replace an existing animation, because the imported animation will always have the filename of the .re file.

INFO - You need to have the .rig file used by the .anims animationset present in your depot path.

Home

Welcome to the Cyberpunk 2077 modding wiki!

This is the dedicated repository for modding guides, resources and know-how.

This wiki is a community project! Do you want to improve or add anything? right now, or reach out on and find us in the #wiki channel!

Modding Tools

Frequently used tools for modding workflows

Editors

WolvenKit

The open source tool we all know and love, which is getting better with every bug you file.

Notepad++

010 Editor

Assets

Blender

3ds Max

Maya

Substance

Gimp

Krita

Paint.NET

Photoshop

010 Editor

What is 010 Editor?

010 Editor is a generic hex editing software which is capable of reading and writing REDengine W2RC files. A custom template for the 010 Editor created by @alphaZomega must be used to parse game files as human-readable.

Download

The 010 Editor can be downloaded from Sweetscape's website

010 Editor Template for Cyberpunk 2077

alphaZomega's CP77_CR2W.bt 010 template can be downloaded from the following link:

Setup

  1. Install 010 Editor and run it.

  2. install alphaZomega's template by navigating to Templates > View Installed Templates, then click Add and add CP77_CR2W.bt.

  3. Navigate to your Cybeprunk 2077 installation, locate the oo2ext_7_win64.dll file, then copy and paste the DLL to the same location as the BT template file.

Scripts

Unkarkify and Rebuild

Unpack and pack the compressed "KARK'd" data within a CP77_CR2W file

Erase

Deletes an entire name and value's worth of a section inside the aforementioned formatted file

changeMatHdrs

Changes all the Material headers' numbers inside a file to be a universal one with zero offsets

insertMatHdrs

Creates a new material header inside a file

Script Modding

To make a script mod in REDmod:

  1. make a new mod and create a new folder here: <Cyberpunk 2077>/mods/MODNAME/scripts

  2. copy the .script file(s) you want to change from <Cyberpunk 2077>/tools/redmod/scripts❗ preserving the folder structure!

  3. add an info.json file to <Cyberpunk 2077>/mods/MODNAME/scripts with some mod info

✅ Done. To test, launch the game with REDmod.

REDmod

https://www.cyberpunk.net/en/modding-support

REDmod is a modding framework and a set of command line tools for modding Cyberpunk 2077 that allow you to compile script and tweak source files and allow for sound and animation modding.

Installation

To start creating mods or using mods for Cyberpunk 2077 you must first install REDmod.

REDmod is shipped as free DLC with the game. You need to add it inside the platform store (GOG, Steam, Epic).

GOG

Steam

When REDmod is installed correctly you will find a new folder tools/redmod inside your game root directory, with subfolders: bin, scripts, tweaks.

Deploy
Importing Animations
{
    "name": "MODNAME",
    "description": "Description for the script mod.",
    "version": "1.0.0",
    "customSounds":    [ ]
}
Start editing
Discord
Cover

Modding Troubleshooting

Cover

Modders' Resources

DLC Link on GOG
DLC Link on Steam
DLC Link on Epic
Game version 1.63

Mod Structure

When creating a REDmod, there is a certain file structure that you need to follow to ensure that it can be used by others. You will want to have a folder that is the name of the mod and in this folder you will have a file named info.json. Whether you are doing Animation Modding, Script Modding, TweakDB Modding, Audio Modding, or other mods (archive mods), you will also need to have at least one subfolder for the mod files to go into. This subfolder should be located on the same level as the info.json file, and be nested directly inside the folder with the mod name.

An example REDmod might look something like this:

 * root_folder
 * | -📁 mods
 * | |-📁 <Mod Name>
 * | | |-📁 archives
 * | | |-📁 scripts
 * | | |-📁 tweaks
 * | | |-📁 customSounds
 * | | |-📄 info.json

When sharing you mod, you would package the folder that is the name of the mod. You could also package the mods folder with the "mod folder", but it is not necessary and it is assumed one might have other mods in their mods folder anyways.

info.json

For a REDmod to be recognized and loaded by the game engine, you must include an info.json file. This file sits in the root folder of the mod's folder at the same level as the subfolders containing your modded files. There are two required entries and a few optional entries that can be in this json file. At minimum a name field and a version field are needed:

{
    "name": "MODNAME",
    "description": "Description for the mod.",
    "version": "1.0.0",
    "customSounds":    [ ]
}

In the above:

  • The name field is the mod's name and should generally be the same as the folder the info.json file sits in.

  • The version field is the mod's version. The version should generally use "Semantic Versioning"

  • The description field is optional for all mods, but it is generally suggested one should include it so other tools have something to display for a given mod.

  • The customSounds field is semi-optional. It is required for Audio Modding.

INFO - Semantic Versioning is a method of versioning where each number gives meaning for a release based on their position. It uses the format MAJOR.MINOR.PATCH where a MAJOR release change is one which will break workflows, MINOR could break a workflow but is generally safe and might introduce deprecations, and a PATCH is a small non breaking change that all users on the same MAJOR and MINOR can update to without any issues.

Glossary

List of words that need more context

A comprehensive list of jargon you might see on this Wiki or around our community. This glossary is not alphabetical, so be sure to use your browser search function to find what you're looking for. (CTRL+F for most applications)

General

  • GitHub: A website which hosts code and helps programmers collaborate on projects. The source code for e.g. WolvenKit or Cyber Engine Tweaks is hosted there. You can compile the WolvenKit source code yourself, or for non-developers you can find WolvenKit releases here first.

  • REDengine: The proprietary video game engine developed by CD Projekt Red for The Witcher 3 and Cyberpunk 2077. Witcher 3 uses REDengine 3 (RED3), Cyberpunk 2077 uses REDengine 4 (RED4).

Modding Tools

  • CP77 Tools: The original Cyberpunk 2077 modding Command Line Tools. (Renamed and moved to WolvenKit CLI)

  • Official Modkit for The Witcher 3 (WCC): An official CDPR command-line tool for modding The Witcher 3. Legacy WolvenKit makes extensive use of the Modkit.

  • REDmod: An official CDPR command-line tool for modding Cyberpunk 2077.

  • WolvenKit: The unofficial community modding toolkit.

  • WolvenKit CLI: The command line interface version of WolvenKit. (Formerly CP77 Tools)

WolvenKit

  • masklist: The masklist file is a custom .txt document used as a helper file to generate new mlmasks using the Import/Export tool.

  • Material json: Material json files are used by the Import/Export tool during for the mesh I/O process. The json will be named after the mesh file then suffixed with .Material.json (i.e. judy_01.Material.json)

Game Files

  • Cooked: A redengine resource file file that is compressed by the REDengine build process. Files extracted with the Asset Browser using WolvenKit (including Legacy) are cooked files. See also: https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Deployment/Cooking/

  • Packed: CDPR games do not load loose files, but rather compress resources into archives. This compression process is called packing. The Witcher 3 uses ".bundle" files while Cyberpunk 2077 uses the ".archive" file format.

  • Raw: Generic term used to refer to non-REDengine files that have a resource counterpart. The raw format of the REDengine XBM texture format can be TGA, PNG, DDS, etc. e.g. "Do you have the raw texture?" - This is an inquiry about the TGA/PNG/DDS counterpart to a game texture file.

  • Resource: A technical term for a REDengine asset file (e.g. .xbm, .mesh, .env).

  • Uncooked: A term used to describe a redengine resource file (not a raw file) in its most basic uncompressed state. e.g. After using the Official Witcher 3 Modkit to import an FBX to W2MESH, this file is uncooked. Rather than calling these files imported, the uncooked terminology is derived from the cooked (compressed) file state.

  • W2RC/CR2W: The file magic number for REDengine files. REDengine resource files are commonly referenced as W2RC/CR2W files for shorthand.

Modding

  • Reference: A string value in a resource that exists in another resource, and it is used to chain resource together as they are loaded into the game. Some examples are a DepotPath that points at another resource, a list index that points at a material entry, and an appearance that points at a component.

  • Vanilla: Original or unmodified i.e. Johnny Silverhand's vanilla appearance can be changed with a DLC.

Deploy

deploy - Deploys mods to the game by compiling them together

Synopsis

Usage:
  redmod deploy -root=<path> [options]

Arguments:
  -root=<path>

Options:
  -mod=<name>
  -h, --help 

Description

The deploy command stages installed mods to work when the game starts with the modded flag.

  • archives from <Cyberpunk 2077>/mods/<name> are staged to load

  • scripts in <Cyberpunk 2077>/mods/<name>/scripts are compiled into a modded script blob

  • tweak files in <Cyberpunk 2077>/mods/<name>/tweaks are compiled into a modded tweakDB blob

  • sound files in <Cyberpunk 2077>/mods/<name>/customSounds are staged to load

You can specify a specific load order with the -mod parameter

Arguments

  • -root=<path>

    the game root folder for which the deploy command is run.

INFO - this needs to be <Cyberpunk 2077>

Options

  • -mod=<modA dirname> [<modB dirname> ...]

    stage only the mods in the given directory names (without the leading mods\), in left to right load order precedence. You must escape any spaces by enclosing the argument in double quotes (for example Mod With Space should be given as -mod="Mod With Space".)

  • -?|-h|--help

    Prints out a description of how to use the command.

Examples

  • redmod deploy -root="C:\Gog\Cyberpunk 2077"

    Stages all installed mods under C:\Gog\Cyberpunk 2077\mods for loading

  • redmod deploy -root="C:\Gog\Cyberpunk 2077" -mod=modB modA modC

    Stages only the three mods C:\Gog\Cyberpunk 2077\mods\modA\, C:\Gog\Cyberpunk 2077\mods\modB\ and C:\Gog\Cyberpunk 2077\mods\modC\ for loading. In this case, modB will override both modA and modC, and modA will override modC (in case any of them modify the same asset paths.)

Importing Animations

redmod import -gameRoot=<depot> -inputPath=<file> -animset=<resource-path> [options]

Synopsis

Arguments:
  -gameRoot=<depot>
  -inputPath=<file>
  -animset=<resource-path>

Options:
  -outputPath=<resource-path>
  -animationRename=<name>
  -h, --help 

Description

The import command imports an .re animation file into an existing .anims animation set file.

Optional parameters include specifying an existing animation name to rename inside the animset file (otherwise the filename of the .re animation file is used) or specifying a different output path (default is overwrite).

INFO - It is best to name .re animation correctly even if you replace an existing animation, because the imported animation will always have the filename of the .re file.

Arguments

  • -gameRoot=<path>

    directory-path to the depot for animset and output (e.g. C:\modding\depot)

INFO - this is the base depot from which relative <resource-paths> are loaded

INFO - You need to have the .rig file used by the .anims animationset present in your depot path.

  • -inputPath=<file>

    absolute path to the animation .re file

  • -animset=<resource-path>

    resource .animset file to use

INFO - resource path must start with base\ (e.g. base\animations\npc\generic_characters\male_average\open_world\generic_male_average__stand__rh_cane_lh_cigar__01.anims)

Options

  • -outputPath=<resource-path>

    resource .anims file name to write, default is to overwrite the input animset (resource path must start with base\)

  • -animationRename=<name>

    parameter representing the old name of animation to be replaced by the new animation (default is the filename of the .re animation file)

INFO - the imported animation will always have the filename of the .re file even if you specify the animationRename parameter.

  • -?|-h|--help

    Prints out a description of how to use the command.

Examples

  • redmod import -gameRoot="E:\modding\depot" -input="E:\raw files\animtest1\macarena_long (1).re" -animset=base\animations\npc\generic_characters\male_average\open_world\generic_male_average__stand__rh_cane_lh_cigar__01.anims -output=base\out\new_test.anims -animationRename=stand__rh_cane_lh_cigar__01__smoke__02"

    Imports the animation file E:\raw files\animtest1\macarena_long (1).re into the animset file E:\modding\depot\base\animations\npc\generic_characters\male_average\open_world\generic_male_average__stand__rh_cane_lh_cigar__01.anims and replaces the animation with the name stand__rh_cane_lh_cigar__01__smoke__02 with the name macarena_long (1). The result is saved to to E:\modding\depot\base\out\new_test.anims.

https://www.mediafire.com/file/udqqvb4yz1xpuka/CP77_CR2W_v0.51.zip
010 Editor with CP77_CR2W template file

Users: Troubleshooting after a game update

The game just updated, and you're crashing. Now what?

Overview

Who doesn't know it? Your modded game is working, then there's an update, and from one moment to the next everything is a smoking crater. Unfortunately, that's normal: as long as you're living on earth, things fall down when you let go of them, and game updates break mods.

This page will give you a brief overview on what you can do in the situation described above by linking to the corresponding sections of the .

If you are on Linux and have exhausted these options, make sure to double-check the , as Steam sometimes resets these between updates.

What can I do?

The first step is to update your core frameworks. Check every mod on — make sure that you have a version from after the update.

There are no framework updates!

You're too fast, choomba: modders haven't gotten around to updating the frameworks yet. That leaves you with two options:

  • and play vanilla until the updates arrive

I updated my frameworks, but the game is still crashing!

You can try to temporarily disable any mod from the script section of. Sometimes, that fixes your issues.

Your game and the core frameworks need to be version-compatible. You can make sure of that by

  1. One by one,

Make sure to follow the instructions carefully – they will prevent you from running into a bunch of other issues.

What other options do I have?

If these instructions didn't help you, there probably are no updates yet and you'll just have to wait. You can find warnings about version mismatches in .

Of course, you can always

  • look around in the or use your browser's search function there (Ctrl+F and type)

  • check a and disable them for now

  • your installation

  • Reset your installation:

    • Fall back to a clean state ( |  |  | )

    • Enable all and make sure that the game starts

    • Re-enable your other mods (check for how to do it fastest)

  • Find help on in #mod-troubleshooting

You might want to deactivate ReShade before you start debugging. Especially after DLSS, it has been known to cause crashes.

Likewise, you'll want to turn off your antivirus to rule it out as a problem source.

Appearances Mappings

In base\appearance_mappings.json, entity types have their resources defined. The vehicle definition is below:

key
value

name

Vehicle

baseTypesFile

base\vehicles\base_types_map.csv

baseTypePrefix

baseType

categoriesFile

base\vehicles\categories.csv

partsFile

base\vehicles\parts.csv

partsCategoriesFile

base\vehicles\parts_categories.json

scanDirectory

base\vehicles\

filenameParsingRules

base\vehicles\vehicle_filename_parsing.json

troubleshooting guide
launch options
this page
remove all mods
downgrade your game
known problem children
resetting your install
installing all of the frameworks you need
Restoring your mods from the backup
these log files
troubleshooting guide
list of known problem children
further troubleshoot
via mod
precise
nuclear: fast
nuclear: very fast
core mods
bisect
Discord

Importing Raw Files to REDengine

using the import and resource-import commands


redmod resource-import -depot=<depot> -input=<relative path to file to be imported> -output=<absolute path to the new redengine file>

Redmod can be used to import a large variety of files into REDengine formats for use in your mods.

Red Engine Format
Raw Format

.fnt (font)

.ttf: TrueType font

.otf: OpenType font

.cff: Compact Font Format

.regionset (Texture Region Set)

.json: Texture region set definition.

.mesh (Mesh)

.xml: Speed Tree XML Resource File .smd: Source Mesh Data

.fbx: Autodesk FBX

.curveset (Curve Set)

.csv Comma Separated Value Table

.mlsetup (MultiLayer Setup file)

.json: MultiLayer Setup JSON File .mlsetup: MultiLayer Setup File

.genericanimdb (Generic anim database)

.csv: csv file

.cubemap (Cubemap)

.dds: DirectDraw Surface

.bmp: Windows Bitmap

.jpg: Joint Photographics Experts Group .tga: Truevision Targa

.png: Portable Network Graphics

.exr: OpenEXR

.rig (Rig)

.re CDPR proprietary format

.ies (IES Light Profile Data Resource)

.ies: IES light profile

.mlmask (Multilayer Mask)

.tiff: Tagged Image File Format

.tif: Tagged Image File Format

.json: JSON

.rsvg (SvgResource)

.svg: SVG Resource definition file

.xbm (Bitmap Texture)

.dds: DirectDraw Surface

.bmp: Windows Bitmap

.jpg: Joint Photographics Experts Group .tga: Truevision Targa

.png: Portable Network Graphics

.tiff: Tagged Image File Format

.tif: Tagged Image File Format

.exr: EXR

.cube: Cube LUT

AMM

Appearance Menu Mod

Appearance Menu Mod has its own documentation at…

You can find help on their Discord.

Scripting

Parts & Parts Categories

These are the part names used in filenames for .mesh and .ent files. Each header is their category - base is used in both Interior & Exterior.

Interior

  • base

  • steering_wheel

  • pedals

Exterior

  • base

  • bumper_f

  • bumper_b

  • hood

  • trunk

  • door_fl

  • door_fr

  • door_bl

  • door_br

  • fuelcap

  • fuelport

Wheel

  • wheel

Using Mods

Modding your game, for users

This page contains instructions on installing mods. If you want to create mods instead, check here.

If this doesn't cover your needs, maybe check out our more detailed guides:

  • Installing Cyberpunk

  • Installing mods via Vortex

How to install mods

TL;DR:

The first thing you will be told on Discord is to read this guide.

When installing a mod, make sure to install all of its dependencies. You will find a list on the Nexus description tab under "Requirements".

If you do not do this, your mod will not work.

You need to enable REDmod. Without it, most of your mods will not work.

You mod Cyberpunk 2077 by adding files to your game directory. There is no need to overwrite base game files, since the game natively supports modding.

The game directory is the toplevel folder of your game install.

Unless you changed the default settings, it will be installed to:

STEAM C:\Program Files (x86)\Steam\steamapps\common\Cyberpunk 2077\

GOG C:\Program Files (x86)\GOG Galaxy\Games\Cyberpunk 2077\

You can install mods by hand or by using Vortex.

Regardless of your past experiences, the Nexus mod manager works reliably and well for modding Cyberpunk, as long as you do not install more than ~250 REDmods.

Dependencies / Requiremends

Although Cyberpunk natively supports modding, this out-of-the-box support is extremely limited. To allow modders greater freedom, a number of frameworks have been created to allow e.g. adding items, influencing the weather, or add flying cars.

Since this kind of mod interacts with the game's code on such a fundamental level, they are prone to breaking whenever CDPR changes their API. This is the reason why game updates break mods — we recommend to turn off auto-update and manually upgrading once the frameworks you need have been brought up-to-date.

Unless they are marked as optional, you have to install the dependencies, and their dependencies as well.

If you don't, then your mod will not work.

Overview of mod folders

TL;DR: you can ignore this.

This list is supposed to give you an overview of which files go where. It is not a bucket list of things you have to install.

Folder path in your game dir
Description of folder

/archive/pc/mod

holds .archive files from non-REDmods

/bin/x64/plugins

Cyber Engine Tweaks () ()

/mods

Directory for REDmods

/r6

folder

/red4ext

, ArchiveXL, TweakXL

- archive
  - pc
    - mod          << .archive files from non-REDmods go here
- bin
  - x64
    - plugins      << Cyber Engine Tweaks goes here
- mods             << REDmods go here
- r6               << redscript folder
- tools

Installing and activating REDmod

If REDmod is not installed and activated, your mods in /mods will not load.

Loading a mod as REDmod means that Cyberpunk will precompile it and integrate it into the game's file, optimizing load times. By contrast, vanilla mods (from /archive/pc/mod) will be loaded individually and might add to your load times.

  • For instructions on how to install, see here.

  • For documentation on the Vortex installation toggle, see here.

  • For instructions on how to activate it, see here for GOG and here for Steam and Epic.

REDmods are installed in Cyberpunk 2077\mods, where every mod has a subfolder with an info.json.

Installing Mods

You can install mods via Vortex or manually. There are upsides and downsides to each — however, for beginners, we recommend using Vortex.

If you had terrible experiences with Vortex for other games, be assured: Cyberpunk integration is working extremely well. Maybe give it another chance?

anual install

"Manual install" is a rather glorified term for "extracting the downloaded archive into your game directory". However, you have to make sure that the right files end up in the right folders.

You can inspect the file structure by simply opening the downloaded file, or by using this feature on Nexus (unless a mod author has disabled it):

The file structure is different for REDmods and non-REDmods. Mod authors usually tell you which file is which, though.

REDmod:

If the downloaded archive contains an info.json and a folder named archives, you're dealing with a REDmod.

Extract the entire folder into /mods/. You should have /mods/ModName afterwards.

Non-REDmod

In your archive, find the folders corresponding to this overview and extract them directly to your game directory. Their content will be added to the already existing files, overwriting anything that needs to be replaced.

Anything else

Some mods are just a loose collection of files and it's up to you and the mod's install instructions to put them in the right place.

As a rule of thumb: usually, but not always…

  • .archive files go into /archive/pc/mod/

  • .xl files go into /archive/pc/mod/

  • .reds files go into /r6/scripts/

  • .lua files go into a subfolder of /bin/x64/plugins/cyber_engine_tweaks/

Troubleshooting

If you have problems with Vortex, check the corresponding section of the guide.

For everything else, this wiki has a dedicated troubleshooting page that has solutions to many common problems. If that doesn't cut it, you're welcome to find us on Discord in the #mod-troubleshooting channel (but your first answer will be a link to that guide).

Modding on Linux

How to get mods working on a SteamDeck

Summary

This page tells you how to set the launch options for Steam under Linux. If you have trouble after an update and have exhausted all the usual steps, make sure to double-check them — sometimes, Steam helpfully deletes them for you to make sure that your game crashes on startup.

TL;DR

You need to

  • install d3dcompiler_47

  • install vcrun2022

  • set your launch options to WINEDLLOVERRIDES="winmm,version=n,b" %command% -modded

Setting the launch options by hand

Under Linux, you have to start the game by setting the following launch options for Cyberpunk:

WINEDLLOVERRIDES="winmm,version=n,b" %command% -modded

If you can't get it to work, follow the steps below to apply the launch options via Protontricks, or search the #red4ext-support channel on the modding discord for winmm to find out what else you can do.

Setting the launch options via Protontricks

Make sure

If you don't want to read text, find a video documenting the process here. Thanks to #Connor for providing the screenshots and transcription!

To configure the necessary parameters, you can use the app Protontricks, which you can download through the built-in app browser "Discover":

  1. Open Protontricks (you can search for this by selecting start menu)

  1. When Protontrick opens, select Cyberpunk:

  1. Choose "Select the default wineprefix":

  1. Choose "run winecfg":

  1. Add an override: Switch to the libraries tab and open the drop down menu

  1. Select "version" and "Add"

  1. Repeat the process for d3dcompiler_47

  2. Apply via "OK". You're now done with Protontricks.

  3. Switch to steam and make sure that the launch options are set. They should look like this: WINEDLLOVERRIDES="winmm.dll,version=n,b" %command%

If that didn't help you, you might be able to find the solution on the CET wiki page.

Requirements explained

How do I get my fucking mod working and what do dependencies have to do with it?

Summary

This guide will show you how to debug a dependency chain to troubleshoot a mod. It'll use VirtualAtelier for an example, but the same principle applies to each and any mod.

In the process of this guide, you will be told to check a certain mod's log file. If you don't know how to do that, check this page for a step-by-step guide.Technique: Reading log files

Theory: What is a requirement?

It is something that your mod needs to work; for that reason, requirements are also called dependencies. The game will load them first.

Most of them are other mods.

Do you want to know more?

Level 1: The mod itself

Situation

You're trying to install a mod — and it's not working.

Step 1: Try to find its log file

For Atelier stores, there won't be individual log files. Skip here, starting with VirtualAtelier as a dependency.

Search for a matching log file in the Cyberpunk folder (either the mod's name or in the mod's folder). Here are instructions on how you do that.

=> If you have found a log file, go here.

=> If you have not found one or it contains no errors or warnings, go here.

A log file exists

If you can't find one, go here.

The file is empty

This means that your mod is loaded, but never initialized. Go here.

The file has errors

The mod itself is broken. You can now go and troubleshoot it.

The file only has warnings

Your mod is being loaded, so the dependencies are OK (if they aren't, the log file would tell you so).

Warnings in the log file don't necessarily mean that something is outright broken. But since you're here and your mod isn't working, that is probably the case. Proceed with troubleshooting.

You can't find a log file

The good news: the mod itself is not the problem.

The bad news: you'll have to check its requirements. Let's do that now.

Level 2: The requirements

Step 1: Finding the requirements

Open the mod's Nexus page and check the Description tab (the first one). You will see something like this:

If you don't know if a mod is optional, it's most likely not.

Step 2: Re-do Step 1 for each requirement

For each of the dependencies:

  1. If it's marked as optional and you don't have it installed, ignore it and proceed with the next.

  2. If you don't have it installed and it's not marked as optional, install it.

  3. If it's marked as optional with a condition and you match (e.g. "install if you're using codeware"), install it.

  4. Return to Level 1 and repeat it for the requirement.

Getting Started

Install the core requirements for Cyberpunk2077 modding, decide how to manage your mods, and set up the mod manager

If you already have the game installed and configured, you can proceed to the guide how to install mods with Vortex.

Before you get started

Make sure you have all the required programs to operate mods and their managers; these are separate from modding framework requirements, but just as important.

  • Visual C Redistributable 2022

  • .NET 6.0+

  • The latest graphics driver for your GPU

  • If you are on Windows, Windows 10 or above and the latest Windows Update

This guide assumes that you have already bought Cyberpunk 2077 on the platform of your choice (Steam, GOG or EPIC).

Installing the Game

If you already have the game installed, you can skip this section and proceed with Configuring Cyberpunk

In order to set up your game to be best suited for mods, you'll want to keep a few things in mind:

TL;DR: If possible, install Cyberpunk 2077

  • on an SSD to speed up load time

  • outside of Program Files to keep Windows from "protecting" your files

For the purpose of this guide, we will assume the following install paths:

Game install

C:\Games\Cyberpunk 2077

Mod download and staging

C:\Games\Mods

Performance

Like everything else, Cyberpunk will run significantly faster from an SSD rather than a HDD.

Permissions

Folder permissions can cause problems down the line, especially for Windows users. Most users never run into these, but you can prevent them altogether by installing your game to a folder like C:\Games rather than C:\Program Files.

By default, all three platforms (GOG, Steam, and Epic) want to install the game to their own install location, which defaults to C:\Program Files. That wouldn't be a problem if not for Windows and what it will permit there, which is not much.

This can (but doesn't have to) cause problems in two different spots by "protecting" the Cyberpunk install dir from modding tools such as mod managers (like our recommendation Vortex) or even CDPR's own REDmod launcher. But hey, at least things are very secure.

You likely won't run into any of these problems, but you can rule them out altogether by installing Cyberpunk to a directory other than C:\Program Files or C:\Program Files(x86), like C:\Games\Cyberpunk 2077

Now we will go through the install options to use on each platform to accomplish this, and the recommended settings for modded Cyberpunk 2077.

Installing Cyberpunk: GOG

Open GOG Galaxy, click on "Owned Games" in the left sidebar, and scroll until you find Cyberpunk. Single click on its picture to display the main Cyberpunk page.

  1. Click the button at the top of the page labeled "Install".

  2. In the pop-up window, choose your install location:

    • Click the drop-down box

    • select "browse"

    • browse to the target folder (we're assuming C:\Games)

    You don't need to create a subfolder for Cyberpunk, as GOG will do that for you.

  3. Optional: Select a game language other than English

  4. Optional: Create a desktop shortcut by ticking the first box "Create desktop shortcut"

  5. Optional, but recommended: Disable auto-updates by unchecking the second box "Keep this game up to date automatically"

How the window should look for recommended install.
  1. Press "Install"

  2. Wait until GOG has done it's thing, then proceed to the next section.

Configuring Cyberpunk: GOG

Once the game has installed, we want to make it run with mods. Click the button to the right of the play button (formerly the install button) pictured below.

The Cyberpunk 2077 main page on GOG, with the sidebar open on the left

From there, select "Manage Installation" and then "Configure". A window will pop up where you can change your desired settings:

  • Installation (first tab): Disable auto-updates

  • Features (second tab): Enable mods

  • DLC (third tab): Select at least Cyberpunk 2077 REDMod

You may select any additional settings you like, but these are the minimum recommended options.

That's it, you are done with your install of the game! You can now move on to installing Vortex.

Installing Cyberpunk: Steam

If you already have the game installed, you can skip this section and proceed with Configuring Cyberpunk

To be done

Configuring Cyberpunk: Steam

To be done

  • Navigate to Cyberpunk 2077

  • Click Play

  • Click the Settings button and Enable mods

  • Click Play (Do not skip this)

That's it, you are done with your install of the game! You can now move on to installing Vortex.

Installing Cyberpunk: Epic

If you already have the game installed, you can skip this section and proceed with Configuring Cyberpunk

To be done

Configuring Cyberpunk: Epic

To be done

  • Navigate to Cyberpunk 2077

  • Click Play

  • Click the Settings button and Enable mods

  • Click Play (Do not skip this)

That's it, you are done with your install of the game! You can now move on to installing Vortex.

You may now move on to mod manager and mod installation.

Game components explained

What do the different files do? How do I mod them?

Usage

REDmod is a command line tool developed by CDPR and Yigsoft which can be used to stage installed mods to work with a modded game.

This section is for managing mods with Redmod. For creating mods, see

Why would I want this?

REDmod preloads any mods on its list, loading them as if they were a part of the game's regular structure. This leads to a brief delay during startup (while it does that), but the loading times during gameplay will be much faster.

Using Mods

The game loads redmods from this path: <Cyberpunk 2077>/mods/<name>.

EXAMPLE: A simple archive mod C:\GoG\Cyberpunk 2077\mods\modA\archives\mod_a.archive.

You need to deploy your installed mods before playing a modded game.

You can handle deployment and load order with

  • the REDlauncher that comes with the game

  • Vortex Mod Manager from NexusMods

  • or use the REDmod WolvenKit integration and manage your mods easily from within the WolvenKit Mod Manager.

You need to start a modded game in order to load the deployed mods in game.

Legacy archive mods in <Cyberpunk 2077>/archive/pc/mod are still supported, but their load order cannot be managed with REDmod.

These mods will load before any redmods.

Deploying Mods and Starting the Game

REDmod can stage installed mods to work when the game starts with the modded flag:

  • scripts in <Cyberpunk 2077>/mods/<name>/scripts are compiled into a modded script blob

  • tweak files in <Cyberpunk 2077>/mods/<name>/tweaks are compiled into a modded tweakDB blob

  • sound files in <Cyberpunk 2077>/mods/<name>/customSounds are staged to load

Installing

In order to utilize deployed mods with REDmod, you need to run the game in a specific modded mode. You can do this by launching the game through WolvenKit or manually by specifying a command parameter.

Depending on your other mods, you might need to install as well.

GOG Galaxy

  • Open GOG - Cyberpunk 2077

  • Click Manage Installation -> Configure ...

  • Open the Features Tab

  • Select Enable mods

  • Click OK

  • Play the game

  • A window will open showing progress on mod deployment.

Steam and Epic

  • Navigate to Cyberpunk 2077

  • Click Play

  • Click the Settings button and Enable mods

  • Click Play (Do not skip this)

  • A window will open showing progress on mod deployment.

Conflicts and Load Order

Conflicts are handled on a per-file basis, but can be handled by specifying a specific load order.

Example: modA contains a script file C:\Gog\Cyberpunk 2077\mods\modA\scripts\cyberpunk\player\player.script. modB contains a script file with the same name C:\Gog\Cyberpunk 2077\mods\modB\scripts\cyberpunk\player\player.script.

This will discard all changes modB made, since by default, REDmod and the game loads mods alphabetically (modA overrides changes in modB).

However, you can specify a load order with REDmod, which the game will respect.

Advanced Topics

Deploying Mods - Manually

The REDmod deploy command stages installed mods to work when the game starts with the modded flag.

Deploying Mods - WolvenKit Integration

  • Open the WolvenKit Mod Manager.

  • Click the Deploy Mods button in the toolbar.

You will see all installed mods in your game. Enable the mods you would like to play with.

Handling Conflicts - Manually

You can specify a specific load order with the -mod parameter:

This will override changes to \cyberpunk\player\player.script that modA makes in favor of modB. It will also tell the game to load modB before modA and modC.

Handling Conflicts - WolvenKit integration

  • Open the WolvenKit Mod Manager.

  • Adjust the load order by dragging and dropping rows.

  • Click the Deploy Mods button.

You can adjust the load order by dragging and dropping the installed mods inside the mod manager.

When you click the Deploy Mods button, the current load order will be forwarded to redmod.exe and mods will be deployed and loaded in this order.

Starting a Modded Game - Manually

To start a modded game that loads mods deployed by REDmod use the -modded flag on Cyberpunk2077.exe

Example:

This however will skip the initialization process that should be done after any new REDmod mod install.

INFO The executable is located at <Cyberpunk 2077>\bin\x64\Cyberpunk2077.exe

Noesis

What is Noesis?

Introduction

From the website: Noesis is a tool for previewing and converting between hundreds of model, image, and animation formats. It utilizes a robust plugin system, with support for native extension modules and Python scripts.

Noesis is considered one of Cyberpunk 2077 Modding's cornerstones for its ability to open .mesh files and convert it into a wide variety of other 3d file extensions (like GLB and FBX) thanks to alphaZomega's CP77 Python script that makes that possible.

Download

Noesis

Download Noesis from Rich Whitehouse's website

alphaZomega's CP77 Python plugin

Download the plugin from here \

Setup

After installing Noesis, put the fmt_CP77mesh.py file in the python folder located inside the plugins folder, and make sure that oo2ext_7_win64.dll is placed next to the plugin in folder.

Basic export/import process

Exporting

Open your .mesh file in Noesis64.exe, then right click on it inside the app and press Export, from there you will be given file extensions to export into, .FBX is the go-to for any usual process and for easier importing into 3D Apps like Blender and 3DS Max.

Same goes for .xbm files.

Importing

Open your 3d file (like .fbx or .glb) in Noesis64.exe, export and select .mesh - CyberPunk 2077 mesh [PC], when a dialogue box shows up browse and select the .mesh file that is appropriate for your import(for example if it was a shirt you'd probably export over .mesh files that has shirts in them), then click OK.

Archive

This section contains an overview of things that you might encounter while modding vehicles. For a full list of sub-pages, please check the link tree in the left-hand menu.

Appearances

For the documentation on .app files (appearance definitions), see or check the subpage.

Entity Files

For the documentation on .ent files, see .

An example entry for a vehicle entEntityTemplate from a vehicle's .ent file looks like this:

key
example

TweakDB

A couple different TweakDB records (also called groups) can be used to create a vehicle. The YAML .tweak files shown the examples here can be processed by to create a .bin that can be loaded into the game with . The groups section creates the record, and the flats are automatically generated from that.

In addition to adding the record, the Vehicle.vehicle_list.list flat (array:TweakDBID) must be updated with the TweakDBID of the new record (Vehicle.vehicle_template is the TweakDBID of the template, as an example), and Vehicle.vehicle_list.initially_unlocked_list (array:TweakDBID) can be added to for that vehicle to be available upon the start of the game.

``

Blender scripts and plugins

Plugins

Scripts

Equipment

Everything about gear

Armour

List
Description

Other

List
Description

Components

This page contains documentation for the most common component types. WIP.

See the for all possible components used in the game, organized by hierachy. Use for researching and documenting components.

For a hands-on guide on how to safely change components in .app files, look .

Components are not a file type but an internal data structure and part of or files.

Components are how the game adds anything to the in-game world, from pag3d data over player interaction prompts to explosion sounds. Entities and Appearances use components in order to slim down what data each game object has to carry, adding or removing them as needed.

Component names

In general, these should be globally unique so you can target them via . Feel free to ignore this (almost everyone else does), but do read the next section.

Body and clothing component prefixes

Body component prefixes affect how the game calculates and you're strongly encouraged to stick to those naming conventions to make use of it. Please see the for a list.

Component Properties

Common component properties explained. For a more detailed list, please see .

chunkMask

Only used for : Determines which parts of a mesh will be displayed or hidden. Numeric indices correspond with the submeshes by index.

depotPath

Relative path to a resource within the game files. Used to load dependencies — meshes, rigs, animations, effects.

Body

TweakDB

What is the Tweak DB?

Cyberpunk 2077 uses a single static database file which contains data about gameplay elements. This database file can be located at the following path within the Cyberpunk 2077 game installation: Cyberpunk 2077\r6\cache\tweakdb.bin This file and the accompanying system Cyberpunk 2077 uses to register and control gameplay elements is called the Tweak DB. The Tweak DB is responsible for registering all player-facing items such as vehicles, weapons, and apparel. In other words, to create a new standalone gameplay item mod developers must take advantage of the Tweak DB.

Modifying the Tweak DB

The Tweak DB can be interacted with using Cyberpunk's official REDmod, or numerous community solutions such as TweakXL, CET, and redscript.

Player Garments/Equipment Graph

The following is a diagram which maps the relationship between game files for use with TweakXL and Archive XL:

Game icons: The inkatlas file

Apart has prepared a reference project with an import-ready inkatlas. You can download it .

Summary

The .inkatlas is a map file that slices into slots, which are then used by the game for pretty much everything that is a picture - from your HUD to peoples' phone avatars to item preview icons in shops or custom atelier images.

Guides

For a guide how to create custom icon previews, see .

For a guide how to create a custom Atelier icon, see .

Cyberpunk Hair Material

There is next to nothing here yet. Maybe you'd like to change it?

Hair properties are collected in .hp (hair profile) files. Each hair profile has two greyscale maps and a gradient.

It does not use a normal map.

Gradient

A gradient with hair colour information. This is used to color individual strands via the ID map.

ID(entity)

Maps the individual hair strands by colour: Value <=> position on the gradient

Flow

Controls "bending" direction of hair by assigning a colour to the strand.

FlowStrength

A multiplier how strongly this should affect hair

For more information, you can read up on a conversation by the expert .

Troubleshooting normal maps

In-game, your normal map isn't looking as expected

Import settings

The texture has to be imported without the isGamma flag. Import over an already-existing normal map to rule out this as a source of error. See for more detail.

UV scaling

Cyberpunk actually considers the UV map's scaling when calculating the weight of the normal maps:

Since the neck part is scaled much larger than the chest, this will make the parts of the mesh visibly distinct.

File Formats

Import with material

for WKit export "With Materials"

TexTools

Justifies UVs, generation of hair cards Mesh has to be in quads

Merge armatures (rigs)

Ctrl+J only works if they don't share bones

Steam: garments (m!V)

Spawn codes to in-game names, with many screenshots on masc V

cp2077.8713.su (f!V)

Screenshots on femme V with spawn codes

Steam: Cyberware

Steam: Quickhacks

name

quadra_type66__basic_urban_01

appearanceResource

[`base\vehicles\appearances\sport\quadra_type66__basic.app`](.app-file-appearanceresource.md)

appearanceName

urban_01

here
appearance mappings
here
WolvenKit
TweakDBext
here
textures
here
here
here
redmod deploy -root="C:\Gog\Cyberpunk 2077" -mod=modB,modA,modC
Cyberpunk2077.exe -modded
Modding Guides
cybercmd
this conversation on Discord
the problem
The solution
🆘Troubleshooting
github
Nexus
redscript
Red4ext

Vehicle Filename Parsing

Referenced from base\appearances_mappings.json, base\vehicles\vehicle_filename_parsing.json contains a regex string is defined that outlines the allowable file names for .ent files (play around with this regex here):

(?:v_)?([a-zA-Z]+|av)\d?_([a-zA-Z]+)_(?:[a-zA-Z]+(?:_[a-zA-Z]+)*)__(?:int|ext)\d{2}_([a-zA-Z]+(?:_[a-zA-Z]+)*)_\d{2}.*\.ent

For a filename like v_sport2_mizutani_shion__ext01_body_01.ent, this would match the following groups:

  • Group 1: sport

  • Group 2: mizutani

  • Group 3: body

Group 1 (base)
Name

av

Aerial

sport

Car

standard

Car

utility

Car

Group 2 (category)
Name

Mahir

Mahir Motors

Group 3 has no mapping, is of the type partType.

Curiously, this regex doesn't work for vehicles such as the Type 66, or the 911, since numbers aren't permitted in Group 2. It's unknown if this is even used, or if there is replacing done at some point.

Textures: .xbm files

Details about in-game textures

This wiki page contains documentation about xbm files and their properties.

Wait, this isn't what I want!

Would you rather…

  • Edit, import, or export textures?

  • Learn about textured materials?

  • Use a textured material on your mesh?

TL;DR

.xbm files are simply CR2W representations of DDS files, which are read by REDengine. This means they are nearly completely compatible and all features of DDS files are included in XBM files.

Header

While most of the XBM file is taken up by the texture data itself, it is useless without a section telling the engine how to read and use this data. Because of this, a part of the XBM file is set apart for the header, where info about the size, mipmapping, and general details of the texture are stored.

The use of this header is for the engine to read the data and adjust it correctly, for example, if your texture data is that of a 1024x1024 texture, but the header says it is 512x512, the engine will read it as 512x512, compromising or otherwise changing how the texture data is displayed.

As well, texture format is stored here. If the texture data is, say, for a 3D texture, while the header says it is a 2D texture, the engine will read it as 2D. As well, mipmap information is kept here, mip maps being lower-resolution versions of the same texture for LOD and texture filtering uses.

Setup

The setup section of the XBM file is in essence an extension of the header. It contains settings that, more than just describing basic information about the texture, also describe bit depth, texture type, and format, as well as extended features, like gamma correction, streamability, and mipchains.

Comprehensive Component Hierarchy List
here
.ent
.app
partsOverrides
garment support
corresponding wiki page
Documented Components
meshes
Documented Components
Hair
Cheat sheet: Face and skin
Cheat Sheet: Facial Expressions
NPCs
https://richwhitehouse.com/index.php?content=inc_projects.php
https://www.mediafire.com/file/uhc9d68mvj7oqj6/fmt_CP77mesh_1.6.zip
Noesis' UI with CP77 python plugin
Noesis' export UI
Noesis' Import UI

Downgrading / Preventing auto-updates

Only update once all frameworks are stable!

Things fall down when you let go of them, and mods break whenever a game updates. That is due to framework compatibility.

Always make sure that your framework mods are up-to-date.

You should generally wait with updating to the latest game version until all mods are up-to-date. If it's too late for that, you can try downgrading Cyberpunk, or wait until the frameworks update.

Preventing the game from auto-updating

GOG

In GOG, this is a global setting — you can only disable auto-update for all of your games.

Open the settings and select the entry Game features in the sidebar, then uncheck the box for Auto-update games.

Epic

In the EPIC launcher, this is a global setting — you can only disable auto-update for all of your games.

Open the settings menu and scroll down to MANAGE GAMES, then disable auto-updates.

Steam

Unlike the competition, Steam will not give you any control about auto-updating. For that reason, you need to forbid it from writing to a specific file on disk, without which it will be literally unable to update. Here's how:

  1. Find the steamapps folder (:

    1. Right-click on Cyberpunk 2077 in your Steam Library and select Properties

    2. On the side bar, click on Local Files

    3. Select Browse. This will take you to Cyberpunk's install directory, which is inside the folder we want (e.g. C:\Steam\steamapps\common\Cyberpunk 2077)

    4. Navigate two levels up

  2. Find the file appmanifest_1091500.acf

  3. Set the file to read-only:

    1. Right-click on the file and select Properties

    2. At the bottom of the dialogue, check the Read-only box

As long as Steam can't write to this file, it can't update Cyberpunk. Once you are ready to update, simply uncheck the Read-only checkbox again.

Don't forget to deactivate it again later!

Downgrading

GOG

  1. Disable auto-updates

  2. Head to the Cyberpunk game detail page

  3. Find the settings button next to the Play button

  4. Select Manage Installation -> Configure…

  5. Select the game version

Epic

Sorry, choomba, you're fucked. No downgrading possible.

Steam

Steam doesn't directly support downgrading, but you can use steamdb to attempt to download a previous depot. Longer instructions can be found in this MakeUseOf guide, but the condensed version (courtesy of our lovely Discord community) goes as follows: First turn autoupdate off for Steam now so that you don't forget to do it later. We'll wait. The depot for the current version 1.63 is download_depot 1091500 1091501 3385393324409330817 (this is version specific. Please reach out to update the version if it's outdated.)

  1. Open Steam

  2. Press Win+R

  3. Type steam://open/console to get into the steamdb console

  4. In the console, enter this command exactly to start the download (it'll be the entire 60 GB so be prepared): download_depot 1091500 1091501 3385393324409330817

  5. After the game finishes downloading, go to the installation location listed in the console, and copy either just the changed files (you can view the manifest for the new version) or the whole thing over your game directory to overwrite the new changes.

This should leave you with the correct previous game version. You can right-click cyberpunk2077.exe to verify the versions in Properties > Details.

You might still need to do a script cache reset or other cleanup before the game starts up nice, so head on over to those instructions if need be.

Audio Modding

Audio Modding - WolvenKit Integration

The REDmod animation import tool can be used as a Plugin in WolvenKit.

  • Add the .wav sound files you wish to import to your /customSounds folder in your mod project

  • Click View > Sound Modding tool

  • In the Sound Modding tool, choose which to mod from the list of game sound events

  • Adjust the parameters

  • Click Save

Audio Modding - Manually

Place raw .wav audio files inside <Cyberpunk 2077>/mods/<name>/customSounds. Include a info.json file with your mod (<Cyberpunk 2077>/mods/<name>/customSounds/info.json) where you sepcify how to use your custom sounds.

Example

{
  "name": "newmodtest",
  "version": "1.0.0",
  "customSounds": [
    {
      "name": "amb_bl_eq_medical_electronics_small",
      "type": "mod_skip"
    },
    {
      "name": "w_gun_revol_power_overture_fire_suppressor",
      "type": "mod_skip"
    },
    {
      "name": "w_gun_npc_dian_reload",
      "type": "mod_sfx_2d",
      "file": "are_you_sure_about_that.wav",
      "gain": 1.0,
      "pitch": 0.1
    }
  ]
}

Parameters

  • name - the game audio event to override

  • type - the sound type. Options are:

    • mod_skip: do not play this sound event

    • mod_sfx_2d : will be played without any positions / attenuation

    • mod_sfx_city : has a longer attenuation that is suitable for city sounds

    • mod_sfx_low_occlusion : has a long attenuation that isn't occluded much e.g. a VO or quest sound that you don't want to be muffled

    • mod_sfx_occlusion : medium attenuation with normal occlusion

    • mod_sfx_radio : needs to be tuned to a broadcast channel (e.g. radio)

    • mod_sfx_room : has a shorter attenuation suitable for something that can be heard across a room

    • mod_sfx_street : has a medium attenuation, good for something to be heard down a street

    • mod_sfx_ui: for menu and ui sound replacement

  • file - the .wav file to use (inside /customSounds)

  • gain and pitch

Spawn Codes (BaseIDs/Hashes)

Item spawn codes and how they link to appearances

Lists

A selection of lists for looking up item codes. Alternatively, you can browse through the game's files, or search e.g. the fandom wiki.

A list with BaseIDs

Google Sheets (August 2022), supports filtering

Player equipment only: Not all items that you find in the player folder are actually hooked up to spawn. If you can't find an app file, you ran into one of those.

From a BaseID to an item's materials

As an example, this will use Reinforced Puffer Vest (Items.Vest_17_basic_01)

The base ID

An item's spawn code is called BaseID. It looks like this:

Vest_17_basic_01

and will be used to spawn items via CET (Game.AddToInventory("Items.Vest_17_basic_01")).

A base ID consists out of two parts. The first one (Vest_17) determines the item, the second one (basic_01) determines the variant.

Finding the files

Head to WolvenKit and search for the first part of the BaseID:

Search WolvenKit for the first part of the BaseID

You will find at least one entity file and an appearance file.

If you find multiple files, you need to open the correct one. You can identify those by the folder path: for player meshes, the name of the last folder will contain either _pwa_ or _pma_, and the path will include either that or player.

The .app

Open the apperance file. You will see a bunch of appearances:

We only care for _m and _w right now, since they are using different meshes. Open the array components and find the one holding the mesh:

basic_01 is using "default" material (green)

We can see that the basic_01 appearance is using the default material, and the basic_02 appearance is using the bbstripes material:

base_02 is using "bbstripes" material

To find your way through the mesh, check the guide for recoloring items!

Assets explained

What is an asset?

An asset is a specific, objectified concept in the game that can be highly detailed like a blade of grass, or larger like a building, or intangible like sound effects. Unity defines an asset as, "Shorthand for anything that goes into a video game – characters, objects, sound effects, maps, environments, etc." Every asset is defined in a set of normalized asset files that describe its relationship to the game, other assets, and itself.

Visual Asset-Related File Formats

The following list contains file formats that are used to compose visual assets such as vehicles and weapons.

The community-devloped tool WolvenKit can be used to browse game archives and extract game files. Learn more

MESH

3d models

XBM

2d textures

ENT (entity)

Parent file for most visual assets which is directly linked by the Tweak DB

APP (appearance)

Sets up appearances for assets such as NPCs and vehicles referenced by entity files

MT (material template)

Base shader files for REDengine

MI (material instance)

Instanced shaders for mesh materials

MLMASK (multilayered mask)

Mask component of the Multilayer supershader

MLSETUP (multilayered setup)

Material setup component of the Multilayer supershader

MLTEMPLATE (multilayered template)

Pre-defined tiling surface component of the Multilayer supershader

HP (hair profile)

Color ramp data to set colors for meshes using the hair shader

Visual Asset Graphs

Vehicles

Meshes and Armatures: Rigging

How everything is connected, or: why your edited mesh moves weirdly

For a documentation of the import/export options in Wolvenkit, check here.

For Simarillius's Blender script to merge several armatures, check here.

For a youtube video how to transfer weights between rigs, see here.

The connection between a mesh and a rig is made via vertex groups. Any number of vertices can be assigned to a group, which is then matched to a rig's bone via name.

These vertices move with the bone "Spine3"

How much every bone influences the vertices is determined by vertex weight, which can be altered in Blender's Weight Paint perspective:

Weight painting

Vertex weights are assigned for every vertex group, and each vertex will move on the basis of the sum of all its weights.

To preview the deform in Blender, you can select the mesh's parent armature and enter the "Pose Mode". There, you can either apply an exported animation, or select individual bones and rotate/move them. The Armature modifier will morph your mesh according to the pose, letting you spot errors much faster than trying to debug them in-game.

You can see a video of the process here (courtesy of Vesna).

Multilayered Material: Properties

Documentation of properties, with screenshots if applicable

Material properties

colorScale

Colour of the material.

material

Depot path to the base material template from which the surface inherits its properties (lightbreaking, subsurface scattering…).

Example values: base\surfaces\materials\paint\car_paint\car_paint_metallic_01.mltemplate base\surfaces\materials\metal\enameled_hq\enameled_hq_01_30.mltemplate

matTile

Scaling of the material across the mesh. The higher the value, the smaller it is.

metalLevelsIn

TODO

metalLevelsOut

This value corresponds to a greyscale texture across the entire mesh.

normalStrength

Applies or ignores the base mesh's normal map to this layer. This value can be greater than 1!

offsetU

For logos: X-offset on the texture

offsetV

For logos: Y-offset on the texture

opacity

Transparency of the layer, 0 means that it isn't displayed, 1 means that it's fully visible.

roughLevelsIn

TODO

roughLevelsOut

Determines the roughness of a material

How roughness affects a material (the colour was not changed)

Microblend properties

mbTile

Like matTile, this determines the scaling of the microblend. The higher the value, the smaller it is.

microblend

Depot path to the base microblend. Contains a seamless pattern which will be projected on the surface. Think of an extra normal map that tiles across a layer.

microblendContrast

A crossfade between the layer mask and the microblend mask (the black parts of the microblend texture). If you set this to >=1, then the layer will be blocked out where the microblend texture is black.

microblendNormalStrength

Like normalStrength for the microblend.

microblendOffsetU

X-offset for the microblend (not sure why you'd need this)

microblendOffsetV

Y-offset for the microblend (not sure why you'd need this)

ArchiveXL

Adding stuff to the game, for the major-leagues

Summary

Published in August 23 by

OK, so what is this?

ArchiveXL ( | ) is one of the of Cyberpunk 2077 modding. Together with TweakXL, It allows you to add things to the game, such as

  • and

  • world sectors

  • custom lipsync maps

This page will document how to set item properties via tags & suffixes (the vanilla way), or via dynamic switching (new, cool, version >= 1.5).

Let's dive right in.

Variants and suffixes

What are variants, what do I need them for?

When adding items, you will normally offer multiple (variants), for example, the same shirt in black, white, and red. This is what you're modding for, after all: making cool things.

And what are suffixes?

Sometimes, you want to load different meshes/appearances under different circumstances. Until ArchiveXL 1.5, the process was extremely tedious, but thanks to psiberx, have been replaced with conditions (read up on to learn how to make use of that).

While the solution has changed (and improved), the problem remains:

Body genders

There are two body genders with different proportions, and you can't make them wear the same shirt (at least not without clipping). To solve that, you can do what CDPR did and have one variant per rig.

Body types

On top of that, you can add body mods (mostly chest size, but occasionally full refits). Starting with 1.5, these will be ! That means, no more compatibility archives, since AXL can simply load different meshes for you…

Camera modes

Sometimes, you need to hide parts of the item in first person. – for example helmets, since you don't want to have half a helmet floating in front of your face (unless you consider that immersive; most people don't).

Tags

Tags are a way to tell Cyberpunk that an item has certain properties and should behave in a certain way. Thanks to ArchiveXL's extended tag system, you can for example force flat feet for female V, or un-hide hair from a head item.

You can find a list of tags in .

Dynamic variants

If you have ever tried to make ten colour variants of an item for two body genders with four different states of feet, then you're familiar with the struggle. Version 1.5.0 of ArchiveXL solves this problem by introducing dynamic variants, allowing you to define rules to hook up your yaml straight to the mesh entity. picking components and even appearances dynamically.

You can find the technical (usage) documentation for dynamic variants on .

You have to use a mesh entity for dynamic variants, as components in the .app file will be ignored.

You no longer need suffixes in the .yaml. However, if you want to use suffixes for your switching, psiberx recommends doing that per appearance name in the .app file, so that you can still use chunk masks via component overrides.

Here's an overview of how the dynamic variants work. By comparison, is the old diagram. Especially for multiple items, the new way is much faster.

Documented Components

Equipment/Hair

entGarmentSkinnedMeshComponent

Can be used interchangeably with entSkinnedMeshComponent.

  • Loads a mesh from a .

  • Supports .

  • meshAppearance will select an appearance by name from the mesh's defined .

  • Lets you enable and disable shadows with the properties castShadows and castLocalShadows

This is the good kind of mesh component, the one that will work without trouble, as opposed to .

entSkinnedMeshComponent

See below at

entSkinnedClothComponent

Like , but with a physicalMesh and physics. Usually comes together with an (they're usually named collar for clothes and dangle for hair and accessories).

entAnimatedComponent

Adds physics to garments and hair meshes.

NPCs

gameDismembermentComponent

Defines dismemberment rules for NPCs. (TBD: ???)

Generic

gameinteractionsComponent

Adds interaction prompt to entity. (Shouldn't work without gameTargetingComponent, but this hasn't been double-checked.)

entColliderComponent

WIP

gameTargetingComponent

Allows targeting via CET.

gameScanningComponent

WIP

Cheat sheet: Face and skin

Skin tones, complexions, make-up

Skin tones by index

List compiled by wolv

Freckles / cheek make-up

For a list of freckles and make-up sorted by colour and skin type, see NoraLee's .

Lipstick

For a mod fixing various mix-ups in the character creator, see .

Lipstick colours and styles are sorted in (more or less) ascending order in the appearance list in the mesh.

Style order is Default - Glossy - Matte (no suffix, _02, _03)

Link:

Eyeliner and kohl

to be done

Complexions

Every complexion has its own associated texture file. These are sorted by body gender under

The files are ending in 01..05. Each complexion has its own appearance in the head mesh, e.g.:

Eye make-up

3d Modelling

Find knowledge on editing 3d models here

Check the sub-pages for more detes, or check the section's sub-pages. For hands-on advice, see the guide section, for example

Relevant files

Mesh

A mesh defines the shape and surface of any in-game object.

For more information on .mesh files and how they work, see .

For more informations on materials and mesh appearances, see .

Morphtarget

Morphtargets are a special kind of mesh used for alternate and additional shapes beyond the static shape a .mesh can define. If your source is a .morphtarget, you need to primarily work with that rather than the .mesh.

Read more in the section.

with 3DS MAX (archived)

3ds Max Workflow for Cyberpunk 2077

Requirements:

- 3ds Max 2014-2022 - - -

Setup:

- Unbundle the game files with WolvenKit.CLI (aka CP77Tools) - Install Noesis and rename Noesis64.exe to Noesis.exe (The original noesis.exe is 32-bit and the Noesis Plugin "fmt_CP77mesh.py" needs 64-bit) - Place "fmt_CP77mesh.py" in "noesis\plugins\python" copy "oo2ext_7_win64.dll" from "Cyberpunk 2077\bin\x64" and place it in the same folder as "fmt_CP77mesh.py" The plugin has some customization option if you open it in a text editor. Recommended Settings are:

- Next place "CP77_NOESIS_CMD.ms" in "C:\Program Files\Autodesk\3ds Max 20XX\scripts" - Open "CP77_NOESIS_CMD.ms" in a text editor and set your Noesis.exe path.

In 3ds Max:

Run the MaxScript from Scripting > Run Script...

Click on "Import to Scene" and select the .mesh file you want to edit. Your custom settings in "fmt_CP77mesh.py" will effect the imported mesh. FBX Settings for Import:

MaxScript Settings for Export:

\

FBX Settings for Export:

**When exporting your mesh the plugin will ask you to select a mesh to export it over, in most cases you should select the original mesh.

Shaders

RED4 shaders (mt)

What are shaders?

Every visual asset in REDengine uses a specific shader, designated by REDengine as MT (.mt) files. Even meshes "without a shader" are in-fact using a debug shader such as debug_coloring.mt. Shaders are the most basic expression of a surface, ranging from glass, skin, concrete, and steel. Each shader contains a combination of constant hidden-variables, and exposed variables for artists to tweak. For example, all skin exhibits some similar properties such as subsurface scattering so there is no reason to expose this; artists cannot use the skin shader without subsurface scattering. However skin color can vary dramatically, so these parameters are exposed to the artists using textures or color parameters. Artists are able to create "instances" of shaders called which contain localized variations of the textures and properties exposed by the base shader.

What are materials?

Materials are a specific instance of a , to be used on a mesh or subset of meshes. Materials are contained inside mi (material instance) files or within mesh files themselves as a CMaterialInstance chunk. While internal material instance chunks can be handy to have inside the mesh, external mi files can be used for multiple meshes. It's important to remember that materials are simply instances of shaders. The variables contained within the material only take effect when those same variables are present inside the base shader. For example, if RoughnessTexture is not present within the base shader adding this property to a material instance will have absolutely no effect.

The Daisy Chain

The mechanism behind the link between shaders and meshes can be thought of as a daisy chain. Meshes do not directly link shaders, but instead rely on a variable number of daisy chained materials. Some meshes may use a single internal material instance, which specifies a base shader.

The other approach which is just as, or perhaps more common is chaining several mi files together. The benefit of doing so, is the ability to globally adjust materials for hundreds or thousands of meshes. When chaining multiple materials together, the properties of each material overwrite those that are below.

Appearance: .app files

All the dirty detes on appearance files

If you want to modify an .app file to change an NPC's appearance, check !

Appearances

The real meat of the file: a list of appearance definitions, loaded via .

appearanceResource

  • baseEntityType: name that exists in the and mapped to the correct .ent file

  • commonCookData: the .cookedapp file that stores a copy of the data for faster loading

appearanceDefinition

A list of appearance definitions to be called from a file. The definitions are independent from each other (unless parentAppearance is used? Confirmation needed) and load meshes and effects via components.

  • name: the appearance's name that is listed in

  • parentAppearance: the appearance this one inherits information from

  • proxyMesh: the .mesh file loaded for rendering the vehicle at a distance (confirmation needed)

  • resolvedDependencies: pre-loaded resources. You will usually want to delete these if you're adding items from scratch.

  • looseDependencies: lazy-loaded resources (confirmation needed)

Components

A list of components that are part of your current appearance. There are various types of components, which are documented .

Components that you add in the will be shared among all appearances in the .app.

partsValues

This only works for player equipment and weapons (April 2023)

Allows you to add one or more into your appearance. They will be treated as if the components were part of the appearance's components array.

partsOverrides

Overrides component definitions via name. They can be defined in the appearance's own components array or loaded via .

For usage instructions, see .

commonCookData

To save a few processing cycles, CDPR doesn't evaluate .apps on load, but instead keeps a pre-cooked cache under base\cookedappearances. CommonCookData is the lookup path for such a file. As long as the file in question exists and isn't empty, your changes might not register, or components that you removed will still be displayed.

Once you start modding, you'll want to install the mod to prevent such issues.

depotPath
chunkMask
appearances
entSkinnedClothComponent
entGarmentSkinnedMeshComponent
ent(Garment)SkinnedMeshComponent
entAnimatedComponent
importing meshes from external sources
Material ssignment examples
Troubleshooting your mesh edits
How do the clothes auto-morph?
here
here
Morphtargets
here
root entity
Base Types Map
root entity
its .ent file
here
root entity
component entities
component entity
here
cookedapps nulled
Changing materials, colors and textures
Google Doc
Google Sheet
Material Instances
shader
Shader Docs
Multilayered
WolvenKit

1

01_ca_pale

2

01_ca_pale_00_warm_ivory

3

02_ca_limestone

4

02_ca_limestone_00_beige

5

03_ca_senna

6

03_ca_senna_00_amber

7

03_ca_senna_01_honey

8

03_ca_senna_02_band

9

04_ca_almond

10

04_ca_almond_00_umber

11

05_bl_espresso

12

06_bl_dark

base\characters\head\wa\h0_001_wa_c__basehead\textures\h0_000_wa_c__basehead_d0X.xbm
base\characters\head\ma\h0_001_ma_c__basehead\textures\h0_000_ma_c__basehead_d0X.xbm
03_ca_senna
03_ca_senna_d02
03_ca_senna_d03
03_ca_senna_d04
03_ca_senna_d05
NPV guide
here
Reference images on imgur
nexus
github
core frameworks
equipment
weapons
photo mode poses
mesh appearances
suffixes
dynamic variants
supported by ArchiveXL
ArchiveXL's
readme
ArchiveXL's github
this
WolvenKit.CLI / CP77Tools
Noesis (64-bit)
AlphaZomega's Noesis Plugin and MaxScript

Best practices / pitfalls

A collection of code-related knowledge

LUA

Gain performance: Early Return

You're probably used to coding like this:

local function myMethod()
  if condition then 
    -- do a little dance, make a little love…
  end
end

In LUA, you can skim a few processing cycles by using the early return style:

local function myMethod()
  if not condition then return end
  -- do a little dance, make a little love…
end

You can gain a significant amount of performance this way, especially when doing this in a loop.

Fixing/preventing nil access

LUA throws an exception if it encounters nil in unexpected places. The corresponding error will look like this:

attempt to access local '<variable name>' (a nil value)
stack traceback: 
  my_example.lua:1234 in function 'MyFunctionName

Open the corresponding file, find the correct line, and check what is being accessed there. It will look like variable.property, or perhaps something will be concatenated to a string ("something something text" .. variable).

You can assign a default value to the property in question:

myString = <original string assignment> or ""
myNumber = <original number assignment> or 0
myEverythingElse = <original object assignment> or {}

While that won't solve any other problems, it will at least make the error go away.

Switch in LUA: Lookup Tables

Who doesn't know the problem? You want to know if your string is A, B, or C, but not D — and LUA doesn't have a switch statement.

Fortunately, there is a built-in and performant way to

Performance killers: strings

String concatenation and comparison can be the difference between a brief stutter and a complete freeze or even crash to desktop. This is not a joke — see here for more detail.

Comparing/Searching

Lua internalizes strings. That means these two strings will share a single representation in memory:

local string1 = "This is the same object!"
local string2 = "This is the same object!"

The comparison between those two strings will be almost-instant.

This becomes a problem when comparing strings in a loop (see Scopes):

for (_, mystring) in ipairs(mytable) do
    if mystring == "This is the same object!" then
        -- do something
    end
end

Every single pass of the loop will create a memory representation of "This is the same object!" and then discard it again.

local myCompareString = "This is the same object!"
for (_, mystring) in ipairs(mytable) do
    if mystring == myCompareString then
        -- do something
    end
end

Takeaway:

If at all possible, define things outside the scope of loops!

Finding in strings

Lua's regex implementation is very limited. There is a limitation for pipes. For example, the following example will actually iterate twice after creating internal string representations:

if string.find("catastrophe",  "dog|cat") then 
  -- do something
end

It is faster to just do this:

if string.find("catastrophe",  "dog") or string.find("catastrophe",  "cat") then 
  -- do something
end

On top of that, string.match will return the entire string if no match is found:

local match = string.match("catastrophe",  "dog")
if match ~= "catastrophe" then
  -- do something
end

The alternative:

if string.find("catastrophe",  "dog")
  -- do something
end

Takeaway:

  • Avoid regex

  • prefer String.find() over String.match()

Concatenation

For a performance analysis of different kinds of string concatenation, check here.

Scopes

HomeWolvenKit

Materials and Shaders

Overview and introduction

This is the landing page for materials in Cyberpunk 2077. It contains a definition and a rough overview.

If you already know that:

  • To find material instances or -templates for direct edits, check .

  • For a mesh-specific explanation, check .

  • For a list of properties and their explanation check .

Definition: Shader

In its original state, a 3d object () is a collection of vertices (pixels). The space between those vertices is filled by faces, which form the 3d object's surface.

The shader is the thing that goes on top of the surface, rendering a material such as glass, skin, concrete, steel…

Without a shader, objects would be invisible in the game, the surface simply being transparent. In Cyberpunk, a default shader will be assigned in such cases (such as debug_coloring.mt).

In Cyberpunk 2077, REDEngine shaders are implemented as .mt/.remt files.

How can I use shaders?

If you have ever messed with an item's materials, then you already have.

To use a shader, you create a Material Instance, where you can configure the parameters. Not every parameter of a shader can be configured: since skin always has subsurface scattering, it makes no sense to tweak this. But since skin color already varies dramatically if you don't throw exotic chrome into the mix, you can change them easily via tint.

Definition: Material

For details how materials are used on a mesh, see the , or learn how materials can be from .

In the context of Cyberpunk, a material is the thing that lets the shader define the surface properties of a . Typically, you create a local instance, which will then pull in a shader via baseMaterial.

The property baseMaterial can point at a .mt / .remt file directly, or to an intermediary .mi file:

The .mi file

Each part of a mesh (submesh) can have a different material assigned.

For a hands-on guide and something to play around/experiment with, check .

What kinds of material exist?

Textured

If you have modded other games, you're used to PBR materials with a bunch of textures like diffuse, normal, metalness etc.

To change a textured material, see

Did you know? You can make Cyberpunk's default textured material glow.

Multilayered

This is specific to Cyberpunk, and it is incredibly cool. If you're used to textured materials, you're probably going to hate it at first, but it has incredible versatility and re-usability.

  • What is a and how does it work?

  • What are these , how do I use them?

Re-using materials: .mi

External materials, .mi files, and how everythign plays together

Put yourself in the shoes of a hypothetical modder.

  • You are creating a mod that offers multiple versions of the same item (e.g. toy props or hair)

  • You have created a base material

  • You duplicate and re-duplicate the material for each of your variants, changing the properties that defines the colour

  • You wish that there was less copy-pasting involved

.mi files to the rescue

A .mi file encapsulates a material in a reusable template file. Take any of them from the game, move them to your custom directory, and group all the properties that you keep copy-pasting into the .mi.

Then, in your material, you can now use your .mi file as baseMaterial, and only change the properties that are actually different!

For a collection of example .mi files, check .

Instead of copy-pasting six properties, you now copy-paste only two.

Making material templates

Let's take it another step further – we can make a bunch of different colours to re-use across your files. An example for this are hair files, or the plastic materials I've used in my .

For this, I first created a plastic_base.mi with all the common properties, and then created one additional .mi file for each shade of plastic, setting plastic_base.mi as baseMaterial, leaving me with the following folder structure:

If I decide that my plastic is too shiny, I can edit _plastic_base.mi instead of touching every template individually. Pretty neat, isn't it?

And if one of my items happens to have a custom normal map and/or texture, then I just add them in the values array of my material and call it a day.

Maximally lazy: external materials

But we can take this approach even further! If you don't have any properties, your mesh doesn't even need materials! You can simply use the externalMaterials list instead. You do this by unticking the isLocal property in the materialEntries definition:

Warning

You can of course mix and match local and external materials! Just make sure that the materialEntries indices are pointing at the correct material.

However:

If you are using preloadLocalMaterials, you need to use preloadExternalMaterials instead of externalMaterials.

Images: Importing, editing, exporting

How to edit images and preserve transparency

Rache Bartmoss once said: the first step to is .

For documentation on the Wolvenkit Import/Export tool, see .

Exporting a texture

  1. Add the texture you want to overwrite to your Wolvenkit project.

    1. If necessary, move and rename it. You should stick to the game's naming convention.

  2. Find the Export Tool (Tools -> Export Tool) and export the texture.

  3. You can now find a png file in your project's raw folder.

Editing a texture

Editing textures is straightforward: just change them in your image editor of choice. The only hitch for reimport is the transparency.

Wolvenkit supports the .dds file format, but since that is more complex, we won't talk about it here and stick to the .png format. If you're using .dds files, you probably know what you're doing anyway :)

Paint.NET

is a free image editing software for Windows. It supports PNG transparency out-of-the-box.

Adobe Photoshop

To export with transparency in Photoshop, you need an alpha channel. Fortunately, creating one is simple. (For the initiated: The alpha channel is just a layer mask over the entire image.)

Find the Channels palette at the bottom right of your Workspace and add a new channel:

Your image will turn black now, because the selected alpha channel will not have transparency yet.

To get your image back, select "RGB" on the Channels palette — but we'll stay on the Alpha channel for now.

In the layers palette, use your image as selection by ctrl+clicking on the layer's icon:

With the alpha channel selected, fill your selection with white to mark the transparent parts.

The fastest way to do that is to press d, x, delete

You can now save your image as a PNG with transparency. If you have exported a texture in the first section, you should overwrite that file.

Importing a texture

  • Find the Import Tool (Tools -> Import Tool) and select your texture.

  • If you have stuck to the game's naming convention, Wolvenkit will select the right preset for you. Otherwise, you need to select the right preset:

    • TexG_Generic_Color for a diffuse/albedo

    • TexG_Generic_Normal for a normal map

    • TexG_Generic_UI for anything that you want to use in .inkatlas files

    • … etc

  • If your texture is upside-down, uncheck the box for VFlip.

  • Click the "import" button. Your .png will now be imported Into the .xbm file.

Textures

What kinds of textures exist, and what do they do?

This page aims to give an overview on different kinds of textures and what the game is using them for.

By default, all textures in Cyberpunk2077 are Y-flipped (upside down). WolvenKit will take care of that for you during import/export via the VFlip property.

If you just want to know how to import/export textures, see .

Types of files

Diffuse/Albedo

This texture is directly projected onto a mesh to give it colour and appearance. Used by shaders like metal_base.remt.

Naming convention:

In the game files, these files will be named <name>_d.xbm (e.g. base\environment\decoration\food\packaged_food\textures\synthetic_snack_01_d.xbm)

When importing a diffuse texture with a non-default file name, make sure to check the isGamma box in the import properties.

Normal

Also known as "bump map", this texture is used to give a mesh depth and surface details. Used by shaders like metal_base.remt.

Naming convention:

In the game files, these files will be named <name>_n.xbm (e.g. base\environment\decoration\food\packaged_food\textures\synthetic_snack_01_n.xbm)

For a guide how to make your own normal maps, see .

Roughness

Also known as "gloss map", this texture defines how light scatters across the surface of your 3d model. Used by shaders like metal_base.remt.

For an overview image, see .

Naming convention:

In the game files, these files will be named <name>_n.xbm (e.g. base\environment\decoration\food\packaged_food\textures\synthetic_snack_01_r.xbm)

Metalness

Also known as "metallic map", this texture defines which parts of the material behave like metal and which parts don't. Used by shaders like metal_base.remt.

For an overview image, see .

Naming convention:

In the game files, these files will be named <name>_m.xbm (e.g. base\envment\decoration\food\packaged_food\textures\synthetic_snack_01_m.xbm)

Atlas

Used for in-game items and UI elements, these textures contain a collection of images. They are made available to the game via files.

Naming convention:

In the game files, these files will be named atlas_<name>.xbm (e.g. base\gameplay\gui\fullscreen\hacking_minigame\atlas_minigame_programs.xbm)

Additional intel

Roughness/Metalness overview

here
here
here
mesh
corresponding wiki page
loaded externally
material template files
mesh
Do you want to know more?
here
this guide
multilayered material
properties
Changing the colours
Changing the mask
importing a texture
exporting a texture
here
Paint.NET
Use 32-Bit to get the highest available image quality.
You now have an alpha channel.
Layer to selection

Morphtargets

Overview of working with morphtargets

COMPATIBILITY WARNING Full .morphtarget editing is enabled in Wolvenkit 8.9.1-nightly development builds. This content uses these new capabilities, and does not apply to previous workarounds.

Type Extension

.morphtarget

Description

Morphtargets are a special kind of a mesh, or more accurately a .mesh is a more limited version of a mesh without the ability to define targets by itself (with a few exceptions.) A full model can consist of multiple .meshes and .morphtargets.

Morphtargets (or more generally just 'targets') are used for additional deformation beyond what rigging can do, as well as for creating alternative and/or additional shapes for a mesh. Blender calls targets shapekeys.

To be exact, cp2077 has three kinds of targets:

  1. .morphtarget is a separate type, and has an associated .mesh (baseMesh) because redengine splits the full data needed for the model into these two separate types. The .morphtarget always defines the shape, overriding the .mesh. The .mesh stores the other information as usual. .morphtargets are used for, for example, body and head customization.

  2. GarmentSupport is a property of a .mesh. It is also a target and this is a more common way to define targets than the separate type. GarmentSupports are used, for example, to slightly shrink a t-shirt so that it doesn't clip when you put a jacket over it.

  3. Vehicle damage submeshes. This is a static end state of a target, inserted directly as an extra submesh rather than a target.

How do Targets Work?

A simple and perhaps familiar.morphtarget example is chest size for FemV. There are three states: default, small, big. The default corresponds to the base mesh shape, and is the Basis shapekey in Blender.

The two other states are defined as targets. Each target defines a 'delta', a set of offsets for base mesh vertices from their positions in the default shape - including any other active deform, like a pose in photomode. If you fully enable one of these targets, you effectively have a mesh with the chest area reduced or enlarged.

Targets can be also enabled partially, with the states between off and fully on (the 'end state') interpolated by the engine or 3D software. This can be used for animations, but in the cp2077 context generally is not.

Targets can be blended together. If two targets are enabled fully or partially, their combined state is blended into one shape. In cp2077 some targets are mutually exclusive (like the chest size), and others are inclusive (your V's face is a combination of the selected eyes, nose, mouth, jaw, and ear target states all blended together.)

Exclusive/inclusive is not a limitation of the targets themselves, but of how cp2077 activates them..

Target Activation

The game engine activates targets by name (and region) in specific conditions.

Character customization targets are activated when the character is loaded (and dynamically in the CC view.)

GarmentSupports are activated when equipping a garment that goes "on top of" the garment with GarmentSupport.

Morphtargets, What Are They Even Good For?

So, some uses are probably already obvious. But targets enable quite a bit of exciting modding:

  • Modding anything with a .morphtarget without breaking the targets like before

  • You can for example mod the CC tattoos, or piercings...

  • ...Or any aspect of character face customization. Vampire catboy Legolas here we come!

  • TBA

The main limitation currently is that we do not have a way to add activations, at least generally. You need to hook into a target name that the engine already uses.

Working with Morphtargets

COMPATIBILITY WARNING

.morphtargets exported prior to the Wkit 8.9.1-nightly development versions contain incorrect data. It's possible that you'll encounter errors or strangeness with them on import or in-game. For best results, you should start from a vanilla.morphtarget exported with Wkit 8.9.1-nightly or later.

This Section is Incomplete

One thing deserves highlighting right up front: whenever you are doing 3D work on a model that has a .morphtarget, you work with the .morphtarget, not the.mesh. The .mesh is only used for things the target doesn't include, like appearance definitions. Fundamentally the 3D workflow goes like this in Blender (use the blender cp2077 plugin import/export):

  1. WkitExport the .morphtarget

  2. BlenderImport it

  3. Make your edits to base shape and/or shapekeys (if you need to - the base shape edits are automatically propagated to shapekeys.) You can edit just like you would a .mesh, because it is a mesh.

  4. BlenderExport to a file named after the .mesh

  5. BlenderExport to a file named after the .morphtarget

  6. WkitImport the .mesh.gltf first. Wkit will treat it just like it would a 'real' .mesh

  7. WkitImport the .morphtarget.gltf

  8. ...And that's it. You can pack the mod.

Tips for Morphtargets

  • Make sure to test your targets work blended with other targets, not just by themselves

  • You can create targets from scratch, all that matters is that the name matches the original. This is handy for zeroing out targets you don't need or want, for example.

  • I prefer to use either of the .gltf formats over .glb. They're all GLTF but .gltf is slightly more widely supported, plus you can open it up in a json editor. -- Auska

Working with GarmentSupports

See the GarmentSupport section for more info.

Working with Vehicle Damage Deforms

TBA

Exporting .mesh/.w2mesh

Using REDmod to export .mesh and .w2mesh files to .fbx format

Optional Parameters for meshes

-lod=<uint>           - Defines mesh's lod to be exported
-mesh-skinning=<bool> - export skinning (armature data) default is false

Example Command:

redmod resource-export -depot="M:\" -input="base\test\example.mesh" -output="M:\base\test\example.fbx" -lod=1 -mesh-skinning=true

You can also export to .fbx with REDmod through the Wolvenkit GUI!

- materials
  - plastic
    - _plastic_base.mi   << baseMaterial for all materials below
    - plastic_black.mi
    - plastic_yellow.mi
    - plastic_red.mi
    - plastic_green.mi
    - plastic_purple.mi
    - plastic_pink.mi
    - plastic_orange.mi
    - plastic_blue.mi
manavortex's MEGA
toy prop pack
You only change 2 of 6 properties, but you always have to copy all of them!!
Only add the properties that you want to change in relation to the .mi file
The technical term for doing this is "daisy chaining". (Image: Wikimedia commons)
material entries and indices
White => very rough
Black => very smooth
White => metal
Black => not metal
here
here
Roughness/Metalness overview
Roughness/Metalness overview
inkatlas
via https://3dcoat.com/forum/index.php?/topic/21601-3dc-roughness-metalness-visual-aid/
Releases · PixelRick/CyberpunkSaveEditorGitHub
Paint.NET - Free Software for Digital Photo Editing
blender.org - Home of the Blender project - Free and Open 3D Creation Softwareblender.org
Maya Software | Get Prices and Buy Maya 2023 | Autodeskautodesk
Top 3D design software to paint materials and textures onto 3D assets | Adobe Substance 3D Painter
Official Adobe Photoshop | Photo and design software
Notepad++
GIMPGIMP
KritaKrita

Vortex Mod Manager

Installing and setting up Vortex Mod Manager, the recommended way to install, manage, and upgrade mods.

Windows 10 or higher is required to use Vortex mod manager. If you are not using Windows, see our Manual Install page.

Vortex is a multi-game mod manager developed for and by NexusMods, the website where most Cyberpunk 2077 mods are hosted. Here you can download mods manually or with Vortex and keep track your download history.

To use Vortex, you need an account there. If you don't have one, you can sign up here – don't worry, it's free.

Why do I need this?

Technically speaking, you don't. You can install mods manually or use Mod Organizer 2 (but without our support, sorry, choom). However, Vortex for Cyberpunk is the most beginner-friendly way of managing your mods and will save you a lot of hassle.

If you have PTSD from modding Skyrim or Fallout with Vortex, be assured that Vortex for Cyberpunk is integrated extremely well. Go ahead, give it a try!

If you run into issues with Vortex that aren't addressed in this guide, you can contact Nexus support or join our Discord and find (volunteer) help in the #vortex-support channel.

TL;DR

  • Your staging folder must be on the same drive as your game installation

  • Your staging folder must not be your game install directory

  • Vortex has a lot of options. If you put wrong options, mods can go brr.

Download

Once you are signed in on Nexus, it's time to download Vortex Mod Manager.

If you can download it on your own, you can skip to the Install or Setup section of this guide.

  1. Click this link, it will take you directly to the download page

  2. Select the "Manual Download" option on the first entry:

  1. You'll now see a download page. If you don't have Nexus Premium,

    1. Select "Slow Download"

    2. Wait through the five seconds cooldown

  2. Optional, depending on your browser: Select your download location for files that you don't want to keep

  3. Wait until the installer is downloaded

  4. Run the installer: either

    • select the file from your download history (Ctrl+J for most browsers)

    • go to your download directory and double-clicking the file

  5. Proceed with the steps in the next section

Installation

Once you run the installer, you may get a prompt from Windows, asking you if you want to allow this app to make changes to your device. Select yes, and then Vortex will begin its install.

If you chose the custom install location option, you will a prompt asking you where you would like to install Vortex to. Further instructions will assume an install location of C:\Program Files\Black Tree Gaming Ltd\Vortex

Congrats! You've finished installation! Vortex should launch automatically and you can now move onto setup.

Setup

Here is where we get into the weeds, the particulars of Vortex setup before we can use it.

If you can setup Vortex on your own, skip to the Settings section of this guide. (Why are you reading this?)

Logging into Nexusmods

If you are already logged in, proceed to the next section "Adding Cyberpunk"

  1. If Vortex didn't open by itself, open it from the start menu.

  2. Log into Nexusmods by clicking on the red circle in the top right of your client

The initial dashboard on launch
  1. You will see either a browser window or an error message that Vortex couldn't open one – in this case, copy the URL in the box at the bottom and open the browser window yourself

If your browser doesn't open automatically, copy the url starting with users.nexusmods in the box
  1. Optional: log into nexusmods (if you aren’t)

  2. Allow Vortex to access your Nexus account by clicking "Authorize":

Allow Vortex to authorise your account
  1. Click "Log in to Vortex":

Log into Vortex and close the page
  1. Instead of the red icon, you should now see your profile picture and username from nexusmods.

Vortex: Adding Cyberpunk

This section will tell you how to add Cyberpunk to Vortex's managed games.

  1. On the sidebar on the left side of your dashboard, click "Games"

  2. In the page that now shows, type "Cyberpunk" into the search bar

  3. Hover over its thumbnail and click "manage"

  4. You will now see a popup complaining about "Game support not installed". Don't panic, this is expected!

  5. Click the "download" button at the bottom of the window to install the Vortex plugin for Cyberpunk:

The games page, with the extension dialogue open
  1. The extension should download automatically

  2. You need to restart Vortex – agree to the prompt.

  3. Optional: If Vortex was able to auto-detect your game install, you are done now and can proceed with the Settings section.

  4. Vortex will tell you that it couldn't detect your game install and prompt you to set it manually. Click "Continue".

  5. In the explorer window that now pops up, navigate to the folder containing your Cyberpunk exe (e.g. C:\Games\Cyberpunk 2077\bin\x64)

  6. Once you are in the right folder, click "Select Folder"

Vortex can now manage your game! Proceed to the next section, Settings.

Settings

This section tells you how to set the recommended settings in Vortex, grouped by tab. If a tab isn't covered, there are no recommendations and you can do what you like.

Start by clicking "Settings" in the left sidebar of your Vortex Dashboard, then select the first tab.

Interface

The settings here tell Vortex what to do with your mods as it gets them.

Here's a screenshot of the recommended settings with an explanation below:

Recommended automation settings

To put a mod in the game, Vortex requires you to complete four steps. The folders for these are configured in the Mods section.

  1. Downloading: Putting the mod into Vortex's download cache, either by clicking the button on Nexus or by dragging-and-dropping an archive onto the client. The archive will now live in Vortex's download directory.

  2. Installing: Unpacks the mod and copies it to Vortex's staging directory.

  3. Enabling: This mod should be included in the next deploy

  4. Deploying: The mod has been copied from Vortex's staging directory to your Cyberpunk game directory.

Deploy mods when Enabled

Automatically deploys each mod as you enable it, merging step 3 and 4. We recommend enabling this, as it saves you a click.

Install Mods when downloaded

Automatically completes step 2 when you download a mod. We recommend disabling this as it lets you address issues and popup one after the other

Enable Mods when installed

Automatically completes step 2 when you install a mod. We recommend enabling this, as it saves you a click.

Run Vortex when my computer starts

Starts Vortex with Windows - disable or enable at your discretion

In theory, you can configure Vortex so that you hit the download button on the website and it will download, install, enable and deploy for you. The downside with that is that you might not notice errors as they pop up in the background, which is why we recommend doing that one single click by yourself.

V2077 Settings

This setting controls the automatic REDmod conversion. For an explanation of what that means, see here.

This only has one setting, but it's recommended to keep it toggled "on" unless otherwise directed specifically by install instructions on a mod.

This option can also show up on the dashboard.

Mods

This section controls Vortex file storage. It's mostly a matter of personal preference and disk space availability on your end.

Mods: Staging

This folder MUST be on the same drive as your Cyberpunk.exe, or the deploy might fail.

Where Vortex keeps its mods, ready to deploy them into the Cyberpunk game directory.

The default folder location is {USERDATA}{game}\mods, which resolves to C:\Users\YourUsername\AppData\Roaming\Vortex\cyberpunk2077\mods

You can keep it as this, or you can make a folder for it in a place you can easily access it, like C:\Games\Mods. Wherever you decide, you want to make sure it is accessible and you can remember it in case of issue.

Mod staging folder default location

Mods: Download

Where Vortex stores downloaded archives. Can be wherever you like, even on a different drive.

We recommend keeping an extra folder in there for manually downloaded mods, as Vortex can manage these as well – you just have to drag-and-drop them into the client.

Dashboard

Finally, we will return to our dashboard.

No matter what settings you chose in interface, you should still have a section labeled "Tools", where at this point you should at least see four things, the last of which will be disabled:

The default tools on the dashboard.

It can be helpful here to toggle "Enable Toolbar" above it so that you can always see them wherever you are in Vortex.

These are different options to launch the game via Vortex.

Click on the three dots next to "Launch Game with REDmods Enabled" and set it as primary. This will make Vortex pick this option when you click on the Cyberpunk 2077 picture on the far left.

"REDmod Deploy Latest Load Order" is also incredibly useful if your mods are acting up: Just using the "deploy" button on the main management page can fail – by using this button, you can debug your REDmod deployment.

Use

You're almost to the mod page, but first, you need to get some mods. Let's start by installing the core framework collection, which contains everything that other mods require.

  1. Click on "Collections" in the sidebar

  2. Select "Discover more collections."

  3. Wait until the selection page pops up.

  4. Select Core Mods and click "Add to Vortex".

This will open a window in Vortex, with the thumbnail and name of the collection, which profile you want to install it to if enabled, and any additional install instructions.

Collection installation confirmation window
  1. Click "Install Now": This collection has no extra instructions.

  2. You will get a new window for the first mod: click the "Download" button

The download window for a mod in the collection.
  1. The Nexus "Slow/Fast" download button for the corresponding version will open. The correct version has been picked by the mod author.

  2. Click "Slow Download" (unless you're a premium user)

  3. Rinse and repeat this process until you have all mods in the collection.

As this is a collection, each mod will – regardless of our settings – be installed as its downloaded. As they deploy, you will see a screen pop up with a lot of code flowing by. Don't worry, this is just Vortex deploying your REDmods.

Before you play your game, check the bell in the top right corner next to your profile picture. Click it to expand the notifications. What you want to see is all green or blue--any red or orange issues will need to be resolved before starting your game.

Notifications are ordered with most recent at the top--which means there was a successful REDmod deployment notification AFTER the failure, so the failure can be safely dismissed.

At this point, assuming your notifications are all green or blue, you can safely play your game. However, you won't notice many changes, as the framework mods aren't doing much on their own...

Starting up the game

The game should always launch with just the core frameworks enabled. If it doesn't, head over to the troubleshooting page and make sure that you can launch and start a new game.

Since this is your first time launching the game with mods, you should see a prompt to bind an overlay key for Cyber Engine Tweaks (CET). (If it does not, check here.) You can assign whatever you like, this button will hide or unhide the CET overlay.

While you have it open, you can navigate to the "Settings" option, and select "Skip Start Menu" and "Suppress Intro Movies" (if you don't want them). The setting will become active after the next restart.

Make sure to click save to keep your choices.

CET overlay on the main menu screen on the Settings option.

Downloading a mod with Mod Manager Download enabled

Let's get a mod that'll change something. For this example, we've picked KS UV framework, which will change V's feet.

Usually, you want to start at the description page to see the exact file that you need to download. For a detailed guide on the parts of a mod page and how to navigate Nexus, see our Downloading Mods section.

For now, you can simply go straight to the Files page of the KSUV mod.

The example mod's "Mod Manager Download" button

So that you can see the changes in-game immediately, to know if you've installed correctly, you will download the first option, "Recommended. UV Framework New High Heel Feet with Custom Textures - Classic Install". This will change the feet visually now, and allow for custom textures later. Click "mod manager download". A window will pop up telling you that you need another mod "-KS- Vanilla Shoes for High Feet" installed before downloading this. You can do this after downloading this mod; your feet just won't fit in any vanilla shoes until you do. For now, click download to continue to the final download page, where you will select "slow".

Once your timer counts down, it should begin downloading in Vortex. The setting "Bring Vortex to foreground when starting downloads in browser" is enabled by default, so if you didn't change it, the Vortex window should pop up now. Otherwise, click over to it, and you should be able to see a 1 next to Downloads in the sidebar.

Assuming you're using recommended settings, the mod won't have installed itself, so you will click on "Mods" in the left sidebar. You should already have mods installed, enabled, and downloaded from the collection. Scroll down until you locate the blue "Never Installed" button next to the mod you want to install. Click it once, and if you're using recommended settings, it should enable and deploy automatically.

For this mod, a window will pop up, warning you that it may need manual adjustment, due to multiple .archive files. These are important windows to pay attention to, because many mods that have multiple files do require manual adjustment. This information is usually found on the description page, which is why you want to read it carefully before download.

The warning window that pops up in Vortex for mods with more than one .archive file

For this mod, however, that is ok, and intended. You may simply click "Understood".

To test your new body framework mod, simply select "New Game" and pick a female-bodied V. If the feet are flat, it is not installed correctly. If they look a little funny, like barbie feet, you've done it right.

The left is what you're shooting for--if you see the right, the mod isn't working.

Downloading a mod manually to manage in Vortex

Let's install a mod without a mod manager download button and manage it in Vortex to show you how it works.

Mod authors sometimes disable mod manager integration for a variety of reasons. Usually, Vortex can handle these files just fine – if not, it will complain about it, and loudly so.

  1. Click this link, which will take you straight to the files tab.

  2. Select whichever one you like, like the "Arey", third option down.

  3. Optional: Check what it looks like

    1. Click on the "images" tab (to the right of "files")

    2. Find the picture named "Arey"

    3. Navigate back to the "Files" tab

Arey hair by Wingdeer
  1. Scroll down to the third option, Arey Hair PHYSICS ENABLED The file doesn't have any particular instruction.

  2. Optional: view the file contents – they sometimes contain helpful information:

The naming convention tells us that it's a hair replacer from Wingdeer for the female body gender, changing hair 48, There's also a preview picture included.
  1. Manually download the file – you know the drill by now.

  2. Return to the Vortex "mods" page. You have two ways to install the mod now:

    • Drag-and-drop the downloaded file on your client, or

    • use "Install From File" in the orange bar and select the file you just downloaded in the explorer window that pops up

The "Install From File" button
  1. You should now have successfully installed the file.

  2. If you have used the recommended settings, it should enable and deploy automatically. Otherwise, you need to do that yourself.

  3. Start the game

  4. Head to the character creator and create a female-bodied V

  5. Check hair 48 – normally, it looks like this:

Vanilla hair 48

If your hair is two big buns--you did it! If it's just the normal single bun with braids, go back and try again.

Arey hair in place of hairstyle 48

Congratulations! You know how to use Vortex!

Autodesk/FBX (Noesis)

How to import/export meshes with Noesis

Noesis is an alternative to exporting with WolvenKit. There are legitimate use cases for why you would want this. If you don't know them, you probably don't.

TL;DR:

Noesis is outdated. Go import/export with Wolvenkit.

Explanation

5000 years ago on the slopes of Mount Doom, mods were created with nothing but pickaxes, home-spun hemp, and hex editing. Older guides will refer to Noesis as the way to go — but Wolvenkit has come a long way since then. The import/export is reliable and works, and unless you run into issues, you will probably want to stick to it.

Given that you're still reading this, you probably have a reason to use Noesis, so here we go.

To use Noesis, you need the Noesis Import/Export Plugin.

Tool
Tool version

>= 3.1 stable

>= 4.459 >= Sep 28, 2021

Exporting from the Wolvenkit project

  1. Navigate the Noesis browser to your file on the disk (you can right-click on the mesh in Wolvenkit and select "Open in File Explorer")

  2. Right-click it in the Noesis Browser and select "Export"

  3. Export with default settings:

Done. You can now import the fbx to Blender.

Blender: Saving for import

Simply export as fbx, Blender's standard settings are fine for Noesis.

Importing

Noesis is an alternative to importing with WolvenKit.

  • Find your fbx in the Noesis browser

  • Right-click it and select "Export"

  • Set the Main output type to .mesh - CyberPunk 2077 mesh [PC]

  • A dialogue asks you for a file to overwrite. Make sure that it has your mesh!

Differences between fbx and glb

There are a few differences between Noesis and WolvenKit when it comes to exporting your meshes:

Note the differently named submeshes
Autodesk (fbx)
glTF Binary (glb)

Armature

Rotation W: 0

Rotation W: 1

Rotation Z: -1

Rotation Z: 0

Submesh names

submesh0

submesh_00_LOD_1

You can easily convert between the two formats by hand — or use this script: Switch to Blender's Scripting perspective, create a new file, paste the contents in, and run it.

Custom MultilayerMasks

How to make a custom MultilayerMask for your mesh

Summary

Created by @manavortex Published April 12 2023

This tutorial will teach you how to create your own MultilayerMask for an item and then assign an own MultilayerSetup to it.

Difficulty: You know how to read.

To find out what an MLMask does, see here. To learn about MLSetups, see here.

Export the MultilayerMask

Start by adding any .mlmask file to your WKit project. It doesn't matter which one, but you can start with this (6 white layers):

base\characters\cyberware\player\a0_005__strongarms\entities\meshes\textures\white.mlmask

Then, export it via the Export Tool.

This will give you the following file structure:

- name_of_your_mlmask_file.masklist    // file containing a list with relative paths to the images
- name_of_your_mlmask_file_layers      // folder containing the images 
  - name_of_your_mlmask_file_0.png
  - name_of_your_mlmask_file_1.png
  - name_of_your_mlmask_file_2.png
  - name_of_your_mlmask_file_3.png
  - name_of_your_mlmask_file_4.png
  - name_of_your_mlmask_file_5.png

Blender: Painting the MLMask

  1. Add the mesh that's supposed to hold your material to your project and export it.

  2. Import it into Blender and select the Texture Paint perspective.

  3. Switch into Edit Mode

  4. Select those parts of the mesh that you want to color.

  5. Duplicate them (Ctrl +D, ESC) and split off a new submesh (P -> Split Selection).

  6. Switch back into Object Mode.

  7. Select the new submesh; hide the old one.

  8. Create a new image. It can be 512x512 for now; only upscale if you find that you can't get it un-pixelated in-game. Most CDPR layer masks are really low resolution!

  9. Switch the right viewport into "Texture Paint"

  10. Find the "Texture Slots" dropdown in the menu (you may have to scroll)

  11. Set Mode to Single Image

  12. Select your new black image from the list below.

  1. In either of the panels, set your brush foreground color to white (or gray). This determines the transparency of the layer. I recommend that you use white and regulate transparency via mlsetup, but if you want to paint e.g. clothing folds or wear&tear, you might want to paint greyscale.

  2. Optional: Set these properties under "Options":

  1. Paint!

  1. Rinse and repeat until all parts of your mesh that should have your material are white on the left-hand image.

  2. Now for the annoying part: On the right side, make sure the mask is more or less smooth, as you will see this in-game.

Now, save the image: overwrite one of the layers from the mlmask that you have exported. If you run out of layers, you can just add them at the end.

The game assumes that layer 1 is white, so start exporting over layers >0

Do this as often as necessary.

Import the MultilayerMask

Once you're done, open the masklisk and make sure that you have exactly as many entries as you have images in your folder (adding or deleting them as needed). Then, in Wolvenkit, import the masklist via Import Tool.

All images in the multilayer mask need to have the same resolution. Otherwise, it will crash your game.

You can now assign your new Masklisk to your mesh and use it together with custom MultilayerSetups.

before => after

MLSETUP Builder

The tool of your choice for editing multilayered materials

Introduction: What is MLSB?

MLSetupBuilder (commonly referred to as "MLSB") is a Cyberpunk 2077 modding tool to comfortably edit MLSetup files, developed and maintained by Neurolinked.

There is a dedicated channel on the and a thread on the , where you can find

Installation

For integration with Wolvenkit, install MLSB as a plugin:

  1. Click on "Home" in Wolvenkit's title bar

  2. Select "Plugins" in the left sidebar

  3. If MLSB is installed, you'll see an "Update" button, otherwise, it will say "Install". Do that.

We will now launch MLSB and do the initial setup.

  1. In Wolvenkit's Plugin view, click "Open", this will open a Windows Explorer with the install folder (Cyberpunk 2077\tools\neurolinked\mlsetupbuilder)

  2. Navigate to the folder with the higest version (at the time of this guide, that is MlsetupBuilder-1.6.7)

  3. Start MlsetupBuilder.exe

  4. Optional: You can pin that file to your start menu or create a shortcut if you want to launch MLSB directly.

Usage

To make the most of MLSB's features, you will want to it first. However, you can start using the tool right away. Here's how (or scroll down for the screenshot):

  1. In the project explorer under Wolvenkit's archive folder, right-click on am mlsetup file This folder will only be visible in the "source" or "archive" tab of your project explorer

  2. Select "Convert to JSON"

  3. This will generate an mlsetup.json file in your project's raw folder. This folder will only be visible in the "source" or "raw" tab of your project explorer

  4. Right-click on the newly created mlsetup.json file

  5. Select "Open in MLSetupBuilder"

Using MLSB

As of Version 1.6.7, this is what you will see now:

Start by importing the file from the preview. That will populate the Layer Config box with the MLSetup that you just loaded.

The preview was hiding an empty 3d viewport. To , you will need to MLSB first, but you can already click through the individual layers and assign (such as roughness, normal strength, base material and colour) from the "Material Properties" panel.

Don't forget to hit "Apply" after you have changed a material.

Once you're done:

  • select File -> Export

  • overwrite the original mlsetup.json

  • switch back to Wolvenkit

  • in the "raw" folder, right-click on your file

  • select "Import/Convert from JSON"

Congratulations — you now have an .mlsetup! If you pack your mod and launch the game, you should now see your changes.

About That 3d Viewport

This is where you can load models from the game for a direct preview which layer will affect which parts: simply click on the "Library" button.

Here, you can either browse to your model directly, or use text search:

After selecting a model, you can close the library browser again. Now selecting a layer will show you directly which parts of the mesh it corresponds to.

That's it! Happy recoloring!

Configuration

Extract a partial depot

We're assuming that you have already configured Wolvenkit. If you haven't, please .

  1. In Wolvenkit, extract a (Generate Materials). Note that this window shows you the Depot Path for Step 5.

  2. While it is doing that (it may take a few minutes), download and extract it to a folder of your choice.

  3. Now, switch to MLSetupBuilder.

  4. Select "File -> Preferences"

  5. Apply the following settings:

  1. Press Ctrl+R to reload MLSB and make sure that the settings are applied.

Building the depot

Again, this step is optional, you can straight away.

  1. Open the menu "Build" and select "Repository" to uncook the archives:

  1. Select the following settings (if you want to uncook everything, this step can take several hours, so we'll only do the essentials for now)

  1. Click "Uncook".

  2. Wait. Do not interact with the program in any way until the process has finished - especially interacting with the console might just freeze up the entire windows cmd process. This is not MLSB's fault, but due to a Windows standard implementation.

This process can take some time — if you have selected everything, it can be several hours on slow machines. (You should've listened during step 1, choomba ;))

  1. When the process is complete, close the Depot Generator window

  2. Select Build -> Microblends

  3. In the bottom left corner, hit "Start"

  4. Repeat Step 4.

That's it, you're done now and can use the !

Troubleshooting

Help, my Layer Config List says object Object

You need to update the interface.js — download it from Neurolinked's github repository, then replace the file with the same name in MLSB's install directory, subfolder resources\app.

If you have installed it as a Wolvenkit plugin, that directory will be Cyberpunk 2077\tools\neurolinked\mlsetupbuilder.

There's an exception when generating my depot!

Does the progress bar still move? If yes, then you're good - ignore this.

If not, you haven't left your fingers off MLSB and need to start over. Click "Uncook", then go afk until it's done.

If that doesn't help either, it's worth trying Wolvenkit Console's latest .

Video Guides

Garment Support: How does it work?

What is Garment Support and how does it work?

If garment supports are causing trouble for you, your easiest option is to delete the parameters from your mesh. For detail, see .

If you want to include garment supports, check guide by engres.

Credit goes to psiberx ( with initial explanation of the algorithm) and IslandDancer for providing screenshots and know-how

The engine morphs garments to avoid clipping — for example, if you equip a pair of boots and V's jeans no longer cover the shoes, but get tucked under.

This process is accomplished via 'parameters' on the mesh:

Component prefixes

Garment support will be applied based on garmentScore. For this, the prefix of the component name will be considered (components are named in your .app or .ent file's component array).

For an explanation of how the algorithm calculates the score,

The prefixes are as follows:

How it looks if it's broken

The algorithm

The game calculates the garment score by checking the prefix of component names, where the one with the lowest prefix is the innermost:

After considering the component name, the game will consider the tags in the .ent's visualTagSchema:

An example for t0_000_pma_base__full (the default body component, torso+legs):

Moving a Dangle Chain

Summary

Created by @eagul Published March 20 2023

This guide will go deep into detail about moving dangle bones. Still unknown: changing bone parenting, rotating bones, editing the animgraph physics, adding new mirrored dangle chains for better coverage. If anyone has done tests on any of these topics, please contact me.

Assumed skill level: - You understand what you are doing, and know why you need to move dangle bones - You are able to read and comprehend instructions.

MATH WARNING

Okay.... Let's get started. If you are doing physics stuff, and need to move the dangle bones to fix the leverage effect, or for any other reason, you are in the right place. I will be using my long hair dangles project for examples here. Read 'Leverage effect' section in 'Dangle Bones' page for the reasoning behind why this process is necessary. (Using a normal hair dangle skeleton is not an option because it is parented to the 'head' bone, which causes horrible clipping and unnatural movements when the head turns. It might be possible to change the parenting to spine3 bone, but i have yet to test. Even if it is possible, the process described below would still be usefull to move the chains into the right positions) You will need to do a couple things: 1) Get everything into blender. 2) Isolate the bones you need to move. Hide other bones in armature edit mode. 3) Duplicate the bones and move them to the desired position. 4) Edit the bone positions in both the .mesh and .rig, sometimes editing the collision hitboxes in the .animgraph will also be required. I would also recommend having a rigged and weight painted mesh ready, for testing purposes. I will explain each step of the process more in-detail below.

MultiMesh Export

Usually, you can get the skeleton in it's real form into blender by using WithRig export on the mesh. However, if the .mesh contains bones that are not present in the .rig, you will need to use MultiMesh Export. You need to find a second (or even more) .rig file, so all the bones that are present in the mesh have a counterpart in the .rig. You then need to also add the meshes that correspond to the new .rigs and then export. Attached images show settings i used to export base\characters\garment\citizen_formal\torso\t1_072_shirt__netwatch\t1_072_ma_shirt__netwatch_dangle.mesh with rig, which i used for long hair dangles.

Editing the .rig

Open the .rig file in Wolvenkit. Under boneNames you can find which index corresponds to which bone. Expand boneTransforms. Locate the bones you want to move. Moving a bone in a chain will also move every bone that's parented to it (located lower than it in the chain). In the case of the image above, moving the bone selected in yellow, also moved the entire chain. In this case i moved bone 8 (selected in yellow) by 0.283076668 on the Y axis.

Animgraph edit

As you can see, the skeleton exploded. This is (to my understanding) caused by collision hitboxes on the spine bones. It will only happen if you have moved the dangle chain inside of those hitboxes. If this happens to your skeleton/mesh, follow these steps to fix it: 1) Open the .animgraph file in Wolvenkit. Expand the 'rootNode' array, and keep expanding untill you see collisionRoundedShape and then lower the roundedCornerRadius for each of the bones untill your skeleton no longer explodes. Here i set the value to 0, the animations work fine, but a correctly set value might reduce clipping in some poses.

Notice how editing the bone positions in the .rig also deformed/moved the mesh in-game. At least it's dangling nicely now, and it no longer explodes :copium:

Editing the .mesh

The .mesh also contains bone matrices. To my understanding, these are used to map the bones from the .rig to the vertices. You will need to move the bones in the .mesh to match the changes You did to the .rig skeleton, and this will fix the mesh deform. In this case, I'm editing bones 79-83. The goal is to move each of them by -0.283076668 on the Y axis. Open the .mesh in Wolvenkit and navigate to boneRigMatrices.

Next, open and copy paste each of the entries of the bone matrix into the calculator. Then press inverse.

Notice how the bottom row of the inverse matrix corresponds to the coordinates of the bone, which you can see in Blender.

Next, copy the new Y coordinate from the bone you duplicated and moved.

After that, return to the calculator, and press 'Insert in B', and then replace the matrix entry corresponding to the Y position of the bone with the new coordinate.

Then, press 'inverse'

Next, press the 3 small lines below the output, click on Show LaTeX, and copy the top row entries back into wolvenkit.

And now repeat all of those steps for each of your bones... enjoy... After that, you should be finished!

h0_

t0_

s0_

l0_ ...

Any component with a 0 in its prefix will be treated like a body mesh (no deform/squishing)

h1_

Head inner (mask, sunglasses)

h2_

Head outer (helmet, bandana)

t1_

Torso inner (shirts)

t2_

Torso outer (jackets, coats...)

s1_

Shoes

l1_

legs (pants that aren't leggins)

s0 = 0    // no prefix will also be 0
l0 = 10
a0 = 20
t0 = 30
h0 = 40
s1 = 50
l1 = 60
t1 = 70
i1 = 80
hh = 90
h1 = 100
h2 = 110
t2 = 120
PlayerBodyPart = -2000
Tight = -1000
Normal = 0
Large = +1000
XLarge = +2000
+30          prefix: t0_
-2000        visualTag: PlayerBodyPart

—————————————————————————
-1970
here
this
discord post
see the next section.
Garment Support in action
These will show up as shape keys in your Blender export
Often, you can salvage things by deleting the parameters in WolvenKit
Blender
Noesis
Noesis Import/Export Plugin

Vehicles

The pages following this aim to give a detailed view of the resources that make up each vehicle in the game, with the hope that you'll be able to create (not just modify) vehicles for the game.

Logo
mana vortex

Game archives folder

C:\Your\Path\To\Cyberpunk 2077\archive\pc\content

uncook folder

You can find this folder in your WolvenKit's settings as "Depot Path" (you've seen it in the window from Step 1)

Wolvenkit Depot Path

You can find this folder in your WolvenKit's settings as "Depot Path" (you've seen it in the window from Step 1)

Wolvenkit-CLI.exe

The executable of Wolvenkit Console from Step 2

Redmodding Discord
Cyberpunk 2077 Modding Discord Server
configure
use that
configure
material properties
do so now
partial depot
WolvenKit Console
use MLSB
3d viewport
here
Nightly
3ds Max Software | Get Prices & Buy Official 3ds Max 2023 | Autodeskautodesk
010 Editor - Pro Text/Hex Editor | Edit 200+ Formats | Fast & Powerful | Reverse Engineering
Logo
Logo
Logo
Logo
Logo
Logo
010 Editor - Pro Text/Hex Editor | Edit 200+ Formats | Fast & Powerful | Reverse Engineering
GitHub - psiberx/cp2077-tweak-xl: Cyberpunk 2077 mod that allows you to modify TweakDB.GitHub
GitHub - psiberx/cp2077-archive-xl: Cyberpunk 2077 mod that allows you to expand game resources without conflicts.GitHub
https://matrixcalc.org/
Isolated netwatch shirt dangle skeleton. The original dangle chain is selected. The spine column, and the duplicated and moved dangle chain are also visible.
Original
Edited
Result
Result
Not edited bone matrix of bone 79.
Finished bone matrix edit in Wolvenkit

Cheat sheet: Materials

Various kinds of materials, and where to find them

This page contains a brief overview of existing materials. For a more in-depth explanation as well as downloadable example files, check this page.

For an overview of Multilayered properties, check here.

If you don't know how to edit material properties, check here.

Simple / Basic materials

PBR material

You can find a material with Color (RGB), Roughness and Metalness under

engine\materials\pbr_simple.mt

White MultilayerMask

You can find a mlmask with three white layers under the following path:

base\characters\cyberware\player\a0_005__strongarms\entities\meshes\textures\white.mlmask

A white mlMask will apply the selected material to the whole surface of the mesh.

Textured Materials

For further details, see here.

engine\materials\metal_base.remt

Cyberpunk's default textured (or emissive) material. Super versatile.

base\materials\mesh_decal.mt

For decals etc., supports alpha channel. Can optionally be made half-transparent (for tattoos etc.)

base\fx_shaders\holo_mask.mt

Special effect material that transforms a mesh into an hologram. Can use a custom texture for decal and is color controllable.

base\surfaces\atlases\wood\wood_bare\wood_bare_01_pine.mi

Basic wood texture, no masks

Cyberspace Material

Works exactly like multilayered, but uses base\characters\common\cyberspace\silverhand_overlay_cyberspace_mml.mi instead.

Metal Materials

base\environment\decoration\containers\cases\coffin\textures\m_z_gold.mi

a shiny gold (metal_base.remt)

Emissive Materials

See here how it works and how to configure it.

material
description

base\environment\decoration\furniture\kitchen\neokitsch_fridge\textures\mi_neokitsch_fridge_z_emissive.mi

White emissive bright glow (from a fridge)

base\materials\screen\screen_fluff_blue.mi

blue/pinkish oscillating glow (from the collar of the jacket V wears in the trailer)

base\fx_shaders\multilayer_blackbody_inject.mt

A glowing shader with mlmask and -setup

base\fx\shaders\neon_tubes.mt

A glowing shader with color parameter

base\fx\shaders\signages.mt

The standard neon for advertising fonts in Night City. Comes in many colours, can be customized via textures and gradients. Check "city_deco_font" for examples.

base\fx\shaders\hologram_two_sided.mt

half-transparent holo material, allows three colours to tint it

Glass

For more details on glass materials and instructions on how to configure them, see here.

Basic glass, with warping properties, simple tint as color, simple opacity

base\materials\glass_onesided.mt

Non-warping glass, destructible, tintable via colors

base\vehicles\common\materials\glass_windshield_tinted_black.mi

Device screen glass

base\fx\shaders\parallaxscreen.mt

Gradient recolor

base\environment\decoration\decals\mesh_decal_lines\textures\lines_plain_black.mi

Coloured Plastic

Use engine\materials\metal_base.remt, the example below has been copied from base\environment\architecture\watson\japan_town\building\hotel\motel_notell\room\_plastic_black.mi

BaseColor

base\materials\placeholder\white.xbm

Normal

optional: path to your normal map

Roughness

optional: path to your roughness map

RoughnessBias

0.200000003

BaseColorScale

Colour as x/y/z values (color picker blend file )

Liquid

Use base\materials\fillable_fluid_vertex.mt or see here for details.

3d objects: .mesh files

Documentation on .mesh files and their properties.

This page contains information on .mesh files and their properties.

  • If you want to export or import mesh files, see here.

  • If you want to learn how to edit a mesh's appearance, check this guide.

  • If you want to mess with a .mesh's materials, see here.

  • A mesh file's shadow is defined in via .component

In the context of Cyberpunk, a mesh is the file that defines the and the of an object in the game world.

A mesh can have several submeshes, each of which has own material assignments.

Material assignment

Step 1: Appearances

This page only contains mesh-specific information. Find more details on materials, the corresponding section.

This is how to determine which parts of the mesh have which material:

Example: A mesh with two materials, one of them a local instance, one of them an external .mi file

ChunkMaterials

You assign materials based on the "chunks" (the individual submeshes) inside a mesh. Open the mesh file in Wolvenkit and open the "appearances" array, then make sure that each of your submeshes has an entry inside the array.

You may have to create additional entries in "chunkMaterials": Either duplicate an existing entry from the right-click menu, or select the array and use the yellow (+) in the side panel.

Material definition

Materials are defined in the array materialEntries inside your mesh:

For a detailed example, see

While you can mix external and local materials, you can not mix preloaded and non-preloaded ones. For details, see below.

Property
Description

index

numerical index of corresponding material in target list (as defined by isLocalInstance)

isLocalInstance

Selects the material target list. True: in localMaterialBuffer.materials or preloadLocalMaterialInstances False: inexternalMaterials or preloadExternalMaterials For more information on this, see the page for .

name

unique name of material, used to select the material via chunkMaterial

Preload… what?

Many of CDPR's early meshes use preloadLocalMaterialInstances instead of localMaterialBuffer.materials. As far as we are concerned, you can use the two interchangeably, but:

If you are using a mix of local and external materials, you must use the corresponding lists:

local
external

localMaterialBuffer.materials

externalMaterials

preloadLocalMaterialInstances

preloadExternalMaterials

If you mix the two, the materials outside of preload… will appear as transparent the first 1-2 times you trigger your item's appearance.

Step 3: Material definition

A material definition can be in a CMaterialInstance inside the mesh or in a .mi file in the project. For local materials, Wolvenkit will display material names as defined in the materialEntries.

For more details on material definitions, check here.

MaterialInstance: The local material

The materials themselves are inside the array localMaterialBuffer.materials (or preloadLocalMaterials in case of older meshes).

You can't go wrong by using those. However, if you don't have any properties that are unique to your mesh or appearance (for example a custom normal map), you might consider creating and using an external material instead.

A material instance looks like this:

baseMaterial picks the material (shader), while "values" contains to adjust it.

For an overview of materials that you might want to use for something, check here.

For how to find out which properties a material has, check here.

Material reference: reusing materials

A relative path to an external material, usually encapsulated in a .mi file. Use this if you don't need to add extra properties.

Entity: .ent files

All the dirty detes on entity files

Definition

Serves as the top-level container for entities and their properties within the game. Most things that you can see, touch, or interact with have an .ent file somewhere in their hierarchy. Examples are player equipment, weapons, NPCs, interactables (doors, vending machines…)

For the purpose of modding, we distinguish between two different kinds of entity files.

To see a minimal example in action, see the guide for creating custom props.

Mesh/Component entity (simple entity)

The minimal way of adding something (e.g. meshes) to the game. This entity can be directly spawned (e.g. via AMM) or referenced from within .app files.

This entity adds four physical mesh components, which will appear when it is spawned. It does not reference an .app file and does not have appearances.

For player equipment (weapons and armour), you can use mesh entities to encapsulate parts of your item. You load such .ent files via partsValues, which will be added to the corresponding appearance as if the components had been in the .app file itself.

As of April 2023, partsValues will be ignored for anything but player equipment.

This is good practice to avoid repetition, and also to make it easy on yourself if you want to change paths later in your project (imagine having defined 20 appearances with 5 components each, and then wanting to rename your mesh folder…)

Root entity

The entry point for the game to display an NPC or prop. This kind of entity only defines those components that are shared among all appearances. Meshes are defined in the .app file, where they can be assigned different properties (e.g. materials) per appearance.

From ArchiveXL item additions, this kind of file is usually called a root entity.

  • An entity file can define multiple appearances, which can point to different .app files.

  • For creating props, root entities are used as the defining key (one entity => one item, which can have multiple appearances)

  • Names support suffixes, allowing you to load different appearances based on body gender or camera mode. These are only used for player equipment and look like &FPP

  • How you split your .app files is largely a matter of taste. At CDPR, they usually shove everything into one file.

What are suffixes?

In a root_entity file, you can give the game a list of appearances and have them mapped to an .app file by entry name. While that's pretty good already, have you ever wanted to be more specific — for example, "for a male character, use this appearance, but for a female use this other one?"

This is where suffixes come in. You append them to an appearance's name in the root_entity, and the game will pick the correct appearance (and the correct app file, and the correct mesh!) based on the best match.

Find step-by-step walkthrough on using suffixes in the ArchiveXL item addition guide.

If you are registering an item via ArchiveXL, you can define suffixes via appearanceSuffixes: [ … ] in the .yaml file.

Your item will inherit the suffix setup from the $base component. In the example of Items.GenericHeadClothing, that will be

appearanceSuffixes: [ 
  itemsFactoryAppearanceSuffix.Gender, 
  itemsFactoryAppearanceSuffix.Camera ]  

What can possibly go wrong?

These bad beans can be the reason why your item is invisible!! You can and should disable the suffixes if you don't need them.

To do so, add an empty array to the yaml entry:

appearanceSuffixes: []

Which suffixes exist?

For a full list, see For a more in-depth list, check (TODO: Psi's github?)

For clothing items, the following suffixes are relevant:

Suffix
Explanation

itemsFactoryAppearanceSuffix.Gender

This item is gendered When resolving the appearance name via rootentity.ent, the game will look for appearanceName&Female and appearanceName&Male.

itemsFactoryAppearanceSuffix.Camera

This item has special rules for first and third person camera When resolving the appearance name via rootentity.ent, the game will look for appearanceName&FPP and appearanceName&TPP.

itemsFactoryAppearanceSuffix.Partial

If the current item has hide_T1part part and slot OuterChest is not hidden, will search rootentity.ent for&Full or &Part

itemsFactoryAppearanceSuffix.HairType

Defines how your item will look if a certain hair type is loaded (e.g., hide the back half of a bandana for long hair). When resolving the appearance name via rootentity.ent, the game will look for &Short, &Long, &Dreads, &Buzz, &Bald

Suffix load order

  1. the base appearance (with no suffix)

  2. the most specific suffix collection it can find

Example:

V has a female body gender and you're in photo mode (third person camera). Your base appearance is called appearance_.

full appearance name

appearance_

Found first, then ignored because a more specific appearance exists.

appearance_&Male appearance_&Male&FPP appearance_&Male&TPP

Ignored: V's body gender isn't male

appearance_&Female

ignored: a better match exists

appearance_&Female&FPP

ignored: you are not in first person camera

appearance_&Female&TPP

best match! The game will use this one!

Exporting and importing meshes

How to export and import meshes (WolvenKit <=> Blender)

Summary

Created by @manavortex Published November 05 2022

This guide will show you how to - export meshes from the game for use in other projects - import those meshes back into WolvenKit

Assumed skill level: You are able to read ;)

Tool
Tool version

>= 8.8.0 (8.7.0 works, but has a slightly different UI)

>= 3.1 stable

>= 1.1.0

Wait, this isn't what I want!

Would you rather…

  • Import/Export to fbx with Noesis?

  • Read more about Wolvenkit's Import/Export tool?

  • Replace meshes without editing them?

  • Export a whole character or an animated character?

You can find a collection of useful Python scripts for Blender on Simarilius's github.

You can import and export meshes via WolvenKit or Noesis - both methods work.

Before you start editing, a warning:

It is easy to break a mesh beyond the point of repair. Make frequent back-ups, and continuously test if your altered mesh still imports and displays in WolvenKit, especially when editing vertices!

Exporting the mesh

glTF Binary (*.glb)

WolvenKit <= 8.8: Use the Import/Export tool. It is pinned to the sidebar on the right.

WolvenKit > 8.8: Use the Export tool. You can toggle it from the "Tools" menu on the top bar.

  1. Select your mesh in the Export Tool and click Export/Process Selected, or simply use Export/Process All.

  2. You now havemeshName.glb in your WKit project's raw directory.

Wolvenkit > 8.8 will by default export with materials for the Cyberpunk Blender Plugin.

Path example

Assuming you are exporting t2_002_pwa_vest__puffy.mesh, WolvenKit will do the following:

Path of mesh: <yourModDir>\source\archive\base\characters\garment\player_equipment\torso\t2_002_vest__puffy\t2_002_pwa_vest__puffy.mesh

Path of glb: <yourModDir>\source\raw\base\characters\garment\player_equipment\torso\t2_002_vest__puffy\t2_002_pwa_vest__puffy.glb

Blender: Saving the mesh

Some meshes (such as eyelashes and hair) are two-sided. See here for details on how Wolvenkit handles that.

glTF Binary (*.glb)

If you have touched the topology, make sure to triangulate your mesh before exporting (Select all in Edit Mode, Ctrl+T)

You can use the Cyberpunk Blender Plugin — it will take care of the necessary settings.

Make sure to check the box under Data > Mesh > Tangents, as Wolvenkit will not export without it.

Export settings: "Tangents" must be checked

Importing to *.mesh

If you are following a guide with pre-made resources and it tells you to import via Noesis, you'll want to follow the advice, as the elements in the exported structure will have different names.

Alternatively, you can run this script on your blend file, which will automatically fix that for you.

glTF Binary (*.glb)

In Blender, you should have overwritten your previously exported glb. With WKit's Import/Export tool, you can now simply Import it back in.

WolvenKit will map any *.glb file under raw to the mesh with the same name under source.

Example:

<yourModDir>\archive\raw\base\characters\garment\player_equipment\torso\t2_002_vest__puffy\t2_002_pwa_vest__puffy.glb

will be imported over

<yourModDir>\archive\source\base\characters\garment\player_equipment\torso\t2_002_vest__puffy\t2_002_pwa_vest__puffy.mesh

WolvenKit refuses to import if the target mesh doesn't support all bones in the glb or if your mesh's topology became corrupted. If that's the case, check the troubleshooting page.

Import/Export: _doubled

Normally, a mesh's backfaces are invisible/transparent - you aren't supposed to see a mesh from below, so it doesn't matter. But some, like hair and eyelashes, are different, and need to be doubled.

When importing via Noesis, you need to do this by hand: duplicate all the vertices in the mesh, and flip the normals. When importing via WolvenKit, it will automagically do that for you if a mesh name ends with _doubled.

The suffix also indicates that Wolvenkit de-duplicated a mesh on export!

Thanks to Na for the screenshot

Troubleshooting

If your mesh won't export from Wolvenkit, try exporting it without materials by unchecking the box.

For a list of troubleshooting steps, check the corresponding wiki page.

Cheat Sheet: Facial Expressions

Photo Mode

Player photo mode uses one of

Index
Expressions
CNAME keys to activate them

For a guide how to replace photo mode expressions, see .

AMM facial expressions

The AMM expressions for both body genders use the following file and keys:

base\animations\facial\male_average\interactive_scene\generic_average_male_facial_idle.anims

Courtesy of Maximilium, Pinkydude and Vitum

Expression references for individual NPC files:

Locations

Interesting locations

If your looking for places to edit, locations that have already had their sectors located can be found on the Wolvenkit wiki

The CET wiki has a list of interesting locations for teleport

The has an entire channel dedicated to finding interesting places. Join up and have a look.

Once you have locations you can edit them following the guides by Kratoes in the section of this wiki, or export them to Blender by following the over on the Wolvenkit wiki.

here
base\animations\ui\photomode\photomode_female_facial.anims
base\animations\ui\photomode\photomode_male_facial.anims

1

Neutral

facial_neutral

2

Charm

facial_charming

3

Fury

facial_furious

4

Boredom

facial_bored

5

Anger

facial_pissed

6

Satisfaction

facial_pleased

7

Disgust

facial_disgusted

8

Happiness

facial_happy

9

Fear

facial_scared

10

Surprise

facial_surprised

11

Sadness

facial_sadness

12

Whistle

facial_whistling

Neutral

idle__neutral__male

Joy

idle__joy__male

Smile

idle__happy__male

Sad

idle__sadness__male

Surprise

idle__surprise__male

Aggressive

idle__aggression__male

Anger

idle__anger__male

Interested

idle__interested__male

Disinterested

idle__disinterested__male

Disappointed

idle__disappointed__male

Disgust

idle__disgust__male

Exertion

idle__exertion__male

Nervous

idle__nervous__male

Fear

idle__fear__male

Terrified

idle__fear_reaction__male

Pain

idle__pain__male

Sleepy

idle__tiredness__male

Unconscious

idle__unconscious__male

Dead

idle__dead__male

here
johnny__facial_idle_poses
rogue_facial_idle_poses
evelyn_facial_idle_poses
generic_average_female_facial_idle_poses
panam_facial_idle_poses
here.
here.
AMM Discord
World Editing
guide
Logo
Logo
local material
material reference
local/external materials
re-using materials
properties
WolvenKit
Blender
WKit Blender AddOn
Logo

Variants and appearances

For the purpose of recoloring or exchanging items

Summary

Created by @manavortex Published November 05 2022

This page is a look-up for recolouring or replacing items. For an overview of existing items, see here.

As for how to find this information when it's not on the page, check this guide.

When adding an entry, please include the following information:

  • Relative path

  • Item spawn code(s)

  • Number of variants

  • Mapping of variant names to item spawn codes

T1 (inner torso) — Shirts

Reinforced Bra (4 variants)

File Path: base\characters\garment\citizen_prostitute\torso\t1_047_tank__pushup\

image
# available variants

4

Undershirt_02_basic_01 Undershirt_02_basic_02 Undershirt_02_rich_01 Undershirt_02_rich_02

name of variant
corresponding meshMeshAppearance

Undershirt_02_basic_01

panther

Undershirt_02_basic_02

violet

Undershirt_02_rich_01

black_pink

Undershirt_02_rich_02

gold

Duo-Layer-Bustier (6 variants)

File Path: base\characters\garment\citizen_prostitute\torso\t1_097_tank__corset_doll\

image

Undershirt_03_basic_01 Undershirt_03_basic_02 Undershirt_03_basic_03 Undershirt_03_basic_04 Undershirt_03_rich_01 Undershirt_03_rich_02

name of variant
corresponding meshMeshAppearance

Undershirt_03_basic_01

blue

Undershirt_03_basic_02

black_red

Undershirt_03_basic_03

yellow_pink

Undershirt_03_basic_04

pink_panther

Undershirt_03_rich_01

white_2

Undershirt_03_rich_02

black_gold

T2 (outer torso) — Jackets

Crystaljock Bomber (6 variants)

File Path: base\characters\garment\player_equipment\torso\t2_084_jacket__short_sleeves

image

Jacket_01_basic_01 Jacket_01_basic_02 Jacket_01_old_01 Jacket_01_old_02 Jacket_01_rich_01 Jacket_01_rich_02

name of variant
corresponding meshMeshAppearance

Jacket_01_basic_01

purple_green

Jacket_01_basic_02

black

Jacket_01_old_02

semurai_blue_panther

Jacket_01_old_01

green

Jacket_01_rich_01

neon_yellow

Jacket_01_rich_02

silver

Reinforced Puffer vest (4 variants)

File Path: base\characters\garment\player_equipment\torso\t2_002_vest__puffy

image

Vest_17_basic_01 Vest_17_basic_02 Vest_17_rich_01 Vest_17_rich_02

name of variant
corresponding meshMeshAppearance

Vest_17_basic_01

bwstripes

Vest_17_basic_02

bbstripes

Vest_17_rich_01

pwstripes

Vest_17_rich_02

gbstripes

Legs — Pants, skirts etc.

Windbreaker Pants (9 variants)

File Path: base\characters\garment\player_equipment\legs\l1_070_pants__loose

image

Pants_12_basic_01 Pants_12_basic_02 Pants_12_basic_03 Pants_12_old_01 Pants_12_old_02 Pants_12_old_03 Pants_12_rich_01 Pants_12_rich_02 Pants_12_rich_03

name of variant
corresponding meshMeshAppearance

Pants_12_basic_01

???

Pants_12_basic_02

spandex_pink_stripes

Pants_12_basic_03

spandex_green_pattern

Pants_12_old_01

corduroy_brown_paint

Pants_12_old_02

???

Pants_12_old_03

spandex_red_skull

Pants_12_rich_01

spandex_orange_stripes

Pants_12_rich_02

cotton_purple_gradient

Pants_12_rich_03

spandex_gold_green


Feet — Shoes

H1 (Head)

H2 (Head) — Face

Vehicle Drive Model Data Record

Vehicle.VehicleDriveModelDataDefault_4w.tweak
groups:
  Vehicle.VehicleDriveModelDataDefault_4w:
    type: VehicleDriveModelData
    members:
      airResistanceFactor:
        type: Float
        value: 0.349999994 
      antiSwaybarDampingScalor:
        type: Float
        value: 1 
      bankBodyFBTanMultiplier:
        type: Float
        value: 0.119999997 
      bankBodyLRTanMultiplier:
        type: Float
        value: 0.119999997 
      bikeCurvesPath:
        type: raRef:CResource
        value: 0 
      bikeMaxTilt:
        type: Float
        value: 0 
      bikeTiltCustomSpeed:
        type: Float
        value: 0 
      bikeTiltPID:
        type: array:Float
        value: [ ]
      bikeTiltReturnSpeed:
        type: Float
        value: 0 
      bikeTiltSpeed:
        type: Float
        value: 0 
      bodyFriction:
        type: Float
        value: 0.600000024 
      brakingFrictionFactor:
        type: Float
        value: 1.39999998 
      burnOutRotationModifier:
        type: Float
        value: 0 
      center_of_mass_offset:
        type: Vector3
        value:
          x: 0
          y: 0
          z: -0.200000003
      chassis_mass:
        type: Float
        value: 1500 
      differentialOvershootFactor:
        type: Float
        value: 0 
      driveHelpers:
        type: array:TweakDBID
        value: [ "Vehicle.VehicleDriveModelDataDefault_4w_inline0", "Vehicle.VehicleDriveModelDataDefault_4w_inline1", "Vehicle.VehicleDriveModelDataDefault_4w_inline2", "Vehicle.VehicleDriveModelDataDefault_4w_inline3" ]
      forwardWeightTransferFactor:
        type: Float
        value: 0.800000012 
      handbrakeBrakingTorque:
        type: Float
        value: 2000 
      lowVelStoppingDeceleration:
        type: Float
        value: 3 
      maxWheelTurnDeg:
        type: Float
        value: 35 
      momentOfInertia:
        type: Vector3
        value:
          x: 0
          y: 0
          z: 0
      momentOfInertiaScale:
        type: Vector3
        value:
          x: 1
          y: 1
          z: 1
      perfectSteeringFactor:
        type: Float
        value: 1 
      rollingResistanceFactor:
        type: Float
        value: 0.00949999969 
      sideWeightTransferFactor:
        type: Float
        value: 0.5 
      slipAngleCurveScale:
        type: Float
        value: 1 
      slipAngleMinSpeedThreshold:
        type: Float
        value: -1 
      slipRatioCurveScale:
        type: Float
        value: 1 
      slipRatioMinSpeedThreshold:
        type: Float
        value: -1 
      slopeTractionReductionBegin:
        type: Float
        value: 12 
      slopeTractionReductionFactor:
        type: Float
        value: 1.5 
      slopeTractionReductionMax:
        type: Float
        value: 30 
      smoothWheelContactDecreaseTime:
        type: Float
        value: 0.0500000007 
      smoothWheelContactIncreseTime:
        type: Float
        value: 0.0500000007 
      tankAcceleration:
        type: Float
        value: 3 
      tankCTOD:
        type: Float
        value: 0 
      tankCTOI:
        type: Float
        value: 0 
      tankCTOP:
        type: Float
        value: 1 
      tankDeceleration:
        type: Float
        value: 1 
      tankGravityMul:
        type: Float
        value: 1 
      tankMaxSpeed:
        type: Float
        value: 20 
      tankSpringDamping:
        type: Float
        value: 5000 
      tankSpringDistance:
        type: Float
        value: 0.600000024 
      tankSpringRadius:
        type: Float
        value: 0.5 
      tankSpringStiffness:
        type: Float
        value: 50000 
      tankSpringVerticalOffset:
        type: Float
        value: 0.800000012 
      tankSpringsLocalPositions:
        type: array:Vector2
        value: [  ]
      tankTurningSpeed:
        type: Float
        value: 100 
      total_mass:
        type: Float
        value: 1300 
      turnUpdateBaseSpeedThreshold:
        type: Float
        value: 10 
      turnUpdateInputDiffForFastChange:
        type: Float
        value: 1 
      turnUpdateInputDiffForSlowChange:
        type: Float
        value: 0 
      turnUpdateInputDiffProgressionPow:
        type: Float
        value: 0.800000012 
      turnUpdateInputFastChangeSpeed:
        type: Float
        value: 1 
      turnUpdateInputSlowChangeSpeed:
        type: Float
        value: 0.100000001 
      turnUpdateMaxSpeedThreshold:
        type: Float
        value: 30 
      turnUpdateMaxSpeedTurnChangeMul:
        type: Float
        value: 1.5 
      turnUpdateMaxSpeedTurnMul:
        type: Float
        value: 0.230000004 
      turningRollFactor:
        type: Float
        value: 0.300000012 
      turningRollFactorWeakContactMul:
        type: Float
        value: 1 
      turningRollFactorWeakContactThresholdMax:
        type: Float
        value: 0.600000024 
      turningRollFactorWeakContactThresholdMin:
        type: Float
        value: 0.899999976 
      useAlternativeTurnUpdate:
        type: Bool
        value: false 
      waterParams:
        type: TweakDBID
        value: "Vehicle.VehicleWaterDefault" 
      wheelSetup:
        type: TweakDBID
        value: "Vehicle.VehicleWheelDrivingSetup_4_AWD" 
      wheelTurnMaxAddPerSecond:
        type: Float
        value: 65 
      wheelTurnMaxSubPerSecond:
        type: Float
        value: 100 
      wheelsFrictionMap:
        type: TweakDBID
        value: "CarDrivingFrictionMap.Default" 

Base Types Map

Referenced from base\appearances_mappings.json, base\vehicles\base_types_map.csv maps vehicle names to their respective .ent files. The names are defined in each vehicle's .app file as baseEntityType.

Name
.ent File

Arch_Nemesis

base\vehicles\sportbike\v_sportbike2_arch_nemesis_basic_01.ent

Archer_Hella

base\vehicles\standard\v_standard2_archer_hella__basic_01.ent

Archer_Quartz

base\vehicles\standard\v_standard2_archer_quartz__basic_01.ent

Archer_Quartz_Nomad

base\vehicles\standard\v_standard2_archer_quartz_nomad__01.ent

Brennan_Apollo

base\vehicles\sportbike\v_sportbike3_brennan_apollo_basic_01.ent

Chevalier_Emperor

base\vehicles\standard\v_standard3_chevalier_emperor_01__basic_01.ent

Chevalier_Thrax

base\vehicles\standard\v_standard2_chevalier_thrax__basic_01.ent

Chevalier_Thrax_Dex

base\vehicles\standard\v_standard2_chevalier_thrax__dex.ent

Herrera_Outlaw

base\vehicles\sport\v_sport1_herrera_outlaw_basic_01.ent

Kaukaz_Bratsk

base\vehicles\utility\v_utility4_kaukaz_bratsk__basic_01.ent

Kaukaz_Bratsk_Extended

base\vehicles\utility\v_utility4_kaukaz_bratsk_extended__basic_01.ent

Kaukaz_Z71_Aras

base\vehicles\special\v_kaukaz_z71_aras__basic_01.ent

Kaukaz_Zeya

base\vehicles\utility\v_utility4_kaukaz_zeya__basic_01.ent

Mahir_Supron

base\vehicles\standard\v_standard25_mahir_supron_01__basic_01.ent

Mahir_MT28_Coach

base\vehicles\special\v_mahir_mt28_coach_basic_01.ent

Makigai_MaiMai

base\vehicles\standard\v_standard2_makigai_maimai_01_basic_01.ent

Militech_Basilisk

base\vehicles\special\v_militech_basilisk_01__basic_01.ent

Militech_Behemoth

base\vehicles\utility\v_utility4_militech_behemoth_basic_01.ent

Militech_Griffin

base\vehicles\special\av_militech_griffin__basic_01.ent

Militech_Manticore

base\vehicles\special\av_militech_manticore_basic_01.ent

Militech_Wyvern

base\vehicles\special\av_militech_wyvern__basic_01.ent

Mizutani_Shion

base\vehicles\sport\v_sport2_mizutani_shion__basic_01.ent

Mizutani_Shion_Nomad

base\vehicles\sport\v_sport2_mizutani_shion_nomad__basic_01.ent

Porsche_911turbo

base\vehicles\sport\v_sport2_porsche_911turbo__basic_01.ent

Quadra_Type66

base\vehicles\sport\v_sport2_quadra_type66__basic_01.ent

Quadra_Type66_Nomad

base\vehicles\sport\v_sport2_quadra_type66_nomad__basic_01.ent

Quadra_Turbo

base\vehicles\sport\v_sport1_quadra_turbo__basic_01.ent

Rayfield_Aerondight

base\vehicles\sport\v_sport1_rayfield_aerondight__basic_01.ent

Rayfield_Calibrun

base\vehicles\sport\v_sport1_rayfield_caliburn__basic_01.ent

Rayfield_Excalibur

base\vehicles\special\av_rayfield_excalibur__basic_01.ent

Thorton_Colby

base\vehicles\standard\v_standard2_thorton_colby__basic_01.ent

Thorton_Colby_Pickup

base\vehicles\standard\v_standard25_thorton_colby_pickup__basic_01.ent

Thorton_Colby_Pickup_Nomad

base\vehicles\standard\v_standard25_thorton_colby_pickup_nomad__basic_01.ent

Thorton_Galena

base\vehicles\standard\v_standard2_thorton_galena_01__basic_01.ent

Thorton_Galena_Nomad

base\vehicles\standard\v_standard2_thorton_galena_nomad__01.ent

Thorton_Mackinaw_Larimore

base\vehicles\standard\v_standard3_thorton_mackinaw_larimore_01.ent

Thorton_Mackinaw

base\vehicles\standard\v_standard3_thorton_mackinaw_01__basic_01.ent

Thorton_Mackinaw_Nomad

base\vehicles\standard\v_standard3_thorton_mackinaw_nomad_01__basic_01.ent

Villefort_Alvarado

base\vehicles\sport\v_sport2_villefort_alvarado__basic_01.ent

Villefort_Columbus

base\vehicles\standard\v_standard25_villefort_columbus_01__basic_01.ent

Villefort_Cortes

base\vehicles\standard\v_standard2_villefort_cortes_01__basic_01.ent

Yaiba_Kusanagi

base\vehicles\sportbike\v_sportbike1_yaiba_kusanagi_basic_01.ent

Zetatech_Atlus

base\vehicles\special\av_zetatech_atlus_basic_01.ent

Zetatech_Bombus

base\vehicles\special\av_zetatech_bombus__basic.ent

Zetatech_Canopy

base\vehicles\special\av_zetatech_canopy__basic_01.ent

Zetatech_Octant

base\vehicles\special\av_zetatech_octant.ent

Zetatech_Surveyor

base\vehicles\special\av_zetatech_surveyor_basic_01.ent

Zetatech_Valgus

base\vehicles\special\av_zetatech_valgus_basic_01.ent

Decoration

base\vehicles\common\templates\vehicle_decoration_base.ent

Disposal_Alvarado

base\vehicles\decoration\entities\v_disposal_alvarado_base.ent

Disposal_Galena

base\vehicles\decoration\entities\v_disposal_galena_base.ent

Vehicles

Vroom Vroom

The list below has the main entity files for the vehicles in the game, should be a good starting off point for whatever your wanting to do to them.

Vechicle
Ent File

Archer Bandit

v_standard2_archer_bandit_01.ent

Archer Hella (police version)

v_standard2_archer_hella__basic_01.ent v_standard2_archer_hella__police_01.ent

Archer Quartz (Nomad version)

v_standard2_archer_quartz__basic_01.ent v_standard2_archer_quartz_nomad__01.ent

Chevalier Thrax

v_standard2_chevalier_thrax__basic_01.ent

Makigai Maimai

v_standard2_makigai_maimai_01_basic_01.ent

Thorton Colby Station wagon

v_standard2_thorton_colby__basic_01.ent

Thorton Colby Pickup (Nomad version)

v_standard25_thorton_colby_pickup__basic_01.ent v_standard25_thorton_colby_pickup_nomad__basic_01.ent

Thornton Galena (Nomad version)

v_standard2_thorton_galena_01__basic_01.ent v_standard2_thorton_galena_nomad__01.ent

Villefort Cortes (police version) (Delamain cab)

v_standard2_villefort_cortes_01__basic_01.ent v_standard2_villefort_cortes_01__police_01.ent v_standard2_villefort_cortes_02__delamain_01.ent

Chevalier Emperor

v_standard3_chevalier_emperor_01__basic_01.ent

Thornton Mackinaw Pickup (w rear shell) (Nomad version)

v_standard3_thorton_mackinaw_01__basic_01.ent v_standard3_thorton_mackinaw_larimore_01.ent v_standard3_thorton_mackinaw_nomad_01__basic_01.ent

Mahir Supron

v_standard25_mahir_supron_01__basic_01.ent

Villefort Columbus

v_standard25_villefort_columbus_01__basic_01.ent

Kaukaz z71 Aras

v_kaukaz_z71_aras__basic_01.ent

Mahir mt28 coach

v_mahir_mt28_coach_basic_01.ent

Miltech Basilisk

v_militech_basilisk_01__basic_01.ent

Herrera Outlaw

v_sport1_herrera_outlaw_basic_01.ent

Quadra Turbo

v_sport1_quadra_turbo__basic_01.ent

Rayfield Aerondight

v_sport1_rayfield_aerondight__basic_01.ent

Rayfield Caliburn

v_sport1_rayfield_caliburn__basic_01.ent

Mizutani Shion (Nomad version)

v_sport2_mizutani_shion__basic_01.ent v_sport2_mizutani_shion_nomad__basic_01.ent

Jonnys Porsche 911

v_sport2_porsche_911turbo__basic_01.ent

Quadra Type 66 (Nomad version)

v_sport2_quadra_type66__basic_01.ent v_sport2_quadra_type66_nomad__basic_01.ent

Villefort Alvarado

v_sport2_villefort_alvarado__basic_01.ent

Villefort Alvarado Cabrio

v_sport2_villefort_alvarado__cabrio_01.ent

Kuanagi Sportsbike

v_sportbike1_yaiba_kusanagi_basic_01.ent

Arch Nemesis Sportsbike

v_sportbike2_arch_nemesis_basic_01.ent

Brennan Apollo Sportsbike

v_sportbike3_brennan_apollo_basic_01.ent

Kaukaz Bratsk

v_utility4_kaukaz_bratsk_extended__basic_01.ent v_utility4_kaukaz_bratsk__basic_01.ent v_utility4_kaukaz_bratsk__basic_concrete_truck_01.ent v_utility4_kaukaz_bratsk__basic_container_truck_01.ent v_utility4_kaukaz_bratsk__basic_dump_truck_01.ent v_utility4_kaukaz_bratsk__basic_machine_truck_01.ent v_utility4_kaukaz_bratsk__basic_metalstud_truck_01.ent

Kaukaz Zeya

v_utility4_kaukaz_zeya__barrels_01.ent v_utility4_kaukaz_zeya__basic_01.ent v_utility4_kaukaz_zeya__container_01.ent v_utility4_kaukaz_zeya__freight_01.ent v_utility4_kaukaz_zeya__full_01.ent

Militech Behemoth

v_utility4_militech_behemoth_basic_01.ent v_utility4_militech_behemoth_basic_flatbed.ent

Mackinaw Monster truck

v_utility4_thorton_mackinaw_bmf_01.ent

Militech Griffin AV

av_militech_griffin__basic_01.ent

Militech Manticore AV

av_militech_manticore_basic_01.ent

Militech Wyvern AV

av_militech_wyvern__basic_01.ent

Train

av_public_train.ent av_public_train_b.ent

Rayfield Excalibur AV

av_rayfield_excalibur__basic_01.ent

Zetatech Atlus AV

av_zetatech_atlus_basic_01.ent av_zetatech_atlus_basic_02.ent

Zetatech Bombus AV

av_zetatech_bombus__basic.ent

Zetatech Canopy AV

av_zetatech_canopy__basic_01.ent

Zetatech Octant AV

av_zetatech_octant.ent av_zetatech_octant__basic_01.ent

Zetatech Surveyor AV

av_zetatech_surveyor_basic_01.ent

Zetatech Valgus AV

av_zetatech_valgus_basic_01.ent

Logo
Logo

Troubleshooting your mesh edits

When you can't import, or your imported mesh looks weird

Importing

Tangents

You get an error message like this:

Message: One or more Geometry in provided GLTF doesn't contain Tangents data. Tangents must be included within glTF files.

  1. Check if your mesh is triangulated. If you aren't sure whether or not it is, go into edit mode, select everything, and go to Face -> Triangulate (Shortcut: Ctrl+T)

  2. If that doesn't change anything, make sure that you have the correct box checked upon export:

  3. If that's not the issue either, check that each of your submeshes has an UV map: If not, you have to create one (and probably UV unwrap your mesh).

Bone: neutral_bone not present in export Rig(s)/Import Mesh

The neutral bone is created by the glb export plugin when there are vertex groups without a parent bone. WolvenKit will not let you import if there is a mismatch.

Your armature in Blender needs to have a bone for every vertex group in the submesh, and there must not be vertices with no vertex group assigned.

You then need to import over an already-existing .mesh file which supports all those bones.

The following two scripts help you finding and/or fixing the problem. Switch to the Blender Scripting perspective and create a new, blank text file. Then, toggle the Blender system console to see their output (Blender: Window -> Toggle System Console)

Missing bones

To find which bones you're missing, you can use this script, which will print their names to console.

Vertices without weights

You can use this Python script to either select or auto-delete vertices with no weight.

Option 1: Fuck those bones

You can import the mesh with Noesis, which will not do any of these checks. For that, you need to import/export via .fbx.

Since noesis expects differently-named submeshes under the root armature, you'll want to export the mesh via noesis, join your changed meshes on those under Noesis_Root, and import it again. Caution: You'll have to rotate your armature in this case.

While this will get your mesh into the game, the missing bones mean that parts of it won't move the way you expect it!

Option 2: The Netrunner suit

The armature from the following mesh has a lot of bones and will often resolve most of your issues:

t0_005_pwa_body__t_bug.mesh
t0_005_pma_body__t_bug.mesh

Try using the Netrunner body as a base for import. To have more than one submesh, you can simply duplicate the existing one and adjust the naming, e.g. submesh_01_LOD_1, submesh_02_LOD_1

Option 3: Transferring bones

It's time to play 3d puzzle and assemble bones from multiple sources. Unfortunately, there is no simple solution for this yet. You need to

  • find the bones that your armature is missing in other meshes

  • transfer them into your import target mesh

  • export all the extra meshes into Blender

  • merge their rigs, which you should do with the linked Python script

  • and finally reimport everything back into Cyberpunk.

Everything else

WolvenKit will not import a mesh that has any kind of issues. Those include, but are not limited to:

  • non-flat faces

  • zero faces/edges

  • loose vertices/edges

There is no guarantee that any of the steps below will actually solve your problem.

Edit Mode

In Edit Mode, you can find a few commands in the Mesh -> Clean Up menu:

  • Delete Loose

  • Split Non-Planar Faces

  • Split Concave Faces

  • Merge By Distance

If you select your whole mesh, Merge By Distance will merge the individual parts, obliterating the seams. To avoid that, make sure to do them one after another: - Select a vertex/edge/face in Edit Mode - hold down Ctrl Num+ to select everything connected - use Merge By Distance before proceeding to the next part of your mesh

It's still broken

Your last option is the 3d print tool to (hopefully) find out what is wrong with your mesh.

Fortunately, the tool is free, easy-to-use and already included in your Blender.

If you don't have a 3d print entry in the tools of your 3d viewport, you might need to enable the plugin in Blender's settings first.

Use the 3d print tool in edit mode to directly fix your issues
  • Zero Edges: Those are bad, fix them (click on them, then press X and just delete them)

  • Non-Flat Faces: Those are even worse, as they can make the game crash. You need to split them up until they are flat, or investigate the surrounding edges/vertices to see what's going wrong here.

  • Zero Faces: Only fix if you have <100 of them — the tool doesn't always identify them correctly (the mesh analyzed above was h0_000_pwa_c__basehead, which is absolutely fine).

In-Game

My mesh won't show up

In Blender

  • make sure that you have exactly one UV map

  • check Face Orientation — most materials won't show backfaces (red). You can import submeshes with the suffix _doubled to make WolvenKit generate them for you, like it does with hair.

In Wolvenkit

When saving your mesh, check the console for errors. In version >= 8.9.0, a basic material validation is taking place. If you don't see any warnings, make sure that the resource paths in your mesh are correct and that you aren't loading invisible textures.

My mesh won't move at all

Some meshes require an entAnimatedComponent along with the garment's component. Check here for details.

Changes from Blender are missing in-game

For example, you have moved something, but the change doesn't show in the game: this most often happens when you change things around in edit mode, since they are stored as object properties rather than applied immediately.

  1. Select the object in edit mode

  2. Press Ctrl+A

  3. Select "All Transforms" to apply all transformations.

My mesh is moving weirdly

E.g. you've changed a shape, but now everything moves at an offset.

As stated in the importing/exporting guide, it is easy to fuck up the mesh's properties, and this is most likely what happened. The easiest way to "fix" this is to apply your shape deformation to the original object.

Replacing the vertices

  1. Import the original object into Blender, without any of your changes. If you have to, reexport the working file from Wolvenkit.

  2. In Object Mode, select all meshes under the reimported armature (the original ones).

  3. Switch to Edit Mode and select all vertices (Ctrl+A)

  4. Delete them (x, vertices, Return)

  5. Go back to Object mode

  6. For each of your edited objects:

    1. select the submesh that you edited (submesh_00_LOD_1)

    2. select the empty submesh from the reimported armature (submesh_00_LOD_1.001)

    3. Join the objects (Ctrl+J). This will fuse your edited mesh into the empty one, retaining all of the original's properties.

  7. You can now delete the empty armature and export the other one for re-import.

After joining the submeshes

My mesh is completely warped

If you have added the item via ArchiveXL or swapped out an in-game item with something that belongs in a different slot (e.g. a jacket on the head slot), you might have to fix the corresponding entity file.

My mesh is string cheese/exploding vertices/a puddle on the floor

GarmentSupports

To check if it's this, equip only the edited item. If it breaks as soon as you put on another clothing item with garment supports, then the solution below applies.

Delete GarmentSupport from the mesh:

Releases · Neurolinked/MlsetupBuilderGitHub
Credits to EzioMavericks for the video
Logo

NPCs

Heroes, villians, as long as their interesting (and we've located them) their here

Most of them are pretty easy to guess/find but theres the odd curveball.

Character
Entity File
Appearance File (appearanceName)

Self-made normal maps

How to create normal maps (bumpmaps) with Blender

Other guides about this:

by Тима (Teem)#3118

Summary

Created by @manavortex Published January 06 2023

If you don't have Photoshop, Photopea offers almost the same thing online for free.

For a free tool for faster normal baking, check out .

Step 0: Preparing the viewport

  1. from WolvenKit

  2. Import it into Blender

  3. Select the object

  4. Pick a material:

  5. Switch to the "Shading" perspective and add an "Image Texture". Select your image by clicking the corresponding button:

  6. The viewport should already be set to "Solid". Click on the dropdown arrow next to the options and select "Texture" from the list.

Step 1: The Displacement Map

As the first step, we create a for our 3d object. This black and white image will turn your mesh into an object with actual (simulated) depth, which we will then "bake" into a normal map.

This tutorial won't cover the process of how to draw such a map in-depth, but there will be a few tips how to do that in Blender.

The displacement image should be saved in 32 bit image depth rather than the usual 8. This will yield better results with the normal maps.

Texture Paint Mode

The Texture Paint perspective lets you draw directly on your mesh's surface:

UV edit mode

To see how the mesh is projected on your image, you can check out the UV edit mode.

Switch to "Edit" (shortcut: Tab) and select all vertices (shortcut: ctrl+A). You will now see them projected on the texture:

Feel free to change the UV mapping. You can this back into Cyberpunk!

Step 2: High Poly and Low Poly meshes

Once you are done with your displacement map and the UV mapping looks like you want it to, it's time for the next step: projecting!

Take your displacement map and create a slightly blurry version of it. This will prevent artifacts on the normal map, as the algorithm doesn't like perfectly straight edges.

I create a duplicate of my entire armature, just to make certain that I don't accidentally overwrite anything I want to keep. Only work on the new object, since we're getting destructive here.

  1. Make sure that your viewport is in Object Mode

  2. Select all objects that you want to go on the same normal map, then join them together (shortcut: Ctrl+J).

  3. Create a duplicate of this mesh (Ctrl+D, ESC to stop moving), then rename that to "Low Poly".

  4. Select the mesh you duplicated and rename it to "High Poly".

  5. Open the "Modifiers" tab and assign the following modifiers after the armature modifier (check screenshot in Step 6)

    1. Generate -> Subdivision Surface Levels Viewport: 2 or so Render: As many as Blender lets you get away with without crashing, I used 7 Advanced: UV Smooth: Keep Corners, Junctions Boundary Smoothing: Keep Corners

    2. Deform -> Displace Coordinates: UV UV Map: UVMap Direction: Normal Strength: -0.002 (you can play around with this) Midlevel: 0.000

  6. For the "Displace" Modifier, create a new picture, then click on the two sliders to show this texture in the textures tab

  7. Load your blurred texture:

If you hide your "Low Poly" mesh, the modifiers should now let you see creases on your high poly object! Exciting!!

The normal map will only care for relative depth, so keep the creases on your mesh shallow. If you make them too sharp, this can lead to artifacts on the baked normal map.

Step 3: Prepare the material

Switch to the "Shading" perspective again. Add another image texture and create an image with your target resolution. Call it "Bake" or whatever.

Remove the link to your material's normal input - otherwise, it'll bake your normal map into your normal map, and the results won't be pretty.

Step 4: Prepare the low poly mesh

The high poly mesh needs to be completely covered by the low poly one, like plastic wrap. If that isn't yet the case, you can inflate your low poly mesh:

  1. Set the viewport to Object Mode

  2. Select the Low Poly mesh

  3. Switch into Edit Mode (tab)

  4. Select all vertices (ctrl+A)

  5. Fatten (Alt+S, adjust amount of fattening via mouse)

  6. Fix up whatever parts didn't fatten correctly by hand.

If your mesh inflates asymmetrically

  1. Undo your action and select all vertices again.

  2. Put the 3d cursor in the center of the selected vertices: Right-Click -> Snap Vertices -> Cursor To Selected

  3. Set the Pivot Point to 3D cursor (Shortcut: . (dot), Numpad 6)

  4. Fatten again!

Step 5: Baking

In Blender, the "active" object is the "previously selected" one. Select your meshes in the following order:

  1. Low Poly

  2. 2. High Poly

Find the "Render Properties" tab.

  1. At the very top, set "Device" to "GPU Compute" (unless you'd rather bake on your CPU)

  2. Scroll down all the way to "Bake". Configure it like this:

    1. Bake Type: Normal

    2. Influence / Space: Tangent

    3. Selected to Active: Checked

    4. Extrusion: 0.04 m If your generated normal map shows artifacts, try tweaking this.

    5. Max Ray Distance: 0.04 m If your generated normal map shows artifacts, try tweaking this.

    6. Output / Target: Image Textures

    7. Clear Image: Checked

    8. Margin / Size: 16px (or whatever suits you)

  3. Save. Your. File.

Baking takes time (several minutes) and most of your PC's free resources. This is normal.

If everything went well, the image editor on the bottom left will change and display your normal map.

You can export the image via the hamburger menu in the image editor (bottom left panel of the screenshot).

Troubleshooting

This troubleshooting section is for the baking process — the one for normal map textures is

My normal map has yellow stripes!

Make sure to from your material.

My normal map has yellow spots!

First of all, make sure that all your normals are pointing the right way. In the viewport editor, click the "Show Overlays" button and select "Geometry -> Face Orientation" near the bottomn. Blue means outside, red means inside.

The baking process works by capturing the rays of light that bounce between the high poly mesh and the low poly mesh. If you have artifacts, then some of those rays bounced off something else first, which makes them register as inverted. That's the reason why steep creases are a problem — a ray of light might get caught in there and be flipped around.

Check the .

My normal map has artifacts!

  • Make sure your displacement map (the one used by the modifier) is blurred.

  • Try lowering the strength of the Displace modifier on the High Poly mesh, making the creases more shallow.

  • Try changing Extrusion and Max Ray Distance in the Bake settings.

  • If that doesn't help, you could try a , or otherwise hit Google.

Blender complains about my meshes

Restart and make sure that you haven't deleted or altered any vertices, other than scaling/inflating the low poly mesh.

Multilayered

The substance style super shader

About

A significant portion of assets for Cyberpunk 2077 leverage the complex multilayered.mt supershader. The supershader has several different component files which are used to create masks to blend procedural textures without baking them. You can read more about this technique in by CDPR Technical Art Director Krzysztof Krzyścin.

While the multilayered supershader is very common, there are hundreds of other non Substance-style shaders, some with traditional baked PBR textures.

For a list of shader properties in multilayered.mt, see .

Composition

The multilayered shader is composed of three distinct parts:

  1. Layer Masks | Mask textures that control where each surface is visible

  2. Layer Definitions | Controls procedural effects such as tiling or color for each layer

  3. Layer Surfaces | Links PBR textures to create numerous pre-defined visual surfaces

For editing mlsetup files, you'll want to use the ()

What is the mlmask?

MLMASK files are the core element of the substance-style integration. These files contain an array of up to 20 textures which are used to control the blending between pre-defined surfaces called mltemplates. These mask textures are more-or-less 1:1 with substance-style layer masks.

As shown above, each mesh using the multilayer shader uses a unique mlmask file that is hand authored by CDPR artists. To take effect in game, each mask file is linked by the mlsetup file.

What is the mlsetup?

MLSETUP files are fairly self-explanatory when considering the name, multilayer setup. These files correspond with an mlmask file and are responsible for setting up parameters for each layer from the mlmask. Each layer within an mlsetup contains information very similar to materials or shaders.

MLSETUP Definition

Property
Description

What is the mltemplate?

MLTEMPLATE files are the actual visible surfaces that appear on meshes using the multilayered.mt supershader. The multilayer templates include a wide variety of surfaces such as steel, iron, aluminum, plastic, nylon, linoleum, carpet, soil, grass, rubber, concreate, and everything else imaginable. Each template can use a unique color, normal, roughness, and metallic PBR texture. The mltemplate files are selected from within each layer definition of an mlsetup file. Meshes can blend up to 20 mltemplate surfaces into a single material by masking them with the mlmask.

Technical Details

Multilayered Shaders

multilayered

Texture Channels
Red
Green
Blue
Alpha
Name
Description

Jonny Silverhand

silverhand.ent

silverhand.app

Judy

judy.ent

judy.app

Panam

panam.ent

panam.app

Evelyn

evelyn.ent

evelyn.app

Misty

misty.ent

misty.app

Meredith

stout.ent

meredith_stout.app

Dex

dex.ent

dex.app

Jackie

jackie_welles.ent

jackie_welles.app

Smasher

adam_smasher.ent

boss_adam_smasher_mm.app

River

river_ward.ent

river_ward.app

Kerry

kerry_eurodyne.ent

kerry_eurodyne.app

Cheri Nolwin

q105_yakuza_manager.ent

service_sexworker_wa.app

T-Bug

t_bug.ent

t_bug.app

8ug8ear

8ug8ear.ent

8ug8ear.app

Alt Cunningham

alt.ent

alt.app

Claire

claire.ent

clair.app

Goro Takemura

goro_takemura.ent

goro_takemura.app

Rita Wheeler

lizzies_bouncer.ent

gang_mox_wa.app (_beyond_bouncer_01)

Placide

placide.ent

placide.app

Saul

saul.ent

saul.app

Mitch

mitch.ent

mitch.app

Wakako Okada

wakako_okada.ent

wakako_okada.app

Rogue

rogue.ent

rogue.app

US Cracks

sq017_red_menace.ent

sq017_purple_force.ent

sq017_blue_moon.ent

us_cracks_band.app

Lizzy Wizzy

lizzy_wizzy.ent

celebrity_chrome.app

Yorinobo

yorinobu_arasaka.ent

yorinobu_arasaka.app

Hanako

hanako.ent

hanako.app

Saburo

saburo_arasaka.ent

saburo_arasaka.app

Mr Hands

mr_hands.ent

service__fixer_ma.app

Vik

ripper_doc.ent

victor_vektor.app

Dakota Smith

dakota_smith.ent

dakota_smith.app

Dino

dino.ent

dino.app

Muamar Reyes

capitan_reyes.ent

capitan_reyes.app

Regina Jones

reggie.ent

service__fixer_wa.app

Padre

padre.ent

sebastian_perez.app

Ripperdocs

service__ripperdoc_ma.ent service__ripperdoc_mb.ent service__ripperdoc_wa.ent

service__ripperdoc_ma.app service__ripperdoc_mb.app service__ripperdoc_wa.app

Trauma Team

corpo__traumateam_ma.ent

corpo__traumateam_ma.app

Maxtac

corpo__max_tac_ma.ent max_tac_mb.app max_tac_wa.app

max_tac.app max_tac_mb.app max_tac_wa.app

Rachel Casich

sq023_rachel.ent

service__specialist_wa.app ( _sq023__bd_producer )

Mama Welles

mama_welles.ent

gang__valentinos_wa.app ( _sq018__mama_welles )

colorScale

Sets a color from within the mltemplate file

material

Path to mltemplate file

matTile

Tiling multiplier for the main surface texture

mbTile

Tiling multiplier for the microblend texture

metalLevelsIn

?

metalLevelsOut

Clamps metalness output levels

microblend

Procedural detail texture

microblendContrast

Controls influence of microblend texture

microblendNormalStrength

Multiplier for adjusting normalblend strength

microblendOffsetU

Shifts UV map for microblend texture

microblendOffsetV

Shifts UV map for microblend texture

normalStrength

Sets intensity of mltemplate normal map

offsetU

Moves UV in X direction

offsetV

Moves UV in Y direction

opacity

Sets layer opacity

overrides

?

roughLevelsIn

?

roughLevelsOut

Clamps roughness output levels

engine\materials\multilayered.mt

base\materials\multilayered_clear_coat.mt | Adds clearcoat effect

base\materials\vehicle_destr_blendshape.mt | Adds procedural vehicle damage

base\materials\cloth_mov_multilayered.mt

base\materials\multilayered_terrain.mt

base\materials\ver_mov_multilayered.mt

GlobalNormal

Normal R

Normal G

?

?

MaskAtlas

?

?

?

?

MultilayerMask

See mlmask

MultilayerSetup

See mlsetup

GlobalNormalIntensity

Sets visual intensity of normal map texture

GlobalNormalUVScale

?

GlobalNormalUVBias

?

MaskAtlas

?

MaskTiles

?

Layers

?

LayersStartIndex

?

SurfaceTexAspectRatio

Sets number of mlmask layers to be used

MaskToTileScale

?

MaskTileSize

?

MaskAtlasDims

?

MaskBaseResolution

?

SetupLayerMask

?

NormalsTextureDDXYMultiplier

?

MicroblendsTextureDDXYMultiplier

?

this documentation
here
.mlmask files
.mlsetup files
.mltemplate files
MlSetupBuilder
download
Demonstration of how mlmask files are used to mask meshes. Each mask represents a separate surface.
File structure of mlsetup viewed with WolvenKit
File structure of mltemplate viewed with WolvenKit
A sample preview of some materials created by mltemplate files
An example how colour and roughness affect the material in-game

References, lists and overviews

A list of look-ups

Final result

Version

Blender>= 3.3

Assumed skill level

  • You know what a normal map is

  • You're able to draw stick figures

  • You are not afraid of Blender

  • You know how to read.

Google Doc
xnormal
Export your mesh
Displacement Map
export
here.
remove the normal mapping
troubleshooting step for artifacts
cage
Step 4
You will now get the selected texture directly as an overlay.
image source: Wikipedia
You will probably want to fix this up in Photoshop (Photopea).
Set it to "3D Cursor"
Things are looking like this now? Great, then click "Bake"!
A normal map with no artifacts or distortions: this is the kind of result we want.

Mesh sculpting techniques

Best Practices for actually changing meshes

Summary

Created by @manavortex | Edited by Na Published January 29 2023

This guide will give you a number of techniques when it comes to editing meshes in Blender (displayed version: 3.4.1)

Assumed skill level: - You have exported a mesh and imported it into Blender - You are able to read and comprehend instructions.

You can find video guides for refitting linked on the community guides page

Prerequisite: Deleting shapekeys

Before you start editing your mesh, you should delete its shapekeys. This is necessary for the Sculpt Mode to show your changes in real time, and you don't need them anymore after editing your mesh.

Order matters, because deleting a shapekey will apply it. Start at the bottom!

Some people have been told to delete the Armature modifier before sculpting. That's not necessary!

Sculpting

The obvious approach is to change your mesh by moving vertices. However, this will take a very long time and probably be frustrating. A faster way is to use Blender's Sculpt Mode.

The downside of the sculpt mode is that it can edit only the selected mesh. For a workaround, see here.

The Sculpt Mode is pretty much What You See Is What You Get.

The easiest tools for beginners are Grab, Elastic Deform, and Smooth

In the "Tool" panel (Toggle shortcut: N), you can optionally enable symmetry (blue on the picture below).

Elastic Deform and x-symmetry are your friends!

A useful shortcut to keep in mind is F, which will let you change the cursor size.

You can import a body mesh as a reference.

You will find the player's body under base\characters\common\player_base_bodies\player_female_average\ base\characters\common\player_base_bodies\player_male_average\

Affecting only parts of the mesh

Method 1

You can hide those parts that you don't want to sculpt.

Use the Edit Mode (Shortcut: Tab) to make a selection. Then, leave only those parts visible that you want to affect before switching back to Sculpt Mode.

Useful hotkeys:

  • H: Hide selection

  • Shift+H: Hide everything but selected

  • Alt+H: Unhide everything

Method 2

You can also use the Lattice Deform Method below to selectively edit only part of the mesh.

Method 3

You can use Blender's mask brush and function in Sculpt Mode to mask the parts that you do not want to sculpt.

Affecting Several Meshes

Material Separation Method

This method is a workaround that you can use when you have only 2-3 meshes. You can fuse all meshes together, then split them apart after you're done.

Pros:

  • Relatively simple, and good to make small, simple changes to 2-3 meshes.

  • Allows symmetrical sculpting.

Cons:

  • Destructive editing

  • Can be a little time-consuming because you have to join, separate, and rename meshes every time you want to import it back to WolvenKit.

Let's assume that we're sculpting Rogue's pants. For surface material assignment, the seams are an own submesh — the pants (submesh_00) are coloured via multilayered material, while the seams have a variation of metal_base with coloured stitches.

We don't want to edit those separately, so we'll fuse them into one mesh, sculpt everything in one go, and then split them apart again.

To allow splitting, we need to make sure that every submesh has its own unique material. Select the mesh, switch to the "Material Properties tab on the right", and duplicate the assigned material:

You can rename the material to e.g. "seams", but it's not necessary.

Before the next step, make sure to remember the submesh numbers, because you need to restore them later. Changes in the submesh order will mess up material assignment in WolvenKit.

You can create a copy by duplicating the meshes (shortcut: Shift+D)

Now, join the meshes together — hold CTRL, select the main mesh, and join the meshes together (shortcut: Ctrl+J)

You now have a single mesh which you can sculpt to your heart's content.

Once you're done, you can separate the meshes again. Switch to Edit Mode, then select something that belongs to the former submesh. From the menu, pick the following entry: Select -> Select Similar (Hotkey: Shift+G) -> Material

Split your submesh by material

Then, split off the selection into its own submesh again: Right-Click -> Separate (Hotkey: P) -> Selection

Make sure to restore the original mesh names before exporting your mesh from Blender.

After importing back into WolvenKit, remember to delete the GarmentSupport parameters from your mesh, as they will now produce string cheese.

Lattice Modifier Method

The Lattice modifier deforms the base object according to the shape of a Lattice object.

Pros:

  • Can edit as many meshes at once as you want, no matter what armature they are parented to.

  • 100% Non-destructive sculpting.

  • No need to separate, rejoin, and rename meshes after sculpting is done.

  • Good for making small, local changes to multiple meshes.

  • Edits can be stacked on top of each other by stacking modifiers.

  • Does not have to go through all the steps like Material Separation Method each time you want to import to WolvenKit.

Cons:

  • Trying to select desired vertices of the lattice can be difficult.

  • Can be hard to restrict edits to areas not covered by the lattice, thus possibly making unwanted edits.

  • Does not allow symmetrical sculpting.

Begins by adding a Lattice to the scene. In Object mode, go to the menu Add > Lattice. Reshape the lattice so that it covers the part of the base meshes that you want to edit or all the meshes that you want to edit.

Go to the Object Data Properties panel, and increase the resolution as you wish. for most edits, 6-10 levels are fine.

A lattice I made to do some edits to the hand only.

Now select your base mesh(es). Add the Lattice modifier to the mesh then choose your Lattice in the Object option.

To apply this modifier to all base meshes, while still selecting this mesh, hold Ctrl then select all the meshes that you want to edit, or hold Shift then drag to select all the meshes that you want to edit. Click the drop-down menu arrow in the modifier, then click Copy to Selected.

Go to edit mode, select vertices and start moving them around to edit your base mesh(es).

When you are done, you do not have to apply this modifier. As long as your export settings are correct, and you remember to delete all Shape keys, the changes will be applied automatically upon export. That's why this method will make all the changes non-destructive and you can revert to vanilla by toggling the modifier.

You can stack modifiers to make desired changes to your mesh(es).

Mesh Deform Modifier Method

The Mesh Deform modifier allows an arbitrary mesh (of any closed shape) to act as a deformation cage around another mesh. This method resolves many problems of the previous methods.

Pros:

  • Can edit as many meshes at once as you want, no matter what armature they are parented to.

  • 100% Non-destructive sculpting.

  • No need to separate, rejoin, and rename meshes after sculpting is done.

  • Easier control than editing vertices of a lattice.

  • Allow symmetrical sculpting.

  • Edits can be stacked on top of each other by stacking modifiers.

Cons:

  • If you have a lot of meshes and the vertex count is relatively high, the waiting time to bind can be just a little long.

In this example, I will work with the head mesh (1 submesh) and the body mesh (10 submeshes).

In Object Mode, duplicate everything by right-clicking on the collections and hit Duplicate Collection .

Still in Object Mode, select all the newly duplicated meshes and join them together by using hotkey Ctrl + J or navigate to the menu > Object > Join .

Now you should have an unified, joined mesh along side the vanilla meshes.

This mesh will be our cage mesh, we will use it as a proxy to make edits to the main meshes. Now we have to prepare it so that it works well as a cage.

Add a Remesh modifier to this mesh, use Voxel setting. Decrease the Voxel Size until the human shape is fairly recognizable but the mesh is not too high poly. Also, enable the Smooth Shading option. Below is my setting for this model.

Now, apply the modifier by hovering the mouse above it and using the hotkey Ctrl + A, or click on the drop-down menu arrow and hit Apply.

Now we need to "bloat" the cage mesh so that it covers the whole base meshes. We will make use of the Shrink/Fatten function. You should toggle visible the base meshes along with this cage so it's easier to see. Switch to Edit Mode, and select all vertices by using the hotkey Ctrl + A. Hold Alt + S, then drag Left Mouse button to fatten the whole mesh. For finer control, also hold Shift while dragging it. Make sure that it completely engulfs the base meshes.

Your bloated meshes should look something like this, it should completely cover the base meshes.

Switch back to Object Mode, select all the base meshes instead. Add a Mesh Deform modifier, then select the cage mesh in the Object option. Then select the drop-down menu arrow, click Copy to Selected to apply the same modifier to all base meshes. Then go to each meshes and click the button Bind to bind them to the cage. Depending on the complexity and vertices count, it can take anywhere from 1 to 30 seconds to finish binding.

You have finished binding all meshes to the base meshes. Now, all the editing you made to the cage mesh in Sculpting and Editing Mode will be reflected on the base meshes.

To see the edits easier, select the cage mesh, then go to Object properties. Scroll down to the Viewport Display setting menu, in the Display As option, chose Wire. This will render the cage as wire and you can see the vanilla meshes below as you edit.

Hint: to make symmetrical changes, enable the symmetrical editing in Sculpt Mode. If your cage doesn't cover the whole base meshes, you can add a Mirror Modifier to the cage mesh. It will be reflected on your base meshes as well.

After finishing sculpting, you don't have to apply the modifier to the base meshes. As long as your export settings are correct, and you remember to delete all Shape keys, the changes will be applied automatically upon export. That's why this method will make all the changes non-destructive and you can revert to vanilla by toggling the modifier.

You can cleverly combine these methods to make changes to your mesh as you desire.

Troubleshooting

If your problem isn't listed here, check Troubleshooting your mesh edits.

Sculpt changes don't show before I enter and leave Sculpt Mode

You need to delete the shapekeys.

A playlist by the original author
Logo

Dangle bones

What are Dangle Bones, and how do they work?

Summary

Created by @eagul Published March 20 2023

This guide will teach you everything you need to know about dangle bones, focussing mostly on hair meshes. However, dangle bones can also be applied to any other mesh

Assumed skill level: - You are familiar with Wolvenkit and Blender. - You know what bones and weights are. - You are able to read and comprehend instructions.

What are dangle bones?

Dangle bones are a 'chain' of linked bones which are used by the game engine to simulate physics (dangle). They're found mostly in hairs, but also in certain clothing items. For a mesh to have working dangle physics, corresponding .rig and .animgraph files are also needed The image below depicts how a dangle skeleton looks. The .animgraph will move the dangle bone chains, which are connected to the mesh using weights, which will then in turn animate the mesh.

Transfering a skeleton and weights

The easiest way to add physics to a mesh that does not have them, is to transfer them from another mesh. If you are doing a hair port, prepare the (static) .mesh and textures first. 1) Locate a 'donor' mesh. It should have a similar mesh, and physics that you could also see working on your 'new' mesh. 2) Add both the donor mesh, together with it's .rig and .animgraph pair, and your new mesh to the project in wolvenkit. 3) Import both meshes to blender. 4) Using alt+P, clear the parent of the new mesh. Now select the new mesh, and then the armature of the donor mesh, and press ctrl+P, followed by Armature Deform with Empty Groups. 5) Select the donor mesh, and secondly the new mesh. Swap to weight paint mode. In the top-left cornet, press 'weights' and then 'transfer weights'. In the bottom-left corner, a small black window will appear. Click it. Set Vertex Mapping to nearest face interpolated, and source layers to 'by name' 6) Go into weight paint mode and manually clean up the weights, using the weight transfer as a reference. Optionally duplicate the mesh and move the copy to the side, so you keep an untouched reference. 7) Import it back into wolvenkit, and you're done!

Some tips for editing hair meshes

1) Oftentimes, you can get away with editing a hair mesh, and not having to touch the physics at all, especially if the changes you are making are fairly small. 2) If you move the mesh away from the bones, it might move in unexpected ways. The further the mesh is from the bone, the more of a 'lever' effect will happen. This is particularly noticable when bones are rotating around an axis perpendicular to the one you moved the mesh away on. Usually small movements are fine and will not affect the dangles in a noticably bad way. If you do find yourself in a situation where you need to move the skeleton as well, check the 'Moving a Dangle Chain' section. 3) Check out UUH4V. It's an amazing resource that will allow you to load multiple hair meshes with each their own rig/anim pair simultanously. Keep in mind that you cannot have 2 of the same rig/anim pair loaded in the same hair slot simultanously, as this will cause unacceptable deforms. You need to merge any 2 meshes that use the same rig/anim pair in blender and import them as one .mesh.

Leverage effect

Included is an image of what i mean by the leverage effect. I used a handy little trick here to make bones visible in-game. Overlay a simple mesh over each of the bones in blender and weight paint it completely red. Load the boxes instead of a hair mesh. Edit the material used by the mesh to make it better visible. I used plastic_red here. Congratulations, you can now clearly see what bones are doing in-game. Hiding the body mesh helps with visibility. Green circle includes the true location of the dangle bone chain. Meshes in the yellow circle are rigged to the same bones as those in the green circle. Bone 3 is invisible. Upon moving bone 3 to the right (by editing the .rig), bone/mesh 1 rotated slightly, making mesh 2 do a huge leap. If you were to load a hair mesh in the same location as indicated by the yellow circle, you would end up with horrible stretching and deformations, even without exxagerating the effect by moving bone 3.

Modern_bob mesh with it's dangle skeleton
Sorry for my terrible drawing skills and cursed image.
Logo
vMM9RVQ.png
pwW4wul.png
S89HHto.png
glEvzEl.png
6DKCf9m.png

Core Mods explained

A list of modding frameworks and links to their documentation

You're probably used to the term Core Mod from other games. However, the technical term for these kinds of mod is aframework, which is what they're usually referred to by Cyberpunk modders.

If you are trying to troubleshoot your core mods, you can run the log file utility.

TL;DR: What do I download?

For an explanation of what the individual frameworks do, see below. Entries in italics are optional.

Redscript

Red4ext – ArchiveXL – TweakXL – EquipmentEx – Codeware

Cyber Engine Tweaks

What is a framework?

While the game natively supports mods, this would have had us limited to replacing already existing items, but we wanted flying cars. So a bunch of brilliant people drilled deep into the code of Cyberpunk 2077 and created a bunch of tools that let us do more.

The most prominent example of a framework mod is the Skyrim Script Extender — fortunately, Cyberpunk 2077 is rather more stable.

Since this kind of mod interacts with the game's code on such a fundamental level, they are prone to breaking whenever CDPR changes their API. This is the reason why game updates break mods — we recommend to turn off auto-update and manually upgrading once the frameworks you need have been brought up-to-date.

Existing Frameworks

The first-level frameworks (CET, Redscript and Red4ext) allow access to the game's functions and types, which are known through reverse engineering. The second-level frameworks (e.g. ArchiveXL, TweakXL, Codeware, SystemEx) make use of these to offer further methods of interaction. For details, see below.

Redscript

Redscript (Nexus | GitHub) is an open-source programming language and toolkit, natively working with Cyberpunk 2077's scripting runtime. Essentially, it is extending the already-existing Redmod scripting system by including data from the decompiled game script blob final.redscripts.

It allows additions and edits of the game's high-level logic and functions, including additions through Red4ext. The scripts are compiled into r6/cache/modded and are preloaded together with the rest of the game's cache.

Some examples for existing mod include, but are not limited to

  • changing combat balance

  • editing NPC behaviour

  • altering the interface

  • adding or removing UI widgets

Cyber Engine Tweaks (CET)

Cyber Engine Tweaks (Nexus | GitHub) is a first-level framework with a LUA wrapper, which will let you access anything exposed via RTTI by RedScript and Red4ext. On top of that, it lets you bind hotkeys for custom functions and interact with the game's Tweak database at runtime.

Additions made to the tweak database via CET are not persistent; you will need TweakXL for that.

Lots of mods and scripts run on top of CET, tweaking the game in various ways from changing the weather to adding a wardrobe system before CDPR added a wardrobe system.

The perhaps most prominent example is Appearance Menu Mod (wiki | Nexus), which turns Cyberpunk 2077 into The Sims: Capitalist Dystopia.

RED4ext

RED4ext (Nexus | GitHub) is Cyberpunk 2077's equivalent to Skyrim Script Extender. Aside from being required for many mods, it is a perquisite for other core dependencies such as ArchiveXL, TweakXL, and Equipment-EX.

With Red4ext >= 1.13, you no longer need cybercmd. Make sure to uninstall it!

Rather than being added to the game's cache for preloading, Red4ext reads and modifies the game's memory at runtime. This happens via RTTI, which is the game engine's original system for scripting and serialization.

Technical detes

Red4ext and its plugins are written in C++. The framework itself has two components:

The shared library exposes types, functions and classes via RTTI to make them available in-game. This contains reverse-engineered information from redscript.finals as well as code defined by its plugins.

The plugin loader will activate .dll files from red4ext/plugins (such as ArchiveXL, TweakXL...). They can be considered standalone programs that are activated through Red4ext and unlock other areas of Cyberpunk's code. This contains essentials like

  • game version checking

  • logging

  • hooking

As a modder, you can only use types and functions that are already registered via RTTI.

ArchiveXL

ArchiveXL (Nexus | GitHub) allows us to load custom resources into Cyberpunk 2077. Working under the hood, it is the essential tool to add rather than replace.

For ArchiveXL-specific documentation, check the corresponding sub-page.

TweakXL

TweakXL (Nexus | GitHub) is an extension of RED4ext to modify the TweakDB by writing script extensions in both YAML and RED format. By loading files from r6/tweaks, it can alter predefined records in Cyberpunk's database, changing properties such as weapon damage or the number of hitpoints.

By interacting with REDEngine 4's database, it lets you view and alter information about game entities and behaviour in real time (accessible via Cyber Engine Tweak's Tweak Browser tab).

Equipment-EX

Equipment-EX (Nexus | GitHub) makes use of every single one of the frameworks mentioned above to overhaul CDPR's wardrobe system. Extending it from 6 slots to more than 30, it lets you save an unlimited number of outfits and supports modded items.

Codeware

Codeware (Nexus | GitHub) is not strictly speaking a framework but a library, exposing Red4ext's extra functionality to redscript (keyword @native). By defining utility functions and -classes, the mod enforces best practices, reducing the likelihood of crashes.

For example, while you could always see an NPC's appearances in Wolvenkit, it was not possible to access that information at runtime.

Log files for the frameworks

Logs: Cyber Engine Tweaks

Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks\cyber_engine_tweaks.log

This will tell you what mods and scripts CET is loading, and if there have been any errors in the process.

If all goes well, it will look like this:

[2023-04-21 23:23:30 UTC+01:00] [info] [Options] [3004] Cyber Engine Tweaks is starting...
[2023-04-21 23:23:30 UTC+01:00] [info] [Options] [3004] CET version v1.24.1 [HEAD]
[2023-04-21 23:23:30 UTC+01:00] [info] [Options] [3004] Game version 1.6202
[2023-04-21 23:23:30 UTC+01:00] [info] [Options] [3004] Root path: "C:\Games\Cyberpunk 2077\bin\x64"
[2023-04-21 23:23:30 UTC+01:00] [info] [Options] [3004] Cyber Engine Tweaks path: "C:\Games\Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks"
[2023-04-21 23:23:30 UTC+01:00] [info] [Options] [3004] Lua scripts search path: "C:\Games\Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks\mods"
[2023-04-21 23:23:30 UTC+01:00] [info] [StateTickOverride] [3004] Main thread function CBaseInitializationState::OnTick hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [StateTickOverride] [3004] Main thread function CInitializationState::OnTick hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [StateTickOverride] [3004] Main thread function CRunningState::OnTick hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [StateTickOverride] [3004] Main thread function CShutdownState::OnTick hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [HookGame] [3004] CRenderNode_Present_InternalPresent function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [HookGame] [3004] CRenderGlobal_Resize function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [HookGame] [3004] CRenderGlobal_Shutdown function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] RealRunScriptFunction function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] RealCreateFunction function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] CScript::Log function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] CScript::LogChannel function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] CScript::TDBIDConstructorDerive function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] CScript::ToStringDEBUG function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] CScript::TranslateBytecode function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] CScript::TweakDBLoad function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] PlayerSystem::OnPlayerSpawned function hook complete!
[2023-04-21 23:23:30 UTC+01:00] [info] [Hook] [3004] Hook mouse clip function!
[2023-04-21 23:23:30 UTC+01:00] [info] [OptionsInitHook] [3004] Hidden options hook: success
[2023-04-21 23:23:31 UTC+01:00] [info] [InitializeTweakDBMetadata] [15668] CDPRTweakDBMetadata::Initalize() - Primary TweakDB initialization successful!

Logs: Redscript

Cyberpunk 2077\r6\logs\redscript_rCURRENT.log

It will tell you which .reds files it has been loading, and if any of them failed.

Please note the warning in the log:

  • If the mod is working, ignore it

  • If the mod isn't working, this tells you what to check. You can't have mods installed twice!

If all goes well, it will look like this:

[INFO - Sat, 22 Apr 2023 10:08:08 +0100] Using defaults for the script manifest (manifest not present)
[INFO - Sat, 22 Apr 2023 10:08:08 +0100] Compiling files: C:\Games\Cyberpunk 2077\r6\scripts\a-bunch-of-stores-atelier-store.reds, C:\Games\Cyberpunk 2077\r6\scripts\virtual-atelier\vendor-preview\GarmentItemPreview.reds
[WARN - Sat, 22 Apr 2023 10:08:08 +0100] At C:\Games\Cyberpunk 2077\r6\scripts\appearanceChangeUnlocker\mirrorUnlocker.reds:38:1:
@addField(inkScrollArea)
^^^
field with this name is already defined in the class, this will have no effect

(a bunch of these warnings)

[INFO - Sat, 22 Apr 2023 10:08:08 +0100] Compilation complete
[INFO - Sat, 22 Apr 2023 10:08:08 +0100] Output successfully saved in C:\Games\Cyberpunk 2077\r6\cache

Logs: RED4ext

Cyberpunk 2077\red4ext\logs\red4ext.log

It will tell you which of the framework DLLs it has been loading.

If all goes well, it will look like this (version numbers are fake):

[2023-04-22 10:08:05.698] [RED4ext] [info] RED4ext (v4.7.11) is initializing...
[2023-04-22 10:08:05.698] [RED4ext] [info] Game patch: 4.511 Hotfix 999
[2023-04-22 10:08:05.698] [RED4ext] [info] Product version: 4.511
[2023-04-22 10:08:05.698] [RED4ext] [info] File version: 4.7.11.13361
[2023-04-22 10:08:05.717] [RED4ext] [info] RED4ext has been successfully initialized
[2023-04-22 10:08:05.816] [RED4ext] [info] RED4ext is starting up...
[2023-04-22 10:08:05.816] [RED4ext] [info] Loading plugins...
[2023-04-22 10:08:05.816] [RED4ext] [info] Loading plugin from 'C:\Games\Cyberpunk 2077\red4ext\plugins\ArchiveXL\ArchiveXL.dll'...
[2023-04-22 10:08:05.874] [RED4ext] [info] ArchiveXL (version: 4.7.11, author(s): psiberx) has been loaded
[2023-04-22 10:08:05.874] [RED4ext] [info] Loading plugin from 'C:\Games\Cyberpunk 2077\red4ext\plugins\Codeware\Codeware.dll'...
[2023-04-22 10:08:06.180] [RED4ext] [info] Codeware (version: 5.7.11, author(s): psiberx) has been loaded
[2023-04-22 10:08:06.180] [RED4ext] [info] Loading plugin from 'C:\Games\Cyberpunk 2077\red4ext\plugins\RedHotTools\RedHotTools.dll'...
[2023-04-22 10:08:06.262] [RED4ext] [info] RedHotTools (version: 1.6.11, author(s): psiberx) has been loaded
[2023-04-22 10:08:06.263] [RED4ext] [info] Loading plugin from 'C:\Games\Cyberpunk 2077\red4ext\plugins\TweakXL\TweakXL.dll'...
[2023-04-22 10:08:06.291] [RED4ext] [info] TweakXL (version: 4.8.12, author(s): psiberx) has been loaded
[2023-04-22 10:08:06.291] [RED4ext] [info] 4 plugin(s) loaded
[2023-04-22 10:08:06.291] [RED4ext] [info] RED4ext has been started
[2023-04-22 10:09:13.572] [RED4ext] [info] RED4ext is shutting down...
[2023-04-22 10:09:14.297] [RED4ext] [info] ArchiveXL has been unloaded
[2023-04-22 10:09:14.322] [RED4ext] [info] TweakXL has been unloaded
[2023-04-22 10:09:14.353] [RED4ext] [info] RedHotTools has been unloaded
[2023-04-22 10:09:14.468] [RED4ext] [info] Codeware has been unloaded
[2023-04-22 10:09:14.469] [RED4ext] [info] 4 plugin(s) unloaded
[2023-04-22 10:09:14.488] [RED4ext] [info] RED4ext has been shut down

Logs: ArchiveXL

Cyberpunk 2077\red4ext\plugins\ArchiveXL\ArchiveXL.log

Tells you which .xl files have been found and processed and what it has been adding into the game files upon startup.

If it loads correctly, you will see something like this:

Note that the example contains a bunch of warnings. That indicates problems with the modded files (which I ignore, since they are working),

[2023-04-22 10:08:06.654] [info] Scanning for archive extensions...
[2023-04-22 10:08:06.654] [info] Reading "something.xl"...
[2023-04-22 10:08:06.667] [info] Configuration completed.

[2023-04-22 10:08:11.443] [info] |Localization| Initializing voiceover index...
[2023-04-22 10:08:11.444] [info] |Localization| No voiceover maps to merge.

[2023-04-22 10:08:11.469] [info] |Localization| Initializing translations for "en-us" language...
[2023-04-22 10:08:11.469] [info] |Localization| Processing "something.xl"...
[2023-04-22 10:08:11.469] [info] |Localization| Merging entries from "your\mod\name\translations.json"...
[2023-04-22 10:08:11.474] [warning] |Localization| Some translations merged with issues.

[2023-04-22 10:08:11.512] [info] |Localization| Initializing subtitles for "en-us" language...
[2023-04-22 10:08:11.512] [info] |Localization| No subtitles to merge.

[2023-04-22 10:08:17.489] [info] |Journal| Journal tree is initializing...
[2023-04-22 10:08:17.489] [info] |Journal| No entries to merge.

[2023-04-22 10:08:18.381] [info] |FactoryIndex| Initializing factory index...
[2023-04-22 10:08:18.382] [info] |FactoryIndex| Processing "something.xl"...
[2023-04-22 10:08:18.382] [info] |FactoryIndex| Adding factory "your\mod\name\factory.csv"...
[2023-04-22 10:08:29.926] [info] |FactoryIndex| All factories added to the index.

[2023-04-22 10:08:29.863] [info] |Streaming| World streaming is initializing...
[2023-04-22 10:08:29.863] [info] |Streaming| Processing "your_streaming_sector.xl"...
[2023-04-22 10:08:29.863] [warning] |Streaming| Streaming blocks merged with issues.

[2023-04-22 10:08:35.585] [info] |Localization| Initializing lipsync maps for "en-us" language...
[2023-04-22 10:08:35.585] [info] |Localization| No lipsync maps to merge.

Logs: TweakXL

Cyberpunk 2077\red4ext\plugins\TweamXL\TweakXL.log

Tells you which tweaks have been read and processed, pointing out errors and warnings in the process. If your custom item additions don't work, you might find a hint here.

If it loads correctly, you will see something like this:

[2023-04-22 10:08:16.150] [info] Scanning for tweaks...
[2023-04-22 10:08:16.150] [info] Reading "something.yaml"...
[2023-04-22 10:08:16.416] [error] Items.a_wip_mod.your_item.icon.atlasPartName: Invalid value, expected CName.
[2023-04-22 10:08:16.416] [warning] Items.a_wip_mod_appearance: Cannot clone Items.a_wip_mod_appearance, the record doesn't exists.
[2023-04-22 10:08:16.416] [info] Importing tweaks...
[2023-04-22 10:08:17.064] [info] Import completed.
[2023-04-22 10:08:17.066] [info] Executing scriptable tweaks...
[2023-04-22 10:08:17.066] [info] Executing "EquipmentEx.PatchOriginaltems"...
[2023-04-22 10:08:17.307] [info] Executing "EquipmentEx.PatchCustomItems"...
[2023-04-22 10:08:17.422] [info] Executing "EquipmentEx.RegisterOutfitSlots"...
[2023-04-22 10:08:17.450] [info] Executing "EquipmentEx.RegisterAppearanceSuffixes"...
[2023-04-22 10:08:17.451] [info] Execution completed.
[2023-04-22 10:08:17.451] [warning] Items.aModdedItem.aTweak refers to a non-existent record or flat.

The whole world: .streamingsector

Documentation on .streamingsector files

If you want to know how to find a streaming sector, see here.

For a list of interesting locations, see .

For a guide how to modify streaming sector files, see here.

StreamingSectors are the files that define the world in Cyberpunk, they tell the engine what goes where, and define everything from the meshes you see and how you can interact with them, to the locations of lights, sounds and fx. They call up the NPCs, they define the minimap.

The fundamental bits of the structure are 2 main lists, the nodes, and the nodeData. The nodes define the assets that make up the sector, and the nodeData tells the engine where to put them. Theres a nodeRef list as well, which seem to be the link that quests use to tie in to triggers etc via the .scene files. Theres also some bits that define variants, that seem to be how sectors change after missions, not worked those out yet.

Theory

Streaming Sectors contain the world's data, holding a node tree that includes all its models and entities.

Other than the world environment, streaming sector files can also define

  • navigation

  • sound

  • collision

  • illumination

as there are several types.

LOD data and grid sizes

The world is broken up into a grid, with several sizes of squares available (bit like graph paper with major and minor grid lines). The size of the grid in use is dependent on the Level of Detail (LOD) of the sector file your looking at, which is the last digit of the filename.

Chunk sizes are as below.

LOD
Interior
Exterior

0

32

64

1

64

128

2

128

256?

For every location, there can be multiple overlapping levels of LOD sectors with progressively more detail as you go down the levels.

For instance, Lizzies bar is located at approximately -1200, 1562, 22:

Via AMM: this targets the bouncer rather than the bar, but they're right next to each other, so it's fine.

Filenames are structured as sectortype_X_Y_Z.streamingsector . If you preview a sector in wkit, the axes are shown as Z=-Y and Y=Z.

Calculating the files

I've left the detail of the process below for record, but if you just want a list of sectors I've created a python script to find the ones that a set of co-ordinates are in. You can find it HERE. Simply enter the co-ordinates in the player_loc dict in block 3 then run all blocks. You'll be given 2 lists containing of all the interior and exterior sectors which contain the co-ords within their bounding boxes. The list also shows the distance from the centre of the sectors to the co-ords given.

From those co-ordinates we can calculate the sector files for interior/exterior sectors by dividing by the grid size for the LOD and rounding. (ie 1200/32=38 etc)

LOD
Interior
Exterior

0

-38_49_0

-19_24_0

1

-19_24_0

-9_12_0

2

-9_12_0

-5_6_0

At the level 0 files the whole building isn't covered by 1 sector, so you end up needing 4, conversely the exterior level 2 is several city blocks.

For example, the loft apartment uses these files:

interior_-24_-16_1_1.streamingsector: inner walls, floors, collision

interior_-48_-31_2_0.streamingsector: interior decoration, clutter

Note that the numbers are simply duplicated and rounded down. No, I don't know how you round down 2*16 to 31 either.

Some locations are partially defined in quest sectors, where parts of the location are locked away behind story triggers (for example half of V's apartment, as a lot of decoration will only be shown after completing quests). The exact process isn't fully understood as of May 2023.

Node Types

List below is the node types I've found so far while building the blender sector import script.

MinimapDataNode

worldAISpotNode

worldAcousticSectorNode

worldAmbientAreaNode

worldBendedMeshNode

worldBuildingProxyMeshNode

Proxy mesh for building at further distance. Textures are normally embedded so cant export automatically currently.

worldCableMeshNode

worldCollisionNode

partial support, defines 3 types of collision, box, capsule and mesh. Can import the first 2.

worldCompiledCommunityAreaNode_Streamable

worldCompiledSmartObjectsNode

worldDestructibleEntityProxyMeshNode

worldDeviceNode

worldEffectNode

worldEntityNode

Defines an object defined by an ent file (door, vending machine, fan etc)

worldEntityProxyMeshNode

worldFoliageNode

worldGINode

worldGIShapeNode

worldGISpaceNode

worldGenericProxyMeshNode

Proxy mesh for objects at distance.

worldGuardAreaNode

worldInstancedDestructibleMeshNode

as worldInstancedMeshNode but breakable

worldInstancedMeshNode

Instanced copies of a static mesh uses a worldTransformBuffer in the nodeData to define the number of copies and positions of all the copies

worldInstancedOccluderNode

worldInterestingConversationsAreaNode

worldInteriorAreaNode

worldLightChannelShapeNode

worldLightChannelVolumeNode

worldPerformanceAreaNode

worldPhysicalDestructionNode

worldPopulationSpawnerNode

worldReflectionProbeNode

worldRoadProxyMeshNode

Road Mesh.

worldRotatingMeshNode

worldStaticDecalNode

Static Decal, nodeData has x,y,z not sure how engine decides what to project to

worldStaticFogVolumeNode

worldStaticMeshNode

Static mesh, nodeData has position data

worldStaticOccluderMeshNode

worldStaticParticleNode

worldStaticSoundEmitterNode

worldTerrainCollisionNode

worldTerrainMeshNode

The ground, textures are embedded so cant export automatically currently.

worldTrafficCompiledNode

worldTriggerAreaNode

worldSmartObjectNode

worldStaticLightNode

worldInteriorMapNode

worldAdvertisementNode

worldMeshNode

Configuring materials

Checking material properties

You can see a material's default properties by opening the .(re)mt file in WolvenKit and inspecting the parameters array. Any properties that you don't overwrite by adding them to your CMaterialInstance or .mi file will take the default properties specified in the file.

Roughness/Metalness

A roughness/metalness preview. Yes, it's not a sphere.

Multilayered Material

For a full documentation, check the corresponding page.

To set it up, use these keys for the "values" array of your material:

GlobalNormal

path\to\normal.xbm

MultilayerMask

path\to\mask.mlmask ()

MultilayerSetup

path\to\material.mlsetup

an example multilayered material

Textured Material

The most commonly used material for anything textured is engine\materials\metal_base.remt. Despite its name, this material isn't necessarily metallic.

You can also use this material as emissive, for a documentation, see below.

The material can be transparent, you need to set the enableMask flag to True and make sure its not set to False anywhere higher in the material chain. Note this is not in the values, its just below the baseMaterial definition. When set the material will use the alpha channel of the BaseColor.

To make your mesh load a texture, use the following CKeyValuePairs in your material's "values" array:

BaseColor

path to your texture.xbm (Diffuse/Albedo)

Roughness

path to your roughnessMap.xbm (if you have one)

Metalness

path to your metalnessMap.xbm (if you have one)

Normal

path to your normalMap.xbm ()

example use of metal_base.remt as a textured material

The .xbm is a container around the texture. Export the xbm to png via WolvenKit.

If your texture has any brightness issues in-game, toggle around the isGamma flag during import.

The expected isGamma settings are:

normals: false diffuse/albedo: true anything that is used in .inkatlas files: true

Further properties

LayerTile

Material scaling (zoom on surface) > 1 zooms in, >1 zooms out

Plastic

The most commonly used material for anything textured is engine\materials\metal_base.remt. Despite its name, this material isn't necessarily metallic.

To turn the material into plastic, use the following CKeyValuePairs in your material's "values" array:

BaseColor

base\materials\placeholder\white.xbm

Normal

optional: path to your normal map

Roughness

optional: path to your roughness map

RoughnessBias

0.200000003

BaseColorScale

Colour as x/y/z values (color picker blend file )

You can find a ready-to-download template here.

Emissive Material

You can make engine\materials\metal_base.remt glow by adding the correct parameters, or you can poke through the game files and search for emissive > .mi to find Cyberpunk material templates to learn from.

For a list of such templates, check here.

Emissive

path to emissive texture, e.g. engine\textures\editor\white.xbm The texture works like an alpha mask.

EmissiveEV

float, e.g. 2.0: emissive brightness. Brightness varies depending on your colour. Unless you want to actively blind people, you might want to stay below 4.

EmissiveColor

Glow colour as RGB (copy from e.g. mi_neokitsch_fridge_z_emissive.mi)

Find a ready-to-use glowing .mi file here.

Glass

Cyberpunk's glass material, such as base\materials\glass_onesided.mt

All glass materials can consider the vertex color attribute, which you can edit directly in Blender.

Opacity

float, 0.0 - 1.0: Controls glass transparency.

GlassTint

A texture to tint your glass. (TBD: Does it work as a mask?)

TintColor

Glass tint as RGB (copy from e.g. mi_neokitsch_fridge_z_emissive.mi).

IOR

as float, 1.0-2.0: The refraction properties of your material.

Refraction Depth

float 0.0-10.0: Control refraction amount here.

FresnelBias

float, 0.0 - 2.0: How much does the glass behave like a lens (that is, warp the picture behind it)?

BlurRadius

float, 0.0 - 1.0: Blur amount when looking through the glass

VertexColorTint

float, 0.0 - 1.0: Transparency of vertex colour tint

Find a ready-to-use bottle glass .mi here.

Non-warping glass

For a glass material without view distortion and warping, use base\vehicles\common\materials\glass_windshield_tinted_black.mi

Opacity/OpacityBackFace

float, 0.0 - 5.0: Controls glass transparency. OpacityBackFace will only affect inside-facing normals.

FrontFacesReflectionPower / BackFacesReflectionPower

float, 0.0-10.0: How strongly should the glass reflect?

TintColor/TintSurface

Surface and refraction color as RGB (copy from e.g. mi_neokitsch_fridge_z_emissive.mi).

Find a ready-to use glass .mi file here

Half-transparent glass

base\environment\decoration\electronics\devices\device_neokitsch\textures\device_neokitsch_glass_black.mi

Device screen glass

base\fx\shaders\parallaxscreen.mt

ParalaxTexture

Texture that your screen should display, e.g. base\materials\placeholder\black.xbm

LayersSeparation

1

ScanlinesIntensity

0

ScanlinesDensity

0

Emissive

0

Roughness

0.200000003

Metalness

0

Find a ready-to-use example of a turned-off screen here.

Liquid

Cyberpunk has its own liquid shader(s) such as base\materials\fillable_fluid_vertex.mt. Projecting this material onto a submesh will turn the submesh into a transparent container filled with the liquid you specified. If you flip the container on its head, the fluid will drain to the bottom and fill it up again.

To control the offsets, you need to adjust the vectors FluidBoundingBoxMax and FluidBoundingBoxMin.

It shares various properties (such as IOR, FresnelBias, BlurRadius) with the glass shader.

TintColor

liquid's color as RGB (copy from e.g. mi_neokitsch_fridge_z_emissive.mi).

FillAmount

float, e.g.0.0: Probably works in combination with the bounding box. You'll have to experiment.

FluidBoundingBoxMin FluidBoundingBoxMax

Vectors (X, Y, Z, W) controlling the maximum distance from the container's walls. Each value is a float (decimal) speficying the axis in question - you'll simply have to play around with them (you can ignore W). For a bottle material I've used Max: 0.03, 0.03, 0.155 Min: -0.03, -0.03, 0.09

Find a ready-to use (black) liquid .mi file here.

Logo
white file
if you have one
here
Index of refraction
GitHub - psiberx/cp2077-archive-xl: Cyberpunk 2077 mod that allows you to expand game resources without conflicts.GitHub
GitHub - psiberx/cp2077-tweak-xl: Cyberpunk 2077 mod that allows you to modify TweakDB.GitHub
Redscript
RED4ext Plugin Dev
Cyber Engine Tweaks

Finding and reading log files

This page will tell you how to find the right log file for your problem.

A list of framework logfiles

This section has a list of log files by framework. If you've arrived here from one of the troubleshooting channels on Discord, the file you're supposed to find is most likely in this list.

If you aren't looking for a particular log file, please proceed to the next section.

The paths below are given relative to your .

Name of framework
Path to log file

redscript

r6\logs\redscript_rCURRENT.log

red4ext

red4ext\logs\red4ext.log

ArchiveXL

red4ext\plugins\ArchiveXL\ArchiveXL.log

TweakXL

red4ext\plugins\TweakXL\TweakXL.log

Cyber Engine Tweaks

bin\x64\plugins\cyber_engine_tweaks\cyber_engine_tweaks.log

Finding the log files

If you don't want to download and run script files from the internet, you can go here and complete the steps by hand. Otherwise:

  1. Download this script (right-click -> save as) Link goes to Presto's github repository

  2. Now, do either of the following things:

    1. Move it to your and double-click it

    2. Drag-and drop your on the file that you downloaded

  3. The script will have created a folder _LOGS in your , where you will find a file with everything it has found..

Alternatively: By hand

Browse to your and use the windows search to search for *.log.

Make sure to include the asterisk and the dot: *.log, as you will otherwise see files that you don't care about.

Make sure to run this , unless you have already narrowed down the problem (e.g. if it's a CET mod, you can run this search in bin\x64\plugins\cyber_engine_tweaks).

The list of results should look like this:

This will give you a long list of log files

You can sort this list by file size, name, or date modified by clicking on the corresponding header.

With a few exceptions, log files have the name of their mod. If they don't, check what folder they're in.

There's too many of them!

If you're drowning in log files and have no idea how to filter them, you can delete or remove them. Don't worry, they will be re-created on next launch.

Don't delete anything that isn't Type: Text Document ending in .log! Doing that will break other mods or even your entire install.

Now, restart your game and do whatever you did to make the error appear. Then, search the Cyberpunk directory for *.log again.

Finding the relevant log file

You can ignore files that

  • have a date modified older than your last game launch: they won't have any information about your problem

  • have a size of 0: they're empty, the mod in question never initialized.

  1. Sort the files by size (if you just deleted them) or by date modified (if you didn't)

  2. Open each of the files in a text editor (such as Notepad, it's installed with Windows). The relevant information will be at the very bottom.

  3. You are looking for lines with error or warning. If you want to see what they look like, scroll down to the next section.

    1. If the log file doesn't have any, ignore it. Close it and proceed to the next file.

    2. You found errors: Congratulations, you've found at least silver. Check here for how to proceed.

    3. You found warnings: These might indicate that you're on to something, but don't let them panic you. If the mod is doing what it should, just ignore them. You can start troubleshooting already, or keep looking for errors.

Making sense of them

Error

There's definitely something going on here, you're on the right track!

Errors look like this:

[2023-04-15 12:04:18.956] [error] |Something| Some Explanation
[2023-04-14 20:28:18 UTC+01:00] [1234] [ErrorSource]  DoSomething(): Error ! Some Explanation: Some Details

An error in the log files almost always means that something exploded in a way that nobody has planned for.

  • If the file is directly in bin\x64\plugins\cyber_engine_tweaks, that means CET is broken and you need to troubleshoot it.

  • If the file is in a subfolder of bin\x64\plugins\cyber_engine_tweaks, you have found a broken mod, but CET mods won't break the game. In this case, treat it like a warning.

  • If the log is anywhere else, you have found something to troubleshoot.

Warning

If the mod with the warnings is working, you can ignore them. If the game is crashing or if you can't find any errors, you can try the bisect method or troubleshoot it and hope that you're lucky.

If your warning isn't listed below, use your own best judgement.

Field with this name is already defined

[WARN - Thu, 13 Apr 2023 21:54:13 +0200] At Path\to\Cyberpunk 2077\r6\scripts\something.reds:1234:1:
@addField(inkScrollArea)
^^^
field with this name is already defined in the class, this will have no effect

This might indicate that a Redscript mod is loaded twice. Search the Cyberpunk root folder the mod name and make sure that you have no duplicates. If you're uncertain about this, try the bisect method on your r6 folder.

Hair

Overview of hair related things

Summary

Created by @manavortex Published November 04 2022 Updated February 3 2023

If you want to change an NPC's hair instead, you can check or guide.

To look up hairstyles in more detail, you can use .

Name of meshes by index

These names correspond to the mesh files.

  • To find a hair's .app file, search the correct mesh in Wolvenkit, then right-click on it and select "find files using this".

  • To find a hair's root entity, repeat the same process with its .app file

List has been confirmed working before 1.6, but might need updating (especially since new hair was added)

Colour in files by index

Colour in CC
Name in Files

Hair .ent files

Hairs and all their components are assigned and defined via . You can find them here:

The last number in the file name matches the first number in the :

e.g., if you wanted to edit the entity file for female V's hair 28 hh_083_wa__ponytail_01, you could search for

01

hh_033_wa__player

hh_145_ma__v_short

02

hh_059_wa__voodoo_02

hh_053_ma__kerry_eurodyne

03

hh_034_wa__militech_agent

hh_035_ma__mohawk_tall

04

hh_089_ma__thompson

hh_028_wa__corpo_bun

05

hh_090_wa__alt

hh_075_ma__peralez

06

hh_078_wa__evelyn

hh_036_ma__high_tight

07

hh_035_ma__mohawk_tall

hh_059_wa__voodoo_02

08

hh_036_ma__high_tight

hh_030_ma__punk_idol

09

hh_082_ma__afro_bun

hh_062_ma__slick_back

10

hh_079_wa__denny

hh_085_ma__takemura

11

hh_091_wa__dakota

hh_037_ma__gungho

12

hh_063_wa_messy_bob

hh_039_wa__punk_shaved

13

hh_042_wa__topknots

hh_051_wa__judy

14

hh_999_ma__buzz_cap

hh_999_ma__buzz_cap

15

hh_008_ma__demo

hh_025_ma__pompadour

16

hh_011_wa__demo

hh_008_ma__demo

17

hh_029_wa__misty

hh_011_wa__demo

18

hh_040_wa__pixie_bob

hh_026_ma__rattail

19

hh_041_wa__valentino

Hh_027_ma__scavenger

20

hh_044_wa__classic

hh_031_mb__morgan_blackhand

21

hh_045_ma__short_spiked

hh_032_ma__ripper_doc

22

hh_051_wa__judy

hh_040_wa__pixie_bob

23

hh_060_wa__voodoo_03

hh_047_wa__swirl_pomp

24

hh_064_wa__bob_fringe

hh_048_ma__dual_braids

25

hh_068_wba__animals_03

hh_058_wa__voodoo_01

26

hh_081_wa__buns_02

hh_060_wa__voodoo_03

27

hh_083_wa__ponytail_01

hh_061_ma__midlength_wavy

28

hh_083_wa__ponytail_01

hh_065_wa__afro_knots

29

hh_077_wa__nomad_02

hh_068_wba__animals_03

30

hh_088_wa__corpo_bob

hh_073_ma__nomad_01

31

hh_118_wa__gillean

hh_082_ma__afro_bun

32

hh_115_wa__alanah

hh_089_ma__thompson

33

hh_121_wa__t_bug

hh_103_ma__maelstrom_spikes

34

hh_151_wa__judy_variation02

hh_120_ma__arasaka_bun

35

hh_006_ma__demo

hh_007_ma__demo

36

hh_083_wa__ponytail_01

hh_112_ma__kicinski

37

hh_093_mba__sumo

hh_113_ma__iwinski

38

hh_085_ma__takemura

hh_045_ma__short_spiked

39

hh_054_wa__rogue_young

hh_094_ma__saul

40

hh_049_ma__thiago

hh_049_ma__thiago

41

hh_039_wa__punk_shaved

hh_122_ma__roy

42

hh_103_ma__maelstrom_spikes

hh_093_mba__sumo

43

hh_106_wa__ponytails

hh_006_ma__demo

44

hh_140_ma__short_afro

hh_140_ma__short_afro

45

hh_141_ma__afro

hh_141_ma__afro

46

hh_142_wa__afrohawk

hh_142_wa__afrohawk

47

hh_143_ma__flat_top

hh_143_ma__flat_top

48

hh_144_wa__afro_braid_bun

hh_144_wa__afro_braid_bun

49

hh_146_ma__dread_undercut

hh_146_ma__dread_undercut

50

hh_999_ma__buzz_cap

hh_999_ma__buzz_cap

1

05_brown_liquorice

2

01_blonde_platinum

3

02_red_merlot

4

03_ginger_copper

5

04_teal_ombre

6

06_black_carbon

7

07_blonde_golden

8

08_blonde_dishwater

9

09_blue_sapphire

10

10_brown_ombre

11

11_red_apple

12

12_gray_gunmetal

13

13_ginger_strawberry

14

14_teal_ash

15

15_pink_magenta

16

16_pink_rose

17

17_blue_steel

18

18_blue_red_ombre

19

19_cold_white

20

20_cyberpunk_yellow

21

21_goblin_green

22

22_liliac

23

23_mermaid_aquamarine

24

24_purple_ombre

25

25_black_salt_n_pepper

26

26_green_toxic

27

27_brown_medium

28

28_blue_sky

29

29_citrus_yellow

30

30_dark_purple

31

31_green_orange

32

32_liliac_ombre

33

33_phoenix_fire

34

34_purple_blonde

35

35_silver_rose

base\characters\head\player_base_heads\appearances\entity\hairs 
player_base_heads > hairs > hairs_083
this
this
NoraLee's NPV part picker
.ent files
.mesh file name

Weapons

We need guns, lots of guns.

Weapons dont seem to have ent files that tie them together in quite the same way as most things they do however have app files that have the component lists, so who cares?

(Just to be difficult some rifles are referenced by a random file in the quests folder called empty_entity.ent, and the katanas and knives seem to have ents) If your wanting to import to Blender Sim created a bunch of dummy ent files to let you import things: https://www.nexusmods.com/cyberpunk2077/mods/9077

Generally speaking the files are in \base\weapons then organised by type and then name. But searching an app file then right clicking and find used files is faster than browsing, so here are the file names.

Weapon
App or Ent File
Ent file

Frag grenade (hex)

w_explosives_001__frag_grenade_01.ent

Frag grenade (rounded)

w_explosives_001__frag_grenade_02.ent

Flash grenade

w_explosives_flash_grenade.app

Incendary grenade

w_explosives_incendiary_grenade.app

Biohazard grenade

w_explosives_biohazard_grenade.app

EMP grenade

w_explosives_emp_grenade.app

Recon grenade

w_explosives_recon_grenade.app

w_explosives_cutting_grenade.app

w_explosives_homing_delivery.app

w_explosives_sticky_delivery.app

Arasaka Kenshin

w_handgun__arasaka_kenshin.app

Arasaka Yukimura

w_handgun__arasaka_yukimura.app

Slaughtomatic

w_handgun__budget_slaughtomatic.app

Liberty (rogues)

w_handgun__constitutional_liberty__rogue.app

Unity

w_handgun__constitutional_unity.app

Kangtao chao

w_handgun__kangtao_chao.app

Malorian (jonnys)

w_handgun__malorian_silverhand.app

Militech Lexington

w_handgun__militech_lexington.app

Militech Lexington (Silenced)

w_handgun__militech_lexington__silenced.app

Militech Omaha

w_handgun__militech_omaha.app

Arasaka Kappa

w_handgun__arasaka_kappa.app

Tsunami Nue

w_handgun__tsunami_nue.app

Tsunami Nue (Jackies)

w_handgun__tsunami_nue_jackie.app

Tsunami Nue w scope

w_handgun__tsunami_nue_scope.app

Defender

w_lmg__constitutional_defender.app

ma70hb

w_lmg__midnight_ma70hb.app

Darra Nova

w_revolver__darra_nova.app

Darra Quasar

w_revolver__darra_quasar.app

Malorian Overture

w_revolver__malorian_overture.app

Militech Crusher

w_revolver__militech_crusher.app

Techtronika Burya

w_revolver__techtronika_burya.app

Arasaka Masamune

w_rifle_assault__arasaka_masamune.app

Arasaka Masamune w scope

w_rifle_assault__arasaka_masamune_scope.app

Darra Umbra

w_rifle_assault__darra_umbra.app

Militech Ajax

w_rifle_assault__militech_ajax.app

Nokota Copperhead

w_rifle_assault__nokota_copperhead.app

Nokota Copperhead w scope

w_rifle_assault__nokota_copperhead_scope.app

Nokota Sidewinder

w_rifle_assault__nokota_sidewinder.app

Tsunami Kyubi

w_rifle_assault__tsunami_kyubi.app

Sor22

w_rifle_precision__midnight_sor22.app

Militech Achilles

w_rifle_precision__militech_achilles.app

Rostovic Kolac

w_rifle_precision__rostovic_kolac.app

Techtronika Pozhar

w_rifle_precision__techtronika_pozhar.app

Techtronika Grad

w_rifle_sniper__techtronika_grad.app

Tsunami Ashura

w_rifle_sniper__tsunami_ashura.app

Tsunami

w_rifle_sniper__tsunami_nekomata.app

Carnage

w_shotgun__budget_carnage.app

Tactician

w_shotgun__constitutional_tactician.app

Rostovic Igla

w_shotgun_dual__rostovic_igla.app

Rostovic Palica

w_shotgun_dual__rostovic_palica.app

Rostovic Satara

w_shotgun_dual__rostovic_satara.app

Rostovic Testera

w_shotgun_dual__rostovic_testera__base1.app

Arasaka Shingen

w_smg__arasaka_shingen.app

Guillotine

w_smg__budget_guillotine.app

Darra Pulsar

w_smg__darra_pulsar.app

Militech Saratoga

w_smg__militech_saratoga.app

Militech Saratoga tactical

w_smg__militech_saratoga_tactical.app

Senkoh lx

w_smg__senkoh_lx.app

Kangtao Dian

w_special__kangtao_dian.app

Kangtao Zhuo

w_special__kangtao_zhuo.app

Militech Heavy Machine Gun (HMG)

w_special__militech_hmg.app

Chainsword

w_budget_chainsword_appearances.app

Butchers knife

butchers_knife_appearances.app

Chefs knife

w_chefs_knife_appearances.app

Kukri

w_kukri_appearances.app

Machete

w_machete_appearances.app

Machete Borg Axe

w_machete_borg_axe_appearances.app

Machete Borg

w_machete_borg_appearances.app

wakizashi

w_wakizashi_appearances.app

Cattle Prod

w_cattle_prod_appearances.app

Cane

w_cane_appearances.app

Crowbar

w_crowbar_appearances.app

Dildo

w_dildo_appearances.app

Iron Pipe

w_iron_pipe_appearances.app

Pipe Wrench

w_pipe_wrench_appearances.app

Tire iron

w_tire_iron_appearances.app

Tomahawk

w_tomahawk_appearances.app

Baseball Bat

w_baseball_bat_appearances.app

Katana (25 appearances)

w_katana_appearances.app

Katana (29 appearances)

w_katana_grip.app

w_katana__common__grip1_04.ent

w_katana__common__grip1_03.ent

w_katana__common__grip1_03_decal_01_tygerclaws.ent

w_katana__common__grip1_02.ent

w_katana__common__grip1_01.ent

Wakakos katana

w_katana__common__grip1_wakako.ent

Witcher freebie

w_katana__common__grip1_witcher.ent

w_knife_appearances.app

neurotoxin

w_knife__combat__grip1_02.app

punk

w_knife_punk_appearances.app

tanto

w_tanto_appearances.app

Kanabo

w_kanabo_appearances.app

Shovel

w_shovel_appearances.app

Tech Sledgehammer

w_sledge_hammer_tech_player.app

Logo
Logo

Vehicle Record

This is the main vehicle record in TweakDB, referenced from VehicleObject in the game, that references all the other vehicle-related records. Below is the .tweak vehicle template (that's also in the TweakDB) that you can customize for creating your own vehicle. The name Vehicle.vehicle_template near the top will need to be customized to your vehicle name.

entityTemplatePath is an important field here, because this is the file that ties our record to the resource files needed for rendering.

Vehicle.vehicle_template.tweak
groups:
  Vehicle.vehicle_template:
    type: Vehicle
    members:
      affiliation:
          type: TweakDBID
          value: "Factions.Unaffiliated" 
      appearanceName:
          type: CName
          value: "None" 
      archetypeName:
          type: CName
          value: "vehicle" 
      attachmentSlots:
          type: array:TweakDBID
          value: [ "AttachmentSlots.Engine1", "AttachmentSlots.Engine2", "AttachmentSlots.Engine3", "AttachmentSlots.Engine4" ]
      audioResourceName:
          type: CName
          value: "None" 
      brakelightColor:
          type: array:Int32
          value: [ ]
      cameraManagerParams:
          type: TweakDBID
          value: "Camera.VehicleCameraManager_Default" 
      crackLockDifficulty:
          type: String
          value: "HARD" 
      crowdMemberSettings:
          type: TweakDBID
          value: "Crowds.DefaultCarPackage" 
      curvesPath:
          type: raRef:CResource
          value: "base\\gameplay\\curves\\vehicle\\vehicle_ui.curveset"
      destroyedAppearance:
          type: CName
          value: "None" 
      destruction:
          type: TweakDBID
          value: "Vehicle.VehicleDestructionParamsDefault_4w" 
      displayName:
          type: gamedataLocKeyWrapper
          value: 0 
      driving:
          type: TweakDBID
          value: "Driving.Default_4w" 
      effectors:
          type: array:TweakDBID
          value: [ ]
      enableDestruction:
          type: Bool
          value: false 
      entityTemplatePath:
          type: raRef:CResource
          value: "base\\vehicles\\common\\gameplay\\vehicle_template.ent" 
      fxCollision:
          type: TweakDBID
          value: "Vehicle.FxCollision_Default" 
      fxWheelsDecals:
          type: TweakDBID
          value: "Vehicle.FxWheelsDecals_Default" 
      fxWheelsParticles:
          type: TweakDBID
          value: "Vehicle.FxWheelsParticles_Default" 
      headlightColor:
          type: array:Int32
          value: [ ]
      hijackDifficulty:
          type: String
          value: "HARD" 
      icon:
          type: TweakDBID
          value: "UIIcon.ItemIcon" 
      interiorColor:
          type: array:Int32
          value: [ ]
      interiorDamageColor:
          type: array:Int32
          value: [ ]
      leftBackCamber:
          type: Float
          value: 0 
      leftBackCamberOffset:
          type: Vector3
          value:
            x: 0
            y: 0
            z: 0 
      leftBlinkerlightColor:
          type: array:Int32
          value: [ ]
      leftFrontCamber:
          type: Float
          value: 0 
      leftFrontCamberOffset:
          type: Vector3
          value: 
            x: 0
            y: 0
            z: 0 
      manufacturer:
          type: TweakDBID
          value: "" 
      model:
          type: TweakDBID
          value: "Vehicle.Turbo" 
      multiplayerTemplatePaths:
          type: array:raRef:CResource
          value: [ ]
      objectActions:
          type: array:TweakDBID
          value: [ "VehicleActions.VehicleHijackFrontLeft", "VehicleActions.VehicleHijackFrontRight", "VehicleActions.VehicleMountFrontLeft", "VehicleActions.VehicleMountFrontRight", "VehicleActions.VehicleMountBackLeft", "VehicleActions.VehicleMountBackRight", "VehicleActions.VehicleCrackLockFrontLeft", "VehicleActions.VehicleCrackLockFrontRight" ]
      persistentName:
          type: CName
          value: "None" 
      player_audio_resource:
          type: String
          value: "" 
      priority:
          type: TweakDBID
          value: "SpawnableObjectPriority.Regular" 
      queryOnlyExceptions:
          type: array:CName
          value: [ "trunk_a", "trunk_b", "hood_a", "door_fl_a", "door_fr_a", "door_bl_a", "door_br_a", "door_a_hidable", "door_b_hidable", "door_a", "door_b", "door_c", "door_front_right", "door_back_right", "door_front_left", "door_back_left", "av_zetatech_valgus__ext01_door_fl_01", "av_zetatech_valgus__ext01_door_fr_01", "av_militech_basilisk__ext01_turret_b", "body_transport", "av_militech_basilisk__ext01_canopy_a", "av_militech_basilisk__ext01_canopy_b", "av_militech_basilisk__ext01_turret_a", "av_militech_basilisk__ext01_body_kit_nomad", "wing_right_nomad", "wing_left_nomad", "wing_left_nomad", "seat_a_01", "seat_a_02", "seat_b_01", "seat_b_02", "seat_c_01", "seat_c_02", "seat_d_01", "seat_d_02", "seat_e_01", "seat_e_02", "seat_a_03", "seat_a_04", "seat_b_03", "seat_b_04", "seat_c_03", "seat_c_014", "seat_d_03", "seat_d_04", "seat_e_03", "seat_e_04", "av_zetatech_surveyor__int01_jumpseat_02", "av_zetatech_surveyor__int01_jumpseat_5657", "av_zetatech_surveyor__int01_jumpseat_5537", "av_zetatech_surveyor__int01_jumpseat_8866", "av_zetatech_surveyor__int01_jumpseat_01", "av_zetatech_surveyor__int01_jumpseat_5331", "av_zetatech_surveyor__int01_jumpseat_7123", "av_zetatech_surveyor__int01_jumpseat_1477", "deathrace_spoiler_01", "av_zetatech_valgus__ext01_landinggear_back_01", "av_zetatech_valgus__ext01_propeller_01", "av_zetatech_valgus__ext01_propeller_02", "v_common_suitcase_01", "jammer_antenna_01", "v_standard25_villefort_columbus__ext01_jammer_top_gear_01", "av_zetatech_surveyor__ext01_missilelauncher_l_01", "av_zetatech_surveyor__ext01_missilelauncher_r_01" ]
      randomPassengers:
          type: array:TweakDBID
          value: [ "Passengers.GenericDriverEntry", "Passengers.GenericPassengerEntry" ]
      reverselightColor:
          type: array:Int32
          value: [ ]
      rightBLinkerlightColor:
          type: array:Int32
          value: [ ]
      rightBackCamber:
          type: Float
          value: 0 
      rightBackCamberOffset:
          type: Vector3
          value: 
            x: 0
            y: 0
            z: 0 
      rightFrontCamber:
          type: Float
          value: 0 
      rightFrontCamberOffset:
          type: Vector3
          value: 
            x: 0
            y: 0
            z: 0 
      savable:
          type: Bool
          value: false 
      statModifierGroups:
          type: array:TweakDBID
          value: [ "VehicleStatPreset.BaseCar" ]
      statModifiers:
          type: array:TweakDBID
          value: [ ]
      statPools:
          type: array:TweakDBID
          value: [ "BaseStatPools.VehicleHealth" ]
      tags:
          type: array:CName
          value: [ "InteractiveTrunk" ]
      tppCameraParams:
          type: TweakDBID
          value: "Camera.VehicleTPP_DefaultParams" 
      tppCameraPresets:
          type: array:TweakDBID
          value: [ "Camera.VehicleTPP_4w_Preset_Low_Close", "Camera.VehicleTPP_4w_Preset_High_Close", "Camera.VehicleTPP_4w_Preset_Low_Far", "Camera.VehicleTPP_4w_Preset_High_Far" ]
      traffic_audio_resource:
          type: String
          value: "" 
      type:
          type: TweakDBID
          value: "Vehicle.Car" 
      unmountOffsetPosition:
          type: Vector3
          value: 
              x: 1.64999998
              y: 5
              z: 2.5 
      vehAirControl:
          type: TweakDBID
          value: "Vehicle.VehicleAirControlCar" 
      vehAirControlAI:
          type: TweakDBID
          value: "Vehicle.VehicleAirControlCarAI" 
      vehBehaviorData:
          type: TweakDBID
          value: "" 
      vehDataPackage:
          type: TweakDBID
          value: "Vehicle.VehicleDataPackageDefault" 
      vehDefaultState:
          type: TweakDBID
          value: "Vehicle.Veh4WDefaultState" 
      vehDriveModelData:
          type: TweakDBID
          value: "Vehicle.VehicleDriveModelDataDefault_4w" 
      vehDriveModelDataAI:
          type: TweakDBID
          value: "" 
      vehDriverCombat_FPPCameraParams:
          type: TweakDBID
          value: "Vehicle.VehicleDriverCombatFPPCameraParamsDefault" 
      vehDriverCombat_ProceduralFPPCameraParams:
          type: TweakDBID
          value: "Camera.VehicleProceduralFPPCamera_DefaultCombatParams" 
      vehDriver_FPPCameraParams:
          type: TweakDBID
          value: "Vehicle.VehicleDriverFPPCameraParamsDefault" 
      vehDriver_ProceduralFPPCameraParams:
          type: TweakDBID
          value: "Camera.VehicleProceduralFPPCamera_DefaultParams" 
      vehEngineData:
          type: TweakDBID
          value: "Vehicle.VehicleEngineData_4_Default" 
      vehImpactTraffic:
          type: TweakDBID
          value: "Driving.VehicleImpactTraffic_DefaultParams" 
      vehPassCombatL_FPPCameraParams:
          type: TweakDBID
          value: "Vehicle.VehiclePassengerLCombatFPPCameraParamsDefault" 
      vehPassCombatL_ProceduralFPPCameraParams:
          type: TweakDBID
          value: "Camera.VehicleProceduralFPPCamera_DefaultCombatParams" 
      vehPassCombatR_FPPCameraParams:
          type: TweakDBID
          value: "Vehicle.VehiclePassengerRCombatFPPCameraParamsDefault" 
      vehPassCombatR_ProceduralFPPCameraParams:
          type: TweakDBID
          value: "Camera.VehicleProceduralFPPCamera_DefaultCombatParams" 
      vehPassL_FPPCameraParams:
          type: TweakDBID
          value: "Vehicle.VehiclePassengerLFPPCameraParamsDefault" 
      vehPassL_ProceduralFPPCameraParams:
          type: TweakDBID
          value: "Camera.VehicleProceduralFPPCamera_DefaultParams" 
      vehPassR_FPPCameraParams:
          type: TweakDBID
          value: "Vehicle.VehiclePassengerRFPPCameraParamsDefault" 
      vehPassR_ProceduralFPPCameraParams:
          type: TweakDBID
          value: "Camera.VehicleProceduralFPPCamera_DefaultParams" 
      vehWheelDimensionsSetup:
          type: TweakDBID
          value: "Vehicle.VehicleWheelDimensionsSetup_Default" 
      vehicleUIData:
          type: TweakDBID
          value: "Vehicle.VehicleDefaultUIData" 
      visualDestruction:
          type: TweakDBID
          value: "Vehicle.VehicleVisualDestructionParamsDefault" 
      visualTags:
          type: array:CName
          value: [ ]
      weakspots:
          type: array:TweakDBID
          value: [ ]
      weapons:
          type: array:TweakDBID
          value: [ ]
      widgetStyleSheetPath:
          type: raRef:CResource
          value: 0

Shader Docs

Understanding and leveraging RED4 shaders

We do not have official documentation from CDPR about how shaders are used by artists. Thus any 2d/3d artist is looking at hundreds of black-box shaders with unknown usage. This is extremely demotivating for anyone looking to bring new assets to life with REDengine. The following list of tables is an attempt to make life easier for artists by using the community to document commonly used shaders.

About the documentation

  • The name and path of each shader will be documented by the header.

  • Next we are using a table for each texture parameter with the exact name listed by CDPR in the w2mg file, how REDengine uses each specific RGBA channel, and the usable range of the channel if not 0-1/0-255.

  • When applicable, vertex color properties will be listed underneath the texture table with a similar format.

  • Scalar, vector, color, and other properties will follow with their own unique description table.

  • An asterisk (*) is used to notate some degree of uncertainty, or need for more independent testing.

Shaders

skin

Texture
Red
Green
Blue
Alpha
Vertex Colors
Description
Properties
Description

Notes

  • The DetailNormal texture contains generic normal details that are shared between most faces. This is not a tiling/procedural texture. The DetailNormalInfluence scalar parameter can be used to lower the intensity to simulate makeup or synthetic skin.\

  • The MicroDetail texture contains a microblend tiling texture used to add procedural detail to the normal map. We believe the Roughness texture blue channel is used to mask parts of the face from exhibiting this detail, such as the lips, eyelids, and ears.

mesh_decal

Texture
Red
Green
Blue
Alpha
Properties
Description

Notes

  • DiffuseColor multiplies against the texture color to add procedural color

glass

Texture
Red
Green
Blue
Alpha
Vertex Colors
Description
Properties
Description

Note

  • There are a number of ways you can colorize your glass. GlassTint is the texture used to determine glass color. TintColor is procedural color. TintFromVertexPaint value determines how much vertex color affects the glass color. GlassTint seemingly has the highest priority, as in it will override other color parameters. Below is a test result from the process of making a glass wing.

  • There are many different other glass shaders, this one is just the most basic that is used for small objects.

television_ad

Texture
Red
Green
Blue
Alpha
Properties
Description

Note

  • AdTexture: TV screen will play looping animations that are actually sprites like a .gif. We believe this is for optimization purposes since videos are heavy.

  • TilesWidth, TilesHeight, and PixelsHeight combine will help the game define the dimension of your tile (sprite) on the sprite sheet.

  • You should calculate your sprite sheet dimension so it completely fits in a square sheet. For example, a simple dimension is 5x5 tiles with 300x300 pixel sprite. Such a dimension will produce animation with 25 frames of a square sprite.

  • More examples of such sprite sheets can be found in the path below

It's recommended that you use free tools like to make .gif and convert it into a sprite sheet for AdTexture

  • There are many screen shaders, this one is used for small TV screens.

If used cleverly with a properly done mesh, you can make use of this shader to put animation on your clothing or other items

base/materials/skin.mt

Albedo

Color

Color

Color

?

SecondaryAlbedo

?

?

?

?

Normal

Normal

Normal

None

?

DetailNormal

Additive Normal

Additive Normal

None

?

Roughness

Roughness

None

MicroDetail mask (0.5-1)*

?

MicroDetail

Additive Normal

Additive Normal

None

?

TintColorMask

?

?

?

?

Detailmap_Stretch

Additive Normal

Additive Normal

None

?

Detailmap_Squash

Additive Normal

Additive Normal

None

?

EmmisiveMask

?

?

?

?

Bloodflow

?

?

?

?

Red

Ambient Occlusion*

Green

Subsurface Scattering Mask

Blue

Improved Facial Lighting Mask

SecondaryAlbedoInfluence

?

SecondaryAlbedoTintColorInfluence

?

DetailRoughnessBiasMin/Max

?

MicroDetailUVScale01/02

?

MicroDetailInfluence

Controls MicroDetail normal intensity

TintColor

?

TintScale

?

SkinProfile

?

EmissiveEV

?

CavityIntensity

?

BloodColor

?

DetailNormalInfluence

Controls DetailNormal normal intensity

base/materials/mesh_decal.mt

DiffuseTexture

Color

Color

Color

Opacity Mask

SecondaryMask

?

?

?

?

NormalTexture

Normal

Normal

None

?

NormalAlphaTex

?

?

?

?

NormalsBlendingModeAlpha

?

?

?

?

RoughnessTexture

Roughness*

Roughness*

Roughness*

?

MetalnessTexture

Metalness*

Metalness*

Metalness*

?

VertexOffsetFactor

?

DiffuseColor

Procedural Color

DiffuseAlpha

Alpha

UVOffsetX/Y

?

UVRotation

?

UVScaleX/Y

?

SecondaryMaskUVScale

?

SecondaryMaskUVInfluence

?

NormalAlpha

?

UseNormalAlphaTex

?

NormalsBlendingMode

?

RoughnessScale

?

RoughnessBias

?

MetalnessScale

?

MetalnessBias

?

AlphaMaskContrast

?

RoughnessMetalnessAlpha

?

AnimationSpeed

?

AnimationFramesWidth

?

AnimationFramesHeight

?

DepthThreshold

?

base\materials\glass.mt

GlassTint

Color

Color

Color

?

MaskTexture

?

?

?

?

Roughness

Roughness

Roughness

Roughness

?

Normal

Normal

Normal

Normal

?

Red

Color

Green

Color

Blue

Color

TintColor

Procedural Color

Opacity

Overall Opacity

OpacityBackFace

Opacity of back face

TintFromVertexPaint

Control how much vertex color will tint the glass color. If set to max value, vertex color will completely replace TintColor.

FrontFacesReflectionPower

How much front face reflect light

BackFacesReflectionPower

How much back face reflect light

IOR

Index of Refraction?

RefractionDepth

?

FresnelBias

?

GlassSpecularColor

Color of light reflected from glass

NormalStrength

Control how much normal map affects mesh

NormalMapAffectsSpecular

Control how much normal map affects reflected light

SurfaceMetalness

Metalness

MaskOpacity

?

GlassRoughnessBias

?

MaskRoughnessBias

?

BlurRadius

?

BlurByRoughness

?

base\fx\shaders\television_ad.mt

AdTexture*

Color

Color

Color

Color

DirtTexture

Color

Color

Color

Color

TilesWidth*

How many tiles are on the horizontal axis of the sprite sheet

TilesHeight*

How many tiles are on the vertical axis of the sprite sheet

PlaySpeed

Speed of which animation will play

InterlaceLines

How much screen scanline is visible

PixelsHeight*

Height of sprite in pixel

EmissiveEV

Energy Voltage of light emission

EmissiveEVRaytracingBias

Energy Voltage of light emission by Raytracing

EmissiveDirectionality

?

EnableRaytracedEmissive

Enable Raytraced Emission

BlackLinesIntensity

?

BlackLinesRatio

?

BlackLinesSize

?

LinesOrDots

?

DistanceDivision

?

Metalness

?

Roughness

?

IsBroken

If enabled, the animation will have a broken TV overlay effect

UseFloatParameter

?

UseFloatParameter1

?

AlphaThreshold

?

DirtOpacityScale

Opacity of Dirt Texture

DirtRoughness

Roughness of Dirt

DirtUvScaleU

UV Scale of Dirt Texture

DirtUvScaleV

UV Scale of Dirt Texture

HUEChangeSpeed

?

base\environment\decoration\advertising\digital\textures\animated\textures
Ezgif.com
How glass color is affected by different parameters
AdTexture as Sprite Sheet Example. This is the Trauma Team news in the game.
here

Comprehensive Component Hierarchy List

Hierarchy of WolvenKit.RED4.Types.entIComponent

Full list of components, organized by hierarchy, useful for researching and documenting new components.

If you decide to document a component, make a new expandable entry on on the Documented Components page, followed by the discovered behavior and usage and link back to that in this list.

  • AIObjectSelectionComponent

  • AIOffMeshConnectionComponent

  • AISignalHandlerComponent

  • entAnimationControllerComponent

  • entAnimationSetupExtensionComponent

  • entAnimGraphResourceContainer

  • entEffectAttachmentComponent

  • entExternalComponent

    • entMorphTargetManagerComponent

  • entFacialCustomizationComponent

  • entIMoverComponent

    • gameRootTransformAnimatorComponent

    • moveComponent

  • entIPlacedComponent

    • entAmbientSoundEmitterComponent

    • entBaseCameraComponent

      • entRenderToTextureCameraComponent

        • gameuiHolocallCameraComponent

      • entVirtualCameraComponent

      • gameCameraComponent

        • gameFPPCameraComponent

        • gameFreeCameraComponent

        • gameScreenshot360CameraComponent

        • gameTPPCameraComponent

        • vehicleTPPCameraComponent

        • vehicleVehicleProxyBlendCamera

      • gamePhotoModeBackgroundCameraComponent

      • gameWorldSpaceBlendCamera

    • entColliderComponent

    • entDynamicActorRepellingComponent

    • entISkinableComponent

      • entAnimatedComponent

      • entCorpseComponent

      • entInstancedAnimationComponent

    • entIVisualComponent

      • cpConveyorComponent

      • entClothComponent

      • entDebug_ShapeComponent

      • entDecalComponent

      • entEffectSpawnerComponent

      • entEnvProbeComponent

      • entFogVolumeComponent

      • entISkinTargetComponent

        • entMorphTargetSkinnedMeshComponent

        • entSkinnedClothComponent

        • entSkinnedMeshComponent

          • entCharacterCustomizationSkinnedMeshComponent

          • entGarmentSkinnedMeshComponent

          • entPhysicalSkinnedMeshComponent

      • entLightBlockingComponent

      • entLightChannelComponent

      • entLightComponent

        • cpGameplayLightComponent

        • gameLightComponent

          • vehicleLightComponent

      • entMeshComponent

        • entDebug_MeshComponent

        • entEditorMeshComponent

        • entPhysicalMeshComponent

          • entAppearanceProxyMeshComponent

          • entBakedDestructionComponent

        • HudMeshComponent

      • entParticlesComponent

      • entPhysicalDestructionComponent

      • entVectorFieldComponent

      • entVirtualCameraViewComponent

        • ScriptableVirtualCameraViewComponent

      • gameBinkComponent

    • entMarketingAnimationComponent

    • entPhysicalTriggerComponent

      • entPhysicalImpulseAreaComponent

      • entTriggerComponent

    • entPlaceholderComponent

    • entSimpleColliderComponent

    • entSlotComponent

      • gameHitRepresentationComponent

      • gameOccupantSlotComponent

    • entSoundListenerComponent

    • entStaticOccluderMeshComponent

    • entTargetPointComponent

    • entTransformComponent

      • entVisualOffsetTransformComponent

    • entTriggerActivatorComponent

    • gameaudioAcousticPortalComponent

    • gameAudioEmitterComponent

    • gameaudioSoundComponentBase

      • gameaudioSoundComponent

      • gameaudioVehicleAudioComponent

      • gameWeaponAudioComponent

    • gameEntityStubComponentPlacedProxy

    • gameEnvironmentDamageReceiverComponent

    • gameinfluenceBumpComponent

    • gameinfluenceComponent

    • gameinfluenceHeatAgentComponent

    • gameinfluenceObstacleComponent

    • gameinteractionsComponent

    • gamemappinsMappinComponent

    • gameMovingPlatform

    • gameNavmeshDetector

    • gamePingComponent

    • gameprojectileComponent

    • gameprojectileSpawnComponent

    • gameStaticAreaShapeComponent

      • gameStaticTriggerAreaComponent

    • gameTargetingComponent

    • gameTransformAnimatorComponent

    • mpInteractionActivatorComponent

    • senseComponent

    • senseSensorObjectComponent

    • senseVisibleObjectComponent

    • vehicleChassisComponent

    • WidgetBaseComponent

      • IWorldWidgetComponent

        • AdvertisementWidgetComponent

        • StreetSignWidgetComponent

        • WorldWidgetComponent

      • WidgetHudComponentInterface

        • WidgetHudComponent

      • WidgetMenuComponentInterface

        • WidgetMenuComponent

    • workWorkspotResourceComponent

  • entLocalizationStringComponent

  • entRagdollComponent

  • entTransformHistoryComponent

  • entVertexAnimationComponent

  • entVisualControllerComponent

  • entWetnessComponent

  • gameAIDirectorTensionAnalyzeComponent

  • gameAttachmentSlots

  • gameaudioMusicSyncComponent

  • gameBraindanceDissolveComponent

  • gameComponent

    • AICAgent

      • AIHumanComponent

      • AIVehicleAgent

    • AITargetTrackerComponent

      • TargetTrackingExtension

    • cpTestComponent

    • ElevatorController

    • EntityStubComponent

    • gameAttitudeAgent

    • gameDeviceCameraControlComponent

    • gameDeviceComponent

      • PSD_Detector

      • PSD_Master

      • ScriptableDeviceComponent

        • ActionsSequencerController

        • ActivatedDeviceController

          • BarbedWireController

        • ActivatedDeviceNPCController

        • AlarmLightController

        • AOEEffectorController

        • ArcadeMachineController

          • PachinkoMachineController

        • BaseAnimatedDeviceController

          • MainframeController

          • RetractableAdController

          • SlidingLadderController

        • BaseDestructibleController

        • BasicDistractionDeviceController

          • BlindingLightController

            • ReflectorController

          • CleaningMachineController

          • ConfessionBoothController

          • ExplosiveDeviceController

            • C4Controller

            • ExplosiveTriggerDeviceController

            • SensorDeviceController

              • SecurityTurretController

              • SurveillanceCameraController

          • FanController

          • NetrunnerControlPanelController

          • SmokeMachineController

        • BillboardDeviceController

        • CandleController

        • ChestPressController

        • CoderController

        • ConveyorController

        • DataTermController

        • DisplayGlassController

        • DisposalDeviceController

        • DoorController

          • MovableWallScreenController

          • WindowController

        • DoorProximityDetectorController

        • DropPointController

        • ElectricLightController

          • GameplayLightController

        • ExitLightController

        • ForkliftController

        • FridgeController

        • GenericDeviceController

        • GlitchedTurretController

        • HoloDeviceController

        • HoloFeederController

        • InteractiveAdController

        • InteractiveSignController

        • IntercomController

        • InvisibleSceneStashController

        • JukeboxController

        • LadderController

        • LaserDetectorController

        • LcdScreenController

          • ApartmentScreenController

        • MasterController

          • AccessPointController

          • ActivatorController

          • AOEAreaController

          • BaseNetworkSystemController

            • DoorSystemController

          • DestructibleMasterDeviceController

            • DestructibleMasterLightController

          • DeviceSystemBaseController

            • PersonnelSystemController

            • SecuritySystemController

            • SurveillanceSystemController

          • DisassembleMasterController

          • ElectricBoxController

          • FuseBoxController

          • FuseController

          • LiftController

          • MaintenancePanelController

          • NetworkAreaController

          • RoadBlockTrapController

          • SecurityAlarmController

          • SecurityAreaController

          • SecurityGateController

          • SimpleSwitchController

          • SmartHouseController

          • SoundSystemController

          • TerminalController

            • ComputerController

              • SmartWindowController

            • ElevatorFloorTerminalController

          • TrafficIntersectionManagerController

          • VentilationAreaController

        • MediaDeviceController

          • HoloTableController

          • RadioController

          • TVController

            • WallScreenController

        • MovableDeviceController

        • NcartTimetableController

        • NetrunnerChairController

        • OdaCementBagController

        • PortalController

        • ProximityDetectorController

        • RoadBlockController

        • SecurityGateLockController

        • SecurityLockerController

        • SpeakerController

        • StashController

        • StillageController

        • ToiletController

        • TrafficLightController

          • CrossingLightController

          • TrafficZebraController

        • VehicleComponent

          • AVComponent

          • CarComponent

          • MotorcycleComponent

        • VendingMachineController

          • IceMachineController

        • VendingTerminalController

        • VentilationEffectorController

        • WardrobeController

        • WeakFenceController

        • WeaponTrainingController

        • WeaponVendingMachineController

        • WindowBlindersController

    • gameEntitySpawnerComponent

    • gameEntityStubComponent

    • gameInventory

    • gameMasterDeviceComponent

    • gameScanningComponent

    • gameScriptableComponent

      • AdamSmasherComponent

      • AIRelatedComponents

        • AICustomComponents

          • CentaurShieldController

        • AIMandatoryComponents

          • HitReactionComponent

            • HitReactionMechComponent

          • StatusEffectManagerComponent

        • AIPhaseStateEventHandlerComponent

      • AppearanceRandomizerComponent

      • AreaEffectVisualizationComponent

      • BossStealthComponent

      • CombatHUDManager

      • DEBUG_VisualizerComponent

      • DetectorModuleComponent

      • DeviceConnectionHighlightComponent

      • DeviceDebuggerComponent

      • DeviceTimetable

      • DiodeControlComponent

      • DisarmComponent

      • DisassemblableComponent

      • DrillMachineScanManager

      • DroneComponent

      • DurabilityComponent

      • EntityAttachementComponent

      • Example_FxSpawning

      • FastTravelComponent

      • FollowSlotsComponent

      • FxResourceMapperComponent

      • gameAINetStateComponent

        • NPCStatesComponent

      • GameplayRoleComponent

      • InputDeviceController

      • InspectableObjectComponent

      • InspectionComponent

      • MinotaurMechComponent

      • ObjectMoverComponent

      • OdaComponent

      • PhotoModePlayerEntityComponent

      • PlayerPhone

      • QuickSlotsManager

      • ReactionManagerComponent

      • ResourceLibraryComponent

      • RewireComponent

      • RoyceComponent

      • SampleComponentWithCounter

      • SampleCounterDisplayComponent

      • SasquatchComponent

      • ScannerControlComponent

      • ScavengeComponent

      • SimpleTargetManager

      • StimBroadcasterComponent

      • TankTurretComponent

      • TestScriptableComponent

      • TrapComponent

      • UpdateComponent

      • VendorComponent

      • WeaponPositionComponent

      • WorkspotMapperComponent

    • gameSquadMemberComponent

      • SquadMemberBaseComponent

    • gameStatsComponent

    • gameStatusEffectComponent

    • gameVisionModeComponent

    • scnVoicesetComponent

    • vehicleCameraManagerComponent

    • vehicleController

    • vehicleGarageComponent

    • vehiclePersistentData

  • gameComponentsStateSaveComponent

  • gameCrowdMemberComponent

    • CrowdMemberBaseComponent

  • gameDismembermentComponent

  • gameDoorComponent

  • gameEthnicityComponent

  • gameFootstepComponent

  • gameHumanoidBody

  • gameImpostorComponent

  • gameinteractionsReactionComponent

  • gameITriggerDestructionComponent

    • gameBodyTriggerDestructionComponent

    • gamePuppetTriggerDestructionComponent

  • gameLadderComponent

  • gamemountingMountableComponent

    • gameMovingPlatformMountableComponent

    • gameObjectMountableComponent

    • gamePuppetMountableComponent

    • vehicleVehicleMountableComponent

  • gameMultiEcsManagerComponent

  • gameMuppetComponent

    • gameMuppetBlackboardsComponent

    • gameMuppetInputStates

    • gameMuppetInventory

    • gameMuppetLocomotionComponent

    • gameMuppetPhysicsComponent

    • gameMuppetRawInput

    • gameMuppetStats

    • gameMuppetUpperBodyRequestsComponent

  • gameMuppetInputHandlerComponent

  • gameNarrationPlateComponent

  • gameNetrunnerPrototypeComponent

  • gameObjectCarrierComponent

  • gamePhantomEntityComponent

  • gamePhotoModeBackgroundViewComponent

  • gamePhysicalDestructionListenerComponent

  • gamePlayerCommandConsumerComponent

  • gamePlayerControlledComponent

    • gamestateMachineComponent

  • gamePlayerMappinComponent

  • gamePlayerTierComponent

  • gameScanningActivatorComponent

  • gameSimpleOccupantSlotSpawner

  • gameSourceShootComponent

  • gameTargetingActivatorComponent

  • gameTargetingLocalizedEffectComponent

  • gameTargetShootComponent

  • gameTPPRepresentationComponent

  • gameuiICharacterCustomizationComponent

    • gameuiCharacterCustomizationBrokenNoseController

    • gameuiCharacterCustomizationPersonalLinkController

    • gameuiICharacterCustomizationBodyController

      • gameuiCharacterCustomizationBodyController

    • gameuiICharacterCustomizationBodyPartsController

      • gameuiCharacterCustomizationBodyPartsController

        • gameuiCharacterCustomizationFeetController

        • gameuiCharacterCustomizationGenitalsController

        • gameuiCharacterCustomizationHairstyleController

  • gameVisionActivatorComponent

  • gameWeakspotComponent

  • moveIMotionPlannerComponent

    • moveMotionPlannerComponent

      • moveDroneMotionPlannerComponent

  • movePoliciesComponent

  • worldTrafficLightListenerComponent

Troubleshooting

If your mods are causing trouble, here's what you can do

This page contains troubleshooting information for people who are using mods rather than making mods. You will find step-by-step guides, grouped by different problems.

Did you know? You can us your browser's search function (Ctrl+F) to quickly find your problem on the page – simply type a word from your error message.

Navigation

Before you start debugging, make sure that

  • your graphics driver is up-to-date

  • your is up-to-date (no, really)

  • you have the most recent version of installed

  • you have installed (, Microsoft)

Before you start debugging, update your mods and make sure that all dependencies have the latest version, in particular the (, , , and ).

If you are on RED4Ext >= 1.13, make sure to uninstall cybercmd!

Find a download-ready collection for Vortex .

This section aims to give you a quick overview. If your exact problem isn't listed here, please look through the different sections below and try anything that looks promising.

  • A mod is causing problems, and you have no idea which:

    • Searching:

    • Searching:

  • Deleting user settings

To enable REDmods, check .

Your game is crashing

During car chases

If your game is crashing during certain car chase missions, try removing .

If you can't play because the game is crashing, this section will point you towards the right troubleshooting steps in the guide below.

  • If you're done with this shit and would rather reinstall, see

Crash on startup

If you're trying to start your game, but it never even launches, this is the right section for you. Otherwise:

  • If the game crashes before you make it to the menu, see .

  • If the game crashes when you're trying to load a save, see .

Something about files or permissions

If you think that your error is file-related, you can check the section "" or use your browser's search function (Ctrl+F) to search this page for your error.

Some other error

Your problem lies with either red4ext or redscript. Find the section "" below and follow the steps for your error message.

Crash before menu

If you're starting the game, but never make it to the in-game menu, this is the right section for you. Otherwise:

  • If the game never even starts, see

  • If the game crashes when you're trying to load a save, see .

Your problem most likely related to Cyber Engine Tweaks. To find out how to troubleshoot it, check the "" section.

Cyberpunk has flatlined

See ""

Crash on loading a save

If you can make it to the menu but crash out when you're loading a save or starting a new game, this is the right section for you. Otherwise:

  • If the game never even starts, see

  • If the game crashes before you make it to the menu, see .

Most likely, you have an issue with an .archive mod. Here's what you can do:

  1. To rule out that it's a save game problem (those are extremely rare), start a new game.

  2. Go to the section and start with the first two entries on the list

If that doesn't solve your problem, or if the issue is save-game related, feel free to browse around some more.

Crash during the game

This section tells you how to deal with crashes during gameplay.

If you can make it crash reliably

You're lucky, because it means that you can systematically troubleshoot. Go to the section; start with .archive mods, but if that doesn't fix it, do the other folders as well.

If you can't

… that puts you in the same boat as the rest of us: most veteran players live with occasional crashes, especially while tabbing out and back in under certain circumstances.

That being said, if the crashes exceed what you're willing to live with, you'll have to find out a way to improve it, but your options are thin on the ground. Depending on how long it takes for the crash to occur, you might try

  • resetting your game (if the error persists, it's not mods)

  • certain types of mod to home in on the cause (see the for an overviev)

Best of luck!

redscript / RED4ext

When your game doesn't even start up, either of these frameworks isn't working properly. Below, you can find a list of the most common error messages with steps to resolve them.

Corrupt or missing script files

Cyberpunk 2077 encountered an error caused by a corrupt or missing script file and will now be forced to close. Please verify...

You have a problem with Red4ext.

If you are using RED4ext >= 1.13, uninstall cybercmd if you have it — it's no longer necessary and can cause false positives.

The first step whenever you run into this error is deleting the folder r6/cache and verifying your game files.

If that doesn't help, it's time for more detailed troubleshooting:

  • If you are on Linux, make sure to double-check the , as Steam sometimes resets these between updates

  • if you don't have red4ext/logs/red4ext.log, then RED4ext doesn't work, you have to update / fix RED4ext

  • if you have red4ext/logs/red4ext.log, then look inside, it will tell you which mods aren't compatible with the current game patch and may be the cause of this issue

  • if that doesn't help, try (you will need to verify your game files).

If that doesn't solve your problem, you can

  • and reinstall the core frameworks

Corrupted archives

Cyberpunk 2077 encountered an error caused by corrupted or missing archives and and will now be forced to close. Please verify...

One of the .archive files in your folder is broken. To find out which one, try the approach, starting with the first two folders.

The game isn't starting: other reasons

There are various non-mod-related reasons why the game couldn't be starting. If you have followed these steps and they haven't gotten you anywhere, check the errors in this section:

Other than that, there are general troubleshooting steps, because missing Windows stuff can make Cyberpunk go brr. Make sure that

  • your graphics driver is up-to-date

  • you have the most recent version of installed

  • you have installed (, Microsoft)

Also, try starting the game without Reshade to rule it out as a source of crashes (this happened after the DLSS patch) and temporarily disable your antivirus.

If none of that helps, find us on in #mod-troubleshooting.

Too many mods

There is such a thing as too many mods which are making the game crash. This number seems pretty random, but generally doesn't start below ~460.

To fix this, you need to disable analysis in the settings:

Failed to initialize script data

This is not a Cyberpunk error!

Check your NVidia Control Panel panel. If power saving options are enabled, turn them off:

If you don't, check for other power config options in your operating system.

Steam: verify file integrity loop

Before trying to implement any of the other solutions, configure the REDprelauncher.exe in the to always run as administrator.

  • Right-click on the file and select Properties

  • Switch to the Compatibility tab

  • Check the box Run this program as an administrator

You pirated the game

There's a chance of >95% that we have already found the source of your problems — pirated copies just don't mod well. That's the first reason why things won't work.

The second reason is that CDPR needs to earn money to pay people to make games for us. If you can at all afford it, please buy the game. It's a good deal: how much are you willing to spend for a movie ticket? How long does a movie keep you entertained?

You are, of course, welcome to peruse the troubleshooting guide. It might even help you. But know that pirated copies will never be explicitly supported.

Finding the broken mod: known problem children

Stuff that isn't mods

It doesn't have to be either of these. But if it is, you'll never find it with the rest of the list. Rule it out by deactivating them while you're debugging.

  • Antivirus

  • ReShade

Frameworks / Core Mods

These mods are not problem children – quite the opposite. But if they are outdated, either your game or your mods won't work. Make sure that you with the most recent game version.

Script mods

Some mods go far beyond the ordinary, adding whole new features to the game (why no flying cars, CDPR?). Unfortunately, that means they're more prone to breaking than others. Here's a non-comprehensive list.

Being on this list does not mean that a mod is "bad" or that you shouldn't use it – they break much for the same reason as the frameworks do, and are fixed in the same way (the modder has to update). Until that happens, you will have to disable them.

Adds flying cars to Cyberpunk. While this is awesome, it will absolutely break whenever CDPR changes anything, and requires updating.

Displays in-world holographic arrows that direct you towards your quest objectives. Is very likely to break upon patches.

Adds car chases and a bunch of related features. While CP2077 needs more car chases and explosions, this usually breaks and will require an update.

Adds mod settings to the in-game menu – Redscript version. This needs to be updated after every game patch.

Adds mod settings to the in-game menu – CET version. The mod itself will be fine, but it's dependent on being up-to-date.

spawn0

Most famous for edits of the female body that defy gravity and wreak havoc on V's spinal disks, this modder has been around since the early days, and the same is true for their mods.

However, modding has come a long way since then, and spawn0 never followed. For that reason, their mods are known to have compatibility issues with pretty much everything in the general vicinity.

On the bright side, their mods won't crash your game and are downwards compatible until the dawn of time.

Finding the broken mod (log files)

Bad news: The game's logs are usually less helpful than the Swiss navy. Good news: Mods are doing a far better job. Bad news again: You have to find the right log file in the game directory. Good news again: There's intel how (see below)

jackhumbert's mod will give you additional information. There is a chance that it shows you something helpful, most of the time it

If you don't want to download and run script files from the internet, you can go and complete the steps by hand. Otherwise:

  1. Download (right-click -> save as) Link goes to Presto's

  2. Now, do either of the following things:

    1. Move it to your Cyberpunk install folder and double-click it

    2. Drag-and drop your Cyberpunk folder on the file that you downloaded

  3. After running, the script will have created a folder _LOGS in your Cyberpunk directory, which contains a file listing all the log files for you.

The list will give you useful information along with a list of files to check. Once you've found the broken mod, you can go for instructions on how to troubleshoot further – they also tell you when you should ask for help!

Finding the broken mod (bisecting)

You have hundreds of mods, and one of them is broken. How do you find out which one it is without wasting the entire day?

Don't worry! As long as you have less than 2048 mods, bisection lets you find the problem child with only 10 rounds. (Otherwise, it's 11)

Some mods install themselves to multiple directories, but that doesn't matter. Due to the fact how mod loading works, you can find the error like this.

Which kind of mod is it?

If you already know which folder contains the broken mod, .

You can find a video of the process .

To find out the type of broken mod, take each directory from the following list and complete the steps in the next paragraph after the table.

Kind of mod
Directory
explanation
  1. Rename the game folder (e.g. /mods) to a backup folder by appending an underscore (e.g. /mods_)

  2. To prevent errors, create a new empty game folder (e.g. /mods).

  3. Start the game. You will now run into one of these two scenarios:

    • Your problem is gone: Jackpot. This is the correct folder for .

    • Your problem is still there: This folder is innocent. Proceed with the next entry.

You can put the innocent folders back if you want: due to the way mods are loading, there won't be side-effects.

Go bisect

Congratulations, you have found which folder causes the problem — you're more than halfway there. All that's left is to find the broken mod. Here's how:

  1. From your renamed folder directory_, move half of the mods over to the empty game folder directory so that they'll become active.

  2. Start the game. You will now run into one of two scenarios:

    • The error is gone: The problematic mod is in your backup folder, but you now know which mods are okay.

      • If this is the first round: Go back to 1

      • Otherwise: The broken mod was in the bunch that you moved out in the last round. When repeating step 1, you can ignore everything but the last bunch you moved.

    • The error is still there: The problematic mod is your game folder. Move half of the mods out of the folder again. If this is not the first round, only do the last subset that you moved.

Repeat this process until you've identified the mod that's crashing your game.

Bisect: Video demonstration

Audio problems

If your CPU is too busy, the game will try to save resources by dropping audio, starting with dialogue audio. Disabling spatial audio from the main menu might help:

It's not connected to CPU load

Missing footsteps had in the past been connected to a bug in Let , so it is worth debugging your script mods. However, if you're on the most recent version (check the github for previews), you might just have to your mods at random.

Mod(s) aren't loading/triggering

Normally, a mod should just work, as long as all of their requirements are working. If you aren't certain what that means, you can check for an explanation or follow the checklist below.

  • Make sure that you have in your launcher.

  • If items or hairs aren't changing, you need to install

  • If materials aren't updating, you need to install

  • If you already have all of that, .

If you've been using Mod Organizer 2 to install your mods, chances are high that it's been doing it incorrectly, at least for some of the more important mods. Save yourself the headache and manage your mods through or manually. Or you can look into "Root Builder" and "Wabbajack." Those keywords might help you if you choose to stick with MO2. Don't say we didn't warn you though!

That wasn't it: Getting the mod to work

If your mod is or , you can check the sections below. Otherwise, follow the .

Mod isn't working: General troubleshooting

Here's what you can do:

  1. Check that you've enabled the feature (see ).

  2. Check the on the mod's nexus page. Make sure that you have installed them all and that they are up-to-date.

  3. Make sure that all of your are up-to-date and starting up correctly (here's how you can )

  4. Check the other log files in the game directory ()

  5. Optional: reach out to us on in #mod-troubleshooting

Mod isn't working:

You have installed Cyber Engine Tweaks, but it's not active / not letting you bind a key:

Mod isn't working: a CET mod or script

You will find all the files mentioned below under

  1. Find the cyber_engine_tweaks.log.

  2. Update everything that shows an error

  3. If any file paths are listed: Make sure that the directories exist and aren't

  4. Search the CET folder for log files

  5. Try to resolve any errors or reach out to us on in #mod-troubleshooting

Deleting user settings

You almost never need to do this.

However, if you want to remove anything that Cyberpunk might have stored on your disk, you need to find and delete the following folders (as per :

  • %userprofile%\Saved Games\CD Projekt Red\Cyberpunk 2077

  • %userprofile%\AppData\Local\REDEngine

  • %userprofile%\AppData\Local\CD Projekt Red

You can quickly navigate to the folders by pasting the path into your Windows Explorer's path bar, or pressing Windows+R, pasting the path there, and

The nuclear option: a clean install

This is the last resort and you do not need to do this — run for the same result in less time. However, if you're still set on reinstalling, the instructions below will help you completing that in minimal time.

Back it up, baby!

Unless you back them up, your mods will be lost. If you don't want that, make backups of the following folders:

The linked above will do that for you.

Quick (download <4GB)

Unless you , all your settings and manually installed mods will be lost.

The instructions below tell you which folders not to delete. Delete everything else.

  1. Go to the Cyberpunk 2077 install directory

  2. Delete everything except for the folder archive

  3. Inside archive, delete everything but the folder pc

  4. Inside pc, delete everything but the folder content

  5. Verify your files

Modular / minimal download (download <1GB

Unless you , all your settings and manually installed mods will be lost.

Will download < 1GB.

Rename or remove the following folders. If you do not have them, you don't need to do anything.

Afterwards, verify your files.

Nuke it from the orbit: The thorough version

In case neither of these options is good enough for you, you can find a full reinstall guide on .

A fresh install: Starting from scratch

You have completed either of the previous steps. Your game should start now. If it does not, you either have leftover files (check for how to get rid of them), or you have a problem that is not related to Cyberpunk. Make sure to follow the hints in the red box .

Now it's time to systematically install mods. We'll start by and making sure that the game starts up without any framework-dependent mods. Afterwards, you can add back all of your mods, and if the game stops working, find the offender via .

Don't worry about your savegames — those are fine, even if they won't load right now. We're just laying the foundation here that you can later build upon.

Let's go about it step-by-step.

Installing the frameworks

This step will tell you how to set up your Cyberpunk install with the necessary dependencies so that you can start modding.

Check the . For each of the frameworks, complete the following steps:

  • If you didn't have it in your previous install, skip it.

  • Install it (manually or via Vortex, your choice)

  • Install all of its

  • Start the game and load a savegame (you can also do this after installing all of them, but if you run into issues, that will make isolating the point of failure more difficult).

  • Optional (for CET): Start the game and make sure that it asks you to bind a key. If not, check the

If you are using redmod (have any folders inside of /mods), you probably have installed. That is no longer necessary with RED4ext >= 1.13 and can lead to false positives. Uninstall it!

Once you are done, start up your game and load a savegame. If you don't have one or the game still crashes, start a new game.

This should now work. If it doesn't, you need to check your to see which framework is causing trouble, or find us on in #mod-troubleshooting.

You need to complete this step before proceeding: if the core frameworks aren't working without mods, they won't work with mods – adding anything now will just make debugging more difficult.

Fortunately, this is not rocket science. Be methodical and install them one by one. If you need help, you can find us on (#mod-troubleshooting)

Adding (back) your mods

If you don't (yet) have any mods, you can head over to Nexus and start installing. Make sure that you include all necessary !

This section assumes that

  • you installed all required

  • your game is starting

  • you can (without crashing) do either of these things:

    • load a savegame

    • start a new game

If you didn't make it that far, the steps below won't help you and will only obscure your problem. Please head first and complete the process.

If you need help, find us on in #mod-troubleshooting!

If you're using Vortex

Head directly to the section and pretend you have just removed all your mods.

If you made a manual backup:

For each folder that you have (check link for a list), repeat the following steps:

  1. Put it back into its original place in your new/fresh install

  2. Start up the game

  3. Load a non-modded savegame or start a new game

If your crash(es) are back, you can now go to the section and follow the steps for your folder.

Something something files

Your error goes something like this:

  • Cyberpunk is trying to write to a file that doesn't exist

These are caused by access errors – Cyberpunk is trying to read or write a file, and for some reason, it can't.

Follow the steps in this section one by one, or find us on in #mod-troubleshooting.

Make sure that the file path exists

Ignore this if you can't spot any file paths in the error message

If Cyberpunk is trying to move files to a subdirectory that it can't access, make sure that the directory actually exists (if it doesn't, create it). The most frequent candidate for this is /r6/cache/modded.

Make sure that no previous game instance is running

Sometimes, the game instance doesn't shut down properly and is still running in the background, althoguh you can't see a window. This problem goes away after rebooting.

  • Open your task manager (Ctrl+Shift+Esc)

  • Switch to the Details tab

  • Sort by Name and scroll to C

  • Check if you can see anything Cyberpunk in the list.

  • If yes, right-click on it and select End Task

It is possible that your antivirus is causing this problem. Before you lose your mind, try temporarily disabling it.

Reboot your PC

Always a good idea to do that from time to time – in this case, it could make the error go away.

If it doesn't, check the next steps on the list.

Make sure that all files in the game directory are writable

Sometimes, files in your are set to read-only.

What kind of monster would do something like that???

We've had confirmed reports of the following culprits:

  • Steam

  • mo2 mod manager

  • various flavours of antivirus

You can fix this either via or via , the results will be the same.

Via system console:

  • Press Windows+R

  • type cmd and press Return to open the command line

  • run the following command (replace the path with your actual game dir):

Via Windows Explorer:

  • Navigate to the Cyberpunk game directory and right-click on it

  • Select Properties (the last entry in the drop-down menu)

  • Uncheck the "Read-only" box:

File Ownership

Sometimes, file ownership got messed up, and not all files in the folder are accessible by your current Windows account. It is a mystery how this comes to be.

You can fix it via or via ; either of those will do. If in doubt, the commandline one is more thorough.

Via commandline

In any of the commands below, you need to substitute C:/Path/to/Cyberpunk2077 with the path to your .

  • Press Windows+R

  • Type cmd and press return

  • Run the following command (make sure to insert your real Cyberpunk path):

  • If that didn't help, run the command whoami to see your current user name. You will need it for the next step. It should be identical to your Windows username, but if you have spaces or special characters, Windows might get funny about the spelling.

  • Run the following command (putting your actual game dir and the username from whoami):

Via Windows Explorer

We haven't included the full instructions here, but you can check .

Reboot your PC again

If none of these things has helped, reboot your computer.

The error should be gone now.

Not to say that your game will work now – but if you still have an error, it's hopefully a different one. Go back to the start of the guide and let's fix that one too!

Redscript Compilation Failed

You're running into the following error:

This workflow is geared at the exact error above. If you have a different one, it's still worth checking this, but you can also head back and find the right section.

0. Make sure that you don't have multiple versions of installed

In the past, Codeware wasn't a standalone mod, but was instead inside of other mods. Since that is different now, the leftover versions can cause errors.

  1. Search your for Codeware.

  2. If you have exactly one folder, this is not your problem — proceed to .

  3. Delete everything you have found.

  4. Reinstall the latest version of from Nexus.

  5. Delete the folder r6/cache

  6. Verify your game

1. Make sure that you have the latest versions

Actually check this. Do not rely on memory or common sense – if in doubt, re-download. (This is totally not something that the guide's author learned the hard way)

  1. Check Redscript ( | )

  2. If you are on RED4ext >= 1.13:

    uninstall cybercmd

  3. Otherwise:

    install cybercmd (| )

Optional, but recommended:

Check that you have the latest versions of all troublesome Redmods.

2. Check redscript.log

It is in r6/log/redscript.log.

See if you can find any errors – warnings may or may not be a problem, see for context.

3. Reset Redscript

If you rename or delete any directories, make sure to create a new, empty directory.

Redscript: Disable dependent mods

Vortex: Disable them

Manual: Remove the contents of r6/scripts/.

You can zip the directory from the windows context menu, then delete its contents.

Resetting the redscript cache

  • delete

  • verify game files

  • create a new directory r6/cache/modded (this will prevent errors)

  • Make sure that r6/scripts

  • Make sure that red4ext/plugins (that the red4ext core frameworks aren't getting loaded)

Make sure your game starts up without error.

4. Reinstall your mods

Hopefully, your problem should be gone now.

It's time to put your mods back and see if you can start the game - see .

XML Document parsed with errors

XML document parsed with errors: C:\Path\toCyberpunk 2077\r6/config/inputUserMappings.xml Error description: Error parsing element attribute

According to InputLoader's , you can ignore this. Keep searching! (You can also try reinstalling InputLoader and hope that the error goes away)

You forgot your CET keybind

Delete the file Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks\bindings.json. The game should let you bind a new key at the next startup.

Photomode screenshots are blank

With 1.62, screenshots are now saved to Documents\CDPR\Cyberpunk\Screenshots , and the previous location will receive an empty file.

With 1.63, screenshots have now been moved back to \Pictures\Cyberpunk 2077

Press [none] to continue

That is due to requiring an update.

I have another problem that isn't on this list

Here's the catch-all solution. After this, your game will work (or the problem you have is not Cyberpunk related).

  1. (optional, as this might solve it): .

  2. If your problem doesn't go away, follow the instructions .

I really just want to get this working, what do I do?

You might want to deactivate ReShade before you start debugging. Especially after DLSS, it has been known to cause crashes.

The bad news is, at this point you have little choice but to reset your Cyberpunk install and re-mod it from scratch. The good news is that the process is really streamlined. If you don't run into any hitches, you're <30 minutes away from a working game.

Now, how do we go about this?

Is there a shortcut?

Yes! There is a batch script that will automate steps 1-4 of the list below for you.

If you don't want to download and run script files from the internet, you can go and complete the steps by hand. Otherwise:

  1. Download the mod remover script by either

    • downloading it from and following the install instructions

    • grabbing it from (right-click -> save as) and moving it to your Cyberpunk dir Link goes to the of the person who wrote most of this guide.

  2. Optional: If you don't want the script to delete modded files for you (because you just want to disable mods), right-click on the file and select Edit, then find and delete line 6:

  3. Make sure that the file is in your Cyberpunk directory. If you downloaded from Nexus, you should have a cyberpunk2077_disable_all_mods.bat.

  4. Double-click it

  5. Follow the instructions and prompts

  6. Verify your game files

  7. Optional: You can now proceed to and start modding your game again.

Instead of following these instructions, you can also . Do yourself a favour and check the instructions, as you might be left with residual files otherwise.

Step 1: Temporarily disable all your mods

Vortex

  • Follow the instructions and prompts

Press the purge button — this will remove any and all installed mods.

Do not press deploy.

If all your mods were managed via Vortex:

Start Cyberpunk however you want, as long as it's not via Vortex. If it starts now, you're done here and can proceed with – otherwise, go to .

If you had a mixed install:

Complete the instructions in the section now.

Manual

Find the following folders:

and rename them to

The purpose of renaming them is that the game won't find them anymore, but you still have a back-up of the files inside. Feel free to achieve this goal however.

You can optionally create a new, empty folder with the same name.

Check if the problem is gone.

If it is, put the folders back one after the other and apply the .

Step 2: disable CET

Find the folder

and move it out of plugins (e.g. put it on your desktop).

If you'd rather delete it, make sure that you retain a copy of your mods and plugins directories, as they contain your mod settings (AMM decorations etc.)

Check if the problem is gone.

If it is, put the folder back and apply the to cyber_engine_tweaks\mods and cyber_engine_tweaks\scripts until you have found the culprit.

Step 3: Remove scripts and tweaks

First, remove (or rename) the cache:

Verify game files. Check if the problem is gone.

If that didn't do the trick, find the following folders:

and rename them, you know the drill.

Check if the problem is gone.

If it is, put them back one by one until you find the one that breaks it. If that is one of r6\scripts or r6\tweaks, apply the .

Step 4: Remove RedScript

You can try first, but at this point, you'll going to have to verify your files anyway.

Delete the following files and folders. You don't need a backup, as you can reinstall RedScript from . If any of them don't exist, that's okay — just means you don't have to delete them.

@Auska has compiled a handy script for unix people:

Step 5: Repair game files

Exact procedure as documented by @ArsenicTouch

GOG

Go to Games -> Installed, right-click on your game and select the following menu entry:

Steam

  1. Open your library

  2. Right-click on "Cyberpunk 2077" and select "Properties"

  3. Select "Local Files"

  4. Click "Verify integrity of game files…"

Epic

  1. Open your "Library"

  2. On the "Cyberpunk 2077" tile, find the "…"

  3. Select "Manage"

  4. Click "Verify"

Step 6: Launch the game

All files you deleted have been re-acquired. If there are no left-over files from earlier modding attempts, your game should work now.

If it does not and you have exhausted the reset options as specified in this guide ( and both) and your game still does not start, then your problem exists outside of Cyberpunk. In this case, you can

  • check your (separately for )

  • google your error message and try solutions at random

Step 7: Install the core frameworks

Now that your un-modded game is starting, it's time to . Do this before you enable your other mods, as they won't work without their dependencies and can only add problems at this stage.

You can now re-enable your mods. Do it in chunks and check that the game keeps working so that you can narrow down where the problem is, in case it isn't gone for good.

Dealing with a broken mod

You have followed all the steps and your game is launching, but you now have a mod on your hands that just doesn't work, and you want it to. What do you do now?

If you join a to ask for help, people will walk you through this list, so you might as well do it first. Nobody will unbundle someone else's mod and just fix it for free unless they want to use it themselves.

1. Make sure you have the correct dependencies

Many mods require frameworks or other mods to work. Check the mod's page and description for those, and install them.

Repeat the process by installing the dependencies' dependencies, until you have everything necessary.

2. Check the mod's description

Often, the description contains detailed installation instructions, known incompatibilities and/or workarounds. Sometimes, mods worked on past versions of Cyberpunk, but the author stopped updating. In that case, proceed to of this list.

Before you get upset, please keep in mind that modders don't do this for a living (these are called "game developers" and they get paid for it). Somebody made this in their spare time, for their own use, and then decided to share it with you for free. Do you know the easiest way to avoid toxic users? It's not publishing your mods. No reward system, credit points or reputation will ever make up for online abuse.

As a mod author, I can tell you that I will ignore assholes, but gladly spend an extra hour after work to help out someone who politely asks me for help.

3. Check the mod's comment section

You're unlikely to be the first person to run into this problem. There is a good chance that the comment section on the download page has helpful information. Look for either a pinned post by the mod's author or a user discussion about your problem — these often contain a solution.

4. If you are using a mod manager: Try installing it manually

While mod managers are very reliable and get better with every new release, you should rule out that they are the cause of the problem by installing the mod from hand.

If everything else works and installing the mod by hand still breaks compilation, then it is broken. See "" below. start your game client's file verification.

5. Contact the mod's author

Describe your problem as clearly as you can, and add all useful data.

Bad bug report: "Your mod doesn't work lol pls help"

Good bug report (example): "Hi, installing your mod (manually and Vortex) causes a Redscript compilation error on startup (possible screenshot of error popup). xxx.log says <citation of error message>. All my dependencies are up-to-date, and I've ruled out that it's any other mod. Can you help me out?"

Good bug report (example 2): "Hi, when I try to equip Item <item name and colour>, it doesn't show up and I only get glitches. I'm using Hyst's boob mod and <specific version and variant> of your mod. I hope you can help me? Thank you for making this."

As per the last red box, do keep in mind that you're asking a favour. The modder doesn't have your problem, and if they do, they know exactly how to fix it. The most time-efficient response for them is to ghost you, so any kind of response is either them being nice or getting mad when you or someone involved ignores visible information.

5. Hands-on troubleshooting

At this point, you have exhausted all easily accessible solutions. If you still want the mod to work, you will have to get involved yourself. A commendable attitude! (Not sarcasm, it really is.)

This is the point where you might want to join a , because now you're entering the territory where other modders can actually help you.

Usually, there will be a that will point you towards the source of your problem. If there isn't (the game loads and the mod just fails silently), that means that the error is inside the archive and you have to become a modder.

Fixing scripts

But sometimes, you're lucky. Sometimes, the error is in a script file. You can tell this by a log entry pointing towards a file in your Cyberpunk folder (e.g. r6\scripts\my_broken_script.reds).

Open up that file in a text editor like and try to find and fix the problem. Sometimes, the log file has more information. Sometimes, an online syntax check can help you — there isn't one for redscript, but it's fairly close to lua.

Sometimes, such mistakes are trivial — a forgotten , or incorrect file encoding. Often, they are not.

A tip for

Ascending from user to modder

If the error isn't in any script files, you will have to unbundle the .archive, load it in , and get your hands dirty. We'll be seeing each other, choomba!

Message: Failed to initialize scripts data!
File: E:\R6.Release\dev\src\common\engine\src\baseEngineInit.cpp(1019)

.archive

\mods

Redmod directory: contains .archive mods (in subfolders)

.archive

\archive\pc\mod

Legacy directory: contains .archive mods

.lua (cyber engine tweaks)

\bin\x64\plugins

Cyber Engine Tweaks

redscript

\r6\scripts

redscript mods

red4ext

\r6\tweaks

red4ext tweaks

Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks
Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks
/
/

/r6


Access is denied
Can't access file 'some/file'
could not move file from 'Path\to\blabla.tmp' to 'Path\to\Cyberpunk 2077\subdir\some.file'
Expression: EXCEPTION_ACCESS_VIOLATION
The thread attempted to read inaccessible data at 0xsomething
An exception occured while creating the logger
attrib -r "\*.*" /s
takeown /R /A /F "C:/Path/to/Cyberpunk2077" /D N
icacls "C:/Path/to/Cyberpunk2077" /grant YourUserName:F /T /C
REDScript compilation failed. The game will start, but none of 
the scripts will take effect. This is caused by errors in:
set DELETE_FILES=1
Cyberpunk 2077\archive\pc\mod
Cyberpunk 2077\mods
Cyberpunk 2077\archive\pc\mod_
Cyberpunk 2077\mods_
Cyberpunk 2077\bin\x64\plugins\cyber_engine_tweaks
 r6/cache/modded
Cyberpunk 2077\red4ext
Cyberpunk 2077\r6\scripts
Cyberpunk 2077\r6\tweaks
Cyberpunk 2077\engine\tools
Cyberpunk 2077\bin\x64\d3d11.dll
Cyberpunk 2077\bin\x64\global.ini
Cyberpunk 2077\bin\x64\powrprof.dll
Cyberpunk 2077\bin\x64\winmm.dll
Cyberpunk 2077\bin\x64\version.dll
Cyberpunk 2077\engine\config
Cyberpunk 2077\engine\tools
Cyberpunk 2077\r6\cache
Cyberpunk 2077\r6\config
Cyberpunk 2077\r6\inputs
Cyberpunk 2077\V2077
rm ./bin/x64/d3d11.dll
rm ./bin/x64/global.ini
rm ./bin/x64/powrprof.dll
rm ./bin/x64/winmm.dll
rm ./bin/x64/version.dll
rm ./engine/config
rm ./engine/tools/*
rm ./red4ext
rm ./r6/cache
rm ./r6/config
rm ./r6/inputs
rm ./V2077

mv ./r6/cache/final.redscripts.bk ./r6/cache/final.redscripts
Windows
.NET Desktop Runtime
Visual C++ Redistributable 2022
direct download
core mods
Redscript
Red4ext
Cyber Engine Tweaks
ArchiveXL
TweakXL
here
I don't wanna debug, I just want mods!
There was a game update and now your mods aren't working
Your game is crashing
During a quest in a car chase
it's not even starting
Corrupt or missing script files
Corrupted archives
before the menu
when loading a save / starting a game
randomly during gameplay
Redscript Compilation Failed (Popup message)
You're on Linux
You have trouble with your pirated game
Photomode screenshots are borked
Press [none] to continue
You have audio issues
You have trouble with CET (Cyber Engine Tweaks)
You forgot your CET keybind
XML Document parsed with errors
You installed a mod, but it's not doing anything
Known problem children
Bisect
Log files
Something with files or ACCESS_VIOLATION
This is a waste of time, I'm reinstalling
Modding a clean install
here
Eye Exposure Adaption
here
here
here
Something something files
Your game isn't starting
here
here
disable CET
Crash before menu
here
here
bisect
bisect
to a clean state
temporarily disabling
bisect section
launch options
resetting redscript
troubleshoot redscript directly
temporarily disable all mods
bisect
Too many mods
Message: Failed to initialize scripts data!
Steam file verification loop
.NET Desktop Runtime
Visual C++ Redistributable 2022
direct download
Discord
have them all up-to-date
Let There Be Flight
In-World Navigation
Vehicle Combat
Mod Settings
Native Settings UI
Cyber Engine Tweaks
ctdhelper
here
this script
github repository
here
skip to the next section
below
the next section
There Be Flight
bisect
here
enabled mods
cookedapps nulled
material override
check the next section
Vortex
cyber engine tweaks itself
a dependent mod
general troubleshooting steps
Cyber Engine Tweaks (CET)
a CET mod or script
Deploying Mods and Starting Game
requirements
core frameworks
check their log files
here's a guide how
Discord
Visual C Redistributable 2022
direct download
read-only
log files
Discord
CDPR's own troubleshooting guide
this script
script
back up your mods and scripts
back up your mods and scripts
CDPR's support page
here
at the very beginning of this guide
installing the frameworks
bisect
framework page
dependencies
corresponding section of this guide.
cybercmd
log files
Discord
Discord
dependencies
core mods
here
Discord
bisecting
backed up
bisect
Discord
Windows Explorer
system console
system console
Windows Explorer
this guide
to the start of the guide
Codeware
the next step
Codeware
github
Nexus
github
Nexus
here
Starting from Scratch
documentation
Input Loader
Reset the Redscript cache
in the next section
here
Nexus
github
github repository
Step 5
reinstall the game
bisecting
Remove RedScript
manual
bisection method
bisection method
bisection method
resetting RedScript
Nexus
troubleshooting
nuclear
file permissions
REDprelauncher.exe
update the Windows stuff
install the core frameworks
modding discord
point 5
Dealing with a broken mod
modding discord
Check the log files
log file
Notepad++
nil access error in lua
WolvenKit
Creative Commons, Credit: Tom Briskey
Your error message

File Formats

All inclusive list of REDengine file formats

Created by @manavortex Published April 10 2023 Game version: 1.6.1_DLSS

For an exhaustive list, see the W2RC File Format Table.

.app (Appearance definition)

This file contains a list of appearances with their associated components. To load them, you require a root entity .ent.

Holds a list of components.

.ent (Entity)

Root entity

The entry point for the game to display an NPC or prop. This kind of entity usually doesn't have components by itself, but only points towards the .app file where they are defined.

From ArchiveXL item additions, this kind of file is usually called a root entity.

Mesh entity / Component entity

For player items, an .ent file can serve as a wrapper, splitting components out of the .app file by putting them in their own file.

Components

Not a file type but an internal data structure and part of .ent or .app files. Components are how the game adds anything to the in-game world, from pag3d data over player interaction prompts to explosion sounds.

.inkatlas (Texture mapping)

.mesh (3d object)

A 3d object, holding appearances, materials, and rigging.

A mesh can have several submeshes, which can be displayed or hidden via chunkmasks.

.mi / .mt / .remt

A material definition for a shader. You can assign those to CMaterialInstance entries in your mesh and then define their qualities by changing their parameters.

For further detes on materials, see here. For an explanation on .mi files, see here.

Relevant properties:

Different per material — see parameters/[2] for a list of properties

e.g. BaseColor, Metalness, NormalStrength or VectorField, FresnelColor, Albedo

.streaingsector (world data

This file holds world environment information and -properties. Due to its complexity, information is grouped on its sub-page.

.xbm (Texture)

A regular texture file. Can be exported to .png via WolvenKit, edited, and imported back into the game.

If you stick to the game's naming schema, Wolvenkit will auto-detect the right import settings for you.

Normal maps

Can be either blue or yellow (inverted), both exists. For a guide how to make your own, see here.

Cyberpunk normal maps are swizzled (a technique originally employed in DTX-5).

  • The red channel stores the X axis

  • The green channel stores the Y axis

  • The blue channel is empty, since the Z-data will be calculated from red and blue.

Relevant properties:

IsGamma

Override in-game gamma (lighting)? - Set to "false" for normals - Set to "true" for diffuse/albedo and any parts of the UI

W2RC File Format Table

Extension
Description
Fully Parsed

Animation

Audio

Pathfinding/AI

Animation graph

Animation data

Mesh appearance configurations

?

Terrain related

?

?

?

?

Bink video

Bink video

Camera curve preset

?

Character editor preset

Minimap

Quest related

Cutscene related

See mlsetup

See anims

See app

Configuration for credits

6-sided cube texture

?

?

?

?

Entity

Environment definition

?

?

?

?

?

?

Font

Foliage brush

Destructible foliage element

?

Game main configuration file

?

?

?

?

?

Hair profile

?

UI animation

UI texture atlas

UI character related

UI font

UI

UI settings

UI

UI

UI

UI

UI

UI

UI

UI

Quest info

Quest info

?

?

?

?

?

?

?

?

Pins on map

Mesh/model

Instanced external shaders/materials

Masks for multilayer supershader

Setup file for multilayer supershader

Template file for multilayer supershader

Blend shapes/shape keys

Base shader

navmesh

AI navigation meshes

?

Audio

Audio

Particles

Nvidia PhysX related

Nvidia PhysX related

Nvidia PhysX related

Point of Interest Map pin

?

Quest

Quest progression

regionset

?

Similar to mt, difference is unclear

Resource list

Rig/skeleton for animation

Cutscene

Cutscene versioning

?

?

Skin profile

?

Terrain

The world in manageable pieces

Terrain

Links all the sectors

Terrain

Multiple textures

?

?

?

Leftover mesh file with RED3 extension

Leftover mi file with RED3 extension

?

Texture

Texture

Generic Format

<explanation>

Generic FIle Format Table

Extension
Description

Standard CSV file

Audio file

Archive Format

File Structure

Name
Type/Size
Info

Header

See below.

Custom Data

WolvenKit only. See below.

Files

data

Raw file data

File List

See below.

Header

Name
Type/Size
Info

Magic

char[4]

Constant: "RDAR"

Version

uint32

Currently 12

IndexPosition

uint64

Offset of beginning of file list

IndexSize

uint32

Size of file list

DebugPosition

uint64

Always 0

DebugSize

uint32

Always 0

Filesize

uint64

Size of file (excluding Filesize)

CustomDataLength

uint32

WolvenKit only

Custom Data (WolvenKit)

The following data only applies for archives created with WolvenKit

Name
Type/Size
Info

Magic

char[4]

Constant: "LXRS"

Version

uint32

Currently 1

Size

int32

Size of uncompressed data

ZSize

int32

Size of compressed data

PathCount

int32

Number of custom paths

PathStrings

zstring[PathCount]

Custom file paths

File List

Name
Type/Size
Info

FileTableOffset

uint32

Always 8

FileTableSize

uint32

CRC

uint64

Checksum of ???

FileEntryCount

uint32

Number of files

FileSegmentCount

uint32

Number of file segments

ResourceDependencyCount

uint32

Number of resource dependencies

FileRecords

[FileEntryCount]

See below.

FileSegments

[FileSegmentCount]

See below.

ResourceDependencies

uint64[ResourceDependencyCount]

File Record

Name
Type/Size
Info

NameHash64

uint64

FNV1A64 hash of the filename

Timestamp

int64

Windows filetime of file creation

NumInlineBufferSegments

uint32

Number of inline buffers

SegmentsStart

uint32

Index of the first

SegmentsEnd

uint32

Index of the last

ResourceDependenciesStart

uint32

Index of the first resource dependency

ResourceDependenciesEnd

uint32

Index of the last resource dependency

SHA1Hash

uint8[20]

SHA1 hash of the file

File Segment

Name
Type/Size
Info

Offset

uint64

Offset of the data

ZSize

uint32

Size of compressed data

Size

uint32

Size of uncompressed data

Appearance: .app files
Entity: .ent files
Components
The whole world: .streamingsector
actionanimdb
acousticdata
aiarch
animgraph
anims
app
archetypes
areas
audio_metadata
audiovehcurveset
behavior
bikecurveset
bk2
bnk
camcurveset
cfoliage
charcustpreset
cminimap
community
conversations
cooked_mlsetup
cooked_anims
cookedapp
credits
cubemap
curveset
devices
dtex
effect
ent
env
envparam
envprobe
es
facialcustom
facialsetup
fb2tl
fnt
folbrush
foldest
fp
gamedef
garmentlayerparams
genericanimdb
gidata
gradient
hitrepresentation
hp
ies
inkanim
inkatlas
inkcharcustomization
inkfontfamily
inkfullscreencomposition
inkgamesettings
inkhud
inklayers
inkmenu
inkshapecollection
inkstyle
inktypography
inkwidget
interaction
journal
journaldesc
lane_connections
lane_polygons
lane_spots
lights
lipmap
location
locopaths
loot
mappins
mesh
mi
mlmask
mlsetup
mltemplate
morphtarget
mt
null_areas
opusinfo
opuspak
particle
phys
physicalscene
physmatlib
poimappins
psrep
quest
questphase
remt
reslist
rig
scene
scenesversions
smartobject
smartobjects
sp
spatial_representation
streamingquerydata
streamingsector
streamingsector_inplace
streamingworld
terrainsetup
texarray
traffic_collisions
traffic_persistent
voicetags
w2mesh
w2mi
workspot
xbm
xcube
csv
wem
Header
specification of Header
Custom Data
specification of custom data
File List
specification of file list
File Record
specification of file record
File Segment
specification of file segment
file segment
file segment