I have started filling out “Issues” on GitHub so you guys can see what I’m planning on working on in the near future.
There are currently 5 milestones: Beta 1, Beta 2, Beta 3, Beta 4 and Beta 5.
Beta 1: the initial release, all the games previously stated should be working at 100% with the exception of multi-player. As stated before only software rendering will be available but higher resolutions will be supported.
Beta 2: the OpenGL 3.2 device should be implemented and true 3D hardware rendering support added – basically Daggerfall will surpass previous builds visually in addition to being gameplay complete.
Beta 3: the “Unified Sector Theory” release – perspective correct hardware rendering for 2.5D games. At this point Dark Forces should surpass the current build visually in addition to being gameplay complete.
Beta 4: will add support for additional platforms – Linux and OS X.
Beta 5: the “Multiplayer” release – add multiplayer framework and support for certain games (such as Blood).
After some thought, I have decided to release the full source code for the XL Engine and game implementations with the Beta build. In order to start this process I have created a Git Hub public repository and have started the process of pushing up the code.
That said, however, there are some surprises in store for the release so I will not be uploading all of the code until the Beta is published. The repository will be incomplete for now but that will be rectified for the release. Also this version of the XL Engine was rebuilt recently and so it does not contain all of the functionality past builds have had. However I am moving over the code and refactoring it to fit in the new engine as I need it but until then you will see holes. No game specific functionality is pushed and the code will not build as-is. Again this will be corrected for the release – this is just getting the ball rolling.
Finally some of the code is currently in a very rough state, this is a work in progress. I will not be taking pull requests at this time and this will be a quickly moving target, any part of the code can be radically restructured at any time. So if you have any ideas, like porting to other platforms, please wait until the Beta release and the repository is complete.
I have not upload a license yet, there are still some details to work out.
Here is the GitHub link: github.com/luciusDXL/XL-Engine
The GitHub page now has the most up to date version of the roadmap.
Here is the GitHub link: github.com/luciusDXL/XL-Engine
Please read the XL Engine Source Code post is you have questions about pull requests, the source code, etc. before asking. Thanks.
I have been asked for a time frame for the Beta 1 release and to gauge how far along the build is, as a percentage. I have decided to answer the questions, as best I can, while providing a progress update.
As for when I will say relatively soon, though I’m afraid that I won’t be able to give any dates until I know for sure.
As for % of completeness, that too is hard to say. The engine is basically where it needs to be, with the exception of the sound system – though that already reads Voc files, plays 2D sounds and could easily play 3D and looping sounds – its mainly a matter of resource tracking at this point. The UI needs to be finished but that, honestly, will only take a few nights of work. There are additional niceties I would like to add but most of them can wait (like controller support). So engine/UI wise I would say its at 90% or so but the other 10% isn’t very time consuming.
Where the majority of the remaining time will go is finishing the game support itself. The good news is that the current approach basically allows me to work towards all of the games in parallel (exactly how is a discussion for another day). So overall I would say I’m around 50% of the way there but the pace is accelerating due to improving methods.
This probably doesn’t sound great until I mention that I basically started from scratch a few months ago, largely due to the long hiatus and change in design – though I move and refactor old code as needed. So it is going well and the pace is very promising for meeting my goals of getting a build out near the beginning of this year. And to be clear that 50% is overall, meaning that all the games are made good progress towards completion (Daggerfall, Dark Forces and Blood), though it obviously, and intentionally, doesn’t indicate which are further along.
However as soon as more concrete promises are made something will happen so… I’m going to avoid making said promises until I know for sure. :)-
Estimated Progress Towards Beta 1
Engine – 90%
Game Support – 50%
Recent Engine Features
* Vsync now works correctly, though causes noticeable “input lag” at low refresh rates – such as 60. However this “lag” has been decreased and should be small enough for many people.
* Frame rate limiting, as an alternative to vsync, now works correctly and accurately – and has almost no perceivable “input lag” on Windows. This doesn’t completely fix tearing but greatly improves it, especially during explosions and rapid screen movement. This can be set to multiples of the refresh rate – such as 120, 240, etc. to further limit any input issues – and tends to improve the overall experience even at higher multiples. Though, obviously, your system should be able to reliably hit the requested framerate. If the system can’t keep up, the framerate limiter has no affect on performance (unlike traditional vsync). In addition it saves on CPU load which can be useful for weaker systems.
The XL Engine will probably default to a frame limiter of 120 Hz, though obviously you can change it to use vsync instead or have no frame limit (this last option is not recommended though).
* Adaptive Vsync – if available this will allow for synchronization if the system performs well enough but does not if the system under performs.
* Proper dynamic vertex buffer support so that performance is good for all Graphics “levels.”
* Render targets and improved UI aesthetic.
State of the Game Support
* All games have working libraries and entry points. They can all be selected, run and shut down from the UI.
* All games are debuggable and run, though only one is currently playable.
* All games are fully disassembled and partially re-written. Obviously some of the code is easier to understand then other parts.
* Dead code has been identified and removed from all games.
After some deliberation and suggestions, I am tackling midi playback a little differently this time around. The system midi players (like the Windows midi player) have issues and seem to be harder to configure in recent versions of Windows. While there is software available to help, such as VirtualMidiSynth, I don’t want to rely on users installing this software on their computer.
Instead the XL Engine will use software midi synth and support Gravis Ultrasound patches and Sound Fonts. In order to accomplish this I have integrated Wild Midi and am in the process of integrating FluidSynth. The release will come with default patches and fonts so people can hear good quality midi from the get go. Of course you will be able to download and use your own patches and sound fonts.
Setup is easy – just pick the format you want to use and select either the config file (for patches) or sf2 file and you are done. The libraries are statically linked with the engine, so no extra DLLs, downloads or installs to use.
In order to limit the dependencies and code size, audio drivers are being excluded from my build of fluidsynth – it will write raw audio which will be processed by the engine’s sound system, just like Wild Midi. Midi playback is also properly threaded to limit the burden on the main CPU.
Finally I would like to thank Brother Brick (a member of the forums) for suggesting Wild Midi – it is a great library for software midi playback. Unfortunately it does not – yet – have all of the features I want but it does a great job at what it has implemented.