Archive for June 2011
The engine merger is underway, so I’ll discuss the progress and goals of the process.
- Create projects for Windows, Linux, OS X that creates a Window and initializes OpenGL.
- Refactor low-level shared engine code to work properly under all 3 OS’s, with proper multi-platform support. Shared systems include: OS Window management, low level 3D driver – OpenGL + platform specific setup and management, OS input management and the platform-independent input layer, OpenAL/sound system, midi playback (used by higher level, platform independent systems such as iMuse), scripting system, file system, etc.
- Refactor/import resource support for the supported games
- Game support infrastructure, using dynamic libraries and scripts.
- Refactor/import advanced sector support, add in missing features for Outlaws and Blood (dual adjoins, vertical adjoins, deep water, support for various texture non-uniform scale/offset options).
- Refactor/import rendering support for dungeon/location tiles and terrain for DaggerXL.
- Finish UI scripting system (which is already used for some parts of the current build of DarkXL), including simple visual tool for placing UI elements. This will allow for UI mods once the release happens. This will make future UI, especially for DaggerXL, much easier to put together, especially important since systems like NPC conversations, spells and quests will be coming online soon – all UI heavy.
- Convert existing UI to use the UI scripts.
- Convert DaggerXL enemies and weapon types to use scripting.
- Port launcher to Linux and OS X – it uses wxWidgets for UI so this shouldn’t be too hard.
- Build installers and release. All 4 games will be supported, though OutlawsXL and BloodXL won’t have enemies or weapons yet. But you will be able to explore every level in the games.
I’m currently working on step 2. Many of these will simply be moving the existing code into the new code base and cleaning it up and doing any necessary modifications to make it work in the new project. I will be taking the opportunity to refactor code that needs it – removing outdated assumptions, optimizing and ensuring stability. So it’s a lot of steps but just remember that most of the code is already written.
- Easy to install and use on each platform. I plan on adding a simple update button to the launcher so you don’t have to install each time. Simpler archive files will be available for those with administrator access.
- Store save files, config files, log files and other post-install writable files in security friendly directories by default (depending on OS). The write everything in the install director method causes issues for people without admin/root access.
- Stability and better error reporting. One major goal is to get rid of crash bugs and other stability issues. I want this to be a strong, stable base.
- Improved performance and compatibility. DaggerXL exterior areas especially.
- Improved UI interaction, especially for DaggerXL.
- Works on all platforms, all the time throughout future development.
In order to meet these goals, I will be enlisting help from some people during this process to do some testing. If DaggerXL or DarkXL currently runs poorly for you and/or crashes let me know and I’ll add you to the list. If you run on Linux (the distribution shouldn’t matter, as long as you have proper OpenGL drivers and support) or OS X also let me know, since I’ll need extra testing on those platforms.
A public release will be made once the merger is complete, at which point normal development will resume. Obviously the next step will be to work towards version 0.20 of DaggerXL and the DarkXL Beta. At this point I’ll be moving to the weekly build schedule, when possible, as previously promised. (i.e. lots of small builds, rather then few large builds)
As you may know, DarkXL has an incomplete, built in level editor. Obviously once the merger is complete, having an editor tied to DarkXL doesn’t really make sense anymore. Therefore the level editor will become it’s own project under the XL Engine – very much like one of the supported games. Basically it’ll have it’s own script files + library and continue to use the engine like before.
It’ll support different game configurations, including DaggerXL. Basically the way it works is that you build areas out of sectors – but these sectors can have different attributes. For DaggerXL dungeons, for example, a sector would be a dungeon tile that is flagged to disable sector rendering and collision (using the mesh data instead). It will still do portal culling along sector connections, allowing for coarse high level culling and connectivity. So you’ll basically be able to build interiors and exteriors and place them on the map. You can then package these up and distribute them as mods. Initially this is just a level editor, so you’ll have to use existing pieces (though you will be able to construct your own tiles out of individual models).
I will be converting the existing editor code and adding DaggerXL support after the merger release. Until that happens the existing editor will be temporarily unavailable. I will spend most of my time moving the games forward, but I’ll still get the editor working soon to make testing and checking out things a little easier for me.
The new release is now available. Grab it off the downloads page. See the previous post for details on what the release contains.
Please note that the release has been updated to release “R2″. This fixes the resolution list issue in the launcher, adds version checking for Daggerfall when launching DaggerXL (to make sure you’re using the correct version) and extra logging to help pin-point crash issues.
I have made some modifications to the next release as well as a bunch of new information about what’s going to be happening in the near term.
The release has not actually been made yet but it’ll happen tonight before I go to sleep. I’ll make another short announcement here and on the forums when the release is actually uploaded and available. I’m putting out this blog post now to save me time later.
The First XL Engine Release
Obviously this is not the first release for DarkXL or DaggerXL, but it is the first release since the process of merging the projects has begun. The following will be packaged in this release: XL Engine Launcher, version 0.199 of DaggerXL and build 9.50 of DarkXL. Currently DaggerXL and DarkXL are still separate executables, however they are packaged together and should be launched using the new Launcher. As you’ll read later in this post, they will no longer be separate executables in the next (post-merger) release. Now I’ll talk about each item, but before then I’ll talk a little bit about a change in philosphy and why these are “interim” builds rather then the promised version 10.0 (beta) and 0.20 (alpha).
To put it simply the amount of time spent on these projects is variable. Sometimes I get busy and sometimes a lot gets done quickly. When combined with big releases this can result in progress “lulls” where nothing appears to be getting done. It’s not true, of course, I work on things as I get time – but the perception of progress is lost. So I’ve talked about moving to smaller builds that would work toward the big milestones (such as 0.20, 0.30, etc.) but said that this would wait until after the merger. However as little issues come up, the large builds get delayed and so does the merging process. So I’ve decided to take action now instead of later and release interim builds – not everything is complete that I talked about and some stuff is disabled. But this will allow me to get the merger out of the way before working on more stuff (thus complicating the merger even more) and will a start to the post-merger way of doing builds.
The builds will no longer be hosted using the old “DivShare” method or using the old blogs. The Downloads page will be updated on this site, which will be the go-to place for new information and builds.
The goal is to move to a weekly build system, even if it’s just small features or bug fixes some weeks. I want to have a continual sense of progress rather then the “bursts of activity” that we have now. That is the only way to grow the project and I think will be a big improvement for everyone – including me. For DaggerXL, builds like 0.20, 0.30, etc. will be more polished milestones while builds like 0.199 will be interim builds that may contain incomplete features. But this is a work in progress, there’s no reason you guys can’t see these things in progress more.
The XL Engine Launcher
The old DXL_Settings.txt files are gone now. You will use the XL Engine Launcher to setup anything that currently cannot be set in-game, including things like game path and mod settings. The files it writes out are different, so if you try to run DarkXL or DaggerXL directly without using the launcher, you’ll get a message telling you to run it at least once. In addition, the launcher will verify that certain files exist in the paths that you specified and tell you if things are not setup correctly when you hit the “Play” button. It will also verify that OpenAL can be setup correctly and tells you if you need to update your OpenAL drivers.
Below you can see the launcher, click on the game picture to setup that game and alter it’s settings. Note this is a slightly outdated screenshot – I added support for enabling and setting up texture replacer mods as well.
Below you can see the various video and graphics settings for DaggerXL:
DarkXL Build 9.50
DarkXL will also be updated from version 9.08 to version 9.50. While the “bleeding edge” code still isn’t stable enough for release, this is an older – stable – version of the code. It isn’t as close to the Beta but does feature several features over the current 9.08 build, including:
- All the weapons implemented.
- Secondary fire implemented.
- Weapon Scripts implemented, with all weapons re-implemented using said scripts.
- Night Vision fixed.
- Fist impact sound on walls.
- Improvements to midi playback.
- Bug Fixes.
This build has also been modified to work with the launcher as discussed above. Note that secondary fire is hard-coded to ‘R’ temporarily until I add it the config dialog.
Note that if you want to play around with voxel models, this build supports the kvx format (the same as used in Blood). Not that useful for playing Dark Forces, but it’s there for testing. Here are the steps to place voxel models in the game (though they are not currently saved):
1) Create a Model directory in the same directory as the release is installed.
2) Place your kvx files into the model directory.
3) In-game, bring up the console using the ~ key.
4) type t_add_obj_3D modelName.kvx [yaw] where yaw is optional (defaults to 0). This places the model at the player’s position.
Some random screenshots of me using this:
DaggerXL version 0.199
So I’m still having some issues with version 0.20, so this interim build disables things that aren’t working if they are problematic. So not all the promised 0.20 features are there but they will come online after the merger, giving me more time to make a nice, polished Alpha release later.
Features that are there and enabled:
- All armor pieces supported with the exception of helmets. You can collect and equip them but they do not show up on the player “doll.”
- All weapon types supported except projectile weapons (bows).
- Weapon and armor materials are supported.
- The dungeon automap.
- Dungeon water – but currently only in a few dungeons, which I’ll list once the release actually goes out.
- Swimming skill, swimming controls, breath meter, drowning, etc.
- Leveling – though loot scaling and monster scaling are not yet properly handled (coming in version 0.20 still).
- Improved loot, though the full loot table implementation is still incomplete.
- Bug fixes.
Improved enemy support, random encounters, fixed dungeon textures, helmet rendering and full proper loot tables are still incomplete. Those will show up in the 0.20 alpha build.
Starting tomorrow I will start working on the engine merger. I’ll present a list of things to know and what is going on:
Switch from DirectX to OpenGL
The engine will be cross platform so I’m switching to OpenGL in order to make things easier for myself. I already have a modern working OpenGL engine, so this should be fairly painless. This also means that all reliance on D3DX will be removed.
Support for advanced sector rendering, DaggerXL style polygon/terrain rendering and voxel rendering
Basically the engine will have support for multiple ways of storing and rendering scenes.
Single executable, multiple game support using scripting and dynamic libraries
The engine will support an arbitrary number of games, though obviously only the games already talked about right now. Many things, such as weapons, enemies and UI will be supported using the scripting system as “pioneered” by DarkXL.
The engine will initially support Windows, Linux and OS X.
In addition I will be implementing the missing rendering features needed to faithfully render BloodXL and OutlawsXL. When the merger release is made, it will include the first release for BloodXL and OutlawsXL support. It will obviously be pre-alpha material, but you should be able to run around all the levels and look around. Enemies and weapons will follow shortly afterwards. The DarkXL Beta and DaggerXL Alpha will follow the initial release. However I will be making incremental weekly builds at this point (when possible), so there may be more interim versions depending on how it goes.