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

 

Player Notebook & Journal Upgrade (Hazelnut)

The Notebook feature (default key N) didn’t really do anything in classic Daggerfall and did not exist at all in Daggerfall Unity until now. This is one of those features I didn’t know how much I needed until I actually played with it. In typical Hazelnut fashion, he hasn’t just implemented a basic notebook, he’s completely upgraded the quest journal and carefully thought out how everything fits together. Here are the highlights of using our upgraded journal.

 

Record Conversations

If an NPC drops an interesting rumour in conversation, hit “copy to logbook” button to make a note of it. You can copy just the most recent message or the entire conversation if you want.

 

Travel Helper

My favourite new feature is the ability to click on an entry in Active Quests to initiate fast travel to that location. This is a huge quality of life improvement over remembering name and entering it into the “find” box on travel map manually. Just click the journal entry and hit Yes to load up the location for fast travel.

 

Completed Quests

Rather than vanish forever, you will now have a record of quests you’ve completed. This is nice way to look back and see what you’ve achieved with the character so far.

 

Map Log

Sometimes you will find maps in the game, or they will be given to you as a reward from a quest. Up until now, you’ve had to write these down and track yourself. In a perfect example of rounding out a feature, Hazelnut’s upgrade will track maps given to you from all sources. This feature even required improvements to quests, there’s no question he went the extra mile on this one.

 

Cycle Through Journal Windows

No matter if you open the quest log or notebook, they’re all part of the same UI. Click the “dialog notes” button to cycle through Active Quests, Completed Quests, and Notebook. Everything is nicely integrated. Of course if you open the Journal log (default L) it will go straight to Active Quests, and if you open Notebook (default N) it will go directly there instead.

 

Arrow Counter (Hazelnut)

A small but very nice feature is an arrow counter next to compass for archers. This is on by default, but you can toggle off using Enhanced > Interface > Arrow counter in startup UI.

 

Geographic Backgrounds (Hazelnut)

This feature is off by default and can be enabled from Enhanced > Interface > Geographic backgrounds. It repurposes the racial background portraits to instead display based on where the player is in the world. Here are some examples:

 

Woodlands

 

Dungeon

 

Town

 

This feature so seamlessly reuses those background portraits it’s hard to not believe they were designed for this in the first place. This feature was created after a suggestion by Helegad in this forum post.

 

Improvements

Other than new features above there are many smaller improvements in this round of builds.

  • Upgrade to use new VideoPlayer class for modded videos (TheLacus)
  • Mesh and texture injection renamed to AssetInjection and is now enabled by default (TheLacus)
  • Can now import books from modded locations (TheLacus)
  • Can now change name from character sheet – note this will change how subsequent saves are grouped for this character (Hazelnut)
  • Click and hold on up/down spinners to automatically keep increasing values (Hazelnut)
  • Can now use Ctrl+Click to split item stacks (Petchema)
  • All sounds now respect volume slider, including UI and movies (Allofich)
  • Can now open spellbook from character sheet (default F5) and spellbook (default Backspace)
  • Implemented “sort” button in spellbook. This currently sorts by alpha

 

Bug Fixes

And a good number of bug fixes too! Thank you everyone for pulling together and prioritising bug fixes, the game is better every day thanks to you all.

  • Fix for old saves throwing an exception (Allofich)
  • Fix no miss sound when player dodges (Allofich)
  • AI fixes (Allofich)
  • Can now sneak while riding again like classic (Allofich)
  • Fixed wrong text on Pacify effect (Allofich)
  • Stop fast travel countdown when cancelling (Allofich)
  • Fix starting skills rollout to classic (Allofich)
  • Only show “you feel somewhat bad” HUD text when player is poisoned (Allofich)
  • Fix for travel costs being negative (Allofich)
  • Fix parsing character background questions (Allofich)
  • Fix for enum that broke old letters of credit – note that new letters of credit since this bug must be discarded or manually fixed in save (Allofich)
  • Fix shop titles with %rt macro (Hazelnut)
  • Handle certain bad faction data by gracefully logging error rather than throw exception (Hazelnut)
  • Fix special handling of temple buildings – can now Akatosh Chantry by visiting Order of the Hour (Hazelnut)
  • Fix stat allocation for custom characters to cap at 75 and allow pool to go negative (Hazelnut)
  • Catch exception when weapon breaks (Hazelnut)
  • Fix travel from ship to use boarding location (Hazelnut)
  • Fix entrance/exit marker not showing on dungeon automap (Nystul)
  • Fix for automap freeze when tooltips disabled (Nystul)
  • Fix reputation change box not appearing (Numidium)
  • More fixes to item stacking – will no longer stack equipped or enchanted ingredients (Petchema)
  • Workaround for Unity 2012.2.x input bug under Linux where Shift/Tab/Alt, etc. show up as ? – note this can still happen in console UI
  • Fix for spellbook not being imported from classic saves
  • Fix for duplicate building key 0 causing certain buildings not to be displayed in Talk UI
  • Fix for HUD closing after accepting certain quests
  • Fix incorrect item generation from biography questions resulting in blank items

 

Conclusion

After such a huge month, I’m taking a short break from the magic system and will instead prioritise several fixes to gameplay and quest system. We must have a nice tick-tock between adding new features and fixing problems. And after so many ticks in one month, we really need to catch a breath and just settle into a stable build. This means the next month or two won’t be quite so flush with new gameplay features, instead they will continue to improve the experience we have so far.

I feel this release is probably very close to 0.5 stable. We’ll be rolling into 0.6 very soon, which kicks off the final push to feature parity with classic Daggerfall.

 

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

Daggerfall Unity October 2018

New Builds for October 2018

New builds are available on the Live Builds page now. This has been another huge month for Daggerfall Unity. We’re quickly closing the gap towards major parity with classic Daggerfall and exiting pre-alpha. The magic system has taken another big jump forwards this month with the number of implemented spell effects crossing the 90% complete mark.

I’ve also updated the main Roadmap and shifted a few magic-related items out of 0.5 into 0.7. This is so I can create a stable 0.5 build and start the downhill run towards exiting pre-alpha. I don’t think we’ll spend very long in 0.6, 0.7, and 0.8. These milestones have become more a formality at this point.

Alright, let’s unpack what’s new in October!

 

Automap SDF Fonts (Nystul)

The new SDF font system is now functional in automap UI. Now the fonts look smooth whether you’re zoomed all the way in or out of the map.

 

Advanced Climbing System (MeteoricDragon)

Daggerfall Unity isn’t just about reproducing classic 1:1 with quality of life features and mod support. We’re also adding depth to parts of the game that needed a bit more love in classic. If you’re the type of Daggerfall player who enjoys the Acrobat class, you probably want to make sure this option is enabled at Advanced > Enhancements.

 

The Advanced Climbing System allows characters with a high Climbing skill to not only scale walls, but to move in any direction, wrap around corners, cling to the wall, grab walls in the air, and leap off walls. A Khajiit with a high Climbing skill and magic can scale over practically any surface in the game. You can even climb out of water now, rather than face certain drowning.

direct link to gfy

In latest builds, you can rappel down walls by walking backwards off the top. I remember looking everywhere for that rope mentioned in Daggerfall’s manual, only to discover it wasn’t in the game. Well, who needs ropes when you can rappel?

direct link to gfy

If you’re a classic purist who prefers just scaling walls, all of these features are optional. Simply disable the Advanced Climbing System in settings and things are back to classic. The Advanced Climbing System is currently enabled by default for testing – and because it’s really fun to play with.

 

Biography Questions (Numidium)

These randomise your character a bit at the beginning of your adventures, changing starting gear, reputation, and more. You can either randomise biographies in a single click, or answer a series of questions. With this feature, custom character creation is now all but complete.

 

Character History (Numidium)

Hand-in-glove with biographies comes your character History, activated from a button on your character sheet (F5). This is an automatically generated background to help give you some role-play hooks for your character. This is mostly for flavour, but it’s a nice pen-and-paper RPG touch unique to Daggerfall. Note that only new characters generated from these builds will receive a full history. Existing or imported characters will have a blank history page.

 

Starting Spells & Magic Skill Tally (Numidium)

New characters now also receive their starting spells loadout. Missing these spells is a small thing easily overcome by a trip to the Gothway Garden Mages Guild, but they can be a nice starting point and help new casters escape Privateer’s Hold.

 

It’s also worth mentioning that casters now receive skill tallies when casting spells, it’s finally possible to level up your magic-user the normal way. And spell point costs are now enforced like classic as we tear off the “test” label and start considering spell casting in full production.

 

Enemy Target Selection & Infighting (Allofich)

Another enhancement not found in classic. Enemies will now select non-allied targets to engage in combat. Enemy allies are considered to be on same “team”, such as “undead”, “vermin”, and “daedra”. They might fight the player or engage with another monster not on their team. This brings a new dynamic to dungeon crawling where the inhabitants aren’t just standing around waiting for the player, they will also fight each other. In the video below, I kite that skeleton in Privateer’s Hold upstairs to the Orc in a nearby room and get them to fight each other.

direct link to gfy

If you prefer the classic system, this feature can be disabled from Advanced > Enhancements > Enemy Infighting.

 

Poisons & Elemental Resistances (Allofich/Interkarma)

As if diseases weren’t bad enough, poisons make their debut in October builds. Enemies will have a chance of carrying a poison weapon that will inflict player with a deadly poison. This is where your spellcraft or class immunity might come in handy. Poisons can end your adventuring career very quickly, so try to have a Cure Poison spell or a recent save handy.

 

As part of adding poisons, elemental resistances and their saving throw formulas have been implemented in these builds. You can find these spells available in the spellmaker (more on this below).

 

Ambient Light Scale Options

If you feel that dungeons and night-time are too bright in Daggerfall Unity, you can now adjust these with new sliders in Advanced > Enhancements.

 

You can set the ambient scale for dungeons, night-time, and the player’s personal light. These can be set from 0.0 (off) to 1.0 (normal). The lower you set these sliders, the darker these environments become. Setting dungeons to near 0.0-0.2 makes for a very claustrophobic experience. I show an extra-dark dungeon below in the video for the Light spell.

 

Hazelnut Updates

I’ve had some help writing this article, and Hazelnut was kind enough to outline what he worked on in the October builds. I’ll be back after his part of this update to outline all the new spell effects in these builds.

 

Hazelnut – Intro

After my initial foray into contributing with horse riding and ships, I turned my attention to all the logistics systems in Daggerfall. These fall under the following main categories:

  • Contextual macro replacements (quests, message boxes, talking etc)
  • Item management (inventory, wagon etc)
  • Commerce (trading, repairing etc)
  • Guilds (membership, quest dispensing etc)
  • Services (curing, potions, guild perks etc)

After having a bit of a break due to real life commitments, I recently returned to fill in the gaps in these systems. With the exception of some magic related parts, I think they’re pretty much complete now. So let me tell you what have I contributed recently…

 

Art Appraisal

A bug report was submitted pointing out that the info on painting items was not working which brought it to my attention. Rather embarrassingly I’ve since found that it had already been pointed out to me twice in other threads and I’d just forgotten all about it. However, with hindsight that was probably for the best because I might be bald from tearing my hair out if I’d tried to implement this before the amazing Allofich had reverse engineered the classic Daggerfall code and posted it to get me started!

 

Basically the info for paintings uses one of 7 variations of title stored in text.rsc at index 250. These messages contain various permutations of the macros %sub, %adj, %pp1, %pp2, %an (subject, adjective, prefix1, prefix2, artist name) which need to be replaced with the correct context text for the specific painting. The Daggerfall random number generator is seeded from a field on the item called ‘message’ that contains a random number applied when the painting is created, and everything is generated from this single number using a specific algorithm. It’s important to match classic so that the title matches the image displayed, the alternative would have been to create a new algorithm which was consistent but didn’t match classic. There were a few gaps in Allofich’s description so it took a bit of back and forth, plus several hours of experimentation on my part, to nail it. Now painting info should match classic, so please let us know if it doesn’t.

Part of the algorithm indexes an image from one of the many painting image files. Interkarma added the ability to add images to message boxes which I then used to display the correct painting above the title. Last thing was to correct the text to display in the info panel properly. Quite a nice example of teamwork I think, and very satisfying indeed. Here’s an example:

Painting Info

Painting Info

 

Shoplifting & Fences

Next on my todo list was to finish the trade window implementation, specifically the steal button. This required a new formula ‘CalculateShopliftingChance’ which uses the number of items and their combined weight with the players pickpocket skill to give a chance of success. Like most of the DFU formula, it can be very easily overridden by mods like the Archaeologists Guild mod changes the language pacification formula. Since Allofich had already implemented spawning of city watch guards, implementing failure was quite straighforward.

Then I moved on to the other side of the Thievery coin and implemented the Thieves Guild fence service which allows players to sell magic items. This needed a new mode for the trade window so that it could filter on item enchantment instead of type. It currently uses the default sell formula, although UESP hints that it may need updating to take into account reputation with the TG Fences. That will happen once we have concrete info and is simply a case of creating & using a new formula method.

 

Daedra Summoning

The last guild service, that is not tied into the magic system (still under construction), is summoning Daedra. I had no idea how this worked since I only ever got to level 2 in classic, so some research was required. After a while it became clear that at its core the service was really just a fancy quest dispenser, albeit with quests from Daedra to find magical artifacts. Thankfully UESP had good details about price, chance and summoning days so getting the initial part done was fairly straightforward and used standard parchment style message boxes as seen throughout the game.

Daedra Summoning

Daedra Summoning

 

Getting a quest off a Daedra Lord or Lady is a bit special and has an animated image of the Daedra with the text overlaid at the bottom. This required more work to create a new custom display method that had to split each message into chunks of 4 lines. Each click displays the next chunk and the quest can be accepted or not by pressing ‘Y’ or ‘N’ keys. Luckily Interkarma had also just posted about some code that Lypyl had written back in 2015 that played the related video files, and swiftly worked this into the codebase for me. This meant that adding the video player in the background was a breeze. Thanks Lypyl, very much appreciated!

When summoning works:

Daedra Summoned

Daedra Summoned

Do watch out if summoning fails, or you refuse such a powerful being, you may have trouble on your hands!

Well that wraps up my recent contributions, thanks again to the other members of the DFU team for their help and assistance. Except for fixing bugs in the core codebase, my focus will now be mostly on the Archaeologists Guild mod.

 

 

New Spell Effects

Another care package of spell effects has landed in October. Spellcasters now have more utility than ever to survive dangerous encounters, and some new threats as well.

 

Detect Treasure

This effect helps you find nearby treasure piles. A small arrow is displayed above your compass to guide you towards any treasure within range. In the below video, I’ve stashed a few treasure piles around the Mages Guild and use Detect Treasure to find them. Watch the compass at bottom-right of HUD to see the effect in action.

direct link to gfy

 

Detect Magic

If an enemy suddenly turns invisible, you might still be able to detect them with help from the Detect Magic effect. In this video, I turn a few mobile NPCs invisible and use Detect Magic to locate one and talk to them. They don’t know they’ve been turned invisible, and aren’t harmed by the spell, so it doesn’t register as a crime. This spell will help you locate magic effects running on any nearby mobiles.

direct link to gfy

 

Detect Enemy

You can hear that skeleton, but is it on the other side of the wall? With Detect Enemy, you can find out just how screwed your character will be when you open the next door. In this video, I round up a few enemies to test the spell. That’s a lot of markers!

direct link to gfy

 

Lock & Open

Use your magical prowess to secure doors against foes and open all but the hardest locks.

direct link to gfy

 

You can even use Open to break into locked buildings at night.

direct link to gfy

 

But some magical locks remain beyond your skills.

direct link to gfy

 

Light

Summon a magic candle to light your way in the darkest of dungeons. And for players that really like dark environments, there’s even a new feature to turn down ambient lighting to suit your tastes. Here’s a video of the Light spell in action inside a super-dark dungeon.

direct link to gfy

 

Elemental Resistance

Poisons are only the beginning. Very soon, enemies will be hurling spells back at the player and fireballs aren’t so much fun when you’re on the receiving end of them. To help the player make their saving throws against magical attacks, you’ll find elemental resistances available in the spellmaker.

 

And if you fail your saving throw vs poison, you can now create a Cure Poison spell at the spellmaker.

 

Pacify

Sometimes it’s better to make friends than risk combat. With the Pacify effect, you can now get certain foes on your side – provided they don’t resist your spell. Pacified enemies will not attack you again unless you accidentally harm them in some way.

 

Free Action

This effect will make you immune to paralysis for its duration. If you still have a paralysis effect active when Free Action expires, then you will become paralysed again. This is like a brief reprieve rather than a cure, for which you have Cure Paralysis. This might be useful when you come up against spiders and scorpions one day soon.

 

Slowfalling

Levitation is great, but sometimes you just need to glide to the ground. The Slowfalling effect does exactly this. If you find yourself slowfalling downhill like in the video below, a quick Dispel Magic on yourself will cancel the effect.

direct link to gfy

 

What Else Is New

There’s also a range of improvements and minor new features in these builds, more than I could cover in detail.

  • Game Settings window overhaul (TheLacus)
  • Mod localization support (TheLacus)
  • Mobile unit flip now applies to modded enemy sprites (TheLacus)
  • Music selection now matches classic (Allofich)
  • Race and gender attack/hit sound effects (Allofich)
  • Name generation of NPCs is closer to classic (Allofich)
  • Moving platforms now collide with player while levitating (MeteoricDragon)
  • Player no longer falls off those steep ramps in dungeons when running down them (MeteoricDragon)
  • Mouse-over highlight in list boxes (MeteoricDragon)
  • Can now climb out of water while over-encumbered (MeteoricDragon)
  • You will now receive a warning message when entering water while overencumbered (MeteoricDragon)
  • Your arrows are automatically plucked out of corpses, a QoL improvement for archers (Hazelnut)
  • Shoplifting using the “steal” button in stores (Hazelnut)
  • More text macro support (Hazelnut/Numidium/Nystul)
  • FLC file support, used by summoning service
  • Support for string literals in Table class, used by mod system and eventually other localization
  • Lunar phases now tracked in DaggerfallDateTime class (guess what this will be used for later) 🙂
  • Disabled movement acceleration/deceleration by default, can still be changed in settings window
  • Added a small amount of forward momentum on jump – jump and gravity still not matched to classic
  • Improvements to Heal Attribute effects to allow healing attribute damage from poisons

 

Bug Fixes

Lots of bug fixes this time around. Because we’re getting close to 0.5 stable, we’ve all spent a lot of time fixing problems and on quality control. Thanks to everyone below for their efforts. Bug fixes aren’t glamorous, but they’re very important.

  • Fix for classic spawn check result getting stuck (Allofich)
  • Fix legal reputation persisting into older saves (Allofich)
  • Fixes to enemy animations and mirroring (Allofich)
  • Fix reading classic magic item names (Allofich)
  • Fix free room for member of knightly order region (Allofich)
  • Fix bank manager exception when no gold in wagon (Hazelnut)
  • Fix for magic item lists in merchant windows (Hazelnut)
  • Fix message shown when a house is already owned (Hazelnut)
  • Fix being able to jump with cart (Hazelnut)
  • Fix greetings in talk window and quest givers in relation to guilds (Hazelnut)
  • Fix text macros for temple rejection or identify (Hazelnut)
  • Fix items not being offered for repair (Hazelnut)
  • Fix Mercantile increase when identifying items via magic (Hazelnut)
  • Fix climbing teleport into air bug (MeteoricDragon)
  • Fix slow crouch bug (MeteoricDragon)
  • Fix horse stuttering down rolling hills (MeteoricDragon)
  • Fix gravity when climbing and slipping (MeteoricDragon)
  • Fixes for quest items stacking with normal items (petchema)
  • Fix for “restore anNPC” quest action pattern not compiling
  • Fix for speaking with certain NPCs in castles
  • Fix for issues where quest NPCs are assigned to home building instead of quest target building (e.g. Thieves Guild initiation quest)
  • Fixes to crush detection while levitating, swimming, and outdoor swimming
  • Fixes for loose objects such as towns not cleaning up properly, leaving floating cities, etc.
  • Fix HUD crash when faction has no children
  • Fix stacked exhaustion popups
  • Fix monsters that spawn while resting being improperly tagged to quest system
  • Fix spell missiles colliding with nothing in some dungeons
  • Fix magic items with “on use” not being useable while equipped
  • Fix spell icons by equipped items ending prematurely
  • Fix spell icons not blinking before expiring under certain conditions
  • You can now exit the level advancement screen when all of your attributes are at 100

 

Conclusion

That’s everything for now. Even as project lead, I’m often surprised by how quickly things are moving. It has become a challenge just to document and credit everyone for their efforts. We may not be at the finish line for a while yet, but Daggerfall Unity is piling on gameplay weight every day. It’s only a matter of time now before it reaches major parity with classic. If you’re willing to overlook a few missing pieces and inevitable bugs, the game is in a highly playable state. Exciting times ahead!

 

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