Translating Daggerfall Unity

Introduction

Localization in Daggerfall Unity has taken a big step forward. In previous releases, translating DFU was a challenging process requiring the Unity Editor and writing code to load fonts and replace string tables at start. This approach placed a heavy technical burden on the translator, who just wants to get down to writing text.

I’ve listened to your feedback and completely reworked localization to simplify the entire process and remove technical hurdles. From release v0.15 and later, it’s no longer necessary to use the Unity Editor, write any code, or package a .dfmod. Instead, all text is edited in plain CSV files using your editor of choice and can be distributed along with fonts in a simple ZIP archive.

Rather than another multi-part tutorial series, this article will speedrun the whole translation process showing how everything is done as quickly and clearly as possible in a single article.

Getting Started

To create translations for Daggerfall Unity, you’ll need the following to get started:

  1. A working copy of Daggerfall Unity 0.15.0 or later. Setting up using the DaggerfallGameFiles method is recommended, but you can also use Steam release to get started.
  2. A good CSV editor such as Microsoft Excel or Google Sheets. You can technically get by using any text editor, but it’s best to use a dedicated spreadsheet tool.
  3. A suitable TTF or OTF font representing your alphabet. The built-in fonts have a full complement of Latin characters, but you’ll need to provide a font with the appropriate characters for whatever dialect of Kanji, Cyrillic, Hangul, etc. you are writing in.
  4. A way of extracting ZIP files and creating new ZIP files to distribute your translations. This functionality is built into Windows and other major operating systems.

Throughout this whole process, we’ll be placing files somewhere in the DaggerfallUnity_Data\StreamingAssets folder. Start by locating the below path in your Daggerfall Unity installation.

Replacing Fonts

If you’re writing translations using Latin characters (e.g. English, French, Italian, Spanish), you can skip this section. The built-in Daggerfall Unity fonts contain a full complement of Latin characters. But if you still want to assign a new font for other reasons, then keep reading.

You will need to supply a TTF or OTF font representing all the Unicode characters required for your alphabet. Daggerfall Unity uses standard Unicode codes for all text. If any characters are missing from your font, these will not display correctly in game.

Rather than use any specific language or dialect, this tutorial will use pseudo localization (e.g. ƥƨèúδô ℓôçáℓïƺáƭïôñ) to demonstrate how to setup your custom font and alphabet file so the correct characters are imported. I’ll be using the versatile NotoSans-Regular font to demo this process.

Tip: When selecting your own font, try to pick something that also contains a full complement of Latin characters. This is important so any untranslated parts of your work will still display correctly in default English.

Getting Your Fonts Into The Game

Once you’ve selected your fonts, you’ll first need to copy them into a place where Daggerfall Unity can find them and rename font files so DFU knows how to use them.

In below screenshot, I’ve copied NotoSans-Regular.ttf into StreamingAssets/Fonts and renamed file to FONT0003-SDF.ttf.

This informs DFU to use the selected font to replace FONT0003, which happens to be the font used for most general text in the game. Repeat for any other fonts as needed.

Tip: All fonts must be TTF or OTF with standard Unicodes. The legacy 8-bit pixel fonts (FNT) are not suitable for writing translations and can be ignored. Font rendering will be forced into SDF mode to display translations correctly.

Creating Alphabet File

Your translation might use different characters based on region or dialect. It’s possible for a font to include many thousands of glyphs while the written dialect uses only a subset of these. Before we can use custom characters from our font, we need to inform DFU which characters should be loaded from font. This is done using an alphabet file, which is simply a text file containing all the custom characters used by our target dialect.

In below screenshot, I’ve created a text file in StreamingAssets/Fonts called FONT0003-SDF.txt. This matches the font name and will contain a list of characters to load from font.

I’ll then add my custom characters to the alphabet file, informing the game which characters needs to be loaded. Here’s the full contents of my FONT0003-SDF.txt alphabet file. These characters represent the custom glyphs used in my pseudo localization examples.

áβçδèƒϱλïJƙℓ₥ñôƥ9řƨƭúƲωж¥ƺ
ÂßÇÐÉFGHÌJK£MNÓÞQR§TÛVWXÝZ

Tip: Daggerfall Unity will attempt to load standard Latin characters from font if available. There’s no need to specify these in your alphabet file. If you specify characters in alphabet file which do not render in game, it’s most likely your selected font is missing those Unicodes.

Editing CSV Files

To get started on translating Daggerfall Unity, a master set of CSV files in English are included in StreamingAssets/Text in 0.15 and later. Start by unzipping Master Localization CSV Files {version}.zip (whatever your version is) directly into the StreamingAssets/Text folder as shown below.

Tips:

  • Don’t extract Master Localization CSV Files into a subfolder, extract directly into the StreamingAssets/Text folder as shown above.
  • You can start your own CSV files from empty and just copy over Key/Value row as you write translations. If DFU can’t find a translated string in your CSV, it will fallback to the built-in English text.
  • All the text files, CSV, alphabet file, etc. must be saved in UTF-8 format.

To translate text, simply open CSV file in a spreadsheet program, rewrite the text in a cell, then save and run game to test.

Here, I’m using Excel to edit a string in Internal_Strings. I’ve changed the Value field of the key in row 3.

Tip: Never change the contents of Key column. This is how the game knows which text your translation should map to. Only change text in Value column.

If I save my file and run the game, I’ll see my translation when starting a new character.

That all there is to it. Keep on translating strings and don’t forget to keep backups of your work!

RSC Markup

In some CSV files, you’ll note there are markup codes enclosed in [square brackets] and variables starting with a % symbol. Example below from Internal_RSC.

When translating this text, do not translate the markup codes in [square brackets] or variables preceded by a %. Here’s an example pseudo translation of above. Note that markup like [/center] and variables like %ark are not translated.

§TRÉNGTH[/center]
§ƭřèñϱƭλ ϱôƲèřñƨ èñçú₥βřáñçè, ωèáƥôñ δá₥áϱè[/left]
áñδ ƭλè èáƨè ôƒ ïñçřèáƨïñϱ ƨƭřèñϱƭλ-řèℓáƭèδ ƨƙïℓℓƨ.[/left]
Wïƭλ ¥ôúř ƨƭřèñϱƭλ ôƒ %str, ¥ôú ářè çôñƨïδèřèδ %ark[/left]
[/pos:x=20,y=0]%dam [/pos:x=40,y=0]₥ôδïƒïèř ïƨ ƒáçƭôřèδ ïñƭô ¥ôúř[/left]
[/pos:x=40,y=0]λáñδ-ƭô-λáñδ / ωèáƥôñ δá₥áϱè.[/left]
[/pos:x=20,y=0]%enc [/pos:x=40,y=0]ƙïℓôϱřá₥ƨ ïƨ ¥ôúř ₥áжï₥ú₥ èñçú₥βřáñçè.[/left]
[/end]

After saving this text and restarting game, our translation is active with formatting and variables intact.

Tip: Depending on your language, you might need to add additional line breaks or formatting to ensure all text fits in the available space.

That’s the most technical aspect of writing translations out of the way. As a general rule, just follow the usage in the Master CSV files and you should be able to translate everything over time.

Now that you know how to translate text, we’ll cover the individual areas of the game where text is found.

Building Names

Building names are composed using Part A and Part B components found in Internal_Strings starting from row 901. See this article for a more detailed explanation of how Daggerfall creates building names from a seed.

This text is exposed as-is. You’ll need to translate building name parts so these makes sense to your language’s grammar rules. Example below in pseudo localization.

Locations

Unlike building names, location names are not procedurally generated from seed. These are simply string literals in MAPS.BSA inside Daggerfall’s game data. This data is a combination of bespoke names and many randomly generated names created at development.

This text is exposed as-is in Internal_Locations. You can use whatever process works best for your language to translate location names. Connecting your spreadsheet to a translation API might help you bulk translate the names, followed by hand-tuning as necessary.

Quests

Quests files are composed with both text and scripted logic elements. You could edit the quest file directly, but this means you’ll need to maintain the quest file with any bug fixes or changes added to the quest scripting later.

To help avoid this maintenance, Daggerfall Unity will seek replacement quest text from Internal_Quests. Unlike other CSV files, this file does not contain text for every quest currently available. You will need to add rows as you translate.

The Key format for quest rows is QuestName.ID. For example the below quest message from S0000999.txt has ID 1011. So the full key is S0000999.1011.

Message:  1011
%qdt:
 I met with Lady Brisienna in a tavern room. She
 told me that the three major powers of the Iliac
 bay are Daggerfall, Wayrest, and Sentinel. If I
 am to investigate the mystery of Lysandus' ghost,
 I should start by speaking with the royal families
 of these fiefdoms.

To translate this message, create a new row in Internal_Quests with the Key S0000999.1011 and translate the text part. As before, we don’t change the variable %qdt. We also don’t need to include the Message: 1011 line from quest source, just the actual contents of text block.

Restart the game and the quest log will show the translated text.

Books

In Daggerfall Unity versions prior to 0.15, books were converted at runtime from classic BOK*.txt format. This has drawbacks such as books containing formatting errors and not supporting Unicode characters.

From version 0.15 and later, books are included in the StreamingAssets/Text/Books folder using a new text format compatible with localization system. This enables Unicode characters for books and opens fixes to book spelling, grammar, and formatting via open source pull requests.

To edit a book, locate the book file in StreamingAssets/Text/Books and translate the contents. As we covered earlier, don’t translate any markup content such as [/font] or [/center].

Below is a the beginning of The Faerie (BOK00006-LOC.txt). The file names are the same as classic, except with -LOC appended. Internally these files are in a new format.

Title: The Faerie
Author: Szun Triop
IsNaughty: False
Price: 580
IsUnique: False
WhenVarSet: 
Content:


[/font=2]

[/center]The Faerie



[/font=4]

 Faerie have been on Tamriel, in all probability, long
before recorded history, perhaps since or before the days of
the Elder Ones. The tales of their mischief are found in every
culture, in most every village, town, and city-states in
the Empire. Alternately they are called Faerie, Fey,
Illyadi, Sprites, Pixies, and Sylphim, and their natures seem
to flit from one story to the next with the same variation.
It could almost be said that Faeries are anything
unpredictable in nature.

The tags at start of book file contain data about that book. Some of this data is visible in-game e.g. Title:. Some tags control how book is released e.g. WhenVarSet: prevents book from being available until after a global variable is raised. Don’t translate the tags themselves or any non-text values (e.g. numbers, True/False). Translating text values like the title is OK.

Note: At time of writing in 0.15.1, not all tags are used in-game from new -LOC book files. This limitation will be corrected in a future release.

To translate, edit the book contents as we did earlier then save file and restart game. Following is an example pseudo translation of above.

Title: Tλè Fáèřïè
Author: §ƺúñ Třïôƥ
IsNaughty: False
Price: 580
IsUnique: False
WhenVarSet: 
Content:


[/font=2]

[/center]Tλè Fáèřïè



[/font=4]

Fáèřïè λáƲè βèèñ ôñ Tá₥řïèℓ, ïñ áℓℓ ƥřôβáβïℓïƭ¥, ℓôñϱ
βèƒôřè řèçôřδèδ λïƨƭôř¥, ƥèřλáƥƨ ƨïñçè ôř βèƒôřè ƭλè δá¥ƨ ôƒ
ƭλè Éℓδèř Óñèƨ. Tλè ƭáℓèƨ ôƒ ƭλèïř ₥ïƨçλïèƒ ářè ƒôúñδ ïñ èƲèř¥
çúℓƭúřè, ïñ ₥ôƨƭ èƲèř¥ Ʋïℓℓáϱè, ƭôωñ, áñδ çïƭ¥-ƨƭáƭèƨ ïñ
ƭλè É₥ƥïřè. Âℓƭèřñáƭèℓ¥ ƭλè¥ ářè çáℓℓèδ Fáèřïè, Fè¥,
Ìℓℓ¥áδï, §ƥřïƭèƨ, Þïжïèƨ, áñδ §¥ℓƥλï₥, áñδ ƭλèïř ñáƭúřèƨ ƨèè₥
ƭô ƒℓïƭ ƒřô₥ ôñè ƨƭôř¥ ƭô ƭλè ñèжƭ ωïƭλ ƭλè ƨá₥è Ʋářïáƭïôñ.
Ìƭ çôúℓδ áℓ₥ôƨƭ βè ƨáïδ ƭλáƭ Fáèřïèƨ ářè áñ¥ƭλïñϱ
úñƥřèδïçƭáβℓè ïñ ñáƭúřè.

The translated book now displays in game as below. Title, author, tooltips, and content are all translated.

Note: The default title font is missing some characters that display as a ? instead. This is because the title font does not contain a matching Unicode character for these glyphs. Replacing the title font with one containing these Unicodes will correct problem.

Book Images

Books files can also reference images placed in StreamingAssets/Text/Books/BookImages folder. In this example, an image is saved into this folder as test1.jpg.

It is then added to book directly below title using the [/image={filename}] markup like so.

[/center]Tλè Fáèřïè

[/image=test1.jpg]

The added image displays in-game when player opens book.

Note: Book images are always scaled and centred on their own line. At time of writing, there’s a bug where book image is not properly clipped to scroll area.

Book Scaling and Colours

It’s also possible to adjust book scaling and colours using the [/color={RGBHex}] and [/scale={value}] markup like so.

[/color=ff8040][/scale=2.0]Fáèřïè λáƲè βèèñ ôñ Tá₥řïèℓ, ïñ áℓℓ ƥřôβáβïℓïƭ¥, ℓôñϱ

This changes the colour and scale of the first paragraph. Like other formatting, colour and scale reset at every newline. The untranslated portion of book follows the first paragraph.

Biography Text

Biography text can be edited directly in StreamingAssets/BIOGs. In below example, one of the questions and answers in BIOG00T0.txt (e.g. Mage class) have been translated.

Note: It is important not to translate the non-text parts or formatting of file. Incorrect changes can crash the game or cause other problems.

1.	Wλáƭ ƨçλôôℓ ôƒ ₥áϱïç λáƲè ¥ôú βèèñ
	ƨƭúδ¥ïñϱ ƭλè ℓôñϱèƨƭ?
a.	Ðèƨƭřúçƭïôñ
	#4150
	!4156
	22 +6
b.	Rèƨƭôřáƭïôñ
	#4151
	!4157
	23 +6
c.	Ìℓℓúƨïôñ
	#4152
	!4158
	24 +6
d.	Âℓƭèřáƭïôñ
	#4153
	!4159
	25 +6
e.	Tλáú₥áƭúřϱ¥
	#4154
	!4160
	26 +6
f.	M¥ƨƭïçïƨ₥
	#4155
	!4161
	27 +6

This will display in-game like below.

Faction Text

FACTION.TXT can be edited directly in StreamingAssets/Factions. This file contains the canonical names of fixed NPCs and guilds.

Note: Faction data is also copied to FactionData.txt in player saves. This is necessary as part of faction alliance simulation and player guild rankings, which all change over time. As faction text fields are not decoupled from FACTION.TXT file, it is necessary for player to start a new game for these changes to take effect. Faction text might be decoupled in a future release.

Below, we edit the name of Queen Barenziah in her FACTION.TXT entry #391. As always, don’t translate tags and other non-text values. Changing non-text values or formatting below can crash the game.

#391
	Type: 4
	name: Qúèèñ ßářèñƺïáλ
	rep: 0
	summon: -1
	region: 24
	power: 15
	flags: 0
	face: 43
	race: 7
	flat: 346 22
	sgroup: 3
	ggroup: -1
	minf: 10
	maxf: 80

This change is now visible in-game.

Menus

Menu text can be edited directly in StreamingAssets/Text. These are special CSV data files, but still in the format key, value. As fonts are loaded earlier than mod, it’s now possible to translate menu text. An example below.

Note: The key is not changed, only the text value.

startInDungeon,      §ƭářƭ Ìñ Ðúñϱèôñ
startInDungeonInfo,  §ƭářƭ ñèω ϱá₥è ïñƨïδè ƭλè ƒïřƨƭ δúñϱèôñ
smallerDungeons,     §₥áℓℓèř Ðúñϱèôñƨ
smallerDungeonsInfo, Ráñδô₥ δúñϱèôñƨ ωïℓℓ λáƲè ôñℓ¥ ôñè ïñƭèřïôř βℓôçƙ áñδ ƒôúř βôřδèř βℓôçƙƨ

This is visible in-game like below.

Images, Sounds, and More

It’s also possible to translate menu image, sounds, and more using loose files in StreamingAssets. This is beyond the scope of this article. See Daggerfall Unity Modding System as a starting point.

Distributing Translations

As translations are just a collection of loose files spread throughout StreamingAssets, they can be distributed as a zip file. After testing, bundle all your changed text files into a single .zip archive with correct paths and release.

The end user then needs only unzip whole archive into StreamingAssets while keeping paths so everything goes into the correct folder.

Please consider the source text files can change over time. It will become necessary to maintain your translation mod to ensure it remains compatible with new versions of Daggerfall Unity.

Conclusion

As of Daggerfall Unity 0.15, its now possible to translate the game using simple font and text files distributed as a .zip archive. It’s no longer necessary to use Unity Editor or package a .dfmod. Simply edit the required text files and distribute in a .zip archive.

Almost the entire game can be translated at time of writing, with some limitations. Notably, it’s not yet possible to translate random name banks and faction names require a new game to take effect. Also, editing some files incorrectly can break the game if file edited incorrectly. These limitations will hopefully be improved in future releases.

I hope this article proves useful to Daggerfall Unity players around the world. Best of luck to everyone working on translations!

Using Steam Release of Daggerfall with Daggerfall Unity – Updated!

The Steam release of Daggerfall has been updated and is now compatible with Daggerfall Unity “out of the box”. This is great news for Daggerfall players of all preferences. Not only is the classic release on Steam now patched for a better experience, it’s a free and convenient way to get the game files needed to run Daggerfall Unity.

These steps are for Windows only but you can adapt to another platform. You’ll just need to copy over the files installed by Steam to your platform of choice after step 1. Alternatively use the DaggerfallGameFiles method for a curated copy of game files compatible on all platforms.

Step 1 – Install Daggerfall with Steam

Visit the Steam page below and install Daggerfall like you would any other Steam game.

https://store.steampowered.com/app/1812390/The_Elder_Scrolls_II_Daggerfall/

Step 2 – Download Daggerfall Unity

If you haven’t already, go to the Releases page and download latest version of Daggerfall Unity for your platform. Downloads are below the Assets foldout as shown.

When downloading for Windows, it is highly recommended to use the 64-bit version unless you have a very old PC that does not support 64-bit.

Unzip your download somewhere like C:\Games\Daggerfall Unity\0.13.5. It is recommended to unzip into a folder matching the version downloaded.

Note: When updating Daggerfall Unity in future, unzip to a new folder matching new folder version. Never unzip a new version on top of an old version.

Double-click DaggerfallUnity.exe to run the game.

Step 3 – Set Correct Path

When prompted by Daggerfall Unity, navigate to your local The Elder Scrolls Daggerfall/DF/DAGGER folder installed by Steam. By default this will be in path:

C:\Program Files (x86)\Steam\steamapps\common\The Elder Scrolls Daggerfall\DF\DAGGER

Provided Steam version is up-to-date, the launcher window will turn green like below. If you are still missing .VID files, check that your Steam install is updated to latest version.

Press OK and continue to set your resolution.

Click Test then OK if you’re happy with resolution setting.

Congratulations! You’re now ready to play Daggerfall Unity.

Step 4 – Find Some Mods

Once you have everything setup, you might like to mod the game. The Daggerfall Unity Nexus page has hundreds of mods available ranging from graphical upgrades to new gameplay experiences.

https://www.nexusmods.com/daggerfallunity

Step 5 – Get Some Help

If you get stuck installing the game or with gameplay in general, ask for help on the Forums or the Lysandus’s Tomb Discord.

If you have issues with a mod, please ask question of the mod author first either on Nexus or their dedicated thread in Released Mods on forums.

Step 6 – Enjoy!

Thank you from everyone at Daggerfall Workshop. We hope you enjoy playing Daggerfall Unity!

Using Steam Release of Daggerfall with Daggerfall Unity

This post is now out of date. Please click link below for updated post.

Original post content follows. This will be left in place as it contains general steps that might still be useful to someone trying to patch the old Bethesda web version or CD and Anthology versions.

Daggerfall is now available on Steam! This is great news for the community and should help Daggerfall Unity reach more players than ever.

Unfortunately, the Steam release does not include Bethesda’s own final patch for Daggerfall, and it’s structured in a way that does not include all game files in correct place to work with Daggerfall Unity out of the box.

I’m committed to better supporting the Steam version in a future release of Daggerfall Unity. In the meantime, you should use the recommended method to install DFU, especially on platforms other than Windows. If you use the recommended method, you can totally skip this whole article and just follow the steps in that link.

But if you absolutely must use the Steam release, here are the minimum steps get up and running with Steam and DFU. Even if you only plan on playing the DOS version from Steam, steps 1 through 3 will show you how patch game for a better DOS experience. Unpatched, the version currently on Steam is the buggiest version available.

These steps are for Windows only, although the same basic process applies for other platforms where the unpatched DOS version is installed.

Step 1 – Install Daggerfall with Steam

This part is easy – visit the Steam page below and install Daggerfall like you would any other Steam game.

https://store.steampowered.com/app/1812390/The_Elder_Scrolls_II_Daggerfall/

Step 2 – Download Patch

As Bethesda does not include their own final patch with Steam release, you’ll need to install this manually for best DOS experience and compatibility with Daggerfall Unity. The official 1.07.213 patch is still available from UESP on page below. Download DAG213.EXE and keep it handy.

https://en.uesp.net/wiki/Daggerfall:Files#Official_Patches_and_Utilities

Step 3 – Apply Patch

Find Daggerfall in your Steam Library then right-click > Manage > Browse local files

This will open the location Steam installed Daggerfall on your PC, which could be a different path to below. Wherever you have it installed, the folder contents should look like this.

Double-click to enter the DF folder, then the DAGGER folder. Copy DAG213.EXE patch downloaded earlier and paste into the DF/DAGGER folder. This folder should look like below.

Now go back to the parent folder The Elder Scrolls Daggerfall and enter the DOSBox-0.74 folder. Double-click DOSBox.exe to open DOSBox application.

From here, we have to do a little work in command line. Type mount C: ../DF exactly as shown below then press Enter.

Do not change these commands or substitute drive letters. Type them exactly as shown below.

You should see a message saying Drive C is mounted like below.

We now have to go into the correct folder and run the patch.

  • Type C: then press Enter
  • Type cd DAGGER then press Enter
  • Type DAG213.EXE then press Enter

When prompted to update, press Y key to apply patch.

When prompted to fix maps, press Y key to apply patch.

You should see the update is successful and can now close DOSBox window.

Step 4 – Copy VID Files

The Steam release is a medium install, while Daggerfall Unity requires a full install. To complete this process, we need to copy all .VID files into the correct place.

First go back The Elder Scrolls Daggerfall parent folder. Then navigate into DF/DFCD/DAGGERFALL/ARENA2 folder. Locate and select the ANIM0000.VID through ANIM0015.VID and DAG2.VID files as shown below. It helps to sort by Type and look for all “VID File” types.

Right-click > Copy selected files or press Ctrl+C to copy.

Now navigate back to The Elder Scrolls Daggerfall parent folder and into DF/DAGGER/ARENA2 folder. Right-click > Paste or Ctrl+V to paste the copied files into this folder.

They should be copied into DF/DAGGER/ARENA2 folder as below. Double-check that ANIM0000.VID through ANIM000015.VID and DAG2.VID are all present.

We now have everything ready to install Daggerfall Unity.

Step 5 – Download Daggerfall Unity

If you haven’t already, go to the Releases page and download latest version of Daggerfall Unity. Downloads are below the Assets foldout as shown.

When downloading for Windows, it is highly recommended to use the 64-bit version unless you have a very old PC that does not support 64-bit.

Unzip your download somewhere like C:\Games\Daggerfall Unity\0.13.5. It is recommended to unzip into a folder matching the version downloaded.

Double-click DaggerfallUnity.exe to run the game.

Step 6 – Set Correct Path

When prompted by Daggerfall Unity, navigate to above The Elder Scrolls Daggerfall/DF/DAGGER folder. By default this will be in path:

C:\Program Files (x86)\Steam\steamapps\common\The Elder Scrolls Daggerfall\DF\DAGGER

Provided everything was patched and copied correctly, the launcher window will turn green like below. If you are still missing .VID files, jump back to Step 4 and double-check all .VID files were copied into correct folder.

Press OK and continue to set your resolution.

Click Test then OK if you’re happy with resolution setting.

Congratulations! You’re now ready to play Daggerfall Unity.

Step 6 – Find Some Mods

Once you have everything setup, you might like to mod the game. The Daggerfall Unity Nexus page has hundreds of mods available ranging from graphical upgrades to new gameplay experiences.

https://www.nexusmods.com/daggerfallunity

Step 7 – Get Some Help

If you get stuck installing the game or with gameplay in general, ask for help on the Forums or the Lysandus’s Tomb Discord.

If you have issues with a mod, please ask question of the mod author first either on Nexus or their dedicated thread in Released Mods on forums.

Step 8 – Enjoy!

Thank you from everyone at Daggerfall Workshop. We hope you enjoy playing Daggerfall Unity!

Daggerfall Unity 0.13 Rendering Update – Part 3

In this third and final instalment, Daggerfall Unity’s rendering review wraps up by fixing more bugs and giving Retro Mode some overdue love. Preview release 0.13.3 is now available on Releases page.

To quickly recap, this review set out to resolve problem of specular “shine” from Unity’s default Standard shader, switch to more accurate and flexible linear lighting space, and upgrade postprocessing stack to PPv2. Along the way, we fixed many small problems with loose texture mods and reviewed lighting. Almost every part of the game involved with drawing something to screen was inspected and tuned up if tuning was needed.

Thanks to community feedback, we were able to address several issues created by initial 0.13 preview release. Our new shaders were extended to support more PBR capabilities. The game received an extensible “Effect Settings” UI to configure postprocessing and other effects at runtime. We helped several mod authors overcome compatibility issues so their mod works with 0.13 and beyond.

With all the large changes now settling down, we could start refining a few things. Here’s what’s new in 0.13.3.

Remove Nature Shadows

Projecting shadows from 2D billboards comes with downsides. These are just 2D cutouts rotating to face camera, so their shadow either twists and turns with billboard or stays fixed in place. Fixed shadows look better overall, but results in any asymmetry becoming disconnected from cutout when seen from the wrong angle.

Nature shadows had other tradeoffs too. In deferred rendering, screen objects always receive shadows, which means trees received self-shadow artifacts while rotating. To workaround this problem, it was necessary to render nature objects in transparent queue which doesn’t write to depth buffer. This in turn created other problems with rendering elements relying on depth information.

After trialling more solutions and workarounds, it became obvious these shadows were causing too many issues for a minor aesthetic hack that only looked good some of the time. Considering classic didn’t have tree shadows either, the best solution was to simply remove them.

If you prefer these nature shadows despite their limitations, you can switch them back on by opening settings.ini and changing “NatureBillboardShadows=False” into True.

Please keep in mind that enabling nature shadows will revert them to transparent rendering queue, so trees and other nature billboards will not operate fully with effects requiring depth information – Ambient Occlusion, Retro Mode Postprocess, ColorBoost, to name a few.

Retro Mode Enhancements

Retro Mode is a feature in Daggerfall Unity where camera renders to a 320×200 or 640×400 resolution target before scaling output into your display area. The feature also comes with postprocess settings for palettization or posterization to crush palette down to fewer colours with neat side-effects like colour banding from nearby light sources.

From 0.13.3, Retro Mode is now in the Game Effects UI. You can access these settings from drop-down arrow at top-left of screen when game is on pause menu.

In addition to previous settings for retro mode and postprocess, you now have the option to adjust render scale into 4:3 or 16:10. Enabling either of these settings will scale output to selected aspect ratio inside your actual screen area. If you have a wider screen, e.g. 16:9, then vertical pillarbox bars are added.

Previously this aspect correction was only available as a hacky workaround by fiddling with resolution and UI scaling settings, which was error prone and didn’t work under all platforms. Now with this in Game Effects UI, you can switch around these settings at runtime without restarting game.

If you’re coming from an older version of Daggerfall Unity and have already setup Retro Mode based on the old hacky method, please reset your game resolution back to something with correct aspect ratio for your monitor. For example, if you have a 1920×1080 monitor and set your game resolution to 1280×960 to force the aspect change, please set your game resolution back to 1920×1080 or some other 16:9 resolution. You also no longer need to enable “FreeScaling” option, which has been removed from 0.13.3. This is now all handled automatically in-game from checkboxes shown above, along with fixes for problems created by the old FreeScaling option.

One final note about Retro Mode – now that you can switch settings at runtime and change aspect ratio, not all mods will support runtime switching of resolution or aspect. Any mods rendering to a stacked camera (e.g. Enhanced Sky, Distant Terrain) will need added support for runtime resolution switching (update: Enhanced Sky has this support from v3.0.2). Also custom UI mods might need to add aspect handling based on how they calculate screen position. If you have problems with a mod in Retro Mode, try restarting game, switching off aspect correction, or switching off Retro Mode entirely.

ColorBoost Effect

The best way to introduce ColorBoost is by talking about darkness in dungeons. Daggerfall dungeons aren’t dark, exactly. They’re actually quite bright near player then ramp down sharply into darkness after 30 metres or so. This is technically a requirement of lower draw distance in classic, but it creates a uniquely claustrophobic feeling. In classic, even light sources fade into darkness at range. To put it another way, there’s a high contrast between brightness levels depending on distance from player.

See below classic screenshots for example. Here our player is standing near throne lift in Privateer’s Hold. Note how environment around player is rather bright then ramps down into blackness at farthest point.

If you walk down toward that farthest point and turn around, now the brightly lit area near throne is plunged into darkness and world near player is bright instead. Step back a few more metres and area above stairs becomes totally black. Even those bright torches will fade away.

Daggerfall Unity uses a modern naturalistic lighting system where this kind of thing doesn’t happen. Lights have radius and intensity, and geometry is either touched by some amount light or not. In a naturalistic environment, torches don’t stop casting light behind themselves just because player walked a few dozen metres away.

It’s not quite feasible to capture classic’s rendering and lighting perfectly here (totally different engines and lighting systems after all) but it is possible to create more contrast between near and far brightness to capture this same atmosphere.

Let’s start with a screenshot of Daggerfall Unity, once again at top of stairs in Privateer’s Hold looking down. Note how distant torches still affect the wall behind them, and scene overall is rather uniform in brightness. A ramp down into darkness isn’t present at all.

Now ColorBoost comes into play. This postprocessing effect can both increase brightness near player and produce ramp down into darkness inside dungeons. Compare above screen with one below, and note difference in contrast between near and far points. Even the torches start to fade into darkness at range.

In addition to atmosphere, this gives you another way to tune brightness to your preference. Some ColorBoost will brighten things up without completely flattening or over-brightening whole scene. The dungeon falloff effect has adjustable strength down to 0 (disabled).

Here’s a another shot of stairs in Daggerfall Unity at 320×200 16:10 Retro Mode with adjusted ColorBoost settings. This is finally approaching reasonable parity with classic Daggerfall’s dungeon atmosphere despite underlying engine differences.

ColorBoost was originally intended to help in Retro Mode with posterization / palettization enabled, and it’s recommend to use a good amount of ColorBoost in combination with those effects. But you can enable ColorBoost at any time, with or without Retro Mode, and it will work alongside your mods, lighting setup, and other settings.

Speaking of mods and settings, you’ll likely need to dial-in ColorBoost to suit your environment and preferences. Everyone can have a unique setup and world can light very differently as a result. For this reason, ColorBoost config page has several sliders to help dial-in Radius of effect, global Intensity, strength of effect in Dungeons, Exteriors, Interiors, and control Dungeon Falloff. Like all effects, ColorBoost is disabled by default.

General Improvements & Fixes

This release also brings several minor fixes and refinements:

  • Don’t use transparent queue for standalone cutout billboards so they operate with AO and other depth effects
  • Fix volume collider blocking spells and other missiles (fixed in 0.13.2b)
  • Flag window textures in archives 171-173 to support emissive from replacements
  • Allow changing retro mode settings at runtime
  • Remove global UI FreeScaling method, this is now part of retro mode aspect correction
  • Fix overlapping text in popup message boxes with FreeScaling enabled
  • Change protections on MaterialReader Uniforms to public
  • Fix StreamingWorld.TrackLooseObject “mapPixelX” and “mapPixelY” (KABoissonneault)
  • Fix retro mode colour accuracy with higher precision render textures
  • Hide spell icons when pause options dropdown is open
  • Refine automap panel sizing with custom screen rect

Conclusion

We have now reached the end of rendering review in 0.13. Unless a blocking issue is found, the “preview” tag will be dropped from next release. Moving forward, there are no more large changes scheduled to engine or rendering, only bug fixes and minor refinements. This is to ensure best possible stability and mod compatibility moving towards 1.0.

If you are a mod author, please ensure your mod is rebuilt and tested compatible for 0.13.3. This release is very close to next full Beta release without “preview” tag.

Thank you for reading, and for playing Daggerfall Unity!

Daggerfall Unity 0.13 Rendering Update – Part 2

Our rendering update and review continues with 0.13.2 now available on Releases page. This release fixes bugs, expands capabilities of new shaders, and helps mods reach compatibility with 0.13. Let’s unpack everything new in this release.

Expanded Default Shaders

0.13 introduced new default shaders, the small programs which tell your GPU how to render objects and materials. These new shaders better reproduce classic’s colours and flat albedo look without all the unwanted specular shine that comes with Unity’s Standard shader, but did not support a PBR workflow by design. While this was suitable for classic textures, and mod authors could still use custom PBR materials in their .dfmod, any loose texture mods had less support than before.

From 0.13.2, default shaders now support albedo+normal+parallax+metallic maps, allowing loose texture mods to have an optional PBR workflow just by dropping the right textures into a folder. We also fixed several problems loading these optional maps in asset pipeline and extended this PBR support to terrain tilemap shader.

A good example of this kind of mod is Vanilla Normal Mapped which adds normal+parallax+metallic maps to complement classic colour textures. Screenshots below compare standard DFU textures and boosted by Vanilla Normal Mapped mod in 0.13.2.

These new capabilities in default shaders allow mods to intentionally reintroduce specular based on their materials, while still avoiding unwanted specular when using classic textures only. The big advantage of rolling our own shaders is more control over the rendering process.

Dungeon Water

Without proper alpha blending at the time, DOS Daggerfall used a stippling effect for water surface (a kind of black pixely noise) and a bright blue fog effect when submerged.

Daggerfall Unity improves water surface with a dark water plane and slime highlights, invoking murky and stagnant water suitable for dungeons. But when you submerge, we used the same bright blue fog effect underwater. After listening to feedback, we’ve changed the submerged effect to use a dark blue-green slime colour to better match water surface.

In case you want something different, we’ve also exposed the underwater fog to modders. See this topic for details on how to set underwater fog colour/density and some tips on updating surface plane as well.

Shout-out to King of Worms for his persistence around tweaking dungeon water and driving this change.

Increased Torch Brightness

On the subject of feedback, we heard several times the brightness of default and item-based torch were retuned improperly and looked too dark. We’ve now increased brightness of both default and item-based torch, and decoupled how these are handled so they can be tuned independently in future. Screenshot below compares local torch brightness when using a lantern with item-based torch in 0.13.0 vs. 0.13.2. You’ll note that 0.13.2 is brighter and more comparable to lantern in 0.12.

In addition to torch brightness, we also heard that retro rendering mode is too dark and tends to crush colours towards black. This kicked off a review into better matching classic’s brightness, particularly in retro mode rendering. During this review, we noted classic dungeons are very bright near player then ramp down to near black based on distance from camera. Because Daggerfall Unity’s retro mode uses naturalistic lighting and selects palette colours in a post-process, it does not properly capture this effect.

The solution was to introduce a new effect called ColorBoost to default shaders which juices up colours local to player and ramps down over a short distance. This better matches brightness contrast seen in classic, and will help players tune dungeons and nights to properly select brighter colours in retro mode local to player. ColorBoost is not a lighting effect, rather it scales albedo near camera so that brighter colours will be selected in post-process. ColorBoost will be available from 0.13.3 with or without retro mode enabled, but its primary purpose will be to select better colours in retro mode. You can see a preview of it in this tweet.

Terrain Mod Compatibility

We’ve worked with authors of popular terrain mods to help overcome compatibility problems and get their mods working in 0.13. This required updates to both mods and core. We’re pleased to announce that Enhanced Sky, Distant Terrain, and Eroded and Enhanced Terrain are now compatible with 0.13.2+. Mod authors should have compatible mods released soon now 0.13.2 is available.

General Improvements & Fixes

We’ve made several minor performance improvements and fixes under the hood. To summarise these quickly:

  • Retro-sized textures are no longer compressed automatically, as this destroyed appearance of small-sized texture replacements. The threshold for retro-sized textures is < 256 pixels wide and high. (Interkarma/TheLacus)
  • Fixed internal crash when loading compressed normal maps.
  • Fixed loading non-colour maps as linear.
  • Refactored loose texture asset loading to fix some minor bugs and clean up code.
  • Fixed errors in terrain tilemap shader and cleaned up shader code.
  • Fixed excess draw calls when rotating interior automap, a large performance improvement to automap (spotted by King of Worms).
  • Fix out-of-range error in FormulaHelper.CalculateCastingCost (KABoissonneault)

Effect Settings / Post Processing Tuning

There’s a new in-game UI under the pause menu chevron called Effect Settings.

This UI allows you to customise post processing effects while game is running. As Daggerfall Unity now embeds PostProcessing v2 (PPv2) stack, the mod which previously customized these settings is no longer compatible. Rather than update mod, we’ve integrated these settings straight into the core game!

All post processing effects are disabled by default. Once you access the above menu, you’ll be able to enable and tune Antialiasing, Ambient Occlusion, Bloom, Motion Blur, Vignette, Depth of Field, and toggle Dither while seeing your changes at runtime. Screenshots below of first three settings pages.

These settings have been expanded to include new settings available in PPv2 that were not available in older releases.

The Effect Settings window is also expandable, so mods can introduce new post processing or other effects, then plug their config page into this UI. This will be where ColorBoost is homed once that feature goes live in 0.13.3.

Post processing is very much a matter of personal taste and you should be able to dial in an effect to your liking. You might use these effects in your game or just to take screenshots. With effects like Vignette and Depth of Field, you can create more stylized screenshots like below.

The choice is yours how you want to use these effects. You can leave them disabled, enhance game by degrees, or pile on a bit of everything for photography purposes.

Conclusion

With all the tweaks and fixes in this release, along with increasing mod compatibility, Daggerfall Unity 0.13 is almost ready to lose the Preview tag and go back to stable beta releases.

As of now, 0.13.2 represents a close-to-final state for rendering in Daggerfall Unity. All the challenging and breaking changes are now behind us. Modders can release compatibility updates for 0.13.2+ and be confident their mods will remain compatible with 1.0 as no further rendering changes are scheduled.

Looking at a timeframe for 1.0, this will now most likely be early 2022. End of year is fast approaching and we still have lots to do. Once rendering is closed out, we’ll move on to Localization improvements and general bugfix. We’ll call 1.0 when happy with overall state and stability of game.

Thank you for reading, and for playing Daggerfall Unity!

Daggerfall Unity 0.13 Rendering Update

There are some long-standing items on Daggerfall Unity’s Roadmap that have at last found their way into the game. These changes relate to visual rendering of classic textures in Unity engine and how they interact with lighting. There’s also a long-overdue update to the postprocessing stack. To summarise everything before getting into details, these changes are:

  • New default shaders for classic textures
  • Switch rendering from Gamma to Linear colour space
  • Lighting review
  • Update postprocessing stack

New Default Shaders

You might have noticed the visuals in DFU have a kind of silvery “shine” on top, and some textures tend to wash out easily under certain lighting conditions. Examples are objects that emit light, such as lanterns, and naturally bright textures like snowy terrain at midday. Even when using retro rendering with palletization, deep blacks will tend to shift value towards lighter greys.

The reason for this is somewhat technical. A concise version is that modern engines like Unity use something called Physically Based Rendering (PBR) which attempts to simulate the physical properties of a material and how it interacts with light. However, old games like Daggerfall predate physical material properties such as normal maps, smoothness maps, etc. and instead have only basic colour information in a single texture. When attempting to render these simple textures in a PBR engine without any other material properties, they are perfectly smooth and will reflect light in unsatisfying ways. This can give objects a shiny kind of look, as if made from plastic or dull metal.

In fixing this, the goal was to correct lighting incongruity while using classic textures and still allow mods like DREAM to use PBR materials. It was also necessary for these different materials to work together in the same scene with any combination of classic and modded materials. This presented some challenges that were eventually overcome with the help of new shaders and several updates to material pipeline.

The best way to see the difference is to compare a scene in 0.12 and 0.13. Pay close attention to the dark areas of the rat while adjusting slider. You’ll notice in 0.12 screenshot the rat has a uniform specular shine that is removed in 0.13. You’ll see the same across the entire scene, although most obvious in darker textures.

To fix this specular shine required new shaders better suited to Daggerfall’s classic textures. These new shaders lean fully into the retro textures and use simple Lambertian reflectance like older games of the time. This leads to better colour sampling under most lighting conditions and fixes brighter areas from becoming overbright. For example, the lantern and Fire Daedra wash out to bright yellows in 0.12 using PBR shaders but show their true colours in 0.13.

While relatively basic, the new shaders still support Normal maps and Emission maps, and conditional compilation. They are more lightweight than Unity’s Standard shader and will perform slightly better on lower-end computers running without mods.

Gamma to Linear Colour Space

The next change was switching from Gamma to Linear colour space. This is another technical subject, but in short it relates to how colours are added and multiplied. Linear colour space leads to more accurate results with improved lighting falloff and softer shadows. The results can be subtle in unmodded DFU, but the combination of new materials and linear lighting uplifts every scene with deeper colours and improved contrast while eliminating bloom and flat specular shine.

With the change to Linear colour space, modded materials now have a chance to look their best at all times with more accurate colours and no unwanted bright spots near lights. Of course, all these changes also require lighting to be reviewed and materials tweaked so they still look good. This leads into the next item on the list.

Lighting Review

Linear colour space blends and lights differently than Gamma. Lights appear to have a larger radius and is more defined on edges. This is more accurate overall, but also different if you’ve become accustomed to Gamma lighting. As a result, all the light sources in the game need to be tuned so they aren’t too bright and still resemble the game as it was.

In general, dungeons will appear a bit darker from 0.13. The combination of new shaders, Linear colour space, and lighting review result in darker colours becoming more prominent. You can really see the flat silvery shine over everything in below screenshot when comparing 0.12 to 0.13. The dark parts of brick textures stay dark rather than shifting value towards lighter greys.

Towns are still nicely lit oases, with Linear’s different light falloff visible against sides of buildings in below screenshot. But the removal of flat specular shine means night-time scenes have better overall contrast between light and dark areas.

Daytime scenes will light much the same as there’s only a single directional light source (the sun). The change to Linear with new shaders also resolves the problem of terrain textures looking over-bright under a midday sun. Finally, the daytime light curve was adjusted to provide a longer plateau of sunlight around 10am-3pm.

Update Postprocessing Stack

For some years now, Daggerfall Unity has continued to use an older embedded postprocessing stack. This has now been removed and replaced with current Post Processing 3.1.1 via Unity’s package manager. This updates deferred fog and postprocess capabilities to be in line with current engine. It also required some minor code changes and retuning fog as some parts of the old Post Processing library have been deprecated.

Fog is roughly the same, other than being a bit thicker towards limits of view distance. Compare the distant trees and buildings in below winter scene.

Preview Release and Mods

Daggerfall Unity 0.13 will be available as a Preview release soon. Due to all the changes across asset pipeline, colour space, default materials, and postprocess stack, you should expect some mods that work under 0.12 not to work in 0.13. Mods that include new materials and shaders will be most affected. Any non-graphical mods, or those which only change game settings, should be unaffected or only need minor tuning.

It could take several weeks for mod authors to update their mods to be compatible. If you don’t want to help test 0.13 and provide feedback to developers and modders, you can happily stay on 0.12 until 0.13 release is out of preview. You can also run 0.12 and 0.13 side-by-side by unzipping releases to different folders and running different mod loadouts. Other than changes outlined above, the 0.13 release is identical in terms of gameplay and patch level to 0.12.

Looking to the future, this represents the last major change to Daggerfall Unity leading up to 1.0. Bug fix and general refinement will resume once 0.13 is considered stable.

Thank you for reading! I hope you decide to try out Daggerfall Unity 0.13 preview to help test mods and provide feedback.