News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Poll

What should the new name for the "Spell" spell be?

Reveal
5 (21.7%)
Unveil
4 (17.4%)
Enigma
9 (39.1%)
Expose
5 (21.7%)

Total Members Voted: 23

Author Topic: Zelda II Redux  (Read 142598 times)

ShadowOne333

  • Hero Member
  • *****
  • Posts: 1225
    • View Profile
Re: Zelda II Redux
« Reply #380 on: February 07, 2019, 01:38:23 pm »
Oh nice, IcePenguin!
So basically this allows for:
  • Keep current experience after a Game Over -> Continue
  • Restart at the same screen that you lost your last life on after a Game Over -> Continue
Am I correct?

If that's so, not to sound rude nor ungrateful, but I have a little shadow of a doubt about implementing it.
I still want players to get somewhat punished for getting a Game Over, and starting at the very screen they died in after a full Game Over seems like quite a push on the easier side (not a life-loss, for a single life spawning on the same screen is acceptable). Same for the experience loss after Game Over. I feel like the restart at the beginning of the palace is a good balance between making it just the right amount of difficulty.

Only thing about the Experience loss is that if it's applied only during a Game Over, it's fine, as long as they maintain the experience only after a life loss, not a Game Over. :P


Still though, if I get feedback towards it, I might change my mind and actually implement it.

But know what?
I think at the moment I will have this hack as an Optional patch for those that want an easier time on Zelda II for sure. So this will still get implemented, but not obligatory for those that still want a challenge :)

I really appreciate all of your help, IcePenguin! And from all of those that have been involved during the development of this hack. Time is nigh, we are almost there for a full release! :D

Chicken Knife

  • Sr. Member
  • ****
  • Posts: 296
    • View Profile
Re: Zelda II Redux
« Reply #381 on: February 07, 2019, 01:41:49 pm »
I agree with ShadowOne333 that a penalty for loss of life is important, especially since restarting in palaces was implemented. Based on my last playthrough of this hack, I found myself hitting max levels before the end with very little grinding so I would be weary about anything that would cause experience to accumulate at a faster rate still.

TheZunar123

  • Full Member
  • ***
  • Posts: 242
    • View Profile
Re: Zelda II Redux
« Reply #382 on: February 07, 2019, 02:56:43 pm »
Would it be possible to have a middle ground, like losing half your EXP if you game over? That could be a nice compromise.
Speedrunner and Let's Player.
www.youtube.com/ZunarSR

Vanya

  • Hero Member
  • *****
  • Posts: 1489
    • View Profile
Re: Zelda II Redux
« Reply #383 on: February 07, 2019, 05:11:01 pm »
I really hate losing XP as a penalty.
I find it extremely annoying and almost as bad as loosing a save file.
In fact it's one of the things that has always turned me off to Zelda II.

I don't mind having to start at the first screen of the Palace, that's not unlike some later games in the series, but an XP loss on top would really chap my a$$.

So if it is in as an optional patch, I will definitely use it.

IcePenguin

  • RHDN Patreon Supporter!
  • Sr. Member
  • *****
  • Posts: 265
    • View Profile
Re: Zelda II Redux
« Reply #384 on: February 07, 2019, 05:31:02 pm »
If that's so, not to sound rude nor ungrateful, but I have a little shadow of a doubt about implementing it.
I still want players to get somewhat punished for getting a Game Over, and starting at the very screen they died in after a full Game Over seems like quite a push on the easier side (not a life-loss, for a single life spawning on the same screen is acceptable). Same for the experience loss after Game Over. I feel like the restart at the beginning of the palace is a good balance between making it just the right amount of difficulty.

Hey no worries!  :)  Something like that would be good as an option since I'm sure there would be plenty of people who'd like to keep their exp.  (like Vanya!  lol)  It is also good to have some penalty, and I actually prefer more challenge myself, ha ha.  It's just that over the years, I've heard people mention taking issue with that, and wondered if it'd be possible to do anything about it.  I supposed I could make an ips patch with those changes, but if you did, then I wouldn't have to!   :laugh:

Also, just to be clear, I love the balance of the restart in palace hack.  njosro did good with that one.   :thumbsup:

Would it be possible to have a middle ground, like losing half your EXP if you game over? That could be a nice compromise.

It'd be easy to have an decremented exp penalty upon game over, since the game can already reduce the exp from touching certain enemies.  Upon game over, simply load a value into the RAM address $5E8, which subtracts from the current exp.  Since it's single byte value, up to FF or 255 exp penalty.
« Last Edit: February 07, 2019, 05:38:44 pm by IcePenguin »

ShadowOne333

  • Hero Member
  • *****
  • Posts: 1225
    • View Profile
Re: Zelda II Redux
« Reply #385 on: February 07, 2019, 05:56:59 pm »
As promised, here are the optional patches in the meanwhile, they will be packaged alongside the main hack once it's out :)
They should be compatible with a Zelda 2 Redux patched ROM, so it doesn't matter if you already have your ROM patch, applying any of these two over it should work nicely :)
« Last Edit: February 08, 2019, 12:11:46 pm by ShadowOne333 »

IcePenguin

  • RHDN Patreon Supporter!
  • Sr. Member
  • *****
  • Posts: 265
    • View Profile
Re: Zelda II Redux
« Reply #386 on: February 07, 2019, 06:55:19 pm »
Very speedy!  One thing I didn't test with my restart in room hack, is if njosro's restart in palace hack conflicts with it.  If mine is patched over that, is still works fine?

Also, I have yet another suggestion.   :laugh:  It's a simple one, though, but makes a casting magic a little less... tedious?

By default, you have to open the inventory menu every time you want to cast a spell.  Even if the spell you want to cast is already selected!  One spell in particular, that this is quite troublesome, is the life spell.  When you are low on health, you'd have to:  Pause > Heal > Pause > Heal, etc.  Even when entering a new screen, you'd have to open the menu again, just to cast a spell.

At 0xDE4, change F0 to E0.

This will allow you to cast your selected spell repeatedly, without having to pause it every time.  You'll just need to be aware of the spell you have selected, so you don't waste magic casting stuff like shield twice, ha ha.

I used this in Shadow of Night, and it worked with no issues.



February 08, 2019, 02:15:11 am - (Auto Merged - Double Posts are not allowed before 7 days.)

I looked into the pausing display for the world map, and found a solution.  It doesn't add a text display, but it changes the palette to black and white, when you pause.  (I linked a video below, so you can see it)  I hope you still have some free space to use.   :P

First, let's go to 0x2277.  You'll find the following code:

EE 24 05 60

This increments the status of the pause menu at RAM address $524.  For the world map, it is set to 02.  Let's go to some empty space so we can enter our new code.  Let's do a jump.  Change it to:

4C B0 A8 60

At 0x28C0 paste the following code:

EE 24 05 AD 27 07 F0 01 60 A9 19 8D FE 00 60

Notice how we still keep the increment for the pause status (EE 24 05).  Plus, we are gonna do a branch by checking the status at RAM address $727.  00 is for world map, 01 is for side scroll areas.  If it is equal to 01, nothing happens and it returns from subroutine.  If it is equal to 00, it changes the palette of the world map.  (to put it simply)  At RAM address $FE, changing this value to 19 makes everything black and white.

Next, let's go to 0x2348.  There you'll find:

A9 00 8D 4C 07 8D 25 05 8D 24 05 8D 67 05 60

This is part of the code for un-pausing the game.  We are gonna relocate this code to some empty space so we can add onto it.  Let's do another jump!   Change it to:

4C D0 A8 EA EA EA EA EA EA EA EA EA EA EA 60

At 0x28E0, paste the following code:

A9 00 8D 4C 07 8D 25 05 8D 24 05 8D 67 05 A9 18 8D FE 00 60

With this, we just added a bit of code at the end (A9 18 8D FE 00) to revert the palette back to normal when he game is un-paused.  Posted a video to show it in action.  If you don't like the black and white effect, I suppose you could use this hack as a base for implementing a text display.  Up to you!  :)

Hope you like it!

Video:
https://youtu.be/b5JgZJnPbWI


« Last Edit: February 08, 2019, 02:22:58 am by IcePenguin »

TheZunar123

  • Full Member
  • ***
  • Posts: 242
    • View Profile
Re: Zelda II Redux
« Reply #387 on: February 08, 2019, 11:27:32 am »
Oooh, I like that ^

Reminds me of that section in Wind Waker where everything is frozen in black and white, then turns to color after getting the Master Sword.
Speedrunner and Let's Player.
www.youtube.com/ZunarSR

ShadowOne333

  • Hero Member
  • *****
  • Posts: 1225
    • View Profile
Re: Zelda II Redux
« Reply #388 on: February 08, 2019, 12:51:08 pm »
Oh wow that's a really nice!
Gotta say that such idea is amazing, and it could really help to differentiate between Pause and non-Pause in the Overworld. Also, that code could help to make a jump or branch to a text parsing routine for the letters down the line, perhaps :P

I already implemented it, but for some reason I do not get the same grey colours you are getting.
I am getting some really vibrant white instead of the more toned down grey shades you get in the video.

You can see a comparison here:


I even tried to make a quick test by changing RAM address $FE from $18 to $19 in a clean ROM, and I get the exact same result.
What could be the reason I get those colours instead of the greys?
I would like it to have the same shades of grey instead of the vibrant white, like in the vid.

IcePenguin

  • RHDN Patreon Supporter!
  • Sr. Member
  • *****
  • Posts: 265
    • View Profile
Re: Zelda II Redux
« Reply #389 on: February 08, 2019, 01:42:37 pm »
I already implemented it, but for some reason I do not get the same grey colours you are getting.
I am getting some really vibrant white instead of the more toned down grey shades you get in the video.

Hmm, that's interesting.  Perhaps it's an emulator thing.  Which emulator do you use for testing?  I can look into an alternate solution, that won't have such a differing result. 

Also, I didn't explain this in the last post, but RAM address $FE acts as sort of a filter for the entire game.  Think of Pokemon Red and Blue.  One has a red tint, and one has a blue tint.  In the case of Zelda II, 18 is the default.  38 = red tint.  58 = green tint.  78 = orange tint.  98 = blue tint, etc...  For testing, change these to 19, 39, 59, 79, or 99, to easily see the difference between them.  This affects the entire game, not just the world map.


Oh, and I have some "constructive" criticism for your grass animations on the world map.  When animating with such few pixels, it is good to not have more, or less, quantity of certain pixels, to avoid a "flashing" effect.  While subtle, your grass does have this because the last 2 frames use less pixels than the first two, making the lighter color more dominant.  It may go unnoticed, but for me it is quite noticeable.  Honestly, this is such a minor detail. 

I whipped up an animation that alternates between which blades of grass move, but still keeping an equal number of pixels, to avoid any "flashing" effect.  The alternating blades of grass also gives it a bit more fluidity.  You may be happy with your current animation, and that's totally cool, but I just wanted to give some feedback on that.  ;)  In the screenshot, the top row is your animation, and the bottom row is my example:




Oooh, I like that ^

Reminds me of that section in Wind Waker where everything is frozen in black and white, then turns to color after getting the Master Sword.

Oh yeah!  That's one of my favorite moments in all of Zelda!  :)
« Last Edit: February 08, 2019, 01:52:07 pm by IcePenguin »

ShadowOne333

  • Hero Member
  • *****
  • Posts: 1225
    • View Profile
Re: Zelda II Redux
« Reply #390 on: February 08, 2019, 02:56:43 pm »
I'm using FCEUX 2.2.3 for Linux. :)
I do get a strong white colour, but I think I found a nice workaround for this.

Maybe I can go for either B8 or F8 instead of 19.
It might not be the desired effect, but it can work.
By changing it to either B8 or F8 (I think F8 looks the best), it creates some sort of darkened image of the original palette, and this can work as a way to tell the player that the screen is paused, instead of the grey one (since it looks too bright in my tests).

What emu are you using?
Also, just edited the grass with the animation you suggested :)
Looks quite good! I'll leave it like that.

IcePenguin

  • RHDN Patreon Supporter!
  • Sr. Member
  • *****
  • Posts: 265
    • View Profile
Re: Zelda II Redux
« Reply #391 on: February 08, 2019, 03:50:06 pm »
I'm using FCEUX 2.2.3 for Linux. :)
I do get a strong white colour, but I think I found a nice workaround for this.

Maybe I can go for either B8 or F8 instead of 19.
It might not be the desired effect, but it can work.
By changing it to either B8 or F8 (I think F8 looks the best), it creates some sort of darkened image of the original palette, and this can work as a way to tell the player that the screen is paused, instead of the grey one (since it looks too bright in my tests).

What emu are you using?
Also, just edited the grass with the animation you suggested :)
Looks quite good! I'll leave it like that.

Tried out the B8 and F8.  F8 is the same as 18, do you mean D8?  I think B8 looks the best since everything is slightly darkened.  With D8, most things become darker, but the grass stays the same.

Well, here is another way you can do it.  With this, the screen will turn all black when you pause the game, instead of black and white.  It uses the RAM address $726, which is used for making the screen turn black when transitioning from world map to side scrolling.

Looking back on the code I posted before, make the following changes.

At 0x28C0 paste the following code:

EE 24 05 AD 27 07 F0 01 60 A9 19 8D FE 00 60

Instead of A9 19 8D FE 00, enter A9 01 8D 26 07 instead.  Same for the last part, too.

At 0x28E0, paste the following code:

A9 00 8D 4C 07 8D 25 05 8D 24 05 8D 67 05 A9 18 8D FE 00 60

Instead of A9 18 8D FE 00, enter A9 00 8D 26 07 instead.  This will turn the screen black when you pause.  Might be a more desired result instead of the bright white - at least until we can find a way to make the grey work consistently, or something.  Which I hope there is a solution, cause I quite liked the grey.  I think the black screen is pretty good, too, though.  :)

I used Jnes for testing and recording that video.  Just downloaded your emulator, and I had the same result you did.  So it must be something to do with the emulators render the graphics.

Also, I'm glad you like the grass!

« Last Edit: February 08, 2019, 03:59:15 pm by IcePenguin »

ShadowOne333

  • Hero Member
  • *****
  • Posts: 1225
    • View Profile
Re: Zelda II Redux
« Reply #392 on: February 08, 2019, 05:40:20 pm »
Oh my, that black screen is nerve wrecking. :laugh:
It makes me think the game crashed or something haha.
Seeing the full screen go all-black is sure a nice touch, although I feel as if B8/D8/F8 still look better to give a darkened look for a pause screen.

F8 is quite dark compared to 18, maybe it's the differences in emulator screwing us yet again :P
I will keep this hack on the backlog for sure, but at the moment I'll keep the pause with B8, that one should work nice while we figure out how to parse text on-screen with it. :D

Many, many thanks, IcePenguin!

IcePenguin

  • RHDN Patreon Supporter!
  • Sr. Member
  • *****
  • Posts: 265
    • View Profile
Re: Zelda II Redux
« Reply #393 on: February 08, 2019, 06:09:20 pm »
The F8 value works now.  I just made a dumb mistake when I went to test it earlier, ha ha.  It is quite dark!  Think it works well.

Unfortunately, I couldn't find that "pause" display hack JaSp did many years ago.  It might be on my old computer like all my old hacking stuff.  (its in storage  :()  Anyway, glad to help!   :thumbsup:

ShadowOne333

  • Hero Member
  • *****
  • Posts: 1225
    • View Profile
Re: Zelda II Redux
« Reply #394 on: February 08, 2019, 08:39:03 pm »
The F8 value works now.  I just made a dumb mistake when I went to test it earlier, ha ha.  It is quite dark!  Think it works well.

Unfortunately, I couldn't find that "pause" display hack JaSp did many years ago.  It might be on my old computer like all my old hacking stuff.  (its in storage  :()  Anyway, glad to help!   :thumbsup:
Ah glad you liked it!
Using F8 does look nice :)
I'll use that one in the meanwhile.

Hope you can find those old notes somewhere, and if not, I know there can be a way to do so, I just need to study the code a bit for the sidescroll pause to rework it for letters :p

I have updated the IPS for download, it's in the same link as always if you want to try it out with the latest changes :)

IcePenguin

  • RHDN Patreon Supporter!
  • Sr. Member
  • *****
  • Posts: 265
    • View Profile
Re: Zelda II Redux
« Reply #395 on: February 08, 2019, 08:50:01 pm »
Does this count?   :laugh:

Spoiler:

ShadowOne333

  • Hero Member
  • *****
  • Posts: 1225
    • View Profile
Re: Zelda II Redux
« Reply #396 on: February 08, 2019, 08:51:10 pm »
Does this count?   :laugh:

Spoiler:
Haha indeed!
The Adventure of Pause! ;D

Trax

  • Hero Member
  • *****
  • Posts: 502
    • View Profile
    • Trax ROM Hacking
Re: Zelda II Redux
« Reply #397 on: February 09, 2019, 01:03:21 am »
If you want to draw on screen, your best bet is to use the game's mechanisms for writing to the PPU. What I call "PPU Macros" are sequences of bytes written in RAM $302, $363 or $3A4. The data model is:

AAAA NN DD ... FF

AAAA = PPU Address
NN = Number of bytes to process
DD = The data itself
FF = End byte (I think you can chain more than one command)

In the case of the "PAUSE" drawing, NN would be 05, followed by the 5 bytes for the text tiles. Then, you have to find where exactly you want to print those tiles, in the correct name table offset, which is the AAAA part of the macro. This one likely involves some convoluted arithmetic, because of the scrolling and whatnot. RAM addresses $79-$7A are used to draw the Overworld tiles, so they may come handy.

IcePenguin

  • RHDN Patreon Supporter!
  • Sr. Member
  • *****
  • Posts: 265
    • View Profile
Re: Zelda II Redux
« Reply #398 on: February 09, 2019, 03:36:16 am »
So, I had this idea...  The final boss of Zelda II is Shadow Link, right?  So why not make him subtly more relevant (what? ::)) during the game?  This was just a silly thought at first, but it turned out pretty cool, haha.  All I did was add an extra visual cue for when you pause the game.  Link cannot escape his shadow!

Pausing gif:
Spoiler:

If you wanna use it, just change the following code from my previous post:

At 0x28C0 paste the following code:

EE 24 05 AD 27 07 F0 01 60 A9 19 8D FE 00 60

Paste this code instead:

EE 24 05 AD 27 07 F0 01 60 A9 F8 8D FE 00 AD 02 02 F0 06 A9 41 8D 02 02 60 A9 01 8D 02 02 60

Basically it adds another branch, checking the direction that Link is facing using the sprite priority, and then changing his palette black.  It has to do this check, so he faces the correct direction when pausing.


If you want to draw on screen, your best bet is to use the game's mechanisms for writing to the PPU. What I call "PPU Macros" are sequences of bytes written in RAM $302, $363 or $3A4. The data model is:

AAAA NN DD ... FF

AAAA = PPU Address
NN = Number of bytes to process
DD = The data itself
FF = End byte (I think you can chain more than one command)

In the case of the "PAUSE" drawing, NN would be 05, followed by the 5 bytes for the text tiles. Then, you have to find where exactly you want to print those tiles, in the correct name table offset, which is the AAAA part of the macro. This one likely involves some convoluted arithmetic, because of the scrolling and whatnot. RAM addresses $79-$7A are used to draw the Overworld tiles, so they may come handy.

Hmm, interesting.  Thanks for the info Trax!  :)
« Last Edit: February 09, 2019, 03:41:38 am by IcePenguin »

ultimaweapon

  • Full Member
  • ***
  • Posts: 180
    • View Profile
Re: Zelda II Redux
« Reply #399 on: February 09, 2019, 04:56:36 am »
So, I had this idea...  The final boss of Zelda II is Shadow Link, right?  So why not make him subtly more relevant (what? ::)) during the game?  This was just a silly thought at first, but it turned out pretty cool, haha.  All I did was add an extra visual cue for when you pause the game.  Link cannot escape his shadow!

Pausing gif:
Spoiler:

If you wanna use it, just change the following code from my previous post:

Paste this code instead:

EE 24 05 AD 27 07 F0 01 60 A9 F8 8D FE 00 AD 02 02 F0 06 A9 41 8D 02 02 60 A9 01 8D 02 02 60

Basically it adds another branch, checking the direction that Link is facing using the sprite priority, and then changing his palette black.  It has to do this check, so he faces the correct direction when pausing.

That was the best one yet Ice Penguin. I think I even want to use that one.

I like all the ideas being shared back and forth.
Trust in the Heart of the Cards