Thread: Research: Diego's Miscellaneous Finds
View Single Post
Old December 19th, 2010 (12:30 PM). Edited December 7th, 2016 by Diegoisawesome.
Diegoisawesome's Avatar
Diegoisawesome Diegoisawesome is offline
Oh god the bees
Join Date: Dec 2007
Location: :noitacoL
Age: 20
Gender: Male
Nature: Naive
Posts: 1,018
As a ROM hacker, I've had to go and "customize" my ROM quite often to get it to do what I want. As a result, I've found many useful tidbits of information, and I've decided to compile them all into one useful thread. Some of these come from other people; if I forgot to credit you, please tell me!

Tile Molester Alternate "Fix"

Yeah, we've all come across this one. Tile Molester Alternate, the edited version of Tile Molester that can open Windows Palettes, cannot open a ROM more than once.

The reason is because when Tile Molester opens a ROM, it saves some settings, such as saved palettes, to an external file. This external file uses a Document Type Definition file called tmres.dtd. It saves properly; however, upon opening it, it needs the file and cannot find it in the folder, so it simply doesn't open the ROM right. This is simply because the Tile Molester hacker forgot to include that file in the download.

To fix this, open a Tile Molester download (non-Alternate), navigate to the 'resources' folder, and copy and paste the tmres.dtd from that folder into your Tile Molester Alternate's 'resources' folder.
Ta-da! Fixed.

Font Editing in FR/LG/E

The reason that practically no FireRed/LeafGreen/Emerald hack has custom font is because practically nobody has found it. When you do have it, it's simple enough to edit:

Fire Red

Open your preferred version of Tile Molester and navigate to 0x1F3100. It doesn't look like anything, am I right? Well, go to View>Codec and select 2BPP Linear, reverse-order. There's one copy of your font... but mirrored. At the moment, you'll just have to flip it when you edit it, I can't find another way to do so. Each color font uses a different copy of the font image... Strange, huh? The other images are at 0x1FF300 for black, 0x20F618 for blue, and 0x21F930 for red.

They also have separate font width tables. These are what determine how wide each letter in pixels is. The tables are at 0x1FB100 for other, 0x207300 for black, 0x217618 for blue, and 0x227930 for red.


Editing the font for Emerald is much easier because it only has two font images and two font width tables. The images are at 0x6440E4 and 0x64C2E4, and the tables are at 0x64C0E4 and 0x6542E4, respectively.

Disabling the Gender-chosen Flight Positions for Littleroot Town (Emerald)

This one is easy. There's a check in the flying routine that checks if you're flying to Littleroot. If yes, it then goes to check your gender and assigns the appropriate flight spot. To disable the check for Littleroot Town and make it act like a normal flight place, open Emerald in a hex editor, go to 0x124E62, and replace "00 28 0E D0" with "00 00 00 00".

Hacking the "Wally Catches a Pokémon" Event (Emerald)

There are four specials in that event you should be aware of: special 0x28, special 0x12F, special 0xA0, and special 0x29. special 0x28 saves your first Pokémon into memory for retrieval later, special 0x12F overwrites your first Pokémon with a specified Pokémon, special 0xA0 is the actual battle, and special 0x29 overwrites your first Pokémon with the one saved in memory. Used in that order, and without any modifications to their ASM, you'll have a generic Wally catching tutorial.
To hack it, it depends on what you want to change.

Hacking the Pokémon

Get the hex ID of your Pokémon.
If the number is 0x100 or over, then instead of overwriting the first two bytes with your Pokémon's ID, replace them with "FF 21". Then, subtract 0xFF from your Pokémon ID and follow the next instructions.

Given Pokémon

In a hex editor, navigate to 0x139472. Replace the byte there with your Pokémon ID, unless it's over 0x100, in which case you would put 0xFF there instead. Then skip over the next byte (should be 21) and replace the bytes there with "XX 31", where XX is 00 (unless your Pokémon's ID is over 100, in which case subtract 0xFF from it and put it there).

Battling Pokémon

Do the same as above, except with 0xB0870 for your address.

Hacking the Pokémon's Levels

Get the hex value for what you want the levels to be. Levels cannot exceed 255 (0xFF).

Given Pokémon

In a hex editor, navigate to 0x139482. Replace the byte there with the hex version of what you want your Pokémon's level to be.

Battling Pokémon

Do the same as above, except with 0xB0874 for your address.

Hacking the Starting Position (FireRed)

0x54A04 is the starting map. 0x54A06 is the starting map's bank.
0x54A08 is the starting X position. 0x54A00 is the starting Y position.
Have fun.

Changing the Time FireRed Stays on the Title Screen

This one was discovered by colcolstyles; kudos to him!

The 32-bit value at 0x78C1C controls how many frames the game goes through before it resets itself. There are 59.737 frames in one second. Determine how long you want the title screen to stay before resetting using that formula. (Thanks to knizz for telling me!)

Removing the Flashback System

I'm sure many of you have had weird things happen with the flashback system in FireRed. For instance, with JPAN's overworld system hack, you would get the original sprite; another example would be when it would say strange things when you left a gym. Well, I have found a way to make it act as if you never did any flashback-worthy events.

To patch, navigate to address 0x110F54 and replace "00 28 0F D0" with "00 1C 0F E0". All this does is disable the check for flashback-worthy events, and simply loads the save like R/S/E.

"Porting" the Normal Bicycle from FRLG to Emerald

To make the Mach Bike have the Acro Bike's speed but not its special moves (essentially turning it into FRLG's bike), navigate to 0x1191C8 and replace 4C with 68. Simple!
If you want to make the bike have the bike bell sound when getting on, then navigate to 0xFD35E and overwrite the bytes there with "06 20 8E F7 AE FC 00 06 00 28 06 D1 0B 20 A6 F7 1A FA 00 00 00 00 00 00 00 00 02 20". Not as stupidly simple as the first part, but still easy enough to do.

Well, that's what I have. If you have anything to add, just reply and I'll be glad to add it in.
I hope this thread is a handy resource for anyone that needs it.

My other resources:
My Website
diegoisawesome's MEGA-HUGE XSE Scripting Tutorial
diegoisawesome's Miscellaneous Finds
The Ruins of Alph Puzzles
Diego's Miscellaneous Patches
GBA Intro Manager
The Secret Sauce: Triple-Layer Tiles
Reply With Quote