Developer Preview Now Available

The DFTFU Developer Preview 1.2.11 is now available. This includes all the terrain code shown recently.

I have decided to make a Developer Preview build available after major milestones, but before code is quite ready for general release. Please keep in mind that preview features may change substantially before release.

I am also preparing a playable world demo for everyone else. This should be available today or tomorrow.

Release 1.1 and City Basics Part Two

Daggerfall Tools for Unity 1.1 is now available for Download. This version introduces PlayerGPS and WorldTime components, along with several bug fixes and other enhancements.

There is also a new tutorial following on from City Basics, called City Basics Part Two. You will find this both inside the latest distribution and on the Tutorials & Docs page. This tutorial will help you create a fully automated day/night/season cycle using world time and a variable timescale.

I hope you enjoy this release and new tutorial. As usual, please let me know if you find any bugs or have trouble following the documentation.

Full 1.1 release notes are below.

  • Tutorials are now included with zip distribution.
  • Fixed inconsistent origins between blocks and world space. Imported blocks and locations are now all laid out in a positive X-Z direction with origin at south-west corner.
  • Added WorldTime and PlayerGPS components to core DaggerfallUnity singleton. These manage flow of time and player’s virtual position in world.
  • Added Time & Space options to DaggerfallUnity options. These options automate many time-based changes such as day/night cycles and seasonal changes.
  • Fixed RMB and RMB static assignments not working as they should.
  • Locations now store additional metadata about their world position.
  • Static door enumeration is now performed by API when initially processing model data. Door finding now has minimal overhead compared to previous post-layout method. Doors are also cached along with model data, so zero impact on future calls to GetModelData().
  • Removed individual door triggers for buildings and interiors. Doors are now tracked by a single component attached to building mesh. It stores an array of door positions evaluated used only when user clicks on building.
  • Added support for animated texture on imported Daggerfall models.
  • Added a SunlightManager to control intensity of sunlight rigs (including any number of secondary lights) and simulate time of day using a single key light for the sun.
  • Improved player position and facing when exiting buildings. The player is now positioned above ground using a ray hit and facing is determined by door normal.

City Tutorial and 1.0.2 Update

Daggerfall Tools for Unity 1.0.2 is now available. This version completely overhauls the DaggerfallSky component. Skies are now more flexible, working in both Forward and Deferred paths. Skies will thread-load data and allow for dynamic changes at runtime.

The City Basics tutorial is also available from the Tutorials menu page. Please update to 1.0.2 before running this tutorial.

One more quick item. Below is a preview of the the world time feature scheduled for release 1.1 in a few weeks. I will post more about this soon.

Dungeon Tutorial and 1.0.1 Update

Daggerfall Tools for Unity 1.0.1 is now available for download. This version contains minor bug fixes and improvements to the weapon system.

The first tutorial is now also available. This introductory tutorial steps you through creating a new scene, importing a dungeon, setting up weapons, and more. You will find this and all future tutorials on the Tutorials menu page.

Please be sure to update to 1.0.1 before following the tutorial as it fixes a bug you will encounter otherwise.

Let me know what you think of the tutorial, especially if any parts are too hard to follow. I want the “Basics” series to be generally accessible and will revise if necessary to improve information presented.

Daggerfall Tools for Unity 1.0

Daggerfall Tools for Unity 1.0 is now available for general download. Click here for download page. Change notes are below.

I’ve been working on this like a man possessed the last week or so. I definitely need a short break to clear my head and get some perspective on what comes next. I’ll talk more about this when I can.

I hope you have fun with Daggerfall Tools for Unity! If you have any feedback, bug reports, or feature requests, please feel free to contact me.

v1.0.0

  • Exterior door triggers are now sized appropriately to doors.
  • Added support for exterior dungeon doors.
  • Added enum for static door types.
  • Added DaggerfallInterior component to layout interiors.
  • Hinged action doors are now loaded inside building interiors and dungeons. They can be locked, magically held, bashed open, opened by monsters, and play appropriate sounds.
  • Added example class to transition in and out of interiors.
  • Player controller can click into and out of building interiors using example script.
  • Player controller now has moving platform support and ceiling hit detection.
  • Fixed broken sky hemisphere swap, refined sky scrolling.
  • Sky component can now be attached anywhere, such as to an exterior parent object. It will search for MainCamera if one is not specified.
  • Added default unlit billboard shader to MaterialReader. This will be used by light billboards.
  • Added default unlit texture material to MaterialReader. This will be used by fireplaces and similar textures.
  • Added dungeon action records and examples of activation by player.
  • Add iTween to __ExternalAssets namespace for animating hinged doors and action records. iTween was chosen as it will be familiar to the most Unity developers.
  • Removed QuickSize() and QuickScale() from API as they were incompatible with standalone builds.
  • Added size and scale properties to new method GetCachedMaterial(). The cached method slightly reduces scene building time and is compatible with standalone builds.
  • Palette files can now be loaded in standalone builds.
  • Bug fixes to standalone build startup and loading from Resources.
  • Added exception handling when loading invalid enemy indices.
  • Added exception handling for missing Run and Jump inputs in player controller prefab.
  • Changed Scripts/Other folder to Scripts/Demo. Contents are now in DaggerfallWorkshop.Demo namespace. These classes are not part of core tools but show examples of specific tasks such as loading interiors.
  • Added example weapon loading with variable tinting based on metal type.
  • Added example attack manager for gesture-based attacks.
  • Fixed API bug when getting DFSize for animated weapon records.
  • Enemy mobiles now read in “not hostile” flag where set in game data, and will not attack unless provoked. Examples are guard in castles and liches/vampire the King of Worms court.
  • Added DaggerfallAudioSource component for dynamically loading and playing sound effects from DAGGER.SND.
  • Created sound enumeration to name and group effects.
  • Linked sound definitions to enemy mobiles and action triggers.
  • Added ambient effect player.
  • New flags to import sounds automatically.
  • Added flag to MaterialReader controlling mipmap creation.
  • Lots of fixes and extensions to Demo scripts.

Tools for Unity – Release 2

Daggerfall Tools for Unity Release 2 is now available. This version adds many new features, bug fixes, and small improvements over the initial version. The PDF Manual is also available.

Starting from this version, I no longer bundle Daggerfall Imaging and Daggerfall Modelling with the distribution. These tools are Windows-only and greatly increased the ZIP size. If anyone needs these tools, they’re available for download here as usual.

Patch notes for new version are below.

  • Added DaggerfallBillboardEditor script for additional billboard details.
  • Added enumerations for enemy mobile types in dungeons (e.g. GiantBat, SkeletalWarrior).
  • Added DungeonType enumeration to DFRegion (e.g. Crypt, Orc Stronghold, Vampire Haunt, etc.). Dungeon type is also displayed in Inspector when a dungeon is selected.
  • Added random encounter tables based on dungeon type.
  • Added animation support for atlased materials.
  • Added multi-facing enemy mobile billboard class.
  • Added enemy definitions for known enemy types.
  • Added animation groups for mobile units.
  • Added light import option for cities and dungeons.
  • Added enemy import options for dungeons.
  • Fixed minor RMB layout bug for non-combined city blocks.
  • Fixed minor billboard layout bug for city blocks.
  • Fixed minor ground plane tiling bug.
  • Fixed dungeon layout bug where RDB block positions on Z axis were reversed.
  • Fixed serialization bugs where native data is concerned. Unity does not like to serialize unsigned values. Opted to create Unity-compatible structures where needed rather than modify Daggerfall-native API structures. Removed [Serializable] flag from any API structs.
  • Moved MaterialReader and MeshReader to MonoBehaviour components on DaggerfallUnity singleton.
  • Moved material and mesh import options to their respective reader component.
  • Moved all mesh loading to MeshReader and removed ModelFile class. This eliminated some double-handling of data and slightly increased import times.
  • Added the ability to set preferred shader names on MaterialReader component. These are located using Shader.Find() during import.
  • Added the ability to set window modifier colours and brightness on MaterialReader
    component. This includes a custom window style option.
  • When loading Daggerfall files from API with the FileUsage.UseMemory option, FileProxy class will now look for a .bytes file of the same name in your Unity Resources folder (e.g. “arch3d.bsa.bytes”). This helps to create standalone builds (such as web builds) where the Arena2 folder is not required, or only partial Arena2 data is needed.
  • Limited full validation checks in DaggerfallUnity to editor mode. This allows builds with partial or no Arena2 data to launch correctly.
  • MeshReader, MaterialReader, and ContentLoader scripts are now set to FileUsage.UseMemory to support Resources file support as above.