Daggerfall stores textures inside archives which contains multiple images. These are either opaque textures shared by meshes (building and a few props) or sprites with transparency, which are used for vegetation, npcs and enemies. Additionally there are other texture files with different formats for UI, weapons and other images.
Daggerfall Unity organize modding support for textures around asset bundles (StreamingAssets/Mods) and loose files (StreamingAssets/Textures), not so differently from modern Bethesda games. Bundles contains materials (for meshes) or individual textures (sprites, ui images). Images in png format are imported from loose files and used to create materials at run time. Xml files can be used for further customization.
- Daggerfall Imaging 2
Opens and exports Daggerfall’s image files.
Materials can be injected with dfmods. Name the material assets archive_record-frame.mat and pack them with the mod builder. An example is 009_1-0. 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.
Alternatively, individual textures can be imported as loose files, from the StreamingAssets/Textures folder. Nomenclature is archive_record-frame.png for albedo and archive_record-frame_MapTag.png for others (for example 009_1-0_Normal.png). Xml files can also be used to edit Metallic and Smoothness parameters.
<?xml version="1.0"?> <properties> <metallic>0.5</metallic> <smoothness>0.5</smoothness> </properties>
Supported texture uniforms
- Albedo (no map tag)
- Emission (white, actual color is set for daytime)
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). Terrain textures are imported individually rather than as unity materials.
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.
Billboard textures can be imported via dfmods or loose files (StreamingAssets/Textures). In both cases textures must be named archive_record-frame.png and, when required, archive_record-frame_Emission.png. When you pack a dfmod remember to set alpha transparency on textures.
Optionally, xml files can be included to provide billboard configuration. Individual keys can be safely omitted to always use default value.
Static billboards inside houses and dungeons are replaced on a per-record basis, meaning that all frames for a given record must be provided. The same is true for emission maps.
<?xml version="1.0"?> <info> <renderMode>Cutout</renderMode> <emission>False</emission> <uvX>0</uvX> <uvY>0</uvY> <scaleX>1</scaleX> <scaleY>1</scaleY> </info>
All textures from an archive are placed on a 4096×4096 atlas, so the total size of your textures must not exceed this value or they will be silently resized. If you don’t provide the entire archive, imported textures are used together with vanilla without issues.
<?xml version="1.0"?> <info> <scaleX>1</scaleX> <scaleY>1</scaleY> </info>
Mobile billboards, such as wandering npcs and enemies, are replaced on a per-archive basis. Texture replacement is enabled for a given archive if the first record (archive_0-0) is provided. Similarly, an archive is marked as emissive if the emission map for the first record is provided (archive_0-0_Emission) or if enabled from xml configuration. Albedo is reused as an emission map when the latter is not provided.
<?xml version="1.0"?> <info> <renderMode>Cutout</renderMode> <emission>False</emission> </info>
<?xml version="1.0"?> <info> <uvX>0</uvX> <uvY>0</uvY> <scaleX>1</scaleX> <scaleY>1</scaleY> </info>
Images can also packed in a single .dfmod bundle or injected from loose files. Remember to set import options: a good choice for ui images is Texture Type: GUI with mipmaps disabled and Alpha is Transparency if required.
Loose files paths
- .IMG: filename.png (ex: MAP100I0.IMG.png) in StreamingAssets\Textures\Img
- .CIF, .RCI: filename_record-frame.png (ex: INVE16I0.CIF_3-0.png) in StreamingAssets\Textures\CifRci
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
- Iron, Grey
- Steel, Light grey
- Chain, Silver
- Silver, Silver
- Dwarven, Yellow
- Mithril, Blue
- Adamantium, Dark grey
- Ebony, Black
- Orcish, Green
- 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.
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.
- HUD Compass
<?xml version="1.0"?> <info> <width>322</width> <height>14</height> </info>
<?xml version="1.0"?> <info> <width>69</width> <height>17</height> </info>
Crosshair.png and Crosshair.xml in StreamingAssets\Textures
<?xml version="1.0"?> <info> <width>22</width> <height>22</height> </info>
Cursor can be overriden with a texture provided by mod using Cursor texture type and Read/Write flag enabled. Import from loose files is not supported.
Horse and cart textures are, respectively, MRED00I0.CFA and MRED01I0.CFA. While the original textures can’t be exported with Daggerfall Imaging, overrides can be provided inside the CifRci folder (ex: MRED00I0.CFA_0-0.png).
High resolution overlays can be imported along with the main map texture following the naming TRAV0I00.IMG-RegionName. For example, the overlay for the Ilessan Hills region should be named TRAV0I00.IMG-Ilessan Hills.
EXPERIMENTAL: this feature will be probably deprecated and eventually removed in favour of a more advanced modern UI support.
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"?> <info> <customtext>true</customtext> <r>0.8</r> <g>0.1</g> <b>0.1</b> <a>1.0</a> </info>
- Remove text (to draw text on texture)
<?xml version="1.0"?> <info> <customtext>notext</customtext> </info>
The following is a list of limitations for the current version of Daggerfall Unity, which might be resolved with a future update.
- Replacement of paperdoll textures is not supported. Clothes and armors only appears inside the inventory slots.
- Replacement of sky textures (SKYxx.DAT) is not supported.