Textures can be easily imported at runtime, in a similar way to  recent TES games,  placing files (in .png format) inside StreamingAssets\Textures.


The name of the texture should be archive_record-frame.png, for example 009_1-0.png. If you aren’t familiar with daggerfall naming, the first number is the name of the package where textures are stored (ARCHIVE.XXX, ARCHIVE.009 in our example), the second number indicates this is the n texture of the archive (1 means is the second one), and the third number is the frame, used only for animated billboards. Textures for static models always have frame – 0.

You can also release optional bump maps (archive_record-frame_Normal.png, for example 009_1-0_Normal.png), and if you release textures with illuminated surfaces (like a wall with a window) you need to create emission maps (archive_record-frame_Emission.png). This is not necessary if the emission surface is the whole texture (lamps, etc.).

archive_record-frame_MetallicGloss.png is for MetallicGloss maps, alternatively you can use an xml file to edit Metallic and Smoothness parameters.


<?xml version=”1.0″?>


filename.png (ex: MAP100I0.IMG.png) in StreamingAssets\Textures\Img

Images can also packed in a single .dfmod bundle. Import a texture file (with any format) with the Unity Editor and, if required, set import options. A good choice for this kind of textures is Texture Type: GUI with mipmaps disabled. Remember to set Non Power of 2: None and, if required, enable Alpha is Transparency.

Cif and Rci

filename_record-frame.png (ex: INVE16I0.CIF_3-0.png) in StreamingAssets\Textures\CifRci

CIf and Rci can also be packed into .dfmods. Refer to instructions For Img files above and set texture type to Default or GUI, depending on texture purpose.


Daggerfall UI

Background images

Images used as background in the inventory and charachter window (SCBG0*.IMG) need to be provided without the frame, as the one seen in game is the frame on the main texture for each of the two windows (INFO00I0.IMG and INVE00I0.IMG).

First Person Weapons

Weapons used by the player have several variations for different kinds of metal. Vanilla textures use a color tint to achieve this; when importing custom textures, we use entirely different images.


  • metalTag, original color
  1. Iron, Grey
  2. Steel, Light grey
  3. Chain, Silver
  4. Silver, Silver
  5. Elven,
  6. Dwarven, Yellow
  7. Mithril, Blue
  8. Adamantium, Dark grey
  9. Ebony, Black
  10. Orcish, Green
  11. Daedric, Red

Ex: WEAPON04.CIF_0-0.Png for Iron –> WEAPON04.CIF_0-0_Iron.Png

Some weapons (like hands and feet) don’t have metal type variations, so they use the usual WEAPON**.CIF_Record-Frame.png

Look here for the complete list of weapons.

HUD and UI elements

Certain UI images need additional informations. These are provided using .xml files, each one with the same name as the texture file it refers to and placed in the same folder. width and height parameters affect the size on screen. Here are provided the defaults values, but it’s possible to customize them.

Compass re-texture by Arl

  • HUD Compass

<?xml version=”1.0″?>


<?xml version=”1.0″?>

  • Crosshair
    Crosshair.png and Crosshair.xml in StreamingAssets\Textures

<?xml version=”1.0″?>



Daggerfall Unity UI

Save Manager

It is possible to customize the window interface used to load saves, placing custom textures inside StreamingAssets\Textures.

While it is not required for swapping texture images, it is possible to use xml files to customize the labes of buttons.

  • Change text color

<?xml version=”1.0″?>

  • Remove text (to draw text on texture)

<?xml version=”1.0″?>




Interiors and NPCs

Texture replacement for billboards support animations (you can have as many frames as you want, even more or less than vanilla) and emission maps.

For a simple texture swap, only texture files are needed. They will have the same size as vanilla, regardless of resolution. The dowside is that they need to have the same proportions as the original textures or they’ll look stretched.
But if you want to follow the power of two rule, you can do so if you take care of telling the game how the texture should be displayed on the billboard mesh. Specifically, you need to provide an xml file with the position of the lower-left vertex on the uv map. All frames share the same file.


<?xml version=”1.0″?>

Tipically, you want to avoid wasting texture space, so you only need to write the x or y value and the other will be set to the default value of zero.

If you want to customize the size of the mesh you can do so with the xml file. All frames share the same file. (1:1) means the same size as vanilla, (1:2) has a double height, (0.5:1) is half as wide. If you want to customize only one of the values, you can omit the other one.

<?xml version=”1.0″?>



All textures from an archive (which corresponds to a climate) are placed on a 4096×4096 atlas, so the total size of yout textures must not exceed this value. If you don’t provide the entire archive, imported textures are used together with vanilla without issues.


Each enemy has its own archive, plus a death graphic. When replacing textures, remember to include all of them.





Stone Terrain with albedo and normal map.

It is possible to import albedo, normal and metallicgloss maps for terrain, provided the texture array system is supported on the local platform and enabled (you can check it from the advanced settings window).

It’s important to note that all textures from an archive must be present and they must have the same resolution. For example, you can use 512×512 for albedo and 128×128 for normal, but all the albedo must be 512×512 and so on. MetallicGloss is an exception as a default map for all the missing textures will be created automatically.