In Hogwarts Legacy most elements of a character's appearance (face, hair, clothing etc) are controlled via a Data Asset
. If you want to change how a character looks, you need to edit that character's Data Asset
. Unfortunately, as with most assets in this game, the Data Assets
that shipped with the game have been “cooked”. Cooked assets can't be edited. To edit a Data Asset
you must therefore recreate it from scratch, and then edit the one you created. The good news is that (unlike most cooked assets) all the information we need to recreate the Data Asset
still exists in the cooked file. We can view this information using FModel
and import it into a blank Data Asset
using JSON2DA
. This guide will walk you through that process. I'll be changing the way Poppy Sweeting looks, as an example.
You'll need this later. Detailed installation instructions can be found here. If I'm honest, installing this is probably the hardest part of the whole process. Tips:
We'll need FModel
. If you don't have it, install it as follows:
FModel
from here: https://github.com/LongerWarrior/FModel/releases/tag/HW_1.0.0.0FModel.exe
to reside. Anywhere is fine.FModel.exe
to run it.Directory Selector / Instruction
window should appear:Steam\SteamApps\commmon\Hogwarts Legacy\Phoenix\Content\Paks
folder. Mine's in D:\Games
but yours may be elsewhere.FModel
should open. The pakchunk-*
files are the game files. The others are mods. Note that only cooked mods (the ones with a .pak
, .utoc
and .ucas
file) can be examined with FModel
.Settings > General > MapStructTypes
.If you get the following error (or the English version of it) while using FModel
:
Fix it by placing the following file in your Fmodel\Output\.data\
folder:
You'll need the Custom Engine installed before you do this. Then:
Code
then Download ZIP
:PhoenixUProj\Content\
folder.Json2DA-master
to Python
(or move the contents to the Python
folder if it already exists).Data Assets
are stored in various places within the game folders, depending on what they are. Here's how to find them:
FModel
.Loading Mode
= ALL
and hit Load
. You should now see:Phoenix
folder is the original game folder. The phoenix
folder is where some mods end up. Consider them to be the same. It doesn't seem to make any difference to how the game runs. The >
symbol means that each folder contains sub-folders. The tiny numbers on the icons indicate that this particular folder contains some assets. Assets in sub-folders are not included in this number.SHIFT-CTRL-F
.Search View
window will appear. This is how you search for assets. (Note that you must have the Folders
tab in the top left selected for this search to work.)Data Assets
start with DA_
so type DA_
and hit return. You should see:DA_
.DA_ PoppySweeting
:DA_NPC_YF_PoppySweeting_Master.uasset
:FModel
has displayed the information available from inside the asset. It's not much. But there are entries for DefaultMesh
and FacialPoseAsset
.3D Viewer
window will appear:3D Viewer
window, click the Folders
tab, and hit SHIFT-CTRL-F
again. Our previous search results should reappear. Double click on the bottom one, Phoenix/Content/Data/CC/Student/DA_PoppySweeting.uasset
, this time. You should see:DA_PoppySweeting.uasset
we need to double-click it:Class
is Customizable Character Definition
. (Remember that we'll need it later.)FEMALE
, and her Scale
(i.e. height compared to the average for people her age) as 0.929593. So she's petite. You can change that later if you like. 🙂Head
Character Piece
to be the skeletal mesh Data Asset
which we were just looking at, followed by some Scalar Overrides
to do with skin surface properties and eye size.Vector Overrides
(i.e. colours) for hair, eyes and makeup.Hair
Character Piece
and an Outfit
Upper
Character Piece
. (There's no Lower
because Poppy is wearing a full-length Upper
outfit.)Data Asset
we'll need to recreate and edit, if we want to change the way Poppy looks.Data Asset
is in folder Phoenix/Content/Data/CC/Student
.Data Assets
for the professors are in Phoenix/Content/Data/CC/Professor
, prefects are in Phoenix/Content/Data/CC/Prefects
, un-named students are in Phoenix/Content/Data/CC/T3Student
, etc.The process to re-create Poppy's Data Asset
will be as follows:
Data Asset
in the Custom Engine.Data Asset
.Let's do it!
phoenix.uproject
:Fmodel
that we need to create an empty Data Asset
called DA_PoppySweeting
(don't worry about the .uasset
part - the game will add that) in folder Data/CC/Student
.Data
folder, so we'll need to create it. Right click on the Content
folder and select New Folder
:Data
. Inside there create another folder called CC
and inside there another called Student
.Miscellaneous
> Data Asset
:Customizable
in the search field, choose Customizable Character Definition
(the Class
we remember from earlier), and hit Select
:DA_PoppySweeting
:This is the clever bit. Proceed as follows:
Scripted Actions
> Import JSON
:FModel
which should still be showing our DA_PoppySweeting
Data Asset
:CTRL-a
to select all the text and CTRL-c
to copy it:OK
.Data Asset
, but it will also create Dummies
of all the assets that the Data Asset
depends on! Brilliant! Thanks, Tangerie!Data Asset
to see how it looks now:Head
to expand that heading:Head
Character Piece
has been filled-in and points to a new Dummy Asset
called DA_NPC_YF_PoppySweeting_Master
.None
that would mean that something went wrong, the Dummy Asset
is missing and your Data Asset
won't work. Go back and review what you did.Hair
heading:Head
's Scalar Overrides
or Vector Overrides
:Please note that at present JSON2DA DOES NOT WORK with CharacterPiece
Data Asset's.
This is because JSON2DA is not able to create dummy assets for Skeletal Meshes, so it fails at that point in the DA
and the rest of the DA
will be missing.
In general this will not be a problem because you'll be using the DA
that refers to the CharacterPiece
as a dummy asset, so it doesn't matter what's inside it. But if you need to make any changes to it (like changing the Head
mesh in a Head
DA
) then you need the contents to be correct because you'll have to pakchunk it.
For example, if you run JSON2DA on a Head
DA
(e.g. Sebastian's head: DA_NPC_YM_SebastianSallow_Master
) you'll get:
The items in green are correct. The two in red are not. These must be set manually. Check the original DA
using FModel to see what you need to put in there. In Seb's case:
RiggedObjects/Characters/Human/Heads/NPC_YM_SebastianSallow/NPC_YM_SebastienSallow_Master
.RiggedObjects/Characters/Human/Heads/Young_M/Facial/SK_Young_M_Head_Master_Facial_Anim_PoseAsset
.If you've edited the skeletal mesh for the head (because you're doing a face mod or you've removed the hands) you should use that as the Default Mesh. If not you need to create a dummy. I don't know how to do that for skeletal meshes so just use the one below and rename it as required. You'll be using it as a dummy asset so it should not be given a pakchunk.
For the Facial Pose Asset use the one below (which also should not be pakchunked):
The final Head
DA
should look like this:
Please note that at present JSON2DA DOES NOT WORK if the Data Asset contains TAGs.
If the Data Asset you are trying to recreate has TAGs you will need to paste the JSON into a file, edit the JSON to remove the TAGs, paste the edited JSON into your DA, then add the TAG's to your DA manually by double-clicking the DA to edit it in the Custom Engine.
So that's it. That's how you use JSON2DA to create a Data Asset
. You're now ready to start changing it. But we'll cover that in a separate tutorial.