View Single Post
Old May 28th, 2009 (06:52 AM). Edited April 15th, 2010 by hashtag.
Larsie13 Larsie13 is offline
Crystal Tier
Join Date: Oct 2006
Location: The Netherlands
Age: 24
Nature: Modest
Posts: 159
Hello everyone. I've noticed that there is a tutorial for changing the worldmap on FR/LG, but none for R/S/E (At least, none that lets you use your own tiles). So, I now give you a way to change the worldmap on Ruby, Sapphire and Emerald.
NOTE: I'm going to use the worldmap from my hack, DON'T STEAL IT! Also, I use Emerald for the course of this tutorial.

What will you need?
You will need the following things:
  • TileMolester Alternate (Google it if you don't have it, and don't use the regular TileMolester, because apparently it won't load your saved palettes.)
  • Cyclone, NTME, or another TileMap editor
  • GIMP, Paint Shop Pro, or another image editor that supports either a customizable grid, or an 8x8 grid
  • unLZ.GBA (Check HackMew's Toolbox)
  • VisualBoyAdvance, of course. (Or another emulator to test it.)

First, draw your picture, of course. I have this:

Beware that the GBA screen is 240x160 pixels, and that not all of it is accessible with the cursor when viewing the map in-game. This is the part that's accessible (within the black rectangle):

Now, you have to make a tileset of it. It can have a maximum of 256 tiles from 8x8, meaning 256x64, or 128x128 for the entire tileset. You'll probably succeed in that if you use GIMP or another program that has a customizable grid, like Paint Shop Pro (which is not free; GIMP is), and set that grid to 8x8. Also, be sure to leave out all double tiles. Meaning, if you have a lot of the same tiles, use only 1 of them in the tileset. My result:

If you have the tileset done, open Cyclone, NTME, or whatever tilemap editor you have, and make the tilemap. !!In 8BPP mode!! FR/LG use 4BPP, but Ruby, Sapphire and Emerald use 8BPP. If you don't know what a tilemap is, or how to make one, search around the Documents & Tutorials section.

NOTE: If you're having trouble making a tileset and/or tilemap:
Check here for an easy (easier) way.

Then, open up your ROM in VBA, and view the worldmap somewhere. Be it in the Pokénav, in the Fly menu, or on a map on the wall in the PC, it doesn't matter. Go to Tools > Palette viewer, and click on Save BG.

Save it as a Windows .pal file.

Then, open up TileMolester. Make a new file, with size 16384. (That's 16 KB, in case you don't know.)

Next, click View > Codec > 8bpp linear, and after that Palette > Import from > Another file, and choose the palette you saved through VBA.

Also, don't forget to give the image the same dimensions as your tileset. In my case, that's 16x16. (Just divide the width and height by 8). Do it by clicking Image > Canvas size.
Lastly, select Edit > Paste from, and select the tileset you made, and save it as a .raw file. NOTE: Before you save, make sure to expand the picture frame, so there's some room left next to the picture, and click there to deselect the image you just pasted. If you don't, TileMolester will not save the tileset, because it will still be a selection, and you'll end up with a black image. Hint: If you can still move the tileset around, it's no good. It has to be pinned down.

Now open up unLZ, and go to the worldmap tileset image; in Emerald, it's 245, 136 in Ruby, and 137 in Sapphire. At least, for me it is. If it's not there, it could be a few numbers off. You'll find it in 256 Color Mode. Go to File > Load Raw, and select the .raw file you created with TileMolester.

Click Write to ROM, and check everything as seen in below image. See how I chose offset 0xDF0000? You can choose any free offset, AS LONG AS IT'S NOT HIGHER THAN 0XE00000! Why? Because the game will start to glitch up if it is. And, don't forget that the offset has to end with 0, 4, 8 or C. (Thanks Pokepal17 for reminding me.)

Wait for the two "Ptr found at 00XXXXXX. Changed." messages, and proceed to the next image. In this case, it's 246.
Click File > Load Raw again, and this time select the tilemap you made with NTME / Cyclone / Whatever.

Click Write to ROM again, and keep everything checked that was checked, and vice versa. This time, though, you CAN repoint it to 0xE00000 or higher, it doesn't matter. What DOES matter, is the difference between the two offsets for the tileset and tilemap. Be sure to keep them at least 0x1000 bytes apart. (If the tileset is at 0xDF0000, the tilemap should be at at least 0xDF1000.) My tileset uses 0x934 bytes, so 0xA00 bytes would suffice, but just make it 0x1000. Just to be safe. Now click OK, and wait for the "Ptr found at 00XXXXXX. Changed." messages.
Now, time to test things in the emulator. If you have done everything correctly, you should get this result:

Well, that about does it. Of course, as you can see, Mauville is still on the same place as it is in R/S/E, but you can change that with Advance Map's Worldmap Editor.

Thank you for taking the time to read this, and hopefully, more people will now be able to change R/S/E's worldmap.

Go here if you want to change the worldmap you see in the Pokédex, because that one uses a different tileset and tilemap. Thanks of course to AztecFire.
Reply With Quote