• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

HM moves and forgetting the darn things

37
Posts
8
Years
  • Age 27
  • Seen Sep 10, 2018
Hey guys, pretty easy thing I found just now. You know how you can't just overwrite HM moves whenever? Well, that's a bit annoying, isn't it? Let's change that!

Open up your trusty hex editor and go to the appropriate offset:

Spoiler:


You should see the following 16 bytes:

0F 00 13 00 39 00 46 00 94 00 F9 00 7F 00 23 01
(Just search for the above bytes if you're hacking Sapphire of LeafGreen, or better yet switch to another game.
12.%20tongue.gif
)

This is the list of HM moves that must be deleted by the move deleter and can't simply be overwritten by a new move. They are in order, by the way, which is somewhat convenient. The first two bytes are Cut's index value in little endian and hexadecimal, the second two are Fly's, third two are Surf's, and so on. Let's say you want to turn Flash into a forgettable TM. Simply change "94 00," referring to the 148th move, to "00 00," referring to a nonexistent "0th" move. Flash can now be forgotten, and it's been replaced by a throwaway move we'll never be able to use. In my case, since my FireRed hack won't have Dive as an HM, I can replace "23 01" with "00 00" instead, and suddenly...

yToqHB5.png


...Dive is treated like any other move! Overwrite it with a TM, overwrite it with a level-up move, whatever, you're now free to do that.

Do be careful and check the offset. That sequence of 16 bytes shows up 1 (Ruby) or 2 (FireRed and Emerald) other times in the ROM. Based on the bytes preceding them, I am 99% certain they are related to TMs and HMs, so check your offsets and try not to break anything. Why it only shows up 1 other time in Ruby is beyond me.

What if you want to add HM moves? I'm only going to test this for FireRed (though if you want to test it in others, please do and post your results) since I am assuming that the script is identical for all five Gen III games. Searching through the ROM for the pointer to this HM move table leads us to three offsets:

Spoiler:


I'm going to replace this offset with a new one, and I'm going to add the rest of this Bulbasaur's moveset to it alongside the HM moves. If all goes to plan, Tackle, Growl, and Leech Seed as well as existing HMs will require the move deleter. I'm going to move this table to offset A00000, so I'll need to replace the point at 0441DC with "00 00 A0 08." Next, I'm going to copy and paste those 16 bytes from earlier, but I'm also going to add the three other moves to the list. We'll have 22 bytes and the new table will look like this:

0F 00 13 00 39 00 46 00 94 00 F9 00 7F 00 23 01 21 00 2D 00 49 00
I think you might need to follow that with "FF FF" to terminate the table, but since I'm working in free space, that's already taken care of. If you just follow it with one "FF," you'll probably be turning the 255th move (Spit Up) into an unforgettable move as well as many others that follow.

Now, if we reload our save, this happens:

PpJmi3K.png


Success! We've just added three unforgettable moves to the game. You'll have to take my word for it when I say the actual HMs are still normal and annoying. ;)

I'll be honest, I don't exactly know when this would be useful, since HMs are pretty annoying and newer games have been moving further away from them. Boulders, for example, never have to be moved again once Strength is used on them once, and cuttable trees rarely block your path anymore. I generally agree with this and think it's good game design, since previous games force you to either use an HM slave or stick useless moves on your team. This was particularly bad in Black and White, where Tackle of all things became better than Cut in all possible ways. I'm trying to make HM moves interesting at least - Waterfall is Water-type Extremespeed, Strength is Normal-type Cross Chop, Rock Smash is Fighting-type Crush Claw, Flash is Bug-type, accuracy-reducing Charge Beam... - but they're still more than a bit irritating.

Knowing that we can allow non-essential HM moves to be forgotten in the field, however, is very useful. You know that feeling when you just got a nice level-up move but Fly or Flash is hogging the only free slot? It's not a good one, but it can be taken care of now.
 

mkarthick98

Tensai
44
Posts
9
Years
Very descriptive and well-written tutorial. I was wondering how this could be done, after playing Adventure Red. Nice to see its this easy.
 
37
Posts
8
Years
  • Age 27
  • Seen Sep 10, 2018
Very descriptive and well-written tutorial.

Oh, good, that's what I was aiming for! Thanks.

I'm actually surprised nobody has put together a guide like this already. It can't be a new discovery, can it? Maybe it's just difficult to search for.
 

luuma

searching for Meaning, offering HA numel
162
Posts
10
Years
I can't seem to get this working for emerald so far, but I can tell you that the bytes at 6160a4 correspond to the TM and HM names and definitely don't do anything about forgettability!
 

FSBS

Defunct
147
Posts
8
Years
  • Seen Apr 19, 2019
I did read this, but I have a question. It might be a stupid question.

So...this means HM moves are deleteable, right? And still field-useable?
 

FSBS

Defunct
147
Posts
8
Years
  • Seen Apr 19, 2019
So I tried to change all the bytes to 00 00 at the appropriate offset in Fire Red and it didn't work. What gives?
 

Crizzle

Legend
942
Posts
8
Years
  • Age 29
  • USA
  • Seen Jan 7, 2024
This post... Seems to be completely inaccurate. I never wanted to look into deletable HMs in my previous "hacking" experience and this was the 1st tutorial I saw on the subject. But this tutorial does not work. I suspect the OP's error was using Dive as an example and then assuming that would apply to the rest without researching it. Which would be strange as Dive is the HM that FireRed never actually uses.
I suspect adding HMs part works(though who would want to use that?) but the deleting does not(except for perhaps Dive). This is because 0x25E014 is not the only way the rom checks for HMs.
I could explain why this myself but this post explains it all and provides the proper(and slightly easier) way to make HMs deleteable.

If any mod is reading this, I suggest they lock/delete this thread as it misinforms. If I'm wrong, let me know.
 
Back
Top