Here's a WIP version of the file tool, with at least some basic functionality. I figured it would be a nice opportunity to brush up on my Model/View cred, so it has a tree view of the files you open and a preview for sprites (at 5x zoom). It only supports reading CAT files, decompressing IMC files and extracting animation sprites so far.
You open CAT files through the file menu, and right clicking on a file in the tree view gets you some export options. "Export all children" dumps all the subcontents of a file into an equivalent folder hierarchy. If you do this on a CAT, it could mean a lot of files since each IMC file can have up to 70 sprites and there's 50-70 IMC files in each CAT.
Download link.Only dependency is Qt, which is bundled. And of course the Visual Studio 2008 C++ runtimes. If you get errors about "Side By Side" "R6024", "the application is configured incorrectly" or something similarly useless, you're probably missing the runtimes. Just google "MSVC 2008 SP1 Redist".
As for stability, it gets the "works for me" stamp of approval. I'm so confident in my own programming abilities* that there's hardly any error checking/handling, which I feel is in the spirit of the original Darklands developers. Use at your own risk (there isn't really a lot that can go wrong though).
I'll put it on github or something eventually, I just want to add support for more file types first, palette editing and maybe sprinkle some comments on the code. Might as well add PIC viewing functionality too since the decode algorithm is available anyway.
Side note: At least in my version of the game there seems to be a single corrupted animation file, M40WKWH.IMC, which apparently is the "wild hunter", or this fella:
It's a giant squirrel with antlers and a superman costume, right? Would be interesting to know if that file is corrupt for someone else too. You'll get an error message if it is. It could be a hickup in the decompression algorithm, but in that case this is the only file it breaks on. I can probably salvage most of the file though with some hex editing, it's just a frame or two at the end that's missing.
*lazy