11 March 2016 - Forum Rules

Main Menu

Zelda II Hack Project - Dark Fortress

Started by Trax, September 28, 2018, 12:16:22 AM

Previous topic - Next topic


After a break, I started working on a few more mechanics of the game. This time, it's palette cycling. I got the basic routine working correctly. Right now, I only use a timer that already exists, but I will eventually come with my own timer, thus having the option of variable speeds for different areas. Right now, either I use $0500, which goes down to 0 every 0x14 frames = 20 decimal = 1/3 second. Or, I can use $0485, with a cycle of 6 frames, which makes for more fluid animation.

Lava Pulse

Stars Pulse

Those are only rough tests. In the lava test, I used the Grotto Without Candle palette as a starting point. I think it's an interesting idea to have a momentary view of the grotto, and that you have to time your actions according to the pulses because it's the only moment where you can actually see enemies. I think it's better than just having everything black and squint to see shadows on the ground.

For the stars, I just recycled the clouds objects and replaced with a new tiles, and cycled to palette to various shades of blue. I will eventually create a new object that can spread the stars tiles more randomly. In the Stars video, you can also see a few attempts at new graphics, like the Bit/Bot enemies, the grass and the Enemy Killed Animation.


Trax - Once again, the work that you do is totally amazing. I'm definitely excited to see what you do next.
Trust in the Heart of the Cards


How is your progress going, Trax?  Looking forward to seeing more!  :) 


I am currently working on a new passive enemy that will be set as Enemy Code 08, which is unused in the original game. The enemy is a switch that can be activated or deactivated to move gates in the Overworld. I will release a small demo that showcases the creation of a new enemy with its own logic, even though it's very simple and doesn't even move or attack. It also demonstrates how the Overworld can be modified to make it more dynamic, and in this case, add some puzzle element to the game. This kind of modification happens in the Side View, and when you return to the Overworld, something has changed according to the player's actions.

I will also add a few more types of tiles to demonstrate how the Overworld can look less monotonous by displaying more than 16 tile types.

Stay tuned!


That does sound really great.  The overworld needs new stuff like that!  A new enemy that doesn't move or attack?  That is very curious, considering it has its own logic.  What kind of enemy could that possibly be?  :o  Can't wait to see this demo.

Did you ever decide anything for the title screen?  Been wondering about that...


Just found about this project by accident. As a Z2 fan, I really can't wait to try the demo/full version, which ever comes out first.

Your lava pulse is both annoying and amazing. Annoying features in a game can prove a great challenge, and this one is a great idea.  The Bit/Bot monsters' transparency effect is pretty kool, too. Do you plan on using such feature on some other monsters?


Not to water down my work, but don't expect a very long demo. Just a way to showcase a new game mechanics. Similar to the Ice Tile demo (first page of this topic), but a bit longer. But rest assured, it's almost certain that all these things will be in the final hack, one way or another.

IcePenguin. I have a general idea of the title logo, and I will try to have the intro contain more stuff, maybe a mix of text and images, possibly with animations, if there's enough space available.

LadyCannock. Great to see another follower in the ranks. If you have any ideas or questions, let us know. The other pages of the thread give a good idea of where the hack is going. I tried to make the Bit/Bot transparent, as a reference to Majora's Mask Chuchu, which strangely ressemble the Bits/Bots, so it kinda goes full circle. I imagine them like drops of colored water. I don't know about the appearance of other monsters so far. I thought about having other color schemes for enemies throughout the game. What I do know is that there will be a lot more variations on the same enemies. They will become stronger and more random as the game progresses.

Ok Impala!

All these changes will surely be the start of a whole new phase in Zelda II hacking. While working on my own hack, it was often frustrating that the game's RPG systems are so limited. Adding stuff like trap doors, switches, more dialogue, heart drops, would go a long way in making the game more diverse. I also wonder... what would be the possibilities of implementing a monetary system? So you could actually buy some upgrades?


Looking forward to it! I do believe that most players are open for new mechanics, after all we are playing rom hacks to experience something new.
Keep up the good work mate!


Well, sorry everyone for the super long delay, I finally got some time to work on this project enough to showcase some new features in a demo. I think you guys are in for a treat.

This demo is mostly about one major objective : make the Overworld more interesting. One of the comments I see the most about Zelda II is that the Overworld is boring. And I agree. Only 16 different tiles, all blocky, and interactions are very few. Even moving to other regions doesn't change the appearance of the Overworld much (same tile graphics). This demo showcases three things I added to enhance the Overworld and make it less repetitive : Extra Tiles, Changing Tiles (gates) and variable Demon Battles.

I also worked on my editor, Sword II, to make it more intuitive and reliable, which is not an easy feat because of the way the side areas are coded in the game. You can't just change the tiles at will, you need to draw objects, one after the other, replacing the background (a lot of games do that to save ROM space). The editor also has an efficient save mechanism that aims to optimize space from the various free ranges of bytes that can actually be written to, specific to each bank.

Extra Overworld Tiles

The extra tiles feature is now fully functional, and as far as I know, not buggy. And I'm so glad that it's finally working, because it gave me nightmares for a long time, and it went through a few iterations. And I had to integrate it in an alternate version of the editor because doing it by hand would be a huge hassle. This is one of the reasons it took me more time to deliver some news. You need good tools to be efficient.

This means we can now have 0x40 (64 decimal) different tiles on the Overworld. I could tweak the code to make it to 256 tiles, but for now, I think it's already a vast improvement. The cool part about it is, it doesn't take space in the normal 0x400 bytes for the Overworld, which contains the basic 16 tiles, with RLE compression. The extra tile data is coded and stored elsewhere, in a custom table, and they replace the original tiles (as if they were pasted over the basic map). The only downside is that an extra tile is forced to match the palette and the attributes (blocked, swamp, etc.) of the original tile it covers.

Maybe the exta tiles feature does introduce a bit of lag in the Overworld when you move horizontally (starting roughly from the middle of the map, going right), but I didn't formally test to see if it's worse than the original game. Let me know if any of you can see a difference. Because yes, the orignal game does lag slightly on the Overworld, just enough to be perceptible, mostly because the music slows down a tiny bit.

So, in this demo, I used extra tiles to produce corners, added statues, a well, diverse grass and forest tiles, grotto entrances, an horizontal bridge, palm trees and a different palace. I'll be adding a lot more in the future, but I have to stop somewhere for the demo.

Overworld Gates

The main reason this demo exists, actually. I started with this idea initially, in response to a few comments about how the Overworld has almost no interaction. The goal is to modify the Overworld dynamically, according to certain actions. In this case, you hit a switch to open or close gates, that let you progress inside a maze. Because the tiles are interactive, I had to use the basic 16 tiles, one for an horizontal gate, and one for a vertical gate.

I created a new enemy from scratch using an ID that is never used in the original game, ID 08. Admittedly, the "enemy" is very simple, it doesn't move, and can't hurt you. It's a switch. The map contains 8 gates. Each gate is activated by a switch that opens/closes it. When you hit a switch enough times, its state changes, and you hear a noise. This means you have activated a door in the Overworld. Each switch states are stored in an unused space range in Cartridge RAM. When the Overworld is loaded, it reads a custom table that indicates what tile must be drawn at specific coordinates, according to the state of the gate. Complex stuff, but I think the final result is engaging.

Of course, there is a lot of potential for other Overworld interactions. A simple one would be to have a grotto appear after talking to someone in a town, or when you defeat a boss, stuff like that. If you have any other ideas, throw them.

Variable Demon Battles

This one came later, but I decided to add it to this demo, although I could have made a standalone demo with only that. This was another challenge, in terms of coding, but also because my editor doesn't support it. I created a fresh ROM just to work on the new Battle Areas using the editor as usual, and then integrated the raw data by hand in the new custom tables. Similar to the Overworld Extra Tiles, the new Demon Battle don't use up Area Codes like the original game does. This means several areas that are now free to use for whatever is needed. More variety.

There is a maximum of 0x3E (62 decimal) Side View Areas per region. Codes 3F and 3E have special uses. The Overworld regions (West Hyrule, Death Mountain, East Hyrule, Maze Island) all have 14 areas attributed to Demon Battles, 7 types (Desert, Grass, Forest, Swamp, Graveyard, Road and Lava), 2 areas per type, one for the north half and one for the south half. With Variable Demon Battles, these areas are in extra of the 0x64 limit. They have their own code and data.

The code I created allows 8 different Demon Battle Areas per type, which means a potential of 8 * 8 = 64 different Demon Battles per region. The eighth tile type doesn't exist, because it would be tile type B, which is a blocked tile. But with some tweaking, it could exist. For the demo, I made 4 different Demon Battles for Desert, Grass, Forest and Swamp. I didn't use any Graveyard or Lava tile (not that I can't), and I kept Roads as a safe single screen, like in the original. I removed the Weak/Strong distinction for Demons, because I don't have provisions in the code for that, but I could modify the mechanism to allow this. For example, 4 Weak Demon areas, and 4 Strong Demon areas. Or any other mix. I'm not yet decided on the final format.

I like that feature a lot because it makes the game a lot less repetitive, which is also a common criticism of the game. Now, every time you get hit by a Demon on the Overworld, a random area is selected according to the terrain you're on. Feel free to linger a bit longer in dangerous areas to see the new Battle Areas.

I took some time to integrate other various stuff, like some minor graphic changes, different Overworld palettes. I tried to be as creative as possible for level design, despite the limited number of objects to work with. Some enemies are different colors. I changed the Experience Points Bag to a crystal. The Bit and Bot enemies are transparent. Geldarms are impervious to sword hits. I tweaked some variables in Enemy AI, like faster projectiles, and some enemies regenerate. Lowders react faster. I experimented with Bago Bagos, but it needs improvement. You start with the Candle, and you have to find the Glove to finish the maze. I'd like to hear your feedback on the graphics changes, both for Overworld and Side View.

Small Heart item, replacing the Extra Life Doll item in the code (this was discussed earlier in the thread). This demo integrates Small Hearts, dropped randomly by enemies, alongside of Magic Jars and Exp. Bags (now crystals), and refill one square of Life. You don't need to hit it with your sword, just walk into it, and Link will briefly flash. In an attempt to balance this new item, I made the Life Spell cost more magic and only refill 2 squares of Life.

The Small Heart works as intended, but unfortunately, causes a very nasty major bug that has not been fixed yet. Sometimes, for an unknown reason, after taking a Small Heart, you may hit an invisible enemy somewhere else in the area and get hurt for no apparent reason. This collision seems to happen at specific X coordinates (maybe relative to the Heart's location), and only once per area. It's also hard to reproduce. Not all Hearts cause the bug. As far as my testing goes, the bug seems more likely to manifest when it's dropped by the first enemy killed in the area. If any of you can find any hint as to why this happens, let me know.

More flexible Overworld Tile Attributes. The orignal code to determine whether a tile is blocked, swamp, etc., is arbitrary, to the tune of "if tile type >= B, set it to blocked", plus exception for walkable water. So I decided to create new code and a custom table to have attributes set for each tile individually. It will also be expanded to be different for each region. This means each map can have more or less blocked tiles, out of the 16 available. This is not applicable to extra tiles, for reasons mentioned previously.

So that's it for now. All these things are bound to be modified eventually, but  you can expect to see them in the hack in one form or another.

You can get the IPS file here :
CRC-32 checksum of the original file : E3C788B0

Please share your comments, suggestions and questions on graphics, level design, gameplay and bugs. Thanks!

Midnight Metronome

Are you going to implement features from Zelda 2 redux? Like hearts for life, new level up system, etc...

Ok Impala!

Awesome new stuff Trax! I especially like the fact that things on the overworld can change after something happens in a town or cave. This will make the game whole lot more interesting and less static!  :)


I may borrow a few things from Redux if I don't intend to implement something similar. Many of the things Redux aims to correct are not appliable to my hack, like changing enemy positions and stuff like that. All balancing will be specific to my hack. Things about Dolls won't apply, because there won't be Lives in my hack. Instead, there will be penalties for falling in death traps, and Small Hearts will balanced things out to give the player a fair chance of staying alive.

As for starting from the entrance of a Palace after death, I am not decided on this one yet. The final map of Dark Fortress should be quite large, so starting from the beginning every time would be annoying either way. One thing I already implemented is a series of starting points, like in A Link to the Past. You see a statue and activate it in some way, likely by hitting it with your sword, like the owls in Majora's Mask. When you start the game, or restart after death, you are presented with a list of places that you already found, and you start there instead. I made a video of it earlier in this thread and discussed about it :

The movie demo is here :

That said, we may as well have both the Start From list and the Start from Palace implements. Once a substantial part of the maps is done, testing will reveal if the Start from Palace is needed or not.

The Level Up system from Redux is very interesting, and more flexible. Like I discussed earlier as well, removing the Experience Points completely is something that could be done, but it's so ingrained in the identity of Zelda II, it's hard to imagine the concept being completely out. No Experience Points would mean that everything is an upgrade. Sword upgrades, Magic upgrades, Life upgrades. I'm already aiming for a Sword upgrade system, where new swords give you extra capabilities, like armor piercing, better flying blade, etc. But having new swords doesn't mean Experience goes away. It's still in the works. If you have any insight on that particular subject, let me know.

The next few things I want to work on are more elaborate backgrounds, and the Overworld Map. The original game had bland backgrounds, if any, mostly because of a lack of space. I was reluctant to go the mapper conversion route before, because of all the troubles it can bring coding wise, but as I go on with features, it's more and more on my radar. Graphics in Zelda II are copied many many times accross the CHR banks, so it's basically wasted space. Having MMC3 (MMC5 is even better, but also more complex to implement, so I'm not sure) makes graphics manipulation more flexible and less wasteful. To be worked on.

Overworld Map is in the works. You have to find map pieces scattered around the world, and you can display the map when on the Overworld. You can only see the parts that you have collected so far. The map could show important places, like Towns and Palaces, possibly at the condition of possessing another item, like a Compass.

Midnight Metronome

I love collecting hearts to gain health. I think it was a mistake of the original game to just rely on life magic for health or even have it in the game. What about the life bar at the top. I think they should be hearts like in redux.


Because I decided to remove the lives system, it makes sense to balance the game in other ways. Falling in lava will result in losing an arbitrary amount of health and restart like you entered the room last. Having Small Heart drops is an additional way to regain health and hopefully that should make it less likely to be stuck in a situation where you have to grind for magic to cast Life (if you have the spell).

Another thing I want to implement is the possibility of having a reserve Fairy that will revive you when your Life meter goes empty. That's another way to make the game more fair. It would look something like that in the Pause Pane:

As for the hearts in the Life meter, it's not on my priority list for now, but I'm not saying no either. I need to focus on fundamentals with the time I have. It's nice to follow the tradition of other Zelda games, but as far as I remember, it requires extra tiles, so if I can afford them, I will consider adding this feature as a bonus.

Midnight Metronome

That sounds great and makes it more in line with the other zelda games.


This project has caught my interest & I believe it has ton of potential to be something much more greater than it already is so far,Im eager to what other stuff will happen to this project in future updates. :)

Ok Impala!

Quote from: Trax on May 31, 2022, 11:05:28 PM
Falling in lava will result in losing an arbitrary amount of health and restart like you entered the room last.

This! That would make the game a whole less punishing. I'm currently playing through Skyward Sword and noticed Nintendo decided to completely remove damage from lava. You just get teleported back to the start of the room. It's an important design decision, as it stimulates exploring and trying things. That way you can create more daring levels where players need to experiment how to get past certain obstacles. It would also fall more in line with modern games like Celeste and Rayman Legends.