I must have been around eight or nine years old when I first played this game, which I have since simply called "heli" or, when I wanted to sound sophisticated, "battle heli". Even back then I remember wondering what was possible to do in this game, and I was fascinated by the idea of controlling other vehicles and objects in the game world. Although honestly, that was true for many games I played back then. Of course I never had the full version of the game, only the shareware version with the first two missions in desert and winter.

For those who don't know, SEEK & DESTROY is a 2D top-down action game from the 90s. The game was released in 1993 for Amiga and in 1996 for DOS. The DOS version is improved and a bit different from the Amiga version, suggesting that the game was rewritten from scratch for DOS. The most interesting feature of the game is that the map under the player rotates and moves freely (360 degrees) while the player vehicle is fixed on the screen.
Another fond memory I have about this game is somewhere from the time when I was at high school and teaching myself programming. Back then I was trying to figure out many techniques used in my favorite games and sometimes I even tried to implement some of them in Visual Basic. Wonderful times. The project where I was trying to implement 2D top-down free movement with rotating view is unfortunately lost to time, but I'm sure it was one of the most impractical and unoptimized pieces of code I have ever written. As I didn't know anything about 2D projections, cameras and transformations back then, I was trying to implement everything from scratch and very ad-hoc. My project never really worked, and I still remember the respect I since had for the original authors of the game. Many years later I remembered this game and, of course, played it again. For the first time I was able to play the full version. The graphics still looked good and the free movement was still satisfying, but I also realized the game was not quite as good as I remembered. The gameplay felt a bit too slow, the missions are repetitive, and the tank still sucks. And I was not a little child anymore.
Naturally, I started digging into the game and trying to figure out how it works. And d'oh, that was not easy. I managed to unpack the game files, and while it was mostly obvious what each file was for, I could not figure out the encoding of the game sprites. I tried a few different approaches, but to no avail. That was around 2022. After that, the game sat silently in my DOS folder while I was busy with other things.
Just a few months ago, everything changed. I was playing with different AI models and looking for a some relatively difficult task to test them on, and those few almost forgotten notes about my attempts to reverse engineer this game seemed like a perfect fit. The first results were terrible. But with a little bit of guidance and some trial and error, the real results started to slowly appear.

As you can see, at the beginning everything was mostly wrong, but the title screen was at least recognizable. Small success, which then led to the long and tedious work of figuring out the palettes, how the interleaving works, and how to decode individual sprites.

Using generative AI made everything much faster, from trying different encoding approaches to figuring out the palettes and writing batch decoders. It was a lot of trial and error, but eventually I managed to decode almost all the sprites and fullscreen images. I will write a more detailed article about the decoding process and the techniques I used, but for now, enjoy these images I managed to capture during the process.
![]()
First mission bunker decoded with early version of the decoder. The palette is almost correct, but the interleaving is still wrong. The bunker is somewhat recognizable, but the geometry is still wrong.
![]()
The game contains many different VGA palettes, and finding the correct one for each sprite was a tedious process. This is also an alternate version of the player's helicopter which is included in the game files, but seems to be unused in the game.
![]()
The evolution of the decoding process. In reality, there were many more versions of the decoder, but I only saved a few that produced some visible and meaningful results.
What's next?
Of course, when I was able to decode the game sprites, I wanted to try to implement a simple demo of the game, now that I knew a lot about 2D projections, camera transformations, and how to implement games in general.
In the next articles I will try to describe:
- How the original game works
- My idea for more modern reimplementation of the game
- What I have found out during the development of the openSEEK engine