March 2011

In this article I’ll talk about the progress towards version 0.20 as well as plans for supporting lower end systems.

Version 0.20 Progress

I’ve been continuing to work on DaggerXL version 0.20, so I’ll talk about some of the items that have recently been accomplished. If you’re following along on the DaggerXL forums, then most of this will be old news.

Dungeon Water

The first step was to figure out where the water plane height is stored in the data, since it is different for different dungeons. Once I figured that out, the next step was to render the water plane, which you can see below (thumbnails):

The next release will most likely just use the simple plane for the surface, as shown in the previous screenshots. I’ll figure out how I want to handle the surface (how faithful the default should be, that kind of thing) after the next build. In the future the water can look much cooler, but I’m still trying to focus on gameplay.

So the next step was to detect when the player was underwater and render the appropriate effects:

Finally I implemented the swimming mechanic, which uses the player’s skill to determine things such as swimming speed. In addition the swimming skill improves with use in the same way that running and climbing currently work. Finally I implemented the breath meter and drowning mechanic, though the meter was implemented after I took the above screenshots. Sound effects for entering the water, swimming and underwater ambiance have been implemented.

Object Orientation Issues

The next thing I worked on was the various object orientation issues, which cause such comical images as you see below:

These and many other weird anamolies have now been fixed for version 0.20. Most of the screenshots of various issues like these were taken by a DaggerXL forum member, Lennas – if you want to see more “bloopers,” visit the bug thread here.


Switches will work much more reliably in version 0.20. The first problem is that they were not animating correctly a lot of the time or not animating at all. These problems have been fixed. The second problem is that they often didn’t activate their target objects properly, which has also been fixed. In addition a new switch type has been found and implemented that controls the gates that you find in some dungeons.

Remaining Issues and Features

Now I am working on finish the dungeon texture region remapping, which makes dungeons in different areas of Daggerfall use different textures without having to create custom pieces for each area. This is similar to the texture remapping already done for exterior buildings, terrain and building interiors. After that is finished, the next goal is to fix some uv issues and finally flat scale/offset issues – which will fix things like floating poles and columns. On the feature side, once the bugs are dealt with, I will finish the loot system, leveling and get proper random encounters in. At this point I’ll release version 0.20 which will feature a much more robust dungeon exploring experience as well as full character advancement and leveling.

Low-End System Support

The focus of DaggerXL right now is, and will continue to be for a while, completing the “vanilla” Daggerfall gameplay. However I’m also going to start, slowly, putting in proper support for lower end hardware and optimizing the support for mid/higher end hardware. So here’s basically how I plan on tackling this issue:

1) Greater optimizations for the current renderer (of course). Things like reducing shader complexity as much as possible, reducing batch-count further and so on.

2) Support for pre-shader model 2.0 hardware with reduced effects/quality when necessary. The goal here would be to reproduce the effects as much as possible using fixed function. Any GPU should be able to run in this mode, though visual compromises will have to be made – possibly reduced exterior view distance, lighting simplification (i.e. dynamic light maps, texture projections, local tesselation + vertex lighting, etc.; not sure which one yet). – This option may be skipped in favor of option 3 below.

3) Software renderer – I’ve been wanting to play around with software rendering again lately (it’s been a while… other then some CPU raycasting experiments). The idea would be to support, with low to moderate resolutions, any system with a decent CPU(s). Older GPU’s (especially Intel) tend to have terrible and outdated drivers, so this may be a viable alternative to people with decent systems that have under-performing or old GPU’s. At low resolutions, this could also help systems with slower CPU’s since batching, CPU/GPU bus bandwidth and driver performance are no longer an issue.

Now due to the terrible drivers I mentioned, I’m actually considering skipping option #2. Basically decent Shader Model 2+ GPU (Radeon 9500+, GeForce 6+) or software. Normally I’d shy away from the complexity of adding a software renderer but there are a few compelling reasons –

* For some reason I want to tinker with software rendering. Being a hobby project, this is actually really compelling for me. :)
* By limiting the set of GPU’s to those with decent drivers and allowing a fallback for newer GPUs with bad drivers (think Intel), this should make supporting DaggerXL a little easier while making the potential audience larger.
* Support older systems without worrying about poor Driver support (at least for graphics).
* I plan on supporting multiple platforms eventually, so this would allow me to make sure that clean support is in for multiple renderers without affecting the higher level code. I.e. most of the code base shouldn’t care if it’s hardware or software.
* Wider system and possible platform support.

Of course, many of the cool new effects will be hardware only. However the software renderer should still look much cleaner then the original Daggerfall renderer. Some examples include fixing visual glitches between tiles, increased draw distance (over vanilla, less then GPU), lighting and Goraud shading on terrain, per-pixel perspective correction to make textures look cleaner, mipmapping, proper z-buffer, true color textures in 32 bit mode, etc. There will be two modes – 32 bit and 8 bit – depending on whether you want palette support or not. Texture replacements, sprite replacements and model replacements will be supported in the 32 bit software rendered mode and in the GPU mode – though performance will have to be a consideration of course.

In addition I plan on doing some limited one-time caching to speed up the initial loading times. This would happen automatically the first time the program is run or whenever the cache becomes invalidated (new version, modding, etc.). Again all automatic, but I’d like to get the load times to be much faster as well.

I’ve been working towards version 0.20 – I’d like to share the progress as it is made:


The first major feature going into version 0.20 is the dungeon automap system (and also the building interior maps – since they use a simplified version of the same system). The automap only shows those areas that you’ve already explored – like the original. Those flags are also saved in the save games. The plan is that when current saved games are loaded, all the flags are cleared and the automap will start updating from then on. Obviously this won’t be a problem when entering a dungeon for the first time or starting a new game or with new (version 0.20+) save games.

Below you can see some screenshots of the automap. These are all thumbnails, click on them to see the larger images.

There were taken before the compass and rotation were implemented:

These show rotation and the “perspective” mode. Note that the mode icon still has to change as well as the yellow “blockmap” that shows your current location and the exit/start.

As you can see the increased resolution improves the readability but that is not all. The “view distance” has been greatly increased. This allows you to zoom out and see a global view of the dungeon that you’ve explored so far. Later extended features are planned to make this even more usable such as making pieces that obscure the player arrow translucent and fogging or desaturating pieces based on how far below the player they are. The idea is to give the player a greater since of where the geometry is in space in relation to the player.

The Next Steps

As you may know, I’ve been discussing this on the DaggerXL forums a little bit… what are the next steps after version 0.20 is released when the dungeon exploration experience will be much more robust and complete? The short answer is that I will begin focusing more on the “above ground” – RPG – gameplay.

To that end the following build will focus on NPCs and the dialog system. This includes getting wandering NPC’s working again, but this time you’ll be able to talk to them as well as kill them. You will also be able to interact with static NPCs.

The immediate next step will then be to get shops, banks and other places of business operational. With all the dungeon exploring, you’ll now be able to sell off that loot and use your hard-earned gold to actually buy stuff. 😀

After that comes the spell system, including the ability to acquire new pre-made spells due to the NPC/shop functionality (which includes the Mage’s Guild non-member services such as buying pre-made spells). This will also include general projectiles such as Bows and enemy spells.

And finally the Quest System and Faction System, starting with Guilds and Guild Quests. Throughout this process I will be working on implementing missing skills, as appropriate (Mercantile when shops are implemented for example), so by this point all the skills will most likely be functional.

Beyond all this, there is still more to do. But this outlines the immediate future – and the path to DaggerXL Alpha Status. 🙂

Version 0.198 has been released, it is essentially just a bug fix build. I’ll go over the changes:

  • Fixed save crash bug in many dungeons.
  • Fixed teleport tag issues (though teleport still doesn’t function).
  • Random monsters are actually random now, though not using the correct monster sets.
  • Dungeon start and current location ID are now saved in the Save Format. Note 0.197 saves will still load.
  • Added a coordinate and location ID view – hit F11. Use this view when reporting issues.

Remember that when reporting bugs inside the dungeons, hit F11 before taking your screenshot. This has the local dungeon coordinates plus the location ID. This will allow me to teleport here in the future. Previously, once you entered a dungeon and saved – if you reload the game later it would forget where the dungeon start was. This means you’d have to find your way out of the dungeon the hard way. That has been fixed, the start point and location ID are both saved, though the old saves will still load just fine.

You can download it from the Downloads page.

As I’ve stated elsewhere I’m releasing another interim DaggerXL build. This build only has one new feature, but it’s a big one…

General dungeon support!

Most dungeons in the game are now explorable, with 3 notable exceptions that I know of: Daggerfall Castle, Wayrest and Sentinel. While you can enter those locations, there is an anomaly that causes strange visuals and will most likely crash DaggerXL. I’ve tried several other dungeons and have not run into this problem. This will be one of the issues I fix for the proper 0.20 build.

There are other things to be aware of. All random monsters are still bears, this will be fixed in version 0.20 as previously stated. Not all features work, such as Teleports (you can still see the markers since they are not currently handled). Without an automap it is very easy to get lost so you can hit F10 at any time to return to the entrance (this only works if you enter from the outside, also note that there is a long delay sometimes – just wait it out). Remember that I just got this feature working a few minutes ago, so dungeons outside of Privateer’s Hold may have issues or errors. But the system is in place and working, so hard part is done – I’ll fix the issues over time. 🙂

Now for some pictures:

As usual, you can download it from the Downloads Page.

As I’m working toward Version 0.20, I decided to release an interim build with about half the features implemented.

I’m doing this for multiple reasons:

  • To get a new build of DaggerXL out sooner.
  • To get the save system upgrade out there sooner, since it will invalidate old saves again. However this should be the last time that happens – at least for a long time.
  • Resting is one of the features that people have been dying to get and this build has it.

So what is new to version 0.195?

The first thing is the upgraded save system that I talked about last time. The environment data is now serialized – at least for dungeons – so that the current state of the immediate world is now saved. This includes animation states, AI states, loot data (what loot is out there, what has been collected), dead bodies and their loot, object states – including switch states and movement/animation states, door states and more. In addition the player’s orientation is now saved as well as whether they have a weapon sheathed or not. Finally not only stats are saved but the starting stats used for leveling, the current usage tallies for each stat, the time since the last skill increase and all the data needed for skill advancement and leveling.

Next resting has been partially implemented. “Rest Until Healed” works completely (finally!), including skill advancement checks (see below). “Rest for a while” and “Loiter” are not implemented yet, they will be in the next build. “Rest for a while” just does the same thing as “Rest Until Healed” and Loiter doesn’t do anything. Also random encounters are missing, they will be in version 0.20.

Finally skill advancement has been implemented. It is possible to raise implemented skills just as you would in Daggerfall, and this happens during resting – assuming enough time has elapsed since the last skill increase. The difficulty of increasing your skill is based on how high it currently is as well as your classes’ advancement multiplier. Skill uses are added to skills whenever a skill check is performed, whether the skill use succeeds or not. Continous effect skills – such as running – are checked at regular intervals, whereas other skills are only checked on use. As skills are implemented, the advancement phase will work automatically with no other changes to the advancement, rest or save systems.

Right now not all skills are implemented, though many are including: Running, Climbing, Dodging, Critical Strike and various weapon skills.


Next up for Version 0.20:

  • Leveling (right now skills go up, but the character can’t advance in levels). This is simply adding the UI – everything else is done.
  • “Rest for a While” and “Loitering”
  • Loot tables and Helmets.
  • Random Encounters.
  • Item interaction on the character “doll.”

You can download the latest version on the Downloads Page.

I’m working toward build 0.20 as outlined in my previous post, so I’ll outline the first element that I’m working on that act as a sort of “backbone” for other features.

Previously the Save Game format only saved data about the player him/her-self and nothing about the environment (other than things like location, inside or outside). In order to make exploring dungeons worth-while and to support skill and level progression the save format is being upgraded again.

The first element of the upgrade is to serialize the current state of the world. Basically the current location and state of enemies, objects, sprites, doors and so on have to be saved. Also the state of enemies has to be saved such as chasing, attacking, idling; dead bodies and the loot left; treasure piles (including new piles placed by players); the animation state of objects and more. At first, only the Dungeon and/or nearby world cells will be serialized – like in Daggerfall – but later more information will be stored permanently such as treasure piles and container contents. That will allow you to put treasure in a chest in a house and then retrieve it later, even after traveling to another Province and back.

The second element is to store information about skill usage. This includes the skill starting values that affect leveling, the current “tally” for each skill (this tracks skill uses that count toward advancement) and the time since the last skill advancement. The other necessary information is already stored in the save files. Obviously this data isn’t useful until resting is implemented, but that is the next thing on the list to tackle after the save game system has been upgraded.

My crunch time is over at the end of this week. This means that regular progress will resume on DaggerXL and DarkXL next week – thanks for hanging out during these periods of little activity.

The next build of DaggerXL will feature enhancements to the Dungeon gameplay, including:

  • Proper loot tables.
  • Helmets (previously missing due to the way the compositing works).
  • Proper resting.
  • Skill advancement and leveling.
  • Additional work on implementing and refining skill usage.
  • Proper random encounters.
  • Item interaction on the character “doll” in the inventory screen.

The following build will allow players to enter and explore all dungeons, including the capital castles/palaces.

Once that works, I will move on to the spell and projectile systems, rounding out the dungeon experience.

And of course once the dungeon experience is complete (or at least enough to be playable) I will move on to the surface/town elements such as quests, NPCs, guilds, shops and so on. Before this can occur I will replace the existing UI system with the scripted UI and gameflow, like I’m putting into DarkXL. This will allow the UI heavy gameplay elements to be dealt with easier (in-game script reloading FTW…) as well as making DaggerXL that much more moddable in the future.


Thanks for your patience. 🙂