Advertiser Content
Seen September 9th, 2018
Posted September 9th, 2018
38 posts
4 Years
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:

Ruby: 20831A

FireRed: 25E014

Emerald: 329EEA

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. )

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...

...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:

Ruby: 040A24

FireRed: 0441DC

Emerald: 06E828

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:

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.


blu rass

Age 18
rip x
Seen 1 Day Ago
Posted 4 Weeks Ago
765 posts
5.6 Years
Can you still teach the HM's as meny times as you want without them disappearing from the TM bag?
no reason you shouldn't be able to :P
this doesn't edit the usage at all, just makes a table refer to nonexistent entries
am i cool yet


searching for Meaning, offering HA numel

Age 22
Stage Left
Seen November 8th, 2018
Posted August 16th, 2018
157 posts
6 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!
Play Altered Emerald here!

Thanks to DizzyEgg and the EBEU team for the battle engine, features, and dynamic expansion, lu-ho for a-map, gamer2020 for pge, Microsoft Windows for Task Manager, about 5 different hex editors, Chaos rush for sprites and an animation disable tutorial, Spherical Ice for several excellent asm routines, Neon Skylar for Pokemon data past gen 3, YAPE while it lasted, Scizz, Knizz, darthatron's numerous tools, hackmew, Chronosplit and yall for playing.

Altered Emerald is off on break for a bit now. This patch is looking really nice and polished, so it's staying up for a while.



Age 24
Seen 5 Days Ago
Posted July 21st, 2019
945 posts
4.6 Years
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.
Pokemon Savage Silver
Check out the crappy hacks that I made:

Credit to Corazon(or whatever he calls himself now) for banner.
Pokemon CAWPS
Pokemon Outlaw
Advertiser Content