September Builds 0.10.6

Live Builds have been updated with version 0.10.6. This release patches a massive number of bugs, and we still made time for some new features. I’ll provide a quick summary of the major stuff first.

Quest Lists (Hazelnut)

If you enable setting Advanced > Enhancements > Guild quest player selection, then guild quest-givers will offer multiple quests at a time, rather than needing to keep clicking “no” until you see a quest you like.

 

Quests will rotate every so often to give you a fresh selection to choose from. This feature also has thanks to Firebrand who entered all the quest display names.

 

Quest Marker Refactor (Interkarma)

Quest markers are an invisible scene object onto which quests will associate various targets (NPCs, Items, Foes). From 0.10.6, Daggerfall Unity is using a new process for placing quest resources to markers that fixes a couple problems and helps the game behave more like classic.

One major issue resolved by this was introduced when DFU added the facility to move quest resources between locations. An example of this is Barenziah’s Book, which moves the target from Orsinium to Scourg Barrow if the player does not retrieve it in time. Due to an error in the resource culling code, it could sometimes remove items from other quests that used the same symbol name. For example, if the quest wanted to place/relocate an item with the symbol name _item_, it would also cull items from other executing quests that had already placed an item also using the same symbol name _item_. The quest most commonly affected by this was the Wayrest Painting.

I recommend everyone update as soon as possible to get this fix. While it was a fairly rare bug and required a specific set of circumstances, it was a showstopper if you were affected by it.

The second issue resolved by this was to make marker selection more like classic. DFU would place items to Quest Item markers and NPCs/foes to Quest Spawn markers. But sometimes a quest foe needs to be placed on an item, or an item placed onto an NPC. Classic will stack subsequent resource placements onto the first, such as the item’s guardian in screenshot below. With the new marker selection, both item and guardian will appear together as they should.

 

When loading a save game from prior to 0.10.6, DFU will migrate any marker placements to the new system automatically. This works even if you’re in the target location. Any new quest will just use the new marker system by default.

 

SDF Font Refactor & Book Reader Refactor (Interkarma)

The first implementation of SDF fonts would stretch each glyph to occupy the same physical space as the classic glyph. While this made the fonts smoother, it still had some major limitations:

  1. SDF text was stretched or squished to occupy the same physical space as its classic counterpart.
  2. SDF text was limited to using the same character type as classic, namely ASCII, which greatly limits translation support.
  3. SDF text inherited the same bad layout as classic text in places like books.
  4. Creating SDF fonts was a difficult process.

Fixing all of the above is a key part of future translation support. There’s no point in having translated text if the game is unable to render it properly. So a general rework of SDF fonts was required.

The first major change from 0.10.6 is that DFU uses a UTF32 code format internally for all SDF text. Unlike ASCII, you can throw pretty much any text at it, and provided the font has glyphs for those codes it will be rendered correctly in-game. This also means you can create SDF font atlases with thousands of characters rather than being limited to 256 for ASCII. And translators will be able to write text in their actual language rather than entering gibberish using the high-range areas of ASCII code space.

The second change is how SDF fonts are created. Rather than using external tools, you can use the TextMesh Pro font asset creator and DFU can load these assets directly. Note that DFU is currently being compiled under Unity 2018.2.x, so TMP 1.3 is still in use. DFU also does not use TMP for font rendering, as we have a very custom UI setup including fonts, but it can use these TMP font assets. I’ll post an updated article soon showing how to create new fonts and mod them in-game. Any old font mods will no longer work in DFU.

The third change is to how text is laid out on screen. DFU will no longer stretch text to match classic scale and use the actual font’s true proportions at all times. This makes for better-looking and more readable text layouts all around. It might be an unwelcome change if you’ve become adapted to the old stretchy font, but SDF text really looks better now and is far more flexible. This whole process was an important step in breaking free of classic text limitations and enabling future translation support.

Finally, the way text is laid out needed to be reworked. We’ve all seen how classic books often have text scattered all over the place. I’ve completely rebuilt the book reader to use the new text setup and automatically layout book text. This makes 99% of books more readable than ever. And they now support any left-to-right language with the right font and text driving them. The book reader will be used to help pilot all the new translation features later in Alpha lifecycle.

Here’s a screenshot of the old book reader and new book reader for comparison. I’m using a book with bad formatting layout to show how the new reader overcomes this issue present in classic data.

 

You’ll notice right away the formatting is better, the text proportions are better, and the margins have been expanded to make the text easier to read. I have also changed the book reader to use a scrolling setup rather than a page flip, as I feel this makes text much easier to follow with the eye.

 

Fix Resistance Checks & Ranged Enemy Spellcasting (Interkarma)

A bug was preventing correct resistance checks, so a character who should be 100% immune to something (e.g. Paralysis) was still occasionally stricken by that during combat. I finally got to the bottom of that problem and have resolved it now. If you have true 100% resistance to something, this will now work 100% of the time.

Note that the bug/exploits of combining High Elf Immunity to Paralysis with Critical Weakness to Paralysis still results in an impaired resistance in DFU, and that Immunity to Magic will only cover the Magic element (i.e. Arcane) not make you immune to all magic. But the problems of true 100% resistance not being correctly regarded have now been solved. During the process, I also restored the “save vs spell” message when you resist something so that you know what happened.

Also during this process, I found the cause behind enemy spell casters no longer hurling ranged spell missiles at the player. This has been fixed now, so this little green guy is properly dangerous again.

 

Virtual Mods (TheLacus)

This is a behind the scenes change to help support mod authors build and test their mods. If you’re a mod author, start with TheLacus’ description of this change in the following Issue on GitHub.

The gist is this change helps mod authors test and debug their work before bundling it as a .dfmod for end users. This is really important stuff that helps make the game and its addons better for everyone longer term. Thank you TheLacus!

 

Travel Map Refactor (Interkarma)

Over time, the travel map could leak a lot of texture memory. And if you knew how to trigger it, you could spam this leak in a few minutes to bring your game right to chugging point. I believe this issue is behind some of the problems with poor performance on systems that should be able to handle DFU just fine. If you notice your performance drops after a few hours of gameplay, and that restarting the game fixes it, this was likely the reason.

 

I had to rewrite about 50% of the travel map UI to make this change. Everything should just look and work exactly like before, except faster and without the memory leaks. I have tested this extensively before release, but if you encounter any regressions with the travel map please let me know.

 

General Fixed & Improvements

Lots of fixes this time around, large and small. So many that I’m going to sort them by developer.

FrozenFish24

  • Add exclusive fullscreen option to settings.ini – will be added to startup UI once Unity upgraded to 2018.3 or later

Ferital

  • Fixes and refinements to NPC talk reactions
  • Tone button in talk window now remembers last setting
  • Fix activation issues for Sheogorath and similar NPCs
  • Remove generic factions from rumour mill
  • Add Order of the Raven faction to their guild halls
  • Guilds now display “guild closed” instead of “shop closed”

Nystul

  • Fix for answer rumours (answers to tell me about topic) being incorrect
  • Fix automap user notes disappearing after saving and loading
  • %di macro improvements and bug fixes
  • Several talk manager fixes when asking for directions
  • Fix for talk window exception after classic save import
  • Fix %di exception when player in same building as target NPC
  • NPCs now always know the answer when NPC asked about is in the same building

Jay_H

  • Enable more classic quests
  • Several more classic quest fixes
  • Rebalance spawn rates for household vermin cleanup quests
  • Add alertness messages for vermin quests so player knows they’re in right place
  • Add delay to Morgiah’s Wedding quest so player can read invitation
  • Fix some change notes being visible in quests
  • Fixes to Dark Brotherhood acceptance quest

TheLacus

  • Sort mods by load order at startup
  • Add console commands to create specific items
  • Mod configuration now stored in persistent data
  • Automatic cleanup of mod configuration folder
  • Upgrade support for book replacement
  • Handle exception when upgrading mod config
  • Fix issues with billboard custom scale
  • Support texture replacement for cloak interior

JorisVanEijden

  • Fix arrow blood splash position
  • Fix crash for %di getting direction without location
  • Add location reference to quest when location comes from a person
  • Fix HaveItem clearing target when item is gone and revert workaround
  • Show author as unknown for broken/missing books
  • Add CAV action door type for secret doors in caves
  • Add logging to quest item creation and add error feedback to logs
  • Expand range of NPCs considered to be local residents
  • Fixes to classic quests
  • Prevent vampire sun damage in prison
  • Picking up dropped quest item will reset “has dropped” flag
  • Fixes to lycanthropy max health degrade and health top-up after curing
  • Support for magic item subclass selection from quests

Eric Prokop

  • Fix fast travel to arrive at night for characters with sunlight damage trait

Pango

  • Don’t display Find button on world map first use
  • Fix selecting EQUIP when opening inventory explicitly
  • Visually clamp difficulty dagger to gauge limits
  • Don’t ground player when onboarding ship
  • Fix fog being displayed on automap
  • Add openpotionmaker console command
  • Fixes to proximity wagon access in dungeons
  • Adjust default keybind text in tutorial quest
  • Fixes to receiving armour from knightly orders
  • Harden timescale against negative values
  • Add missing sounds for journal, notebook, and book reader
  • Fix typo in classic quest
  • Workaround for “water everywhere” tilemap issue on lower-end hardware
  • Change activation click to use button up rather than button down to prevent input fallthrough into some UIs
  • Adjust falling damage to better match classic

Hazelnut

  • Allow paintings to be sold at pawn shops
  • Fix removing single ingredient from wagon during potion making
  • Add journal message when buying a house
  • Fixes to reputation propagation for single factions
  • Fix enchanted items being regarded as ingredients
  • Update NPC presence when rest dialog dismissed
  • Cart now moves at correct slower speed
  • Fix coin anim on inventory window
  • Adjust riding volume to match footsteps
  • Add some modding facilities for horse riding
  • Fix to horse fatness by reducing width 20% to better match classic
  • Fix direct stat mods not being cleared when no effect bundle active
  • Fix default action mode not selected when opening inventory outside of dungeons

Interkarma

  • Use permanent endurance during level-up formula, as live endurance might be affected by spells/diseases/etc.
  • Fix magic item repair not working when setting is enabled
  • Vampirism/Lycanthropy lifecycle fixes to prevent stacking dreams, spells, and accidental deletion of spells
  • Refresh equipped armour values after enchanting item
  • Fixes to cleaning up objects spawned to StreamingTarget
  • Fix for evaluating travel-to location from journal clicks, now only regards locations mentioned in text
  • Fix for quest residence names being marked incorrectly on map
  • Quest-killing exceptions are now logged in save data
  • DFU version is now stored in save info
  • Remove “unmutequestnpcs”, this was only to fix a specific quest bug and is no longer required
  • Add “summondaedra” console command
  • Implement Foe item queues to support item persistence when moving Foes between locations
  • Fix fog colour turning black after entering and exiting buildings
  • Heavy weather-based fog is now already white/gray rather than atmosphere coloured
  • Fix check preventing enemies from casting ranged spells at player
  • Fix “save vs spell” not being displayed for magnitude-based spells
  • Add cursor activation toggle (default key is Enter) as part of preparing for large HUD support
  • Use building fallback for local quest places
  • Remove hanging mode, as this feature is now discontinued by Meteoric Dragon
  • Add quest NPC automatic home fallback
  • Rework quest marker selection to better match classic
  • Implement “tele2qmarker” console command, this will replace both “tele2qitem” and “tele2qspawn”
  • Fix for entering duplex homes while selecting entry position
  • Fix compass and other HUD elements being shown at wrong size/position briefly during initial startup
  • Fix magic battle-axe animation ordering
  • Travel map refactor for performance and fix memory leaks