July 2009

A lot of progress has been made when it comes to rendering the exterior world of Daggerfall.

DaggerXL now supports the seamless world map. The way it works is that the game tracks which map cell the player is in (a map cell is the same size as a City block, so for example Daggerfall is 8×8 cells) and the player’s coordinates within that cell. DaggerXL reads the location data from disk and stores 2 different hashes which are keyed from the map tile coordinates, one stores the location data – the location name, number of blocks, name of the blocks, etc. and then one stores the loaded block data itself (which I call “tiles”). As the player moves and changes tiles, the relative coordinates are adjusted accordingly and then the tile locations are updated. New tiles are loaded or unloaded as necessary based on the location map, and neighboring tiles are rendered or collided against based on the tile map (which has loaded tiles only). In this way tiles are loaded from location data as needed, the coordinate system is tile relative so there are no precision issues regardless of the size of the world, collision only occurs on neighboring tiles and terrain is rendered everywhere where no tile exists (or is not loaded yet). So I can travel around the Daggerfall region and go to any location. All the cities are showing up as well as ruined castles, temples, graveyards, dungeon entrances and more.

Secondary objects and flats are now being rendered within city blocks. Things like wagons, horses, signs, fountains and other decorations. In addition, during night times hours, lighting is working on the appropriate objects. Unlike, Daggerfall however, the lighting effects the ground and terrain. In addition, even though the environment gets dark around the player at night – just like Daggerfall – lights can be seen from a long distance.

Finally foliage is also supported, as seen throughout the cities. Exterior terrain tiles also get random foliage, where 1 tile away from a location the density is 30% of normal (to ease in from no extra foliage to full forests). The random seed is tied to the actual tile location in the world, not the relative location, so you’ll also see the same plants in an area even though it’s random. Of course this is just a quick first pass – the demo following this one will have better terrain and foliage distribution.

Finally the screenshots:

Nighttime lighting (before foliage was implemented):





Foilage, flats and objects:






If you look closely, you can see a town in the distance through the trees…


I’ve been working on parsing the map locations and then being able to load and display full cities. Right now it tracks the tiles (or blocks) that should exist at each point in the map and renders the appropriate tiles or flat ground. Right now it only loads one city at a time but in the near future all the cities in a region will be on a continuous, though flat, map. The next demo will take place in the region in Daggerfall and you’ll be able to visit every city, town and home in that region. You’ll either select the locations from a map or travel from city to city on foot or horse back. So all the primary objects show up, the next step is to get all the miscellaneous objects, such as fountains, light posts, etc. to show up. Then I’ll get interiors fully functional including allowing the player to enter and exit interiors. I also still have to do the regional based texture changes for the buildings.

So let’s go to the city of Daggerfall!

Approaching from a distance


Going up the main street toward the castle








Other views of Daggerfall



Views from another city


So I’ve started working on cities. I decided to start by getting RMB blocks to load. It loads the exteriors, interiors and ground plane with full collision. Interiors have some issues with the positions of some of the objects, exteriors aren’t doing proper regional texturing and secondary exterior objects and flats are missing but it’s a start. Once I fix up the interior issues and exterior decorations, I’ll get the exterior to interior transition to work, through the doors. Once that is complete I’ll read the map data and build full cities complete with regional texturing! Note there is no sky yet, that will come later when I start working on time of day transitions and lighting.

Some screenshots of the work so far:

Cheesy interior (interiors need the most work so far)


Exterior shots





No new videos yet, that’ll wait until I get a complete city working. 🙂

The first demo of DaggerXL is now out, to read about it and download go to the Downloads page. While several features are still missing, this establishes a good amount of the dungeon crawling gameplay. This includes: Stat system with character screen; inventory system with inventory screen; basic (incomplete) UI; looting treasure and bodies as well as the ability to drop items; melee combat using stats, armor, weapon, skills, enemy stats (such as AC) and types of swings made (different mouse movements) to determine the outcome; enemy AI and movement; collision and player physics; interactive objects such as elevators, switches and doors; and lighting and authentic rendering. Other game play features missing in this demo will continue to be worked on as I approach the second demo which will include a different environment – the city!

So try out the demo but remember to read the directions first. Daggerfall must be fully patched to play because DaggerXL uses data from the data files and the executable itself.

Update: A new version of the demo has been released, visit the download page to get it.

Fixes and changes:

  • The crashes are fixed.
  • Looting range has been fixed.
  • Looting bodies and treasure piles should work much better now.
  • The inverted stab/overhead swing are fixed.
  • The FOV matches Daggerfall much better now.
  • CPU_Light mode has been added.
  • VSync can now be enabled.
  • A God Mode cheat has been added to help with testing.
  • Custom control bindings can be setup.
  • An experimental extended feature has been implemented – Fake Bumpmapping.

I wanted my next update to be the demo release, but DaggerXL is not quite ready yet. Its very close though, only a few more days. So I decided to talk about what has been accomplished so far.

The UI system is much further along, including working buttons, Character screen with actual character stats and a working inventory screen. Right now a “default” character is used, since the Character Creator isn’t done yet, but beyond that stage it stores and uses those stats and skills as you see on the character screen. It tracks level, gold, HP, MP, stats and skills as well as the inventory. The inventory system is ready for the demo, including being able to equip items, scroll, sort, drop and pickup. When you click on a dead body or treasure pile and you can pickup the items and even directly equip them. You can also drop items onto the ground, which will create a new treasure pile on the spot.

The combat system includes being able to pull out your weapon and swing it. The full “hold and drag” system is implemented, including all the weapon moves. Even though enemies don’t move around yet and their attacks can’t hurt the player, you can attack and kill them. In fact your chance to hit is properly calculated based on your weapon skill, agility bonus (if any) and enemies AC. When you hit you do damage, based on your weapon, how you hit them (slide swipe, stab, etc.) and your stat bonuses (if any). When the enemies die they leave their body which you can loot for treasure (except for the animals in the dungeon such as rats and bats), but unlike normal treasure piles the bodies never disappear. The treasure piles disappear if you take all the treasure and gold.

Finally there have been more tweaks to the lighting, you’ll notice that the environment gets darker like the original game. Unlike the original game, if you have the light range turned up, the dynamic lights still affect environment, even at an extreme distance.

Anyway the demo is very close, a couple of more days away. I still have to fix some problems picking up treasure (sometimes its too picky as to where you click), some collision issues, and get the enemy AI moving and doing proper damage to the player. And then it’s demo time. 🙂

Here is a video and below some screenshots:










There have been a couple of big changes since last time. First thing is that the dungeon is finally oriented correctly, previously it was flipped around an axis. When I corrected this I had to modify the model vertices, modify the object position conversion and modify the object angle conversion – oh and flip the culling orientation. Not too bad but more involved then it probably seems.

The next thing you’ll notice is that the in-game UI is partially complete. For the “full” UI the portrait background is the wrong color and the compass isn’t working but otherwise works. The compass isn’t there because it turns out that it uses a 3D model and I have to find out which one and add 3D model support to the UI. The face background should change color based on your current condition which still needs to be done. The minimal UI ( the “fullscreen” option in Daggerfall ) is working correctly, including the compass.

Enemies now show up correctly, humanoid and monster alike. They currently have no AI, so just face the player and play the “walk” animation. However ground based enemies do have gravity, although the range when they are updated is too short, causing an enemy pop in the video. Anyway the next update will have actual enemy AI, so you’ll get to see them move around soon.

And finally switches, moving and rotating objects work. For example if you hit the switch by the throne, it’ll rotate while causing the platform and throne to move up (or down). There is also a rotating bookcase trigger by clicking on a table in another room.

So for the next update I’m shooting for monster AI, more complete UI (character screens, inventory, etc.), combat and looting (loot treasure piles, bodies). Shortly thereafter I’ll release the demo. 🙂

As usual here is a video showing the latest progress:

and various screenshots showing the new features:





Many new changes have been made since the last post:

Animated texture support, emissive flats, better flat scaling and rendering, dynamic light sources attached to light flats, proper texture set switching based on region (yes this is required for dungeons too), greatly improved collision detection, working doors and first pass implementation of proper enemy and treasure placement. All the enemies show up as rats right now, including one giant rat but will be the proper enemies next time. The random treasure works correctly.

The lighting has been tweaked from the player, now there is an upclose light as well as a longer distance fog-like attenuation. Unlike Daggerfall, however, the lighting doesn’t fade completely to black in the distance and light sources still light up the environment no matter how far away they are. All the dynamic lights still need to be tweaked but pulse/flicker like in Daggerfall. They are not quite standard point lights, there is the standard (N.L) contribution, but even surfaces facing away from the light receive a little lighting if they are close enough. All lighting is done per-pixel similar to the original game.

The proper texture swapping has done wonders for making the dungeon look like Privateer’s Hold, it really helps a lot as you can see from the screenshots. The flats are also about the correct size and positioned almost correctly, some more tweaking is still required as you can see with some of the lights.

Next up will be properly displaying all the enemies, supporting switches and elevators (like the throne, which rises when you pull the switch in the main room), supporting quest items (these are just invisible right now) and UI. Beyond that I’ll start implementing combat, enemy AI, skills, and so on needed for the demo. Also sound and midi music will be in before the demo as well.

Here’s the movie showing off many of the changes:

And here’s several screenshots: