Skip to main content

Advanced Guide (Coming Soon)

Tools You Will Need

1) Substance Painter. The most common custom textures created for gun and Slayer skins are emissives, which can only properly be created in Substance Painter.

2) Notepad++. You will need this for both decl modification and JSON creation, which will both be covered.

3) Eternal Extractor. If you have not already run this, it is absolutely essential that you do so now so that you will be able to read the "true" file extensions of the .tga files you will need to use for custom textures.

4) Load Priority List. You can find this txt file in the Doom Modding Hub server to follow along when we discuss how and where to inject custom textures.

Advanced Skin Replacement

In the previous guide, we covered how to replace skins using material2 decl files, but now we will cover the advanced method for doing so, which is cleaner, simpler, and much more effective. Returning to the Hot Rod skin from earlier, we will ignore the material2 files under the assumption that, for now, you are merely replacing pre-existing textures.

Instead, go to this file in your extracted resources:

warehouse/generated/decls/warehouseitem/weapon_skin/combatshotgun/combatshotgun_skin_hotrod.decl

This is what we will call a 'warehouseitem' decl after the name of the folder. What does this do? It declares to the game what 'gameitem' decl file it will use for each skin listing on the customization menu. What is a gameitem file? A gameitem file declares to the game what model--enumerated for each individual part of the model--it will use for the skin that corresponds to that gameitem. It pairs with the md6def decl, which declares what each model is. However, it is not necessary to modify the gameitem or md6def files for this purpose. Via this new method, only the warehouseitem file will be necessary. Returning to the Hot Rod warehouseitem decl file, opening it in Notepad++ will show you this text:

{
edit = {
warehouseItemClass = "WIC_WEAPON_SKIN";
clientAwarded = true;
qualityTier = "QUALITY_TIER_1";
displayName = "#str_decl_cosmetic_slayer_skin_praetor_name_GHOST70738";
description = "#str_decl_cosmetic_customization_milestone_item_description_GHOST67788";
icon = "textures/guis/icons/weapons/simple/shotgun";
targetWeapon = "weapon/player/shotgun";
gameItem = "weapon_skin/combatshotgun/combatshotgun_skin_hotrod";
}
}

Unlike the material2 decls, almost all of these lines are relevant, including the most advanced touches for really giving your skins a unique flair. For now, however, we will focus on the final 'gameItem' line. Using this method, you can replace a campaign unlock skin in either warehouse or common, but for the sake of consistency, we will replace the Shotgun Praetor skin, which is located here:

gameresources/generated/decls/warehouseitem/weapon_skin/weapon_skin_milestone_master_combat_shotgun.decl

Opening this file, if you look at the same gameItem line, you will see this:

gameItem = "weapon_skin/weapon_skin_milestone_master_combat_shotgun";

The easiest way of thinking about this is that the gameItem line essentially assigns which skin (and model) to which to each menu entry. So, with your custom skin already replacing the textures for Hot Rod, you simply need to copy the gameItem line from the Praetor warehouseitem decl and paste it into the Hot Rod warehouseitem decl, resulting in this:

{
edit = {
warehouseItemClass = "WIC_WEAPON_SKIN";
clientAwarded = true;
qualityTier = "QUALITY_TIER_1";
displayName = "#str_decl_cosmetic_slayer_skin_praetor_name_GHOST70738";
description = "#str_decl_cosmetic_customization_milestone_item_description_GHOST67788";
icon = "textures/guis/icons/weapons/simple/shotgun";
targetWeapon = "weapon/player/shotgun";
gameItem = "weapon_skin/weapon_skin_milestone_master_combat_shotgun";
}
}

Add this file and its folder path listed above to your mod and, when injected, you will have the same result as before in a much simpler and more streamlined fashion. However, your skin will still be replacing both Hot Rod and Praetor. Unlike before, however, there is a solution to this when using this method. All you have to do is copy the gameItem line from the Hot Rod warehouseitem file and paste it over the gameItem line of the Praetor warehouseitem file. Adding this decl file and its folder path to your Mod will now cause the Praetor skin to replace Hot Rod, which will result in the player having both the Praetor skin and your custom skin. So why, if this method is much simpler, was it saved for the Advanced Guide? Well, that's because there is a lot more you can do with the warehouseitem decl file, which we will now discuss.

Custom Skin Names and Quality Tiers

Let's say you made a really cool glowing read and orange glowing Shotgun. You spent a lot of time getting the metal textures and the emissives just right so that the whole thing looks like superheated steel. After all that effort, you've decided to call this the "Forge Steel Shotgun." But what if, instead of just listing it on your mod page with that name and naming the zip file as such, you could actually have it listed in the game as the Forge Steel Shotgun? Well, that's exactly what you can do with the method we'll now go through.

Referring back to the Praetor warehouseitem files, take a look at these two lines:

displayName = "#str_decl_cosmetic_slayer_skin_praetor_name_GHOST70738";
description = "#str_decl_cosmetic_customization_milestone_item_description_GHOST67788";

It is immediately obvious that these two lines are declaring the name and description of the Praetor skin in the Customization menu, but what exactly is going on with the actual text? Well, those items starting with # are strings. Strings, as those familiar with code will already know, are lines of text. Specifically, #str_decl_cosmetic_slayer_skin_praetor_name_GHOST70738 contains the text "Praetor," which is why that is the name displayed on the menu in game. So what are we supposed to do? Export that string and change the text? No. That would be very complicated and time consuming. Instead, we're just going to make up our own strings with these easy steps:

1) Look at the load priority list. As of the current patch (6.4), the library with top priority is gameresources_patch2, so this is where you will put your strings. Regardless of what what library has top priority, you will need to put your strings in whatever it is at the top of the list. If not, the game will not load them. If you do not already have a gameresources_patch2 folder as part of your Mod, create the folder, then, in gameresources_patch2, create the following path:

EternalMod/strings

2) Open Notepad++ and create a new file. Click Language>J>JSON. This is where we will create our new strings.

 

In the JSON file, create this template:

{

"strings": [

"name": "";