Romhacking.net

Romhacking => ROM Hacking Discussion => Topic started by: tog on July 09, 2012, 01:48:38 pm

Title: The Difficulty Settings Project
Post by: tog on July 09, 2012, 01:48:38 pm
Hello,

I've been contemplating this for a quite a while now, and feel I should finally check this.
 
As most of you know, the difficulty of many NES games can be very high sometimes.  It is extremely difficult to enjoy many games that would otherwise be enjoyable simply because of the difficulty of them.  Oftentimes, it is next to impossible to get modern gamers to enjoy these games because of that.
 
So, here is my question.  Would anyone be interested in working on a project adding difficulty settings to games?  Or, at least slightly modifying games and releasing the hacks?
 
This does not need to be an in-depth, complex project at all.  Simply modifying a few formulas could give wondrous results.
 
Here are some simple examples of what could be done:
 
For the following series, modify a couple of formulas so, in easy mode, you do double damage to enemies and only take half damage from enemies.  In medium mode, have the amounts changed by 50%.  This could be done in the Double Dragon series, the Ninja Gaiden series, the Castlevania series, and the TMNT series.
 
Rad Racer-double the racing time you are given in easy mode and increase it by 50% in medium mode.
 
The general idea would be to have a difficulty level similar to Super Mario Brothers 3, where the game starts off easy and becomes more challenging as the game progresses on, but never becomes so difficult as to become frustrating.
 
Is there any interest in working on such a project?  How could something like this get started?

Thank you.
Title: Re: The Difficulty Settings Project
Post by: snarfblam on July 09, 2012, 06:45:04 pm
It sounds like and interesting idea, and probably easy to pull off. Do you have any asm hacking experience?
Title: Re: The Difficulty Settings Project
Post by: tc on July 09, 2012, 11:23:47 pm
Goodness. Awful difficulty balance was huge then. I try to not even bother with TMNT 1 or Megaman 1 more than necessary. So much potential marred by frustration.

Yet Megaman 3 got broken in the other way. All sorts of tricks to become too easy. Jumping to avoid Rush Jet energy usage. Menu glitch letting you unlock some powers when it shouldn't be possible. One hit kill final boss(!). Overpowered Shadow Blade in places. Controller two codes...
Title: Re: The Difficulty Settings Project
Post by: tog on July 10, 2012, 01:17:07 pm
snarfblam,

No, I do not have any experience in this area.  This is entirely new to me.  Is anyone able to help out with this?  Like I mentioned in my initial post, I don't think this would be too complicated since we are just tweaking a few formulas or changing a few values in each game.

tc,

Yes, I completely agree with you there.  That is the exact idea behind this project.  Let's balance the difficulty so games that are too frustrating could become enjoyable.  Imagine if these otherwise great games could become playable!
Title: Re: The Difficulty Settings Project
Post by: Trax on July 11, 2012, 01:15:42 am
The complexity comes from the fact that you have to FIND these values and tweak them in a coherent way. Again, it's a good idea, but I doubt the logistics of the concept would be more than a grouping of IPS files for various games, that focus on changing the difficulty of games through ASM hacking. If there was a piece of software for that, it would be the ASM equivalent of a tile editor. And even then, I'm stretching quite a bit, since a tile editor has some universality to it, whereas changing the difficulty in a game (without changing anything else) is game-specific in an absolute way. No two games have the same code and variables...

In other words, if you want to change the difficulty in a game, you need to know the game quite well, something that a program cannot do by itself...

I already worked on some difficulty settings in a few games, and they are all games of which I have good knowledge because I hacked into them a lot. This includes Zelda II (see this video (http://www.youtube.com/watch?v=L8l0dXGaKzI)) and Contra (see my last demo (http://www.romhacking.net/forum/index.php/topic,13455.0.html)). I'm working on including many difficulty settings in a single ROM. Each time you complete the game, it becomes increasingly difficult...

Finding variables in hundreds of bytes of code is substantially more complex than finding graphics, which are often neatly placed in banks without any need to search...
Title: Re: The Difficulty Settings Project
Post by: tc on July 11, 2012, 06:30:27 am
What. Zelda II, HARDER??  :o

I guess to each his own...
Title: Re: The Difficulty Settings Project
Post by: Garoth Moulinoski on July 11, 2012, 08:41:22 am
What. Zelda II, HARDER??  :o

I guess to each his own...

Zelda II wasn't all that hard, actually. It starts off a little overwhelming, but once you get the hang of it, and once you realize that it is an RPG masked as a platformer, you'll realize that level grinding helps you out a lot. I know that doesn't sound too good, and it would be one of my criticisms of the game (but then again, just what RPG didn't rely on level grinding back in those days?), but it's really only hard in the beginning, when you're still trying learn the ropes and grind for a level or two.

I actually can beat Zelda II nowadays, using no guide and without freaking out- A stark contrast from when I first tried my hand at it, where I was just dying all the time, and I had to keep peeking at a map because I kept getting lost.

I don't really know what I'm trying to prove here...

Anyway, project sounds like a good idea! Some games really are quite difficult for the average player (that includes me), but a lot of those are also hailed as classics.
Title: Re: The Difficulty Settings Project
Post by: tog on July 11, 2012, 01:24:55 pm
Trax,

A large part of your explanation was kind of what I was thinking:  how to find these values?  But, that isn't necessarily the only way to do this.  What if the formulas could be changed?  For instance, change the damage calculation to double the damage you do to enemies and cut in half the damage enemies do to you?  Again, this is completely new to me.  How can this be done?

Does anyone know where I can find this information for the games I mentioned in my original post?

If actually adding difficulty settings to the games is too much work, that is okay.  Let's just release an ips file for each game that balances the difficulty.  That would still work well.
Title: Re: The Difficulty Settings Project
Post by: Bregalad on July 11, 2012, 02:35:45 pm
Quote
I try to not even bother with TMNT 1 or Megaman 1 more than necessary. So much potential marred by frustration.

Yet Megaman 3 got broken in the other way. All sorts of tricks to become too easy. Jumping to avoid Rush Jet energy usage. Menu glitch letting you unlock some powers when it shouldn't be possible. One hit kill final boss(!). Overpowered Shadow Blade in places. Controller two codes...
Yet I found Mega Man 3 harder than MM1. MM3 is easy at first but then you have to beat MM2's ghost bosses, and welcome to hell. To each their own I guess....
Title: Re: The Difficulty Settings Project
Post by: snarfblam on July 11, 2012, 05:38:48 pm
Does anyone know where I can find this information for the games I mentioned in my original post?

If actually adding difficulty settings to the games is too much work, that is okay.  Let's just release an ips file for each game that balances the difficulty.  That would still work well.
The only way you're likely to find this info for most games is by hacking them with a debugger, which requires experience. How hard that will be depends on the game. Some will be simple, some will be hard.

Creating a separate IPS for each difficulty level would be the easiest way to go about it. If you want to add difficulty options to a game, you have to muck around in the game's menu or title screen code and add the options. Certainly not trivial. Then you need to modify code for when the player gets hurt or hurts enemies (or whatever the case may be) to behave dependent upon the chosen difficulty setting, also not trivial.

So at any rate, each game would be a project in and of itself. If you want to cover a decent number of games, you would probably need to form a group with at least two or three hackers willing to commit to a long term venture.
Title: Re: The Difficulty Settings Project
Post by: Trax on July 11, 2012, 11:22:03 pm
What. Zelda II, HARDER??  :o

With my video demo, I demonstrated the potential of ASM hacking to make a game more difficult and more random. But, it also means that the variables I tweaked and the code I added to the original game can be used to make the game easier. It works both ways...

Quote
Does anyone know where I can find this information for the games I mentioned in my original post?

First, you can check Data Crystal (http://www.datacrystal.org), which is certainly the best centralized hacking information source for video games. If you can't find the info you are looking for, then you have to do it yourself, with debuggers and patience. That's actually the essence of hacking. Hacking is about searching...

Quote
If actually adding difficulty settings to the games is too much work, that is okay. Let's just release an ips file for each game that balances the difficulty. That would still work well.

That would be a good start. A "difficulty settings" database could be very interesting...

As for the data mining itself, the very first thing to learn is ASM for the console you want to hack. That's a must, and it's not negociable. I suggest NES for starters, because it's not too complicated. Unless you want to do everything by trial and error, which would be a waste of time, in my opinion. Here's a few pointers for what someone would be looking for when it comes to difficulty:

- Number of lives you start with
- Score needed for extra life
- If there's a time limit, change it or remove it completely
- Enemy movement speed
- Enemy attack power
- Enemy attack rate
- Enemy attack range
- Enemy Hit Points
- Player Hit Points
- Player attack range
Title: Re: The Difficulty Settings Project
Post by: tog on July 13, 2012, 01:41:51 pm
Trax,

Thank you for your explanation.  It is quite helpful.

Before I look over things this weekend, I have a couple more questions.  If I know what specific values I am searching for, would I be able to search for those specific values in the game?  Most of the information I am looking for is not in Data Crystal, so I would have to find all of this myself.

And, lastly, what about formulas?  It seems like it would be better to modify those in some cases.  How likely is it to be able to do that?
Title: Re: The Difficulty Settings Project
Post by: Tony H on July 13, 2012, 09:13:58 pm
A quick note on finding data in the ROM.  Game Genie codes would be a gold mine for some of the stuff you would be looking for.  For example, a Game Genie code that lets you start with 9 lives, can show you exactly where the value for starting lives is in the ROM. 

Some other examples of useful Game Genie code types:

Start with more or less time
Start with more or less ammo
Start with more or less energy
Start with better/worse weapons
Jump higher/lower
etc.

The only minor problem you would encounter is that when most NES Game Genie codes are decrypted, they won't directly tell you the correct ROM address. However, there is at least one NES emulator out there (fceuxd sp) that will show you the correct ROM address for Game Genie codes.  Very simple process.
Title: Re: The Difficulty Settings Project
Post by: KingMike on July 13, 2012, 11:19:04 pm
The only minor problem you would encounter is that when most NES Game Genie codes are decrypted, they won't directly tell you the correct ROM address.
I'd suspect Game Boy and Game Gear have that issue as well, since they only had a 64KB CPU address range. (which is why they put in a "compare" value to try to detect if the right bank was mapped in.
In that case you'd have to do a little examination of the hex data. Take the decoded address, modulus 16K (I think ROM banks on both systems are always 16KB), then look at each ROM bank (such as if the decoded address mod 0x4000 was 0x1000, then you'd look at ROM address 0x5000, 0x9000, 0xD000, etc.). If you get more than one match searching the ROM, then it would affect all such occurrences (a problem the real unit would have).

SNES and Genesis had a large CPU address range so a compare code wasn't included as it (most of the time) wasn't needed.
Title: Re: The Difficulty Settings Project
Post by: Dizzy9 on July 14, 2012, 07:26:20 am
An interesting project indeed.
I can join it(NES only). I have no problem with making a in-game difficulty menu(if there's enough empty PRG space left).
I can also make more advanced things like changing  size of hitboxes and such(If needed).
Title: Re: The Difficulty Settings Project
Post by: Trax on July 14, 2012, 03:53:08 pm
Quote
Before I look over things this weekend, I have a couple more questions.  If I know what specific values I am searching for, would I be able to search for those specific values in the game?  Most of the information I am looking for is not in Data Crystal, so I would have to find all of this myself.

It seems you answered your own question. To find useful data, you always have to analayse the code directly into the ROM and tweak values until you get the desired result. If you poke into the RAM using a debugger, you have to check how and where the code accesses this RAM location...

Quote
And, lastly, what about formulas?  It seems like it would be better to modify those in some cases.  How likely is it to be able to do that?

I'm not sure what you mean exactly by "formulas". If it's about algorithms, then the same answer applies. Most programs have functions that are reused multiple times, and you need to understand these functions to understand what's going on during the game...

Below is a future candidate for the project, a "Hard Mode" version of Contra. I say "future" because it's not complete, only 5 out of 8 levels have been modified so far. It's basically all the settings I use in my Contra Demo, but the remaining features (graphics, levels, colors) are the same as the original...

Try it if you think the original Contra is too easy for you...

Contra - Hard Mode (http://www.bwass.org/romhack/contra/contrahard.ips)
To be used with the US version of Contra...
Title: Re: The Difficulty Settings Project
Post by: Hiei- on July 15, 2012, 06:32:43 pm
Zelda II wasn't all that hard, actually. It starts off a little overwhelming, but once you get the hang of it, and once you realize that it is an RPG masked as a platformer, you'll realize that level grinding helps you out a lot. I know that doesn't sound too good, and it would be one of my criticisms of the game (but then again, just what RPG didn't rely on level grinding back in those days?), but it's really only hard in the beginning, when you're still trying learn the ropes and grind for a level or two.

I actually can beat Zelda II nowadays, using no guide and without freaking out- A stark contrast from when I first tried my hand at it, where I was just dying all the time, and I had to keep peeking at a map because I kept getting lost.

I don't really know what I'm trying to prove here...

Anyway, project sounds like a good idea! Some games really are quite difficult for the average player (that includes me), but a lot of those are also hailed as classics.

Yeah, it's not that hard once you are used to it, but I think it's still the hardest Zelda and far before the others (the jumps you have to do make the game harder than the other zeldas. If you miss your jump in 3D Zelda games, most of the time you won't die, but miss a jump in Zelda 2 and most of the time, you'll lost a life).

Anyway, Zelda 2 is still my favorite Zelda game.
Title: Re: The Difficulty Settings Project
Post by: tog on July 16, 2012, 04:00:01 pm
Everyone,

Thank you all for your help and input with this.  I really need some more time to analyze this before I can comment on too much.

I have a couple of more questions, though.  I hope I'm not asking too many of these.  This is just all new to me and there is a lot to learn.

What do you recommend using to analyze the ROM for the data I am looking for?

How do I go about creating the ips file to modify these values once I analyze and find them, in addition to any other tweaking I may do?

Once again, I appreciate your willingness to help and answer questions.  Thank you again.



Dizzy9,

That is great that you are willing to work on this.  I am primarily interested in NES as well, since that is the system with the worst difficulty balancing.  But, like I mentioned above, I really need to have a little more time before I can say too much. 
Title: Re: The Difficulty Settings Project
Post by: snarfblam on July 16, 2012, 06:19:40 pm
I have a couple of more questions, though.  I hope I'm not asking too many of these.
Not at all. I'd much rather see somebody thoroughly research a project, plan it out, and make something great.


What do you recommend using to analyze the ROM for the data I am looking for?
For me the tool is usually the debugger in FCEUX. A good hex editor might be handy from time to time. (FCEUX's is decent, but I prefer one that can do relative searches with wildcards.) There's a lot to learn as far as FCEUX goes: ASM, the debugger itself, and how NES games tend to work in general. I didn't know much 6502 ASM when I started playing with FCUEX. I found having an opcode chart (http://www.atarimax.com/jindroush.atari.org/aopc.html) to be vital. Other than that it was all learning from experience.


How do I go about creating the ips file to modify these values once I analyze and find them, in addition to any other tweaking I may do?
There are a couple ways to do this. I have an assembler that outputs IPS patches, which seems to be the easiest way to keep my projects organized. Others use the inline assembler and hex editor in FCEUX to modify the ROM, then save the modified copy, and use an IPS utility to create a patch from the original to the newly modified ROM.


If this project does end up taking off, I'd also be glad to help from time to time, reverse-engineering or writing code.
Title: Re: The Difficulty Settings Project
Post by: tog on July 23, 2012, 01:23:54 pm
It's been a week now, so I thought I would give a status update on this.

I've been using FCEUX, which has been extremely helpful.  The Trace Logger and Hex Editor have been great, especially the Hex Editor's ability to make changes immediate while the ROM is already loaded.  The opcode chart that snarfblam provided has been helpful, as was the Game Genie suggestion that Tony H made earlier on.

However, I am having an extremely hard time figuring a lot out.  Much of what I have been finding makes no sense, especially with the values that are used in determining your defense.  I've been having a difficult time finding where this code is used and how it is used with the addresses I've been checking.

I haven't made much progress yet, except for a couple of games that weren't too difficult to process.

Are there any other suggestions on how I might proceed here?  If you need specific examples of where I am running into confusion, I would be able to give some.  I don't know where to turn at this point.
Title: Re: The Difficulty Settings Project
Post by: snarfblam on July 23, 2012, 06:03:37 pm
Why not pick something you are having trouble figuring out. One of us can check it out, and then explain how we approached the problem.

In the past, there have been situations where as a last resort, I just began disassembling everything. For example, start with the code that changes HP. Use the trace log to see code the routine was called from, and disassemble that. What routine calls that routine, and what other routines do they call? Just keep going until you find the code that handles defense. It gets pretty big and pretty confusing very quickly, so you need to keep detailed, organized notes. It also takes a lot of time.

That can be like digging through a haystack for a needle, though. (The upside is that you find all sorts of other potentially useful stuff along the way.) Like I said, for me it's a last resort. You learn tricks along the way that make help you avoid brute force techniques.
Title: Re: The Difficulty Settings Project
Post by: tog on July 25, 2012, 12:58:53 pm
snarfblam,

Would you mind showing me?  That would be quite helpful.  If I can see how it is done on one instance, it would be helpful everywhere else.

Let's do one example from TMNT2.  Using Tony H's suggestion on the Game Genie earlier on, I found that address 03EC10 controls the amount of damage you take when hit by an enemy.  If I use the Hex Editor to change the value in that address from 9D to 9E, you don't take damage.  However, if I change the value from 9D to 9C, the amount of damage you take increases substantially.  This is what I don't understand:  how could such a small change from the default value make such a massive difference?

I found the location where your current life is stored is 0568.  Using the Trace Logger to find where this value changes, I found where it is repeatedly used, but still can't understand where the new value is coming from.  Note that I used this function with the default 9D value in 03EC10, so make it easier to see changes.

Maybe I'm doing or figuring something wrong here.  But, how would you suggest proceeding with this specific example?  If I can see the reasoning in this instance, I should be able to figure this out elsewhere.

I feel like I'm learning a lot, but I also feel like I still have a lot further to go.
Title: Re: The Difficulty Settings Project
Post by: KingMike on July 25, 2012, 03:58:29 pm
When you're hacking is an ASM instruction. It's actually a 3-byte instruction 9D nn nn
STA $nnnn,x Or in your case, STA $0568,x.
(presumably 0568 is player 1's health and 0569 is player 2's health. X probably holds the player number (0 or 1). so, you are storing a value to RAM address 0568+x)
9C and 9E are undefined instructions on the NES' CPU, so that is why you'd see unexpected results when you change that.
Title: Re: The Difficulty Settings Project
Post by: tog on July 30, 2012, 01:32:57 pm
Well, another week has now gone by, and I am continuing to make progress.  However, I am running into multiple instances where I just cannot figure something out.  If I was to give a very specific example of something I am having trouble with, along with the code I found that I cannot figure out, would one of you be able to help explain exactly what the code is doing?  I am getting stuck in several spots and can't seem to proceed.

I have had some success this past weekend, though, and have successfully adjusted certain values in several games to do what I wanted.  So, this is going along.  I can at least say that much.

Title: Re: The Difficulty Settings Project
Post by: snarfblam on July 30, 2012, 08:23:41 pm
You're obviously putting a lot of effort into this. I think we can all appreciate that. If you pick an example, I'll be glad to try and help.
Title: Re: The Difficulty Settings Project
Post by: tog on July 31, 2012, 01:10:02 pm
Actually, I think I've figured it out!  I couldn't figure out why changing a certain value was triggering new code to be run.  Using the Trace Logger, I was able to find two rogue lines of code that ran when changing a value that represents how much life you had, even though those two lines never ran in the original.  But, changing those values to EA to do nothing solved the problem.  So, this is now all figured out.

I am certainly glad to finally have that figured out.  That problem has been vexing me for over a week!

Thanks for the offer to help though, snarfblam.  I do appreciate that.
Title: Re: The Difficulty Settings Project
Post by: tog on August 07, 2012, 02:58:22 pm
It's been another week now, and I feel like I've made enough progress to start being more specific in my work.  So, I thought I'd list the games I've worked on so far and what I've done with them.

Note that these are the settings I created for the Easy mode.  I haven't started the Medium modes yet.

Castlevania 1 & 3:  Doubled starting life, starting hearts, starting # of lives.  Also, doubled recovery from recovery items and hearts

Journey to Silius:  Doubled starting life, starting # of lives, starting weapon energy.  Also, doubled recovery from recovery pellets, both life and energy

Ninja Gaiden 1, 2, 3:  Doubled starting life & starting # of lives.  Doubled recovery life from recovery items.  Cut Spiritual Power consumption in half.  In #3, doubled # of continues.

TMNT:  Doubled starting life.  Doubled amount of ammo regained from missiles, weapons, rope, and doubled life recovered from pizza.  Doubled amount of damage done to enemies from attacks

TMNT 2:  Doubled starting life & damage done to enemies.

TMNT 3:  Cut energy consumption & damage taken from enemies in half.  Doubled # of starting lives & # of continues.

I've also done a lot of work on the Double Dragon series, but haven't finished yet so I refrained from putting those games on this list.

I am still in the testing process and so am not ready to release anything yet.  But, I am getting there.  It is very true that all games are different.  Each one seems to have its own way of doing things (many of which do not make any sense at all), and sometimes unexpected things happen.  I've had to find and modify a lot of addresses in a few troublesome ones.  But, I've also learned some tricks in the process.

I'll keep at this, so there will be more updates later.
Title: Re: The Difficulty Settings Project
Post by: KingMike on August 07, 2012, 03:26:10 pm
For Ninja Gaiden 3, I'd recommend (if you can) give infinite continues for the "easy" version since that's what the Japanese version had (along with a password system, but I don't think you'd be able to restore that).
Title: Re: The Difficulty Settings Project
Post by: Garoth Moulinoski on August 07, 2012, 04:40:57 pm
Well, if the original Japanese version had a password system, then you could still compensate for that in the hack. Like, make enemies spawn less often, remove some enemies from certain places where they could give a new player a frustrating death (like an enemy who can hit you and throw you off the side of a platform).
Title: Re: The Difficulty Settings Project
Post by: tog on August 07, 2012, 05:07:55 pm
I was thinking about the # of continues in Ninja Gaiden 3 when I modified that, being that #1&2 didn't have a finite number of them.  It probably is a good idea to, at minimum, give more than double the number of continues.  I will go ahead and do that.

I don't think I can really give infinite continues, since there is an entire screen that appears after you lose all of your lives that displays the number of continues you have left.  But, if I give enough of them, that shouldn't matter too much.

Any other thoughts?
Title: Re: The Difficulty Settings Project
Post by: KingMike on August 08, 2012, 03:31:04 pm
More than likely it's possible to give the game infinite just by disabling the line of code that subtracts a continue.
(like, if you know the RAM address that stores the number of continues, set a Breakpoint in FCEUX debugger for when that address is written after a Game Over. It will show the instruction that changes the number of continues.
Spoiler:
DEC $EE at CPU address $CBA7 or ROM address $1CBB7.
It is followed by BPL $CBDA. (branch if positive value) While we probably could just remove that, because the game came here from a jump instruction, it would be more correct to replace these 4 bytes with an explicit jump.
JMP $CBDA: NOP, or 4C DA CB EA)
As to the number you could mod it to not print it, but admittedly that is a more advanced skill that will require a little ASM knowledge.
Spoiler:
Again, use FCEUX trace logger. Run it while the game is loading the Game Over screen. Stop after it appears.
The game had to read our number of continues to print it.
So, open the trace log and do a search for "$00EE".
It turns up in this function:
Code: [Select]
$AB05:BD 23 AB  LDA $AB23,X @ $AB28 = #$00 A:05 X:05 Y:0C S:FB P:nvUbdizC
$AB08:9D EE 05  STA $05EE,X @ $05F3 = #$10 A:00 X:05 Y:0C S:FB P:nvUbdiZC
$AB0B:CA        DEX                        A:00 X:05 Y:0C S:FB P:nvUbdiZC
$AB0C:10 F7     BPL $AB05                  A:00 X:04 Y:0C S:FB P:nvUbdizC
$AB05:BD 23 AB  LDA $AB23,X @ $AB27 = #$00 A:00 X:04 Y:0C S:FB P:nvUbdizC
$AB08:9D EE 05  STA $05EE,X @ $05F2 = #$0A A:00 X:04 Y:0C S:FB P:nvUbdiZC
$AB0B:CA        DEX                        A:00 X:04 Y:0C S:FB P:nvUbdiZC
$AB0C:10 F7     BPL $AB05                  A:00 X:03 Y:0C S:FB P:nvUbdizC
$AB05:BD 23 AB  LDA $AB23,X @ $AB26 = #$00 A:00 X:03 Y:0C S:FB P:nvUbdizC
$AB08:9D EE 05  STA $05EE,X @ $05F1 = #$22 A:00 X:03 Y:0C S:FB P:nvUbdiZC
$AB0B:CA        DEX                        A:00 X:03 Y:0C S:FB P:nvUbdiZC
$AB0C:10 F7     BPL $AB05                  A:00 X:02 Y:0C S:FB P:nvUbdizC
$AB05:BD 23 AB  LDA $AB23,X @ $AB25 = #$0F A:00 X:02 Y:0C S:FB P:nvUbdizC
$AB08:9D EE 05  STA $05EE,X @ $05F0 = #$CB A:0F X:02 Y:0C S:FB P:nvUbdizC
$AB0B:CA        DEX                        A:0F X:02 Y:0C S:FB P:nvUbdizC
$AB0C:10 F7     BPL $AB05                  A:0F X:01 Y:0C S:FB P:nvUbdizC
$AB05:BD 23 AB  LDA $AB23,X @ $AB24 = #$25 A:0F X:01 Y:0C S:FB P:nvUbdizC
$AB08:9D EE 05  STA $05EE,X @ $05EF = #$24 A:25 X:01 Y:0C S:FB P:nvUbdizC
$AB0B:CA        DEX                        A:25 X:01 Y:0C S:FB P:nvUbdizC
$AB0C:10 F7     BPL $AB05                  A:25 X:00 Y:0C S:FB P:nvUbdiZC
$AB05:BD 23 AB  LDA $AB23,X @ $AB23 = #$02 A:25 X:00 Y:0C S:FB P:nvUbdiZC
$AB08:9D EE 05  STA $05EE,X @ $05EE = #$09 A:02 X:00 Y:0C S:FB P:nvUbdizC
$AB0B:CA        DEX                        A:02 X:00 Y:0C S:FB P:nvUbdizC
$AB0C:10 F7     BPL $AB05                  A:02 X:FF Y:0C S:FB P:NvUbdizC
$AB0E:A5 EE     LDA $00EE = #$05           A:02 X:FF Y:0C S:FB P:NvUbdizC
$AB10:8D F2 05  STA $05F2 = #$00           A:05 X:FF Y:0C S:FB P:nvUbdizC
$AB13:A5 EF     LDA $00EF = #$00           A:05 X:FF Y:0C S:FB P:nvUbdizC
$AB15:8D F1 05  STA $05F1 = #$00           A:00 X:FF Y:0C S:FB P:nvUbdiZC
It looks like the game is generating a string at RAM address $05EE. First byte is the string length. The next two bytes are the VRAM address to write to (you can alter it if you want to change the position on the screen), the next two are the hex values for the two "0" tiles (which would be overwritten by the tile numbers for the two digits in the number of continues).
I guess the last zero is an "end" marker.
Since $00EE and $00EF is the two digits for our number of continues, just NOP the codes that write them to the text (replace $AB10-AB12 (which do a hex search on the hex values of the instructions to find out it is ROM address $AB20) with $EA (NOP) as well as AB15-AB17)
Now, ROM address $AB33 is the string that will be printed. So, the simple way to solve the now-unneeded number of continues from being printed is to replace address $AB36-AB37 with a blank tile (such as 3F, which the rest of the screen uses)
Or, examine the code that next reads $05EE, where this string is stored, we see we could just give the string a length of 0 to make it not print.)
(http://kingmike.emuxhaven.net/Misc/ng3infinitecontinues-1.png)(http://kingmike.emuxhaven.net/Misc/ng3infinitecontinues-0.png)
Title: Re: The Difficulty Settings Project
Post by: tog on August 09, 2012, 11:19:22 am
KingMike,

Thank you very much for that idea and corresponding explanation!  I worked on that, and have successfully removed the # of continues on the screen.  I also gave unlimited continues as well.  So, now, anyone playing this game would be completly unaware that there ever was a finite number of continues.

One other thing I also did on NG2&3 was to stop the game from putting you back several stages if you lose to the final boss.  I have no idea what the developers were thinking-forcing you to go through multiple difficult stages again upon losing to an almost-impossible to beat boss...  But, that is now gone.  If you lose to the final boss, you will merely start at the previous area just like if you lose to any other boss in the game.  I am going to work on this with NG1 as well, but that one is more difficult because of the way the game keeps track of what part of the stage you're on, so give me a little more time with that one.

I guess I do have one other question, though.  Where would I find the code that changes how your life is displayed?  This is the only piece I have left in many games.  In NG, for example, your life is displayed by bars, with each bar representing one unit of health.  Being that I doubled the amount of health you have from 16 to 32, the bar stays full until you drop below 16 units.  I'd like to try to get that changed to full at 32 units if possible.
Title: Re: The Difficulty Settings Project
Post by: KingMike on August 09, 2012, 08:28:07 pm
Going to be incredibly difficult with NG1. I actually tried to make a Game Genie level-select code and I couldn't.
(as I recall, the current level is stored at RAM $006E.)
The game relies on the RAM initialization routine to put that at 0 (representing level 1-1). The level number appears to be changed entirely through INCrement and DECrement instructions (and when it switches a level, it finds and loads the starting map for that level, which is why dying against a boss sends you back to the start of the previous sub-level rather than the last checkpoint). The only code I found to explicitly set the level number is the code that checks when you die. It checks if you are on one of the final boss stages (6-4+) and sends you back to 6-1 if you were.
Title: Re: The Difficulty Settings Project
Post by: tog on August 10, 2012, 08:42:00 am
Actually, I've figured out how to do this on NG1.  I had to add some code to get this to work, but I saw where the game checks the 006E value to see if you were at 6-4 or above, then executes some code only if you were.  I put a JMP code in that particular code that only runs at 6-4+ to move to an area that wasn't defined (that had only FF values in the code), then put some code in that area to set the 006E & 006F values to have you at the last checkpoint before the boss, then another JMP code at the end of that to move back to after the 006E & 006F values are set with the A and X values.
Title: Re: The Difficulty Settings Project
Post by: tog on August 17, 2012, 09:18:36 am
I thought I would give another status update on this.

I've completely finished and tested Ninja Gaiden 1, and it is ready to go.  NG2&3 are pretty much done, but I need to do more testing before I can say they are complete.

Would anyone like me to release what I've done on NG1?  This will be my first one, so I'm not sure if anyone wants to see what I have beforehand.  If so, I can do it next week, so just let me know.

An interesting project indeed.
I can join it(NES only). I have no problem with making a in-game difficulty menu(if there's enough empty PRG space left).
I can also make more advanced things like changing  size of hitboxes and such(If needed).

I don't know if you are still interested in doing this or not.  All I've done so far are the Easy modes.  It will likely be a while before I start the Medium modes.  Should we wait until I have everything done before doing anything?  Or, should I just make a separate release for each difficulty setting instead, since that would be easier?
Title: Re: The Difficulty Settings Project
Post by: Dizzy9 on August 17, 2012, 03:56:11 pm
I don't know if you are still interested in doing this or not.
I was interested at start and made two patches for two games. Right now, I lost part of my enthusiasm.
Since back then I wasn't given a particular title to work on, I picked them on my own.
First one:
Linus Spacehead's Cosmic Crusade Zero Arcade
It's a very simple hack that just turns off all arcade levels in game.
Easy, simple and efficient.

The second hack is more advanced.
Darkwing Duck
This hack adds a menu with four difficulty options:
 Easy
 Normal
 Hard
 Hell
And here's differences between the options:
Easy[/b]
Player HP: 8
Boss HP: 8
Boss Invisibility time(In frames): 10

Normal[/b]
Player HP: 4
Boss HP: 15
Boss Invisibility time(In frames): 30

Hard[/b]
Player HP: 2
Boss HP: 19
Boss Invisibility time(In frames): 46

Hell[/b]
Player HP: 1
Boss HP: 31
Boss Invisibility time(In frames): 80

I wanted to make any HP replenishment to be turned into gold on hell but it's too easy to overclock points counter.

I can release the hacks at any time but I'm not sure what to write about "The Difficulty Settings Project " in my readme.txt.

Quote
All I've done so far are the Easy modes.  It will likely be a while before I start the Medium modes.  Should we wait until I have everything done before doing anything?  Or, should I just make a separate release for each difficulty setting instead, since that would be easier?
Why should I wait for you to finish? Just give me a title, list of things to improve and, if I'll have enough time and experience(I'm not best hacker out there), I'll do it.
You also can ask me to help you with some things, if needed.
Title: Re: The Difficulty Settings Project
Post by: tog on August 17, 2012, 05:13:40 pm
I think we might have had a slight miscommunication with this.  I thought you would be able to produce the in-game difficulty menu with the changes I made per difficulty setting.  Is that something you are still interested in doing?  That is what I was referring to.  The reason I asked about waiting is that I only have the Easy modes done right now and wasn't going to start the Medium modes for a while.

I apologize for the misunderstanding and/or confusion in regards to this.

Anyway, I won't be back here for a few days, so let me know what you think.
Title: Re: The Difficulty Settings Project
Post by: Dizzy9 on August 18, 2012, 12:21:56 pm
I think we might have had a slight miscommunication with this.  I thought you would be able to produce the in-game difficulty menu with the changes I made per difficulty setting.  Is that something you are still interested in doing?
No.
And I'll tell you why. Hacking in a menu with difficulty selection is done by rewriting some functions to behave differently. What you'll give me(probably) will be ips patches with changed values only.
Let's make an example on typical Boss with HP:
In normal, no hacked, game  it's like this:
0.(At start of Boss fight) Set Boss's HP to (let's say) 10.
1.Check If boss's HP is 0
2.If YES, then kill boss.
3.If NO, then  do Boss logic.

In IPS patches you usually just need to change the step's 0 "10 HP" value. But if there's a possibility of different difficulty then it's more complicated(especially, if there's more than two).

(At start of Boss fight)
0.Check the difficulty setting.
1.Use the number of difficulty to pull the desired Boss's HP value.
3.Set Boss's HP to (let's say) 10.
   Do rest of logic as usual.

See? Even if you give ma all patches then I'll have to find all differences between normal(no hacked) version and patched one.
In other words- working like this just wastes your work 'cause I'll have to write everything from scratch anyway.

Title: Re: The Difficulty Settings Project
Post by: tog on August 20, 2012, 02:21:16 pm
Okay.  It sounds like putting in a menu would be a lot more trouble than it is worth.  I'll just release one ips file for each difficulty setting then.  That'll work just fine.

I've finished testing NG2&3 now.  So, the entire Ninja Gaiden trilogy is now ready.  If anyone wants me to post these patches right here, just let me know.  Otherwise, I'm going to go switch to something else.
Title: Re: The Difficulty Settings Project
Post by: tog on August 27, 2012, 02:59:18 pm
Here is another weekly update I could provide, in case anyone is still interested in and following this.

Most of my work recently has been on the Double Dragon trilogy.  I've finished up and tested Double Dragon 1, so that one is all ready to go.  I've gotten most of Double Dragon 2 completed, but still need to get that one fully tested before I'll be ready to say that one is ready.  I got some work done on Double Dragon 3, but that one is incomplete.  I'll finish DD3 up after finalizing DD2.
Title: Re: The Difficulty Settings Project
Post by: gadesx on August 31, 2012, 04:55:33 pm
Megaman 1 with a easy iceman stage using danger platforms save like in megaman 10 :woot!:

I can know where are some values in any game via cheating with fceux or another, if someone needs
Title: Re: The Difficulty Settings Project
Post by: darkanx on September 01, 2012, 12:43:18 am
I totally applaud your efforts on this and hope you will keep at it. I love classic gaming, but a lot of the stuff from the nintendo days was just killer-hard and frustrating. A lot of "easy-type" patches are junk because they basically turn on god mode. I want it easier, not to play itself. So please do keep at it! Maybe someone will come along someday and help hack in actual menus into the game for difficulty selection. I think it would not be too hard. Just a standard chunk of code that loads in the game before anything else, kind of like all those trainers people hack into games. If you could find someone who does those, you could get some advice/help on getting a few implemented, then release the documentation for the masses to help on the project.

Regardless of however it progresses, kudos!
Title: Re: The Difficulty Settings Project
Post by: KingMike on September 01, 2012, 01:45:45 am
Would be cool to add menus, but especially on the NES being able to track down enough free ROM or RAM might be an issue, for adding routines to enable/disable the mods (especially if the difficulty changes get into level edits).
Title: Re: The Difficulty Settings Project
Post by: tog on September 04, 2012, 01:12:08 pm
I totally applaud your efforts on this and hope you will keep at it. I love classic gaming, but a lot of the stuff from the nintendo days was just killer-hard and frustrating. A lot of "easy-type" patches are junk because they basically turn on god mode. I want it easier, not to play itself. So please do keep at it! Maybe someone will come along someday and help hack in actual menus into the game for difficulty selection. I think it would not be too hard. Just a standard chunk of code that loads in the game before anything else, kind of like all those trainers people hack into games. If you could find someone who does those, you could get some advice/help on getting a few implemented, then release the documentation for the masses to help on the project.

Regardless of however it progresses, kudos!

I totally agree with what you have stated above.  That is the reason I am working on this project.  I want to make games that are too difficult and frustrating easier, but not "godlike".  As I stated in my original post, that is a goal of this.

At this point, I am still working on this.  It is nice to hear that there is still some interest in this project.  It will probably be time for me to release what I've done with the Ninja Gaiden series if that is desired.  In other news, I've finished Double Dragon 2 and feel it is pretty much ready.  However, I'll wait until I finish DD3 before releasing that so I can release the entire Double Dragon trilogy together.

As far as the menus goes, from what I've been in communication with earlier in this topic, that probably is not feasible right now.  I am working on the Easy modes right now.  Once I work on the Medium modes later on, I'll release separate ips files for those, so we'll just have two different patches for the two difficulty settings.

One other thing:  it has been mentioned a couple of times earlier on to adjust the levels or enemy behavior, among other things.  I am not really interested in making game adjustments.  I'm only interested in adjusting some of the values since the games are quite playable.  I wasn't intending on changing the games themselves, if that makes any sense.  I may adjust some "# of hit values" for games that don't have life meters (I actually did something similar to this in Metal Storm a few weeks back), but it will be a while before I do any of that.  I have gotten some experience with actually adding code with what I've had to do to some of these games, so I'll leave this possibility open for the future.

Title: Re: The Difficulty Settings Project
Post by: tog on September 17, 2012, 12:53:03 pm
I am still working on this project and am making more progress.  Since my last posting, I've finished testing Double Dragon 3 and both Castlevania 1&3.  So, those two series are ready to go.  I didn't do anything with Castlevania 2 because the difficulty in that game is pretty well balanced already.  The main challenge in that game is figuring out where to go and what to do.  As long as you have maps and a walkthrough, that game is quite good (in fact, it was easily my favorite of the three Castlevanias because it was the most balanced and playable).

I will turn my attention to finishing up and testing the TMNT games next before moving onto something else.  Give it at least a couple of weeks to get through those, though.

Is there still any interest in my updates at all?
Title: Re: The Difficulty Settings Project
Post by: darkanx on September 19, 2012, 09:12:25 am
I am still very interested. Castlevania are prime choices for a little balancing. 2 has the "redacted" mod, which helps make the riddles and clues much clearer...a little too clear actually. 3 has a character balance mod, that I have actually not tried yet, but sounds promising. I will be interested to see how you approached the changes. Mostly curious if you removed the "knockback" or not. I would find such a decision hard to make. It is easily the biggest aggravation in the series, but is such a staple, it is almost sacrilegious to remove it. It would be nice if there was a way to compromise and make give it less knockback, but still have some.

Tell you one game that could use a balance patch: Battletoads.

Title: Re: The Difficulty Settings Project
Post by: KingMike on September 19, 2012, 10:50:47 am
I heard the knockback was removed in the "easy" mode on the Famicom cart version.

I looking into adding an option to instant-continue in Battletoads, but it looks like Rare used almost all of the ROM space.
Title: Re: The Difficulty Settings Project
Post by: Dizzy9 on September 19, 2012, 01:12:06 pm
Yes, Rare used almost every single byte, no empty space for new code. Also, game can't be resized.
This gave me a great pain while making a patch that makes a"friendly fire OFF" when playing with two players-I had to delete pause beat, and some of it's code.
What kind of instant-continue do you mean?
I can imagine 2 for this game.
First one is easy to do.
Change this:
Quote
01:E5EB:B5 2B     LDA $2B,X @ $002B = #$00
01:E5ED:29 10     AND #$10
01:E5EF:F0 31     BEQ $E622
To this:
Quote
01:E5EB:B5 2B     LDA $2B,X @ $002B = #$00
01:E5ED:29 10     AND #$10
01:E5EF:EA        NOP
01:E5F0:EA        NOP
So the code will never branch.
However, it only makes player not to press start in order to continue.

The second is what I think you had in mind.
When player loses his last life, game checks for continues left.If he have continues left, then decrease number of continues and refill player's number of lifes back to 3.
Luckily, in this case, game over screen is real game over screen. Meaning, you cant continue when you see it. That gives us some possibility. We can delete the code that is responsible for checking buttons pressed and sending player back to the level.
But still, even if you success, don't forget about the Clinger Winger (http://tvtropes.org/pmwiki/pmwiki.php/Main/GameBreakingBug) level when playing two players.
Title: Re: The Difficulty Settings Project
Post by: KingMike on September 19, 2012, 02:08:11 pm
Yes, I was thinking of the "automatically use a continue to refill lives" (or optionally, have the player hold a button as they love their last life, so they can decide if they want to continue), if there had been enough free space.
Title: Re: The Difficulty Settings Project
Post by: Dizzy9 on September 19, 2012, 05:19:30 pm
Crap.
This game reuses the code from "Press start to continue" screen.It runs on title screen and while in cutscenes.
Fact:Player starts out with four continues, but uses one to start the game.Because of this I can't simply delete this function. And with no free bytes, It's impossible to write my own function.
Sadly, unless doing some heavy hacking, this can't really be done.
Yes, there's this unused music (http://www.youtube.com/watch?v=sIEY2MIhhGY) but it's in another bank, and we have no free bytes to switch banks.
I can delete the pause music beat (http://www.youtube.com/watch?v=DUJXtKClX9M). I'll think about it tomorrow.
Title: Re: The Difficulty Settings Project
Post by: darkanx on September 19, 2012, 11:14:43 pm
Depending on how much of the difficulty you plan to reduce, I would almost say consider making unlimited lives, rather than continues at all. This game is a bit like the Super Meat Boy of the NES days. Keep trying over and over and over till you get it. Infinite lives, with some easing up of the race levels would be perfect. This would also mitigate the problem of "friendly fire" by making it a minor annoyance rather than a friendship killer.

Edit: Oh, wait, nevermind, that is not how lives work in this game at all, is it? I spaced on that.
Title: Re: The Difficulty Settings Project
Post by: tog on September 20, 2012, 01:32:45 pm
I guess I could again explain more of what I have been doing, since my original explanations have most likely been forgotten in this thread.

I am not changing the game mechanics or how the game actually works or plays.  What I am doing is finding and changing values for attributes and properties, like life/energy values and damage done/received for attacks.  I didn't want to change how the games actually played since they for the most part play quite well.  It is just the difficulty that needed work and rebalancing, which is exactly what I've been doing in each game.

The exact changes I've been making vary from game to game, especially since they all play differently and are coded differently.  There have been many instances in which a simple adjustment has required a lot of code searching and value changing or has caused some side effects that needed to be dealt with.

It is definitely possible that I will modify code in some games to do certain things (like give you more than one hit in games that only allow one hit before dying), but that is something for a bit later on.

One thing I do not know how to go about is something that I've been running into with almost every game I've modified.  I've asked for help on this more than once before, but haven't gotten anything.  How do I adjust the life bars in games that display the amount of life/energy you have in a bar form?  In games like Ninja Gaiden and Double Dragon, if I increase the amount of life you have, the life bars are completely full if you have any greater than the default in the game.  How can I adjust the life bars so they display properly?

As far as Battletoads goes, I've heard so many bad things about the difficulty of that game that I stayed away from playing it.  The same thing with Ghosts & Goblins.  These seem to be good games, but the extreme difficulty of them take all the enjoyment away so it is no fun playing them at all.  That sure is a bummer.  Although, with the experience I am getting doing this, I suppose I could try them at a later point.  But, right now, I am working on the games I am familiar with.

Hope that helps clear things up a bit!
Title: Re: The Difficulty Settings Project
Post by: Xenesis on September 20, 2012, 07:34:04 pm
One thing I do not know how to go about is something that I've been running into with almost every game I've modified.  I've asked for help on this more than once before, but haven't gotten anything.  How do I adjust the life bars in games that display the amount of life/energy you have in a bar form?  In games like Ninja Gaiden and Double Dragon, if I increase the amount of life you have, the life bars are completely full if you have any greater than the default in the game.  How can I adjust the life bars so they display properly?

Depends on the game, but they'll likely have a check that goes 'if you're over this x life value, only draw this many bars.' You'll either have to change that value to your new one (and expect possible glitchiness with that graphic) or adjust how the game calculates the bars in the first place. Breakpoints on read for the life value should probably help, though.
Title: Re: The Difficulty Settings Project
Post by: darkanx on October 03, 2012, 06:27:15 pm
How goes the project? With the release of the super awesome Double Dragon Neon, I have had a wicked itch to play the original games, none of which I ever beat.
Title: Re: The Difficulty Settings Project
Post by: tog on October 08, 2012, 01:48:25 pm
How goes the project? With the release of the super awesome Double Dragon Neon, I have had a wicked itch to play the original games, none of which I ever beat.

I've been working on the project and have asked numerous times if anyone wanted me to release anything, but have not gotten any responses to those questions at all.  I am pretty much finished with the Double Dragon series, so if you want me to attach an ips file, let me know.  I haven't actually created the ips files yet, but it sounds simple enough so I could do that soon if you would like.
Title: Re: The Difficulty Settings Project
Post by: darkanx on October 09, 2012, 08:03:22 pm
Please do release them. I have been eager to give all the games you mentioned a try. I think there are a lot of ace retro gamers on this forum who grew up on nes-hard games, which is why perhaps your not getting as much attention for these balance patches as you should. I never really started gaming until the snes/genesis era, and even then there are plenty of hard games I think could use balance patches like these. Megaman X 1 is a perfect example of a difficult, but not impossibly hard game. I think that is really about how hard they should get. I remember feeling so frustrated as a kid on some rentals when I could not get past the first level. Anyway, so that is why I support your efforts. Please keep it up and do share them patches.
Title: Re: The Difficulty Settings Project
Post by: tog on October 10, 2012, 09:33:35 am
Okay.  I've created the ips files for just the Double Dragon series to start since that is what you seem most interested in at the moment.  But, I cannot seem to attach them to this post.  Am I missing something here?  I was hoping to get some feedback on them, and didn't expect to run into this issue.

I guess I'll have to officially submit them, which means I'll have to create the text file to submit with them.  Give me a bit of time to get that done.  I have the ips files here and was planning on attaching them right now, but this will slow the process down a bit.



Edit:  Wait a minute.  I was looking at the Submit Files page, and it appears I can only insert URLs of files???  I don't have any URLs.  I only have the files directly on my computer.  Now what am I supposed to do?  Is there some other way to submit these?  This is my first time doing this, so I probably don't know what I am doing completely.
Title: Re: The Difficulty Settings Project
Post by: mz on October 10, 2012, 01:45:40 pm
Edit:  Wait a minute.  I was looking at the Submit Files page, and it appears I can only insert URLs of files???  I don't have any URLs.  I only have the files directly on my computer.  Now what am I supposed to do?  Is there some other way to submit these?  This is my first time doing this, so I probably don't know what I am doing completely.
There's a "Contact Staff" link on the left, you have to ask there.

(I actually made a useful answer to a very similar question the last time it was asked, but an admin deleted my post and sent me a PM with this:

Quote from: Admin
Quote from: mz
"I keep getting an error message"... What about telling us what the error message says?

Also, there's lot of help in the same page as the submit form, try reading that first. And you will be linked to this page too: http://www.romhacking.net/?page=help&action=additionalhelp, which may help with your problem.
Please contact staff for matters like this instead of posting. There is a contact staff link on the side bar.

Thanks,
~ThisAdminName
Yeah, I will contact staff before helping others with something I don't need help with. Thank you for deleting me my post, by the way.)
Title: Re: The Difficulty Settings Project
Post by: snarfblam on October 10, 2012, 08:10:17 pm
There are a lots of potential pitfalls that come into play when you let people upload files to a website. I think RHDN avoids it to keep the site safe and simple.

I'm fond of DropBox. It basically creates a mirror of a folder on your hard-drive, so you can copy a file to that folder, right-click it, and get a URL.

If you're not interested in installing DropBox I can host the file for you.
Title: Re: The Difficulty Settings Project
Post by: tog on October 11, 2012, 09:22:44 am
snarfblam,

If you wouldn't mind, would that be all right?  How do I submit these files to you?  I tried sending a private message, but don't seem to be able to include attachments there either.  What would work best for you?
Title: Re: The Difficulty Settings Project
Post by: snarfblam on October 11, 2012, 05:36:15 pm
E-mail should work. My GMail address is same as my user name.
Title: Re: The Difficulty Settings Project
Post by: KingMike on October 11, 2012, 07:39:35 pm
snarfblam,

If you wouldn't mind, would that be all right?  How do I submit these files to you?  I tried sending a private message, but don't seem to be able to include attachments there either.  What would work best for you?

Attachments are disabled for security as well as storage space limitations.
Title: Re: The Difficulty Settings Project
Post by: darkanx on October 11, 2012, 11:00:24 pm
Once you get your current projects squared away, I have a request for a game to work on; Mr.Gimmick. A super awesome game that is of course, quite hard.

Suggested fixes:
Increased/Unlimited lives vs Infinite continues: If you continue the game at all, you can't get the good ending. So increasing the starting lives would be nice so it is much more unlikely you got to continue.

2 hits per dot (8 max health) vs 1 hit per dot (4 max health): This would be trickier, but definitely nice to be able to take more hits. Maybe have the first hit make the dot flash, the second hit makes it disappear, but that would probably be more programming trickery then you aim to do with this project.

Thats really all that needs to be tweaked with this one. Platforming can still be deadly, not much can be done about that. Its a great game, probably one of the most advanced on the nes, that could use a little love if your up to it.

Hope the file hosting situation gets worked out. Box.net works well for me.
Title: Re: The Difficulty Settings Project
Post by: tog on October 12, 2012, 01:27:10 pm
darkanx,

All right.  I've just sent the files to snarfblam, so hopefully we will be able to get these up for you.  Thank you for your patience.

I used LunarIPS to create these files, so you could presumably use the same program to patch the games.

Anyway, these three games are pretty much done.  I've adjusted starting life, either enemy life or damage values, starting lives, etc.  I don't have a complete changelog handy with me right now, so I can't state everything I've done at the moment.  The only thing that doesn't look quite right is that the life bar displaying on the screen is completely full if you have any more life than the game defaults.  This is because I don't know how to adjust how the bar displays.  But, rest assured, you do start with more life than what shows.

Anyway, I hope you enjoy these.  I am in full agreement with what you said earlier about the difficulty of these games.  That is what I've been working on with this project.  This series should be much more manageable now.
Title: Re: The Difficulty Settings Project
Post by: snarfblam on October 15, 2012, 05:35:11 pm
Special delivery!

Double Dragon 1 - Easy (http://snarfblam.com/files/Double%20Dragon%201%20%28Easy%29.ips)
Double Dragon 2 - Easy (http://snarfblam.com/files/Double%20Dragon%202%20%28Easy%29.ips)
Double Dragon 3 - Easy (http://snarfblam.com/files/Double%20Dragon%203%20%28Easy%29.ips)
Title: Re: The Difficulty Settings Project
Post by: Vague Rant on October 19, 2012, 11:13:23 pm
This is a fantastic idea, so many old games seem like they're being frustrating on purpose, or else intended to play like an arcade game and take in another quarter every time you die. I grew up playing games like this, but if I don't have the benefit of nostalgia for a particular title, the difficulty is the thing to turn me off so many of them, even games which are otherwise excellent. I know I'm essentially restating the entire purpose of this project, I just agree strongly. So thanks for these efforts, I hope for more games to become playable; e.g. Popful Mail for Sega CD is a game defined by its horrible rebalancing for the American market, it's just horribly un-fun. They scaled up enemy damage by almost ten times and stripped back the period of invincibility after the player takes damage. It powerfully demonstrates how a couple of minor changes make the difference between a great game and a waste of time and effort.
Title: Re: The Difficulty Settings Project
Post by: tog on October 22, 2012, 01:37:16 pm
This is a fantastic idea, so many old games seem like they're being frustrating on purpose, or else intended to play like an arcade game and take in another quarter every time you die. I grew up playing games like this, but if I don't have the benefit of nostalgia for a particular title, the difficulty is the thing to turn me off so many of them, even games which are otherwise excellent. I know I'm essentially restating the entire purpose of this project, I just agree strongly. So thanks for these efforts, I hope for more games to become playable; e.g. Popful Mail for Sega CD is a game defined by its horrible rebalancing for the American market, it's just horribly un-fun. They scaled up enemy damage by almost ten times and stripped back the period of invincibility after the player takes damage. It powerfully demonstrates how a couple of minor changes make the difference between a great game and a waste of time and effort.

I'm glad to hear that you're as interested in this as I am.  What you've stated above is exactly how I feel-there are many games that have been completely ruined by their unreasonable difficulty level.  And, making a few changes can make a huge difference and make an unplayable game playable.

Anyway, I haven't heard any comments on the Double Dragon hacks I released.  In other news, Shadow of the Ninja and Journey to Silius are pretty much finished.  Just another quick update.
Title: Re: The Difficulty Settings Project
Post by: darkanx on October 24, 2012, 09:38:46 pm
Awesome. I just got back from vacation and will try these out asap and give you some feedback real soon. Been eager to try them.

October 30, 2012, 07:54:14 am - (Auto Merged - Double Posts are not allowed before 7 days.)
Sorry its taking me a while to get back with proper feedback. I have been trying to bait my roommate into playing 2 player with me so we can really feel it out properly. I did test out the first stage of DD1 myself on both the unaltered rom and easymode rom and I think the changes seem great. Survivability is definitely up on the easy mode. I can't say much about long term balance, but so far it seems to be pretty great. By myself I nearly ran out of lives on the first stage, but had just lost one on easymode, which seems reasonable considering I went into it unpracticed.

I would say these are already ready to go for submission on the site. You can always tweak and squash bugs as people give you more feedback. I will give you more feedback when I get a proper play with my roomie.
Title: Re: The Difficulty Settings Project
Post by: tog on November 06, 2012, 09:17:28 am
Thank you for letting me know how it's going so far with your testing.  I'm sorry it took me so long to respond.  If you reply to your own posting in less than a week, the system merely edits your previous post, which is why I didn't see it until now.  That is why I've oftentimes waited an entire week to post something that could have been posted much sooner-otherwise, no one would know that I made one since the topic edit date wouldn't have been updated.

I think I'll wait a bit longer before officially submitting any of this onto the main site.  I was hoping someone would be able to help out with the life bars since that is something I am entirely unfamiliar with.  If I could just see how one of them works, I could probably do the others.

I have been working on Zelda II and am almost finished with it.  It took me a while to figure this one out because of all the different variables involved, but I took a different strategy that I think has worked.  However, that game will need quite a bit of testing before I feel it's ready due to its size.
Title: Re: The Difficulty Settings Project
Post by: KingMike on November 06, 2012, 01:59:30 pm
Edited posts will have a NEW icon for everyone except the poster.
Title: Re: The Difficulty Settings Project
Post by: neige on November 14, 2012, 08:37:03 am
About the life bars, I may have an idea about how to make it display relative to the increased amount of life.

First of all, I haven't looked at the games themselves so may be talking nonsense here, if it is the case then please disregard this message.

I assume that the game needs to load the number of life points to display the bar so if you can find out the code location from where it's loaded and if you can add some code, you can try to add these 2 instructions just after the value is loaded.

Code: [Select]
; tranfer to A register if needed
LSR
ADC #0
; put it back if needed

The LSR will essentially divide the value by 2 and it will also put the lowest bit in the carry flag. The ADC will then add 1 if the value was odd (carry flag is set), with this it will look like you need 2 hits to lose 1 bar and the bar will not appear empty when you still have 1 point left.

Hope this helps.
Title: Re: The Difficulty Settings Project
Post by: tog on November 15, 2012, 05:01:32 pm
neige,

Thank you for your suggestion.  What you stated makes perfect sense; however, I'm unsure on how to find the code where the lifebars are displayed.  This is something completely different from anything I've done so far, which is more on the "calculation" side, if that makes any sense.  How does the code work on the "visual" side?  I think that would be very helpful-knowing how that part works.

If I could see just one example on one game, that may be all I need to work on this last part.

Thanks for your help again.
Title: Re: The Difficulty Settings Project
Post by: snarfblam on November 15, 2012, 05:32:17 pm
Code that draws a HUD (lifebar, score, etc.) is often pretty straightforward. The game can either draw it on the background and use split scrolling the keep the HUD in view, in which case a nametable viewer helps with debugging, or it can draw it with sprites, in which case you can use a memory viewer the monitor the sprite data in system RAM (a sprite viewer can help too). Usually it's a matter of setting a breakpoint when a known memory location is written or when a known value is written to a certain memory range (the latter would require a conditional breakpoint).

Double Dragon uses a background-based HUD. If you pull up a nametable viewer and check it out, you'll see the life bar appears four times. The game seems to maintain two copies of the HUD (not 100% sure why), the other two on the right are mirrors and can generally be ignored. If you hover the mouse over a tile in the nametable viewer (I'm using FCEUX) it shows the PPU address of that tile. The address of the first tile in the lower life bar 2B45.

If you set a breakpoint for a write to 2B45 in PPU memory, the debugger will break when the life meter is being drawn. From there you make your way through the code to find where and how it determines how many bars to draw.

It is important to understand how video memory is accessed, though. NesDev has good reference on what the registers are and what they do. In the case of drawing tiles to the background, a game makes writes to the $2007 register. Multiple writes to $2007 make successive writes to video memory. So the first write to $2007 goes to $2B45 in the PPU, the second write to $2007 goes to $2B46 in the PPU, and so on.

The game uses an unrolled loop to draw the life bar...
Code: [Select]
07:CC5C:8D 07 20  STA $2007 = #$00
07:CC5F:E8        INX
07:CC60:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC63:8D 07 20  STA $2007 = #$00
07:CC66:E8        INX
07:CC67:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC6A:8D 07 20  STA $2007 = #$00
07:CC6D:E8        INX
07:CC6E:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC71:8D 07 20  STA $2007 = #$00
07:CC74:E8        INX
07:CC75:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC78:8D 07 20  STA $2007 = #$00
07:CC7B:E8        INX
07:CC7C:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC7F:8D 07 20  STA $2007 = #$00
07:CC82:E8        INX
07:CC83:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC86:8D 07 20  STA $2007 = #$00
07:CC89:E8        INX
07:CC8A:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC8D:8D 07 20  STA $2007 = #$00
07:CC90:E8        INX
07:CC91:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC94:8D 07 20  STA $2007 = #$00
07:CC97:E8        INX
07:CC98:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CC9B:8D 07 20  STA $2007 = #$00
07:CC9E:E8        INX
07:CC9F:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CCA2:8D 07 20  STA $2007 = #$00
07:CCA5:E8        INX
07:CCA6:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CCA9:8D 07 20  STA $2007 = #$00
07:CCAC:E8        INX
07:CCAD:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CCB0:8D 07 20  STA $2007 = #$00
07:CCB3:E8        INX
07:CCB4:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CCB7:8D 07 20  STA $2007 = #$00
07:CCBA:E8        INX
07:CCBB:BD 28 05  LDA $0528,X @ $0594 = #$FD
07:CCBE:8D 07 20  STA $2007 = #$00
07:CCC1:E8        INX

You can see that it is just copying from a buffer located at $0528 directly to the PPU. So the next thing to do would be to find the code that writes the buffer at $0528.
Title: Re: The Difficulty Settings Project
Post by: tog on November 16, 2012, 03:39:43 pm
snarfblam,

Thank you very much for that detailed explanation.  I will look into this over the next several days and see what I can figure out.  That helps a lot.
Title: Re: The Difficulty Settings Project
Post by: tog on December 10, 2012, 11:37:30 am
I apologize that it has been so long since I've replied to this.  I am all finished with Zelda 2, so it is ready to go.  My being unable to figure out the life bars does not affect this game at all since I did not adjust how much life you have.  So, if anyone wants it, I can either submit this onto the site or on this forum.

I also think Journey to Silius can be submitted too, since having the lifebars extended on this game doesn't look messed up or have any issues.  Again, if anyone wants it, just let me know.
Title: Re: The Difficulty Settings Project
Post by: MathUser2929 on December 10, 2012, 11:51:40 am
I don't see why you shouldn't submit the patch to the site. Submit it and it will probably be approved. It sounds like a good idea for a hack. I never got too far in Zelda 2 so having a easy difficulty could help with that.
Title: Re: The Difficulty Settings Project
Post by: Garoth Moulinoski on December 10, 2012, 12:00:22 pm
I don't see why you shouldn't submit the patch to the site. Submit it and it will probably be approved. It sounds like a good idea for a hack. I never got too far in Zelda 2 so having a easy difficulty could help with that.

You could "level grind" by abusing the respawning Red Iron Knuckle that's in the statue at the front of some palaces. They give you 100 XP or a Red Potion each. Those statues will sometimes drop a Red Potion, too. So, it's incredibly easy (but boring) to grind the Iron Knuckles for XP and heal with the potion. If you're low on health, just run away if a Iron Knuckle pops up. When you have your Attack at around the third or fourth level, it should take only two hits to kill it anyway.

The octoroks in the swamp are also pretty good for level grinding, since they're easy and predictable. Before that, you'll probably need to grind with the slimes in the field, but the first palace is very easy anyway, so it really shouldn't give you too much trouble.
Title: Re: The Difficulty Settings Project
Post by: MathUser2929 on December 10, 2012, 12:02:46 pm
Good suggestions. The double dragon easy patches should also be submitted to RHDN. I don't think they are on there now.
Title: Re: The Difficulty Settings Project
Post by: Trax on December 10, 2012, 07:10:42 pm
I know almost everything about Zelda II. Feel free to ask any question related to data tables or enemy AI...
Title: Re: The Difficulty Settings Project
Post by: charbatgoula on December 20, 2012, 08:37:48 am
Hi all,
i would like to upgrade difficulty of some opponents in SNES ROM : Jimmy Connors Pro Tennis Tour.
And maybe create a new player if i find some tips.
Could some guys here recommand me a software to watch inside the ROM ?
Regards,
Title: Re: The Difficulty Settings Project
Post by: tog on December 20, 2012, 02:16:18 pm
Sorry about the delay in updates on this.  It was a lot of work to actually get this submitted, as this site is very picky with filetypes and submission rules.

I have just submitted the Zelda II Easy hack.  So, it should hopefully become available through the site soon.  My first submission!

I know almost everything about Zelda II. Feel free to ask any question related to data tables or enemy AI...

Thank you very much for your offer.  However, I didn't have any trouble with this game because I did not adjust the life maximums at all.



If this goes well, I will submit the Double Dragon hacks next, since those have now been requested a couple of times.
Title: Re: The Difficulty Settings Project
Post by: tog on January 07, 2013, 04:31:15 pm
Has anyone tried this hack out yet?  It's been several weeks now, and I still haven't heard anything.  I can get the Double Dragon hacks ready for submission at any time, and was hoping to at least hear something by now.

Any thoughts?
Title: Re: The Difficulty Settings Project
Post by: tog on February 01, 2013, 09:50:39 am
All right.  I don't know who did this, but someone apparently has stolen my work on the Double Dragon series and submitted it to this site without my permission or even asking me if this was okay.  There wasn’t even any credit given to me on this work.  This is completely unacceptable.  I demand for this to be removed from this site immediately.

If this is how I am going to be treated and thanked for doing this, then I will have no part in this any more.  Therefore, I am not going to release any more of my work and am officially shutting this project down.  I will keep what I've done, and anything else I may do in the future.

This is just unbelievable.  No credits, no nothing.  There isn't even a complete or thorough description on those files.  I would have submitted more and allowed this to take place if I was just asked.  I had nothing against doing that.  But, look at what happens instead.  Sigh...

Anyway, this will be my final status update on this since I have nothing more to do over here.

Administrators, do what you need to.  But, I am all finished.
Title: Re: The Difficulty Settings Project
Post by: assassin on February 01, 2013, 10:21:16 am
go here to remove them:
http://www.romhacking.net/?page=hacks&action=editentrypage&id=1119
http://www.romhacking.net/?page=hacks&action=editentrypage&id=1120
http://www.romhacking.net/?page=hacks&action=editentrypage&id=1121

and note in the Descriptions why you're removing the files.  see this:
http://www.romhacking.net/forum/index.php/topic,7603.0.html

for more info.

while your frustration is understandable, being "all finished" over this remediable situation is a bit premature.  you're letting one rogue user (MathUser2929) dictate your actions.
Title: Re: The Difficulty Settings Project
Post by: MathUser2929 on February 01, 2013, 01:02:04 pm
I pm'd whoever posted them and asked who made the hacks. I left the entry as unknown until he got back to me. I only posted what I knew about the hacks cause I can't play through it on this keyboard, the right arrow is missing, making gameplay difficult. Even then to play through a game I'd probably need a good controller to get far. Besides, it's easy to edit the entries to put more detail, especially since you know what the differences are.

The hacks were posted publically right in this thread so I don't see why anyone would need permission to add them to the site.

Edit: I guess it was snarfblam who posted them. So blame him if you didn't want the hacks out in the public.
Title: Re: The Difficulty Settings Project
Post by: assassin on February 01, 2013, 03:16:08 pm
there's a difference between linking to hacks so people can test them pre-release, and actually releasing them.

what's the rush?  per tog's last post, he/she was waiting for feedback before progressing further.
Title: Re: The Difficulty Settings Project
Post by: tog on February 01, 2013, 05:01:59 pm
Okay, then.  I can understand your points.  I do not see any messages on my login, so I had no contact on this at all.  All I noticed is that these hacks were posted without my permission, knowledge, or credits at all.

Like I said, I had absolutely no problem with submitting these and was ready to do so at any time.  I just hadn't heard anything from anyone is a long time, which is why I've been silent during this time.  But, regardless, I should have at least been asked about this.  I felt like my work was stolen when I saw these submitted like this. 

Anyway, I will be away for a few days, so I'll think this over during that time.
Title: Re: The Difficulty Settings Project
Post by: MathUser2929 on February 01, 2013, 07:18:03 pm
It was snarfblam that I pm'd cause he is the one that posted the hacks. He didn't say who made them so I didn't credit anyone when I submitted it. If I knew the hacks were incomplete I wouldn't have submitted them cause they don't like incomplete hacks.

I submitted a author correction to the site but if you want you can request them to be removed until you are ready to release complete versions. i see you got over 30 downloads for them tho.
Title: Re: The Difficulty Settings Project
Post by: tc on February 01, 2013, 08:32:39 pm
This site can be accessed around the world. In theory any publicly downloadable hack could be uploaded at any time, by anyone able to register a user account here.
Whether the site will accept the file is a separate issue.
Title: Re: The Difficulty Settings Project
Post by: MathUser2929 on February 04, 2013, 09:39:26 am
The hacks have been corrected with the correct name now. I see the DD3 hack is up to 54 downloads.
Title: Re: The Difficulty Settings Project
Post by: tog on February 07, 2013, 02:47:05 pm
Okay.  I've done some thinking about this and see where there was a misunderstanding from more than one party here.  I would have thought that I would be known as the author since I have been working on this project through this topic.  I still can't figure out how so many missed that.  But, I understand what happened now, even if I don't understand how it happened.

I've modified the descriptions on the three Double Dragon hacks, so hopefully they will show up on the site soon.  These new ones will describe a bit more of what the hacks do.

I think we’ll just leave it at that.  I think enough has happened with this already.

Also, one other note:  these hacks were already finished.  They weren't incomplete like was assumed above.  So, there is no need to remove them.  If I had gotten any feedback on them like I was hoping, I could've modified them, but I didn't get any, so there isn't anything else for me to do with them at the present time.
Title: Re: The Difficulty Settings Project
Post by: tog on July 09, 2015, 02:21:38 pm
After almost 2 1/2 years of inactivity since my last post, I thought I would give an update on this project.

Basically, I am overwhelmed at work and no longer have the time to dedicate to this any more.  Not to mention, it's been so long since I've worked on these that I've completely forgotten everything I've learned (I still have notes on exactly what I did on each hack, however).  Therefore, I need to resign from this project.

I was previously unable to get the lifebars working properly.  Therefore, I am going to ask the Community if anyone is interested in getting that piece of these hacks working.  If so, we can both take credit on the notes that we submit.

Is anyone interested in this at all?

Here are the games I've worked on:
Castlevania I
Castlevania III
Double Dragon 1
Double Dragon 2
Double Dragon 3
Journey to Silius (I don't believe this one needs any more work, so it should be good to go as is)
Metal Storm
Ninja Gaiden 1
Ninja Gaiden 2
Ninja Gaiden 3
Rad Racer 1
Rad Racer 2
Shadow of the Ninja
Teenage Mutant Ninja Turtles
Teenage Mutant Ninja Turtles 2
Teenage Mutant Ninja Turtles 3
Zelda 2
Title: Re: The Difficulty Settings Project
Post by: vacantplanets on January 20, 2016, 09:14:04 pm
After almost 2 1/2 years of inactivity since my last post, I thought I would give an update on this project.

Basically, I am overwhelmed at work and no longer have the time to dedicate to this any more.  Not to mention, it's been so long since I've worked on these that I've completely forgotten everything I've learned (I still have notes on exactly what I did on each hack, however).  Therefore, I need to resign from this project.

I was previously unable to get the lifebars working properly.  Therefore, I am going to ask the Community if anyone is interested in getting that piece of these hacks working.  If so, we can both take credit on the notes that we submit.

Is anyone interested in this at all?

Here are the games I've worked on:
Castlevania I
Castlevania III
Double Dragon 1
Double Dragon 2
Double Dragon 3
Journey to Silius (I don't believe this one needs any more work, so it should be good to go as is)
Metal Storm
Ninja Gaiden 1
Ninja Gaiden 2
Ninja Gaiden 3
Rad Racer 1
Rad Racer 2
Shadow of the Ninja
Teenage Mutant Ninja Turtles
Teenage Mutant Ninja Turtles 2
Teenage Mutant Ninja Turtles 3
Zelda 2

Yeah. You should upload your Journey to Silius hack, at least. :)