Interiors Web Demo

I’ve uploaded a new web demo showing interior/exterior transitions of town buildings.

Wayrest Interiors
Controls: WSAD to move, SPACE to jump, SHIFT to toggle run, LEFTMOUSECLICK to activate doors, ESC to uncapture mouse.

I’m far from done with interiors, but the above demo is interesting in that all interiors are loaded procedurally. All interior models, layout data, and materials are converted in realtime from native binary data, right inside your web browser.

Essentially, Daggerfall’s world is being constructed from original binary data on another platform without emulation. The same could be done for an iOS or Android build, or any other platform supported by Unity. The total compressed build size is only 17MB.

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.

Standalone Builds

One of the new features coming in Daggerfall Tools for Unity Release 2 is support for standalone builds where the Arena2 folder is not generally available. For example, the web builds I showed earlier would be considered standalone.

The toolset makes this possible using two complementary approaches. The first is just normal serialization of scene data. This is automatic and doesn’t require any work on your part. All of the materials and 3D models in your scene are just saved as you would expect, along with additional metadata about those resources. For example, every 3D mesh saves a list of default texture keys used to rebuild textures for climate swaps. You generally don’t need to think about this, it just works.

The second method is new to Release 2. When loading a file from Arena2 with FileUsage.UseMemory enabled (now the default), DaggerfallUnity will first try to use Resources.Load() to find that file from your Resources folder. This means you can add, for example, ARCH3D.BSA, BLOCKS.BSA, MAPS.BSA, and TEXTURE files to your Resources folder and load content in at runtime without the end user requiring a Daggerfall installation for your build. All you need to do is append “.bytes” to the end of any Arena2 files added to your Resources folder so Unity can load them as proper binary files. This works for every Arena2 file loaded through the API with FileUsage.UseMemory specified.

As an example of this, check out the new web player demo below. This loads a Wayrest city scene using normal serialized data for all of the models and materials. The sky however is created at runtime from SKY13.DAT in Resources. The entire build is 3.7MB (not counting the web player itself).

Wayrest Snow Scene (Point Filtering)
Controls: WSAD to move, SPACE to jump, SHIFT to toggle run, and ESC to uncapture mouse.

This freedom creates exciting opportunities for building Daggerfall projects directly for web or mobile platforms. You’re no longer limited by where Daggerfall can be installed. It’s all just binary data that Unity can use anywhere. I hope this freedom will inspire others to create amazing Daggerfall projects in the future.

Web Demo Test

I’ve uploaded a few simple Unity Web Player demos for my own test purposes. If anyone is interested, you can access them from the URLs below.

Controls are WSAD to move, mouse to look, Shift to toggle run, Space to jump, ESC to uncapture mouse.

If you have trouble launching the web player in Internet Explorer, try Chrome and see if that works.

Exterior (Daggerfall City)

Exterior (Daggerfall City, point filtering)

Dungeon (Privateer’s Hold)

This is a work-in-progress build, so don’t expect too much awesome just yet. These demos are mainly interesting in that I put them both together from an empty scene and uploaded in less than 10 minutes.

One more thing. I’ve disabled doors in the Privateer’s Hold test, as interacting with moving objects is still being written. You can get to the exit room without riding the throne up. See if you can remember how. 😉