Amiga Breathless for PC

The remake of Breathless was an old dream of when I was 14, along other titles like Gloom, Alien Breed 3D, Super Stardust, Mario 64 and so on. This work is part of another bigger project that is called TextureMind Framework, developed to facilitate the creation of these kind of projects, like games, demos, presentations and so on. The idea to make a remake of Breathless in this moment started when I saw that the 3D engine with Vulkan was stable enough to render any kind of map imported with AssImp library. So why don't import Breathless map and use the same 3D engine to render them?

I was amazed by the idea of rendering Amiga Breathless with Vulkan libraries. The biggest obstacle was to import the maps from the old format in GLD, that was more suitable for raycasting than polygonal rendering. I started downloading all the material from Aminet, with this link:

http://aminet.net/package/game/shoot/Breathless-1996-Source

Then I studied the format from the original source code in C, in particular the map editor. The first important obstacle was that the editor was programmed for loading the map only in uncompressed format and all the maps were compressed in an unknown format called SLZ. I got 0 results on Google. I didn't know the format and I was about to abandon the project.

Then I had the idea to check the asm code and I understood how the format works. After some research, I also found a detailed description of the SLZ algorithm in this article:

http://archive.gamedev.net/archive/reference/articles/article294.html

Analyzing the asm code, I found that the algorithm is basically the same of the one explained in the article, so I decided to give it a try. I was able to decompress the GLD file at first try. From the editor source code I was able to understand how the map format works and I implemented a simple loader in C++. With some effort I was able to print out this wonderful result:


Basically, it was the first level seen from above! After that, it was a matter of converting the blocks into polygons, loading the textures, creating materials and assigning them to the blocks in the right way, before seeing the final result. The most diffucult part was to assign the block edge in the right way, with the correct proportions and texture coords. When I finished, I couldn't believe. I did it, I actually did it! I captured in this video to celebrate my victory:

Amazing isn't it? For the very first time, I could see this famous map running at more than 400 fps in Full HD (still not optimized)!