as mentioned on my previous post, I’m working on a remake for Liberation Day in Unity.
To be able to remake this game, I aim to extract assets from the original game during installation time and use those assets from the newly written code.
Legally speaking, I won’t be able to distribute the game assets, so each player will need to get a copy of the original game to play and run an extractor tool to get the assets from the original game into the remake.
Understanding the game data formats, what are they used for and find how to implement converters for them is going to be the greatest challenge of the remake, I think.
So far, I’ve managed to read through the 2 formats I already mentioned and managed to read and export them to more “modern” formats:
- SMK files. They all start with the Magic number SMK2, which helped me find that they are Smacker Video files. The game has some videos made with this, but also has interface assets stored with it. I’ve managed to open these with ffmpeg and export each keyframe to png. For that I’ve used FFmpeg.AutoGen, since I needed a C# wrapper around the C++ libraries.
- MDB files. These are Microsoft Jet databases, opening them with Hex worshop revealed another magic header “Standard Jet DB”. Through mdbtools, I’ve been able to see the game always uses version 3 of MS JET DB, which I’ve been able to open through an OleDbConnection. Some of the databases on the game are password protected, but thanks to mdbtools being open source, I’ve been able to quickly read the passwords from the password protected ones and all of them are now TSV files.
There are still big challenges ahead, specially since I’ve only been able to get interface assets and databases. There’s a file called ANMSUNIT.FF, that uses a completely unknown format (probably custom made) that seems to hold all animations for units, probably with the units assets. There’s also DBI files, which seem to hold some kind of images, since they are stored in an IMGS folder.
Feel free to give the code a look at github.
I also set up a gitter chat on the repository, so anybody that wants to know more or wants to contribute can reach me.