Live Builds Now Available

live-builds-header

Get Up To Date

Live builds based on latest code are now available to testers, as described in this blog post.

Check the forum topic State of 0.3 for information on 0.3 at time of writing.

 

Get The Latest Test Build

You can download latest builds from the all new Live Builds page.

 

Provide Feedback

Use the Bug Reports forum to log bugs. Please read the Bug Report Guidelines topic first.

 

Stable Builds

The latest stable build is still version 0.2.9 from 09-Apr-16. This version will be updated to 0.3.x in a few weeks once the majority of bugs have been found and eliminated.

Quick Update – 1 August

Short Delay

The 0.3 test cycle has been delayed slightly due to changing from Unity 5.3 to Unity 5.4 and less than typical free time on my end. Things are back on track for now and I estimate first 0.3 test build should be ready in approximately 7-10 days. I will update you in the case of any further delays.

 

More Information On Test Builds

I’ve had a few queries via email and Twitter about how test builds will work from 0.3. I’ll try to clarify this now. If you need more details please don’t hesitate to ask.

The short answer is that not much is really changing from your side. If you’ve tested with 0.2 or earlier the process for you is basically the same. The key difference is how builds are generated and how frequently I’m able to put a new build into your hands.

In 0.2 and earlier, I had to manually create a build for each platform, package to a zip file, upload to my host, then configure new download in WordPress and update related pages. This isn’t difficult, but it can be time consuming when rapidly turning over bugs. In many cases a bug could be fixed much faster than I could work through the manual build process. So I tended not to generate new builds until a larger block of work was completed. This ultimately means you had to wait weeks or a even a few months to see fixes.

 

Automatic Cloud Builds

Enter Unity Cloud Build. This service allows me to setup an automated build process for Daggerfall Unity’s target platforms. Cloud build works by periodically checking the git repository for changes and automatically spits out a complete new build for each platform. The download is also hosted by the cloud build servers. All I have to do is share the build and give you a download link. Here’s how it looks from the back-end:

CloudBuild-BackEnd

 

One a build is ready, I can either download a zip to test for myself, or share out a link to the public. The public link is what I’ll give to you, which takes you to a page like below. This is your front-end to the cloud build process.

CloudBuild-FrontEnd

 

To make this process even easier for you, I will setup a permalink page from dfworkshop.net that always points to the latest shared builds. I plan to update this page frequently. If the code on git changes, you’ll have a new test build not long afterwards. More information for this will be available with 0.3.

 

Rolling Builds

This is where things get interesting. Instead of waiting months for next test cycle, testers will now have a direct pipeline to code updates as they are generated. If you’ve ever played an Early Access game on Steam that gives you an “experimental/unstable” option for rapid updates, my rolling test builds are fundamentally the same concept. You will now get to play with new code as it’s being developed.

The main downside to this style of rolling build is that you will be playing with live code. Usually things will work as expected, but sometimes things that were working will break. For example, quicksave was briefly broken while I was overhauling the save interface a few weeks back.

The key is for testers to understand what is a bug and what might just be broken because it’s in the middle of changes.

 

Watching Git

To this end, I highly recommend testers keep an eye on the commits page on git. These commits tell a story of what is being worked on and what has been recently fixed. If you see that I’m working on a big system (like saves or looting), then you can bet something will be broken in that system until work is complete. I try to keep my commits exclusive to a specific update and provide good descriptions. I’ll continue to work on improving the quality of my checkins as time goes on.

 

Providing Feedback

As before, the Daggerfall Workshop Forums are the correct place to log bugs or ask questions about a feature. Specifically the Issues & Support forum. If you aren’t sure if a feature has been implemented yet (e.g. quests), please ask before logging the absence of this feature as a bug. Daggerfall Unity is a live work in progress and some features are much further down the pipeline than others.

At every major milestone, I will post some information on things that need the most attention from testers. For example, the loot and inventory system was the major component of 0.2.

 

Stable Builds

If you don’t feel up to watching git, downloading test builds, testing features, and providing feedback – that’s OK! I will occasionally release a “stable build” at major milestones where everything is more or less running as expected. Not everyone has the time or interest to be a full-on tester, and that’s all good. Just grab the stable builds when they’re available and let people know about Daggerfall Unity.

The first 0.3 stable build will be available a couple of weeks after the first test build. This gives me a chance to nail any show-stopping bugs before putting the stable build into your hands. I’ll post an update on this when available.

 

Conclusion

I hope that clarifies the new build process more thoroughly. In summary:

  • You’ll get new builds almost as quickly as code changes. The latest build might be awesome or it might not even run.
  • I will provide a permalink page on dfworkshop.net that always points to latest several builds.
  • Keep an eye on git commits to see what’s being worked on.
  • Post feedback, bug reports, and questions to the Issues & Support forum.

Thank you for reading. I look forward to you joining me for the next big step in Daggerfall Unity’s development process.

 

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

New Options For Downloading Builds

The 0.3 release should be wrapped up in the next week or so, provided nothing comes up in testing to cause delays. Along with 0.3 there will be more options for downloading builds to better cater to various groups in the community. Read on to see what’s coming up.

 

 

get-play

 

If you just want to take a quick look at Daggerfall Unity, and avoid the hassles of a test setup, then 0.3 might encourage you to try it out.

  • New standalone builds will be made available for each platform (Windows/Mac/Linux).
  • Standalone builds are self contained and do not require you to provide Daggerfall game files.
  • Standalone builds will be updated less frequently but will generally be more stable.

 

 

get-test

 

If you’re an existing tester, or would like to help catch bugs, then I have some good news.

  • Test builds are now automated using Unity Cloud build and will be updated approximately weekly, or daily during heavy development.
  • However, test builds are based on live code and will not be as stable as standalone builds.
  • Test builds are cut-down for smallest download and will require you to provide your own Daggerfall game files (just like previous test builds).

 

 

get-mod

 

The biggest feature in 0.3 is Lypyl’s mod system, which he introduced a few posts back. The mod system allows you create asset bundles containing code, textures, sound, etc. that can change how Daggerfall Unity works.

  • Modders will need a copy of Unity3D 5.3 Personal/Plus/Pro and a copy of game files.
  • Modders are encouraged to clone from git (tutorial coming soon), but just downloading a zip of current project should be adequate.
  • New forum areas will be opened to help modders find each other and collaborate on projects.

 

 

get-contribute

 

If you would like to contribute to Daggerfall Unity, and have a good understanding of both Daggerfall’s inner workings and Unity3D, it will become easier to contribute from 0.3.

  • Full Daggerfall Unity project is now on git. Contributors should create their own fork of project.
  • Contributors will need a copy of Unity3D 5.3 Personal/Plus/Pro and a copy of game files.
  • Contributors will also get new forum areas for discussion.
  • A Trello page is in the works to help contributors find tasks they may be able to help with.

 

That all for now. Hopefully 0.3 will represent a new stage in the development of Daggerfall Unity, with even more options for gamers, testers, modders, and contributors.

 

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

Upcoming Release 0.3

The 0.3 point release is coming together and should be available sometime late in July. Here’s a quick summary of upcoming features.

 

Modding Support

Lypyl’s mod framework is undoubtedly the star of 0.3. You can read his post about it and check out a few work-in-progress tutorials on the forums. While still early days, I couldn’t be happier with this feature and the potential it brings to Daggerfall Unity.

  • Mods can be created using Unity Personal (free version) and Daggerfall Tools for Unity.
  • Completed mods are packaged to a standalone .dfmod file (asset bundle) for distribution.
  • Integrated mod loader at startup with ability to change load order.
  • Fully integrated run-time C# compiler.
  • Total access to inner workings of Daggerfall Unity.
  • Catch events, display UI windows, spawn world objects, drive game logic.

The mod system is already powerful enough to handle the current round of mods, which will eventually be migrated into .dfmod format. As mod creators grow in experience and the underlying code is expanded to provide more options almost anything will be possible down the road.

 

Treasure & Loot

Random treasure piles and corpse markers will now be lootable, providing gold and new items to you during testing.

  • Player will now find gold and items in random treasure piles and on the bodies of slain foes.
  • Generated items will not have magical powers until the spells & effects features are live.
  • It will be possible to drop items to the ground, but like Daggerfall dropped items will disappear when you leave the area. Non-volatile player storage will be implemented much later as part of housing.

As shops are not implemented yet, I’m going to ignore weight limits on the player and the wagon so you can carry as much as you want. Proper encumbrance tracking will be added in the future after shops come online.

 

New UI Windows

A few UI windows are in the works for 0.3, although not all of them will be ready for initial release. They will come online over the 0.3 cycle.

  • Control mapping UI.
  • Rest UI.
  • Save/Load UI.

As part of updating save/load UI, the way games are saved will be expanded during 0.3 to accommodate the growing amount of data needed to support saving game state.

 

Standalone Builds

From 0.3, I’m going to provide a standalone build of Daggerfall Unity with game files bundled. This will be in addition to the smaller builds where you must provide your own game files. This change is to help users who just wish to quickly try out Daggerfall Unity or have trouble installing a compatible version for any reason.

  • Standalone builds will be substantially larger and updated less often than the trimmed-down test builds.
  • Test builds will be smaller and require you to provide your own set of compatible game files. This is still the best download for dedicated testers.

 

Bug Fixes & Small Improvements

Last but by no means least will be the usual round of small fixes and improvements to features already added. There’s also a bit going on behind the scenes to support future systems like spells & effects, NPCs, factions, shops, and questing. These additions will be slowly rolled out as more features come online post 0.3.

For more frequent micro updates and news, follow me on Twitter @gav_clayton.

Daggerfall Unity 0.2 Video Roundup

Below are a couple of let’s-play videos based on the 0.2 build of Daggerfall Unity. While I tweeted these a while back, I somehow forgot to post them to the main development blog for everyone else to enjoy.

A big thanks to the creators for taking the time to make these videos. I learned by lot watching you play, and your enthusiasm helps keep me motivated. If I’ve missed any other current videos or similar creator content, please contact me and I would be happy to add it to this post.

First video is from ZetaPlays.

 

Next is from Lingering Trees.

 

And while not a video, the following storybook-styled journey from redditor SpotNL was too good not to link.

The Elder Strolls: Daggerfall (Unity) from ElderScrolls

Modding Support

Interkarma has asked me to write a quick overview about the upcoming modding feature that will be in version 0.3 that I’ve been working on.

Currently mods need to be built into a Daggerfall Unity project to work, which is an obvious limitation.  Interkarma has gone out of his way to support a bunch of different mods, even including them into Daggerfall Unity releases, but this takes up a lot of his time and has always been a temporary solution.

The new modding system takes advantage of Unity’s asset bundles, and allows mod creators to export the assets that make up their mods (textures, models, c# scripts, prefabs and so on) from Unity to a single file which is then loaded at runtime.

Exporting to a mod file is easy and done with a simple window inside the Unity editor:

editorwindow

 

The mod files are detected and loaded during the Startup Scene:

modlist

This means that going forward, modders will no longer have to rely on their mods being part of Daggerfall Unity to work.  Modders will be able to create, share, and release updates for their mods all on their own.  And using mods will require little more than the player placing the mod file in a directory.

We’ll be providing more details on how it works, including examples and tutorials in the near future.  Stay tuned!

Faction Support

Just a quick post today. I have implemented the faction back-end for Daggerfall Unity, which is a key pillar of quests and NPC dialog. Here’s the data shown as a flat list in the Unity editor. All parent-child relationships are actually in place, list is just drawn flat for debugging.

Factions

Starting faction data is parsed from FACTION.TXT and your save games are supported too! Importing a classic save will now also import your standing with all factions.

While there isn’t much happening with factions yet in Daggerfall Unity, it’s impossible to implement many gameplay systems without them. I look forward to doing much more with this data in a future build.

Building Names

One of Daggerfall’s long-running puzzles is how to generate the correct building name for any given building in a location. Daggerfall’s binary data exposes this information only as a seed value with no obvious correlation to the final name. From today, I’m happy to say this has been solved and I will be able to generate proper building names in the future. This article is a summary of the technical journey, minus all the dead ends and frustration.

The seed value used to generate building names has been known about for some time. This can be found in the BuildingData structure (link to UESP). The first step along the way was to generate some known values by changing a known seed value in MAPS.BSA. I started at the location Ashfield Hall in the Daggerfall province, which has a single tavern and some residences. Taverns are a great place to start as they have a very obvious PartA + PartB structure. For example The Bat And Skull. In Ashfield Hall, our single tavern is the The Howling Stag with a name seed value of 27748.

The first thing I did was change the name seed value for The Howling Stag in MAPS.BSA then start up Daggerfall to see how the name changes. Here’s a small sample of names generated from seeds 0-3. Keep this list in mind as we’ll return to it later.

0 = The Dancing Chasm
1 = The Knave and Scorpian
2 = The Pig and Ogre
3 = The Thirsty Fairy

Now I have somewhere to begin. I know the building is a tavern and have a sample group of seeds that result in specific names. The next trick is to work out how Daggerfall derives these names from the seed value.

I open up FALL.EXE in a hex viewer and search through for strings like “The Dancing” and “Chasm”. These strings are easy enough to locate, but these are just resources packed into the executable. What I need is the actual PartA and PartB tables Daggerfall is selecting from at runtime.

To get this information, I first have to use the DOSBox debugger to dump out memory from Daggerfall while it’s running. I can then search not just for strings, but for memory offsets pointing to those strings. I write a small bit of code to do the searches for me, and it doesn’t take long to find the correct offset tables for Part A and Part B of tavern names. Just think of this as a pair of arrays. In this case, both arrays are 36 elements long. Here they are as captured from the spreadsheet I dumped them out to.

TavernNamePartsAB

So how do we go from a seed of 0 to The Dancing Chasm? This is where most of the difficulty started. It was obvious Daggerfall used a random number generator to pick both parts, but the trick was to find the correct random number generator used by Daggerfall’s C compiler circa 1994-1996. Fortunately, I also needed this for correct texture table generation (still an open problem at time of writing) and had previously researched the correct random generator, known as a linear congruential generator, specific to Daggerfall. Here it is for completeness.

static ulong next;
public static void srand(int seed)
{
    next = (uint)seed;
}
public static uint rand()
{
    next = next * 1103515245 + 12345;
    return ((uint)((next >> 16) & 0x7FFF));
}

There are two methods here, one to set the seed (srand) and another to generate the next random number from that seed (rand). This is pretty much the standard ANSI LCG but specific to Daggerfall’s needs. Implementing this manually ensures that critical random number generation will always work just like Daggerfall, regardless of platform.

Now that I have the right random number generator, let’s feed it our test seeds from earlier and see what comes out. Starting with seed=0 and generating two numbers (indices into Part A and Part B name tables above), I get the following results.

PartA = 0
PartB = 12

First obvious thing is the spreadsheet starts from 1, not from 0. Just need to +1 each number to match the tables above (although zero-based arrays will be used in actual code). Matching these numbers to the above name table we get: Chasm The Dancing. OK, so Daggerfall obviously generates PartB first then PartA. Let’s try that again with the +1 and order swapped.

Seed = 0
  PartA = 13 (The Dancing)
  PartB = 1  (Chasm)
  Result: The Dancing Chasm

Using our handy table we can match row 13 with row 1 and we get The Dancing Chasm. Good! Let’s run some more tests and prove the concept.

Seed = 1
  PartA = 35 (The Knave and)
  PartB = 27 (Scorpion)
  Result: The Knave and Scorpion

Seed = 2
  PartA = 30 (The Pig and)
  PartB = 9  (Ogre)
  Result: The Pig and Ogre

Seed = 3
  PartA = 16 (The Thirsty)
  PartB = 36 (Fairy)
  Result: The Thirsty Fairy

So far, so good! Building names are output just like Daggerfall given the same inputs. Let’s try the original, unmodified seed value of 27748 which should give us The Howling Stag.

Seed = 27748
  PartA = 21 (The Howling)
  PartB = 33 (Stag)
  Result: The Howling Stag

And there we have it! Building name generation from initial seed value resulting in a string exactly matching Daggerfall.

From here, I still need to extract hard-coded name tables for other building types like armorers and weapon-smiths. This isn’t hard though, I just need to find the tables using the same methods as taverns. I also need to assign full building data from MAPS.BSA to the correct models in Unity scene and wire up API methods to query this data when inspecting or entering a building. One challenge at a time though.

For regular small updates on Daggerfall Unity, I can be found on Twitter @gav_clayton.

Daggerfall Unity 0.2.9 (Updated)

I’ve released a small patch to version 0.2.9. Latest download is on the standalone download page.

Patch notes for recent versions below:

0.2.7
  • Reverted minor change to terrain tilemap shader. This might fix black ground issue on older DX9 systems.
  • Implemented floating origin for Y axis to correct flickering shadows at high elevations. This still requires full testing.
  • Items imported from classic saves will have dye synced to material type at import time.
  • Settings INI now saves floats with invariant culture.
  • Update to Uncanny_Valley’s grass mod.
  • Added restart button to options UI.
  • Nystul fixed white interior textures when reflections mod enabled. Also fixes stalled fireplace animation.
  • Arrows should now always display correct inventory icon.
  • Can no longer equip arrows to hands.
  • Disabled bows until archery is implemented.
  • Can now open inventory from character window.
  • Weapon manager now resets sheathe state and equipped hand on new game / load.
0.2.8
  • Fixed floating origin issue that would start player high in the air when exiting a building at higher altitudes.
  • Nystul fix for resetting dungeon map on new game.
0.2.9
  • Disabled floating origin Y implementation for now. This means lighting and shadow issues at high elevations will return, particularly when using distant enhanced mod (which has a much higher vertical scale than default terrain).
  • Camera now clears background when inside a dungeon allowing you better see within the void.
  • Lypyl: Fix for white film on travel map. New console commands to display FPS and trigger action objects.
  • Nystul: Automap camera settings now preserved when opening automap.

For regular small updates on Daggerfall Unity, I can be found on Twitter @gav_clayton.

Daggerfall Unity 0.2 Release

This post is a mirror of the new standalone download page. Please refer to this page for the latest version.

Daggerfall Unity 0.2

Daggerfall Unity 0.2 is now available for general download. Key features of this build are:

  • Nearly complete item back-end. Monster loot and treasure piles coming soon.
  • Inventory UI.
  • Setup helper UI.
  • Persistent data for settings, keybinds, and saves.
  • Hundreds of small bug fixes and enhancements.
  • Travel map (Lypyl).
  • Almost complete support of dungeon actions (Lypyl).
  • Updates to enhanced sky (Lypyl)
  • Dungeon and interior auto-map (Nystul).
  • Realtime reflections (Nystul).
  • Animated grass and birds (Uncanny_Valley).

 

Download

Current version: 0.2.9 (9 April 2016)

Windows
Download Daggerfall Unity Test (Windows)
Linux
Download Daggerfall Unity Test (Linux)
Mac
Download Daggerfall Unity Test (Mac)

Note: Mac build is experimental as I don’t own a Mac to test on. Please let me know how you go with it on forums (see below).

 

Game Files

For convenience, here is a universal archive of compatible Daggerfall game files. This is primarily for platforms where installing Daggerfall is more difficult (e.g. Linux) but can be used on any supported desktop platform.

Note: This download contains game data only for Daggerfall Unity. It is not a standalone version of Daggerfall.

DaggerfallGameFiles.zip (Google Drive link)

 

Controls

General

  • Mouse to look.
  • W, S, A, D to move.
  • C to toggle crouch.
  • SHIFT (hold) to run.
  • SPACE to jump.
  • LEFT-CLICK mouse to open doors, enter dungeons, operate switches, etc.
  • ESC to pause game or go back to previous window.
  • F5 to open Character Sheet.
  • F6 to open inventory.
  • M to open interior automap (indoors only).
  • V to open travel map (outdoors only).
  • ` (backquote) to open console. Enter help to list console commands.

Weapons

  • Z to unsheathe / sheathe weapon.
  • H to switch equipped hands.
  • RIGHT-CLICK and drag mouse to swing weapon.

Save/Load

  • F9 to quick-save.
  • F12 to quick-load.

Note: Keys can be rebound by editing keybinds.txt. See manual for more details. A full key-binding UI will be implemented in a future release.

 

Manual

A PDF manual is included with the download, but you can also download a standalone copy.

 

Feedback

If you would like to offer feedback and bug reports, please use this thread on the forums or contact me directly.

First Look At Setup UI

The first time you run Daggerfall Unity 0.2 and later, a simple setup wizard helps you configure the game. This replaces the Unity resolution dialog, and for many users will entirely remove the need to edit an INI file to get up and running.

As discussed in my previous post the INI file and KeyBinds files are now stored in a persistent data path. This means you only need to setup Daggerfall Unity once and future updates will continue to use your custom settings. This should make things more convenient when downloading incremental releases in future.

For regular micro-updates on Daggerfall Unity, I can be found on Twitter @gav_clayton.

Setup Enhancements In 0.2

There are a few areas where setting up Daggerfall Unity could be a lot easier:

  • Obtaining Daggerfall’s game files. There is no easy way of obtaining Daggerfall’s game files for non-Windows users. You basically need to install the game on a Windows PC then copy game files to your platform of choice.
  • Using the right game files. Most setup issues boil down to the game files being a CD-based version (movies not copied into arena2), not patched to .213, or game files have been modified over the years and don’t work as expected.
  • Settings not persistent. Every time you download a new version of Daggerfall Unity, you need to configure your settings.ini and keybinds all over again. There is no way of pushing out new settings without giving you whole new files each time with all default values.
  • Unclear when something goes wrong. If you start the game without setting your Daggerfall path, or if files are missing, you just see an unhelpful black screen or an obscure message.

Starting from 0.2, I will try to address the above problems with the following changes:

  • Providing game files download. Starting from Daggerfall Unity 0.2, I will provide a download archive for a known-good set of game files. This archive can be unzipped and used on Windows/Linux/Mac. You can still point to your own installation as before, so this download is completely optional, but it will be the recommended source of Daggerfall’s game files moving forwards. As Daggerfall’s game files are static, you will generally only need to download this archive once and it can be used for all future versions of Daggerfall Unity.
  • Settings will be persistent. The settings.ini and keybinds files are now deployed to Application.persistentDataPath, so you will keep your settings whenever upgrading Daggerfall Unity. New settings will be automatically synced without changing your other settings.
  • Setup UI. The new Daggerfall Unity game setup UI will be a friendly starting point guiding you through first-time configuration. If there are problems with your game files, the setup UI will try to point you in the right direction. This will evolve over time based on user feedback.
  • Options UI. Coming later in 0.2 cycle will be a Daggerfall Unity options UI. Most settings can be configured without opening settings.ini or keybinds files at all.

More news on the 0.2 release will be posted soon.