Introduction: Edit GBA Pokémon Title Screen Sprite

About: If it ain't broken, take it apart and fix it.

After defeating the Elite Four again on Pokémon Yellow a few days ago, I wondered if there had been a remake of the game which introduced me to the world of Pokémon. Unfortunately there wasn't, but by looking around I was introduced to a new world: ROM hacking. I've known Pokémon for about 6 years now, and not once had it crossed my mind that there were people out there that took Pokémon ROMs (and others, too) and modified them to make them look differently, to change the game's map, make their own storyline, even add their own Pokémon to the game. When I was searching for a remake of Pokémon Yellow, I found a few incomplete attempts to recreate the best Pokémon game that ever existed (in my eyes, at least) such as Linkandzelda's "proof of concept" up to Pewter city [link]. Out of all of them, it's the best I've seen, but it only goes up to the the first badge, and there hasn't been any development in nearly 2 years. So, as with with many things, if you want things done your way, do them yourself. That's how I started hacking my own Pokémon ROMs.

I plan to make many Instructables on Pokémon ROM hacking. This is the first of them, which explains how to edit the Pokémon sprite on the title screen. This first Instructable does not apply to Pokémon Ruby/Sapphire/Emerald, as they do not have a Pokémon sprite on their title screen.

Step 1: Base ROM

First of all, you need to choose your base ROM. You basically have 2 choices: a Hoenn-based ROM, or a Kanto-based ROM. For a Hoenn-based ROM, you're better off choosing Pokémon Emerald, as it has the best support for modding, and for a Kanto-based ROM, you're better off choosing Pokémon Fire Red. For my Pokémon Yellow remake, I chose Pokémon Fire Red, as they both use the same Kanto region.

Step 2: Choose Your Sprite

First of all, you are going to have to choose a Pokémon sprite that you will use to replace the original Pokémon, a Charizard in my case. I chose a Mew. I recommend getting a sprite from Pokémon Database. They have nearly all the Pokémon sprites from mostly every game. The only ones missing seem to be the Mega Evolutions (at the time of writing). If you get a sprite from elsewhere or you make your own, keep in mind that both the height and width of the image must be divisible by 8, and it's recommendable that the overall size isn't bigger than 128x128.

Step 3: Decrease Color Depth

Before anything, you must decrease the color depth of your sprite down to 16 colors. For this, I recommend using IrfanView [link], but if you feel comfortable doing this in other image editing software, feel free to do so. Once you open your image in IrfanView, click on "Image" in the header. In the dropdown menu, select the option "Decrease Color Depth". A windows will pop up. Select "16 Colors", deselect "Use Floyd-Steinberg dithering", and click OK. If "16 Colors" is greyed out, that means that your sprite is already in 16 colors (or less), which means you can skip this step.

Step 4: Edit the Palette

Now you need to set the background of the image of your sprite to a color that is not present in the sprite itself. To do so, click on the "Image" option once again, go down and select "Palette", and click on "Edit Palette". A window will pop up with 16 colorful boxes in it. Double-click on the first box and chose a color not present in your sprite. I chose bright fluorescent green to be on the safe side. Once you do that, click OK, and then OK again. You now need to export the palette of this sprite. Select the "Palette" option in the "Image" dropdown, and click on export palette. Remember where you save this .pal file, as you will need it later on.

Step 5: Create the Tile Map

To create the tile map for your sprite, you'll need to use a program named NTME, which stands for Nameless Tile Map Editor. You can get it from here. Once open, in the header, click "File", then on "Open". Navigate to the 16-color edited sprite and open it. Now, in the bottom right corner of NTME, under "Preset Sizes", choose "FR/LG TS". NTME may freeze for a moment. In that case, make sure the "FR/LG TS" is still selected. Once that is done, under "Tile Selection", click on both + repetitively until the whole sprite is selected. Now, on the bottom of the NTME window, click on the brown "D" in the small line of letters and numbers. Now, in the space under Tile Map, click in the area you want your sprite to appear in-game to place it there. Once it's in place click on "File" and click on "Save". Save it to a location you can can access as you will need it later. The file will be saved as a .raw file.

Step 6: Change Sprite

To insert the new sprite in the ROM, you need a program that can manage data compressed with the LZ77 algorithm. For this I recommend using unLZ-GBA, which can be obtained here. Once unLZ-GBA is open, click on "Open File" and navigate to your ROM. It may take some time to open it. Once it finished opening the ROM, next to the "Go To" button, type in 2011. That is the current sprite. Click on "Import" and navigate to the 16-colored edited Pokémon sprite. Now click on "Write to ROM". You should have the top 2 options ticked and the bottom 2 unticked. After that, click on the "Next" button, or type in 2012. Click on "File" and select "Load RAW". Navigate to the tile map you saved earlier. Once again, click on "Write to ROM".

Step 7: UnLZ-GBA Error

If you get an error when writing to ROM which says that it's too big, you will need to find space for it. For this use Free Space Finder. You can get it from here. When you get an error in unLZ-GBA, copy down the hex number displayed in the error box, which in my case is IC8. Open up Free Space Finder, and load your ROM from the "File" tab. Now, in the bottom right corner in the hex box, write in the number the error box displayed. In the box above it, it will show the number in decimal. Copy the decimal number and paste it in the box next to "Needed Bytes". Under that, make sure "Search from the beginning of the ROM" is selected, then click "Search". After that click "Copy". In unLZ-GBA, click "Write to ROM" again. Tick the "Automatically fix pointers" option, and in the first text box, delete everything, then type in two 0 and press Ctrl+V. Once that's done you can click OK.

Step 8: 1st Verification

Load up your ROM. Check if the sprite has the correct shape. Unless you used the same palette as the original Pokémon sprite, the colors will be messed up. The next step fixes that.

Step 9: Change Palette

Open up APE. If you don't have it, you can get it from here. After opening your ROM in APE, select "Load from offset" and type in the box 00EAD5E8. Click "Load". The first set of 16 boxes will show the current palette of 16 colors. Next to the bottom blank boxes, click on the icon with a blue arrow. A Windows Explorer window will pop up. In the file type box select "PaintShop Palette". Once you open it you should get an error 13. Don't worry. Just take a screenshot, then open up APE again, load the ROM again and type in the offset again, but instead of importing the palette, just type in the values in by hand from the screenshot. Now click "Replace". To check if it worked, click "Load". If the first 16 boxes changed to match the second 16 boxes, you're good to go.

Step 10: Final Result

Open up your ROM and check if the new sprite has the correct colors. If all is good, you can start playing your edited ROM.

Fandom Contest

Participated in the
Fandom Contest