I am currently progressing in merging old plugins (drv_giants and drv_mix) into the Main Driver Plugin (drv_default). While it was very easy for the Giants: Citizen Kabuto .GZP support (because I had the source code), it was a little bit more complicated for the Command & Conquer .MIX support.
The goal of this merging is to be able to had source code of all parts of Dragon UnPACKer and to produce a native x64 version when possible thanks to Lazarus/FPC.
The MIX file format is not complicated but there are no filenames stored in the file. The filenames are generated by the game then hashed to retrieve an ID. By using a filename database (all credit goes to XCC-Utilites) the current version on CVS can display most filenames in .MIX files. I am currently trying to retrieve filenames from Blade Runner .MIX and .TLK files.
For the support to be on par with old drv_mix plugin from Felix Riemann, I still need to add a fileformat identificator. This shouldn't be very difficult.
On a sidenote, I tried to adapt the MIX encrypted (C&C:Red Alert and Tiberian Sun) format C/C++ code given on the following page (specification by Olaf van der Spek): http://xhp.xwis.net/documents/MIX_Format.html but after spending my whole sunday on it, I was unable to make it work. I even tried to use the compiled C in Delphi directly which gives a decryption key, but never the same... Something is obviously wrong. I will try to work on this when possible. I would have preferred an explanation than the C code provided.
To finish, I adapted the D5P version 4 format to allow a Deletion/Obsolete flag in file entries. This will allow to delete the old drv_giants.d5d and drv_mix.d5d files while upgrading to the new drv_default.d5d version (when available). This new flag is supported by Duppi v3.2.0 for the users (which is available for a few days already) and by DUP5 Package Maker (DPackC) v3.6.0 for the developpers.
Here is the first unstable version of 5.5 series: 5.5.0 Beta !
So what's new?
- Mostly behind the scene changes, this version is still entirely compiled with Borland Delphi 7, but with few modifications it should already work quite fine compiled under Lazarus\Freepascal.
- HypeRipper 5.6 Beta 1: Merged plugin into the core and removed plugin support!
- Removed use of JCL & JVCL libraries (now using standard VCL ones)
- Many bug fixes and usability enhancements.
- New games file formats supported:
- The Chronicles of Riddick: Assault on Dark Athena (with some limitations) .XTC and .XWC
- F1 Manager 2000 .RFC/.RFD/.RFH (partial support)
- The Fifth Element .MRC
- Prototype .RCF
- Scarface .RCF
- Vietcong .CBF (full support: decrypt & decompress thanks to Luigi Auriemma)
Look at the change log to know the details about what is new!
To download this new version, head to the Dragon UnPACKer > Downloads section.
Here is a long due blog entry...
The release of Duppi v3.1.0 was a total fiasco... I had to release 3 more versions in order to correct all the mistakes I did. I am terribly sorry for that and I hope you will keep using Duppi (which now works fine)!
For those that did not upgrade to Duppi v3.1.0, 3.1.1 or 3.1.2 here is what happened:
- The v3.1.0 contained a huge bug that prevented Duppi from downloading any update from internet (fail with an Exception) and to be in a perfectly bad day I completely forgot to allow update of the used DLLs (libcurl-3.dll and zlib1.dll). So to be clear: There was no way to update Duppi in an easy way to correct the problem...
- The v3.1.1 only fixed a small information log bug (I wasn't aware yet of the bugs).
- The v3.1.2 fixed almost all bugs (but I forgot the DLL file zlib1.dll, because I did not include it at first, I had it in my system folder...).
- The v3.1.3 finally fixed all bugs and will now give away his version number when contacting the update server (which therefore knows: the build number of Dragon UnPACKer and the version number of Duppi, nothing more). I created two packages for this version, one without the DLLs which would be used to update from 3.1.x bad versions and one with the DLLs for people updating from older versions. In order to be sure the version without the DLLs was only used by people with the correct version 3.1.0, 3.1.1 or 3.1.2, I added an option to D5P Package maker (v3.5.2 unreleased but in CVS) to be able to override the required Duppi version number.
- Unfortunately I added the check to both packages and I had to created a fixed Duppi v3.1.0 package.
In the past month I stumbled upon the Luigi Auriemma page and specifically on his code to extract from compressed & crypted Vietcong .CBF files (cbfext v0.2.1 + unlzw v0.1.2). It took me some time to adapt it to Delphi/Pascal but I was able to do it, the new code is incorporated in the Default Driver v2.0.7.
I also worked on avoiding loading wrong formats in Dragon UnPACKer, that was mostly due to Nascar Racing .DAT format or Cyberbikes .BIN format. They both do not have any magic ID/signature to rely on and would load any file with .DAT or .BIN extension. This was "fixed" by introducing much needed sanity checks in Default Driver v2.0.7.
In order to have a more pleasant use of Dragon UnPACKer I also added an exception catcher when using Vampyre Imaging Library, because when the format was wrong there was an uncatched exception which was not very cool. My bad, I should have done that from the start. The change is on CVS in v5.5.0 Beta of Dragon UnPACKer.
Finally I was able to add Prototype .RCF support to Dragon UnPACKer entirely based on john_doe (Benjamin Haisch) specs from Xentax forum. Compressed files (.RZ) are automatically decompressed during extraction, therefore the filename is stripped from .RZ extension. Decompression info was also found on the Xentax forum. Note that most of the interesting stuff is in P3D files into the RCF files, the format is been investigated on the Xentax forum by Mr. Mouse don't hesitate in going there.
That's all for now!
First of all, I did almost nothing on Dragon UnPACKer for the last 5 months or so (since last release actually)... But last week was very productive! I felt like coding again!
The new Duppi version was quite a lot of work, but I feel it improved a lot (even if that's not so visible). It is also completely Overbyte's ICS, JCL & JVCL free (not compatible with Lazarus/FPC). In the current form it shouldn't be difficult to compile it with Lazarus/FPC. But I haven't tried yet.
Today I removed almost all traces of JCL & JVCL from Dragon UnPACKer core application, plugins and tools. The last remains are in D5P Package maker for XML reading/writing. But when the migration to Lazarus/FPC is over I will switch to the XML utilities in Free Pascal Library.
While I was doing that I found a solution to the GUI in plugin problem in Lazarus/FPC (see previous posts): I will just create standalone configuration applications for the plugin when needed. I feel dumb of not having thought to that before...
I also decided to merge the HyperRipper plugin to the core. There is only one plugin and this way I will be able to start the multi-threading plans I have for the HyperRipper. I might also merge the convert plugin, not sure yet.