First Look At Spells

I recently demonstrated spell missiles and discussed the back-end framework driving magical effects in Daggerfall Unity. I’m happy to report that it’s now possible to create custom spells and hurl sparkling death at your foes! As my last article was a bit dry and technical, I’ll start this one off with a short video of spells in action.

 

New Builds

You’ll find all new test builds on the Live Builds page as usual. Here are the key features of this release.

  • Create custom spells in the Spellmaker UI (invoke using “showspellmaker” from console).
  • Spellbook UI where custom spells are saved with your character.
  • 3x magic effects are currently available for testing:
  •     Continuous Damage Health (a damage over time effect).
  •     Damage Health (a direct damage effect).
  •     Heal Health (heal yourself and other entities).
  • All elements and target types are available (as appropriate for effect) when creating spells.
  • Smooth crouching, head bobbing, and head rocking when damaged (Meteoric Dragon).
  • Sound and music volume sliders (in progress). Some effects not wired up to volume slider yet (Meteoric Dragon).
  • City Guards and crime tracking, starting work on Crime & Punishment (Allofich).
  • More mod support in the back-end (TheLacus).
  • Various small bug fixes and improvements.

While only 3x effects are available at this time, this doesn’t nearly do justice to the progress that has been made. Spell effects are actually very small scripts – usually no more than a few lines of code and some properties. What really matters is the framework driving magic in Daggerfall Unity has finally progressed to this point. The previous article has more on this if you’re interested.

 

Testing

The purpose of these builds is to test the magic & effects framework is well-behaved and usable in its current state. What I’m looking for are crashes and other unexpected behaviour in the framework. Once this is working well, I will continue to roll out more effects in future builds. To keep testing as focused as possible, here’s a summary of what you can expect from this release.

  • Create and cast spells using the starting 3x test effects above.
  • There is no spell absorption, reflection, or elemental resistance at this time.
  • You can select elements to change appearance of spell and missile, but all elements are equal in terms of damage.
  • All target types (caster, touch, target at range, etc.) should be working.
  • Spells do not yet increase related magic skills of character.
  • Spells are all currently free to buy and to cast – so make them as weak or powerful as you like.
  • All of these free spells will be expired at some point closer to 0.5 stable.
  • Magic items are not implemented yet, this will come much later in 0.5 cycle.

Note: Due to changes in the modding system older mods may not work in this version. Please revert to build #105 for any broken mods until creators update for current version.

 

Feedback

For discussion on these builds, please head over to the forums. If you want to report a bug, post this to the Bug Reports forums. If you’re not sure if something is a bug or just not implemented, don’t hesitate to ask in Help & Support.

I hope you enjoy this early preview of spells in Daggerfall Unity. Have fun!

 

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

Magic & Effects Back-End

In my previous article, I showed progress on the visual side of spell-slinging and had lots of fun with casting animations and throwing around missiles with lighting effects. Now I have to regard the business end of the spell system and how all of this holds together under the hood. This article will be a lot more tech-oriented than my previous one, but may still be of interest if you’re curious about how spells will operate in Dagerfall Unity.

Please keep in mind this is all under active development so concepts discussed here are likely to be refined or expanded by the time everything rolls out.

 

Magic & Effects System

One major shift in this process was changing how I think about the spell system. I have a long list of goals I want to achieve during this stage of development, above and beyond just emulating Daggerfall’s classic roster of spells. Primarily, I want to create a central way of handling the majority of effect-based gameplay. This means advantages/disadvantages, diseases, poisons, spells, magic items, potions, and so on should all come together under the one system or group of related systems. Once I had made that decision, it no longer made sense to call it the “Spell System” as spells are just one part of the collective. So the Magic & Effects System was born.

This is why you won’t see the word “spell” very much moving forward but you will see the word “effect” a lot. In this context an effect isn’t something visual, it’s how something works. For example, an effect that heals the player is a script which increases their current health. This naming is taken from Daggerfall itself where spells and magic items reference effects directly using a type and sub-type.  You can read more about classic Daggerfall’s spells and their effect indices on this UESP page.

You will also see the term effect used by Daggerfall’s Spell Maker UI when creating a new spell. You can add up to three effects per spell as shown in screenshot below from classic Daggerfall (spell maker is not yet implemented in Daggerfall Unity).

 

Overview

If you’re familiar with the Quest System and how registered Quest Actions execute inside of a Quest – then you’re already familiar with the Magic & Effects System. I’m iterating on some of the concepts for Magic & Effects, but the broad design remains very similar. There are a couple good reasons for this: I want a consistent approach so developers can apply learning from one system to another, and both systems do something very similar which is execute a script inside a framework of some kind to perform work for the game. Here’s a nifty overview of the classes so far before I break it down further:

 

EntityEffectBroker

The EntityEffectBroker singleton lives within the game scene at all times, and will be involved any time a new effect enters the game. It fills a similar niche to the QuestMachine in that it helps coordinate everything and provides a common entry point for execution. At startup it uses reflection to enumerate all classes implementing IEntityEffect inside the main assembly and registers them using an “effect key” presented by the effect itself. Eventually, mods will be able to inject new effects at startup without needing to rely on the reflective enumeration.

 

DaggerfallEntityBehaviour

This MonoBehaviour-derived class has existed for a long time but deserves a revisit to explain how it fits into Magic & Effects. Everything that walks, crawls, flies, or swims in Daggerfall is considered an entity and carries a DaggerfallEntityBehaviour component. This in turn holds the DaggerfallEntity instance which defines their career (class / monster type) and all of their stats, skills, health, spellpoints, etc. Most effects will operate directly upon an entity in some manner, which is why the EntityEffectManager is peered with this component.

 

EntityEffectManager

This component stores effect collections (called bundles) that are currently operating on the entity. At runtime, it will step through all effect bundles assigned to the entity and execute them. It will also remove bundles when they have expired. Generally speaking, this class is responsible for handling the lifetime, execution, and persistence of effect bundles related to a single entity.

 

EntityEffectBundle

The aforementioned bundles come to life through the EntityEffectBundle class. This is both a collection of effects and an execution container for them. A spell is just one example of a bundle – spells have one to three effects that share a common duration, chance, magnitude, magic type, etc. Every effect that exists in the game will be contained by an EntityEffectBundle. It’s similar to a Quest object in that effect bundles execute child effect scripts in a similar manner to how Quests execute child action scripts. Besides all of that, effect bundles are used to transport effects from one place to another, for example via a spell missile. The variety and management of effect bundles will see heavy work over time.

 

IEntityEffect

This is an interface to the effect. An interface is like a contract that defines what properties, methods, etc. a class must implement. The EntityEffectBundle will store a collection of effects using their IEntityEffect reference.

 

BaseEntityEffect

A default abstract implementation of the effect interface used to reduce workload by effect authors. The base class handles most of the common boiler-plate for any effect.

 

Effect

The effect itself. This is the script which actually performs work against the world, target entity, or whatever else the effect is designed to do. Just like a QuestAction, an Effect class is C# code executed by the owning EntityEffectBundle, which in turn is executed by the parent EntityEffectManager. Each effect is enumerated, keyed, and later factoried by the EntityEffectBroker when being added to a bundle. The effect itself should be very atomic, performing only the job it was intended to do. Effects will be insulated from the gory details of the wider systems and only need to take care of their own execution and persistence.

 

DaggerfallMissile

This is a mobile object like a fireball the player shoots into the world. Missiles aren’t just a visual thing, they are also used to carry effect bundles from one place to another, such as the fireball mentioned a moment ago. However, the appearance of the missile will depend on the magic type property of the effect bundle it carries (e.g. frost, fire, poison). Any entity hit by the missile will find the effect bundle payload added to their EntityEffectManager and they will suffer the consequences.

 

FPSSpellCasting

This is purely the visual side of casting spells for the player. It is the glowing hand attack you saw in my previous article. It deserves a mention because just like missiles, the casting animation will be selected based on the magic type the player is using (e.g. frost, fire, poison).

 

Immediate Mode Effects

Now you have a high-level overview of the major classes making up the Magic & Effects System, but something I haven’t talked about is how execution itself operates. I liken effect system execution to an Immediate Mode GUI, in that every tick of the effect system will expect current state from every active effect. Rather than try to track what every single effect is doing (which is a logistical and concurrency nightmare) the entity and effect management classes work around this by just not caring about the current state of any effect.

This simplifies both ends of the execution process. First of all, the EntityEffectManager does not need to track and remove state for effects operating upon its peered entity. There’s a limitless number of permutations of what an effect could do, and the ability to execute custom effects through the mod system further expands what is possible. The EntityEffectManager can’t possibly account for everything an effect might change, so it doesn’t try. It just requests every effect to apply its current work every frame. More on this in the next section.

Second, the effects themselves don’t need to worry about what other effects are doing – they only need to worry about the work they want to perform. This work might be to increase/decrease health, or fortify an attribute, or summon an item, or open a UI, but whatever that work is the effect itself gets to manage its own execution and state with almost complete control over itself.

If that all sounds a bit complex, please don’t worry about it. Everything works out to be fairly simple in reality, and there will be dozens of effect scripts to learn from. I expect the majority of effect scripts will be no more than 20-30 lines of code.

 

Sandboxing Effects

I mention above that effects have almost complete control over their own state and that management classes don’t even try to track what those effects are doing to the entity. You’re probably asking at this point how changes to the entity like a damaged Strength attribute is removed once the effect is finished? This is where some minor sandboxing comes into play.

Rather than allow effects to operate directly on the entity’s stats and skills, each effect has a payload of modifiers that it can use to change these attributes while active. The first part of this went into the game some time ago. DaggerfallStats and DaggerfallSkills each have a “mods” array that hold potential changes for every value (note these aren’t game mods, that’s just what the array is called).

When requesting a stat such as Strength, the game can request either the LiveStrength value or the PermanentStrength value. The Permanent value is the actual value stored in the entity. This is never touched or altered by an effect script. The Live value is a combination of the Permanent value modified by all combined effect “mods” active on that entity.

At the start of every tick, the effect system will first clear the “mods” state for all attributes. Then when an effect is executed, the management classes will merge any “mods” changes emitted by that effect to the entity’s resultant “mods” array. So when a formula asks for the current LiveStrength value, it will be handed the player’s real Strength plus or minus any changes made by effects. When those effects expire, the next tick of the effect system will clear its changes from the resultant set of modifiers.

This minor sandboxing process helps ensure that effects cannot accidentally alter the player’s attributes in any permanent way, provided they follow the design in place.

Not everything will be sandboxed in this manner (which is why I called it “minor” sandboxing earlier). Some values such as Health and Fatigue are designed to be raised/lowered constantly by several external factors, and are also very easily recovered. Any effects changing these values are fine to operate directly on live state.

 

Conclusion

The Magic & Effect System still has a very long way to go, but hopefully this article will serve to ground developers on the direction it is taking and what certain concepts mean inside the code. I hope to have active test effects with a real lifecycle running soon. This will help me further build the execution framework and start rolling out actual effects.

From there, work will progress deeper into Spellbook and Spellmaker UIs until the player is more-or-less casting real spells in the game. And by then, things should be far enough along to start adding support for magic items, diseases, advantages/disadvantages, potions, and so on.

As always, I’m looking forward to progressing beyond the design and build-out stages to actual implementation. Hopefully this will be the only dry, technical article in the series.

 

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

Guild Systems

Hi everyone, Hazelnut here. Interkarma has asked me to write a blog post about some of the work I have been doing recently, so for this post Daggerfall Workshop has been taken over by me! Muhahahaha… etc. I’m sure your regularly scheduled Interkarma posts will return soon, so don’t worry.

Anyway, allow me to introduce myself, you may know me from such features as horse riding, inventory upgrades, shopping, persistent state, icons, tavern rooms, ships and houses, as well as various other bits and bobs. So why did I spring up from nowhere and start contributing to DFU?

I bought Daggerfall on xmas after its release and played like crazy for 7 days until the end of the christmas break, then stopped. Because it’s such a huge game, never really got back into it for years due to lack of time & small children – until shortly before Morrowind came out. By then the game was simply far too dated for me to persevere, especially because I forgot about the WSAD option and I was using the default control scheme of stupid mouse pointer arrows to move. So I’ve actually never played beyond the first couple of character levels. Always wanted to, and do intend to once DF Unity is done. This is why I am absent for any discussion or work around the main quest! Spoilers! Yep even after all this time.

While the progress has been fantastic (Interkarma has Orc level stamina apparently) it’s a big project and takes a long time, and since I’m a software engineer for the past 2+ decades who now does software design so don’t get to write much code at work… I figured I’d see if I could contribute. Also my kids are all teenagers now, so I have more free time than I’ve had for 2 decades. I had no knowledge of Daggerfall and its data structures, hardly ever touched C# and never used Unity before, so it’s been quite a learning curve. Anyway, after I finished my work on ships, houses, shops and taverns I asked Interkarma what he thought I should tackle next and between us we decided it was time to implement guilds. I’d already done some work with the guild services menus, but now I needed to create the guild membership systems.

Guilds

Guilds in Daggerfall follow some common rules for promotion etc but offer different services and quests. The first thing to focus on was ranks and building some foundations that would make each guild easy to implement, allowing the common behavior to be shared. I also wanted to ensure that new guilds could be added by mods, as I was sure that several people in the community were keen to add new guilds having seen discussions on the forums, and I had some ideas of my own that would be best integrated into the base game by adding a new guild. I decided early on that the guild code should be designed to support modding from the start, and the only way to ensure this was to actually implement a guild mod early on to prove the concept.

So, quite a lot to take on. Fortunately I had 3 solid days free coming up to get started on this. The fighters guild is the simplest of them all so I started with that. First step was to test classic and see how guild membership worked with rank changes etc. To support modding, the guild classes are designed so that they know about the players membership status, rank, and what benefits and services the guild provides at that rank. Service and guild management code asks the guild class by calling the appropriate method when they need to know. They also supply guild specific messages to the ranking system which is shared. This means that a new guild can simply be added by implementing a new guild class and registering it with the guild manager.

Now by this time you could join the Fighters guild.

Join Fighters

Joining the Fighters

Next thing was to show the guild memberships in the affiliations section of the character sheet. This required orange text which I think isn’t used anywhere else in the game.

Affiliations

Affiliations

Next, I fleshed out the benefits and services being offered at each rank and integrated it with the service menu I had previously done, then moved on to detection of rank changes. For the time being this is being checked every 24 hours rather than the 28 days it’s supposed to be. Resting for a month in classic daggerfall to test rank changing was incredibly tedious, 99 hours at a time! Also, for now, you can rest in guild halls for free as soon as you join – so testing doesn’t require finding a nearby inn. To test I was modifying guild reputation in savefiles and then reloading. Once promotion, demotion and expulsion were all done and working for the fighers it was time to deal with the harder bits.

Temples

So, temples are guilds but complicated because it’s like a single guild (you can only join one Temple) in many ways and multiple guilds in others. Players get different benefits at different levels from each different Temple, and the guild system needed to be able to cope with this. Knightly Orders are similar, but a lot less complex because they don’t offer training and curing services. I decided that Temples would be a single guild, but with a Divine variable set to enable variations. Building this required changing quite a bit of what I had built for Fighters, but this was the point of tackling the most complex second. It may not sound difficult, but I found it tricky to enable temples to offer training to non-members (at a higher price) because the services system was hooked into guild membership. Solved this in a way that is not available to new guilds, but not worried because this is a unique feature of temples and is so joining one temple doesn’t prevent you from training at a different one.

Temple Training

Getting training when not a member

Proving the foundations

The next step was to prove the foundations were designed and build right by implementing the Mages guild. This took less than an hour, with most of the time spent finding the correct message id’s in text.rsc for joining and being promoted. The fact that it was so quick and easy let me know that I had things right. It had taken quite a lot of work, but the foundations were done.

Denied

Mages don’t want you

A New Guild

Now it was time to prove that a new guild could be built and added by a mod. This threw up quite a technical challenge – how to integrate a new guild into the game world. As you will be aware if you have followed Interkarma’s blog posts, Daggerfall Unity works off the original games data files. This means the game world is set in stone within these files. (contrary to some opinion, there is no runtime procedural generation – it was all done upfront) After much thought and looking through the DFU code which reads and parses the world data from original files, which I had not had much reason to look at before, I realised that this data could be saved to text files in JSON format by simply using the serializer that’s already used to create saved games. So, I created some console commands to dump Daggerfall block data into JSON files, with the thought that I could modify these files and have them override the original game data at runtime.

I’ll not go into too much depth here, if you are interested check out my Guild Mod tutorial thread: http://forums.dfworkshop.net/viewtopic.php?f=22&t=901

Anyway I got to the point where a building within a block had a completely new interior. See these before and after shots.

Before

Before the world data is overridden

After

After overriding the interior world data for this building

It was very successful, only requiring a couple of tweaks to the guild foundations in the core DFU codebase. Things were progressing very well, but I had to do some work with the mod code to enable all this to be packaged into a DFU mod file which took a while to figure out. I hope a lot of players find the Archaeologists guild mod a valuable addition to their DFU play experience. See my forum thread for more details: http://forums.dfworkshop.net/viewtopic.php?f=14&t=888

 

Questing and Reputation

The last piece of the puzle for guild foundations was to migrate the test quest dispensing over to the guild service code and have several managed pools of quests for each guild. To do this I modified the table structure for quest lists so that each quest could be restricted to members / non-members and also by guild reputation. Then it was fairly straightforward to add all the different guild quests and have the right ones selected from when you ask for a quest. Again some more work was required to enable quests and lists to be packaged into mods, which I proved by adding a single quest to the Archaeologists guild mod. Also I created a more general mechanism for adding quests to Daggerfall Unity from Interkarma’s suggestion to allow quest packs for pure quest mods so authors didn’t have to package a full mod.

This works by scanning the full directory tree under StreamingAssets/QuestPacks for quest list files named “QuestList-whatever.txt” and loading them into the guild quest pools. Jay_H will be releasing the guild quests he wrote last year as quest packs soon, so hopefully this will demonstrate how easy it is! (or possibly what needs to be re-worked, noooo)

There’s still more to do for non-quild quests, but for now the focus is just guilds. The last thing I put in place was for quest success / failure to modify the players guild reputation – I left this until last because it was so much easier to just edit this during testing. By default each guild quest successfully completed increases your rep with the guild faction by 5, and failing decreases by 2. However, some quests shown on UESP have different reputation changes.

e.g. http://en.uesp.net/wiki/Daggerfall:Still_More_Trouble_with_Orcs and http://en.uesp.net/wiki/Daggerfall:More_Trouble_with_Orcs

I don’t have any idea how this is done in classic, or even if it was ever implemented – much of the info on UESP seems to come from Daggerfall Chronicles which was written from intentions before the game was complete. So if anyone out there has any info on this, or is prepared to do some testing please drop by this thread on the forums and give me a clue: http://forums.dfworkshop.net/viewtopic.php?f=4&p=11032

So, there you have it, a brief story of my journey implementing guilds. Hope everyone enjoys them in the latest build, and please be sure to report any bugs you find!

 

Spells: Front-End Graphics

It’s finally time for spells to get the treatment and become a regular feature in Daggerfall Unity. I have decided to approach this feature-set in a more visual way than I did the quest system, which involved several months of back-end work before I could even show a single screenshot. This time around, I want the process to follow the visual diary approach from day one to make it more interesting to watch things unfold. This also helps me stay motivated as it’s a lot more fun to hurl around glowing balls of magical death than build a runtime compiler for the quest system.

There will be some more code-oriented articles later in the series, but for now let’s take a look at the front-end graphics of spell-casting animations and missiles.

 

Setup

Before I can do anything else, I have to implement the basic cast/recast loop. Thanks to Lypyl, a baseline spellbook interface is already in the game. It doesn’t have any actual spells yet, just some temp line items, but that’s all we need right now.

I wired up the spellbook to the “cast” key (default is Backspace) so player can select a spell from their collection. It doesn’t matter which “spell” you choose at this point. Just double-click any item to let the game know you’ve selected something.

 

After selecting a spell, I then had to create the player’s basic spellcasting loop. For non-immediate spells like firing a missile, this hides any weapons and puts player into a ready-to-fire status for that spell. The player will see a message on the screen saying “press button to fire spell.”.

 

At this point, player can fire spell (press mouse button) or cancel (default is E key). Once the spell has been fired, they can “recast” that spell (default is Q key) or continue attacking with weapons. Most of the work at this stage was around handling when player was about to cast or cancel, when they had a previous spell to recast, and when weapons and other clicks needed to be directed to spell manager. With all that out of the way for now, we can give the player some magic hands.

 

Casting Animations

The cast anims are stored as a simple left-hand only set of animation frames. They are played from frame 0 through to 5, then 0 again as hand is retracted at end of cast. Here’s how the raw images look as seen by Daggerfall Imaging 2.

 

These are very similar to the weapon animations, but have a few unique requirements around how they must be scaled and positioned that are quite different to weapons. They’re also a single-frame CIF record format rather than a multi-frame CIF format. Considering how much they diverge from weapons, I opted to create a new FPS animation class to render these for the player and handle their unique requirements. There’s also a few other little twists, like frame 4 (second from right) not being a consistent type in all anims. In the the cast of frost, frame 4 must scale to side of display, but for fire it must be positioned independently like first and final frames.

The final frame is an interesting one as both sides of the anim must meet in the middle while retaining best possible position and scaling under a range of different aspect ratios. This is something classic Daggerfall didn’t have to worry about as it only ran at 320×200 and all the art was designed for that native resolution. This presented me a few problems, but I think these are solved now. To give you an idea how left and right hands join together, here’s an example with the split between each side exaggerated. You can see how the left hand is mirrored to the right and joins in the middle to form the moment of spell release.

 

After some work, I had all the casting animations working properly. Here’s a loop of each element type in action (direct link)

 

Spell Missiles

With casting animations done, it’s time to start hurling around glowing blobs of magical death. Well, setup the graphical side at least, these aren’t real spells yet.

Here’s how the fire and cold missiles appear in Daggerfall Imaging 2. The first set of animations are how the missile looks while moving, the second is played when it hits something and the spell is executed.

 

These were fairly easy to setup, as Daggerfall Unity already has pretty good billboard support. The only problem encountered was making them emissive (appear lit from within and not affected by surrounding lighting). There was a quirk of my texture loading code that detected spell missile textures as windows and blocked the emission. But once that was solved, I was ready to fire missiles around town. I’ve added some basic lighting to the projectile for that extra bit of magic (direct link).

 

Timing, Origin, Collisions

Now that I can shoot missiles, a few things had to be cleaned up. As one Twitter user pointed out, it looks like the player is shooting missiles from their pants. This is because origin of missiles is the player capsule, and the origin of capsule happens to be waist-height, which is roughly pants territory. This is enhanced when looking up or down as missiles don’t really appear to be coming from the hands themselves.

I setup a delegate event that allows me to time the release of missile with the exact casting frame where it should be released, and I adjust the origin to chest height and handle the facing vector properly. This needed a little bit of tuning as hands cast slightly below centre-point of display (even in classic) so spells don’t appear to go where you’re looking. And if I make origin too high, spell appears higher than casting point which ruins illusion as well. With a little bit of tuning, I found a good balance between timings, origin, facing, and missile radius.

Next I added collision detection. This allows missile to detect when it impacts scenery or an entity like a monster (or even the player themselves). There are two parts to this, first is the direct impact and second is the radius of any area-of-effect spell on that missile. There’s no easy way to show a screenshot of this, but the missile collects a list of every entity it strikes either directly or with AOE so it can hand this back to whatever system initiated the missile. Keeping things abstract like this allows for missile to be used in other ways (like archery) down the road.

And finally, I added the small explosion anim when missile strikes something. Here’s how it looks in action (direct link).

By the way, if you don’t like the lighting or shadow effects on spell missiles, you can turn these off in settings.ini by setting EnableSpellLighting=False or just EnableSpellShadows=False to disable shadows only. Hopefully this will satisfy both classic purists and those who want a little extra shine to their spellcasting. I’m hoping someday there will be spell missile mods to really amp up the visuals with particles, etc. But this early in development, I’m happy with just some basic lighting effects. I’ll show off a few more of these with other element types in later posts.

 

Putting It All Together

With all the front-end pieces working, I can simulate a magical brawl with some real enemies. There’s no actual damage happening here, because these aren’t real spells yet, but all the import parts are taking place. The player can select a spell, fire/cancel/recast that spell, see their cast animations, and watch the missile explode against the environment or their foes. Internally, any entity struck by the missile or subsequent AOE is collected for later processing when spells get real.

So here’s that magical brawl with one more lighting enhancement, a brief flash of brighter light when spell explodes (direct link).

Now player can hurl missiles around, the work of implementing real spells & effects can begin. My next article in series will take a deeper look at the inner workings of Daggerfall’s spell system and hopefully some first steps towards real spells in Daggerfall Unity.

 

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

Taverns, Custom Loot, Climbing, Languages, Mod Features

A new round of Live Builds are now available with some great new gameplay and mod features to enjoy.

Tavern Rooms, Food & Drink

Thanks to Hazelnut, it’s now possible to rent a room in taverns. And thanks to Allofich, you can also purchase food & drink for RP purposes. During your tenancy, you’ll be allocated a bed and can use that tavern as a home base. Just talk to any friendly bartender across the Illiac Bay.

Rooms are saved with your character, so if you leave town and return later before your tenancy expires, your room will still be available. This all ties in perfectly with Hazelnut’s world persistence. You can leave loot piles in your room and return later to retrieve them. Just don’t forget to pick up your loot before your room expires or those items become property of the house. No refunds!

 

Custom Loot Containers

Another Hazelnut feature, and something unique to Daggerfall Unity, is the ability to customise your loot containers. You can now click on the loot container icon (shown in red box below) in your inventory UI while interacting with the container to set a custom icon from a much broader set of icons than normally available.

 

Use left-click for next icon, right-click for previous icon, and middle-click to change icon group. This feature means you now have some minor customisation over things you leave around your properties, ship, or rented tavern rooms. You can make the icons a bit more meaningful than just a random container, and it’s a great way to add more RP to your game.

 

New Mod Features

This one is impossible to take a screenshot of, but that doesn’t stop it from being any less awesome. TheLacus, our resident mod-master, has added some generic methods (generics are a way to handle data of any kind) to his asset bundle handling. This allows asset bundles to import more types of content in future and use load order on the mod import UI to handle duplicates.

The first new asset type now available to asset bundles is custom music and sound effects. It was already possible to inject custom sound and music into the game, but this means whole new music mods can be added as a single .dfmod package. TheLacus is also working on movie import for this feature, so one day it will be possible to import new movies from asset bundles as well.

This kind of work is critical to Daggerfall Unity having a vibrant mod community, and we all appreciate TheLacus’ work immensely.

 

Climbing

From Allofich we now have Daggerfall’s infamous climbing feature at long last. This works just like classic Daggerfall – face a wall directly and move slowly forwards. Your climbing skill will be checked as you ascend, so be careful climbing with clumsy characters, as they might come crashing back to earth.

 

Allofich tells me climbing still has some refinements ahead. For example, it’s not yet possible to climb out of water. But it’s already working exceptionally well and can only improve in the future.

 

Language Skills

Another Hazelnut gem, and something often ignored by classic players. Language skills give the player a chance to avoid combat with certain monsters based on a language check. If the language check is passed, the monster will become pacified as if you “talked them down”. Unfortunately my character speaks about ten words in Orcish – all of them insults – and is about to get into a fight.

 

The way Hazelnut has implemented this means that a character with a high Streetwise skill has a chance of avoiding combat with other roguish humanoids. If you encounter a Thief, Assassin, or the like in Daggerfall Unity your Streetwise skill might help you avoid an unpleasant encounter. For characters with a more polite way of handling things, your Etiquette skill might help save you from a tussle with a Knight or other non-roguish humanoid. For monstrous foes, you’ll need to know their exact language to pass.

This also means you might get a chance to land the first blow, if your character is that unscrupulous.

 

Magic Work-In-Progress

These latest builds also mark the first official step in the 0.5 release line from Roadmap. I have started building the back-end (effect system) and front-end (projectiles, cast animations, UI) of the magic system. This is still a work in progress and nothing is available to players in this round of builds, I’m afraid. But just like quests before it, the magic system will scale upwards in small incremental steps with each release.

I’ll be posting more on the magic system around spells and effects soon. Until then, I hope you enjoy all the other great stuff added to these builds.

New Builds For 2018

Welcome to 2018 everyone! What a great few months we’ve had in Daggerfall Unity. Despite my general absence in November through December last year, work still continued on the project at an excellent pace. I owe a debt of thanks to everyone that continued adding features while I was out of the scene for several weeks. I want to make this post all about these contributions, and mention the people who contributed during that time.

We’re close to a stable “Quests 0.4” build now before officially moving on to 0.5 and spells. “Stable” in this case doesn’t mean everything is complete or bug free – just that quests should be relatively steady and playable based on our current position in the Roadmap at the end of 0.4. Work will continue on improving and tightening up quest system all the way to 1.0, but now it’s time to move onto something new. This often means exciting new bugs to fix so the stable build stands as good fallback point if anyone is experiencing too many troubles with latest versions.

You’ll find the latest downloads on the Live Builds page as usual. If you’d like the very latest code, you can check it out directly from our GitHub page. And if you’d like a full blow-by-blow account of all changes up to now, the Commits page has what you’re after. This post mainly covers featured highlights and the people who added them. In alphabetical order, they are:

 

Aaron Fritz

Aaron is best known for his work on OpenTESArena, an open source recreation of The Elder Scrolls: Arena. This recently hit a 0.6 release milestone. If you’re a fan of projects like this one, you can follow Aaron on Twitter @aaron_fritz1.

The fake sky background in classic Daggerfall works best in 320×200, 4:3 aspect, and with the short draw distances you would find in a game Daggerfall’s vintage. It’s not a skybox in the modern sense, just a set of tiled images that slide around behind the world. Works well enough in classic and is quite beautiful in its own pixel-art painterly way, even with some oddness such as distant trees being larger than ones nearby.

In Daggerfall Unity with high resolution and long draw distances, the disconnect between sky background and foreground world is intensified. The sky images aren’t really scaled for widescreen and the way I implemented this originally lead to the sky floating around without really feeling connected to the 3D world. This had the potential to make some people feel motion sick, or at least uncomfortable, after playing for a while. The Enhanced Sky mod doesn’t have these problems, but some prefer the pixel-art sky and not feeling ill.

Aaron’s contribution was to add Y-shearing, a trick from the early days of realtime game graphics to help the fake sky horizon stay “glued” to the 3D world horizon. This goes a long way to making the sky more comfortable for anyone who experiences motion issues. It’s hard to communicate in a single screenshot, but when looking up and down, the horizon line of the sky no longer slips around. It may not be perfect depending how badly you’re affected, but it should be a noticeable improvement.

 

Allofich

Where to even start with Allofich? He’s a binary magician, that’s for certain. I’m not bad at reverse engineering stuff, but he makes me feel like my training wheels are still on. Some of the deep inner workings of Daggerfall Unity such as level-up formulas and combat work precisely like classic thanks to his efforts. He’s also responsible for locating obscure bits of data answering questions like “how is dungeon water level determined?” to “how are shop shelves stocked?”. Allofich has built or refined a large number of real gameplay features in Daggerfall Unity. Here’s an overview of his work over the last several weeks.

 

Dungeon Water

It’s now possible to swim in dungeons… and dive underwater… and drown when you get lost in that flooded passage. Allofich solved the long-running mystery around how dungeon water level was determined and proceeded to implement the entire feature stack of swimming, right down to sound effects and breath management. All I had to do was add the water plane to show the water surface visually. I still need to implement underwater effects at time of writing.

 

Knockback

When you deliver a big hit to enemies in Daggerfall, you can send them reeling, physically pushing them away. This knockback effect helps the player feel more powerful and stops enemies from always pushing forward relentlessly. It can even give the player a split second to turn and run. Allofich has recently implemented the knockback effect in Daggerfall Unity.

 

Magic Weapon FPS Graphics

In preparation for 0.5, magic weapon FPS graphics are now used when player equips a magical weapon. The actual magic effects aren’t there yet, of course, but this is still an important part of the process.

 

Animal Sounds

A small but welcome addition is that animals now play their appropriate sound effects at random when you stand nearby.

 

Enemy Ranged Basics

Certain enemies are now capable of attacking with ranged weapons if player is far enough away (or tries to run). It’s hard to see in this zoom below, but this Knight is lining up player for a shot.

 

Stealth Basics & Backstabbing

The player is now able to sneak as per classic Daggerfall by holding down the “sneak key”. To complement this, you can also backstab enemies by sneaking up behind them.

 

Stocking Shelves & Containers

And last one for now is the correct stocking of shelves and containers as per classic. While Hazelnut was building out shops and containers (more on this below), Allofich worked on stocking these containers with the correct items loadout.

 

Allofich has added many more smaller items than I can cover fully. This includes work on skill mastery, animation fixes, weapon and shield equip delays, and more. Look back through the commits on git to get a full idea on just how much work he contributes.

 

Hazelnut

He debuted with horse riding last year and has gone on to implement several important gameplay features. Between Allofich and Hazelnut, many 0.6 and 0.7 features on the roadmap are working ahead of schedule. Here are the highlights of what he’s been working on lately.

 

Teleportation Service

The Mages Guild offers a teleportation service. Thanks to Hazelnut, you can now use this service from your local Mages Guild to travel instantly across in the Illiac Bay.

 

Shop Shelves & House Containers

If you have bought or sold items in Daggerfall Unity recently, you have Hazelnut to thank for these features. While selling has been in for a while, the ability to interact with shop shelves and buy items is a more recent addition. This required some work to link up 3D container objects to loot containers, populate with items as per classic (Allofich helped here), and persist state of these containers when player enters and exits buildings. There’s a little more on this below, but the short version is you can buy stuff now.

 

World Persistence & A Shipworthy Home

In classic Daggerfall if you exit a building then return back inside the interior is just how you left it. Up until recently, Daggerfall Unity wiped the interior of buildings as soon as you left. Some work was needed to persist world state for the player as they entered/exited buildings, purchased items, opened doors, stole items, dropped loot on the ground, stored items in their home, and so on. This world persistence was a hard job, but Hazelnut has delivered excellent work all around. This feature is also the bedrock of player housing, which makes an early debut by way of the player’s ship.

You can now buy a ship from a bank, use that ship to speed up your transportation time and reduce costs, and transfer to that ship directly using the Transport menu. From here the ship acts as a kind of nautical home base where you can store loot gathered in your adventures. Any loot dropped on the ship or stored in the available containers will persist permanently in the save data for that character.

 

Numidium

New contributor Numidium recently added “organisation info” answers to the Talk interface. This is used when you ask wandering NPCs about groups like the Mages Guild. Every addition to Daggerfall Unity is welcome, and it’s cool to see new contributors building on and fleshing out existing work. Thank you!

 

Nystul

You already know Nystul from his fantastic work on the Automap interfaces (interior, exterior, and dungeon), and mods like Distant Terrain and Realtime Reflections. He’s made more important contributions to the core than I can list. He’s also the creator of the Talk window interface and the glue which binds this UI back into game data.

Over the last few months, Nystul has built out the Talk UI to be more functional and bug-free than ever. One of the big new features is rumours during and after quests. Below, the NPC is spreading gossip about the player’s most recent quest to rid a wife of her undead husband.

This kind of data wet-work is very hard and dry, and I can’t shine enough light on Nystul’s progress with screenshots alone. Hopefully it’s enough just to say what an incredible job Nystul is doing here and how important this work is to the final game.

 

TheLacus

If you’ve modded Daggerfall Unity in any capacity then you know TheLacus for his amazing work on these systems. Not only has he continued to build out the mod system from its humble beginnings, he has continued to provide documentation for creating mods and supporting new mod creators in need of help. He’s an all round great person with a great big brain.

 

New Advanced Settings Window

TheLacus has created and refined a nice Advanced Settings UI straight off the startup screen. It’s no longer necessary to dive into the INI to set most of the options players might be interested in. The latest builds are sporting an all new look for the Advanced Settings window with a tab-like interface and new controls. I can only see this getting better from here.

 

Texture Compression

This new feature applies DTX5 compression to replacement textures injected through the mod system. This will reduce texture memory by half or more at the expense of greater load time (as textures are injected procedurally). This is hard to show in a screenshot, and I have King of Worms on the forums to thank for this informative image created after performing some tests with texture compression and a large number of texture mods.

Some other things have improved in the texture modding side of things. The super-atlas is no longer used, which could lead to overflow for some textures. And a few memory leaks have been plugged in the texture system. Work in this area will continue to improve over time. The next step is to refine the texture cache to lower the amount of texture memory used after an extended play session.

 

Conclusion

All of that by itself makes for a huge couple of months, and I’m also back in the mix rolling out more parts of the incoming spell system. I look forward to posting about my progress on this soon.

If you want more frequent news, I post small bite-sized updates about Daggerfall Unity on Twitter @gav_clayton.

Daggerfall Unity Now Playable Start to End

That’s right! The main story quest in Daggerfall Unity is now completely playable from start to end. I’ve spent the last couple of months playing through the story quest, building out engine support, and fixing all the major bugs I could find. It’s true this game still has a distance to travel (spell system is next major journey) but this is a huge milestone in the project’s life cycle. It’s no longer fair to say Daggerfall Unity “isn’t playable yet”, that’s not even close to accurate anymore. And thanks to regular contributors like Nystul, Allofich, Hazelnut, and Lypyl, some of the later features on the roadmap are building out ahead of schedule.

The quest system has consumed around a year of my development time to bring to this point. It represents the single largest group of features in the project so far, and drives almost every other gameplay system forwards. I feel confident in saying the magic system probably won’t be anywhere near as challenging. And once we pass that milestone, everything else is on the downhill run.

 

Getting Started

After you grab the latest DragonBreak build from Live Builds page, there are two ways you can play through the main quest. You can either start a new character and play normally (using quests offered by any Fighters Guild to help level up between main quests) or use the “setmqstage n” console command to force the game to a specific point along the main quest process. There are 7 total quest stages, thus “setmqstage 1” through “setmqstage 7” are supported. Each stage is a chain of around two to six quests that represent a particular story arc in the game. If and when new problems are found with main quest, testers can quickly restart and test just that stage without playing through the whole game from the beginning.

If you want to play the game as normally as possible, start a new character. Playing the game from start to end normally is also an important and time-consuming part of the testing process, so your time here is valuable, even if something breaks and you need to start again. But if you want to perform focused testing of the main quest, grab a high level character save and use the “setmqstage n” console commands. I’ll post more details in this forum thread as time allows. Please offer feedback in that thread or ask general questions, and post to Bug Reports forums with obvious bugs.

 

Stable Builds

The next step from here is to work towards a DragonBreak stable build and complete the 0.4 cycle. This might take several weeks as the main quest is a massive and complex system, there’s no telling what problems testers might run into. Once the stable build is ready, work will proceed on the spell system and 0.5.

 

Thank You

I also want to thank all of Daggerfall Unity’s contributors, supporters, mod-creators, and community members. You are all responsible for this project’s momentum, and for keeping morale high during those bleak periods of solid development where nothing visible seems to be happening. I am very excited for the future of Daggerfall Unity and the community building around it.

Cheers everyone!

 

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

 

Dust of Restful Death

The main story quest in Daggerfall Unity is cracking along lately. The more problems I solve, the faster I can pass new quests. This has created a cumulative effect where things are snowballing towards the finish line. Today, I feel I’ve reached an important milestone with the main quest passing up to “The Dust of Restful Death”, only a few short steps from the end.

In this quest, the player briefly soothes the tormented bones of King Lysandus to learn why he requires vengeance. From a technical front, this is not only the result of a long chain of earlier quests, but required some new interaction between the world and quest system, and is the first quest to play an in-game cinematic.

There are bound to be problems and bugs to fix as the full story quest rolls out to testers, but for now let’s just enjoy this one quest where Lysandus has his big moment.

Vengeance Build 81

New builds are now available on the Live Builds page, bringing us up to build #81 across all platforms. A lot has happened over the last month, with steady contributions from long-time Daggerfall Unity developers Lypyl, Allofich, TheLacus, and Nystul. I would also like everyone to welcome on board new developer Hazelnut, who has built many valuable updates over the last month.

I’ll post a more complete list of updates towards the end of this post, but want to start with the big visual stuff that’s changed since last update.

 

Main Quest

The complete main story quest is now offered when starting a new level 1 character. Please keep in mind this is still under construction, so you are likely to reach a point where you cannot continue and may need to start fresh later (or use a console cheat). It could be another few months before all main quests are in a passing state, but I felt it was important to start offering to new players.

 

Main Quest Testing – Stage 3

I’ve pulled the wraps off stage 3 of main quest for testers. This includes a quest from Prince Helseth to blackmail Lord Castellian (S0000002) which follows onto recovering an unauthorised biography for Queen Barenziah (S0000011). This tome can be stolen by the necromancers if you don’t recover from Orsinium in time, leading to player needing to strike a deal with Gortwog for recovery. Will the player return the book to Barenziah as planned, or betray her and deliver the book to Gortwog instead?

  

 

 

 

 

 

 

Transport Menu

Hazelnut has implemented the transport menu for player to switch between Foot, Horse, Cart, and Ship. Until full shops are implemented, all level 1 characters will begin with a free horse, cart, and ship to play with. It’s a great feeling to tear around towns and the wilderness on a horse at long last. But as player housing is not yet implemented, you cannot store loot on your ship. Please keep this mind or anything you drop to the ship will be lost when you leave!

 

Item Info & Player Status Popups

Another Hazelnut update. He has implemented inventory info popups and world status popups. What you can’t see easily is this required a fairly large back-end system to expand context macros correctly across various systems. This work is also being used in several other places now.

 

Banking

The third big update from Hazelnut builds on earlier groundwork by Lypyl. Banks are now mostly operational. You can deposit and withdraw gold, convert gold to letters of credit, and even take out loans!

 

Selling & Repairing

If you’ve played one of the earlier interim builds, you might have noticed player encumbrance and weapon condition has been implemented. To complement this, Hazelnut has added selling and repairing items at stores. The selling and repairing gold values match classic very closely thanks to additional work by Allofich. Now you can finally tip out that wagon and profit from all your dungeon crawling.

 

Real-time Info Panel & Enhanced Item Lists

The final big-ticket item from Hazelnut is a real-time info panel for items which displays details as player moves mouse over an item. This is optional, but currently enabled by default for testing. A second option, which must be enabled in settings.ini (EnableEnhancedItemLists=True) will show an item grid of 16x tiles instead of the default 4x. This is excellent work that brings the UI forwards while maintaining classic style.

 

Enhanced Mod Support & Post-Processing

TheLacus has built out texture injection to support wilderness flat replacements, and added post-processing support for effects like SSAO, bloom, vignette, anti-aliasing, and more! Post-processing is currently available in mod form. Check out this thread on the forums for more information.

 

Talk Window & Discovery

Last but certainly not least is the NPC talk interface by Nystul. You can now bother town NPCs to ask for directions to local shops, with more features on the way. A huge thanks goes to Nystul for all of his amazing work on this system.

The talk window also complements my location and building discovery, as NPCs can direct you to nearby businesses if they like you enough (and know the place). Please keep in mind this system is still under development and NPCs cannot yet offer all the topics available in classic at this time.

 

More Gameplay

One of the most under-represented contributors by screenshot is Allofich. He contributes a great deal to the back-end formulas, reverse engineering, and general flow of game systems. These are all very hard to show in screenshot form, so make sure you have a skim through the patch notes to find more of his work. Some of the features he’s added recently include fixes to activation, residence greetings, and shop opening hours.

 

Conclusion

There’s no doubt that Daggerfall Unity is barrelling forwards. Thanks to contributors, new systems are starting to be built ahead of my original schedule. If this trend continues, some of the later gameplay elements are likely to be ready concurrently with upcoming work on spell system. Bundle this with all of the amazing mod work being done over in the Community Workshop forums. It’s just not possible to highlight everyone here, so please take the time to read through mod creator’s threads and give them feedback on their work.

Detailed patch notes follow for build #81. If you want more frequent micro-updates, please follow @gav_clayton on Twitter. Thank you for reading!

  • Shop opening hours and greetings. (Allofich)
  • Show up to 16x inventory tiles per list instead of 4x. Currently off by default. (Hazelnut)
  • Realtime info panel in inventory. Currently on by default. (Hazelnut)
  • Texture injection improvements and fixes. (TheLacus)
  • Main quest is now offered to new level 1 characters. (Interkarma)
  • Can now “start quest” by quest filename. (Interkarma)
  • Quest resources are now culled when placing them to a second location. This can happen when quest want to move item from one dungeon to another. (Interkarma)
  • Fixes to face display of static NPCs. (Nystul)
  • Fixes to quest execution flow. (Interkarma)
  • Cycle quest debugger display from Off/Minimum/Full (default is Minimum) using LeftShift+Tab. Off will also disable place markers on HUD. (Interkarma)
  • Quests will now always have a minimum of one day travel time. (Interkarma)
  • Implemented QuestSuccess flag. This is raised when quest calls “give pc” action. (Interkarma)
  • Can no longer remove quest items to remote container, except when item must be dropped as part of quest. (Interkarma)
  • Quest items are now removed when quest is tombstoned. Orphaned quest items in saves are purged on load. (Interkarma)
  • Soul gems with trapped souls now read from classic saves and displayed correctly in inventory. (Hazelnut)
  • Banks are mostly operational now. Can deposit, withdraw, take out loans, and convert gold to letters of credit. (Lypyl/Hazelnut)
  • Fix for quest item stacking issue. (Hazelnut)
  • Fix for bucklers stacking with two-handed weapons on paper doll (Allofich)
  • Boots and shoes now count as leather armour. (Hazelnut)
  • Cost calculations for selling and repairing. (Allofich)
  • Holiday text now displays when player enters a town during a holiday. (Allofich)
  • Slightly increased interior ambient light at night.
  • Post processing stack now available for camera effects like SSAO, bloom, etc. (TheLacus)
  • Initial talk window for mobile NPC interaction, ask for directions, etc. (Nystul)
  • Partial fix for mobile NPC precision issue causing them to glide north at spawn (Interkarma)
  • Fix for faction data pollution from bad saves.
  • Main quest stage 3 ‘setmqstage 3’ now enabled. (Interkarma)
  • Enemy names are now saved with corpse loot container. (Allofich)
  • Most shops now support selling and repair of equipment. (Hazelnut)
  • Implemented weapon material effectiveness vs. specific foes, e.g. silver to hit werewolves. (Allofich)
  • Prohibited equipment now restricted based on class settings. (Allofich)
  • Back-end tracking for starting crime guild quests Thieves and Dark Brotherhood. Quest line currently disabled. (Allofich)
  • Mobile town NPCs are now killable. No blood splash at this time. (Allofich)
  • Info click now supported on dead enemy mobiles. (Allofich)
  • Inventory weight and encumbrance. (Hazelnut)
  • Click distance check and fix activating through walls. (Allofich)
  • Improved artifact handling (Hazelnut)
  • Fix for starting Mynisera’s Letters. You should now be able to complete this quest, rounding out Stage 2 with only some bug fixes required (see below).
  • Improved enemy equipment calculations (humans and orcs will use their own armour and weapons for combat purposes). (Allofich)
  • Improved loot tables by dungeon type. (Allofich)
  • Location and building discovery like classic. Player will now need to discover locations through quests or exploration. Buildings are discovered as player interacts with them.
  • Exterior automap and travel map updated to support discovery. (Nystul)
  • Improved player movement speed calculation based on attributes. (Allofich)
  • New texture import support for billboard batches. This should allow mod authors to replace all foliage sprites in world. (TheLacus)
  • Fast travel countdown on travel map and fix for borders showing on zoom. (Nystul)
  • Transport menu: Foot, Horse, Cart, Ship now supported. (Hazelnut)
  • nfo popups based on item type and improved text macro support. (Hazelnut)
  • Fix for bucklers and two-handed weapons. (Allofich)
  • Fix to prevent fast travel with enemies nearby. (Allofich)
  • More combat sounds. (Allofich)

The “Vengeance” Update

A few weeks on from the Fighters update and the quest system is now ready to run with Daggerfall’s main story quest. Well, the first few quests at least. Welcome to the Vengeance update!

 

The aim of this test cycle is to ensure the main quest can be experienced by a non magic using character. My plan is to roll out the main quest in small bite-sized pieces with the ability to reset the main quest instantly to one of several critical points along the way. This forum post has all the details.

In summary, you can use the console command “setmqstage number” to setup your character level, reputation, global variables, and quest loadout to start testing main quest from any point. Right now stage 1 and 2 are active, and more will be added in the coming weeks.

 

By limiting quests to a handful at a time, I can build out remaining quest actions in small pieces while bug-fixing the live quests. Hopefully this will keep testers on track and communicating in a standard way. But you can try to play ahead through the whole main quest right now if you so choose. Only please keep in mind some of the later quests are missing action support and will not execute properly. So play ahead for fun but keep the real testing and feedback for the current stages.

 

Also new in this version is full save/load of quest state. If a quest breaks or doesn’t go as planned, you can send me your save file and I’ll be able to inspect what’s happening from the save data. A lot of other bug fixes and small improvements have also made their way into the latest builds.

 

You will find latest builds on the Live Builds page as usual. I hope you enjoy playing through the first few story quests in Daggerfall Unity. Don’t forget, this forum thread is the right place for discussion and feedback. If you want more micro updates on the project, follow me on Twitter @gav_clayton.

The “Fighters” Update

The Fighters Guild awaits

A whole new cycle of Live Builds is now underway for Daggerfall Unity 0.4. Here are some of the new features you’ll find in the latest “Fighters” update.

 

Quest System

The quest system is now open! Visit any Fighters Guild and speak to the usual quest giver to receive a random guild quest. Be sure to bring your strongest character, because quests span everything the Fighters Guild has on offer, from rats to liches.

Mordane Yeomham has work for you

 

While still incomplete, the quest system in Daggerfall Unity manages to kick things up a notch over classic:

  • No more binary QBN/QRC files and command line compilers! Quest scripts can be created with a simple text editor like Notepad and are based on Donald Tipton’s TEMPLATE v1.11 scripting language, the de facto standard for creating Daggerfall quests. If you’ve written Daggerfall quests before, you already have the skills needed to write quests in Daggerfall Unity.
  • Quests scripts are JIT (just in time) compiled by Daggerfall Unity. This means you can write new quest scripts and test them while the game is running.
  • Daggerfall’s classic quests have already been migrated to the new scripting language and many quests are perfectly playable in Daggerfall Unity now.
  • New features! Daggerfall Unity is already extending the capabilities of the quest system beyond what’s possible in classic, such as using location exteriors in quests. It’s even possible to write new quest actions in C# and extend quest system through mods.
  • The Quest Debugger lets you see what your quest is doing at any time by displaying the internal Task states and Timers, and helping you find buildings quickly. This debugger will continue to grow in power as the quest system develops. Note: Quest Debugger is always enabled in “Fighters” update. A toggle will be added once quest system passes tests.

 

Real Skills

Be prepared! Daggerfall Unity now has real combat formulas, including weapon and armour checks, dodging, critical strike, and more. If you take on a vastly more powerful enemy, you might not land a single blow.

How do you like me now?

 

Skill and level progression are now working. Your character will grow in power by playing the game and be able to level up at last. Skills like dodging and critical strike will be checked during combat, and skills like medical are checked during rest. Daggerfall’s level-up formula is applied on travel and rest, and you’ll go up in level once your skills have been raised enough.

Practice makes perfect

 

You can now set your interaction mode using F1-F4 (default keys). Use Info mode to find an NPC or building name, and use Steal mode to try your luck at picking locks. This even checks your Lockpicking skill against the lock using Daggerfall’s lockpick formula.

Maybe a more direct approach is needed

 

New UI Windows

The exterior automap will help you navigate around town locations. Named buildings are marked automatically for now, and the Quest Debugger will direct you to quest buildings until the discovery and “talk” systems are implemented. Like the dungeon automap, you can zoom, pan, and rotate the map. It’s great dragging the map around with left mouse button rather than using arrow keys.

Now, where was I?

 

The keybind interface will help you bind keys just like in Daggerfall.

No more editing text files

 

Wandering NPCs

Mobile NPCs now wander the streets during daylight hours across all climates in Illiac Bay. Meet Nords, Redguard, and Bretons in your travels.

Excuse me, do you know where I can sell all this orc blood?

 

The “talk” system has not yet been implemented in Daggerfall Unity, so you can’t yet speak to these wandering people to ask for directions, rumours, and so on. This will be coming sometime in 0.5 update cycle.

 

More Mods

All the mods that were previously integrated with Daggerfall Unity now have standalone updated versions from their creators. Available mods are on the Released Mods page of the forums. Please let the creator know if you encounter a problem with their mod.

You can now create art replacement mods for Daggerfall Unity. Check out the new Modding pages for more details on how to replace textures, sprites, models, sounds, and movies. A few great-looking art mods are already in the works, such as the Terrain Flats art mod by jman0war. He is hand-painting all new terrain art and it looks amazing.

 

And in case you didn’t know already, Daggerfall Unity has a runtime C# compiler, mod packager, and mod loader. This has been available for a while, but not a lot of people seem to know about it yet. Check out this page on the forums for more information on creating a Hello World styled mod in C# for Daggerfall Unity. You could even make a mod that adds custom actions to the quest system!

 

Get Involved

You can find the latest builds on the Live Builds page as usual.

For conversations, please use the following forum thread for all talk and bug reports for now. More information will be found in that thread to help you run quests.

 

Credits

I have the following people to thank for their contributions to the above features, in no particular order:

Allofich – For tirelessly working on skills, formulas, level ups, and researching classic save format. Some of the real gameplay features in this release would not have been ready without his efforts.

TheLacus – For creating the asset swap capabilities, documenting everything, and supporting people in their efforts to mod Daggerfall Unity.

Nystul – For the incredible automap user interfaces and mods he creates.

Lypyl – For the runtime C# compiler, mod packager, and mod loader. Also for his help with reverse engineering building data during early stages of the quest system.

JustinS – For his perfect keybind interface.

And thank you to everyone else who has contributed smaller fixes and patches on GitHub: muderbeard, midopa, electrorobobody, and more. Daggerfall Unity has only come so far thanks to the ingenuity and generosity of contributors. The combination of open source and a brilliant community will take this project a long way in the future.

Cheers!