• 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?".
  • Forum moderator applications are now open! Click here for details.
  • 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.

Basics of Hex Editing

miksy91

Dark Energy is back in action! ;)
1,480
Posts
15
Years
Now, some of you might think "nah, I won't bother reading this because it's hard an all...".
Really, there isn't anything magical about editing data with a hex editor. The only skill you really need is to know how to convert numbers of decimal system into hexadecimal system. You can additionally use Calculator to do this ;)

There are 16 different numbers in hexadecimal system whileas there are only 10 in the "normal" number system (0, 1, 2,...8, 9).
In hexadecimal system, those are: 0, 1, 2, ..., 8, 9, A, B, C, D, E, F.
After F it goes to 10, 11, 12,.., 1E, 1F, 20 etc.

Doesn't sound too hard now does it ?

Now that you know what different numbers in hexadecimal system mean, it's time to download a hex editor ! Hex editor is a tool that can be used for hacking any game you desire. By opening the ROM with it, it shows what the ROM looks like - it's full of bytes, nothing else. So, hacking is actually only changing bytes.
GoldFinger is a fine hex editor which I use myself, you can download any hex editor you want to but this one is kinda user-friendly.
Get it here: GoldFinger

So do as you normally do when hacking a game.
1) Open the ROM with the tool (in this case your hex editor).
2) Edit the data you wish to edit.

However, editing the data isn't as easy as you may have gotten used to.
The problem is that first you've to locate the offset, where the data you wish to edit, is located.

Now as a simple example, let's change the specifics of a person in Viridian City in Pokemon FireRed. Open AdvanceMap and go to the event data of the person next to the pokecenter (on the right).

Below, you'll see its offset is at 3B4EDC.
Now, open the same Pokemon FireRed ROM with a hex editor.
Under "Edit" click Goto and type in the offset of the person.

You should see this:

person0.jpg


Here, you can see that the "real" data of the person we're editing is 06 12 00 00 21 00 1A 00 03 03 20 00 00 00 00 00 8F 5A 16 08...

Now, let's take another look at the data of the person with AdvanceMap.

[Person event no.] = 6 (refers to 06)
[Picture no.] = 18 (12, notice that 12 in hexadecimal is 18 in decimal)
[Unknown] = 00 00 (00 00)
[X position] = 21 (21 00, if it would be 21 01, the person would be at 1 * FF + 21 = 120)
[Y position] = 1A (1A 00)
[Unknown] = 03 (03)
[Movement type] = "Walk up and down" (03, notice that this is the 4th in the list (00, 01, 02, 03))
[Movement] = 20 (20)
[Unknown] = 00 (00)
[Trainer] = No (00, Yes possibly 01 ?)
[Unknown] = 00 (00)
[View radius] = 00 00 (00 00)
[Script offset] = $165A8F (8F 5A 16 08, 08 is still a part of the script pointer and shouldn't be changed unless you know what you're doing. See shiny quagsire's definition for this a couple of posts below.)

The following bytes are 00's as well...

It seems Lu-Ho wanted to keep X and Y location bytes still in hexadecimal whileas Picture no. bytes are in decimal instead.

But yeah, now that you've read it through don't tell me it was that hard ;)
Scripting is a lot harder if done the "hardcore" way.

All in all, editing trainers or doing some mapping with a hex editor isn't any harder than this - it's only changing bytes from one to another.
 
Last edited:

Sawakita

Not Invented Here
181
Posts
13
Years
  • Age 34
  • Seen Nov 17, 2019
Hex editor is a tool that can be used for hacking any game you desire (or specifically a game made in hexadecimal system, pokemon games use this system).
Saying that pokemon games "use hex system" is just incorrect; in fact a hex editor is just a program that allows to view internal structure of any file (yes, you can open any file with a hex editor), and all those hex numbers you see are just the bytes that form the file.
Probably pokemon games were made in C, or similar, then compiled and assembled, and the result is machine language, i.e. a long long string of bits, some of those are ON and some are OFF.
And, when the file is loaded, the CPU (or, in our case, the emulated cpu) interprets that sequence of bits accordingly to its own internal architecture.

So it's just that electronic softwares uses this system.
 

psychicboy

Hacking is all that matters...
538
Posts
14
Years
Starting location of what, exactly? It's quite difficult to locate any data with Hex Editing alone. You need to use it in conjunction with other tools.
Well its like this. After applying JPan's patch to a lean FireRed Rom, SMCA no longer works. Therefore I cannot change my starting location using that tool anymore. So how would I change this using Hex?
 

Shiny Quagsire

I'm Still Alive, Elsewhere
697
Posts
14
Years
miksy91 said:
[???] = 08 (no idea where this comes from)

This is actually still part of the script pointer. In the ROM, there are certain section of RAM. 08000000 is the ROM. So the full pointer for the script would be 08165A8F. If it were in an expanded ROM, the 08 would be 09, and so on.

As for the rest of the tutorial, it's a pretty good guide. I've always chuckled at people that want to ASM hack, but can't hex edit, so I'll point a few questions here if I have to. ;)
 

miksy91

Dark Energy is back in action! ;)
1,480
Posts
15
Years
Well its like this. After applying JPan's patch to a lean FireRed Rom, SMCA no longer works. Therefore I cannot change my starting location using that tool anymore. So how would I change this using Hex?
I'd ask the creator of the tool for the offset of starting location.
Or, you could make an ips-patch for the change of starting location only.

Besides, I've "enchanced" the first post a little bit :)
 
Last edited:

shinyabsol1

Pokemon DarkJasper!?
333
Posts
13
Years
  • Seen Nov 23, 2022
Is that download for the Gold Finger hex editor safe? Mcafee gives it some questionable reviews...
 

miksy91

Dark Energy is back in action! ;)
1,480
Posts
15
Years
Is that download for the Gold Finger hex editor safe? Mcafee gives it some questionable reviews...
It should be safe alright, at least I haven't gotten any viruses from site romhacking(dot)net.

Besides, you can always use google to search for any other hex editor you like. I've heard some people prefer for instance WindHex.
 

shinyabsol1

Pokemon DarkJasper!?
333
Posts
13
Years
  • Seen Nov 23, 2022
It should be safe alright, at least I haven't gotten any viruses from site romhacking(dot)net.

Besides, you can always use google to search for any other hex editor you like. I've heard some people prefer for instance WindHex.

Thanks for the reassurance. The reason that I'm interested in this specific editor is because it sounds simpler than others I have heard of. I would prefer not to get a hex editor off of some random website on google because you never know if it is safe or not. Its nice to try a site that can be recommended by others. :)
 
12
Posts
6
Years
  • Age 20
  • Seen Jun 27, 2022
I want to edit forest wild pokemon. So please help. I want to do it with hex editer & I want to hack Super Theta Emerald.
 
2
Posts
4
Years
  • Age 29
  • Seen Mar 25, 2023
Now, some of you might think "nah, I won't bother reading this because it's hard an all...".
Really, there isn't anything magical about editing data with a hex editor. The only skill you really need is to know how to convert numbers of decimal system into hexadecimal system. You can additionally use Calculator to do this ;)

There are 16 different numbers in hexadecimal system whileas there are only 10 in the "normal" number system (0, 1, 2,...8, 9).
In hexadecimal system, those are: 0, 1, 2, ..., 8, 9, A, B, C, D, E, F.
After F it goes to 10, 11, 12,.., 1E, 1F, 20 etc.

Doesn't sound too hard now does it ?

Now that you know what different numbers in hexadecimal system mean, it's time to download a hex editor ! Hex editor is a tool that can be used for hacking any game you desire. By opening the ROM with it, it shows what the ROM looks like - it's full of bytes, nothing else. So, hacking is actually only changing bytes.
GoldFinger is a fine hex editor which I use myself, you can download any hex editor you want to but this one is kinda user-friendly.
Get it here: GoldFinger

So do as you normally do when hacking a game.
1) Open the ROM with the tool (in this case your hex editor).
2) Edit the data you wish to edit.

However, editing the data isn't as easy as you may have gotten used to.
The problem is that first you've to locate the offset, where the data you wish to edit, is located.

Now as a simple example, let's change the specifics of a person in Viridian City in Pokemon FireRed. Open AdvanceMap and go to the event data of the person next to the pokecenter (on the right).

Below, you'll see its offset is at 3B4EDC.
Now, open the same Pokemon FireRed ROM with a hex editor.
Under "Edit" click Goto and type in the offset of the person.

You should see this:

person0.jpg


Here, you can see that the "real" data of the person we're editing is 06 12 00 00 21 00 1A 00 03 03 20 00 00 00 00 00 8F 5A 16 08...

Now, let's take another look at the data of the person with AdvanceMap.

[Person event no.] = 6 (refers to 06)
[Picture no.] = 18 (12, notice that 12 in hexadecimal is 18 in decimal)
[Unknown] = 00 00 (00 00)
[X position] = 21 (21 00, if it would be 21 01, the person would be at 1 * FF + 21 = 120)
[Y position] = 1A (1A 00)
[Unknown] = 03 (03)
[Movement type] = "Walk up and down" (03, notice that this is the 4th in the list (00, 01, 02, 03))
[Movement] = 20 (20)
[Unknown] = 00 (00)
[Trainer] = No (00, Yes possibly 01 ?)
[Unknown] = 00 (00)
[View radius] = 00 00 (00 00)
[Script offset] = $165A8F (8F 5A 16 08, 08 is still a part of the script pointer and shouldn't be changed unless you know what you're doing. See shiny quagsire's definition for this a couple of posts below.)

The following bytes are 00's as well...

It seems Lu-Ho wanted to keep X and Y location bytes still in hexadecimal whileas Picture no. bytes are in decimal instead.

But yeah, now that you've read it through don't tell me it was that hard ;)
Scripting is a lot harder if done the "hardcore" way.

All in all, editing trainers or doing some mapping with a hex editor isn't any harder than this - it's only changing bytes from one to another.

I'm currently working on a rom hack with Pokemon Crystal. How do I find the offset addresses to edit the trainers' DVs?
 
Back
Top