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


I just saw this thread today and I just want to say that I really like the plan you have for this hack! Have you decided what to call it yet?

I also think it is nice that you are receiving feedback from Zelda II fans. I've beaten Zelda II many times and I love the game, though not as much as a kid due to how different it was from the original and getting pretty stuck right around that first major Death Mountain challenge to get the hammer. I would say though that first and foremost, unless you are trying to modify the existing game in a slight way to improve upon one aspect of it, I wouldn't worry about how close or how far you want to stray from the original mechanics of the game. People will be playing your "type" of hack to experience an all new way to play and an all new reason to play Zelda II again. So by that, I'd recommend going with whatever feels right to you.

Since you asked for opinions, even though I can appreciate the XP system of Zelda II, I never really "enjoyed" grinding. Most of the time I'd grind for a bit to cover some of the earlier levels that don't take much XP and then start completing Dungeons so that I could get a full level up by grabbing the crystal at the end maxing out the XP. I really think that taking that out of it and simply making more upgrades as far as items to seek out and explore would be much more interesting. You've already said that you will be expanding the world map, so there should be plenty more places to hide such items. Also, then you can have players really challenge themselves in extremely dangerous areas just to try and get to a weapon or armor upgrade that is meant for later in the game to try and achieve that reward early. In Ys for example, I *Always* risk my life in the mining cave where everything can one-shot me, in order to get one of the best shields in the game. I mean, why not? It's fun to challenge beyond what you are technically ready for!

As for Lives, I mean, sometimes Link just runs out of health and you need to count on those extra lives in order to  keep going. If that were expanded into extra health instead of "chances" at completing the goal you've sought out starting at full-life each time, I'm pretty sure it will greatly change the flow of how Zelda II is laid out.

Take for example this as a scenario:

Link can take 8 hits before dying or needing to start curing as of hit number 7 as he crossed a bridge with floating poison bubbles and other flying enemies and maybe a axe thrower at the end of it. Normally, this would be really hard to complete and if you died, you'd have to "GitGud" a few times to pass it. That can be a fun challenge to overcome, or it could be rather annoying.

If this was changed into say a longer life meter or less damage taken to the lifebar, let's say he had 14 hits now, it's much, much more feasible to pass this trial with the option of getting hit 14 times before death, but that might make it too easy. Then again, the fact that you are having to cure yourself and if you die even once, you're journey is over and you have to start over at Zelda's sleeping shrine, so maybe it would balance out in the long run. It's hard to say until you've tested the difficulty of the enemy placement.

Good luck on your project! Can't wait to see new updates for it!



Well, after quite some time, I managed to do a few things, but not as much as I'd hoped. So, again, sorry for the wait.

First, I had to put the "on-the-fly modification of Overworld Tiles" on the ice, because frankly, I struggled too much with it, and I had to go do something else before going crazy. Also, I think the idea was cool on paper, but the end result was relatively meh. I may return back to the problem later, but I'd give more chances to the Custom Tiles idea, which I already made work in the past. The other thing I feared is lag. I didn't experience any of it, as far as I can tell, but it could become laggy if too much work is needed every frame. It does produce a noticeably longer delay on the loading transition, but that is not important. All in all, I'll spend my time on more essential things.

Speaking of that, I spent already too much time on a new concept that existed in Zelda 1 : Trap Doors. I'm not sure if it's the correct name, because in real life, a trap door should be on the floor, right? But that's not the case. I'm talking about doors that shut behind you. Zelda 1 had them in spades, and you had to do something to make them open again, like killing all enemies or pushing a block. Some of these doors could not even be reopened, like a one-way entrance. Anyway, I also worked too much on that one, but even though it's not finished, I'm on my way to make it completely functional and make it work anywhere I want.

It looks like this :

I created my own data format to give every room the possibility to have either no door, one on the left, one on the right, or both. When you enter a room, there are a few frames where Link moves, but the player doesn't have full control of him. During these few frames, the code I wrote checks if the room has doors, and if it does, it draws one block every other frame, at the position desired. For now, the position is hard-coded, so if the ground is at another level, we will need to have provisions for that. I used the "Breakable Block" sound, which is played for 5 consecutive frames. I think it sounds good for a door, but it could easily be changed to something else. I initially tried the "Fire" sound, but I thought it was too subtle and quiet.

Not shown on the video is the equivalent for the Right Trap Door, which is a bit more complicated to code, because of the fact that Areas can have different widths, from 1 to 4 screens. So we have to use this information, conveniently stored in $D1, to select the correct position for drawing the tiles.

The major difficulty comes from the fact that we have to do two kinds of drawing when we want to change anything in the background, and that's applicable in every side-scrolling areas. The terrain in Level Data is made of blocks, 2x2 tiles. Each screen has 0xD0 tiles. Up to 4 screens. When you want to change something, you need to manually draw the 4 tiles that compose the block, AND you have to change the underlying block data. If you only draw the tiles, you will see the result, assuming the drawing occurs on screen and not in the "scrolling buffer", but as soon as you leave far enough, the tile will be erased by the scrolling mechanism, so when you come back, the old tile will be drawn again, because you didn't change the block data. On the other hand, if you only change the block data, and the tile is within the viewport, you will see no instant change, but when you go far enough and come back, the tile will be drawn as your changes dictated. And as if it was not enough, you also have to do some more math and bit manipulation to change the palette. That last one, I didn't do yet with my Trap Door mechanism, as the video demonstrates at the end. I draw blocks that are normally teal colored, but because the background color is set to grayscale, the instant drawing shows the tile in the wrong color. However, when I come back, the tile is redrawn using its natural color.

Confused much?

Anyway, there is more work to do, because to reopen the doors, you will need to kill all enemies in the room. The custom data I created will also contain an enemy counter, and every time you kill an enemy, this counter will decrease by one. Once the counter reaches zero, the doors will open. I think this mechanism will create a brand new dynamic in palaces (and maybe other places, who knows?) and force players to fight to the death to progress in the game. You will have to change the way you think about palace navigation.

So, what's left do do exactly?

- Make sure the Right Trap Doors work correctly, with all area widths.
- Make sure the custom data table has an enemy counter, and that some enemies (Elevator, for example) are "exempted" from the count.
- Make sure the door tiles have the correct color. If it reveals too hard to do, I could sacrifice this and just make sure the tiles have the same palette as the background.
- If time and motivation permit, add a third type of Trap Door (with the actual name), an horizontal one that blocks a hole in which you can fall.

Other than that, the name of the hack should contain Dark Fortress. Maybe Zelda II : Dark Fortress. Or maybe remove "Zelda" from the title, since she probably won't be part of the story at all. How about Adventures of Link : Dark Fortress ? Or something else, if you have any ideas. I also started working on another Overworld Map, but I won't reveal each one of them, because I can't spoil everything. All I can say is that it will involve a very big mountain.

Also, I decided that the concept of lives are officially out. There will be several changes to make up for it. I'm not fixed on how many mechanisms will change, because each time the game has to be reprogrammed represents quite a challenge. A quick list: no more dolls, small heart items, no instant kill from falling into lava, restart from different places after death, more fairies, enemy damage balancing and reserve fairy.


Damn, that is some cool stuff.
One of the things that always turned me off of Zelda II was how little of the first game seemed to be brought over.
So the more stuff from the first game that could be reimagined for this new perspective the better.


Happy to hear your still at it trax. The trap door idea is very cool wondering if your planning to make a palace around this concept or sprinkle it hear and there. I've had to drop a lot of ideas after either not being able to get them to work or getting lower then expected results so I get dropping the overworld concept you had. While I think the overworld is one of the most least interesting things in Zelda 2 I'm sure you'll find way to make it fun and better i.e. the ice overworld idea you came up with. 


I highly recommend using Zelda II Redux as a base. Or at least apply the same graphical and gameplay changes.


Redux is a nice project, in which I participated, but many of the features in it will be done differently in Dark Fortress. Plus, the goal of Redux was not to be a full fledged hack, but mostly a bunch of small modifications of what was considered irritating in the original.

Obviously, I will have to balance many things in the game, like enemy damage and experience. Actually, about experience, I want to go one step further, and make experience gains dynamic. For example, once you reach a certain level, or a certain region further in the game, enemies will start giving less experience. Hopefully, it will make grinding less attractive and encourage the player to go forward, explore new territories and fight stronger enemies. Enemy drops may also be more dynamic.

I also plan to make multiple spawning points for when you reload the saved game, or after death. Similar to A Link to the Past. Restarting at the beginning of palaces is not settled yet, but not out of the question. The HUD will be changed, but I have not decided on the layout yet.


After quite a long delay and being super busy with other projects, I found some time to work on basic features of the hack. Sorry for the wait. The project is not dead.

I replaced the "Ready..." screen (where we see a Link sprite and remaining lives) with a menu where you can choose from various locations in the Overworld that were previously saved. It works similarly to the Owls in Majora's Mask, and the "Start From" menu is similar to ALttP. You find the location, and when you reload your game later, or get a Game Over, you can start from different locations. The exact mechanism by which you will save those locations is not yet determined, but it will probably be a simple dialog, or maybe hit the statue with your sword, something like that. For now, the menu works correctly, and the loading process seems to work with the original ROM structure. I still need to see how it will react with the new ROM structure (16 banks, alternate way of loading maps and enemy data, etc.).

I think I will stick to 4 different places to start from, but it could be extended as needed. As the game becomes less and less linear, more starting locations will prevent excessive travel for players without compromising the exploration aspect of the game. The mechanism is not 100% as I want it, only because Link enters the area from the right, and I would like to have him appear at the middle, like in the original game in North Castle. Or maybe have him fall from the top, like he does after a "falling" animation. My current code seems to be working with any type of area: Overworld, Town or Palace, which is also interesting. Demo video:

So, obviously, the destinations are not shown, the goal is to show that you can start from different places. Also because I don't want to reveal everything. I'm not sure if North Castle will have this name, but the 3 other places will exist. One of which you already saw the Overworld map.

One of my attempts at making the Angel Shrine area with slightly different graphics:

And, second thing. Lives are officially out of the game, maybe I already said that before. The game will be balanced accordingly. The Life spell will still be there, but its effect may change a bit. Falling into lava will only deal damage and bring you back to the side of the area (as if you were entering it), but there could be a few dangerous areas in the game where a fall will be fatal. And of course, the small damage from a fall can still kill you if your life meter is low enough.

But more importantly, Small Heart Item. Enemies can now drop a Small Heart Item, that you can pick by touching it. Link flashes briefly and recovers a small amount of life (that value will be tweaked). This item replaces the now obsolete Link Doll item, which gave an extra life.

Items dropped by enemies are bound to a random pick from a list of 8 values, so Magic Jars and Experience Bags are still there as possible drops. Demo video:

So that's it for now. Let me know what you think of all this.


Looks excellent, Trax!  The angel statue appears cool at first glance, but when really looking at it, it's hard to tell what it is.  Seems too detailed compared to its surroundings.  Maybe it could have features that are more easily recognizable, or a more simplistic design.  Unless that's the start of a complete graphical overhaul?

Quote from: Trax on October 29, 2019, 12:56:00 AM
And, second thing. Lives are officially out of the game...
Awesome!  I really hoped you'd do this.  Can't wait to see it in action.

If you need help with anything, even simple things, I'd be willing to help out.  Just let me know.  :)


Yeah, it's not very good. I tried to use an image of a bronze statue from the Internet as a model, but the end result is meh. I certainly need help in the graphics department. But yes, I intend to have lots of graphics modified. Right now, I want to focus on the basic mechanisms of the hack, the things that are essential. My complete "to do" list is so large, some low-priority ideas are going to be ditched.

Next, I will use my time on the Pause Pane and the Selection Screen. The Pause Pane will have 8 spells, 8 items, counters for pieces of heart and magic containers, sword type and one or two surprises.


When you need help for sprites, dont hesitate to ask.

I have never played Zelda 2, but I would like to play a cool hack, with new ideas and graphics.


More progress on the hack. New Pause Pane and Pieces of Heart and Magic Containers.

The new mechanics is now working and tested. Pieces (1/4) of Heart and Magic Containers. You need 4 pieces of each to make a full container and increase the corresponding bar. When this happens, both Link and the decor flash briefly, like when you pickup an item. I created new variables in VRAM (Cartridge RAM) that keep track of the count of each type. These values are to be saved along with the rest of the data in the saved game file.

If Link starts with 3 units of Life and Magic, it means 5 x 4 = 20 pieces for each, for a total of 40 items to find. This means more rewarding exploration of secret caves and spots in the Overworld.

The Pause Pane has also changed a lot. Spells now take one line each, instead of having an empty line every other row. This leaves space for more information to be displayed. The first section is not completely set. Keys will be moved there, and whatever takes the place of Crystals (maybe I will keep the same name) will be shown there, too. I'm planning to make a reserve Fairy that would be shown in this section, but nothing confirmed. Items in the third section will be different colors, and will change color (or maybe even appearance) as they are upgraded. The Cross will be replaced by something similar, and the Magic Key will be removed.

The second section shows Sword Level, Heart Container pieces and Magic Container pieces. You can see that the Sword Level is at 0, but it's only a placeholder for now; the game will never have a "level 0" sword. I made new sprites for Heart and Magic containers. The only thing I need to correct is that the sprite of the dropped Magic Container doesn't have the correct palette code, and that's why it's shown as yellow on the game field, but blue on the Pause Pane. I want it blue everywhere. Other than that, I'd like to know what you guys think of these three new sprites. I made a few iterations of the Heart Container, and I'm not completely set on its appearance. See below:

The Sword Level sprite in the Pause Pane implies that there will be more than one sword to find in the game. Attack levels will still exist, independent of the sword you're carrying. Stronger swords will deal more damage, and provide other bonus powers. It should be fun. Here's a video of the Heart and Magic Containers and the Pause Pane in action:

That's it for now. Looking forward to your feedback...


Love all the stuff your doing here, but I would say the heart and magic drops look to disproportionate to link. I feel like thy should be smaller. This could be just me and being use to the original game. 


Well, of course, the gameplay won't be like that, I only changed the drop items probability table and drop frequency to quickly collect these items and show how it works along with Pause Pane new display. These items will be hidden in caves and palaces, not be dropped by enemies. Unless I can make the bosses drop them, or something. The sprites have roughly the same size as the original. The normal items, Red/Blue Jars and Experience Bags, and now Small Hearts, are still going to be dropped by enemies.


Sorry, thought you were using these to replace the regular drops. My bad.

I like the first Heart out out of the 4 above for whatever that's worth.


What about the traditional quarter heart display?  It wouldn't require too many tiles.


Well, I prefer to keep tile usage to a minimum. Having quarters for each step would "waste" tiles for something that is not that important. That's why the numbers are there, and numbers are already taking space in the graphics banks, so there's nothing lost. It would also make the code more complicated.


I'd go with the standard Piece of Heart appearance which is the second one.


Looking back at your new recovery heart item, I think it would be better without the flashing effect on Link.  There also seems to be a bit of a "freeze" when collecting them.  Is this due to the flashing?  Also, when jumping to collect them, it seems unnatural for Link to suddenly drop.  It'd be best if they didn't affect Link in any way, other than healing him.

Bouncing on them with the downstab looks fun, though.  :)


Having heart pickups in Zelda 2 is awesome. I always thought the game should have them. The way you implemented it in your video is fine. Looking good.


There are 3 elements to the Small Heart pickup. Link's velocity is set to 0 (X and Y), the Spell sound is played and Link flashes for a few frames. The reset of velocity is pretty much me doing nothing, since it's what happens naturally when you get an item. I could add a condition so that only Small Hearts do not behave like that. I consciously added sound and flashing because they are two hints that you got the heart, other than the Life meter going up.

I could remove the velocity reset, because it does feel weird, especially if you are in mid-air. The sound is the spell casting sound, so I don't know if it's confusing for some people. I could use something else, like the same sound as when you take a magic jar. And if I remove the flashing, we lose the visual hint. I made it last 1E frames = 30 decimal = 0.5 second. I'll try a few combinations and find some balance.

Next I'm going to continue working on the Game Selection screen, which does not really involve "selection", except maybe the difficulty levels. The title is "Game Stats". Because of the modifications and expansions I have to make to the various data tables that are saved between plays, saving will be mostly automatic. There won't be a "Save / Continue" menu at Game Over.