March Builds Part 2

Just as March was coming to a close, a second round of Live Builds landed for the month. This is primarily a bug-fix release, but thanks to our amazing contributors there’s new stuff too!

Artifact Progress

Some great progress has been made around artifacts lately. There are fixes to their appearance and equipment placement, a new console command to spawn any artifact, and even decent progress on the bespoke effects that make artifacts so unique. I won’t cover the artifacts in great detail here, so check out the UESP Daggerfall Artifacts page for more information about them.


Wabbajack (Numidium)

Wabbajack is a magical staff imbued with the chaos of Sheogorath. Striking an enemy will randomly transform it into another type of enemy. This might turn a powerful foe into a relatively harmless rat. If you’re lucky.


The Mehrunes Razor (Numidium)

The Mehrunes Razor has a chance to instantly slay any enemy.


Oghma Infinium (Allofich)

Reading this powerful book allows the player to distribute 30 points into their attributes.



Azura’s Star (Allofich)

Azura’s Star is a powerful soul gem that can be emptied and refilled over and over. This will be very useful when the magic item creator comes online.



Show Repair Times (Pango)

How long will that Daedric rat-sticker take to repair? Now you’ll know, because repair times are shown before you commit to the repair. You can also take your items back early, although you forfeit the repair costs. And if you don’t like classic Daggerfall’s repair times, you can enable instant repairs in settings. Oh, and you can enable repairs for magic item too, if you like.


New Spells

With the following now available, it means all spell effects in Daggerfall Unity are done. Same goes for all class & race advantages/disadvantages, diseases, poisons, and most of the item powers. The long laundry list of effect-based code is finally close to the finish line.


Dispel Daedra & Undead (Interkarma)

Boop! And the undead are gone! There’s a similar spell for bothersome Daedric infestations as well. Be careful with this spell that you don’t banish your quest target to Oblivion. Banishment doesn’t count as a kill.


Shield (Interkarma)

The shield effect will absorb some or all incoming damage to the player. This includes physical, magical, and even fall damage.


Comprehend Languages (Interkarma)

This effect increases your chance to pacify enemies by speaking soothing lies about how you won’t backstab them the moment they stop looking. Thanks again to Allofich for clarifying how effect operates in classic.


General Fixes & Improvements

Another big list of bug fixes and small tweaks.

  • Fixes for positioning of custom loot containers (TheLacus)
  • Fixes to texture scale of some TRAV* IMG replacements (TheLacus)
  • Fix for invalid collider on custom ladder (TheLacus)
  • Fix for ModSettingsEditor exception when no mod loaded (TheLacus)
  • Reset class creator state when starting over (Numidium)
  • Spellbook now clears labels and icons when no spell selected(Pango)
  • Fixes to some text and message keys (Pango)
  • Fix custom class advancement confirmation when difficulty dagger too high or low (Pango)
  • Fix label alignment in exterior automap with free scale enabled (Pango)
  • Fixes to closing level-up UI when not desired (Pango)
  • Fix to spatial blend of quest sound effects – VENGEANCE is back again! (Pango)
  • Spell merchant – spells are now sorted in alphabetical order (Pango)
  • Fix classic mode attack range (Allofich)
  • Fix case where AI can become stuck during strafing (Allofich)
  • Fixes and cleanup to senses code (Allofich)
  • Fix concealment spells to work again (Allofich)
  • Fix quest enemies from being pacified via language checks (Allofich)
  • Improve pursue behaviour (Allofich)
  • Allow spawned guards to get player’s location (Allofich)
  • Fix how faction flags are merged (Allofich)
  • Implement “cm” (create mobile) console command to generate enemy mobiles (Allofich)
  • Implment “tai” (toggle AI) console command to enable/disable enemy AI (Allofich)
  • Classic update no longer runs when game is paused, fixing breath going down while paused underwater (Allofich)
  • Add soul traps to “add” console command (Allofich)
  • Fix non-paperdoll artifacts appearing on paperdoll (Allofich)
  • Prevent non-guard spawns while player in water (Allofich)
  • Fix %loc macro not expanding correctly in talk UI (Nystul)
  • Quest popups now reveal dialog linked talk options (Nystul)
  • Fix so dialog linked resources only resolve if macro type is NameMacro1 (Nystul)
  • Fixes for most texture alignment issues (Ferital)
  • Swap colour of towns and homes on travel map to match filter buttons (Ferital)
  • Updated project to Unity 2018.2.21f1 (Interkarma)
  • Only enemies capable of opening doors will do so (Interkarma)
  • Exclude static NPCs with special ShowTextWithInput action record from talk system (Interkarma)
  • Exposed maximum stat ceiling formula to mod system (Interkarma)
  • Fix emulation of multiple “when” triggers on a single task (Interkarma)
  • Allow negative values in “legal repute” action (Interkarma)
  • Fixes and improvements to saving throws (Interkarma/Numidium)
  • Ambient light changes now only smoothly change inside dungeons (Interkarma)
  • Mobile NPCs will no longer walk on partial water tiles (Interkarma)
  • Only show “you feel drained” when drain amount > 0 (Interkarma)
  • Fix loading exterior save after dungeon death (Interkarma)
  • Fix expertise in weaponry not being set by custom class creator (Interkarma)
  • Fix increased magery default not set by custom class creator (Interkarma)
  • Refactor nearby objects system to use correct enemy groups (Interkarma)
  • Enable remaining vampire spells now all spell effects implemented (Interkarma)
  • Remove duplicate language tally (Interkarma)
  • Fixes to interior action door model & texture selection (Interkarma)
  • Fix MessageBox with prompt closing when not intended (Interkarma)
  • Fix mobile transform parent for wilderness mobiles so they work with floating origin (Interkarma)
  • Improvements to quest timers and fix for improper +1 day to some timers (Interkarma/Elenwel/Pango)
  • Fix to “say” quest action execution (Interkarma)
  • Implement “when attribute <attributeName> is at least <minAttributeValue>” quest trigger (Interkarma)
  • Fixes to always on trigger handling (Interkarma)
  • Effect broker can now accept custom effect registrations (Interkarma)
  • Summoned items timer now saves/loads correctly (Interkarma)
  • Summoned items can no longer be removed/dropped/sold (Interkarma)
  • Summoned items now have a blue background (Interkarma)
  • Summoned items will no longer stack with normal items (Interkarma)
  • Fix file exclusivity lock issue affecting Anthology game files due to install location (Interkarma)
  • Windows users can now use “daggerfallunity.exe -force-glcore” to start DFU with OpenGLCore renderer for testing (Interkarma)


And that’s it for March 2019. Coming up in April, I’ll be working on completing the magic item creator so we can finally craft custom magic items in Daggerfall Unity.


For more frequent updates on Daggerfall Unity, follow me on Twitter @gav_clayton.

March Builds – Faster Terrain, New Spells, Bug Fixes, QoL Improvements

This article is a bit overdue, it’s for the new Live Builds that dropped on March 03, which in turn is a slightly delayed February build. There’s even another round of March builds coming up with mostly bugfixes, so it’s long past time to write up the change log for early March.

Terrain Performance Enhancements (Hazelnut/Nystul)

This one started in January after Nystul backported some optimisations from his Distant Terrain mod into the default terrain generator. Then Hazelnut added multi-core support for terrain generation so that several computationally heavy tasks could be completed in parallel. That’s a short summary of what was an awesome collaboration with lots of ideas and work being bounced around. And for what turned into almost a complete overhaul of terrain generation, it didn’t cause any major issues, a testament to the skill and dedication of those involved.

Once everything was in place, time to generate each terrain tile dropped roughly in half. This means the world loads more quickly after travel, loading a game, or exiting a dungeon. It’s a huge improvement for overworld explorers and users of Tedious Travel mod (which also received some optimisations around the same time when Hazelnut spotted a timestep issue).

If you use a terrain mod (Distant Terrain, Mountains & Hills), you’ll need to update them for compatibility with March builds.

Sunset screenshot by King of Worms on forums


General Rumours (Allofich)

When speaking to NPCs around town, you might hear news of a ruler overthrown, a witch burning, or some other juicy rumour not related to any of your quests. This system goes a long way to making Daggerfall’s world feel more alive and as though things are happening even when player isn’t involved. Thanks to Allofich, this system is now up and running in Daggerfall Unity.

There’s a bit more to this system than just picking talk items at random. There’s a kind of rotating simulation under the hood that generates rumours about once per month. Allofich has also fixed a problem present in classic where these rumours would stop working after a while. Great work all around.

If you’re just updating to March builds now, it will take around one month of game time before the rumour mill starts generating news.


Spell Reflection/Resistance (Interkarma)

These two effects are vital in any spellcaster’s defensive toolkit. Spell Reflection allows you to bounce the effects of some other spell back to the caster. There’s nothing more satisfying than watching an Ancient Lich blow themselves up by reflecting their spells back at them. And Spell Resistance gives you a chance to shrug off whatever magical attacks come your way.


Create Item (Interkarma/Allofich)

This effect can be used to summon basic temporary items such as armour, weapons, and arrows. It’s most useful if one of your items break in the heat of combat and you need something to arm yourself with until your next visit to a smith for repairs. Additional credit goes to Allofich for implementing the back-end tracking of temporary items.


Charm (Interkarma/Allofich)

The effect works nothing like it says on the tin. It actually has nothing to do with reputation, and instead it’s just another Pacify effect for non-monstrous humanoids. These are the class-based enemies like Knights, Rogues, and Archers that you encounter around the world. The other side of implementing this effect is to fix Pacify Humanoid so it only works on monstrous humanoids as intended. A big thank you to Allofich for clarifying how classic works here and determining the enemy groupings to match classic.

Just like Pacify, a charmed enemy will remain that way until you decide to hit them again.


Classic Spellbook Import (Interkarma)

When importing a classic character, their spellbook is now imported as well.


Click SAVE# To Open Folder (Interkarma)

This one works for Windows users only at this time. If you click the SAVE# index displayed at top-right of screenshot in save/load UI, it will open the folder directly. This will help users find the save folder faster.


Highlight Recently Increased Skills (Pango)

After increasing a skill, it is now shown in blue on the character sheet when inspecting skills for first time after increase.


Messages Log (Pango)

Daggerfall’s text messages are shown for a moment then disappear, it’s very easy to miss some bit of information the game is telling you. With this QoL improvement, these messages are now written to the log so you can look back over them even after they scroll off the screen.

Speaking of scrolling text, Pango has also changed the text to smoothly scroll out the top of screen. The movement helps catch the eye and gives you an extra few moments to read the text before it disappears.



Enemy Strafing (Allofich)

This is an improvement to the Enhanced AI feature set. Enemies will now try to strafe and flank the player during combat. Allofich has made it fairly subtle and not too game-like.


General Fixes & Improvements

  • Fixed freeze with no usable magic item after activating “use magic item” keybind (Pango)
  • Fixed “no item to activate” mid-screen message text (Pango)
  • Fixed ambient effects muting rain sounds (Pango)
  • Fixed classic sky blind spot (Pango)
  • Fixed improper wagon access via identify spell inside dungeons (Pango)
  • Fixed player spellbook returning after discarding it (Pango)
  • Add tooltips to spell icons in spellbook (Pango)
  • Allow fast travel and rest when only pacified enemies are nearby (Pango)
  • Grey out unavailable spells in spellbook that are too expensive to cast (Pango)
  • Increase time for modded sound clips to load, fixing first playback being dropped (Pango)
  • Warn player before taking back item not fully repaired (Pango)
  • Warn player when paid by letter of credit (Pango)
  • HUD text smooth scrolling (Pango)
  • Fixed typos in tutorial quest (Pango)
  • Fixed paying repair price multiple times (Pango)
  • Only allow trade popup if there’s something to do (Pango)
  • Fixes to several Random.Range off-by-one errors (Pango)
  • Hide icons in empty spellbook (Pango)
  • Fix list box row count for small font (Numidium)
  • Allow read-only texture flag for mods helper (TheLacus)
  • Support for TRAV0I00.IMG “travel map” texture replacement (TheLacus)
  • Support for FMAP*.IMG “region map” texture replacement (TheLacus)
  • Improvements to speed of asset injection (TheLacus)
  • Updates to mod builder window (TheLacus)
  • Initial support for custom doors for buildings (TheLacus)
  • Mod serialization now uses invariant culture for better multiplatform support (TheLacus)
  • Fixed temples selling spells to non-members (Hazelnut)
  • Fixed guild expulsion to match classic (Hazelnut)
  • Improvements to AI pursuit (Allofich)
  • Cleanup and fixes to enemy motor (Allofich)
  • Cleanup and fixes to enemy senses (Allofich)
  • Unify timers for classic update simulation (Allofich)
  • Implement “addartifact” console command for future artifact testing (Allofich)
  • Special enemy height handling for large enemies to fit through doors (Allofich)
  • Arrows now use colliders for hit checks (Allofich)
  • Fixed arrows and spell missiles colliding more than once (Allofich)
  • Fixed “mute npc” not rearming when parent task ends/rearms, correcting certain quest NPCs not talking to player (Interkarma)
  • Added “unmutequestnpcs” console command for any saves affected by above issue (Interkarma)
  • Fixed transition events when teleporting outside, correcting issues with blank sky and map exceptions (Interkarma)
  • Fixed text stylisation dropping text in A0C01Y03 “the riddle” quest (Interkarma)
  • Fixed entire Scourg Barrow exterior being considered a door (Interkarma)
  • Ignore swimming encumbrance when waterwalking (Interkarma)
  • Don’t show encumbered message when water walking (Interkarma)
  • Added vampire graveyard background on paper doll (Interkarma)
  • Prevent main story dungeon Direnni Tower from being remixed by smaller dungeons option (Interkarma)
  • Added “addspellbook” console command for adding a spellbook at any time (Interkarma)
  • Fixed quest offer presenting when a suitable location could not be found (Interkarma)
  • Fixed enemy groups for Pacify Humanoid effect, this should only operate on monstrous humanoids (Interkarma)
  • Additional fixes to being crushed improperly by environment (Interkarma)
  • Fixed arrow hits forcing player into a permanent crouch (Interkarma)
  • Fixed rappel state not being cleared when grounded (Interkarma)
  • Fixed classic keys not mapping to all variant effects (Interkarma)
  • Fixed tavern rest ejecting player into void (Interkarma)
  • Fixed “give pc” quest action improperly rearming (Interkarma)
  • Fixed spell debuffs from enemy casters not deserializing correctly from saves (Interkarma)

January Builds – Vampirism, Spell Icons, More Magic Stuff, New Quest Actions, and More!

It’s time for a fresh round of Live Builds for January 2019. The last month has seen a lot of progress across a wide variety of systems, so rather than waste time on an intro. let’s get right into it.


The full loop of Daggerfall-styled vampirism is now in the game from curse all the way through to cure. Each time you’re mauled by a vampire, you have a 0.6% chance of contracting the disease that will transform your character into one of their kind. Some time after being infected, your rest will be plagued with bad dreams. Unless you like fangs and late-night shopping, this would be a good time to find a temple and cure yourself of diseases.


If you allow the disease to continue a few days, you will “die” and awaken two weeks later interred somewhere in the region. In classic Daggerfall, your death will also remove you from all guilds and reset your legal reputations. At this time, Daggerfall Unity doesn’t modify guild memberships or reputations, this will be implemented sometime in the next few months.


Becoming a vampire comes with some great perks. You can no longer be touched by weapons less than silver quality, you get +20 to most attributes, +30 to Climbing, Critical Strike, Hand-to-Hand, Jumping, Running, and Stealth, and unique vampire versions of spells including one specific to your clan. I should note that only Levitate and clan-specific spells are currently delivered to vampires. Charm Mortal and Calm Humanoid are not working yet, but will be added soon. You also get a nice set of fangs and some really bloodshot eyes.


It’s not all positive though. As a vampire, you will start taking damage from sunlight and holy place. But most pressing of all is the need to satiate your urge to kill at least once a day. If you fail to kill each day, you will find yourself unable to rest which can make things difficult. Fast travel will also make you arrive at night, so you will have limited time windows for shopping in cities before they close.


After playing for a while, you will receive unique vampire quest, starting with an introduction ques from your clan. There are 10 vampire quests in total, including one that will cure you of the infliction.


It’s probably worth mentioning that most of the back-end work for racial override effects is now complete, so lycanthropy won’t be too far away.


Continue reading

Daggerfall Unity 0.6.1 Stable & 0.7.2 Combined Releases

Happy New Year everyone! It’s great to be here in 2019 at last. This will be the year that Daggerfall Unity steps out of pre-alpha into alpha, and reaches feature parity with classic Daggerfall. If you haven’t seen the Roadmap page lately, it’s time to take another look. There aren’t too many items left now and no major systems remain to be developed. Everything that’s still to do is just a small part of an otherwise finished system. Even the Quest System and Effect System roadmap pages are looking very green these days.

With a busy end to 2018, I didn’t make time to put up change notes for the Live Builds released on 20 December 2018. I think its a good idea to address these changes before dropping the next release, or solid contributions from our developers aren’t going properly credited. Let’s start with the highlights of new features from 0.6.1 Stable and 0.7.2 builds. I’ve tagged anything introduced in 0.7.2 with [0.7].


Hanging Mode for Advanced Climbing [0.7] [Meteoric Dragon]

Upgrades to the optional Advanced Climbing system allows skilled climbers to hang from ceilings and eaves, and climb around on ceilings. This rounds out the other Advanced Climbing features such as sideways movement on walls and climbing around corners.

direct link to gfy


AI Obstacle & Fall Avoidance [Allofich]

Enemy mobiles have learned a few new tricks, and it’s a bit harder to trap them on the environment now. In addition to moving around static and dynamic obstacles, they’re smart enough not to walk off high places. While this isn’t perfect yet, it’s still a big improvement over classic AI. In other news, enemy AI is now capable of bashing open locked doors to reach the player!

direct link to gfy


Personal Light Sources [Hazelnut]

If you enable “item based player torch” in startup settings > Advanced > Enhancements, you can finally make use of those lanterns, torches, and candles in General Stores. Lanterns and torches can be refuelled using oil, also found in General Stores. If you make dungeons darker with the ambient light settings on the same Enhancements page, this adds a nice RP touch to dungeon delving. It can be quite tense knowing you’re running out of lantern oil and about to be lost in the dark.


Potions [0.7] [Hazelnut]

This is a big one! All potion recipes and effects are now supported in game, along with the crafting UI to make them. As a Daggerfall Unity quality of life feature, like-kind potion will stack.


Continue reading

Creating SDF Fonts For Daggerfall Unity


All the way back in September, I upgraded font rendering in Daggerfall Unity to support Signed Distance Field (SDF) fonts. This enabled smooth high-resolution font replacements which can operate under the same “layout rules” as classic Daggerfall’s pixel fonts, with a substantial improvement to reading comfort as this comparison screenshot demonstrates.


Rather than storing individual display pixels of a text glpyh, SDF fonts store a distance value that can be turned into display pixels later at any resolution using a custom graphics shader. Unlike regular pixel fonts that become quite pixelated at high resolutions, SDF text can use those distance values to generate sharp detail even at UHD resolutions and beyond. If you’re interested in the inner workings of Signed Distance Fields, there are loads of great resources out on the web. This tutorial doesn’t look very deeply at SDF concepts, only the process of creating new SDF fonts for Daggerfall Unity.



There are a few resources you will need to work through this tutorial.

You can use whatever font or tools you like to generate your SDF font atlas. This is just the process I’m using that will generate known-good output for Daggerfall Unity. If you do use a different toolchain, the only thing that matters is the output image is a proper SDF texture and the glyphs are laid out in a specific way.


Continue reading

Notebook, Enemy Spellcasting, And Bug Fixes

To cap off a great month of progress, we have one more round of builds for October. This was going to be a solely bug-fix build, but amazing work kept on rolling in and I’ve decided to get these new features out to you now rather than wait until November.


Enemy Spellcasting (Allofich)

Building on top of my work on the magic & effect system, Allofich has wired up foes to hurl spells back at the player. This means ancient liches and vampires are serious threats again, imps are more than just a nuisance, and scorpions and spiders will just wreck your happy feelings with paralysis.

A lot of work was required in enemy AI to select spells based on touch or range. Enemies might stand their ground and hurl a fireball, or approach and attack player with a touch spell. And unlike in classic where the monster’s entire payload of spells are released instantly, they now make more intelligent decisions and release spells at sensible casting intervals. I can’t put into words just how amazing Allofich’s work on this has been. Magic in Daggerfall Unity suddenly doesn’t feel quite so one-sided, and magical encounters have become very dangerous again.

Here’s a short video where I pick a fight with some denizens of Mannimarco’s lair. Everything goes about as well as expected.

direct link to gfy


Continue reading