Skip to content

Faxanadu internals - The screen data decompression algorithm



In one of my first updates about the level data of Faxanadu levels I've explained how to decode the compressed screen data of the screens of a level. What I didn't mention back then was how the game itself actually decompresses that data. That's what this update is all about and I have to admit that the decompression code of the original game is better than the one I wrote. To my defence I want to mention that the original code uses nice tricks with the carry flag which wouldn't have been easy to use in my C++ code.
Continue reading "Faxanadu internals - The screen data decompression algorithm"

Faxanadu internals - Hour glass



Besides the wing boots there's a second equippable item which has an effect limited by time: The hour glass. The hour glass freezes enemy sprites for a given amount of time. Unlike using the wing boots, using the hour glass has a negative effect. It decreases the player's health by 50% making it rather costly when the player still has a lot of health. Nevertheless the code for activating the hour glass is remarkably similar to the code for activating the wing boots. The hour glass code also follows right after the wing boots code.

Continue reading "Faxanadu internals - Hour glass"

Faxanadu Internals - Wing Boots


When playing Faxanadu the wing boots allow a player to fly. Let's have a closer look at how they work under the hood. Wing boots are an item the player can buy or find and once it's in the player's inventory the player can select the item and use it. For a brief amount of time the player can fly then.

The code responsible for equipping wing boots can be found between the offsets $C579 and $C598.
Continue reading "Faxanadu Internals - Wing Boots"

Faxanadu level data VI - Putting it all together


Now that all necessary parts of parsing Faxanadu level data have been explained it's time to end this mini-series. The final step is to combine the knowledge gathered in the first five parts of the mini-series which in turn allows us to draw the entire Faxanadu world in the level editor.

Let's recall what we have so far. Drawing a screen from the Faxanadu world is a process that is comprised of several different steps: The first step is to read and parse the actual level data from the Faxanadu ROM file (see update one). The second step is to find the four 8x8 pixel tiles belonging to the 16x13 block that form one screen (see update two). Then it's necessary to find out which color the pixels in the individual tiles have (see update five) but because the color is stored independently from the tiles and because of some other oddities of the Faxanadu level data it's necessary to know how doors and scrolling work (see the updates three and four). And that last step, finding the correct color for the tiles and drawing the screens is what this update is all about. Continue reading "Faxanadu level data VI - Putting it all together"