The Dark Pictures Anthology: House of Ashes

I have updated this tutorial to cover new things I have learned about modding this series, which may also enhance your mods in the end.

I assume you know the basics of rigging and modding because that's what you will need for this tutorial, which might be a bit cryptic. I'm not really good at explaining things but I'll do my best.
 
This tutorial will take House of Ashes as reference but Little Hope and Man of Medan, even Devil In Me can be modded in the same way.

Model Preparation:
 
You can extract models from ingame in PSK-Format by using UModel(keep morph targets off, when browsing for the pak files. The tool will crash when viewing models if not done beforehand).
(Unless your model turns into an monstrosity after being ported. Then you need to apply a different character's armature.)

You will need the ACL-Version of UModel to extract models from Devil In Me and the updated versions of Man of Medan and Little Hope. House of Ashes can still be used with the normal UModel-Version!


Unfortunately the facial physics of the anthology are based on the morph targets, so you will get limited possibilites for custom faces I'm afraid.
 
For making the custom models work I use Blender. I can't provide support for 3DS Max unfortunately, since I never used it as much as I had used Blender.
 
With a certain PSK Import-Plugin for Blender you will be able to import the extracted base models of the game. Google shall help you.
 
In order to make custom models work with the game, rig and pose them by using the other mesh as base(I recommend the pose mode from the CATS-Plugin for this).
 
(You don't have to transfer weights, just rename the bones of the rig of your custom mesh exactly the same as the base mesh, trust me...this is from my pov the best unnerving way to deal with weighting issues)
 
Speaking of which, once you get the bones renamed(if there are any bones you don't need, for example twist bones, merge their weights using CATS to their parents), you need to match the scale of the model (delete the base mesh and reimport it, untick scale down and change Scene Units to 0.001 before scaling your custom mesh. It should be enough to size by 100, just hit S on your mesh and type 100, that'll do)
 
Once you scaled the mesh, look if it aligns well enough with the base mesh, then apply Rotation & Scale + Location (CTRL+A in Object Mode) and merge the custom mesh by holding SHIFT and dragging it over to the base armature, delete the base mesh of that armature itself beforehand. Then add "Armature Deformation" by clicking the mesh and then shift-clicking the armature before hitting CTRL+P(just click on the entry with the same name, when merging mesh with armature, nothing with empty deforms or such)
 
This should make your model posable and rigged appropriately for the game's animations. Test it out with CATS-Pose Mode to verify that the limbs move. If they do not move, you may have done something wrong. 

ATTENTION: Some base models have faulty skeletons that turn your custom mesh ingame into a monstrosity, when using those to merge with the custom mesh. You can use the skeletons of other characters instead, since everyone shares the exact same BodySkeleton or HeadSkeleton

I noticed this behaviour with those base meshes. Others may also be affected but most of the protagonists bases should work fine for this:

  • Brad (Man of Medan, old version. Not confirmed in updated version yet)
  • Balathu (House of Ashes, I can vaguely remember that using his armature for Devil In Me messed the mesh's skeleton up. It also needs to be confirmed)
  • Du'Met (Devil In Me)

Keep in mind, that you can reuse the armatures for newer or even older entries of the series. Meaning if you for example already applied a custom mesh to John's Armature from Little Hope, you don't have to re-rig it for House of Ashes to Balathu. Rigging your custom mesh for one game of the series allows it to be easily ported to the other entries.
 
Now the only thing you need to is rename your mesh exactly the same as the base mesh (like when the base mesh was called EricStandardBody.mo, then your mesh has to be called the same, don't forget the mesh data, it's named the same as the base mesh, only with .md at the end instead of .mo, you can ignore the material here) 

(This step is not necessary, since you do the renaming in UE4 anyway, so you can skip this in Blender)

Dynamic Material System:

ATTENTION: Follow these steps to allow your mesh's appearance to dynamically change materials ingame without texture loss (This method fully works with the games after Man of Medan, latter bugs out when trying to use DMS with custom bodies, head works fine):

The reason why you have to do this is because the models of the ingame characters change their textures without changing their mesh except for certain states where a different mesh is used(like ImpaledEyes-Meshes for the heads). They also change which appearance they are using once that happens so it won't help to just provide extra textures of the same material for the changed body states in UE4. You need to modify your mesh to copy the base mesh's material map. You don't have to fully copy it(for head it is necessary to make it work). The "Standard" Body is used for the majority of the game, actually the whole time. For example if your replacement character is replacing the "Standard"-Appearance of your base character, it may look fine in the beginning but after The Raid-Chapter and beyond, the textures will get messed up.

Nick for example uses the Standard-Appearance for the beginning chapters except The Briefing, when talking to Rachel but changes to Dirty after The Raid. Most of the other characters share this change.

You will need UAssetGUI/UModel for this. You must check, which index position the material you want to swap to of your base character is at. Let's take Torso_Mat as example (For Nick it will be the first position, which will make this really easy. But anyone besides that may have their Torso_Mat located on different indexes. Eric for example is one of them.)

You can decide for yourself, which material you want to swap to but I recommend using the Torso_Mat, since it appears to be the most used material in the game for most appearances like death states.

It doesn't matter which material you are using in your StandardBody mesh, you just have to pay attention to NOT use the same one for the material swaps except if it's the material on the first index position, in that case you're free to go.

This does not apply to custom heads. You need to copy the whole material map for those. The appearance is changing correctly through the chosen material.

If Torso_Mat or the material you want to swap to is not on the first position, continue from here. You can skip to the export process now if it does

Now, you have two ways of checking the index position.

Pay attention to it's position in either UModel by looking at the material order or by checking the Material Container in UAssetGUI and add dummy meshes with their very own assigned materials(which are hidden inside your mesh, scaled to make them mostly invisible and 100% weight painted to the hips bone for body, head for heads) to your mesh, merging those with your own mesh in the process (DO NOT HIT CTRL+J, THIS WILL MESS UP YOUR UV MAP. USE THE JOIN SELECTED MESHES-OPTION FROM CATS INSTEAD!)

After doing this, you need to reapply Armature Deformation because in Pose Mode you will notice that the mesh doesn't move with the armature anymore after merging the other parts.

CAREFUL: Sometimes the order in UModel can be misleading(you can confirm that if you did copy the material order from UModel but still find, that not your desired texture is not used in the swap). To confirm the right position, check the Enums of the MaterialVariationDescriptions with UAssetGUI to be safe. Pay attention that the material index postion count from 0 than from 1

You can rename your mesh if you want. Joining the meshes through CATS automatically renames your body mesh to "Body"

Arrange the materials so that the material you wish to use for the Standard Appearance is one step below the position of the material you want to swap to. If for example Torso_Mat is your swap material for the Dirty Appearance and it is on the 3rd position, put yours on the 4th, so that your mesh changes to Torso_Mat, once the appearance changes.

(Be careful, UE4 counts from 0 and not from 1, when it comes to the material indexes)

Apparently the game for some reason goes a step up inside the material map, when switching the appearance states for custom meshes. That's how I encountered it at least.

---

Model Export
 
Once that is done, select both your mesh and armature and export your model as FBX. Use the following settings while exporting:
 
-Tick "Selected Objects" under "Limit to"
 
Transform Settings:
 
Scale = 1.00
Apply Settings = All Local
Forward = -Z Forward
Up = Y Up
 
Tick "Apply Unit" and "Use Space Transform" (Make sure your scene units are still set to 0.01)
 
Geometry:
 
Smoothing = Face
Untick everything else under that category
 
Armature:
 
Primary BoneY Axis
Secondary BoneX Axis
Armature FBXN...(if existing) = Null
Untick everything else under that category

(Credits go to Irastris from ToastedShoes' Modding Empire Discord Server for telling me these settings)
 
Now the fun part comes. Bringing the custom model into the game.
 
For this you need Unreal Engine itself or to be precise the Unreal Editor (You need 4.26.2, better check the engine version in the game's executable settings to be safe)
 
You need to build up the same folder structure like the original model uses from the Content folder onwards. You can check the folder structure by viewing the pak files(Content/Paks) in UModel

In Rachel's example the folder structure schould look like this
(example: Game(Content) -> Characters -> Models -> Rachel)
 
If your model should replace Rachel's Standard Outfit, use the "Standard" folder in the folder Rachel.
 
Once the folder hierarchy is set up, import your mesh into your project first by dragging the FBX-File into UE4. Make sure to include materials + textures and the skeleton(it's a skeletal mesh). If you applied textures beforehand in Blender, they shall automatically be imported along the mesh. If not, import them by hand. Make sure the skeleton is also visible after the import. You won't need the Physics Asset since it's only used for "ragdoll physics" and I never saw a point in the game where these were used.

Now you need to place the files, where they need to be according the folder structure of the game.
 
And you also need to rename the files accordingly so that they will replace, what you want to be replaced. Let's say we want Rachel's Standard Body to be replaced, in that case rename the custom body mesh to RachelStandardBody and place it in (Characters/Models/Rachel/Body/Standard)
 
The skeleton itself needs to be renamed to BodySkeleton and placed into (Characters/Models/Skeletons). Every character ingame shares the same skeleton.

To use custom heads, import your Head's FBX file, rename the skeleton to HeadSkeleton and place it in the same place as the BodySkeleton. Create an Animation Blueprint using the HeadSkeleton inside (Characters/Models/AnimBlueprints) named PostProcessHeadAnimBlueprint and assign it to your head. This will animate it ingame because without it, it will either stay static and not move or not even be displayed at all, like it happened to me mostly.

If your custom head replaces Rachel's, place it into (Characters/Models/Rachel/Head/Standard)
 
Create the folders Materials and Textures in the Standard Folder for Rachel.

Sometimes the Standard Appearance or others may have the Materials and Textures-Folder name differently like "Texture" for the textures etc. Check your extracted character base files to verify. Failure in paying attention to it will lead to your textures ignored by the game.
 
Put your material into Materials and rename it to the material you want to use from the game. This is important if your mesh consists of multiple parts, using seperate materials. You can't use custom materials at this point in time. If it only uses one material, then it'll be less tedious.

You only need to do this for the Standard Appearance and if you want to view the different appearances from the Unreal Editor. For the other appearances like Dirty you can just leave textures and it will be enough for the game to display the model correctly.

Using only one material for a custom character is recommended to not make the dynamic material system too confusing to deal with.
 
Once you renamed the material, make sure the textures are assigned (rename your diffuse and normal textures to *MaterialName*_BC and *MaterialName*_BN)

Now for the dynamic material system pay attention to which apperances of the StandardBody you want to replace the Torso_Mat is included in the Materials-Folders and thus called by the changed appearance. For every state affected you have to create the corresponding folder.

You can now either modify your textures(like I do most of the time) to reflect the many injuries or death states of the characters ingame from your own mesh or copy your standard textures to avoid the wrong one being applied.

To use your standard textures for the other appearances, you just need to copy your textures from the "Standard"-Variant and rename them to be used by the Torso_Mat.

If your Standard Appearance calls Jacket-Mat from Nick for example and uses Torso_Mat for the others, you need to rename Jacket_BC and Jacket_BN to Torso_BC and Torso_BN for the Dirty Appearance for example after copying them to the other appearance's Textures Folders.
 
Make sure the Standard appearance has the material applied. Failure in doing this will make the model appear blank ingame, since the link to the ingame material is missing.

Once you're ready you only need to turn off Use Pak File and the Share Options in the Packaging Settings of your project and then package the contents.

Check if your built files firstly copy the original file structure and second have NO skeletons, materials and also AnimBlueprints for Custom Heads present before importing them into your game. You can ensure this by editing your UE4 Project Settings to never cook these folders. This way they won't be packaged. 
 
This way your mesh will be tricked into using the original files from the game, which is exactly what you want to do since your custom mesh is linked to those because of your actions in UE4.

Your mod folder should start with it's custom name, then with SMG025(depends on game) in it's root folder and then you can insert the Content-Folder of your packaged files from UE4 into it. 

In short: %ModName%/SMG025/Content <- import your project's packaged files here

SMG025 stands for House of Ashes' Game Folder inside the game's root folder when browsing the local files through Steam. Some UE4 Games could use Game here like displayed in UModel but some games are developed with a certain codename. In that case it is SMG025.

Before moving on, check if your mod is for Man of Medan, Little Hope, or The Devil In Me. In case it does you need to run your meshes UAsset Files through this fix to avoid a serialization error ingame while loading. Just drag them onto the EXE. You will notice it worked if the time of change of your file changes.

Only do this for Skeletal Meshes! If you happen to drag your Blank Meshes or Static Meshes through the fix, you will cause the Serialization Error ingame. It happened to me before that I accidentally pulled the false mesh type through the fix and when I tested Trapper in The Devil In Me, the game crashed at the Dinner-Chapter.

For House of Ashes this fix isn't needed.

Credits for the fix go to kboykboy, one of the members from ToastedShoes' Modding Empire Discord Server.

Unnecessary overlay textures: 

Some materials you want to use(like Trousers_Mat from John) can call overlay textures(like Stitches or Cotton) from the game's files which can mess with your mesh's textures if not deactivated. This is mostly noticeable in House of Ashes if your body is still using the "Standard"-Appearance and hasn't changed it yet. However even other appearances can call these overlay textures like DuMet in The Devil In Me. To deactivate those, open the affected material in UAssetGUI and change the file paths inside the Import Map, so that the material can't find these textures(I recommend just changing the original file names from example Stitches_STBC -> Stitches_STBC_off). Don't worry, they can still be called by the unmodified characters. Include that modified material in your built mod files to apply the changes.

WARNING: Do not disable the following textures inside the Import Map! Doing so displays your model completely white. I encountered this situation when porting Ryder Odison to Devil In Me and experimenting with the file paths inside the material's Import Map.

  • STTM Textures(like Stitches_STTM) (replace it with a complete black texture instead)
  • Head_CM1 -> Head_CM3 (same for Head_WM) (duplicate your head textures for these. Use Diffuse(BC) for CM and Normal(BN) for WM)

You can use the same method to redirect certain textures to be called from elsewhere instead(Example: Your custom mesh comes with a custom eye texture, which can unintentionally be used by other characters.). In that case you can create a new folder in your Content-Folder and redirect to that folder including the new texture from UAssetGUI, so the material loads the Eye-Texture from there instead. (This only works if the affected material is not directly called by other characters) (This might also open up the opportunity to use custom texture file names but does not allow the usage of custom materials)

Let's say if Eric is the one you want to replace and he shares Nick's Eye-Texture in his very own Eye_Mat, then you need to redirect Eric's Eye_Mat to call the custom Eye_BC from a different location instead of calling it from Nick's textures to avoid the custom eye being unintentionally applied to Nick.

So for every appearance open the Material's UAsset File from the character base files in UAssetGUI and with the instructions above disable the uncessary overlay textures or redirect certain ones if necessary(because of the eye texture issue). Save the modified materials into their own Materials-Folders inside your mod's built files.

Example: You modified the Torso_Mat for the Dirty Appearance. Place it into %ModName%/SMG025/Content/Characters/Models/%CharacterName%/Body/Dirty/Materials

Now you should be ready to import the mod into your game!
 
You can decide to use the files for the unpacked version of the game, which just involves replacing the files in the unpacked files(not recommended) OR packing them into their own PAK file(recommended) which is firstly pretty convenient and can save you much troubles of the unpacked version, since those PAKS will work with the original packed version of the game and won't cause long loading times since unpacked UE4 Games tend to obviously load slower since the files are bigger when unpacked.

I recommend the second method because it keeps your game clean and makes mod toggling very easy. You can use the first for testing but if you do, make sure to keep backups of the files you are replacing(to be extra sure, backup the whole folder of the character to be replaced)

To pack your mod for usage in the game's original packed versions use Fluffy's UnrealPak tool to pack your mod into it's own PAK-File. 
 
Move the %ModName%-Folder and drag it into one of the BAT-Files that Fluffy has provided for packing.

You can either use the "uncompressed"-version or the "compressed"-version. Both will do the same thing but with few differences.

Using the "compressed"-version will reduce the file size of your final PAK-File but will also increase the packing time depending on how many files you have stored. This is recommended for larger mods and thus better if you want to keep your downloads small if you plan to upload your mods on Nexus or somewhere else. Keep in mind that packing your PAKs into RAR-Files after this further decreases the total file size.

Mod Installation
 
With your fresh made PAK-File in hand, place it into SMG025/Content/Paks/~mods -> create this folder, if it doesn't exist.

Disable your PAK-Files by either renaming their file extensions or removing them from the ~mods-Folder.

You can also use Vortex in combination with my own programmed extensions for The Dark Pictures Anthology to manage the PAK-Files in your game. Just import the built PAK-Files through Vortex directly. It will automatically put the PAK into the right place once the mod is activated and deployed. You will however need to enter the mod's information yourself like name description and what type it is
 
After all this is done boot up your game and you should see your custom character's Standard Appearance once you switch to Movie Night Mode Character Selection. For the other appearances you will have to load into a certain chapter through Solo Story Scene Selection to see the result in that occasion.

For example if you wish to see the Dirty Appearance for your Nick-Replacement, you need to load the Theatrical Cut-Chapter Underworld
 
Phew...that was a long explanation I assume but I hope it was of assistance to you.

If you have any questions, leave a comment here or write me a PM on Nexus. If I find spare time to look into it, I will give my best to lend you further assistance.
 
Good luck!

Article information

Added on

Edited on

Written by

Dimenarius

3 comments

  1. theworstgam3r
    theworstgam3r
    • member
    • 0 kudos
    any way to mod music/audio in devil in me wanna turn it into a friday the 13th game so i wanna add the ki ki ki ki ma ma ma in the game but have no idea where to start or how 
  2. ykonline
    ykonline
    • member
    • 4 kudos
    Excuse me , I need your some help.I followed your tutorial and try to make a mod for man of medan. I just use Umodel ACL2.1 to export the psk file, and import it to blender. Without any edition(I only want to test the steps), I export the  armature( both select mesh and armature) as fbx. Then I cooked it in UE4.26.2,and use unrealpak pack it as PAK.
    but when I run the game ,an error message poped up saying Corrupt data found.
    Is there something wrong with my steps?
    thanks!
    1. Dimenarius
      Dimenarius
      • premium
      • 27 kudos
      Either you forgot to exclude the materials in UE4 from cooking, meaning the game would try to load it which is a reason why the game could crash with this error.

      Or you forgot to run your mesh through the fix. (It can happen with the meshes from the game itself as well. I have no idea why)

      Check if you have accidentally built your mod with the materials from Unreal Editor. If this is the case, exclude them. Your model must load the materials from the game's files. It will automatically do so if no material in the mod's files is present.

      Forgetting to run your custom mesh through the fix will cause the serialization error ingame while loading. Man of Medan was updated to The Devil In Me's engine, requiring the fix for custom meshes to work.

      Try and see if these solutions assist you.