Ouch my eye!

Do not look at LASER with remaining eye!


PIC File Format

Posts related to my efforts in reverse engineering the MicroProse .PIC file format used to store the visual assets for many of their PC/DOS based games in the late 1980’s and early 1990’s



  • PIC: The lost version

    As I’ve been slowly working on getting the PIC file format code into a releasable state, another title popped up. Well not so much another title, but a rare, and nearly forgotten, version of a title. In this case it’s a 16 colour EGA specific release, while the version we’ve previously looked at was targeted for 256 colour VGA. The title in question? “Gunship 2000” (GS2K) from 1991. The title is interesting in the fact that, like “F117A”, it relies on the original PIC format and not the later ones MicroProse was already using with other titles at the time. Likely due to being based on older game engine code. As such, I didn’t expect much, why would it be any different than the version we already looked at? Guess someone at MicroProse didn’t get the memo. 🤣

    (more…)
  • PIC as we know it

    Time to stop procrastinating, and distracting myself with other formats, and time to put the MicroProse PIC file format to rest – at least with what we know about it so far. This post serves to act as a formal document for the PIC format, with everything we know so far, and possibly make a few changes too. If you haven’t followed along the whole adventure over the past four months, you may want to read that first, you can find all the PIC related posts here, though I will try to link to relevant posts here as I go. With that said, let’s get down to business.

    (more…)
  • MAXed out

    Here we go again, on yet another side quest, I didn’t mean to, but couldn’t help myself. After finishing off with the CAT file variant we saw with M1 Tank Platoon from MicroProse in my last post, I took a quick poke around the other files included with the game. A number of files with “MAX” in the name along with “EGA”, “VGA”, and “MCGA” caught my eye. These are obviously related to the various graphics modes the game supports, and likely contain more graphic assets, just like we found with the 3 CAT files in my last post. I’ll try to keep this adventure a quick one, so with that let’s dig into it.

    (more…)
  • Cat Pics were always a thing

    We have some unfinished business with regards to the MicroProse CAT file format, it’s time to start wrapping things up. The last time when we looked at the CAT file format we determined the files structure, and wrote some code to extract the contents. We also mentioned the existence of a slightly different variant found with MicroProse’s M1 Tank Platoon. So let’s take a look at this other variant to see how it differs from the version we’ve already looked at.

    (more…)
  • A glitch in the timeline

    Once again it appears we need to realign the naming of our PIC file formats. Luckily it’s only a small one this time around, and with it we also add a new title, or rather a port of a title to our list. This is the first time we’ve added a non PC title that supports the PIC format, though I do believe it has been used on other platforms as well. This all happened a couple of days ago so here’s how it went down.

    (more…)
  • Loose ends

    Well now that the RAID data has been recovered, and a new one is up and running, we can get back to some of the regular programming around these parts. Seems with my ADD and jumping around between a number of different formats, though mostly all from MicroProse, I’ve left some loose ends of unfinished work. I think it’s time we start wrapping up those loose ends, especially with regards to the MicroProse PIC file format. This post is mostly intended as a recap of what we’ve covered so far, to see what is still outstanding.

    (more…)
  • A new sub in the barn

    Well looks like the break from the PIC file format didn’t last long. My last post we were wrapping up with the decoding of the MicroProse CAT file format when we stumbled upon what appears to be a previously unseen sub-type of the PIC89 variant of the PIC file format. I had actually suspected that this sub-type might exist, back when we were exploring the PIC89 variant (then referred to as PIC90 for reasons covered here), but had no assets to support that theory until now. Lets dig in and see what this mystery sub-type holds for us.

    (more…)
  • Just a trim off the top

    With luck this will be the final post on the Bellard-LZSS compressor, allowing us to sign off on the last piece of the puzzle required to write a PIC encoder for the Railroad Tycoon Deluxe (RRDX) variant of the MicroProse PIC file format PIC93. Last time we left off having found a few bugs, and some implementation variances that resulted in our output being different than that of the reference file. We finished off by having our primary test file pass a full validation. However upon looking at a few others we were still failing on those. So in this post we pick-up where the last one left off and try to find whatever other bugs and variances remain.

    (more…)
  • Sometimes you need a hammer

    In my last post, we wrapped up writing our Bellard-LZSS compressor, to facilitate eventually writing a PIC93 encoder for Railroad Tycoon Deluxe (RRDX) from MicroProse. In this post we will take the next steps, debugging and validating the code which we have written. I have no doubt it will take some tweaking to get the compressor to generate the original compressed stream that we have as a reference, I just hope we are not too far off right out of the gate. So with that said, lets get into it.

    (more…)
  • Shoving the toothpaste back into the tube

    In my last post on the PIC93 version of the MicroProse PIC file format we left off having successfully decompressed the LZSS compressed image data within the file and reconstituting the image. That part was easy, as the code was pretty much already written for us in the form of the unlzexe github repository. It wasn’t easy getting to the point of identifying that Bellard-LZSS was actually the compression used. In the end we got there. In this post we’re going to try and reverse the process. This could prove to be far more challenging as we don’t have a full reference to look back onto.

    (more…)