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

Daggerfall Unity Alpha Release

The first Daggerfall Unity alpha release is now available on Live Builds. Since announcing this a few days ago, I’ve been honestly overwhelmed by the well-wishes and positive feedback from you all. Thank you everyone for your support, it means so much for a project like this. Your kind words help me to come back each day with a fresh heart.

So what does the alpha milestone mean? For Daggerfall Unity, this means we are now at broad feature parity with classic Daggerfall. Not only is the game playable from start to end, but all the core gameplay systems from classic are implemented and available. Hitting alpha means that development will shift from adding new gameplay features to refinement and fixing bugs. There are also a few features unique to Daggerfall Unity that I’ve been saving for the alpha cycle. Check out the roadmap to see what’s coming up next.

In some ways alpha doesn’t feel like a big deal. We were almost there in June with only a single enchantment effect and a couple of artifact effects remaining. But emotionally I feel that reaching this point really is a huge milestone. It represents the final stages of development are here at long last.

 

What Happens Next?

We are now at the point where development becomes all about refinement and bug fixes. Sadly this means my regular monthly updates from the last year or so have come to an end. There are no more big exciting features like Vampirism or Enchanting to tear the wraps off each month. Now comes the hard work of patching logic errors, polishing systems, and gradually iterating over the game. This could mean a release every second month, or even multiple times a month. It just depends on the work being done and when I’m confident to release patches.

Once the final alpha targets have been reached, we’ll roll into beta. Only after a solid beta cycle will I be happy to call release milestone and 1.0. I don’t have a time-frame on this right now. I’d rather have an extended alpha/beta period and fix as many problems as possible than rush into release. But there’s no reason not to play now if you want to – the game is done. It’s just going to become more bug-free and polished as time progresses.

The cadence of development will change moving forwards as well, because the upcoming releases are more about quality than quantity. As the game reaches an increasingly stable state, and stewardship of Daggerfall Unity shifts from solely myself to the community at large, the amount of my personal time required on this project will start to wane.

As I get more free time at the tail-end of Daggerfall Unity, I’m going to spend that time working a new game. This won’t be another remake, it will be something original and a bit personal. I’ll reveal more on this once I’ve made enough progress, perhaps later in 2019. But don’t worry, I’m not going anywhere. I’ll still be involved in this community for years to come.

 

July New Features

So what’s new in this month’s release? There aren’t many new features as so much work has been completed already. But there are a couple of new things to play with.

Soul Bound Enchantment

 

Once you trap a soul, you can bind it to an item at the enchanting station. This allows you to add more positive effects to that item, but not without a cost! Certain souls will forcibly bind other effects, both positive and negative, to your item. And if your item break then the soul trapped within will be released to attack you. If it happens to be your weapon that just broke, you might find yourself in a spot of trouble.

 

 

Classic Quest Fixes (Jay_H)

For the last several months, community superstar Jay_H has been toiling over the classic quest scripts. He has managed to turn out hundreds of fixes and refinements to these quests, above and beyond any prior community fixes. He has corrected logic problems around quests ending and delivering rewards, and worked around many emulation issues caused by subtle differences in Daggerfall Unity’s quest engine compared to classic.

There’s no way to put all of this in a screenshot, or even adequately describe just how much work has gone into this. Questing in Daggerfall Unity is now a much better experience thanks to Jay’s substantial efforts.

That’s not to say everything is perfect yet – we still have a long way to go before all of classic’s quests are stable enough for 1.0. But this is a huge stride towards the finish line. Thank you Jay!

 

General Fixes & Improvements

As with every prior release, there’s a list of bug fixes and refinements that have gone into the game thanks to everyone involved.

  • Experimental support for custom books (TheLacus)
  • Allow import of spell icon packs from mods (TheLacus)
  • Fix texture import for bow (TheLacus)
  • Fix weapon image pixel bleeding (TheLacus)
  • Support for importing texture arrays as assets (TheLacus)
  • Fix AssetInjection option not saving correctly (TheLacus)
  • Fix issue with metallicgloss maps (TheLacus)
  • Fix ground alignment for loot with custom scale (TheLacus)
  • Fix bug with residance name not being resolved on info click (Nystul)
  • Fix broken exterior automap when starting from interior save (Nystul)
  • Fix for 1×1 town positioning in automap (Nystul)
  • Improve ambient sound volume and prevent sound stacking (Pango)
  • Improvements to automatic wagon access when near exit (Pango)
  • Refinements to location search algorithm (Pango)
  • Fix fast travel to ground level when elevation below player’s current height (Pango)
  • DaggerfallTilemapTextureArray shader improvements and cleanup (Pango)
  • Fix closing Use Magic Item when not intended (Hazelnut)
  • Fix for joining Thieves Guild and Dark Brotherhood regardless of intro quest failing (Hazelnut)
  • Restrict interior loot piles to Thieves Guild, Dark Brotherhood, and taverns (Hazelnut)
  • Fix for non-temple greeting messages (Hazelnut)
  • Change guttering effect on player torch from flicker to cosine effect (Hazelnut)
  • Fix macro %n gender in quests (Ferital)
  • Fix initial quicksave not working for quickload (Ferital)
  • Handle %bn macro in biographies (Ferital)
  • Enable random Khajiit name generation in character creation (Ferital)
  • Minor improvements to magic stocking, more fixes required (Interkarma)
  • Fix to import corrupted/unsupported spellbook as blank (Interkarma)
  • Added magic item repairs option to startup UI (Interkarma)
  • Illegal rest warning option to help prevent accidental rest in towns (Interkarma)
  • Clear escoring faces on a new game (Interkarma)
  • Fix regex issue with Item resource declaration (Interkarma)
  • Fixed table definition for Mehrune’s Razor (Interkarma)
  • Support for child face textures in quests (Interkarma)
  • CreateFoe support for msg id popup (Interkarma)
  • Fix RestrainFoe only working on first foe (Interkarma)
  • Fix legal reputation to be clamped between -100 to 100 (Interkarma)
  • Fix for “The Princess” and similar quest to display correct sprite gender (Interkarma)
  • Fix grounded collision check when starting rest while levitate active (Interkarma)
  • Allow proximity wagon access from any exit door (Interkarma)
  • Lycanthropy is now a free spell (Interkarma)
  • Implement Peron details macro, e.g. =npc_ might be “young lady in green” (Interkarma)
  • Fix shadow distance and quality being overwritten at runtime by pause menu details slider (Interkarma)
  • Fix three-day lycanthropy disease not being curable by temples or Cure Disease spell (Interkarma)

Change in 0.10.3 from 01-Aug-2019

  • Implement soul gem selling service (Hazelnut)
  • Default filtermode for loose files textures (TheLacus)
  • Player history window scroll with mouse wheel (TheLacus)
  • NPC reactions adjustment (Ferital)
  • Handle %nrn macro expansion (Ferital)
  • Workaround for N0B00Y16 “Open Chest” Mages Guild quest not completing (Jay_H)
  • Fix player reposition reverstion (Interkarma)

 

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

June Builds – Map Upgrades, Retro Rendering, Crime Features, and More!

New Live Builds are now available, combining all our work for month of June. We managed to get a lot done this month, even making a break into 0.8 with new crime features. Let’s start breaking it all down.

Improved Travel Map Search (Pango)

Some of the randomly named locations across the Illiac Bay can be challenging to search for. Either the name is very long like “Bleeding Redeemer of Kynareth” or just plain weird like “Old Barbyvyra’s Farm”, and players would sometimes need to switch back and forth between quest log and map screens before they could perfectly enter enough of the location name for search to work.

Those days are over with Pango’s most welcome upgrade to search in the travel map. Now you can just enter any part of the name, you don’t even need to spell it quite right, and the search will find all the closest matching locations. Look what happens when I mangle “Old Barbyvyra’s Farm” to just “barbv”.

 

First hit is exactly what I’m searching for, along with a reasonable number of other matches. If you enter enough of the name perfectly like before, the location will be selected immediately without showing the above UI.

 

Improved Terrain Tilemap Shader (Pango)

My original tilemap shader had the limitation of not being able to mod ground textures. This was later upgraded by Nystul to use texture arrays to support replacement ground textures. This has now received another pass by Pango to improve mipmap blending and restore some detail back the ground when seen from a distance or an elevated position. In the comparison screenshot below, the left side is “before” and right side is “after”. Note how much more detail is present on the right. This looks even better with modded HD textures over the ground.

 

Pango has another terrain refinement on the way to reduce some cracking between tiles, but this code wasn’t ready at the time June builds were created. It will be included in July releases instead.

 

Interior Automap Upgrade (Nystul)

Nystul has done an amazing job of not only recreating the classic dungeon/interior automap but improving it in dozens of small ways that each incrementally improve the overall experience. This release sees more refinements that make the interior automap better than ever.

  • 3D view is now default (a highly requested change)
  • Tooltips updated to be shorter and clearer (should even fit 4:3 displays)
  • Beacons optimised with transparency added
  • Classic micromap has been added to help understand dungeon shape
  • Fixed a bug for interiors where the entrance door position was wrong

There’s also new stuff you can do with the automap now:

  • Add dungeon custom note nodes by double-clicking
  • Right double-click on user note marker deletes it
  • Right double-click on map geometry sets rotation pivot axis

 

When it comes to viewing information about the map, hover your mouse over the following to get more details:

  • User note markers reveals their attached note in the status bar (in the bottom of the automap window, see screenshot above)
  • Player position beacon, player marker, rotation pivot axis, exit beacon and marker reveal their purpose in status bar
  • Portal markers (e.g. red brick wall teleporter) will show connection between portal endpoints
  • Discovered portals will tell in the status bar if the portal is the entrance or exit endpoint (see blue line in screenshot below)

 

Finally, there are a few more settings in the INI to customise how the automap operates:

  • AutomapDisableMicroMap – True disables micro map display
  • AutomapRememberSliceLevel – True remembers slice level on map close/open
  • AutomapAlwaysMaxOutSliceLevel – True maxes out slice level (and making AutomapRememberSliceLevel having no effect)

 

Game Window Refinements (Interkarma)

I’ve had a several requests to make Daggerfall Unity fullscreen into a borderless window. This confused me, as fullscreen has always been a borderless window. I finally understood that what people were asking for was the borderless fullscreen window to be visible in background rather than auto-minimise when alt-tabbing away. I have changed this now so you can keep the borderless game window open in background while doing other stuff in front of it.

 

If you prefer to do things the other way around, you use Alt+Enter to toggle between fullscreen or windowed mode at runtime. You can even drag the window size around, but note this will be reset next time you launch the game. Set in startup UI or settings.ini to make it permanent.

 

Retro World Rendering (Interkarma)

There’s a wide range of Daggerfall Unity players from hard-core classicists all the way through to high-end upgraders. While the latter has been fairly well represented through the mod system, the former hasn’t been able to render the game in 320×200 without also suffering blurry visuals and text. Even though the game could technically render to 320×200 resolution, it would be presented with bilinear filtering at the player’s display resolution, resulting in an unpleasant blur. As Unity doesn’t let us control this final presentation filter, we had to work around it by rendering game to a secondary render texture then presenting this manually with a second camera.

To enable in startup settings, go to Advanced > Video and set Retro Rendering Mode to either Off, 320×200, or 640×400. This setting is Off by default. Once set to 320×200 or 640×400, the game world will be rendered at that resolution while UI remains at your set display resolution. This allows you to have smooth SDF fonts and modded UI textures while the world is nice and crunchy. Or you can disable SDF fonts (use Shift+F11 to toggle at runtime) and mods for an almost perfect 320×200 experience.

 

Now that you can control rendering resolution and presentation (display) resolution separately, those of you with monitors that can display 1600×1200 (e.g. 1920×1200 or UHD monitors) are able to have the best experience. The explanation is a little technical (this article covers in detail) but if you set things up like below, you’ll have the best retro experience possible:

  • Set game resolution to 1600×1200 (at startup resolution selection)
  • Enabled retro rendering for 320×200 or 640×400 (Advanced > Video > Retro Rendering Mode > 320×200 or 640×400)
  • Enable UI free scaling (Advanced > Interface > Free Scaling)

This will fix the extra w-i-d-e stretching you see on sprites when presenting to wide-screen displays. Depending on your display, you may get some pillarbox bars on either side to create the correct aspect on your monitor. I will soon update this topic on forums with updated retro settings for 0.8.

 

Details Slider (TheLacus)

From the pause UI, you can now adjust the details slider to change the quality settings used by rendering.

 

You can now also use “fullscreen” button to toggle between windowed and fullscreen mode. Note this will be reverted to work like classic once the larger quarter-screen HUD is implemented in Alpha.

 

Private Property Guard Response (Numidium)

If you steal from private property, and failed your pickpocket roll, you should expect to be visited by the city watch. These guys are not messing about!

 

Numidium has improved interior guard spawns so they always come in through the entrance door at ground level. Keep that in mind if buildings have an upstairs exit for a fast escape. Also note that if you break into a shop outside of hours, nobody is around and you won’t need to pass a pickpocket check to loot from private property.

Post-release note: Being arrested indoors has a “teleport to void” bug as of 0.8.2. Recommend fighting or running for now until this is fixed.

 

Faction NPC Greetings Now Match Classic (Ferital)

NPC greetings, particularly those related to guilds and non-joinable factions such as bards and merchants, have been matched to classic by Ferital. This involved a good amount of reverse engineering of classic to determine how those greetings were selected, not something I can capture in a screenshots alone.

 

 

Level-up Progress (Hazelnut)

Clicking on “Level” in your character sheet will now display a popup dialog showing your progress to next level based on skills gained this level.

 

Bow Drawback (Hazelnut)

By enabling setting in Advanced > Gameplay, bows will now work using drawback and release rather than single click to attack. Holding the attack button (right mouse button) will raise bow and releasing attack button again will loose the arrow. You can hold bow in drawback position for up to 10 seconds before your arm tires. If you click the left mouse button while bow is drawn back, it will also cancel drawback.

 

Dungeon Wagon Proximity Access (Hazelnut)

“Do you wish to access your wagon and stay in <dungeon>?” If you’re sick of that prompt, you can now just access your wagon provided you’re close enough to the exit. You can even disable the prompt completely in settings.ini using “DungeonExitWagonPrompt=False”.

 

New Paper Doll Renderer (Interkarma), Supports Texture Replacement (TheLacus)

This one is hard to show in screenshots, as by default it looks just like the old paper doll renderer. But under the hood, the paper doll renderer has been replaced completely from software drawing with no mod support to a GPU shader that supports texture replacement via the mod system.

Internally, the paper doll image is rendered to an 8x render texture (that is 8x the size of classic paper doll). For classic body and item images, this looks exactly the same when scaled back into position. But it’s actually a much larger image with loads more pixel density.

 

With support from TheLacus in the mod system, it’s now possible to replace equipment with HD textures. It even supports custom masking to paint out the areas where hair, etc. should be blocked by helmets.

 

You can also finely control scale and offset of replacement image using XML, in a similar way to changing other texture replacements. See the Textures modding documentation for more details.

 

Breaking & Entering (Interkarma)

Locked buildings now have variable lock strength. You’re no longer guaranteed to pick the lock every time.

 

Just like in classic, failing to pick the lock means you can’t retry until your lockpicking skill increases. This is cached on a per-building basis in discovery data. If you do succeed your lockpicking attempt, you’ll get a satisfying click as the door unlocks and you enter building.

If you do fail though, what other options do you have? You have been able to bash in exterior doors for a while, but now guards might be alerted from the noise. The chance of guards is lower than the chance of successfully bashing the door, but you won’t always be lucky. It’s like these guys have nothing better to do than wait around for you to cross a line.

 

The other change to breaking and entering is how the Open spell works. Just like with dungeon doors, your player level must meet or exceed the lock level. Whereas dungeon doors go from strength 1 to 20 (magical), building locks only go from 1-10. Higher quality buildings have a better lock strength than lower quality buildings.

 

More Artifact & Enchantment Effects

At this stage, it’s easier to say what hasn’t been finished. So here’s the entire TODO list for magic:

  • Soulbound enchantment
  • Lord’s Mail, Staff of Magnus need health regen payload
  • Skeleton’s Key needs support for magical locks

The Effect System Status page will reflect when these have been implemented.

 

General Fixes & Improvements

  • Mod system general cleanup and improvement (TheLacus)
  • Filter identical resolutions from setup UI (TheLacus)
  • Ensure emission maps are same size as albedo (TheLacus)
  • Improvements to pause window implementation (TheLacus)
  • Added OnPreFastTravel event for mods to capture (TheLacus)
  • Fix scale of modded daedra summoning window (TheLacus)
  • Opening automap no longer affects scene lighting (Nystul)
  • Fix automap save crash under some conditions (Nystul)
  • Fix “i’m at” setting correct location after searching (Hazelnut)
  • Implement %n, %vcn, %rn macros (Hazelnut)
  • Fix “no arrows” message when loading game while holding bow (Hazelnut)
  • Fix exception when no building discovered (Hazelnut)
  • Fix potion recipes added to loot and shelves to not show as “unknown” (Hazelnut)
  • Fix material applied to arrows in loot (Hazelnut)
  • Fix black background for negative reaction popup (Pango, Hazelnut, Ferital – seriously, all of them fixed this)
  • Expand serialization of social groups for effects (Numidium)
  • Add type inference to ScreenComponentCollection (pcbeard)
  • Improvements to transport manager (zaklaus)
  • Notebook file now cleaned up when deleting save (jbrod22)
  • Double-click no longer closes spell merchant window (Pango)
  • Display available money in spell merchant window (Pango)
  • Use ARGB for spell icon loading, fixes display of spell icons on some GPUs (Interkarma)
  • Fix crash casting identify inside dungeon (Interkarma)
  • Improvements to item effect equip/unequip responsiveness (Interkarma)
  • Show strong/weak armour modifiers in paper doll (Interkarma)
  • Make tilemap texture compatible with linear colour space, preparing for future change (Interkarma)
  • Fix daylight scale to animate by curve to more closely match classic (Interkarma)
  • Fix classic sky animation to animate by curve to more closely match classic (Interkarma)
  • Fix light transition at 5:59am to 6:00am with lower ambient light scales (Interkarma)
  • Reduced intensity of auto-torch by half (Interkarma)
  • Increased range of indirect light (Interkarma)
  • Slightly reduced noon peak ambient light (Interkarma)
  • Slightly increased interior ambient light (Interkarma)
  • Fix armour rating of Lord’s Mail and Ebony Mail, need to recreate item if already have one with 0 armour rating (Interkarma)
  • Reseed random before generating loot piles and quests (Interkarma)
  • Fix macro %g3, %pg3 to his/her instead of his/hers (Interkarma)
  • Place support for location name macro inside dungeons (Interkarma)
  • Effects can now modify attribute maximum (Interkarma)
  • Effects can now modify chance to hit (Interkarma)
  • DrainEffect magnitude changers now public for effects (Interkarma)
  • Play VID files from console, e.g. “playvid anim0000.vid” (Interkarma)
  • Implement CastSpellOnFoe quest action (Interkarma)
  • Humanoid quest Foes spawned now match Foe gender (Interkarma)
  • AddFace/DropFace quest actions now support humanoid Foes (Interkarma)
  • Calling “place item”, “place npc”, “place foe” to a different location will now remove live game object in scene (Interkarma)
  • Paralyzed enemies can no longer attack player if in range (Interkarma)
  • CastWhenStrikes must now land a blow for spell to trigger, misses no longer count (Interkarma)
  • Implement fallback for quest house types – if a specific house type cannot be found quest system will fallback to use any house (Interkarma)
  • Fixed issue where quest resources could still be duplicated in a scene (Interkarma)
  • Multiple self-cast spells from CastWhenUsed now supported (Interkarma)
  • Saving throw bypass (e.g. self cast from item) now applies to CastWhenUsed items, so player will not resist their own item casts (Interkarma)
  • Quest status now shows as “ended” instead of failed, as this could be confusing for quests with no actual success condition (Interkarma)
  • Physical world boundaries are now enforced so player cannot run of edge of world (Interkarma)
  • Removed console commands “clearmqstate” and “setmqstage” as these were for early development testing only (Interkarma)
  • Removed pre-alpha main quest option when starting a new game, main quest always starts now (Interkarma)
  • Fix house containers with books only stocking “First Scroll of Baan Dar” (Interkarma)
  • Exterior buildings now have lock strength, status text shown may not reflect difficulty at this time (Interkarma)
  • Open spell now requires player to meet or exceed level of exterior lock as with interior doors (Interkarma)
  • Fix effect costs of Pacify spell variants (Interkarma)

Update for bugs fixed in 0.8.6 released on 05 July:

  • Further refinements to tilemap shader (Pango)
  • Fix boozers talking like nobles (Ferital)
  • Fix save bugs with user note markers and teleporter markers in automap (Nystul)
  • Fix bug making exterior doors non-interactable (Interkarma)
  • Option to enable/disable mipmaps in retro mode – off by default for sharper low resolution textures (Interkarma)
  • Added option to disable exterior (sunlight) shadows (Interkarma)
  • Improved shadow distance settings for more performant interior/dungeon shadows (Interkarma)
  • Increased maximum of mouse look sensitivity to 8.0 (Interkarma)
  • Limit quest building auto-unlock to residences only (Interkarma)
  • Fixed player being hurled into void when arrested indoors (Interkarma)
  • Fixed characters with “no regen spell points” disadvantage recovering spell points during fast travel (Interkarma)
  • Increased volume of ambient sound effects (Interkarma)
  • Prevent swim-bobbing animation from continuing after levitating off water (Interkarma)
  • Player will stand up again when levitating off water (Interkarma)
  • Footstep sounds no longer play while levitating (Interkarma)
  • Will no longer crouch while levitating and touching ground (Interkarma)
  • Can now levitate while underwater swimming to remove encumbrance and fly underwater (Interkarma)
  • Additional state cleanup now performed when starting a new game or loading classic save (Interkarma)
  • Fix corrupt savetree record from preventing classic save import (Interkarma)

 

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

May Builds – Lycanthropy

It’s almost the end of the month, which means a fresh round of Daggerfall Unity Live Builds. May comes bearing the full lycanthropy feature from curse through to cure. If you’re the kind of Daggerfall player who just loves to wolf out (or tusk out if you dig more on wereboars) then this update is for you! Note that some spoilers are below for how lycanthropy operates and the paths to curing or managing it.

Lycanthropy

If you tangle with a stray werewolf or wereboar while out adventuring, there’s a small chance (0.6%) that you will become inflicted by their same curse. Unlike other infections, this one will bypass your normal disease resistance unless you happen to already be a vampire or lycanthrope. On the first evening after infection, you will have a dream about a “man who is less than a man”.

If you see this dream, you have just three days to find a temple healer or cure yourself through magical means. If you let the disease run its course, you’ll be cursed to hunt the innocent once per month and will be forced to shapechange when either moon is full.

 

Attributes & Skills

It’s not all bad news though! As a lycanthrope, you receive a whopping +40 to your Strength, Agility, Endurance, and Speed. You also get a +30 increase to Swimming, Running, Stealth, Critical Strike, Climbing, and Hand-to-Hand combat. If your character was already an above-average fighter with their fists and feet, they are going to make a fearsome lycanthrope.

Let’s meet Koro, he’s a level 2 Nord Warrior who loves using his fists on everything. He just had the misfortune to encounter a werewolf not long after Privateer’s Hold and was lucky to escape with only a scrape or two. He had no idea what to make of that dream a few nights back, and now finds himself mysteriously stronger and faster than ever with some unusual cravings. In that last bar fight, he just about tore the pore sod in half. He chalks all this up to a healthy diet of Ale and Fowl at the Black Wolf tavern where he currently resides in Daggerfall city. Unfortunately, having only a 48 Intelligence, Koro is unable to appreciate the irony of his new situation.

Something else Koro doesn’t know is that he can’t get sick ever again. No disease can touch him now, although poisons are still a concern.

 

Full Moons

Two moons hang over Tamriel: Massar and Secunda. These have alternating cycles where a full moon rises once every couple of weeks. Unfortunately for Koro, and even moreso for the innocents of the Illiac Bay, his first full moon is several nights after developing full-blown lycanthropy. By this stage, he has started to suspect it wasn’t just the tavern food behind all of this. His suspicions are confirmed the night after meeting with Lady Brisienna elsewhere in Daggerfall, when he wakes up in the early morning hours with a whole new set of problems.

 

Koro flees into the night past some some very startled patrons. He won’t be returning to the Bat and Scorpion anytime soon. What’s worse is he’s hungry. Hungrier than he’s ever felt before. Fortunately, it’s late at night and nobody else is around. He makes a run for the woods beyond the edge of this small one-tavern town. After running wild for the next day, he’s able to return back to his normal self.

 

Urge to Kill

For the next few weeks, Koro manages his curse by staying away from populated areas during full moons. He even discovers he can bring on the change once per day using some innate magic he now possesses. To his amazement, his body is healed fully each time he shapechanges between forms. Perhaps this won’t be so bad after all. It just needs to be managed properly.

On the month anniversary of becoming cursed, Koro finds himself hungry again. So hungry it hurts. So hungry it feels like he’s about to die. Without having hunted the innocent even once, his curse has left him with only 4 health remaining. A giant rat would probably be enough to knock him over for good.

 

After battling his urges for weeks, Koro can bear it no longer. He has to hunt, every cell in his body demands it. He watches the innocent civilians going about their business for a while, then finally gives in to the hunt. It’s the only way to make himself whole again.

direct link to gfy

While fighting as a werewolf, Koro discovers that not only can he rip the city watch to shreds in moments, he’s completely immune their basic iron and steel weapons. Finally sated, he runs back into the wilderness again to rest and recover his lost health.

 

Accessing Inventory

Several weeks later, Koro is exploring a local dungeon when the change is forced upon him by a full moon. Bafflingly, he can’t reach his pockets. How has he never noticed this before?

 

After a bit of squinting and whimpering, he discovers that he can will himself back into humanoid form for a few moments before the moon forces him to change back into a wolf again. Just enough time to loot the body of that unlucky orc.

 

The Cure

Almost a year has passed since Koro found himself cursed to be a werewolf. In that time, he’s found an uneasy peace with his life. He enjoys being relentlessly powerful, but still feels guilt when he must hunt the innocent. He dreams of ending his curse. Then one day, he finds a letter in his pack that offers redemption or death. It seems word of his monstrous life has reached the ear of a lycanthrope hunter.

 

He seeks out the Order of Arkay in Burgmont where Koro is told that to cure his lycanthropy, he must pass the disease on to another.

 

Wanting an end to the bloodshed, Koro rejects that choice. What if the one he inflicts is even more blood-thirsty than himself? Gondywyr Hawkwing is relieved and offers him another, albeit a less likely, path.

 

The Witches of Glenmoril Coven

After a series of adventures, Koro finally locates the secretive witches of Glenmoril Coven in Ilessan Hills. They’re amused by his affliction, but not immediately helpful. They put him to work with some quests to further their own goals. Without many options left, Koro does his best to make them happy.

 

Path of Hircine

Koro discovers the Glenmoril witches can summon the Daedra Hircine on any day of the year. Hircine is known to be a patron of wild things, perhaps he can offer some solution? After gathering the exorbitant summoning fee, Koro watches as the crones perform the ritual. And he is blessed!

 

Koro follows the wishes of Hircine and comes into possession of the Hircine Ring. A powerful artifact that allows him to take control of his lycanthropy.

 

So long as the ring remains on his hand, Koro is no longer forced to change on each full moon and his hunger is suppressed. He can shapechange any time at will. He has all the benfits of his curse and none of the disadvantages. Not a bad outcome for one adventurer.

 

Path of Water

If Koro failed to summon Hircine, or could not afford the ritual, there is still another path. After running several quests for the witches, he is one day given a vial of Pure Water to transport to a regional Mages Guild. Did one of those crones wink when handing him that water?

 

While in transit with the Pure Water, Koro is beset upon by vampires, werewolves, and wereboars in great numbers. Why are they all so desperate for this vial? Thinking of his own affliction and that wink earlier, Koro takes a sip of the water. After a moment of dizziness, he finds his mind finally clear and to be mercifully cured of his lycanthropy.

 

Path of Blood

And what if Koro was a different kind of Nord? Right at the start, if he had taken the offer to pass on his curse for a cure. What would have become of him? If that road had been taken, it leads to a sickly child and a horrible choice. Perhaps even now, its not too late for him to turn away and find another way.

 

 

New Enchantments

 

Strengthens Armor / Weakens Armor

Strengthens Armor adds +5 to your armour class across all item slots. Does not stack with enchantments of this type on other items, or with Weakens Armor.

Weakens Armor reduces your armour class by -5 across all item slots. Does not stack with enchantments of this type on other items, or with Strengthens Armor.

 

Improves Talents

If you already have a special talent like Acute Hearing, Athleticism, or Adrenaline Rush, this enchantment will buff those gifts even further. Has no effect if you are not so gifted to start with.

 

Health Leech

This side-effect will cause you damage depending on the type:

  • Whenever used – You will be damaged every time you strike with a weapon or cast from an item so enchanted by this malady.
  • Unless used daily – You must strike with a weapon or cast from an item so enchanted once per day, or you will start taking damage every few minutes. This damage will occur even while trying to rest.
  • Unless used weekly – You must strike with a weapon or cast from an item so enchanted once per week, or you will start taking damage every few minutes. This damage will occur even while trying to rest.

 

Loan Improvements (Pango)

Any long-time Daggerfall player knows how to exploit loans from banks. You can go to any bank, ask for a huge amount of gold, then simply never pay it back. Incredibly, there are almost no consequences for doing this. We all know banks aren’t that friendly. Pango has taken the time to flesh out this feature somewhat to make it a bit easier to use and offer some minor consequences for defaulting on a loan.

First up, your loans can now be tracked at any time by clicking on your gold total on the Character Sheet (F5). This will show both your active bank accounts across regions in addition to any open loans.

 

You will also get quick reminders as the due date approaches.

 

If you default on your loan, the bank will first try to recover whatever is in your account. If they’re able to pay the loan back this way, then no other action is taken. But if you can’t repay your loan, the bank will never do business with you again and you will lose some reputation in the eyes of the law, you scoundrel.

 

There is also some talk of one day bounty hunters coming to recover your gold on behalf of the bank. While this remains mercifully unimplemented, it might be time to repay your loans before the banks start sending out heavily armed thugs.

 

General Fixes & Improvements

Thanks to everyone involved, we also have the usual round of bugs fixes and incremental refinements.

  • Fix issues with WallPropPositioner and ObjectPositioner (TheLacus)
  • Fixed scale of MASK04I0 (TheLacus)
  • Fixes to UV unpack algorithm (Ferital)
  • Exclude ship from UV processing (Ferital)
  • Fix escape navigation in custom character creator (Numidium)
  • Implement Skull of Corruption (Numidium)
  • Implement Ring of Namira (Numidium)
  • Weaken shadows under scattered light (Pango)
  • Banking improvements (Pango)
  • Fix head-dipping from projectiles (Pango)
  • Spell missiles hit sounds spatialization (Pango)
  • Fix argument out of range exception (Pango)
  • Fix unhandled map items (Hazelnut)
  • Handle %kno macro for quests (Hazelnut)
  • Implement holiday effect for Sun’s Rest (Hazelnut)
  • Implement holiday effects for free and half-price curing (Hazelnut)
  • Implement holiday effects for half price sales (Hazelnut)
  • Fix random spymaster NPCs to behave like non-guild (Hazelnut)
  • Vampire / lycanthrope spells now removed after cure (Interkarma)
  • Vampire / lycanthrope quests now terminated after cure (Interkarma)
  • MessageBox will wrap words rather than characters in most cases (Interkarma)
  • Remove black panel when buying spells (Interkarma)
  • Fix crash when trying to spawn guards before location loaded (Interkarma)
  • Fix dye handling for hand-to-hand weapon images (Interkarma)
  • Fix city watch having weapons above iron or steel (Interkarma)
  • NPCs are now more knowing and helpful when asked for directions, provided player is not a criminal and or scum (Interkarma)
  • Implement Hircine Ring (Interkarma)
  • Fix null exception in PlayerMotor (Interkarma)
  • Fix importing classic characters in a weakened state, e.g. saved while lycanthrope needs to kill (Interkarma)
  • Implement “were_sateme” console command (Interkarma)
  • Implement “were_cureme” console command (Interkarma)
  • Supposedly secret Thieves Guild and Dark Brotherhood buildings are no longer used for random quests (Interkarma)
  • Quest system will no longer use a building if already involved in another quest (Interkarma)
  • Quest system will no longer use a dungeon if already involved in another quest (Interkarma)
  • Quest system will now use a random fallback dungeon if desired type (e.g. “dungeon4”) is not found in region (Interkarma)
  • Custom magic enchantment data now serialized (Interkarma)
  • Fix comment handling in QRC block to allow dash “-” character in text blocks (Interkarma)
  • HideNpc now supports both “hide anNPC” and “hide npc anNPC” variants (Interkarma)
  • DestroyNpc now supports both “destroy anNPC” and “destroy npc anNPC” variants (Interkarma)
  • Overlapping action door in dungeons are now disabled, including action door overlapping exit position (Interkarma)
  • Fix HideNpc/DestroyNpc from being ignored when assigned at same time quest ends (Interkarma)
  • Holding down run key while standing still will no longer drain stamina (Interkarma)

 

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

April Builds – Enchantment System

New live builds are now available for the month of April. This release brings a completed item maker UI along with an Enchantment system to drive it all behind the scenes. In this post, I’ll break down some of the new features around enchanting without going too deep into the technical side of things. If you’d like a more technical primer on magic in Daggerfall Unity check out the Magic & Effects Back-End post from last year.

If you have an existing character with “on equip” type enchantments, I recommend unequipping then equipping those magical items again after upgrading to latest version. This will ensure any of the old intermediate effects are deactivated and the new effects are activated correctly.

Item Maker UI

This is the front-end we’re all familiar with. It is here, through the magical power of menus, that new enchanted items are forged. Select your item, add some powers, balance them out with a few side-effects, and give the item a cool name. Then provided you have the gold, a new magic item with all your custom settings will be added to your inventory.

 

There’s not much more to say about the item maker. While it’s the main feature of this release, everything is fairly utilitarian and most of you are probably familiar with this UI from classic. I’ve just made a few tweaks like adding scroll bars and proper text clipping, and fixed a few minor bugs from classic. The really interesting stuff is what’s happening behind the item maker UI with the Enchantment system offering all these powers and side-effects for use.

I also want to thank Hazelnut for his earlier work on the item maker UI layout. I could just get stuck in to wiring everything up without the rather manual process of mapping out buttons and list boxes. It was great to skip that this time, so thank you Hazelnut!

 

Available Powers & Side Effects

You can use the Effect System Status roadmap page to see which effects have been implemented to date (enchantment powers and side-effects are listed about half-way down page). At time of writing, I’ve implemented 18 of 26 classic enchantments in time for April builds and I plan to complete these before end of May if possible.

Following are the power enchantments (positive effects) available at the item maker:

  • Cast When Used (related spells)
  • Cast When Held (related spells)
  • Cast When Strikes (related spells)
  • Extra Spell Points (during winter, spring, summer, fall, full moon, half moon, new moon, near undead, daedra, humanoids, animals)
  • Potent Vs (undead, daedra, humanoids, animals)
  • Regenerate Health (always, in sunlight, in darkness)
  • Vampiric Effect (at range, when strikes)
  • Increased Weight Allowance (25% additional, 50% additional)
  • Enhances Skills (related skills)
  • Repairs Objects
  • Absorbs Spells
  • Feather Weight
  • Good Rep With (commoners, merchants, scholars, nobility, underworld, all)

And the side-effect enchantments (negative effects) available are:

  • Item Deteriorates (all the time, in sunlight, in darkness)
  • User Takes Damage (in sunlight, in holy places)
  • Low Damage Vs (undead, daedra, humanoids, animals)
  • Extra Weight
  • Bad Rep With (commoners, merchants, scholars, nobility, underworld, all)

A lot of work and testing went into implementing these effects exactly like classic. In a few cases not enough information was available (e.g. Potent Vs / Low Damage Vs formulas) so a “best effort” was made to give these enchantments solid functionality based on their descriptions. These can easily be tuned later once correct formulas are known.

I have also matched classic in configuring enchantment properties. This covers adding the same effect more than once (some can, others cannot) and which effects exclude others (e.g. Potent Vs parameters exclude opposing Low Damage Vs).

 

Going Custom

As with other parts of Daggerfall Unity, the Enchantment system is flexible and extensible. Its not enough just to reproduce all the classic Daggerfall enchantments, the design must allow for creating new experiences via mods that could never exist in classic. This has been a key design of Magic & Effects from the start, and the Enchantment system is no different.

For those of you who like to play with the code and build code-driven mods, I’ve included a sample custom effect called “Mage Light” with this release. I won’t spend too many words on this now, because adding custom effects is still a work in progress. This crosses multiple systems and I still have some bugs to iron out. But if you’re interested in creating mods with new spell effects in the future, keep an eye on the following areas in code for an example to start from.

  • EntityEffectBroker.OnRegisterCustomEffects event – capture this event in your mod to register custom effects.
  • EntityEffectBroker.RegisterCustomEffectDemo() – shows the broad steps of registering a new effect with the magic system and exposing it to different services.
  • MageLight.cs – a sample effect designed to be non-trivial without being overly complex.

The Mage Light effect itself is nothing special. It just drops a coloured light around player based on which variant of the effect is used. It exposes five variants: Inferno, Rime, Venom, Storm, Arcane. The interesting part is how the code exposes the effect to the Spell Maker UI.

 

And a custom spell bundle to the spell merchant UI:

And to the item maker UI:

I almost have everything setup for custom effects to operate across all magic crafting stations and systems, but still have more to do. Custom spells don’t currently trigger from the enchantment system, and they don’t display their name correctly when using Info to examine an item. I’ll keep rounding this out as I can. If you’re interested in building custom effects, keep an eye on the above as it develops. Playing with the existing enchantment effects is also a great way to learn how the system operates behind the scenes.

There’s a lot more to the enchantment system than I can cover here, so let’s take a look at a couple of other changes this release.

 

Stuck Handling

You might have encountered a particular cave block with a sticky floor that traps the player. The problem here is bad geometry in the classic game data. A single-sided polygon is poking through the floor, and due to a quirk in Unity’s controller physics the player will become hopelessly trapped. This release now includes handling to automatically detect when player is stuck on this kind of low geometry and teleport them past it. Here’s an example of this in action after the handler determines player is stuck and kicks in to resolve. You’ll notice movement is not smooth while the handler teleports player forwards in small steps until they become unstuck, but it’s still better than the indignity of being welded to the floor.

 

Head Dipping

There are a few tight spots where the player capsule can’t move forwards because surrounding geometry is too low for capsule to pass. This doesn’t happen in classic Daggerfall as it doesn’t use modern physics, but it’s a problem in Daggerfall Unity. One example is the exit ramp in Sentinel Castle where player must crouch to get through the door. Taking inspiration from watching very tall people duck through doorways, the player capsule will now detect these kinds of spaces and dip lower for a moment to pass. This isn’t a crouch, only the player height is slightly lowered then restored to normal. There’s a momentary camera bounce as handler resolves between heights, but overall player can now smoothly pass this doorway and others like it.

 

General Fixes & Improvements

Every release has a good number of fixes and small improves to the game. Here’s what you’ll find in the April release.

  • Gold is now deducted when buying spells at spellmaker (Pango/Goodbadbugs)
  • Spellmaker checks for spellbook before purchasing spell (Pango)
  • HUD message scrolling speed adjusted when buffer very full (Pango)
  • Fix bug where animated vital changes continue after reload (Pango)
  • Can now sell horses and carts (Pango)
  • Fix modded wagon button reset (Pango)
  • Fix city gates not closing at night regression (Pango)
  • Fix mobile NPCs spawning in front of player (Pango)
  • Fix for building-to-building teleport into void (Pango)
  • Several improvements and fixes to AI pathfinding, combat, movement, and spellcasting (Allofich)
  • Code cleanup for classic update loop and talk manager (Allofich)
  • Improvements and cleanup to FaceWall (TheLacus)
  • Allow read-only flag for billboards (TheLacus)
  • Travel map support for custom overlays (TheLacus)
  • Support for mouse cursor override (TheLacus)
  • Make texture arrays with CopyTexture for improved performance (TheLacus)
  • Fixed scale of TELE00I0.IMG (TheLacus)
  • Ensure DaggerfallBillboard can still be found on modded loot piles (TheLacus)
  • More model UV fixes (Ferital)
  • Townsfolk NPC names now match classic (Ferital)
  • Use faction data for vampire clans (Ferital)
  • Fix ruler name generation (Ferital)
  • Can now set custom bonusPool on level-up using formula override (Interkarma)
  • Added “showitemmaker” console command to launch enchanting UI (Interkarma)
  • Broker can now register custom spell bundles for sale (Interkarma)
  • Added example custom effect MageLight and related spell bundle for future mod developers (Interkarma)
  • Increase radius of player capsule to prevent slipping through narrow openings (Interkarma)
  • Fix crouching capsule height and position camera inside crouched capsule to fix many clipping issues (Interkarma)
  • Don’t climb enemies or mobile action objects (Interkarma)
  • Reduce distance from door when exiting dungeons to fix sticking to angled geometry in some cases (Interkarma)
  • Interior transition now uses closest door, not just enter marker (Interkarma)
  • Spell missiles are now correctly parented and will not persist after reload (Interkarma)
  • Fix light/darkness powered magery conditional (Interkarma)
  • Migrated all intermediary enchantment and artifact effects to new enchantment system (Interkarma)
  • Fix “fastest” quality setting resulting in startup crash (Interkarma)

Update 6 May – Updated builds are now available with additional bug fixes for April release.

  • TextureReplacement: Emission maps for mobile billboards (TheLacus)
  • Custom render mode for static and mobile billboards (TheLacus)
  • Fix animated billboard materials (TheLacus)
  • Minor settings UI improvements (TheLacus)
  • More cleanup and fixes to enemy movement and AI (Allofich)
  • Match GoodRepWith/BadRepWith enchantment modifiers to classic (Allofich)
  • Randomize book quest rewards (Allofich)
  • Improve HUD text acceleration when buffer full (Pango)
  • Fix negative repair times when removing other repaired items (Pango)
  • Special infections (vampirism/lycanthropy) now bypass disease resistance correctly (Interkarma)
  • Fix NPC talk crash in Ilessan Hills (Interkarma)
  • Bonus to “where is” chance for town NPCs in smaller towns (Interkarma)
  • Fix accessory item not clearing magic animation (Interkarma)
  • Store shelves now stock magic items when appropriate, which also fixes non-stacking ruby bug (Interkarma)
  • Don’t use unsticking handling when player is paralyzed (Interkarma)
  • Fix checking for static geometry (Interkarma)

 

That’s it for April! The next system I’m building out is lycanthropy, so hopefully you’ll be chasing villagers with your werewolf or wereboar in a few weeks time. I’ll also keep working on enchantment system to complete remaining classic effects and wire up more support for custom enchantments.

 

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

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.