Daggerfall Unity 0.10.26 is now available on Live Builds page. Despite being tagged a preview, a lot of work has gone into this release to create the most stable update possible. If no major issues are found, our next minor release will be tagged as stable.
If you’re still on DFU 0.10.24, you might need to update your mods to be compatible with 0.10.25 and later. Check the release info for your mods to see if an update is required.
In other news, our Beta milestone is coming up fast! Just a few more items to tick off the Roadmap and Daggerfall Unity is feature complete. We should have more news on this before end of the year. For now, let’s unpack everything this new release.
New Features
Localization Preview (Interkarma)
A long-term goal has been to support new translation mods for Daggerfall Unity, delivered simply and easily through our powerful mod system. This has many challenges, as classic Daggerfall draws text from several different files and formats, some text is even baked right into the executable. Internally, classic Daggerfall used an 8-bit wide character format that did not easily support extended character codes. Language packs for classic Daggerfall had to work within these limits and compromise often, such as re-writing text with transcoded characters aligned with custom font glyphs under a 256 limit. Daggerfall Unity inherited a lot of these same systems early on, as we rely on the classic DOS game data.
For the last couple of years, we’ve gradually laid the groundwork for translation mods in Daggerfall Unity. This started with SDF font support built on TextMeshPro, followed by upgrades to how text is handled internally, and now building on the Localization features in Unity 2019 and integrating with Daggerfall’s unique text requirements. In the last few months, we’ve started migrating all legacy text handling from DOS files to centralised text databases and overcoming the limitations of classic Daggerfall a few systems at a time.
In this first preview release of Localization, all text from TEXT.RSC and text previously hardcoded into executable have been migrated to replaceable text databases easily edited via the Unity Editor. Helpers have been created to import text from legacy data and fix transcoding back to correct character codes. There’s no longer a limit of 256 characters and fonts can have any number of glyphs matched to their proper universal character codes. Underpinning this is support for locale detection, runtime locale switching, locale-based fonts, and more.
In the following screenshot (click for full size), a custom string table has been generated containing English, French, and German translations for the game. All text is imported from legacy TEXT.RSC files in a single click, automatically remapping transcoded characters back to their correct universal character codes. A simple plain-text RSC markup system has been developed so that translators can write text easily and natively without needing to remember bytecode for formatting RSC strings.
Default locale is selected by user’s current region at game startup. If no translations for that region are available, it will fall back to a parent region or to English. Regions can be switched at runtime in editor or by console. Screenshots below show switching between French and German for the STRENGTH info popup. Each translation can format text as they wish, and you’ll notice the imported French and German translations use different line spacing, the markup for which is visible in screenshot above.
Elements such as UI images with baked in text can be replaced via the standard image replacement process and delivered all together in a single .dfmod package.
Daggerfall Unity Localization is a new feature and will continue to evolve over time. As mentioned, only TEXT.RSC and previously hardcoded strings are currently available for replacement in this preview (which outside of quests is over 90% of all text in the game). Other systems like quests will be moved over to localization in future releases.
You can find more technical information about localization in Daggerfall Unity, including current limitations, in this forum topic. This topic contains a tutorial series in progress demonstrating the creation of a new translation mod from scratch.
Precompiled Mods (TheLacus)
Daggerfall Unity has an integrated C# compiler to build mod scripts at runtime. This compiler has a few limitations and can sometimes require mod authors to work around those limits. If you’ve built a large or complex mod for DFU, you’ve probably hit some of those limits by now. From 0.10.26, you can precompile mod scripts to a DLL using Unity’s built-in compiler. This overcomes the limits of runtime compiler and allows for creation of larger and more complex mods.
This will support using C# features like enum, tuple, and string interpolation – currently unavailable with the built-in compiler. If you’re concerned about safety of a precompiled mod, source can be extracted using tools like the JetBrains decompiler.
Precompiled mods are considered experimental for now. Future development of this feature will continue based on feedback by the modding community as directed by TheLacus.
Mod Dependencies Editor (TheLacus)
TheLacus has also created an easier way to define mod dependencies via the new Mod Dependencies window, available through Mod Builder window.
DungeonTextureTables for RuntimeMaterials (TheLacus)
A limitation of the RuntimeMaterials feature was that replacement dungeon parts would not inherit the correct dungeon texture set unique to each dungeon. TheLacus has refined this now so that replacement models using RuntimeMaterials will inherit the correct textures from the dungeon surrounding them.
Secondary Keybinding / KeyCodes Combos (jefetienne)
Moving on from mod features for a minute, jefetienne has further enhanced the control capabilities of Daggerfall Unity with a secondary keybind UI and support for keycode combos, e.g. “LeftShift + K”, “RightControl + K”, “K + V”, “[ + /”, “Joy3B0 + JoyB2”.
You can switch editing primary and secondary control using the Primary/Secondary button at the top-right of controls UI. Switching will show the loadout for that set of controls, with secondary not bound to anything by default.
You can now clear a selected binding by right-clicking on a previously bound action in the loadout.
With support for keycode combos, jefetienne recommends a new default controller layout.
Cast Spell – B
Recast Spell – LT + A
Use Magic Item – LT + B
—
Ready Weapon – X
Swing Weapon – RT
Switch Hand – R2
—
Status – D-Down
Character Sheet – D-Up
Inventory – LT + Y
—
Jump – Y
Crouch – L3
Autorun (Advanced Controls Window) – L2
Run – LT + L2
—
Rest – Select
Transport – R3
Steal Mode – LT + D-Down
Grab Mode – LT + D-Up
Info Mode – LT + D-Left
Talk Mode – LT + D-Right
—
Activate – A
—
Sneak – LT + L3
—
Logbook – LT + R2
Notebook – LT + X
Automap – D-Left
Travel map – D-Right
—
Pause (Advanced Controls Window) – Start
Quicksave (Advanced Controls Window) – LT + Start
Quickload (Advanced Controls Window) – LT + Select
Automap Dungeon Water (Pango)
Dungeon water is now displayed on the automap, helping you to plan when to pop your next water breathing potion. Pango implemented this in a way that water is rendered neatly inside the dungeon area, and it looks amazing.
City Bulletin Boards (GalacticChimp)
When visiting a large walled city, you might have noticed the bulletin boards posted by the gates. These are now up and running thanks to GalacticChimp, with an epic first contribution to the project.
Other than displaying city name, bulletin boards can also list news about witch burnings, changes to allegiance of the various politic factions, and other flavour text.
Additional Mod Support (Hazelnut)
Hazelnut has extended several classes and UIs to better support changes by mod system. This is hard to quantify in a few words or by screenshots, but will lead to some new and interesting mods from 0.10.26 onwards. For example, Hazelnut’s own Travel Options mod for 0.10.26 takes advantage of these enhancements with a fresh overhaul to travel system.
And Basic Roads, a WIP mod also by Hazelnut.
See Hazelnut’s listed items below for his other changes. It’s incredible to see the mod potential for Daggerfall Unity expand so quickly at this stage in the project.
General Fixes & Improvements
JayH
- Additional quest fixes for dozens of quests
- Fix typos in Noble, Commoner, Temple, Thieves Guild quests
- Add display names to remaining quests
- Add white space to K0C30Y03 to prevent debug comment showing
- Fix _painting_ field in A0C00Y14/15
- Replace %dat with %qdt
- Fix text error Q0C00Y04
- Fix typos in S0000001
- QoL updates for S0000005 to clarify reward and time limits
Numidium
- Apply bonuses and phobias to all attacks, including enemies vs. player and unarmed attacks
DFIronman
- Set Breaking and Entering as last crime comitted (10% chance) after successfully breaking in
- Set IsDiseasePermanent() public and add IsDiseaseCompleted() helper
Pango
- Faster AI obstacle avoidance
- Enemy capsules dynamically resize to fit through doors
- General enemy improvements to doorway pathfinding
- Remove unstick handling as no longer required
- Prevent point blank spellcasting into low obstacles
- Fix parchment tearing in popup message boxes
- Fix vertical progress bar showing single pixel row of gain colour where not intended
- Prevent intermittent enemy spawns on ship
- Remove extraneous empty quest messages
- Support all cursor sizes, using a software cursor on Windows when larger than 32×32
- Fix water splash sounds in very shallow dungeon water
- More accurate pursuit formula
- Fix clock quest timers that would return 0 days
- Fix HUD spell icon blink time
jefetienne
- Add IsLoitering flag
- Allow removing keybinds with mouse right-click
- Change screenshots to JPEG format
- Change default binding of Run and Sneak to Left Shift and Left Alt respectively
- Remove some GC creation in drawing Panels
- Preprocessor definition for separate development persistent data path
- Improve keycode display when not using SDF fonts
Hazelnut
- Allow tavern window extension in mods
- Open permissions and expose buttons on travel popup window
- Use unscaled time for transport animation speed is indepdendent of timescale
- Expose location display name mapping from macros
- Add motion limits for mods and expose applying force
- Use advanced item list in item maker UI
- Open DefaultTerrainTexturer to be extended
- Don’t show holiday text message unless HUD is top window
- Implemented %cn2 macro for jokes
- Allow mods to set extra terrain blend space around locations
- Make vampire satiation check public for mods
- Allow TerrainSamplers to disable default job and do their own location blending
- Move material selection into overridable formulas
- Fix SearchItems method no template index specified
TheLacus
- Do not destroy MobilePersonAsset gameobject to fix re-parenting prefab instance
- Fix IsDirectionClear() for custom MobilePersonAsset
- Improvements to mod builder
- Add run quest action to start a quest and wait for it to complete to run task for success/failure
- Log warning if textue is not readable but needs to be
- Extract mod text assets to PersistentDataPath/Mods/ExtractedFiles which is always expected to be readable
- Better error messages for missing references
- Improvements to mod loader UI
- Discard virtual mods without a valid title
- Add conversion method between Tuple and ValueTuple
Ferital
- Correct %lp macro implementation
- Fix %god macro to match classic behaviour
- Fix quest faction macro expansion
- Fix %imp, %mn, %fn macros
- FACTION.TXT fixes
- Use faction race ID for %oath
- Set race of static NPCs
- Fix spelling of “sorcerer” in quests display text
BadLuckBurt
- Made NextObjectOffset and PreviousObjectOffset public to fix dungeon activators
Interkarma
- Update baseline engine version to Unity 2019.4.10f1
- Allow DrainEffect to drain to 0 before player dies from attribute loss
- Fix ElementalResistance and PacifyEffect spell keys
- Fix CastWhenHeld recast costing another equip charge
- Add matching “Sorcerer” to Quests-Foes.txt table so quests can use correct spelling
- Fix spell expiring 1 round too early
- Add black panel background to talk window
- Round input values when updating border rects to further resolve parchment tearing
- Enable resizable window again (disabled in 0.10.25)
For more frequent updates on Daggerfall Unity, follow me on Twitter @gav_clayton.
Fantatic work boyos!
*fantastic 😜