Another year nears its end. After unfortunately skipping last year’s Not-Thanksgiving post, we are, back to our regular yearly retrospection. For people new to xoreos: this series is a kind of introspective look into what happened with the xoreos project over the past year. I’m not in the USA, so I don’t observe Thanksgiving, but nevertheless, I do want to give thanks to all the great people working with me on xoreos, and supporting us in other ways.
I already wrote a combination introspective and release post back in July, which gave some updates since the previous Not-Thanksgiving post in 2016, so let’s see what happened since then:
- After the release, I took a look at the different kind of “wavebanks” xoreos-supported games use, and implemented loaders for those. A wavebank is a collection of sound files packed into an archive, indexed by either a numerical or string ID. We have:
- XACT WaveBank, used by Jade Empire. There’s two versions, a binary one (the original format, I assume) in the Xbox version, and an ASCII one in the Windows version.
- FMOD SampleBank, used in Dragon Age: Origins.
- Wwise SoundBank, used in Dragon Age II.
- However, “wavebanks” are just one part of the coin. They’re used together with sound and event definitions, which tell you how to play the waves in the wavebank, including looping, sequencing and filters. These are still mostly missing. Nostritius has started looking at FMOD Event files, FEV, though.
- Next, I looked at the Android versions of Knights of the Old Republic and Jade Empire. I found that they contain packed data in archives. I added a tool to xoreos-tools, unobb, that can extract these. I also added probes for the extracted data files to xoreos.
- Nostritius also added a probe for the Xbox version of Dragon Age: Origins, and we added support for its data file differences.
- For the Xbox version of Dragon Age II, we’re still missing information on its ERF compression.
- seedhartha, in the mean time, restructured the engine code to store object references in scripts and containers as IDs, instead of plain pointers. This is necessary to correctly implement the DestroyObject script function, for example, without accidentally accessing the objects afterwards.
- Nostritius notified me that I had the wrong string encoding table set up for Jade Empire. We fixed that. Now non-English versions of Jade Empire should work correctly.
- Nostritius also made Malak appear in the KotOR menu, and implemented GUI scaling for KotOR and KotOR2.
- Nostritius wrote several new tools for xoreos-tools: a packer and unpacker for The Witcher save files, a KEY/BIF packer, and a xml2gff tool (which means he had to write a GFF3 writer, which will be very useful in the future).
- I bumped the C++ version for xoreos-tools to C++11. This is kind of a test run for xoreos proper. In the future, I plan to C++11-ify the codebase quite a bit.
- rjshae took asr1 WIP code to fix the non-standard XML files NWN2 uses for its GUI and brought it up to speed. This means the way to implement the NWN2 GUI is now clear(er).
- rjshae also fixed up our common trap/trigger code, and partially implemented triggers for NWN2.
- Nostritius started implementing support for the Flash-based ScaleForm GFx, which the two Dragon Age games use for their GUI.
- seedhartha took mirv’s WIP shader-based renderer and turned it into a clean PR, which I then merged. This means, mirv can now continue working on the new renderer in-tree, with hopefully smaller, more easily reviewable PRs to come.
- Finally, clone2727 reorganized our audio and video decoding code.
Quite a lot, right? :)
Of course, there’s still things in progress, among them:
- mirv is continuing work on the new renderer.
- Supermanu is working on pathfinding.
- Nostritius is furthering our ScaleForm GFx reimplementation.
xoreos wouldn’t be what it is without the help of a lot of great people, for whom I am thankful.
- rjshae, for taking up work on NWN2 in xoreos.
- asr1, for starting the NWN2 XML fixer, that’s now in xoreos-tools.
- seedhartha, for working on KotOR and getting the renderer rewrite mergeable.
- mirv, for doing the renderer rewrite in the first place.
- Nostritius, for doing a heck of a lot of different things in xoreos.
- clone2727, for keeping me grounded.
- Luigi Auiremma, for all his research and tools.
- Supermanu, for his pathfinding work.
- Farmboy0, for his help and advice.
- The people at GamingOnLinux, a great community for, well, Gaming on Linux.
- Linux porters like flibitijibibo, icculus and Cheeseness, for providing this much-needed service and also being all-around good people.
- A myriads of other people I probably forgot, because I’m bad at remembering.
Hopefully, the future will bring even more movement into this little project. If you would like to help with that, then please, feel free to contact us! :)