View Single Post
Old March 4th, 2012 (10:06 AM). Edited February 8th, 2013 by Quickster.
Quickster's Avatar
Quickster Quickster is offline
Dream or Drop?
    Join Date: Oct 2007
    Gender: Male
    Nature: Quiet
    Posts: 351
    Creating new Overworld palettes in Fire Red!
    This is my first tutorial, and I want to make it as simple as possible and easy to follow. Thanks to JPAN for his hacked engine and metapod23 for his overworld tutorial which helped me understand everything better.

    Tools needed for this tutorial:
    Pokemon Fire Red Rom (Unmodified and modified)
    Pokemon Fire Red Hacked Engine
    Hex Editor – I will be using Translhextion.
    Free Space Finder
    Overworld Editor: Rebirth Edition
    Nameless Sprite Editor (I will be using classic)
    Lunar IPS
    (For HackMew's Tools, I suggest downloading PGE)

    I also suggest having a backup of your rom.

    Step 1-Applying the hacked engine.
    If you’re reading this, I hope you know how to do this. If not, click here and look at the alternate method of working with patches.

    Step 2 – Understanding the data.
    As JPAN states in his guide, a palette pointer consists of PPPPPPPP nn110000, with P = palette pointer and n = palette number. For example, if I wanted to write a pointer to a palette located at 0x800000 with a palette number of 32, I would use this.

    00008008 20110000

    When typing pointers, you need to break the original address into three blocks of two and rearrange them like so. 80 00 00 -> 00 00 80 80. You had the 80 because it is located within the rom.

    20 is actually 32 in hex, so make sure you convert. I would use the calculator that came with your computer.

    Step 3 – Finding the free space needed
    In the JPAN rom, the palette table is located at 0x1A2400, giving you room for 256 pointers, so that should be enough.

    Each palette takes up 64 bytes. So multiply 64 by the number of palettes you will be inserting.

    EX. 64 * 12 = 768

    You would need 768 bytes of free space to insert 12 new palettes. But for simplicity, I will be adding 1 so I need 64 bytes of free space.

    I will be using 0x800000.

    Step 4 – Editing Palette
    Now my way is a sort of a hassle, so if anyone knows an easier way, please tell me.

    Open your unmodified rom in NSE. Then edit a palette to your liking.

    I just edit the palette of the hero, as it is the first sprite. Once you’re done we can finally move into Hex! Take note that the palette offset is at $H35B968 or x35B968.

    Step 5 – Hex editing
    Remember that offset we found for free space, well were going to use it! Open you modified rom into a hex editor and navigate to 0x1A2400.

    Go to the end of the table and insert your pointer before the 00000000 FF110000 as shown. I just rewrote the ending afterwards. Make sure your table ends with that or else in will NOT work at all.


    Now open your unmodified rom in a hex editor. Navigate to the palette offset and copy 64 bytes.
    Go back to your hex editor with the modified rom and navigate to 0x800000 and paste the data.



    Step 6 – Editing the sprites.
    Say you wanted to edit the male hero from Ruby’s sprite. See what he sprite offsett is in NSE and write it down. 0x3A3C64

    Go to that address in the modified rom. The palette number is the third byte over. So change that to a 20.


    Now open your Overworld Editor Rebirth sprites.ini file. Go down to the English Fire red and change the SpritePaletteHeader pointer to 1A2400.


    Open the rom in Overworld Editor Rebirth and go to Ruby hero sprite. As you can see, the palette number is now 32. Edit away. Im just inserting the male Fire Red hero since it will look nice.

    Step 7 – Fixing a glitch!
    Follow these instructions to make it work.

    That is a problem I didn't encounter until mentioned, as I always tested with OW palette 0 and A (no reason why, though, just happened). As such, I didn't know about the "forced load" on start that only happens once per map. This should fix it.
    Using a hex editor, replace the following values
    starting at 0x0805E5E0, place 70 88 09 07 09 0f 00 29 01 d0 05 e0,
    then at 0x0805e5f8 place 03 e0

    Also, another "problem" arises from the mist weather. palette slot 0x1, 0x6 to 0x9 and 0xb are reserved for the mist weather effect. If you don't plan on using it on your hack, and need the extra palettes, you can use them after disabling the effect.
    at 0x0805f680 place 22 e0 (for palette slots 0x6-0x9 + 0xb),
    at 0x0805f60c place 20 e0 (for palette slot 0x1, the player mist slot).
    If you wish to have the player enter misty areas, do not apply the last one.
    As a side note, the offset you should use is whatever the offset is but drop the 0x08. Sorry for the confusion. For example; 0x5E5E0.

    And now you are done! Here is the finished product.

    If you have any questions, have suggestions about thread cleanliness, or this tutorial is unclear, be sure to say something! I hope I was able to help!
    I laugh looking at this.

    But sometimes I want to come back to it...

    Reply With Quote